UNPKG

3.7 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = void 0;
7
8var _path = require("path");
9
10var _fs = require("fs");
11
12var _postcss = _interopRequireDefault(require("postcss"));
13
14var _genericNames = _interopRequireDefault(require("generic-names"));
15
16var _postcssModulesExtractImports = _interopRequireDefault(require("postcss-modules-extract-imports"));
17
18var _postcssModulesLocalByDefault = _interopRequireDefault(require("postcss-modules-local-by-default"));
19
20var _postcssModulesParser = _interopRequireDefault(require("postcss-modules-parser"));
21
22var _postcssModulesScope = _interopRequireDefault(require("postcss-modules-scope"));
23
24var _postcssModulesValues = _interopRequireDefault(require("postcss-modules-values"));
25
26function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
28const getFiletypeOptions = (cssSourceFilePath, filetypes) => {
29 const extension = cssSourceFilePath.substr(cssSourceFilePath.lastIndexOf('.'));
30 const filetype = filetypes ? filetypes[extension] : null;
31 return filetype;
32}; // eslint-disable-next-line flowtype/no-weak-types
33
34
35const getSyntax = filetypeOptions => {
36 if (!filetypeOptions || !filetypeOptions.syntax) {
37 return null;
38 } // eslint-disable-next-line import/no-dynamic-require, global-require
39
40
41 return require(filetypeOptions.syntax);
42}; // eslint-disable-next-line flowtype/no-weak-types
43
44
45const getExtraPlugins = filetypeOptions => {
46 if (!filetypeOptions || !filetypeOptions.plugins) {
47 return [];
48 }
49
50 return filetypeOptions.plugins.map(plugin => {
51 if (Array.isArray(plugin)) {
52 const [pluginName, pluginOptions] = plugin; // eslint-disable-next-line import/no-dynamic-require, global-require
53
54 return require(pluginName)(pluginOptions);
55 } // eslint-disable-next-line import/no-dynamic-require, global-require
56
57
58 return require(plugin);
59 });
60};
61
62const getTokens = (runner, cssSourceFilePath, filetypeOptions) => {
63 // eslint-disable-next-line flowtype/no-weak-types
64 const options = {
65 from: cssSourceFilePath
66 };
67
68 if (filetypeOptions) {
69 options.syntax = getSyntax(filetypeOptions);
70 }
71
72 const lazyResult = runner.process((0, _fs.readFileSync)(cssSourceFilePath, 'utf-8'), options);
73 lazyResult.warnings().forEach(message => {
74 // eslint-disable-next-line no-console
75 console.warn(message.text);
76 });
77 return lazyResult.root.tokens;
78};
79
80var _default = (cssSourceFilePath, options) => {
81 // eslint-disable-next-line prefer-const
82 let runner;
83 let generateScopedName;
84
85 if (options.generateScopedName && typeof options.generateScopedName === 'function') {
86 generateScopedName = options.generateScopedName;
87 } else {
88 generateScopedName = (0, _genericNames.default)(options.generateScopedName || '[path]___[name]__[local]___[hash:base64:5]', {
89 context: options.context || process.cwd()
90 });
91 }
92
93 const filetypeOptions = getFiletypeOptions(cssSourceFilePath, options.filetypes);
94
95 const fetch = (to, from) => {
96 const fromDirectoryPath = (0, _path.dirname)(from);
97 const toPath = (0, _path.resolve)(fromDirectoryPath, to);
98 return getTokens(runner, toPath, filetypeOptions);
99 };
100
101 const extraPlugins = getExtraPlugins(filetypeOptions);
102 const plugins = [...extraPlugins, _postcssModulesValues.default, _postcssModulesLocalByDefault.default, _postcssModulesExtractImports.default, new _postcssModulesScope.default({
103 generateScopedName
104 }), new _postcssModulesParser.default({
105 fetch
106 })];
107 runner = (0, _postcss.default)(plugins);
108 return getTokens(runner, cssSourceFilePath, filetypeOptions);
109};
110
111exports.default = _default;
112//# sourceMappingURL=requireCssModule.js.map
\No newline at end of file