123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- "use strict";
- var _postcss = require("postcss");
- var _postcss2 = _interopRequireDefault(_postcss);
- var _lodash = require("lodash.camelcase");
- var _lodash2 = _interopRequireDefault(_lodash);
- var _genericNames = require("generic-names");
- var _genericNames2 = _interopRequireDefault(_genericNames);
- var _unquote = require("./unquote");
- var _unquote2 = _interopRequireDefault(_unquote);
- var _parser = require("./css-loader-core/parser");
- var _parser2 = _interopRequireDefault(_parser);
- var _loader = require("./css-loader-core/loader");
- var _loader2 = _interopRequireDefault(_loader);
- var _generateScopedName = require("./generateScopedName");
- var _generateScopedName2 = _interopRequireDefault(_generateScopedName);
- var _saveJSON = require("./saveJSON");
- var _saveJSON2 = _interopRequireDefault(_saveJSON);
- var _behaviours = require("./behaviours");
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
- const PLUGIN_NAME = "postcss-modules";
- function getDefaultScopeBehaviour(opts) {
- if (opts.scopeBehaviour && (0, _behaviours.isValidBehaviour)(opts.scopeBehaviour)) {
- return opts.scopeBehaviour;
- }
- return _behaviours.behaviours.LOCAL;
- }
- function getScopedNameGenerator(opts) {
- const scopedNameGenerator = opts.generateScopedName || _generateScopedName2.default;
- if (typeof scopedNameGenerator === "function") return scopedNameGenerator;
- return (0, _genericNames2.default)(scopedNameGenerator, {
- context: process.cwd(),
- hashPrefix: opts.hashPrefix
- });
- }
- function getLoader(opts, plugins) {
- const root = typeof opts.root === "undefined" ? "/" : opts.root;
- return typeof opts.Loader === "function" ? new opts.Loader(root, plugins) : new _loader2.default(root, plugins);
- }
- function isGlobalModule(globalModules, inputFile) {
- return globalModules.some(regex => inputFile.match(regex));
- }
- function getDefaultPluginsList(opts, inputFile) {
- const globalModulesList = opts.globalModulePaths || null;
- const exportGlobals = opts.exportGlobals || false;
- const defaultBehaviour = getDefaultScopeBehaviour(opts);
- const generateScopedName = getScopedNameGenerator(opts);
- if (globalModulesList && isGlobalModule(globalModulesList, inputFile)) {
- return (0, _behaviours.getDefaultPlugins)({
- behaviour: _behaviours.behaviours.GLOBAL,
- generateScopedName,
- exportGlobals
- });
- }
- return (0, _behaviours.getDefaultPlugins)({
- behaviour: defaultBehaviour,
- generateScopedName,
- exportGlobals
- });
- }
- function isOurPlugin(plugin) {
- return plugin.postcssPlugin === PLUGIN_NAME;
- }
- function dashesCamelCase(string) {
- return string.replace(/-+(\w)/g, (_, firstLetter) => firstLetter.toUpperCase());
- }
- module.exports = (opts = {}) => {
- return {
- postcssPlugin: PLUGIN_NAME,
- OnceExit(css, { result }) {
- return _asyncToGenerator(function* () {
- const getJSON = opts.getJSON || _saveJSON2.default;
- const inputFile = css.source.input.file;
- const pluginList = getDefaultPluginsList(opts, inputFile);
- const resultPluginIndex = result.processor.plugins.findIndex(function (plugin) {
- return isOurPlugin(plugin);
- });
- if (resultPluginIndex === -1) {
- throw new Error('Plugin missing from options.');
- }
- const earlierPlugins = result.processor.plugins.slice(0, resultPluginIndex);
- const loaderPlugins = [...earlierPlugins, ...pluginList];
- const loader = getLoader(opts, loaderPlugins);
- const fetcher = function fetcher(file, relativeTo, depTrace) {
- const unquoteFile = (0, _unquote2.default)(file);
- const resolvedResult = typeof opts.resolve === 'function' && opts.resolve(unquoteFile);
- const resolvedFile = resolvedResult instanceof Promise ? resolvedResult : Promise.resolve(resolvedResult);
- return resolvedFile.then(function (f) {
- return loader.fetch.call(loader, `"${f || unquoteFile}"`, relativeTo, depTrace);
- });
- };
- const parser = new _parser2.default(fetcher);
- yield (0, _postcss2.default)([...pluginList, parser.plugin()]).process(css, {
- from: inputFile
- });
- const out = loader.finalSource;
- if (out) css.prepend(out);
- if (opts.localsConvention) {
- const isFunc = typeof opts.localsConvention === "function";
- parser.exportTokens = Object.entries(parser.exportTokens).reduce(function (tokens, [className, value]) {
- if (isFunc) {
- tokens[opts.localsConvention(className, value, inputFile)] = value;
- return tokens;
- }
- switch (opts.localsConvention) {
- case "camelCase":
- tokens[className] = value;
- tokens[(0, _lodash2.default)(className)] = value;
- break;
- case "camelCaseOnly":
- tokens[(0, _lodash2.default)(className)] = value;
- break;
- case "dashes":
- tokens[className] = value;
- tokens[dashesCamelCase(className)] = value;
- break;
- case "dashesOnly":
- tokens[dashesCamelCase(className)] = value;
- break;
- }
- return tokens;
- }, {});
- }
- result.messages.push({
- type: "export",
- plugin: "postcss-modules",
- exportTokens: parser.exportTokens
- });
- // getJSON may return a promise
- return getJSON(css.source.input.file, parser.exportTokens, result.opts.to);
- })();
- }
- };
- };
- module.exports.postcss = true;
|