UNPKG

3.79 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
26var _optionsDefaults = _interopRequireDefault(require("./schemas/optionsDefaults"));
27
28function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
30const getFiletypeOptions = (cssSourceFilePath, filetypes) => {
31 const extension = cssSourceFilePath.substr(cssSourceFilePath.lastIndexOf('.'));
32 const filetype = filetypes ? filetypes[extension] : null;
33 return filetype;
34}; // eslint-disable-next-line flowtype/no-weak-types
35
36
37const getSyntax = filetypeOptions => {
38 if (!filetypeOptions || !filetypeOptions.syntax) {
39 return null;
40 } // eslint-disable-next-line import/no-dynamic-require, global-require
41
42
43 return require(filetypeOptions.syntax);
44}; // eslint-disable-next-line flowtype/no-weak-types
45
46
47const getExtraPlugins = filetypeOptions => {
48 if (!filetypeOptions || !filetypeOptions.plugins) {
49 return [];
50 }
51
52 return filetypeOptions.plugins.map(plugin => {
53 if (Array.isArray(plugin)) {
54 const [pluginName, pluginOptions] = plugin; // eslint-disable-next-line import/no-dynamic-require, global-require
55
56 return require(pluginName)(pluginOptions);
57 } // eslint-disable-next-line import/no-dynamic-require, global-require
58
59
60 return require(plugin);
61 });
62};
63
64const getTokens = (runner, cssSourceFilePath, filetypeOptions) => {
65 // eslint-disable-next-line flowtype/no-weak-types
66 const options = {
67 from: cssSourceFilePath
68 };
69
70 if (filetypeOptions) {
71 options.syntax = getSyntax(filetypeOptions);
72 }
73
74 const lazyResult = runner.process((0, _fs.readFileSync)(cssSourceFilePath, 'utf-8'), options);
75 lazyResult.warnings().forEach(message => {
76 // eslint-disable-next-line no-console
77 console.warn(message.text);
78 });
79 return lazyResult.root.tokens;
80};
81
82var _default = (cssSourceFilePath, options) => {
83 // eslint-disable-next-line prefer-const
84 let runner;
85 let generateScopedName;
86
87 if (options.generateScopedName && typeof options.generateScopedName === 'function') {
88 generateScopedName = options.generateScopedName;
89 } else {
90 generateScopedName = (0, _genericNames.default)(options.generateScopedName || _optionsDefaults.default.generateScopedName, {
91 context: options.context || process.cwd()
92 });
93 }
94
95 const filetypeOptions = getFiletypeOptions(cssSourceFilePath, options.filetypes);
96
97 const fetch = (to, from) => {
98 const fromDirectoryPath = (0, _path.dirname)(from);
99 const toPath = (0, _path.resolve)(fromDirectoryPath, to);
100 return getTokens(runner, toPath, filetypeOptions);
101 };
102
103 const extraPlugins = getExtraPlugins(filetypeOptions);
104 const plugins = [...extraPlugins, _postcssModulesValues.default, _postcssModulesLocalByDefault.default, _postcssModulesExtractImports.default, new _postcssModulesScope.default({
105 generateScopedName
106 }), new _postcssModulesParser.default({
107 fetch
108 })];
109 runner = (0, _postcss.default)(plugins);
110 return getTokens(runner, cssSourceFilePath, filetypeOptions);
111};
112
113exports.default = _default;
114//# sourceMappingURL=requireCssModule.js.map
\No newline at end of file