Skip to content

Commit 83515fa

Browse files
refactor: code
1 parent 1c20b1e commit 83515fa

File tree

6 files changed

+114
-174
lines changed

6 files changed

+114
-174
lines changed

src/index.js

+35-27
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import {
2424
getModuleCode,
2525
getModulesPlugins,
2626
normalizeSourceMap,
27-
sortImports,
27+
sort,
2828
} from './utils';
2929

3030
export default async function loader(content, map, meta) {
@@ -48,12 +48,18 @@ export default async function loader(content, map, meta) {
4848
return;
4949
}
5050

51+
const replacements = [];
52+
const exports = [];
53+
5154
const needUseModulesPlugins = shouldUseModulesPlugins(options);
5255

5356
if (needUseModulesPlugins) {
5457
plugins.push(...getModulesPlugins(options, this));
5558
}
5659

60+
const importPluginImports = [];
61+
const importPluginApi = [];
62+
5763
if (shouldUseImportPlugin(options)) {
5864
const resolver = this.getResolve({
5965
mainFields: ['css', 'style', 'main', '...'],
@@ -65,6 +71,8 @@ export default async function loader(content, map, meta) {
6571

6672
plugins.push(
6773
importParser({
74+
imports: importPluginImports,
75+
api: importPluginApi,
6876
context: this.context,
6977
rootContext: this.rootContext,
7078
filter: getFilter(options.import, this.resourcePath),
@@ -78,6 +86,8 @@ export default async function loader(content, map, meta) {
7886
);
7987
}
8088

89+
const urlPluginImports = [];
90+
8191
if (shouldUseURLPlugin(options)) {
8292
const urlResolver = this.getResolve({
8393
mainFields: ['asset'],
@@ -87,6 +97,8 @@ export default async function loader(content, map, meta) {
8797

8898
plugins.push(
8999
urlParser({
100+
imports: urlPluginImports,
101+
replacements,
90102
context: this.context,
91103
rootContext: this.rootContext,
92104
filter: getFilter(options.url, this.resourcePath),
@@ -96,6 +108,9 @@ export default async function loader(content, map, meta) {
96108
);
97109
}
98110

111+
const icssPluginImports = [];
112+
const icssPluginApi = [];
113+
99114
if (needUseModulesPlugins) {
100115
const icssResolver = this.getResolve({
101116
mainFields: ['css', 'style', 'main', '...'],
@@ -106,6 +121,10 @@ export default async function loader(content, map, meta) {
106121

107122
plugins.push(
108123
icssParser({
124+
imports: icssPluginImports,
125+
api: icssPluginApi,
126+
replacements,
127+
exports,
109128
context: this.context,
110129
rootContext: this.rootContext,
111130
resolver: icssResolver,
@@ -163,34 +182,23 @@ export default async function loader(content, map, meta) {
163182
this.emitWarning(new Warning(warning));
164183
}
165184

166-
const imports = [];
167-
const apiImports = [];
168-
const replacements = [];
169-
const exports = [];
170-
171-
for (const message of result.messages) {
172-
// eslint-disable-next-line default-case
173-
switch (message.type) {
174-
case 'import':
175-
imports.push(message.value);
176-
break;
177-
case 'api-import':
178-
apiImports.push(message.value);
179-
break;
180-
case 'replacement':
181-
replacements.push(message.value);
182-
break;
183-
case 'export':
184-
exports.push(message.value);
185-
break;
186-
}
185+
const imports = []
186+
.concat(icssPluginImports.sort(sort))
187+
.concat(importPluginImports.sort(sort))
188+
.concat(urlPluginImports.sort(sort));
189+
const api = []
190+
.concat(importPluginApi.sort(sort))
191+
.concat(icssPluginApi.sort(sort));
192+
193+
if (options.modules.exportOnlyLocals !== true) {
194+
imports.unshift({
195+
importName: '___CSS_LOADER_API_IMPORT___',
196+
url: stringifyRequest(this, require.resolve('./runtime/api')),
197+
});
187198
}
188199

189-
imports.sort(sortImports);
190-
apiImports.sort(sortImports);
191-
192-
const importCode = getImportCode(this, imports, options);
193-
const moduleCode = getModuleCode(result, apiImports, replacements, options);
200+
const importCode = getImportCode(imports, options);
201+
const moduleCode = getModuleCode(result, api, replacements, options);
194202
const exportCode = getExportCode(exports, replacements, options);
195203

196204
callback(null, `${importCode}${moduleCode}${exportCode}`);

src/plugins/postcss-icss-parser.js

+11-28
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { normalizeUrl, resolveRequests, requestify } from '../utils';
55

66
export default postcss.plugin(
77
'postcss-icss-parser',
8-
(options) => async (css, result) => {
8+
(options) => async (css) => {
99
const importReplacements = Object.create(null);
1010
const { icssImports, icssExports } = extractICSS(css);
1111
const imports = new Map();
@@ -58,28 +58,14 @@ export default postcss.plugin(
5858
importName = `___CSS_LOADER_ICSS_IMPORT_${imports.size}___`;
5959
imports.set(importKey, importName);
6060

61-
result.messages.push(
62-
{
63-
type: 'import',
64-
value: {
65-
importName,
66-
url: options.urlHandler(newUrl),
67-
icss: true,
68-
order: 0,
69-
index,
70-
},
71-
},
72-
{
73-
type: 'api-import',
74-
value: {
75-
type: 'internal',
76-
importName,
77-
dedupe: true,
78-
order: 0,
79-
index,
80-
},
81-
}
82-
);
61+
options.imports.push({
62+
importName,
63+
url: options.urlHandler(newUrl),
64+
icss: true,
65+
index,
66+
});
67+
68+
options.api.push({ importName, dedupe: true, index });
8369
}
8470

8571
for (const [replacementIndex, token] of Object.keys(tokens).entries()) {
@@ -88,10 +74,7 @@ export default postcss.plugin(
8874

8975
importReplacements[token] = replacementName;
9076

91-
result.messages.push({
92-
type: 'replacement',
93-
value: { type: 'icss', replacementName, importName, localName },
94-
});
77+
options.replacements.push({ replacementName, importName, localName });
9578
}
9679
}
9780

@@ -102,7 +85,7 @@ export default postcss.plugin(
10285
for (const name of Object.keys(icssExports)) {
10386
const value = replaceValueSymbols(icssExports[name], importReplacements);
10487

105-
result.messages.push({ type: 'export', value: { name, value } });
88+
options.exports.push({ name, value });
10689
}
10790
}
10891
);

src/plugins/postcss-import-parser.js

+6-17
Original file line numberDiff line numberDiff line change
@@ -179,31 +179,20 @@ export default postcss.plugin(pluginName, (options) => async (css, result) => {
179179
importName = `___CSS_LOADER_AT_RULE_IMPORT_${imports.size}___`;
180180
imports.set(importKey, importName);
181181

182-
result.messages.push({
183-
type: 'import',
184-
value: {
185-
order: 1,
186-
importName,
187-
url: options.urlHandler(newUrl),
188-
index,
189-
},
182+
options.imports.push({
183+
importName,
184+
url: options.urlHandler(newUrl),
185+
index,
190186
});
191187
}
192188

193-
result.messages.push({
194-
type: 'api-import',
195-
value: { order: 1, type: 'internal', importName, media, index },
196-
});
189+
options.api.push({ importName, media, index });
197190

198191
// eslint-disable-next-line no-continue
199192
continue;
200193
}
201194

202-
result.messages.push({
203-
pluginName,
204-
type: 'api-import',
205-
value: { order: 1, type: 'external', url, media, index },
206-
});
195+
options.api.push({ url, media, index });
207196
}
208197

209198
return Promise.resolve();

src/plugins/postcss-url-parser.js

+16-32
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,7 @@ function walkCss(css, result, options, callback) {
6161
};
6262

6363
if (shouldHandleRule(rule, decl, result)) {
64-
accumulator.push({
65-
decl,
66-
rule,
67-
parsed,
68-
});
64+
accumulator.push({ decl, rule, parsed });
6965
}
7066

7167
// Do not traverse inside `url`
@@ -91,11 +87,7 @@ function walkCss(css, result, options, callback) {
9187
};
9288

9389
if (shouldHandleRule(rule, decl, result)) {
94-
accumulator.push({
95-
decl,
96-
rule,
97-
parsed,
98-
});
90+
accumulator.push({ decl, rule, parsed });
9991
}
10092
} else if (type === 'string') {
10193
const rule = {
@@ -106,11 +98,7 @@ function walkCss(css, result, options, callback) {
10698
};
10799

108100
if (shouldHandleRule(rule, decl, result)) {
109-
accumulator.push({
110-
decl,
111-
rule,
112-
parsed,
113-
});
101+
accumulator.push({ decl, rule, parsed });
114102
}
115103
}
116104
}
@@ -166,15 +154,10 @@ export default postcss.plugin(pluginName, (options) => async (css, result) => {
166154
}
167155

168156
if (!hasUrlImportHelper) {
169-
result.messages.push({
170-
pluginName,
171-
type: 'import',
172-
value: {
173-
order: 2,
174-
importName: '___CSS_LOADER_GET_URL_IMPORT___',
175-
url: options.urlHandler(require.resolve('../runtime/getUrl.js')),
176-
index: 1,
177-
},
157+
options.imports.push({
158+
importName: '___CSS_LOADER_GET_URL_IMPORT___',
159+
url: options.urlHandler(require.resolve('../runtime/getUrl.js')),
160+
index: -1,
178161
});
179162

180163
hasUrlImportHelper = true;
@@ -216,10 +199,10 @@ export default postcss.plugin(pluginName, (options) => async (css, result) => {
216199
importName = `___CSS_LOADER_URL_IMPORT_${imports.size}___`;
217200
imports.set(importKey, importName);
218201

219-
result.messages.push({
220-
pluginName,
221-
type: 'import',
222-
value: { importName, url: options.urlHandler(newUrl), index, order: 3 },
202+
options.imports.push({
203+
importName,
204+
url: options.urlHandler(newUrl),
205+
index,
223206
});
224207
}
225208

@@ -231,10 +214,11 @@ export default postcss.plugin(pluginName, (options) => async (css, result) => {
231214
replacementName = `___CSS_LOADER_URL_REPLACEMENT_${replacements.size}___`;
232215
replacements.set(replacementKey, replacementName);
233216

234-
result.messages.push({
235-
pluginName,
236-
type: 'replacement',
237-
value: { type: 'url', replacementName, importName, hash, needQuotes },
217+
options.replacements.push({
218+
replacementName,
219+
importName,
220+
hash,
221+
needQuotes,
238222
});
239223
}
240224

0 commit comments

Comments
 (0)