Skip to content

Commit bb501ee

Browse files
committed
Combine extracters and prevent deep iteration
1 parent 8aa3853 commit bb501ee

File tree

2 files changed

+24
-30
lines changed

2 files changed

+24
-30
lines changed

src/icss.js

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,29 +12,28 @@ const getDeclsObject = rule => {
1212
return object
1313
}
1414

15-
export const extractICSSImports = css => {
15+
export const extractICSS = css => {
1616
const imports = {}
17-
css.walkRules(rule => {
18-
const matches = importPattern.exec(rule.selector)
19-
if (matches) {
20-
const path = matches[1]
21-
imports[path] = Object.assign({}, imports[path], getDeclsObject(rule))
22-
rule.remove()
23-
}
24-
})
25-
return imports
26-
}
27-
28-
export const extractICSSExports = css => {
2917
const exports = {}
30-
css.walkRules(exportPattern, rule => {
31-
Object.assign(exports, getDeclsObject(rule))
32-
rule.remove()
18+
css.each(node => {
19+
if (node.type === 'rule') {
20+
const matches = importPattern.exec(node.selector)
21+
if (matches) {
22+
const path = matches[1]
23+
const aliases = Object.assign({}, imports[path], getDeclsObject(node))
24+
imports[path] = aliases
25+
node.remove()
26+
}
27+
if (exportPattern.test(node.selector)) {
28+
Object.assign(exports, getDeclsObject(node))
29+
node.remove()
30+
}
31+
}
3332
})
34-
return exports
33+
return { imports, exports }
3534
}
3635

37-
const genICSSImportsRules = imports => {
36+
const createICSSImportsRules = imports => {
3837
return Object.keys(imports).map(path => {
3938
const aliases = imports[path]
4039
const declarations = Object.keys(aliases).map(key =>
@@ -53,7 +52,7 @@ const genICSSImportsRules = imports => {
5352
})
5453
}
5554

56-
const genICSSExportsRule = exports => {
55+
const createICSSExportsRule = exports => {
5756
const declarations = Object.keys(exports).map(key =>
5857
postcss.decl({
5958
prop: key,
@@ -69,7 +68,7 @@ const genICSSExportsRule = exports => {
6968
.append(declarations)
7069
}
7170

72-
export const genICSSRules = (imports, exports) => [
73-
...genICSSImportsRules(imports),
74-
genICSSExportsRule(exports)
71+
export const createICSSRules = (imports, exports) => [
72+
...createICSSImportsRules(imports),
73+
createICSSExportsRule(exports)
7574
]

src/index.js

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
const postcss = require('postcss')
22
const { default: replaceSymbols, replaceAll } = require('icss-replace-symbols')
3-
const {
4-
extractICSSImports,
5-
extractICSSExports,
6-
genICSSRules
7-
} = require('./icss.js')
3+
const { extractICSS, createICSSRules } = require('./icss.js')
84

95
const matchImports = /^(.+?|\([\s\S]+?\))\s+from\s+("[^"]*"|'[^']*'|[\w-]+)$/
106
const matchValueDefinition = /(?:\s+|^)([\w-]+):?\s+(.+?)\s*$/g
@@ -18,8 +14,7 @@ module.exports = postcss.plugin('postcss-modules-values', () => (
1814
css,
1915
result
2016
) => {
21-
const imports = extractICSSImports(css)
22-
const exports = extractICSSExports(css)
17+
const { imports, exports } = extractICSS(css)
2318
let importIndex = 0
2419
const createImportedName = (path, name) => {
2520
const importedName = getAliasName(name, importIndex)
@@ -89,5 +84,5 @@ module.exports = postcss.plugin('postcss-modules-values', () => (
8984
/* Perform replacements */
9085
replaceSymbols(css, exports)
9186

92-
css.prepend(genICSSRules(imports, exports))
87+
css.prepend(createICSSRules(imports, exports))
9388
})

0 commit comments

Comments
 (0)