| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 | 
							- 'use strict';
 
- Object.defineProperty(exports, '__esModule', {
 
-   value: true
 
- });
 
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 
- var _postcss = require('postcss');
 
- var _postcss2 = _interopRequireDefault(_postcss);
 
- var _cssSelectorTokenizer = require('css-selector-tokenizer');
 
- var _cssSelectorTokenizer2 = _interopRequireDefault(_cssSelectorTokenizer);
 
- var hasOwnProperty = Object.prototype.hasOwnProperty;
 
- function getSingleLocalNamesForComposes(selectors) {
 
-   return selectors.nodes.map(function (node) {
 
-     if (node.type !== 'selector' || node.nodes.length !== 1) {
 
-       throw new Error('composition is only allowed when selector is single :local class name not in "' + _cssSelectorTokenizer2['default'].stringify(selectors) + '"');
 
-     }
 
-     node = node.nodes[0];
 
-     if (node.type !== 'nested-pseudo-class' || node.name !== 'local' || node.nodes.length !== 1) {
 
-       throw new Error('composition is only allowed when selector is single :local class name not in "' + _cssSelectorTokenizer2['default'].stringify(selectors) + '", "' + _cssSelectorTokenizer2['default'].stringify(node) + '" is weird');
 
-     }
 
-     node = node.nodes[0];
 
-     if (node.type !== 'selector' || node.nodes.length !== 1) {
 
-       throw new Error('composition is only allowed when selector is single :local class name not in "' + _cssSelectorTokenizer2['default'].stringify(selectors) + '", "' + _cssSelectorTokenizer2['default'].stringify(node) + '" is weird');
 
-     }
 
-     node = node.nodes[0];
 
-     if (node.type !== 'class') {
 
-       // 'id' is not possible, because you can't compose ids
 
-       throw new Error('composition is only allowed when selector is single :local class name not in "' + _cssSelectorTokenizer2['default'].stringify(selectors) + '", "' + _cssSelectorTokenizer2['default'].stringify(node) + '" is weird');
 
-     }
 
-     return node.name;
 
-   });
 
- }
 
- var processor = _postcss2['default'].plugin('postcss-modules-scope', function (options) {
 
-   return function (css) {
 
-     var generateScopedName = options && options.generateScopedName || processor.generateScopedName;
 
-     var exports = {};
 
-     function exportScopedName(name) {
 
-       var scopedName = generateScopedName(name, css.source.input.from, css.source.input.css);
 
-       exports[name] = exports[name] || [];
 
-       if (exports[name].indexOf(scopedName) < 0) {
 
-         exports[name].push(scopedName);
 
-       }
 
-       return scopedName;
 
-     }
 
-     function localizeNode(node) {
 
-       var newNode = Object.create(node);
 
-       switch (node.type) {
 
-         case 'selector':
 
-           newNode.nodes = node.nodes.map(localizeNode);
 
-           return newNode;
 
-         case 'class':
 
-         case 'id':
 
-           var scopedName = exportScopedName(node.name);
 
-           newNode.name = scopedName;
 
-           return newNode;
 
-       }
 
-       throw new Error(node.type + ' ("' + _cssSelectorTokenizer2['default'].stringify(node) + '") is not allowed in a :local block');
 
-     }
 
-     function traverseNode(node) {
 
-       switch (node.type) {
 
-         case 'nested-pseudo-class':
 
-           if (node.name === 'local') {
 
-             if (node.nodes.length !== 1) {
 
-               throw new Error('Unexpected comma (",") in :local block');
 
-             }
 
-             return localizeNode(node.nodes[0]);
 
-           }
 
-         /* falls through */
 
-         case 'selectors':
 
-         case 'selector':
 
-           var newNode = Object.create(node);
 
-           newNode.nodes = node.nodes.map(traverseNode);
 
-           return newNode;
 
-       }
 
-       return node;
 
-     }
 
-     // Find any :import and remember imported names
 
-     var importedNames = {};
 
-     css.walkRules(function (rule) {
 
-       if (/^:import\(.+\)$/.test(rule.selector)) {
 
-         rule.walkDecls(function (decl) {
 
-           importedNames[decl.prop] = true;
 
-         });
 
-       }
 
-     });
 
-     // Find any :local classes
 
-     css.walkRules(function (rule) {
 
-       var selector = _cssSelectorTokenizer2['default'].parse(rule.selector);
 
-       var newSelector = traverseNode(selector);
 
-       rule.selector = _cssSelectorTokenizer2['default'].stringify(newSelector);
 
-       rule.walkDecls(/composes|compose-with/, function (decl) {
 
-         var localNames = getSingleLocalNamesForComposes(selector);
 
-         var classes = decl.value.split(/\s+/);
 
-         classes.forEach(function (className) {
 
-           var global = /^global\(([^\)]+)\)$/.exec(className);
 
-           if (global) {
 
-             localNames.forEach(function (exportedName) {
 
-               exports[exportedName].push(global[1]);
 
-             });
 
-           } else if (hasOwnProperty.call(importedNames, className)) {
 
-             localNames.forEach(function (exportedName) {
 
-               exports[exportedName].push(className);
 
-             });
 
-           } else if (hasOwnProperty.call(exports, className)) {
 
-             localNames.forEach(function (exportedName) {
 
-               exports[className].forEach(function (item) {
 
-                 exports[exportedName].push(item);
 
-               });
 
-             });
 
-           } else {
 
-             throw decl.error('referenced class name "' + className + '" in ' + decl.prop + ' not found');
 
-           }
 
-         });
 
-         decl.remove();
 
-       });
 
-       rule.walkDecls(function (decl) {
 
-         var tokens = decl.value.split(/(,|'[^']*'|"[^"]*")/);
 
-         tokens = tokens.map(function (token, idx) {
 
-           if (idx === 0 || tokens[idx - 1] === ',') {
 
-             var localMatch = /^(\s*):local\s*\((.+?)\)/.exec(token);
 
-             if (localMatch) {
 
-               return localMatch[1] + exportScopedName(localMatch[2]) + token.substr(localMatch[0].length);
 
-             } else {
 
-               return token;
 
-             }
 
-           } else {
 
-             return token;
 
-           }
 
-         });
 
-         decl.value = tokens.join('');
 
-       });
 
-     });
 
-     // Find any :local keyframes
 
-     css.walkAtRules(function (atrule) {
 
-       if (/keyframes$/.test(atrule.name)) {
 
-         var localMatch = /^\s*:local\s*\((.+?)\)\s*$/.exec(atrule.params);
 
-         if (localMatch) {
 
-           atrule.params = exportScopedName(localMatch[1]);
 
-         }
 
-       }
 
-     });
 
-     // If we found any :locals, insert an :export rule
 
-     var exportedNames = Object.keys(exports);
 
-     if (exportedNames.length > 0) {
 
-       (function () {
 
-         var exportRule = _postcss2['default'].rule({ selector: ':export' });
 
-         exportedNames.forEach(function (exportedName) {
 
-           return exportRule.append({
 
-             prop: exportedName,
 
-             value: exports[exportedName].join(' '),
 
-             raws: { before: '\n  ' }
 
-           });
 
-         });
 
-         css.append(exportRule);
 
-       })();
 
-     }
 
-   };
 
- });
 
- processor.generateScopedName = function (exportedName, path) {
 
-   var sanitisedPath = path.replace(/\.[^\.\/\\]+$/, '').replace(/[\W_]+/g, '_').replace(/^_|_$/g, '');
 
-   return '_' + sanitisedPath + '__' + exportedName;
 
- };
 
- exports['default'] = processor;
 
- module.exports = exports['default'];
 
 
  |