Skip to content

Commit 1cc1e1d

Browse files
refactor: migrate on message api for export (#834)
1 parent c170a4a commit 1cc1e1d

File tree

3 files changed

+24
-19
lines changed

3 files changed

+24
-19
lines changed

lib/loader.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,13 @@ module.exports = function loader(content, map) {
123123
.warnings()
124124
.forEach((warning) => this.emitWarning(new Warning(warning)));
125125

126+
const messages = result.messages || [];
126127
const { camelCase, exportOnlyLocals, importLoaders } = options;
127-
const { importItems, urlItems, exports } = parserOptions;
128+
const { importItems, urlItems } = parserOptions;
129+
128130
// Run other loader (`postcss-loader`, `sass-loader` and etc) for importing CSS
129131
const importUrlPrefix = getImportPrefix(this, importLoaders);
132+
130133
// Prepare replacer to change from `___CSS_LOADER_IMPORT___INDEX___` to `require('./file.css').locals`
131134
const importItemReplacer = (item) => {
132135
const match = placholderRegExps.importItem.exec(item);
@@ -152,7 +155,7 @@ module.exports = function loader(content, map) {
152155
)}).locals[${JSON.stringify(importItem.export)}] + "`;
153156
};
154157

155-
let exportCode = compileExports(exports, camelCase, (valueAsString) =>
158+
let exportCode = compileExports(messages, camelCase, (valueAsString) =>
156159
valueAsString.replace(placholderRegExps.importItemG, importItemReplacer)
157160
);
158161

lib/plugins/postcss-icss-parser.js

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ const pluginName = 'postcss-icss-parser';
88
module.exports = postcss.plugin(
99
pluginName,
1010
(options) =>
11-
function process(css) {
11+
function process(css, result) {
1212
const importItems = options.importItems || [];
13-
const urlItems = options.urlItems || [];
1413
const imports = {};
1514
const icss = icssUtils.extractICSS(css);
1615
const exports = icss.icssExports;
@@ -61,13 +60,18 @@ module.exports = postcss.plugin(
6160

6261
// Replace tokens in export
6362
Object.keys(exports).forEach((exportName) => {
64-
exports[exportName] = replaceImportsInString(exports[exportName]);
63+
result.messages.push({
64+
pluginName,
65+
type: 'export',
66+
item: {
67+
key: exportName,
68+
value: replaceImportsInString(exports[exportName]),
69+
},
70+
});
6571
});
6672

6773
/* eslint-disable no-param-reassign */
6874
options.importItems = importItems;
69-
options.urlItems = urlItems;
70-
options.exports = exports;
7175
/* eslint-enable no-param-reassign */
7276
}
7377
);

lib/utils.js

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,19 +37,18 @@ function dashesCamelCase(str) {
3737
);
3838
}
3939

40-
function compileExports(exports, camelCaseKeys, valueHandler) {
41-
if (!exports || Object.keys(exports).length === 0) {
42-
return '';
43-
}
40+
function compileExports(messages, camelCaseKeys, valueHandler) {
41+
const exports = messages
42+
.filter((message) => message.type === 'export')
43+
.reduce((accumulator, message) => {
44+
const { key, value } = message.item;
4445

45-
const exportJs = Object.keys(exports)
46-
.reduce((res, key) => {
47-
let valueAsString = JSON.stringify(exports[key]);
46+
let valueAsString = JSON.stringify(value);
4847

4948
valueAsString = valueHandler(valueAsString);
5049

5150
function addEntry(k) {
52-
res.push(`\t${JSON.stringify(k)}: ${valueAsString}`);
51+
accumulator.push(`\t${JSON.stringify(k)}: ${valueAsString}`);
5352
}
5453

5554
let targetKey;
@@ -82,11 +81,10 @@ function compileExports(exports, camelCaseKeys, valueHandler) {
8281
break;
8382
}
8483

85-
return res;
86-
}, [])
87-
.join(',\n');
84+
return accumulator;
85+
}, []);
8886

89-
return `{\n${exportJs}\n}`;
87+
return exports.length > 0 ? `{\n${exports.join(',\n')}\n}` : '';
9088
}
9189

9290
function getLocalIdent(loaderContext, localIdentName, localName, options) {

0 commit comments

Comments
 (0)