From 3b573a9979346714a85cdd6150f2e27b863b9531 Mon Sep 17 00:00:00 2001 From: Evilebot Tnawi Date: Thu, 29 Nov 2018 13:50:55 +0300 Subject: [PATCH] refactor: postcss-parser (#821) --- lib/plugins/index.js | 4 +- ...stcss-parser.js => postcss-icss-parser.js} | 53 +--- lib/processCss.js | 4 +- package-lock.json | 28 +- .../__snapshots__/modules-option.test.js.snap | 294 ++++++++++++++++++ test/__snapshots__/url-option.test.js.snap | 6 +- .../modules/tests-cases/media-2/file.css | 1 + .../modules/tests-cases/media-2/source.css | 6 + .../modules/tests-cases/values-8/source.css | 6 + .../modules/tests-cases/values-9/source.css | 29 ++ test/helpers.js | 1 + 11 files changed, 380 insertions(+), 52 deletions(-) rename lib/plugins/{postcss-parser.js => postcss-icss-parser.js} (64%) create mode 100644 test/fixtures/modules/tests-cases/media-2/file.css create mode 100644 test/fixtures/modules/tests-cases/media-2/source.css create mode 100644 test/fixtures/modules/tests-cases/values-8/source.css create mode 100644 test/fixtures/modules/tests-cases/values-9/source.css diff --git a/lib/plugins/index.js b/lib/plugins/index.js index 8272227b..bfd66b28 100644 --- a/lib/plugins/index.js +++ b/lib/plugins/index.js @@ -1,9 +1,9 @@ const importParser = require('./postcss-import-parser'); -const parser = require('./postcss-parser'); +const icssParser = require('./postcss-icss-parser'); const urlParser = require('./postcss-url-parser'); module.exports = { importParser, - parser, + icssParser, urlParser, }; diff --git a/lib/plugins/postcss-parser.js b/lib/plugins/postcss-icss-parser.js similarity index 64% rename from lib/plugins/postcss-parser.js rename to lib/plugins/postcss-icss-parser.js index 093d0529..f8e8c448 100644 --- a/lib/plugins/postcss-parser.js +++ b/lib/plugins/postcss-icss-parser.js @@ -1,18 +1,18 @@ const postcss = require('postcss'); const valueParser = require('postcss-value-parser'); const icssUtils = require('icss-utils'); -const Tokenizer = require('css-selector-tokenizer'); const loaderUtils = require('loader-utils'); +const pluginName = 'postcss-icss-parser'; + module.exports = postcss.plugin( - 'postcss-parser', + pluginName, (options) => function process(css) { const importItems = options.importItems || []; const urlItems = options.urlItems || []; - const icss = icssUtils.extractICSS(css); - const imports = {}; + const icss = icssUtils.extractICSS(css); const exports = icss.icssExports; Object.keys(icss.icssImports).forEach((key) => { @@ -50,46 +50,21 @@ module.exports = postcss.plugin( return str; } - Object.keys(exports).forEach((exportName) => { - exports[exportName] = replaceImportsInString(exports[exportName]); - }); - - function processNode(item) { - switch (item.type) { - case 'value': - item.nodes.forEach(processNode); - break; - case 'nested-item': - item.nodes.forEach(processNode); - break; - case 'item': { - const importIndex = imports[`$${item.name}`]; - if (typeof importIndex === 'number') { - // eslint-disable-next-line no-param-reassign - item.name = `___CSS_LOADER_IMPORT___${importIndex}___`; - } - break; - } - // no default - } - } - + // Replace tokens in declarations css.walkDecls((decl) => { - const values = Tokenizer.parseValues(decl.value); - - values.nodes.forEach((value) => { - value.nodes.forEach(processNode); - }); - // eslint-disable-next-line no-param-reassign - decl.value = Tokenizer.stringifyValues(values); + decl.value = replaceImportsInString(decl.value.toString()); }); + // Replace tokens in at-rules css.walkAtRules((atrule) => { - if (typeof atrule.params === 'string') { - // eslint-disable-next-line no-param-reassign - atrule.params = replaceImportsInString(atrule.params); - } + // eslint-disable-next-line no-param-reassign + atrule.params = replaceImportsInString(atrule.params.toString()); + }); + + // Replace tokens in export + Object.keys(exports).forEach((exportName) => { + exports[exportName] = replaceImportsInString(exports[exportName]); }); /* eslint-disable no-param-reassign */ diff --git a/lib/processCss.js b/lib/processCss.js index d5c5d502..1968d655 100644 --- a/lib/processCss.js +++ b/lib/processCss.js @@ -10,7 +10,7 @@ const extractImports = require('postcss-modules-extract-imports'); const modulesScope = require('postcss-modules-scope'); const modulesValues = require('postcss-modules-values'); -const { importParser, parser, urlParser } = require('./plugins'); +const { importParser, icssParser, urlParser } = require('./plugins'); const Warning = require('./Warning'); const CssSyntaxError = require('./CssSyntaxError'); @@ -73,7 +73,7 @@ module.exports = function processCss(content, map, options, callback) { plugins.push(urlParser(parserOptions)); } - plugins.push(parser(parserOptions)); + plugins.push(icssParser(parserOptions)); postcss(plugins) .process(content, { diff --git a/package-lock.json b/package-lock.json index 74b30c69..1e02243d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4658,12 +4658,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4678,17 +4680,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -4805,7 +4810,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -4817,6 +4823,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -4831,6 +4838,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -4838,12 +4846,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -4862,6 +4872,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -4942,7 +4953,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -4954,6 +4966,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -5075,6 +5088,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", diff --git a/test/__snapshots__/modules-option.test.js.snap b/test/__snapshots__/modules-option.test.js.snap index 12018760..ae9ca978 100644 --- a/test/__snapshots__/modules-option.test.js.snap +++ b/test/__snapshots__/modules-option.test.js.snap @@ -1470,6 +1470,94 @@ Object { exports[`modules option case name \`media\`: (use \`localsLoader.js\`) (\`modules\` option is true): warnings 1`] = `Array []`; +exports[`modules option case name \`media-2\`: (use \`loader.js\`) (\`modules\` option is false): errors 1`] = `Array []`; + +exports[`modules option case name \`media-2\`: (use \`loader.js\`) (\`modules\` option is false): locals 1`] = ` +Object { + "small": "(max-width: 599px)", +} +`; + +exports[`modules option case name \`media-2\`: (use \`loader.js\`) (\`modules\` option is false): module (evaluated) 1`] = ` +Array [ + Array [ + 2, + " +", + "", + ], + Array [ + 1, + "@media (max-width: 599px) { + .header { + box-shadow: 0 0 4px #1F4F7F; + } +} +", + "", + ], +] +`; + +exports[`modules option case name \`media-2\`: (use \`loader.js\`) (\`modules\` option is false): warnings 1`] = `Array []`; + +exports[`modules option case name \`media-2\`: (use \`loader.js\`) (\`modules\` option is true): errors 1`] = `Array []`; + +exports[`modules option case name \`media-2\`: (use \`loader.js\`) (\`modules\` option is true): locals 1`] = ` +Object { + "header": "_header", + "small": "(max-width: 599px)", +} +`; + +exports[`modules option case name \`media-2\`: (use \`loader.js\`) (\`modules\` option is true): module (evaluated) 1`] = ` +Array [ + Array [ + 2, + " +", + "", + ], + Array [ + 1, + "@media (max-width: 599px) { + ._header { + box-shadow: 0 0 4px #1F4F7F; + } +} +", + "", + ], +] +`; + +exports[`modules option case name \`media-2\`: (use \`loader.js\`) (\`modules\` option is true): warnings 1`] = `Array []`; + +exports[`modules option case name \`media-2\`: (use \`localsLoader.js\`) (\`modules\` option is false): errors 1`] = `Array []`; + +exports[`modules option case name \`media-2\`: (use \`localsLoader.js\`) (\`modules\` option is false): locals 1`] = `undefined`; + +exports[`modules option case name \`media-2\`: (use \`localsLoader.js\`) (\`modules\` option is false): module (evaluated) 1`] = ` +Object { + "small": "(max-width: 599px)", +} +`; + +exports[`modules option case name \`media-2\`: (use \`localsLoader.js\`) (\`modules\` option is false): warnings 1`] = `Array []`; + +exports[`modules option case name \`media-2\`: (use \`localsLoader.js\`) (\`modules\` option is true): errors 1`] = `Array []`; + +exports[`modules option case name \`media-2\`: (use \`localsLoader.js\`) (\`modules\` option is true): locals 1`] = `undefined`; + +exports[`modules option case name \`media-2\`: (use \`localsLoader.js\`) (\`modules\` option is true): module (evaluated) 1`] = ` +Object { + "header": "_header", + "small": "(max-width: 599px)", +} +`; + +exports[`modules option case name \`media-2\`: (use \`localsLoader.js\`) (\`modules\` option is true): warnings 1`] = `Array []`; + exports[`modules option case name \`mode-switching\`: (use \`loader.js\`) (\`modules\` option is false): errors 1`] = `Array []`; exports[`modules option case name \`mode-switching\`: (use \`loader.js\`) (\`modules\` option is false): locals 1`] = ` @@ -2381,3 +2469,209 @@ Object { `; exports[`modules option case name \`values-7\`: (use \`localsLoader.js\`) (\`modules\` option is true): warnings 1`] = `Array []`; + +exports[`modules option case name \`values-8\`: (use \`loader.js\`) (\`modules\` option is false): errors 1`] = `Array []`; + +exports[`modules option case name \`values-8\`: (use \`loader.js\`) (\`modules\` option is false): locals 1`] = ` +Object { + "shadow-color": "rgba(0, 0, 0, 0.5)", +} +`; + +exports[`modules option case name \`values-8\`: (use \`loader.js\`) (\`modules\` option is false): module (evaluated) 1`] = ` +Array [ + Array [ + 1, + ".shadow { + box-shadow: 0 10px 10px rgba(0, 0, 0, 0.5), + 10px 0px 5px rgba(0, 0, 0, 0.5); +} +", + "", + ], +] +`; + +exports[`modules option case name \`values-8\`: (use \`loader.js\`) (\`modules\` option is false): warnings 1`] = `Array []`; + +exports[`modules option case name \`values-8\`: (use \`loader.js\`) (\`modules\` option is true): errors 1`] = `Array []`; + +exports[`modules option case name \`values-8\`: (use \`loader.js\`) (\`modules\` option is true): locals 1`] = ` +Object { + "shadow": "_shadow", + "shadow-color": "rgba(0, 0, 0, 0.5)", +} +`; + +exports[`modules option case name \`values-8\`: (use \`loader.js\`) (\`modules\` option is true): module (evaluated) 1`] = ` +Array [ + Array [ + 1, + "._shadow { + box-shadow: 0 10px 10px rgba(0, 0, 0, 0.5), + 10px 0px 5px rgba(0, 0, 0, 0.5); +} +", + "", + ], +] +`; + +exports[`modules option case name \`values-8\`: (use \`loader.js\`) (\`modules\` option is true): warnings 1`] = `Array []`; + +exports[`modules option case name \`values-8\`: (use \`localsLoader.js\`) (\`modules\` option is false): errors 1`] = `Array []`; + +exports[`modules option case name \`values-8\`: (use \`localsLoader.js\`) (\`modules\` option is false): locals 1`] = `undefined`; + +exports[`modules option case name \`values-8\`: (use \`localsLoader.js\`) (\`modules\` option is false): module (evaluated) 1`] = ` +Object { + "shadow-color": "rgba(0, 0, 0, 0.5)", +} +`; + +exports[`modules option case name \`values-8\`: (use \`localsLoader.js\`) (\`modules\` option is false): warnings 1`] = `Array []`; + +exports[`modules option case name \`values-8\`: (use \`localsLoader.js\`) (\`modules\` option is true): errors 1`] = `Array []`; + +exports[`modules option case name \`values-8\`: (use \`localsLoader.js\`) (\`modules\` option is true): locals 1`] = `undefined`; + +exports[`modules option case name \`values-8\`: (use \`localsLoader.js\`) (\`modules\` option is true): module (evaluated) 1`] = ` +Object { + "shadow": "_shadow", + "shadow-color": "rgba(0, 0, 0, 0.5)", +} +`; + +exports[`modules option case name \`values-8\`: (use \`localsLoader.js\`) (\`modules\` option is true): warnings 1`] = `Array []`; + +exports[`modules option case name \`values-9\`: (use \`loader.js\`) (\`modules\` option is false): errors 1`] = `Array []`; + +exports[`modules option case name \`values-9\`: (use \`loader.js\`) (\`modules\` option is false): locals 1`] = ` +Object { + "def": "red", +} +`; + +exports[`modules option case name \`values-9\`: (use \`loader.js\`) (\`modules\` option is false): module (evaluated) 1`] = ` +Array [ + Array [ + 1, + ".foo1 { + prop: func(red); +} + +.foo2 { + prop: func(10px red); +} + +.foo3 { + prop: func(red 10px); +} + +.foo4 { + prop: func(10px red 10px); +} + +.foo5 { + prop: func(10px, red); +} + +.foo6 { + prop: func(red, 10px); +} + +.foo7 { + prop: func(10px, red, 10px); +} +", + "", + ], +] +`; + +exports[`modules option case name \`values-9\`: (use \`loader.js\`) (\`modules\` option is false): warnings 1`] = `Array []`; + +exports[`modules option case name \`values-9\`: (use \`loader.js\`) (\`modules\` option is true): errors 1`] = `Array []`; + +exports[`modules option case name \`values-9\`: (use \`loader.js\`) (\`modules\` option is true): locals 1`] = ` +Object { + "def": "red", + "foo1": "_foo1", + "foo2": "_foo2", + "foo3": "_foo3", + "foo4": "_foo4", + "foo5": "_foo5", + "foo6": "_foo6", + "foo7": "_foo7", +} +`; + +exports[`modules option case name \`values-9\`: (use \`loader.js\`) (\`modules\` option is true): module (evaluated) 1`] = ` +Array [ + Array [ + 1, + "._foo1 { + prop: func(red); +} + +._foo2 { + prop: func(10px red); +} + +._foo3 { + prop: func(red 10px); +} + +._foo4 { + prop: func(10px red 10px); +} + +._foo5 { + prop: func(10px, red); +} + +._foo6 { + prop: func(red, 10px); +} + +._foo7 { + prop: func(10px, red, 10px); +} +", + "", + ], +] +`; + +exports[`modules option case name \`values-9\`: (use \`loader.js\`) (\`modules\` option is true): warnings 1`] = `Array []`; + +exports[`modules option case name \`values-9\`: (use \`localsLoader.js\`) (\`modules\` option is false): errors 1`] = `Array []`; + +exports[`modules option case name \`values-9\`: (use \`localsLoader.js\`) (\`modules\` option is false): locals 1`] = `undefined`; + +exports[`modules option case name \`values-9\`: (use \`localsLoader.js\`) (\`modules\` option is false): module (evaluated) 1`] = ` +Object { + "def": "red", +} +`; + +exports[`modules option case name \`values-9\`: (use \`localsLoader.js\`) (\`modules\` option is false): warnings 1`] = `Array []`; + +exports[`modules option case name \`values-9\`: (use \`localsLoader.js\`) (\`modules\` option is true): errors 1`] = `Array []`; + +exports[`modules option case name \`values-9\`: (use \`localsLoader.js\`) (\`modules\` option is true): locals 1`] = `undefined`; + +exports[`modules option case name \`values-9\`: (use \`localsLoader.js\`) (\`modules\` option is true): module (evaluated) 1`] = ` +Object { + "def": "red", + "foo1": "_foo1", + "foo2": "_foo2", + "foo3": "_foo3", + "foo4": "_foo4", + "foo5": "_foo5", + "foo6": "_foo6", + "foo7": "_foo7", +} +`; + +exports[`modules option case name \`values-9\`: (use \`localsLoader.js\`) (\`modules\` option is true): warnings 1`] = `Array []`; diff --git a/test/__snapshots__/url-option.test.js.snap b/test/__snapshots__/url-option.test.js.snap index 6015b392..a502cc7d 100644 --- a/test/__snapshots__/url-option.test.js.snap +++ b/test/__snapshots__/url-option.test.js.snap @@ -148,6 +148,7 @@ b { .class { background: green url( + ) xyz; } @@ -194,7 +195,7 @@ exports[`url option false: module 1`] = ` exports.i(require(\\"-!../../../index.js??ref--4-0!./imported.css\\"), \\"\\"); // module -exports.push([module.id, \\".class {\\\\n background: url('img.png');\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\\\\\"img.png\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(img.png);\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\\\\\"img.png#hash\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\\\n \\\\\\"img.png\\\\\\"\\\\n );\\\\n}\\\\n\\\\n.class {\\\\n background: green url( 'img.png' ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url( \\\\\\"img.png\\\\\\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url( img.png ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(~package/img.png) url(other-img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url( \\\\\\"img img.png\\\\\\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url( 'img img.png' ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(/img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n filter: url('data:image/svg+xml;charset=utf-8,#filter');\\\\n}\\\\n\\\\n.class {\\\\n filter: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter');\\\\n}\\\\n\\\\n.highlight {\\\\n filter: url(#highlight);\\\\n}\\\\n\\\\n.highlight {\\\\n filter: url('#line-marker');\\\\n}\\\\n\\\\n@font-face {\\\\n src: url(font.woff) format('woff'),\\\\n url('font.woff2') format('woff2'),\\\\n url(\\\\\\"font.eot\\\\\\") format('eot'),\\\\n url(~package/font.ttf) format('truetype'),\\\\n url(\\\\\\"font with spaces.eot\\\\\\") format(\\\\\\"embedded-opentype\\\\\\"),\\\\n url('font.svg#svgFontName') format('svg'),\\\\n url('font.woff2?foo=bar') format('woff2'),\\\\n url(\\\\\\"font.eot?#iefix\\\\\\") format('embedded-opentype'),\\\\n url(\\\\\\"font with spaces.eot?#iefix\\\\\\") format('embedded-opentype');\\\\n}\\\\n\\\\n@media (min-width: 500px) {\\\\n body {\\\\n background: url(\\\\\\"img.png\\\\\\");\\\\n }\\\\n}\\\\n\\\\na {\\\\n content: \\\\\\"do not use url(path)\\\\\\";\\\\n}\\\\n\\\\nb {\\\\n content: 'do not \\\\\\"use\\\\\\" url(path)';\\\\n}\\\\n\\\\n@keyframes anim {\\\\n background: green url('img.png') xyz;\\\\n}\\\\n\\\\n.a {\\\\n background-image: -webkit-image-set(url('img1x.png') 1x, url('img2x.png') 2x)\\\\n}\\\\n\\\\n.a {\\\\n background-image: image-set(url('img1x.png') 1x, url('img2x.png') 2x)\\\\n}\\\\n\\\\n.class {\\\\n background: green url() xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url('') xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\\\\\"\\\\\\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(' ') xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\\\n ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\\\\\"img.png?foo\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\\\\\"img.png?foo=bar\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\\\\\"img.png?foo=bar#hash\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\\\\\"img.png?foo=bar#hash\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\\\\\"img.png?\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n background-image: url('img.png') url(\\\\\\"data:image/svg+xml;charset=utf-8,\\\\\\") url('img.png');\\\\n}\\\\n\\", \\"\\"]); +exports.push([module.id, \\".class {\\\\n background: url('img.png');\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\\\\\"img.png\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(img.png);\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\\\\\"img.png#hash\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\\\n \\\\\\"img.png\\\\\\"\\\\n );\\\\n}\\\\n\\\\n.class {\\\\n background: green url( 'img.png' ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url( \\\\\\"img.png\\\\\\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url( img.png ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(~package/img.png) url(other-img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url( \\\\\\"img img.png\\\\\\" ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url( 'img img.png' ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(/img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n filter: url('data:image/svg+xml;charset=utf-8,#filter');\\\\n}\\\\n\\\\n.class {\\\\n filter: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter');\\\\n}\\\\n\\\\n.highlight {\\\\n filter: url(#highlight);\\\\n}\\\\n\\\\n.highlight {\\\\n filter: url('#line-marker');\\\\n}\\\\n\\\\n@font-face {\\\\n src: url(font.woff) format('woff'),\\\\n url('font.woff2') format('woff2'),\\\\n url(\\\\\\"font.eot\\\\\\") format('eot'),\\\\n url(~package/font.ttf) format('truetype'),\\\\n url(\\\\\\"font with spaces.eot\\\\\\") format(\\\\\\"embedded-opentype\\\\\\"),\\\\n url('font.svg#svgFontName') format('svg'),\\\\n url('font.woff2?foo=bar') format('woff2'),\\\\n url(\\\\\\"font.eot?#iefix\\\\\\") format('embedded-opentype'),\\\\n url(\\\\\\"font with spaces.eot?#iefix\\\\\\") format('embedded-opentype');\\\\n}\\\\n\\\\n@media (min-width: 500px) {\\\\n body {\\\\n background: url(\\\\\\"img.png\\\\\\");\\\\n }\\\\n}\\\\n\\\\na {\\\\n content: \\\\\\"do not use url(path)\\\\\\";\\\\n}\\\\n\\\\nb {\\\\n content: 'do not \\\\\\"use\\\\\\" url(path)';\\\\n}\\\\n\\\\n@keyframes anim {\\\\n background: green url('img.png') xyz;\\\\n}\\\\n\\\\n.a {\\\\n background-image: -webkit-image-set(url('img1x.png') 1x, url('img2x.png') 2x)\\\\n}\\\\n\\\\n.a {\\\\n background-image: image-set(url('img1x.png') 1x, url('img2x.png') 2x)\\\\n}\\\\n\\\\n.class {\\\\n background: green url() xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url('') xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\\\\\"\\\\\\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(' ') xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\\\n \\\\n ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\\\\\"img.png?foo\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\\\\\"img.png?foo=bar\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\\\\\"img.png?foo=bar#hash\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\\\\\"img.png?foo=bar#hash\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\\\\\"img.png?\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n background-image: url('img.png') url(\\\\\\"data:image/svg+xml;charset=utf-8,\\\\\\") url('img.png');\\\\n}\\\\n\\", \\"\\"]); // exports " @@ -348,6 +349,7 @@ b { .class { background: green url( + ) xyz; } @@ -395,7 +397,7 @@ exports = module.exports = require(\\"../../../lib/runtime/api.js\\")(false); exports.i(require(\\"-!../../../index.js??ref--4-0!./imported.css\\"), \\"\\"); // module -exports.push([module.id, \\".class {\\\\n background: url(\\" + escape(require(\\"./img.png\\")) + \\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\" + escape(require(\\"./img.png\\")) + \\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\" + escape(require(\\"./img.png\\")) + \\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\" + escape(require(\\"./img.png\\") + \\"#hash\\") + \\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\" + escape(require(\\"./img.png\\")) + \\");\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\" + escape(require(\\"./img.png\\")) + \\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\" + escape(require(\\"./img.png\\")) + \\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\" + escape(require(\\"./img.png\\")) + \\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\" + escape(require(\\"package/img.png\\")) + \\") url(\\" + escape(require(\\"./other-img.png\\")) + \\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\" + escape(require(\\"./img img.png\\")) + \\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\" + escape(require(\\"./img img.png\\")) + \\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(/img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n filter: url('data:image/svg+xml;charset=utf-8,#filter');\\\\n}\\\\n\\\\n.class {\\\\n filter: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter');\\\\n}\\\\n\\\\n.highlight {\\\\n filter: url(#highlight);\\\\n}\\\\n\\\\n.highlight {\\\\n filter: url('#line-marker');\\\\n}\\\\n\\\\n@font-face {\\\\n src: url(\\" + escape(require(\\"./font.woff\\")) + \\") format('woff'),\\\\n url(\\" + escape(require(\\"./font.woff2\\")) + \\") format('woff2'),\\\\n url(\\" + escape(require(\\"./font.eot\\")) + \\") format('eot'),\\\\n url(\\" + escape(require(\\"package/font.ttf\\")) + \\") format('truetype'),\\\\n url(\\" + escape(require(\\"./font with spaces.eot\\")) + \\") format(\\\\\\"embedded-opentype\\\\\\"),\\\\n url(\\" + escape(require(\\"./font.svg\\") + \\"#svgFontName\\") + \\") format('svg'),\\\\n url(\\" + escape(require(\\"./font.woff2?foo=bar\\")) + \\") format('woff2'),\\\\n url(\\" + escape(require(\\"./font.eot\\") + \\"?#iefix\\") + \\") format('embedded-opentype'),\\\\n url(\\" + escape(require(\\"./font with spaces.eot\\") + \\"?#iefix\\") + \\") format('embedded-opentype');\\\\n}\\\\n\\\\n@media (min-width: 500px) {\\\\n body {\\\\n background: url(\\" + escape(require(\\"./img.png\\")) + \\");\\\\n }\\\\n}\\\\n\\\\na {\\\\n content: \\\\\\"do not use url(path)\\\\\\";\\\\n}\\\\n\\\\nb {\\\\n content: 'do not \\\\\\"use\\\\\\" url(path)';\\\\n}\\\\n\\\\n@keyframes anim {\\\\n background: green url(\\" + escape(require(\\"./img.png\\")) + \\") xyz;\\\\n}\\\\n\\\\n.a {\\\\n background-image: -webkit-image-set(url(\\" + escape(require(\\"./img1x.png\\")) + \\") 1x, url(\\" + escape(require(\\"./img2x.png\\")) + \\") 2x)\\\\n}\\\\n\\\\n.a {\\\\n background-image: image-set(url(\\" + escape(require(\\"./img1x.png\\")) + \\") 1x, url(\\" + escape(require(\\"./img2x.png\\")) + \\") 2x)\\\\n}\\\\n\\\\n.class {\\\\n background: green url() xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url('') xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\\\\\"\\\\\\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url('') xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\\\n ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\" + escape(require(\\"./img.png?foo\\")) + \\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\" + escape(require(\\"./img.png?foo=bar\\")) + \\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\" + escape(require(\\"./img.png?foo=bar\\") + \\"#hash\\") + \\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\" + escape(require(\\"./img.png?foo=bar\\") + \\"#hash\\") + \\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\" + escape(require(\\"./img.png?\\")) + \\");\\\\n}\\\\n\\\\n.class {\\\\n background-image: url(\\" + escape(require(\\"./img.png\\")) + \\") url(\\\\\\"data:image/svg+xml;charset=utf-8,\\\\\\") url(\\" + escape(require(\\"./img.png\\")) + \\");\\\\n}\\\\n\\", \\"\\"]); +exports.push([module.id, \\".class {\\\\n background: url(\\" + escape(require(\\"./img.png\\")) + \\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\" + escape(require(\\"./img.png\\")) + \\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\" + escape(require(\\"./img.png\\")) + \\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\" + escape(require(\\"./img.png\\") + \\"#hash\\") + \\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\" + escape(require(\\"./img.png\\")) + \\");\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\" + escape(require(\\"./img.png\\")) + \\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\" + escape(require(\\"./img.png\\")) + \\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\" + escape(require(\\"./img.png\\")) + \\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\" + escape(require(\\"package/img.png\\")) + \\") url(\\" + escape(require(\\"./other-img.png\\")) + \\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\" + escape(require(\\"./img img.png\\")) + \\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\" + escape(require(\\"./img img.png\\")) + \\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(/img.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n background-image: url(\\\\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\\\\\");\\\\n}\\\\n\\\\n.class {\\\\n filter: url('data:image/svg+xml;charset=utf-8,#filter');\\\\n}\\\\n\\\\n.class {\\\\n filter: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter');\\\\n}\\\\n\\\\n.highlight {\\\\n filter: url(#highlight);\\\\n}\\\\n\\\\n.highlight {\\\\n filter: url('#line-marker');\\\\n}\\\\n\\\\n@font-face {\\\\n src: url(\\" + escape(require(\\"./font.woff\\")) + \\") format('woff'),\\\\n url(\\" + escape(require(\\"./font.woff2\\")) + \\") format('woff2'),\\\\n url(\\" + escape(require(\\"./font.eot\\")) + \\") format('eot'),\\\\n url(\\" + escape(require(\\"package/font.ttf\\")) + \\") format('truetype'),\\\\n url(\\" + escape(require(\\"./font with spaces.eot\\")) + \\") format(\\\\\\"embedded-opentype\\\\\\"),\\\\n url(\\" + escape(require(\\"./font.svg\\") + \\"#svgFontName\\") + \\") format('svg'),\\\\n url(\\" + escape(require(\\"./font.woff2?foo=bar\\")) + \\") format('woff2'),\\\\n url(\\" + escape(require(\\"./font.eot\\") + \\"?#iefix\\") + \\") format('embedded-opentype'),\\\\n url(\\" + escape(require(\\"./font with spaces.eot\\") + \\"?#iefix\\") + \\") format('embedded-opentype');\\\\n}\\\\n\\\\n@media (min-width: 500px) {\\\\n body {\\\\n background: url(\\" + escape(require(\\"./img.png\\")) + \\");\\\\n }\\\\n}\\\\n\\\\na {\\\\n content: \\\\\\"do not use url(path)\\\\\\";\\\\n}\\\\n\\\\nb {\\\\n content: 'do not \\\\\\"use\\\\\\" url(path)';\\\\n}\\\\n\\\\n@keyframes anim {\\\\n background: green url(\\" + escape(require(\\"./img.png\\")) + \\") xyz;\\\\n}\\\\n\\\\n.a {\\\\n background-image: -webkit-image-set(url(\\" + escape(require(\\"./img1x.png\\")) + \\") 1x, url(\\" + escape(require(\\"./img2x.png\\")) + \\") 2x)\\\\n}\\\\n\\\\n.a {\\\\n background-image: image-set(url(\\" + escape(require(\\"./img1x.png\\")) + \\") 1x, url(\\" + escape(require(\\"./img2x.png\\")) + \\") 2x)\\\\n}\\\\n\\\\n.class {\\\\n background: green url() xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url('') xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\\\\\"\\\\\\") xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url('') xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(\\\\n \\\\n ) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz;\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\" + escape(require(\\"./img.png?foo\\")) + \\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\" + escape(require(\\"./img.png?foo=bar\\")) + \\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\" + escape(require(\\"./img.png?foo=bar\\") + \\"#hash\\") + \\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\" + escape(require(\\"./img.png?foo=bar\\") + \\"#hash\\") + \\");\\\\n}\\\\n\\\\n.class {\\\\n background: url(\\" + escape(require(\\"./img.png?\\")) + \\");\\\\n}\\\\n\\\\n.class {\\\\n background-image: url(\\" + escape(require(\\"./img.png\\")) + \\") url(\\\\\\"data:image/svg+xml;charset=utf-8,\\\\\\") url(\\" + escape(require(\\"./img.png\\")) + \\");\\\\n}\\\\n\\", \\"\\"]); // exports " diff --git a/test/fixtures/modules/tests-cases/media-2/file.css b/test/fixtures/modules/tests-cases/media-2/file.css new file mode 100644 index 00000000..1f9fb325 --- /dev/null +++ b/test/fixtures/modules/tests-cases/media-2/file.css @@ -0,0 +1 @@ +@value small: (max-width: 599px); diff --git a/test/fixtures/modules/tests-cases/media-2/source.css b/test/fixtures/modules/tests-cases/media-2/source.css new file mode 100644 index 00000000..e284fc6f --- /dev/null +++ b/test/fixtures/modules/tests-cases/media-2/source.css @@ -0,0 +1,6 @@ +@value small from './file.css'; +@media small { + .header { + box-shadow: 0 0 4px #1F4F7F; + } +} diff --git a/test/fixtures/modules/tests-cases/values-8/source.css b/test/fixtures/modules/tests-cases/values-8/source.css new file mode 100644 index 00000000..a6ab62e0 --- /dev/null +++ b/test/fixtures/modules/tests-cases/values-8/source.css @@ -0,0 +1,6 @@ +@value shadow-color: rgba(0, 0, 0, 0.5); + +.shadow { + box-shadow: 0 10px 10px shadow-color, + 10px 0px 5px shadow-color; +} diff --git a/test/fixtures/modules/tests-cases/values-9/source.css b/test/fixtures/modules/tests-cases/values-9/source.css new file mode 100644 index 00000000..91d95b5f --- /dev/null +++ b/test/fixtures/modules/tests-cases/values-9/source.css @@ -0,0 +1,29 @@ +@value def: red; + +.foo1 { + prop: func(def); +} + +.foo2 { + prop: func(10px def); +} + +.foo3 { + prop: func(def 10px); +} + +.foo4 { + prop: func(10px def 10px); +} + +.foo5 { + prop: func(10px, def); +} + +.foo6 { + prop: func(def, 10px); +} + +.foo7 { + prop: func(10px, def, 10px); +} diff --git a/test/helpers.js b/test/helpers.js index 49975daf..4bbe720e 100644 --- a/test/helpers.js +++ b/test/helpers.js @@ -47,6 +47,7 @@ function evaluated(output, modules, moduleId = 1) { 'modules/tests-cases/composes-2', 'modules/tests-cases/composes-multiple', 'modules/tests-cases/composes-with-importing', + 'modules/tests-cases/media-2', ].map((importedPath) => path.resolve(__dirname, `./fixtures/${importedPath}`, module) );