UNPKG

4.77 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
8
9var _path = require('path');
10
11var _fs = require('fs');
12
13var _postcss = require('postcss');
14
15var _postcss2 = _interopRequireDefault(_postcss);
16
17var _genericNames = require('generic-names');
18
19var _genericNames2 = _interopRequireDefault(_genericNames);
20
21var _postcssModulesExtractImports = require('postcss-modules-extract-imports');
22
23var _postcssModulesExtractImports2 = _interopRequireDefault(_postcssModulesExtractImports);
24
25var _postcssModulesLocalByDefault = require('postcss-modules-local-by-default');
26
27var _postcssModulesLocalByDefault2 = _interopRequireDefault(_postcssModulesLocalByDefault);
28
29var _postcssModulesParser = require('postcss-modules-parser');
30
31var _postcssModulesParser2 = _interopRequireDefault(_postcssModulesParser);
32
33var _postcssModulesScope = require('postcss-modules-scope');
34
35var _postcssModulesScope2 = _interopRequireDefault(_postcssModulesScope);
36
37var _postcssModulesValues = require('postcss-modules-values');
38
39var _postcssModulesValues2 = _interopRequireDefault(_postcssModulesValues);
40
41function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
42
43const getFiletypeOptions = (cssSourceFilePath, filetypes) => {
44 const extension = cssSourceFilePath.substr(cssSourceFilePath.lastIndexOf('.'));
45 const filetype = filetypes ? filetypes[extension] : null;
46
47 return filetype;
48};
49
50// eslint-disable-next-line flowtype/no-weak-types
51const getSyntax = filetypeOptions => {
52 if (!filetypeOptions || !filetypeOptions.syntax) {
53 return null;
54 }
55
56 // eslint-disable-next-line import/no-dynamic-require, global-require
57 return require(filetypeOptions.syntax);
58};
59
60// eslint-disable-next-line flowtype/no-weak-types
61const getExtraPlugins = filetypeOptions => {
62 if (!filetypeOptions || !filetypeOptions.plugins) {
63 return [];
64 }
65
66 return filetypeOptions.plugins.map(plugin => {
67 if (Array.isArray(plugin)) {
68 var _plugin = _slicedToArray(plugin, 2);
69
70 const pluginName = _plugin[0],
71 pluginOptions = _plugin[1];
72
73 // eslint-disable-next-line import/no-dynamic-require, global-require
74
75 return require(pluginName)(pluginOptions);
76 }
77
78 // eslint-disable-next-line import/no-dynamic-require, global-require
79 return require(plugin);
80 });
81};
82
83const getTokens = (runner, cssSourceFilePath, filetypeOptions) => {
84 // eslint-disable-next-line flowtype/no-weak-types
85 const options = {
86 from: cssSourceFilePath
87 };
88
89 if (filetypeOptions) {
90 options.syntax = getSyntax(filetypeOptions);
91 }
92
93 const lazyResult = runner.process((0, _fs.readFileSync)(cssSourceFilePath, 'utf-8'), options);
94
95 lazyResult.warnings().forEach(message => {
96 // eslint-disable-next-line no-console
97 console.warn(message.text);
98 });
99
100 return lazyResult.root.tokens;
101};
102
103exports.default = (cssSourceFilePath, options) => {
104 // eslint-disable-next-line prefer-const
105 let runner;
106
107 let generateScopedName;
108
109 if (options.generateScopedName && typeof options.generateScopedName === 'function') {
110 generateScopedName = options.generateScopedName;
111 } else {
112 generateScopedName = (0, _genericNames2.default)(options.generateScopedName || '[path]___[name]__[local]___[hash:base64:5]', {
113 context: options.context || process.cwd()
114 });
115 }
116
117 const filetypeOptions = getFiletypeOptions(cssSourceFilePath, options.filetypes);
118
119 const fetch = (to, from) => {
120 const fromDirectoryPath = (0, _path.dirname)(from);
121 const toPath = (0, _path.resolve)(fromDirectoryPath, to);
122
123 return getTokens(runner, toPath, filetypeOptions);
124 };
125
126 const extraPlugins = getExtraPlugins(filetypeOptions);
127
128 const plugins = [...extraPlugins, _postcssModulesValues2.default, _postcssModulesLocalByDefault2.default, _postcssModulesExtractImports2.default, new _postcssModulesScope2.default({
129 generateScopedName
130 }), new _postcssModulesParser2.default({
131 fetch
132 })];
133
134 runner = (0, _postcss2.default)(plugins);
135
136 return getTokens(runner, cssSourceFilePath, filetypeOptions);
137};
138//# sourceMappingURL=requireCssModule.js.map
\No newline at end of file