Skip to content

Commit ac20da0

Browse files
authored
Migrate to PostCSS 8 (TrySound#77)
* Migrate to PostCSS 8 * Add new line
1 parent 0efcf35 commit ac20da0

File tree

3 files changed

+134
-109
lines changed

3 files changed

+134
-109
lines changed

lib/index.js

Lines changed: 103 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
const postcss = require("postcss");
21
const { parseRuleDefinition, getRuleParams } = require("./parseRule.js");
32
const parseDeclValue = require("./parseDeclValue.js");
43
const resolveId = require("./resolveId.js");
@@ -28,101 +27,112 @@ function stringifyInliner(inliner) {
2827
}
2928
}
3029

31-
module.exports = postcss.plugin(
32-
"postcss-inline-svg",
33-
(opts = {}) => (css, result) => {
34-
const loadersMap = {};
35-
const loaders = [];
36-
const inliners = [];
30+
module.exports = (opts = {}) => {
31+
return {
32+
postcssPlugin: "postcss-inline-svg",
3733

38-
css.walk((node) => {
39-
if (node.type === "atrule") {
40-
if (node.name === "svg-load") {
41-
try {
42-
const file =
43-
node.source && node.source.input && node.source.input.file;
44-
const { name, url } = parseRuleDefinition(node.params);
45-
const { params, selectors } = getRuleParams(node);
46-
const loader = {
47-
id: resolveId(file, url, opts),
48-
parent: file,
49-
params,
50-
selectors,
51-
node,
52-
};
53-
loaders.push(loader);
54-
loadersMap[name] = loader;
55-
} catch (e) {
56-
node.warn(result, e.message);
34+
prepare(result) {
35+
const loadersMap = {};
36+
const loaders = [];
37+
const inliners = [];
38+
39+
return {
40+
AtRule: {
41+
"svg-load": (node) => {
42+
try {
43+
const file =
44+
node.source && node.source.input && node.source.input.file;
45+
const { name, url } = parseRuleDefinition(node.params);
46+
const { params, selectors } = getRuleParams(node);
47+
const loader = {
48+
id: resolveId(file, url, opts),
49+
parent: file,
50+
params,
51+
selectors,
52+
node,
53+
};
54+
loaders.push(loader);
55+
loadersMap[name] = loader;
56+
} catch (e) {
57+
node.warn(result, e.message);
58+
}
59+
},
60+
},
61+
62+
Declaration(node) {
63+
if (
64+
node.value.includes("svg-load(") ||
65+
node.value.includes("svg-inline(")
66+
) {
67+
try {
68+
const file =
69+
node.source && node.source.input && node.source.input.file;
70+
const statements = parseDeclValue(node.value);
71+
statements.loaders.forEach(
72+
({ url, params, valueNode, parsedValue }) => {
73+
const loader = {
74+
id: resolveId(file, url, opts),
75+
parent: file,
76+
params,
77+
selectors: {},
78+
node,
79+
};
80+
loaders.push(loader);
81+
inliners.push({
82+
loader,
83+
node,
84+
valueNode,
85+
parsedValue,
86+
});
87+
}
88+
);
89+
statements.inliners.forEach(
90+
({ name, valueNode, parsedValue }) => {
91+
const loader = loadersMap[name];
92+
if (loader) {
93+
inliners.push({
94+
loader,
95+
node,
96+
valueNode,
97+
parsedValue,
98+
});
99+
} else {
100+
node.warn(result, `"${name}" svg is not defined`);
101+
}
102+
}
103+
);
104+
} catch (e) {
105+
node.warn(result, e.message);
106+
}
57107
}
58-
}
59-
} else if (node.type === "decl") {
60-
if (
61-
node.value.indexOf("svg-load(") !== -1 ||
62-
node.value.indexOf("svg-inline(") !== -1
63-
) {
64-
try {
65-
const file =
66-
node.source && node.source.input && node.source.input.file;
67-
const statements = parseDeclValue(node.value);
68-
statements.loaders.forEach(
69-
({ url, params, valueNode, parsedValue }) => {
70-
const loader = {
71-
id: resolveId(file, url, opts),
72-
parent: file,
73-
params,
74-
selectors: {},
75-
node,
76-
};
77-
loaders.push(loader);
78-
inliners.push({
79-
loader,
80-
node,
81-
valueNode,
82-
parsedValue,
83-
});
84-
}
85-
);
86-
statements.inliners.forEach(({ name, valueNode, parsedValue }) => {
87-
const loader = loadersMap[name];
88-
if (loader) {
89-
inliners.push({
90-
loader,
91-
node,
92-
valueNode,
93-
parsedValue,
108+
},
109+
110+
OnceExit() {
111+
const promises = loaders.map((loader) => {
112+
return load(loader.id, loader.params, loader.selectors, opts)
113+
.then((code) => {
114+
loader.svg = code;
115+
result.messages.push({
116+
type: "dependency",
117+
file: loader.id,
118+
parent: loader.parent,
94119
});
95-
} else {
96-
node.warn(result, `"${name}" svg is not defined`);
97-
}
98-
});
99-
} catch (e) {
100-
node.warn(result, e.message);
101-
}
102-
}
103-
}
104-
});
120+
})
121+
.catch((err) => {
122+
loader.error = true;
123+
loader.node.warn(result, err.message);
124+
});
125+
});
105126

106-
const promises = loaders.map((loader) => {
107-
return load(loader.id, loader.params, loader.selectors, opts)
108-
.then((code) => {
109-
loader.svg = code;
110-
result.messages.push({
111-
type: "dependency",
112-
file: loader.id,
113-
parent: loader.parent,
127+
return Promise.all(promises).then(() => {
128+
loaders.forEach(removeLoader);
129+
inliners.forEach(applyInliner);
130+
inliners.forEach(stringifyInliner);
114131
});
115-
})
116-
.catch((err) => {
117-
loader.error = true;
118-
loader.node.warn(result, err.message);
119-
});
120-
});
132+
},
133+
};
134+
},
135+
};
136+
};
121137

122-
return Promise.all(promises).then(() => {
123-
loaders.forEach(removeLoader);
124-
inliners.forEach(applyInliner);
125-
inliners.forEach(stringifyInliner);
126-
});
127-
}
128-
);
138+
module.exports.postcss = true;

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,16 @@
3838
"css-select": "^3.1.0",
3939
"dom-serializer": "^1.1.0",
4040
"htmlparser2": "^5.0.1",
41-
"postcss": "^7.0.17",
4241
"postcss-value-parser": "^4.0.0"
4342
},
43+
"peerDependencies": {
44+
"postcss": "^8.1.4"
45+
},
4446
"devDependencies": {
4547
"husky": "^4.3.0",
4648
"jest": "^26.6.1",
4749
"lint-staged": "^10.5.0",
50+
"postcss": "^8.1.4",
4851
"prettier": "^2.1.2"
4952
}
5053
}

yarn.lock

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -906,7 +906,7 @@ caseless@~0.12.0:
906906
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
907907
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
908908

909-
chalk@^2.0.0, chalk@^2.4.2:
909+
chalk@^2.0.0:
910910
version "2.4.2"
911911
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
912912
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -1019,6 +1019,11 @@ color-name@~1.1.4:
10191019
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
10201020
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
10211021

1022+
colorette@^1.2.1:
1023+
version "1.2.1"
1024+
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
1025+
integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
1026+
10221027
combined-stream@^1.0.6, combined-stream@~1.0.6:
10231028
version "1.0.8"
10241029
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
@@ -1951,7 +1956,7 @@ is-wsl@^2.2.0:
19511956
dependencies:
19521957
is-docker "^2.0.0"
19531958

1954-
isarray@1.0.0:
1959+
isarray@1.0.0, isarray@^1.0.0:
19551960
version "1.0.0"
19561961
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
19571962
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
@@ -2525,6 +2530,14 @@ levn@~0.3.0:
25252530
prelude-ls "~1.1.2"
25262531
type-check "~0.3.2"
25272532

2533+
line-column@^1.0.2:
2534+
version "1.0.2"
2535+
resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2"
2536+
integrity sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI=
2537+
dependencies:
2538+
isarray "^1.0.0"
2539+
isobject "^2.0.0"
2540+
25282541
lines-and-columns@^1.1.6:
25292542
version "1.1.6"
25302543
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
@@ -2704,6 +2717,11 @@ ms@2.1.2:
27042717
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
27052718
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
27062719

2720+
nanoid@^3.1.15:
2721+
version "3.1.16"
2722+
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.16.tgz#b21f0a7d031196faf75314d7c65d36352beeef64"
2723+
integrity sha512-+AK8MN0WHji40lj8AEuwLOvLSbWYApQpre/aFJZD71r43wVRLrOYS4FmJOPQYon1TqB462RzrrxlfA74XRES8w==
2724+
27072725
nanomatch@^1.2.9:
27082726
version "1.2.13"
27092727
resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
@@ -2994,14 +3012,15 @@ postcss-value-parser@^4.0.0:
29943012
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb"
29953013
integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
29963014

2997-
postcss@^7.0.17:
2998-
version "7.0.35"
2999-
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24"
3000-
integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==
3015+
postcss@^8.1.4:
3016+
version "8.1.4"
3017+
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.4.tgz#356dfef367a70f3d04347f74560c85846e20e4c1"
3018+
integrity sha512-LfqcwgMq9LOd8pX7K2+r2HPitlIGC5p6PoZhVELlqhh2YGDVcXKpkCseqan73Hrdik6nBd2OvoDPUaP/oMj9hQ==
30013019
dependencies:
3002-
chalk "^2.4.2"
3020+
colorette "^1.2.1"
3021+
line-column "^1.0.2"
3022+
nanoid "^3.1.15"
30033023
source-map "^0.6.1"
3004-
supports-color "^6.1.0"
30053024

30063025
prelude-ls@~1.1.2:
30073026
version "1.1.2"
@@ -3563,13 +3582,6 @@ supports-color@^5.3.0:
35633582
dependencies:
35643583
has-flag "^3.0.0"
35653584

3566-
supports-color@^6.1.0:
3567-
version "6.1.0"
3568-
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
3569-
integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
3570-
dependencies:
3571-
has-flag "^3.0.0"
3572-
35733585
supports-color@^7.0.0, supports-color@^7.1.0:
35743586
version "7.2.0"
35753587
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"

0 commit comments

Comments
 (0)