Skip to content

Commit c49b5da

Browse files
refactor: import part of plugin
1 parent c81edd4 commit c49b5da

File tree

4 files changed

+170
-164
lines changed

4 files changed

+170
-164
lines changed

lib/plugin.js

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
var postcss = require("postcss");
2-
var valueParser = require("postcss-value-parser");
3-
var Tokenizer = require("css-selector-tokenizer");
4-
var loaderUtils = require("loader-utils");
1+
const postcss = require("postcss");
2+
const valueParser = require("postcss-value-parser");
3+
const loaderUtils = require("loader-utils");
54

65
module.exports = postcss.plugin("css-loader-parser", function(options) {
76
return function(css) {
@@ -10,38 +9,53 @@ module.exports = postcss.plugin("css-loader-parser", function(options) {
109

1110
if (options.import) {
1211
css.walkAtRules(/^import$/i, function(rule) {
13-
const values = Tokenizer.parseValues(rule.params);
14-
let url = values.nodes[0].nodes[0];
12+
const parsedValue = valueParser(rule.params);
1513

16-
if (url && url.type === "url") {
17-
url = url.url;
18-
} else if (url && url.type === "string") {
19-
url = url.value;
20-
} else throw rule.error("Unexpected format " + rule.params);
21-
22-
if (!url.replace(/\s/g, "").length) {
23-
return;
14+
if (!parsedValue.nodes || !parsedValue.nodes[0]) {
15+
throw rule.error("Unexpected format " + rule.params);
2416
}
2517

26-
values.nodes[0].nodes.shift();
18+
const firstNode = parsedValue.nodes[0];
19+
20+
let url = null;
21+
22+
if (
23+
firstNode.type === "function" &&
24+
firstNode.value.toLowerCase() === "url"
25+
) {
26+
if (firstNode.nodes[0]) {
27+
firstNode.nodes[0].quote = "";
28+
}
29+
30+
url = valueParser.stringify(firstNode.nodes);
31+
} else if (firstNode.type === "string") {
32+
url = firstNode.value;
33+
}
2734

28-
const mediaQuery = Tokenizer.stringifyValues(values);
35+
if (url.replace(/\s/g, "").length === 0) {
36+
return;
37+
}
2938

3039
if (loaderUtils.isUrlRequest(url)) {
3140
url = loaderUtils.urlToRequest(url);
3241
}
3342

43+
const mediaQuery = valueParser
44+
.stringify(parsedValue.nodes.slice(1))
45+
.trim();
46+
3447
importItems.push({
3548
url: url,
3649
mediaQuery: mediaQuery
3750
});
51+
3852
rule.remove();
3953
});
4054
}
4155

4256
if (options.url) {
4357
css.walkDecls(decl => {
44-
if (!decl.value.includes("url(")) {
58+
if (!/url\(/i.test(decl.value)) {
4559
return decl;
4660
}
4761

@@ -58,7 +72,7 @@ module.exports = postcss.plugin("css-loader-parser", function(options) {
5872
}
5973

6074
const URLNode = node.nodes[0];
61-
const URLValue = URLNode.value.trim().replace(/\\[\r\n]/, "");
75+
const URLValue = URLNode.value.trim().replace(/\\[\r\n]/g, "");
6276

6377
// Skip empty URLs
6478
// Empty URL function equals request to current stylesheet where it is declared

package-lock.json

Lines changed: 0 additions & 66 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,7 @@
1313
],
1414
"dependencies": {
1515
"babel-code-frame": "^6.26.0",
16-
"css-selector-tokenizer": "^0.7.0",
17-
"icss-utils": "^2.1.0",
1816
"loader-utils": "^1.0.2",
19-
"lodash.camelcase": "^4.3.0",
2017
"postcss": "^6.0.23",
2118
"postcss-value-parser": "^3.3.0"
2219
},

0 commit comments

Comments
 (0)