Skip to content

Commit d8c324d

Browse files
committed
Dry code
1 parent 05e9e03 commit d8c324d

File tree

2 files changed

+42
-49
lines changed

2 files changed

+42
-49
lines changed

src/index.js

+32-49
Original file line numberDiff line numberDiff line change
@@ -101,68 +101,51 @@ const createGenerator = (i = 0) => name =>
101101
module.exports = postcss.plugin(plugin, () => (css, result) => {
102102
const { icssImports, icssExports } = extractICSS(css);
103103
const getAliasName = createGenerator();
104+
const addExports = (node, name, value) => {
105+
if (isForbidden(name)) {
106+
result.warn(`Dot and hash symbols are not allowed in value "${name}"`, {
107+
node
108+
});
109+
} else {
110+
if (icssExports[name]) {
111+
result.warn(`"${name}" value already declared`, { node });
112+
}
113+
}
114+
icssExports[name] = replaceValueSymbols(value, icssExports);
115+
};
104116

105-
css.walkAtRules("value", atRule => {
106-
if (atRule.params.indexOf("@value") !== -1) {
107-
result.warn(`Invalid value definition "${atRule.params}"`, {
108-
node: atRule
117+
css.walkAtRules("value", atrule => {
118+
if (atrule.params.indexOf("@value") !== -1) {
119+
result.warn(`Invalid value definition "${atrule.params}"`, {
120+
node: atrule
109121
});
110122
} else {
111-
const parsed = parse(atRule.params);
123+
const parsed = parse(atrule.params);
112124
if (parsed) {
113125
if (parsed.type === "value") {
114126
const { name, value } = parsed;
115-
if (isForbidden(name)) {
116-
result.warn(
117-
`Dot and hash symbols are not allowed in value "${name}"`,
118-
{ node: atRule }
119-
);
120-
} else {
121-
if (icssExports[name]) {
122-
result.warn(`"${name}" value already declared`, {
123-
node: atRule
124-
});
125-
}
126-
icssExports[name] = replaceValueSymbols(value, icssExports);
127-
}
127+
addExports(atrule, name, value);
128128
}
129129
if (parsed.type === "import") {
130-
const pairs = parsed.pairs
131-
.filter(([, local]) => {
132-
if (isForbidden(local)) {
133-
result.warn(
134-
`Dot and hash symbols are not allowed in value "${local}"`
135-
);
136-
return false;
137-
}
138-
return true;
139-
})
140-
.map(([imported, local]) => {
141-
const alias = getAliasName(local);
142-
if (icssExports[local]) {
143-
result.warn(`"${local}" value already declared`, {
144-
node: atRule
145-
});
146-
}
147-
icssExports[local] = alias;
148-
return [alias, imported];
149-
});
150-
if (pairs.length) {
151-
const aliases = fromPairs(pairs);
152-
icssImports[parsed.path] = Object.assign(
153-
{},
154-
icssImports[parsed.path],
155-
aliases
156-
);
157-
}
130+
const pairs = parsed.pairs.map(([imported, local]) => {
131+
const alias = getAliasName(local);
132+
addExports(atrule, local, alias);
133+
return [alias, imported];
134+
});
135+
const aliases = fromPairs(pairs);
136+
icssImports[parsed.path] = Object.assign(
137+
{},
138+
icssImports[parsed.path],
139+
aliases
140+
);
158141
}
159142
} else {
160-
result.warn(`Invalid value definition "${atRule.params}"`, {
161-
node: atRule
143+
result.warn(`Invalid value definition "${atrule.params}"`, {
144+
node: atrule
162145
});
163146
}
164147
}
165-
atRule.remove();
148+
atrule.remove();
166149
});
167150

168151
replaceSymbols(css, icssExports);

test/test.js

+10
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,16 @@ test("warn on using dot or hash in value name", () => {
351351
#blue {}
352352
`,
353353
expected: `
354+
:import('path') {
355+
__value___red__0: .red;
356+
__value___blue__1: #blue
357+
}
358+
:export {
359+
colors.red: #f00;
360+
colors#blue: #00f;
361+
.red: __value___red__0;
362+
#blue: __value___blue__1
363+
}
354364
.foo { color: colors.red; background: colors#blue }
355365
.red {}
356366
#blue {}

0 commit comments

Comments
 (0)