From 2b2fed588050e47b4c0c35080ca9bccd0678e399 Mon Sep 17 00:00:00 2001 From: Ben Worline Date: Thu, 4 May 2023 20:41:15 -0700 Subject: [PATCH 1/7] Initial take --- .../HarmonyExportExpressionDependency.js | 5 +- ...armonyExportImportedSpecifierDependency.js | 3 +- lib/dependencies/HarmonyExportInitFragment.js | 3 +- lib/optimize/ConcatenatedModule.js | 9 +- lib/util/propertyAccess.js | 58 +------ lib/util/propertyName.js | 79 ++++++++++ .../StatsTestCases.basictest.js.snap | 144 +++++++++--------- .../import-export-format/cjs-module.js | 3 + .../import-export-format/harmony-module-2.js | 5 + .../import-export-format/harmony-module-3.js | 1 + .../import-export-format/harmony-module.js | 5 + .../import-export-format/index.js | 52 +++++++ .../import-export-format/webpack.config.js | 14 ++ .../reuse-webpack-esm-library/lib.js | 4 +- test/propertyAccess.unittest.js | 26 ++++ test/propertyName.unittest.js | 15 ++ 16 files changed, 290 insertions(+), 136 deletions(-) create mode 100644 lib/util/propertyName.js create mode 100644 test/configCases/code-generation/import-export-format/cjs-module.js create mode 100644 test/configCases/code-generation/import-export-format/harmony-module-2.js create mode 100644 test/configCases/code-generation/import-export-format/harmony-module-3.js create mode 100644 test/configCases/code-generation/import-export-format/harmony-module.js create mode 100644 test/configCases/code-generation/import-export-format/index.js create mode 100644 test/configCases/code-generation/import-export-format/webpack.config.js create mode 100644 test/propertyAccess.unittest.js create mode 100644 test/propertyName.unittest.js diff --git a/lib/dependencies/HarmonyExportExpressionDependency.js b/lib/dependencies/HarmonyExportExpressionDependency.js index 5ebd0ef6d..899372fe5 100644 --- a/lib/dependencies/HarmonyExportExpressionDependency.js +++ b/lib/dependencies/HarmonyExportExpressionDependency.js @@ -8,6 +8,7 @@ const ConcatenationScope = require("../ConcatenationScope"); const RuntimeGlobals = require("../RuntimeGlobals"); const makeSerializable = require("../util/makeSerializable"); +const propertyAccess = require("../util/propertyAccess"); const HarmonyExportInitFragment = require("./HarmonyExportInitFragment"); const NullDependency = require("./NullDependency"); @@ -172,9 +173,9 @@ HarmonyExportExpressionDependency.Template = class HarmonyExportDependencyTempla if (used) { runtimeRequirements.add(RuntimeGlobals.exports); // This is a little bit incorrect as TDZ is not correct, but we can't use const. - content = `/* harmony default export */ ${exportsName}[${JSON.stringify( + content = `/* harmony default export */ ${exportsName}${propertyAccess( used - )}] = `; + )} = `; } else { content = `/* unused harmony default export */ var ${name} = `; } diff --git a/lib/dependencies/HarmonyExportImportedSpecifierDependency.js b/lib/dependencies/HarmonyExportImportedSpecifierDependency.js index e322697fd..18f6ff28d 100644 --- a/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +++ b/lib/dependencies/HarmonyExportImportedSpecifierDependency.js @@ -19,6 +19,7 @@ const { getRuntimeKey, keyToRuntime } = require("../util/runtime"); const HarmonyExportInitFragment = require("./HarmonyExportInitFragment"); const HarmonyImportDependency = require("./HarmonyImportDependency"); const processExportInfo = require("./processExportInfo"); +const { propertyName } = require("../util/propertyName"); /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */ /** @typedef {import("../ChunkGraph")} ChunkGraph */ @@ -1219,7 +1220,7 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS valueKey[0] )})) ${ RuntimeGlobals.definePropertyGetters - }(${exportsName}, { ${JSON.stringify( + }(${exportsName}, { ${propertyName( key )}: function() { return ${returnValue}; } });\n`; } diff --git a/lib/dependencies/HarmonyExportInitFragment.js b/lib/dependencies/HarmonyExportInitFragment.js index 26d45ba7c..d99137caa 100644 --- a/lib/dependencies/HarmonyExportInitFragment.js +++ b/lib/dependencies/HarmonyExportInitFragment.js @@ -8,6 +8,7 @@ const InitFragment = require("../InitFragment"); const RuntimeGlobals = require("../RuntimeGlobals"); const { first } = require("../util/SetHelpers"); +const { propertyName } = require("../util/propertyName"); /** @typedef {import("webpack-sources").Source} Source */ /** @typedef {import("../Generator").GenerateContext} GenerateContext */ @@ -150,7 +151,7 @@ class HarmonyExportInitFragment extends InitFragment { ); for (const [key, value] of orderedExportMap) { definitions.push( - `\n/* harmony export */ ${JSON.stringify( + `\n/* harmony export */ ${propertyName( key )}: ${runtimeTemplate.returningFunction(value)}` ); diff --git a/lib/optimize/ConcatenatedModule.js b/lib/optimize/ConcatenatedModule.js index 8e498a09c..b0cb0b0de 100644 --- a/lib/optimize/ConcatenatedModule.js +++ b/lib/optimize/ConcatenatedModule.js @@ -35,6 +35,7 @@ const { runtimeConditionToString, subtractRuntimeCondition } = require("../util/runtime"); +const { propertyName } = require("../util/propertyName"); /** @typedef {import("eslint-scope").Scope} Scope */ /** @typedef {import("webpack-sources").Source} Source */ @@ -1484,7 +1485,7 @@ class ConcatenatedModule extends Module { const definitions = []; for (const [key, value] of exportsMap) { definitions.push( - `\n ${JSON.stringify(key)}: ${runtimeTemplate.returningFunction( + `\n ${propertyName(key)}: ${runtimeTemplate.returningFunction( value(requestShortener) )}` ); @@ -1529,9 +1530,9 @@ class ConcatenatedModule extends Module { true ); nsObj.push( - `\n ${JSON.stringify( - usedName - )}: ${runtimeTemplate.returningFunction(finalName)}` + `\n ${propertyName(usedName)}: ${runtimeTemplate.returningFunction( + finalName + )}` ); } } diff --git a/lib/util/propertyAccess.js b/lib/util/propertyAccess.js index 2b61e2b9b..50712a612 100644 --- a/lib/util/propertyAccess.js +++ b/lib/util/propertyAccess.js @@ -5,60 +5,10 @@ "use strict"; -const SAFE_IDENTIFIER = /^[_a-zA-Z$][_a-zA-Z$0-9]*$/; -const RESERVED_IDENTIFIER = new Set([ - "break", - "case", - "catch", - "class", - "const", - "continue", - "debugger", - "default", - "delete", - "do", - "else", - "export", - "extends", - "finally", - "for", - "function", - "if", - "import", - "in", - "instanceof", - "new", - "return", - "super", - "switch", - "this", - "throw", - "try", - "typeof", - "var", - "void", - "while", - "with", - "enum", - // strict mode - "implements", - "interface", - "let", - "package", - "private", - "protected", - "public", - "static", - "yield", - "yield", - // module code - "await", - // skip future reserved keywords defined under ES1 till ES3 - // additional - "null", - "true", - "false" -]); +const { + SAFE_IDENTIFIER, + RESERVED_IDENTIFIER +} = require("../util/propertyName"); /** * @param {ArrayLike} properties properties diff --git a/lib/util/propertyName.js b/lib/util/propertyName.js new file mode 100644 index 000000000..ff512d481 --- /dev/null +++ b/lib/util/propertyName.js @@ -0,0 +1,79 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ + +"use strict"; + +const SAFE_IDENTIFIER = /^[_a-zA-Z$][_a-zA-Z$0-9]*$/; +const RESERVED_IDENTIFIER = new Set([ + "break", + "case", + "catch", + "class", + "const", + "continue", + "debugger", + "default", + "delete", + "do", + "else", + "export", + "extends", + "finally", + "for", + "function", + "if", + "import", + "in", + "instanceof", + "new", + "return", + "super", + "switch", + "this", + "throw", + "try", + "typeof", + "var", + "void", + "while", + "with", + "enum", + // strict mode + "implements", + "interface", + "let", + "package", + "private", + "protected", + "public", + "static", + "yield", + "yield", + // module code + "await", + // skip future reserved keywords defined under ES1 till ES3 + // additional + "null", + "true", + "false" +]); + +/** + * @summary Returns a valid JS property name for the given property. + * Certain strings like "default", "null", and names with whitespace are not + * valid JS property names, so they are returned as strings. + * + * @param {string} prop property name to analyze + * @returns {string} valid JS property name + */ +const propertyName = prop => { + if (SAFE_IDENTIFIER.test(prop) && !RESERVED_IDENTIFIER.has(prop)) { + return prop; + } else { + return JSON.stringify(prop); + } +}; + +module.exports = { SAFE_IDENTIFIER, RESERVED_IDENTIFIER, propertyName }; diff --git a/test/__snapshots__/StatsTestCases.basictest.js.snap b/test/__snapshots__/StatsTestCases.basictest.js.snap index fd276c6a3..0b21d1c47 100644 --- a/test/__snapshots__/StatsTestCases.basictest.js.snap +++ b/test/__snapshots__/StatsTestCases.basictest.js.snap @@ -306,9 +306,9 @@ default: vendors: Entrypoint main 11.2 KiB = vendors/main.js - Entrypoint a 14.5 KiB = vendors/vendors.js 1.05 KiB vendors/a.js 13.5 KiB - Entrypoint b 8.18 KiB = vendors/vendors.js 1.05 KiB vendors/b.js 7.13 KiB - Entrypoint c 8.18 KiB = vendors/vendors.js 1.05 KiB vendors/c.js 7.13 KiB + Entrypoint a 14.5 KiB = vendors/vendors.js 1.04 KiB vendors/a.js 13.5 KiB + Entrypoint b 8.17 KiB = vendors/vendors.js 1.04 KiB vendors/b.js 7.13 KiB + Entrypoint c 8.17 KiB = vendors/vendors.js 1.04 KiB vendors/c.js 7.13 KiB chunk (runtime: b) vendors/b.js (b) 156 bytes (javascript) 2.75 KiB (runtime) [entry] [rendered] > ./b b runtime modules 2.75 KiB 4 modules @@ -355,9 +355,9 @@ vendors: multiple-vendors: Entrypoint main 11.6 KiB = multiple-vendors/main.js - Entrypoint a 15.1 KiB = multiple-vendors/libs-x.js 414 bytes multiple-vendors/954.js 414 bytes multiple-vendors/767.js 414 bytes multiple-vendors/390.js 414 bytes multiple-vendors/a.js 13.4 KiB - Entrypoint b 8.14 KiB = multiple-vendors/libs-x.js 414 bytes multiple-vendors/954.js 414 bytes multiple-vendors/767.js 414 bytes multiple-vendors/568.js 414 bytes multiple-vendors/b.js 6.52 KiB - Entrypoint c 8.14 KiB = multiple-vendors/libs-x.js 414 bytes multiple-vendors/769.js 414 bytes multiple-vendors/767.js 414 bytes multiple-vendors/568.js 414 bytes multiple-vendors/c.js 6.52 KiB + Entrypoint a 15.1 KiB = multiple-vendors/libs-x.js 412 bytes multiple-vendors/954.js 412 bytes multiple-vendors/767.js 412 bytes multiple-vendors/390.js 412 bytes multiple-vendors/a.js 13.4 KiB + Entrypoint b 8.13 KiB = multiple-vendors/libs-x.js 412 bytes multiple-vendors/954.js 412 bytes multiple-vendors/767.js 412 bytes multiple-vendors/568.js 412 bytes multiple-vendors/b.js 6.52 KiB + Entrypoint c 8.13 KiB = multiple-vendors/libs-x.js 412 bytes multiple-vendors/769.js 412 bytes multiple-vendors/767.js 412 bytes multiple-vendors/568.js 412 bytes multiple-vendors/c.js 6.52 KiB chunk (runtime: a, b, c, main) multiple-vendors/libs-x.js (libs-x) (id hint: libs) 20 bytes [initial] [rendered] split chunk (cache group: libs) (name: libs-x) > ./a ./index.js 1:0-47 > ./b ./index.js 2:0-47 @@ -427,9 +427,9 @@ multiple-vendors: all: Entrypoint main 11.5 KiB = all/main.js - Entrypoint a 15.1 KiB = all/282.js 414 bytes all/954.js 414 bytes all/767.js 414 bytes all/390.js 414 bytes all/a.js 13.4 KiB - Entrypoint b 8.14 KiB = all/282.js 414 bytes all/954.js 414 bytes all/767.js 414 bytes all/568.js 414 bytes all/b.js 6.52 KiB - Entrypoint c 8.14 KiB = all/282.js 414 bytes all/769.js 414 bytes all/767.js 414 bytes all/568.js 414 bytes all/c.js 6.52 KiB + Entrypoint a 15 KiB = all/282.js 412 bytes all/954.js 412 bytes all/767.js 412 bytes all/390.js 412 bytes all/a.js 13.4 KiB + Entrypoint b 8.13 KiB = all/282.js 412 bytes all/954.js 412 bytes all/767.js 412 bytes all/568.js 412 bytes all/b.js 6.52 KiB + Entrypoint c 8.13 KiB = all/282.js 412 bytes all/769.js 412 bytes all/767.js 412 bytes all/568.js 412 bytes all/c.js 6.52 KiB chunk (runtime: b) all/b.js (b) 116 bytes (javascript) 2.76 KiB (runtime) [entry] [rendered] > ./b b runtime modules 2.76 KiB 4 modules @@ -710,8 +710,8 @@ webpack x.x.x compiled successfully in X ms" exports[`StatsTestCases should print correct stats for commons-plugin-issue-4980 1`] = ` "asset app.a304ced30e50efdd246d-1.js 6.24 KiB [emitted] [immutable] (name: app) -asset vendor.e8705eba33f92df1cf62-1.js 619 bytes [emitted] [immutable] (name: vendor) (id hint: vendor) -Entrypoint app 6.84 KiB = vendor.e8705eba33f92df1cf62-1.js 619 bytes app.a304ced30e50efdd246d-1.js 6.24 KiB +asset vendor.e8705eba33f92df1cf62-1.js 611 bytes [emitted] [immutable] (name: vendor) (id hint: vendor) +Entrypoint app 6.83 KiB = vendor.e8705eba33f92df1cf62-1.js 611 bytes app.a304ced30e50efdd246d-1.js 6.24 KiB runtime modules 2.75 KiB 4 modules orphan modules 118 bytes [orphan] 2 modules cacheable modules 272 bytes @@ -720,8 +720,8 @@ cacheable modules 272 bytes webpack x.x.x compiled successfully in X ms asset app.8f403eca7a1e59a7ce89-2.js 6.25 KiB [emitted] [immutable] (name: app) -asset vendor.e8705eba33f92df1cf62-2.js 619 bytes [emitted] [immutable] (name: vendor) (id hint: vendor) -Entrypoint app 6.86 KiB = vendor.e8705eba33f92df1cf62-2.js 619 bytes app.8f403eca7a1e59a7ce89-2.js 6.25 KiB +asset vendor.e8705eba33f92df1cf62-2.js 611 bytes [emitted] [immutable] (name: vendor) (id hint: vendor) +Entrypoint app 6.85 KiB = vendor.e8705eba33f92df1cf62-2.js 611 bytes app.8f403eca7a1e59a7ce89-2.js 6.25 KiB runtime modules 2.75 KiB 4 modules orphan modules 125 bytes [orphan] 2 modules cacheable modules 279 bytes @@ -1633,9 +1633,9 @@ exports[`StatsTestCases should print correct stats for module-deduplication 1`] "asset e1.js 12.2 KiB [emitted] (name: e1) asset e2.js 12.2 KiB [emitted] (name: e2) asset e3.js 12.2 KiB [emitted] (name: e3) -asset 172.js 858 bytes [emitted] -asset 326.js 858 bytes [emitted] -asset 923.js 858 bytes [emitted] +asset 172.js 856 bytes [emitted] +asset 326.js 856 bytes [emitted] +asset 923.js 856 bytes [emitted] asset 114.js 524 bytes [emitted] asset 593.js 524 bytes [emitted] asset 716.js 524 bytes [emitted] @@ -1679,9 +1679,9 @@ exports[`StatsTestCases should print correct stats for module-deduplication-name "asset e1.js 12.1 KiB [emitted] (name: e1) asset e2.js 12.1 KiB [emitted] (name: e2) asset e3.js 12.1 KiB [emitted] (name: e3) -asset async1.js 964 bytes [emitted] (name: async1) -asset async2.js 964 bytes [emitted] (name: async2) -asset async3.js 964 bytes [emitted] (name: async3) +asset async1.js 962 bytes [emitted] (name: async1) +asset async2.js 962 bytes [emitted] (name: async2) +asset async3.js 962 bytes [emitted] (name: async3) chunk (runtime: e3) e3.js (e3) 242 bytes (javascript) 6.66 KiB (runtime) [entry] [rendered] runtime modules 6.66 KiB 9 modules cacheable modules 242 bytes @@ -1816,7 +1816,7 @@ exports[`StatsTestCases should print correct stats for named-chunk-groups 1`] = "Chunk Group main 11.7 KiB = a-main.js Chunk Group async-a 1.07 KiB = a-52.js 257 bytes a-async-a.js 836 bytes Chunk Group async-b 1.07 KiB = a-52.js 257 bytes a-async-b.js 836 bytes -Chunk Group async-c 1.45 KiB = a-vendors.js 744 bytes a-async-c.js 741 bytes +Chunk Group async-c 1.45 KiB = a-vendors.js 740 bytes a-async-c.js 741 bytes chunk (runtime: main) a-52.js 149 bytes [rendered] split chunk (cache group: default) > ./a ./index.js 1:0-47 > ./b ./index.js 2:0-47 @@ -1843,7 +1843,7 @@ webpack x.x.x compiled successfully Entrypoint main 11.7 KiB = b-main.js Chunk Group async-a 1.07 KiB = b-52.js 257 bytes b-async-a.js 836 bytes Chunk Group async-b 1.07 KiB = b-52.js 257 bytes b-async-b.js 836 bytes -Chunk Group async-c 1.45 KiB = b-vendors.js 744 bytes b-async-c.js 741 bytes +Chunk Group async-c 1.45 KiB = b-vendors.js 740 bytes b-async-c.js 741 bytes chunk (runtime: main) b-52.js 149 bytes [rendered] split chunk (cache group: default) > ./a ./index.js 1:0-47 > ./b ./index.js 2:0-47 @@ -1954,7 +1954,7 @@ webpack x.x.x compiled successfully in X ms" exports[`StatsTestCases should print correct stats for output-module 1`] = ` "asset main.mjs 9.57 KiB [emitted] [javascript module] (name: main) -asset 52.mjs 358 bytes [emitted] [javascript module] +asset 52.mjs 356 bytes [emitted] [javascript module] runtime modules 5.8 KiB 7 modules orphan modules 38 bytes [orphan] 1 module cacheable modules 263 bytes @@ -3068,11 +3068,11 @@ exports[`StatsTestCases should print correct stats for runtime-specific-used-exp "production: asset production-a.js 13.2 KiB [emitted] (name: a) asset production-b.js 13.2 KiB [emitted] (name: b) - asset production-dx_js.js 1.16 KiB [emitted] - asset production-dw_js-_a6170.js 1.16 KiB [emitted] - asset production-dw_js-_a6171.js 1.16 KiB [emitted] - asset production-dy_js.js 1.14 KiB [emitted] - asset production-dz_js.js 1.14 KiB [emitted] + asset production-dw_js-_a6170.js 1.15 KiB [emitted] + asset production-dw_js-_a6171.js 1.15 KiB [emitted] + asset production-dx_js.js 1.15 KiB [emitted] + asset production-dy_js.js 1.13 KiB [emitted] + asset production-dz_js.js 1.13 KiB [emitted] asset production-c.js 93 bytes [emitted] (name: c) chunk (runtime: a) production-a.js (a) 605 bytes (javascript) 6.63 KiB (runtime) [entry] [rendered] runtime modules 6.63 KiB 9 modules @@ -3150,10 +3150,10 @@ exports[`StatsTestCases should print correct stats for runtime-specific-used-exp development: asset development-a.js 15.9 KiB [emitted] (name: a) asset development-b.js 15.9 KiB [emitted] (name: b) - asset development-dw_js.js 2.11 KiB [emitted] - asset development-dx_js.js 2.11 KiB [emitted] - asset development-dy_js.js 2.11 KiB [emitted] - asset development-dz_js.js 2.11 KiB [emitted] + asset development-dw_js.js 2.09 KiB [emitted] + asset development-dx_js.js 2.09 KiB [emitted] + asset development-dy_js.js 2.09 KiB [emitted] + asset development-dz_js.js 2.09 KiB [emitted] asset development-c.js 1.13 KiB [emitted] (name: c) chunk (runtime: a) development-a.js (a) 605 bytes (javascript) 6.63 KiB (runtime) [entry] [rendered] runtime modules 6.63 KiB 9 modules @@ -3235,10 +3235,10 @@ development: global: asset global-a.js 13.4 KiB [emitted] (name: a) asset global-b.js 13.4 KiB [emitted] (name: b) - asset global-dw_js.js 1.16 KiB [emitted] - asset global-dx_js.js 1.16 KiB [emitted] - asset global-dy_js.js 1.16 KiB [emitted] - asset global-dz_js.js 1.16 KiB [emitted] + asset global-dw_js.js 1.15 KiB [emitted] + asset global-dx_js.js 1.15 KiB [emitted] + asset global-dy_js.js 1.15 KiB [emitted] + asset global-dz_js.js 1.15 KiB [emitted] asset global-c.js 93 bytes [emitted] (name: c) chunk (runtime: a) global-a.js (a) 605 bytes (javascript) 6.62 KiB (runtime) [entry] [rendered] runtime modules 6.62 KiB 9 modules @@ -3347,8 +3347,8 @@ webpack x.x.x compiled successfully in X ms" `; exports[`StatsTestCases should print correct stats for scope-hoisting-multi 1`] = ` -"Entrypoint first 14.4 KiB = a-vendor.js 419 bytes a-first.js 14 KiB -Entrypoint second 14 KiB = a-vendor.js 419 bytes a-second.js 13.5 KiB +"Entrypoint first 14.4 KiB = a-vendor.js 417 bytes a-first.js 14 KiB +Entrypoint second 14 KiB = a-vendor.js 417 bytes a-second.js 13.5 KiB runtime modules 15.2 KiB 20 modules orphan modules 37 bytes [orphan] 1 module cacheable modules 807 bytes @@ -3364,8 +3364,8 @@ cacheable modules 807 bytes ./common_lazy_shared.js 25 bytes [built] [code generated] webpack x.x.x compiled successfully in X ms -Entrypoint first 13.7 KiB = b-vendor.js 419 bytes b-first.js 13.3 KiB -Entrypoint second 13.6 KiB = b-vendor.js 419 bytes b-second.js 13.2 KiB +Entrypoint first 13.7 KiB = b-vendor.js 417 bytes b-first.js 13.3 KiB +Entrypoint second 13.6 KiB = b-vendor.js 417 bytes b-second.js 13.2 KiB runtime modules 15.2 KiB 20 modules cacheable modules 975 bytes code generated modules 857 bytes [code generated] @@ -3570,8 +3570,8 @@ exports[`StatsTestCases should print correct stats for split-chunks 1`] = ` "default: Entrypoint main 11.5 KiB = default/main.js Entrypoint a 12.6 KiB = default/a.js - Entrypoint b 3.94 KiB = default/b.js - Entrypoint c 3.94 KiB = default/c.js + Entrypoint b 3.93 KiB = default/b.js + Entrypoint c 3.93 KiB = default/c.js chunk (runtime: b) default/b.js (b) 196 bytes (javascript) 396 bytes (runtime) [entry] [rendered] > ./b b dependent modules 80 bytes [dependent] 4 modules @@ -3629,9 +3629,9 @@ exports[`StatsTestCases should print correct stats for split-chunks 1`] = ` all-chunks: Entrypoint main 11.6 KiB = all-chunks/main.js - Entrypoint a 15.1 KiB = all-chunks/282.js 414 bytes all-chunks/954.js 414 bytes all-chunks/767.js 414 bytes all-chunks/390.js 414 bytes all-chunks/a.js 13.4 KiB - Entrypoint b 8.14 KiB = all-chunks/282.js 414 bytes all-chunks/954.js 414 bytes all-chunks/767.js 414 bytes all-chunks/568.js 414 bytes all-chunks/b.js 6.52 KiB - Entrypoint c 8.14 KiB = all-chunks/282.js 414 bytes all-chunks/769.js 414 bytes all-chunks/767.js 414 bytes all-chunks/568.js 414 bytes all-chunks/c.js 6.52 KiB + Entrypoint a 15.1 KiB = all-chunks/282.js 412 bytes all-chunks/954.js 412 bytes all-chunks/767.js 412 bytes all-chunks/390.js 412 bytes all-chunks/a.js 13.4 KiB + Entrypoint b 8.13 KiB = all-chunks/282.js 412 bytes all-chunks/954.js 412 bytes all-chunks/767.js 412 bytes all-chunks/568.js 412 bytes all-chunks/b.js 6.52 KiB + Entrypoint c 8.13 KiB = all-chunks/282.js 412 bytes all-chunks/769.js 412 bytes all-chunks/767.js 412 bytes all-chunks/568.js 412 bytes all-chunks/c.js 6.52 KiB chunk (runtime: b) all-chunks/b.js (b) 116 bytes (javascript) 2.76 KiB (runtime) ={282}= ={568}= ={767}= ={954}= [entry] [rendered] > ./b b runtime modules 2.76 KiB 4 modules @@ -3701,9 +3701,9 @@ all-chunks: manual: Entrypoint main 11.3 KiB = manual/main.js - Entrypoint a 14.8 KiB = manual/vendors.js 1.05 KiB manual/a.js 13.8 KiB - Entrypoint b 8.45 KiB = manual/vendors.js 1.05 KiB manual/b.js 7.4 KiB - Entrypoint c 8.45 KiB = manual/vendors.js 1.05 KiB manual/c.js 7.4 KiB + Entrypoint a 14.8 KiB = manual/vendors.js 1.04 KiB manual/a.js 13.8 KiB + Entrypoint b 8.44 KiB = manual/vendors.js 1.04 KiB manual/b.js 7.39 KiB + Entrypoint c 8.44 KiB = manual/vendors.js 1.04 KiB manual/c.js 7.39 KiB chunk (runtime: b) manual/b.js (b) 156 bytes (javascript) 2.76 KiB (runtime) ={216}= [entry] [rendered] > ./b b > x b @@ -3771,9 +3771,9 @@ manual: name-too-long: Entrypoint main 11.6 KiB = name-too-long/main.js - Entrypoint aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 15.1 KiB = name-too-long/282.js 414 bytes name-too-long/954.js 414 bytes name-too-long/767.js 414 bytes name-too-long/390.js 414 bytes name-too-long/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.js 13.4 KiB - Entrypoint bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 8.14 KiB = name-too-long/282.js 414 bytes name-too-long/954.js 414 bytes name-too-long/767.js 414 bytes name-too-long/568.js 414 bytes name-too-long/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js 6.52 KiB - Entrypoint cccccccccccccccccccccccccccccc 8.14 KiB = name-too-long/282.js 414 bytes name-too-long/769.js 414 bytes name-too-long/767.js 414 bytes name-too-long/568.js 414 bytes name-too-long/cccccccccccccccccccccccccccccc.js 6.52 KiB + Entrypoint aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 15.1 KiB = name-too-long/282.js 412 bytes name-too-long/954.js 412 bytes name-too-long/767.js 412 bytes name-too-long/390.js 412 bytes name-too-long/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.js 13.4 KiB + Entrypoint bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 8.13 KiB = name-too-long/282.js 412 bytes name-too-long/954.js 412 bytes name-too-long/767.js 412 bytes name-too-long/568.js 412 bytes name-too-long/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js 6.52 KiB + Entrypoint cccccccccccccccccccccccccccccc 8.13 KiB = name-too-long/282.js 412 bytes name-too-long/769.js 412 bytes name-too-long/767.js 412 bytes name-too-long/568.js 412 bytes name-too-long/cccccccccccccccccccccccccccccc.js 6.52 KiB chunk (runtime: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, main) name-too-long/async-g.js (async-g) 45 bytes <{282}> <{390}> <{751}> <{767}> <{794}> <{954}> ={568}= [rendered] > ./g ./a.js 6:0-47 ./g.js 45 bytes [built] [code generated] @@ -3844,8 +3844,8 @@ name-too-long: custom-chunks-filter: Entrypoint main 11.5 KiB = custom-chunks-filter/main.js Entrypoint a 12.6 KiB = custom-chunks-filter/a.js - Entrypoint b 8.14 KiB = custom-chunks-filter/282.js 414 bytes custom-chunks-filter/954.js 414 bytes custom-chunks-filter/568.js 414 bytes custom-chunks-filter/767.js 414 bytes custom-chunks-filter/b.js 6.52 KiB - Entrypoint c 8.14 KiB = custom-chunks-filter/282.js 414 bytes custom-chunks-filter/769.js 414 bytes custom-chunks-filter/568.js 414 bytes custom-chunks-filter/767.js 414 bytes custom-chunks-filter/c.js 6.52 KiB + Entrypoint b 8.13 KiB = custom-chunks-filter/282.js 412 bytes custom-chunks-filter/954.js 412 bytes custom-chunks-filter/568.js 412 bytes custom-chunks-filter/767.js 412 bytes custom-chunks-filter/b.js 6.52 KiB + Entrypoint c 8.13 KiB = custom-chunks-filter/282.js 412 bytes custom-chunks-filter/769.js 412 bytes custom-chunks-filter/568.js 412 bytes custom-chunks-filter/767.js 412 bytes custom-chunks-filter/c.js 6.52 KiB chunk (runtime: b) custom-chunks-filter/b.js (b) 116 bytes (javascript) 2.76 KiB (runtime) ={282}= ={568}= ={767}= ={954}= [entry] [rendered] > ./b b runtime modules 2.76 KiB 4 modules @@ -3909,9 +3909,9 @@ custom-chunks-filter: custom-chunks-filter-in-cache-groups: Entrypoint main 11.3 KiB = custom-chunks-filter-in-cache-groups/main.js - Entrypoint a 14.6 KiB = custom-chunks-filter-in-cache-groups/176.js 864 bytes custom-chunks-filter-in-cache-groups/a.js 13.8 KiB - Entrypoint b 8.45 KiB = custom-chunks-filter-in-cache-groups/vendors.js 1.05 KiB custom-chunks-filter-in-cache-groups/b.js 7.4 KiB - Entrypoint c 8.45 KiB = custom-chunks-filter-in-cache-groups/vendors.js 1.05 KiB custom-chunks-filter-in-cache-groups/c.js 7.4 KiB + Entrypoint a 14.6 KiB = custom-chunks-filter-in-cache-groups/176.js 860 bytes custom-chunks-filter-in-cache-groups/a.js 13.8 KiB + Entrypoint b 8.44 KiB = custom-chunks-filter-in-cache-groups/vendors.js 1.05 KiB custom-chunks-filter-in-cache-groups/b.js 7.39 KiB + Entrypoint c 8.44 KiB = custom-chunks-filter-in-cache-groups/vendors.js 1.05 KiB custom-chunks-filter-in-cache-groups/c.js 7.39 KiB chunk (runtime: b) custom-chunks-filter-in-cache-groups/b.js (b) 156 bytes (javascript) 2.76 KiB (runtime) ={216}= [entry] [rendered] > ./b b > x b @@ -4109,7 +4109,7 @@ default (webpack x.x.x) compiled successfully" `; exports[`StatsTestCases should print correct stats for split-chunks-issue-6696 1`] = ` -"Entrypoint main 13.4 KiB = vendors.js 414 bytes main.js 13 KiB +"Entrypoint main 13.4 KiB = vendors.js 412 bytes main.js 13 KiB chunk (runtime: main) main.js (main) 134 bytes (javascript) 7.6 KiB (runtime) ={216}= >{334}< >{794}< [entry] [rendered] > ./ main runtime modules 7.6 KiB 10 modules @@ -4129,9 +4129,9 @@ default (webpack x.x.x) compiled successfully" `; exports[`StatsTestCases should print correct stats for split-chunks-issue-7401 1`] = ` -"Entrypoint a 6.42 KiB = 282.js 414 bytes a.js 6.02 KiB +"Entrypoint a 6.42 KiB = 282.js 412 bytes a.js 6.02 KiB Entrypoint b 10.9 KiB = b.js -Chunk Group c 797 bytes = 282.js 414 bytes c.js 383 bytes +Chunk Group c 795 bytes = 282.js 412 bytes c.js 383 bytes chunk (runtime: b) b.js (b) 43 bytes (javascript) 6.64 KiB (runtime) >{282}< >{459}< [entry] [rendered] > ./b b runtime modules 6.64 KiB 9 modules @@ -4647,11 +4647,11 @@ exports[`StatsTestCases should print correct stats for split-chunks-runtime-spec "used-exports: asset used-exports-c.js 6.04 KiB [emitted] (name: c) asset used-exports-b.js 6.03 KiB [emitted] (name: b) - asset used-exports-332.js 424 bytes [emitted] + asset used-exports-332.js 422 bytes [emitted] asset used-exports-a.js 257 bytes [emitted] (name: a) Entrypoint a 257 bytes = used-exports-a.js - Entrypoint b 6.44 KiB = used-exports-332.js 424 bytes used-exports-b.js 6.03 KiB - Entrypoint c 6.45 KiB = used-exports-332.js 424 bytes used-exports-c.js 6.04 KiB + Entrypoint b 6.44 KiB = used-exports-332.js 422 bytes used-exports-b.js 6.03 KiB + Entrypoint c 6.45 KiB = used-exports-332.js 422 bytes used-exports-c.js 6.04 KiB chunk (runtime: b) used-exports-b.js (b) 54 bytes (javascript) 2.75 KiB (runtime) [entry] [rendered] runtime modules 2.75 KiB 4 modules ./b.js 54 bytes [built] [code generated] @@ -4668,10 +4668,10 @@ no-used-exports: asset no-used-exports-c.js 6.04 KiB [emitted] (name: c) asset no-used-exports-a.js 6.03 KiB [emitted] (name: a) asset no-used-exports-b.js 6.03 KiB [emitted] (name: b) - asset no-used-exports-332.js 447 bytes [emitted] - Entrypoint a 6.47 KiB = no-used-exports-332.js 447 bytes no-used-exports-a.js 6.03 KiB - Entrypoint b 6.47 KiB = no-used-exports-332.js 447 bytes no-used-exports-b.js 6.03 KiB - Entrypoint c 6.47 KiB = no-used-exports-332.js 447 bytes no-used-exports-c.js 6.04 KiB + asset no-used-exports-332.js 443 bytes [emitted] + Entrypoint a 6.46 KiB = no-used-exports-332.js 443 bytes no-used-exports-a.js 6.03 KiB + Entrypoint b 6.46 KiB = no-used-exports-332.js 443 bytes no-used-exports-b.js 6.03 KiB + Entrypoint c 6.47 KiB = no-used-exports-332.js 443 bytes no-used-exports-c.js 6.04 KiB chunk (runtime: b) no-used-exports-b.js (b) 54 bytes (javascript) 2.75 KiB (runtime) [entry] [rendered] runtime modules 2.75 KiB 4 modules ./b.js 54 bytes [built] [code generated] @@ -4689,10 +4689,10 @@ global: asset global-c.js 6.04 KiB [emitted] (name: c) asset global-a.js 6.03 KiB [emitted] (name: a) asset global-b.js 6.03 KiB [emitted] (name: b) - asset global-332.js 447 bytes [emitted] - Entrypoint a 6.47 KiB = global-332.js 447 bytes global-a.js 6.03 KiB - Entrypoint b 6.47 KiB = global-332.js 447 bytes global-b.js 6.03 KiB - Entrypoint c 6.47 KiB = global-332.js 447 bytes global-c.js 6.04 KiB + asset global-332.js 443 bytes [emitted] + Entrypoint a 6.46 KiB = global-332.js 443 bytes global-a.js 6.03 KiB + Entrypoint b 6.46 KiB = global-332.js 443 bytes global-b.js 6.03 KiB + Entrypoint c 6.47 KiB = global-332.js 443 bytes global-c.js 6.04 KiB chunk (runtime: b) global-b.js (b) 54 bytes (javascript) 2.75 KiB (runtime) [entry] [rendered] runtime modules 2.75 KiB 4 modules ./b.js 54 bytes [built] [code generated] @@ -4708,7 +4708,7 @@ global: `; exports[`StatsTestCases should print correct stats for tree-shaking 1`] = ` -"asset bundle.js 6.89 KiB [emitted] (name: main) +"asset bundle.js 6.88 KiB [emitted] (name: main) runtime modules 663 bytes 3 modules orphan modules 14 bytes [orphan] 1 module cacheable modules 782 bytes @@ -4760,9 +4760,9 @@ webpack x.x.x compiled with 1 warning in X ms" exports[`StatsTestCases should print correct stats for wasm-explorer-examples-sync 1`] = ` "assets by path *.js 21.8 KiB asset bundle.js 16.3 KiB [emitted] (name: main) - asset 325.bundle.js 3.9 KiB [emitted] + asset 325.bundle.js 3.89 KiB [emitted] asset 795.bundle.js 557 bytes [emitted] - asset 526.bundle.js 366 bytes [emitted] (id hint: vendors) + asset 526.bundle.js 364 bytes [emitted] (id hint: vendors) asset 189.bundle.js 243 bytes [emitted] asset 517.bundle.js 243 bytes [emitted] asset 20.bundle.js 241 bytes [emitted] diff --git a/test/configCases/code-generation/import-export-format/cjs-module.js b/test/configCases/code-generation/import-export-format/cjs-module.js new file mode 100644 index 000000000..1286372d8 --- /dev/null +++ b/test/configCases/code-generation/import-export-format/cjs-module.js @@ -0,0 +1,3 @@ +const foo = 42; + +module.exports = { foo }; diff --git a/test/configCases/code-generation/import-export-format/harmony-module-2.js b/test/configCases/code-generation/import-export-format/harmony-module-2.js new file mode 100644 index 000000000..b3b6620c9 --- /dev/null +++ b/test/configCases/code-generation/import-export-format/harmony-module-2.js @@ -0,0 +1,5 @@ +export const baz = 11; + +import { mod3 } from "./index"; +console.log(mod3.apple); + diff --git a/test/configCases/code-generation/import-export-format/harmony-module-3.js b/test/configCases/code-generation/import-export-format/harmony-module-3.js new file mode 100644 index 000000000..11dbbe78d --- /dev/null +++ b/test/configCases/code-generation/import-export-format/harmony-module-3.js @@ -0,0 +1 @@ +export var apple = 45; diff --git a/test/configCases/code-generation/import-export-format/harmony-module.js b/test/configCases/code-generation/import-export-format/harmony-module.js new file mode 100644 index 000000000..b4f6c9f9a --- /dev/null +++ b/test/configCases/code-generation/import-export-format/harmony-module.js @@ -0,0 +1,5 @@ +export const bar = 42; + +const def = -12; +export default def; + diff --git a/test/configCases/code-generation/import-export-format/index.js b/test/configCases/code-generation/import-export-format/index.js new file mode 100644 index 000000000..673f272da --- /dev/null +++ b/test/configCases/code-generation/import-export-format/index.js @@ -0,0 +1,52 @@ +import { foo as cjsexport_harmonyimport } from "./cjs-module"; +import theDefault, { bar as harmonyexport_harmonyimport } from "./harmony-module"; +const { harmonyexport_cjsimport } = require("./harmony-module").bar; +import { baz as harmonyexport_harmonyimport_2 } from "./harmony-module-2"; + +import * as mod3 from "./harmony-module-3"; +export { mod3 }; + +// This is necessary because 'source' contains the code for this test file, which will always contain the string +// being tested for, so we have to use negative lookahead/lookbehind to exclude the actual testing code from the test. +function expectSourceToContain(source, str) { + expect(source).toMatch(new RegExp(`^.*?(? (/* binding */ bar)"); + + // Checking formation of imports + expectSourceToContain(source, "harmony_module/* bar */.a;"); + expectSourceToMatch(source, `${escape("const { harmonyexport_cjsimport } = (__webpack_require__(/*! ./harmony-module */ ")}\\d+${escape(")/* .bar */ .a);")}`); + + // Checking concatenatedmodule.js formation of exports + expectSourceToContain(source, "a: () => (/* reexport */ harmony_module_3_namespaceObject)"); + + // Checking concatenatedmodule.js formation of namespace objects + expectSourceToContain(source, "a: () => (apple)"); +}); diff --git a/test/configCases/code-generation/import-export-format/webpack.config.js b/test/configCases/code-generation/import-export-format/webpack.config.js new file mode 100644 index 000000000..d68b9b7d4 --- /dev/null +++ b/test/configCases/code-generation/import-export-format/webpack.config.js @@ -0,0 +1,14 @@ +/** @type {import("../../../../").Configuration} */ +module.exports = { + node: { + __dirname: false, + __filename: false + }, + optimization: { + concatenateModules: true, + usedExports: true, + providedExports: true, + minimize: false, + mangleExports: "size" + } +}; diff --git a/test/configCases/output-module/reuse-webpack-esm-library/lib.js b/test/configCases/output-module/reuse-webpack-esm-library/lib.js index abd78cc6d..cfddc0c4e 100644 --- a/test/configCases/output-module/reuse-webpack-esm-library/lib.js +++ b/test/configCases/output-module/reuse-webpack-esm-library/lib.js @@ -77,8 +77,8 @@ var __webpack_exports__ = {}; \***************************/ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { - /* harmony export */ "useCall": () => (/* binding */ useCall), - /* harmony export */ "withCallManager": () => (/* binding */ withCallManager) + /* harmony export */ useCall: () => (/* binding */ useCall), + /* harmony export */ withCallManager: () => (/* binding */ withCallManager) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); diff --git a/test/propertyAccess.unittest.js b/test/propertyAccess.unittest.js new file mode 100644 index 000000000..51f339797 --- /dev/null +++ b/test/propertyAccess.unittest.js @@ -0,0 +1,26 @@ +const propertyAccess = require("../lib/util/propertyAccess"); + +describe("propertyAccess", () => { + it("brackets but does not quote numbers", () => { + expect(propertyAccess(["12"])).toBe("[12]"); + }); + + it("brackets and quotes special cases", () => { + expect(propertyAccess(["class"])).toBe('["class"]'); + expect(propertyAccess(["white space"])).toBe('["white space"]'); + expect(propertyAccess(["3cc"])).toBe('["3cc"]'); + }); + + it("uses dot notation on all other cases", () => { + expect(propertyAccess(["a"])).toBe(".a"); + expect(propertyAccess(["_xyz"])).toBe("._xyz"); + expect(propertyAccess(["cc3"])).toBe(".cc3"); + }); + + it("handles multiple levels", () => { + expect(propertyAccess(["a", "b", "c"])).toBe(".a.b.c"); + expect(propertyAccess(["null", "await", "if"])).toBe( + '["null"]["await"]["if"]' + ); + }); +}); diff --git a/test/propertyName.unittest.js b/test/propertyName.unittest.js new file mode 100644 index 000000000..72a1cff7a --- /dev/null +++ b/test/propertyName.unittest.js @@ -0,0 +1,15 @@ +const { propertyName } = require("../lib/util/propertyName"); + +describe("propertyName", () => { + it("quotes special cases", () => { + expect(propertyName("class")).toBe('"class"'); + expect(propertyName("white space")).toBe('"white space"'); + expect(propertyName("3cc")).toBe('"3cc"'); + }); + + it("passes non-special cases through", () => { + expect(propertyName("a")).toBe("a"); + expect(propertyName("_xyz")).toBe("_xyz"); + expect(propertyName("cc3")).toBe("cc3"); + }); +}); From c6f518eb5b34c410d64b2c4a02e4ce06f0060a7d Mon Sep 17 00:00:00 2001 From: Ben Worline Date: Thu, 4 May 2023 21:18:20 -0700 Subject: [PATCH 2/7] remove testing code --- test/configCases/code-generation/import-export-format/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/configCases/code-generation/import-export-format/index.js b/test/configCases/code-generation/import-export-format/index.js index 673f272da..8775e50f4 100644 --- a/test/configCases/code-generation/import-export-format/index.js +++ b/test/configCases/code-generation/import-export-format/index.js @@ -25,7 +25,6 @@ it("should use the same accessor syntax for import and export", function() { var fs = require("fs"); var source = fs.readFileSync(__filename, "utf-8").toString(); - fs.writeFileSync("D:/output.js", source); // Reference these imports to generate uses in the source. From 19b46355fc55148bf0558213ff982bafafd4eb00 Mon Sep 17 00:00:00 2001 From: Ben Worline Date: Thu, 4 May 2023 21:36:03 -0700 Subject: [PATCH 3/7] fix import ordering --- lib/dependencies/HarmonyExportImportedSpecifierDependency.js | 2 +- lib/optimize/ConcatenatedModule.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/dependencies/HarmonyExportImportedSpecifierDependency.js b/lib/dependencies/HarmonyExportImportedSpecifierDependency.js index 18f6ff28d..5a6f78cb8 100644 --- a/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +++ b/lib/dependencies/HarmonyExportImportedSpecifierDependency.js @@ -15,11 +15,11 @@ const { countIterable } = require("../util/IterableHelpers"); const { first, combine } = require("../util/SetHelpers"); const makeSerializable = require("../util/makeSerializable"); const propertyAccess = require("../util/propertyAccess"); +const { propertyName } = require("../util/propertyName"); const { getRuntimeKey, keyToRuntime } = require("../util/runtime"); const HarmonyExportInitFragment = require("./HarmonyExportInitFragment"); const HarmonyImportDependency = require("./HarmonyImportDependency"); const processExportInfo = require("./processExportInfo"); -const { propertyName } = require("../util/propertyName"); /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */ /** @typedef {import("../ChunkGraph")} ChunkGraph */ diff --git a/lib/optimize/ConcatenatedModule.js b/lib/optimize/ConcatenatedModule.js index b0cb0b0de..1cd7526f2 100644 --- a/lib/optimize/ConcatenatedModule.js +++ b/lib/optimize/ConcatenatedModule.js @@ -27,6 +27,7 @@ const createHash = require("../util/createHash"); const { makePathsRelative } = require("../util/identifier"); const makeSerializable = require("../util/makeSerializable"); const propertyAccess = require("../util/propertyAccess"); +const { propertyName } = require("../util/propertyName"); const { filterRuntime, intersectRuntime, @@ -35,7 +36,6 @@ const { runtimeConditionToString, subtractRuntimeCondition } = require("../util/runtime"); -const { propertyName } = require("../util/propertyName"); /** @typedef {import("eslint-scope").Scope} Scope */ /** @typedef {import("webpack-sources").Source} Source */ From f7d83a4a6683d325f00720da499e000f2d3dde40 Mon Sep 17 00:00:00 2001 From: Ben Worline Date: Tue, 9 May 2023 11:58:57 -0700 Subject: [PATCH 4/7] move expectSourceToContain, expectSourceToMatch, regexEscape to helper files --- .../import-export-format/index.js | 17 +++++------------ test/helpers/expectSource.js | 17 +++++++++++++++++ test/helpers/regexEscape.js | 3 +++ 3 files changed, 25 insertions(+), 12 deletions(-) create mode 100644 test/helpers/expectSource.js create mode 100644 test/helpers/regexEscape.js diff --git a/test/configCases/code-generation/import-export-format/index.js b/test/configCases/code-generation/import-export-format/index.js index 8775e50f4..836850d59 100644 --- a/test/configCases/code-generation/import-export-format/index.js +++ b/test/configCases/code-generation/import-export-format/index.js @@ -6,17 +6,8 @@ import { baz as harmonyexport_harmonyimport_2 } from "./harmony-module-2"; import * as mod3 from "./harmony-module-3"; export { mod3 }; -// This is necessary because 'source' contains the code for this test file, which will always contain the string -// being tested for, so we have to use negative lookahead/lookbehind to exclude the actual testing code from the test. -function expectSourceToContain(source, str) { - expect(source).toMatch(new RegExp(`^.*?(? (/* reexport */ harmony_module_3_namespaceObject)"); diff --git a/test/helpers/expectSource.js b/test/helpers/expectSource.js new file mode 100644 index 000000000..583b16b90 --- /dev/null +++ b/test/helpers/expectSource.js @@ -0,0 +1,17 @@ +var regexEscape = require("./regexEscape.js"); + +// These expect* methods are necessary because 'source' contains the code for this test file, which will always contain the string +// being tested for, so we have to use the "DO NOT MATCH BELOW..." technique to exclude the actual testing code from the test. +// Place your jest 'expect' calls below a line containing the DO NOT MATCH BELOW... string constructed below. See other tests for examples. + +// Break up the match string so we don't match it in these expect* funtions either. +const doNotMatch = ["DO", "NOT", "MATCH", "BELOW", "THIS", "LINE"].join(" "); + +function expectSourceToContain(source, str) { + expect(source).toMatch(new RegExp(regexEscape(str) + ".*" + doNotMatch, "s")); +} +function expectSourceToMatch(source, regexStr) { + expect(source).toMatch(new RegExp(regexStr + ".*" + doNotMatch, "s")); +} + +module.exports = { expectSourceToContain, expectSourceToMatch }; diff --git a/test/helpers/regexEscape.js b/test/helpers/regexEscape.js new file mode 100644 index 000000000..11f4b6f00 --- /dev/null +++ b/test/helpers/regexEscape.js @@ -0,0 +1,3 @@ +module.exports = function regexEscape(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string +}; From 1f44d166fec8817829e5404a23a0d07e6cb68106 Mon Sep 17 00:00:00 2001 From: Ben Worline Date: Tue, 9 May 2023 12:16:32 -0700 Subject: [PATCH 5/7] merge with main --- lib/Compilation.js | 3 +- lib/DependenciesBlock.js | 8 + lib/HotModuleReplacementPlugin.js | 5 +- lib/Module.js | 5 +- lib/ModuleTypeConstants.js | 90 +++ lib/NormalModule.js | 3 +- lib/RuntimeModule.js | 7 +- lib/Template.js | 3 +- lib/asset/AssetGenerator.js | 7 +- lib/asset/AssetModulesPlugin.js | 32 +- lib/asset/RawDataUrlModule.js | 3 +- lib/config/defaults.js | 5 +- lib/container/FallbackModule.js | 3 +- lib/container/RemoteModule.js | 3 +- lib/css/CssModulesPlugin.js | 19 +- lib/css/CssParser.js | 570 ++++++++------- lib/css/walkCssTokens.js | 29 +- lib/esm/ModuleChunkLoadingRuntimeModule.js | 6 +- lib/hmr/LazyCompilationPlugin.js | 17 +- lib/javascript/JavascriptModulesPlugin.js | 5 +- lib/node/ReadFileChunkLoadingRuntimeModule.js | 4 +- lib/sharing/ConsumeSharedModule.js | 7 +- lib/sharing/ProvideSharedModule.js | 3 +- lib/stats/DefaultStatsFactoryPlugin.js | 11 +- lib/util/createHash.js | 7 +- lib/web/JsonpChunkLoadingRuntimeModule.js | 12 +- package.json | 2 +- .../ConfigCacheTestCases.longtest.js.snap | 673 +++++++++++++++++- .../ConfigTestCases.basictest.js.snap | 673 +++++++++++++++++- .../StatsTestCases.basictest.js.snap | 426 +++++------ test/configCases/css/css-import/style.css | 4 +- .../css/css-modules-in-node/index.js | 23 +- test/configCases/css/css-modules/index.js | 23 +- .../css/css-modules/style.module.css | 354 +++++++++ test/configCases/css/css-modules/use-style.js | 7 + .../css/import-module/a-pitching-loader.js | 9 + test/configCases/css/import-module/colors.js | 2 + test/configCases/css/import-module/index.js | 6 + .../css/import-module/stylesheet.js | 3 + .../css/import-module/webpack.config.js | 19 + test/configCases/css/pure-css/style.css | 6 + .../debug-hash/files/file1.js | 1 + .../debug-hash/files/file10.js | 1 + .../debug-hash/files/file11.js | 1 + .../debug-hash/files/file12.js | 1 + .../debug-hash/files/file13.js | 1 + .../debug-hash/files/file14.js | 1 + .../debug-hash/files/file15.js | 1 + .../debug-hash/files/file2.js | 1 + .../debug-hash/files/file3.js | 1 + .../debug-hash/files/file4.js | 1 + .../debug-hash/files/file5.js | 1 + .../debug-hash/files/file6.js | 1 + .../debug-hash/files/file7.js | 1 + .../debug-hash/files/file8.js | 1 + .../debug-hash/files/file9.js | 1 + .../custom-hash-function/debug-hash/index.js | 8 + .../debug-hash/webpack.config.js | 8 + .../web/prefetch-preload-module/chunk1-a.js | 0 .../web/prefetch-preload-module/chunk1-b.js | 0 .../web/prefetch-preload-module/chunk1-c.js | 0 .../web/prefetch-preload-module/chunk1.js | 5 + .../web/prefetch-preload-module/chunk2.js | 4 + .../web/prefetch-preload-module/index.js | 90 +++ .../web/prefetch-preload-module/index.mjs | 89 +++ .../prefetch-preload-module/webpack.config.js | 22 + types.d.ts | 54 +- yarn.lock | 32 +- 68 files changed, 2864 insertions(+), 560 deletions(-) create mode 100644 test/configCases/css/import-module/a-pitching-loader.js create mode 100644 test/configCases/css/import-module/colors.js create mode 100644 test/configCases/css/import-module/index.js create mode 100644 test/configCases/css/import-module/stylesheet.js create mode 100644 test/configCases/css/import-module/webpack.config.js create mode 100644 test/configCases/custom-hash-function/debug-hash/files/file1.js create mode 100644 test/configCases/custom-hash-function/debug-hash/files/file10.js create mode 100644 test/configCases/custom-hash-function/debug-hash/files/file11.js create mode 100644 test/configCases/custom-hash-function/debug-hash/files/file12.js create mode 100644 test/configCases/custom-hash-function/debug-hash/files/file13.js create mode 100644 test/configCases/custom-hash-function/debug-hash/files/file14.js create mode 100644 test/configCases/custom-hash-function/debug-hash/files/file15.js create mode 100644 test/configCases/custom-hash-function/debug-hash/files/file2.js create mode 100644 test/configCases/custom-hash-function/debug-hash/files/file3.js create mode 100644 test/configCases/custom-hash-function/debug-hash/files/file4.js create mode 100644 test/configCases/custom-hash-function/debug-hash/files/file5.js create mode 100644 test/configCases/custom-hash-function/debug-hash/files/file6.js create mode 100644 test/configCases/custom-hash-function/debug-hash/files/file7.js create mode 100644 test/configCases/custom-hash-function/debug-hash/files/file8.js create mode 100644 test/configCases/custom-hash-function/debug-hash/files/file9.js create mode 100644 test/configCases/custom-hash-function/debug-hash/index.js create mode 100644 test/configCases/custom-hash-function/debug-hash/webpack.config.js create mode 100644 test/configCases/web/prefetch-preload-module/chunk1-a.js create mode 100644 test/configCases/web/prefetch-preload-module/chunk1-b.js create mode 100644 test/configCases/web/prefetch-preload-module/chunk1-c.js create mode 100644 test/configCases/web/prefetch-preload-module/chunk1.js create mode 100644 test/configCases/web/prefetch-preload-module/chunk2.js create mode 100644 test/configCases/web/prefetch-preload-module/index.js create mode 100644 test/configCases/web/prefetch-preload-module/index.mjs create mode 100644 test/configCases/web/prefetch-preload-module/webpack.config.js diff --git a/lib/Compilation.js b/lib/Compilation.js index 84d515326..23d61065b 100644 --- a/lib/Compilation.js +++ b/lib/Compilation.js @@ -49,6 +49,7 @@ const ModuleProfile = require("./ModuleProfile"); const ModuleRestoreError = require("./ModuleRestoreError"); const ModuleStoreError = require("./ModuleStoreError"); const ModuleTemplate = require("./ModuleTemplate"); +const { WEBPACK_MODULE_TYPE_RUNTIME } = require("./ModuleTypeConstants"); const RuntimeGlobals = require("./RuntimeGlobals"); const RuntimeTemplate = require("./RuntimeTemplate"); const Stats = require("./Stats"); @@ -5121,7 +5122,7 @@ This prevents using hashes of each other and should be avoided.`); const usedIds = new Set(); for (const module of this.modules) { - if (module.type === "runtime") continue; + if (module.type === WEBPACK_MODULE_TYPE_RUNTIME) continue; const moduleId = chunkGraph.getModuleId(module); if (moduleId === null) continue; if (usedIds.has(moduleId)) { diff --git a/lib/DependenciesBlock.js b/lib/DependenciesBlock.js index 7fb4f485d..70e83e07b 100644 --- a/lib/DependenciesBlock.js +++ b/lib/DependenciesBlock.js @@ -18,6 +18,14 @@ const makeSerializable = require("./util/makeSerializable"); /** @typedef {(d: Dependency) => boolean} DependencyFilterFunction */ +/** + * DependenciesBlock is the base class for all Module classes in webpack. It describes a + * "block" of dependencies which are pointers to other DependenciesBlock instances. For example + * when a Module has a CommonJs require statement, the DependencyBlock for the CommonJs module + * would be added as a dependency to the Module. DependenciesBlock is inherited by two types of classes: + * Module subclasses and AsyncDependenciesBlock subclasses. The only difference between the two is that + * AsyncDependenciesBlock subclasses are used for code-splitting (async boundary) and Module subclasses are not. + */ class DependenciesBlock { constructor() { /** @type {Dependency[]} */ diff --git a/lib/HotModuleReplacementPlugin.js b/lib/HotModuleReplacementPlugin.js index 0587f3c34..fda3f282e 100644 --- a/lib/HotModuleReplacementPlugin.js +++ b/lib/HotModuleReplacementPlugin.js @@ -38,7 +38,8 @@ const { const { JAVASCRIPT_MODULE_TYPE_AUTO, JAVASCRIPT_MODULE_TYPE_DYNAMIC, - JAVASCRIPT_MODULE_TYPE_ESM + JAVASCRIPT_MODULE_TYPE_ESM, + WEBPACK_MODULE_TYPE_RUNTIME } = require("./ModuleTypeConstants"); /** @typedef {import("./Chunk")} Chunk */ @@ -564,7 +565,7 @@ class HotModuleReplacementPlugin { newRuntime ); if (hash !== oldHash) { - if (module.type === "runtime") { + if (module.type === WEBPACK_MODULE_TYPE_RUNTIME) { newRuntimeModules = newRuntimeModules || []; newRuntimeModules.push( /** @type {RuntimeModule} */ (module) diff --git a/lib/Module.js b/lib/Module.js index e09276eb9..fcc962981 100644 --- a/lib/Module.js +++ b/lib/Module.js @@ -28,6 +28,7 @@ const makeSerializable = require("./util/makeSerializable"); /** @typedef {import("./ExportsInfo").UsageStateType} UsageStateType */ /** @typedef {import("./FileSystemInfo")} FileSystemInfo */ /** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */ +/** @typedef {import("./ModuleTypeConstants").ModuleTypes} ModuleTypes */ /** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */ /** @typedef {import("./RequestShortener")} RequestShortener */ /** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */ @@ -129,14 +130,14 @@ const deprecatedNeedRebuild = util.deprecate( class Module extends DependenciesBlock { /** - * @param {string} type the module type + * @param {ModuleTypes | ""} type the module type, when deserializing the type is not known and is an empty string * @param {string=} context an optional context * @param {string=} layer an optional layer in which the module is */ constructor(type, context = null, layer = null) { super(); - /** @type {string} */ + /** @type {ModuleTypes | ""} */ this.type = type; /** @type {string | null} */ this.context = context; diff --git a/lib/ModuleTypeConstants.js b/lib/ModuleTypeConstants.js index 397f04dd0..41e2a6e7e 100644 --- a/lib/ModuleTypeConstants.js +++ b/lib/ModuleTypeConstants.js @@ -60,6 +60,88 @@ const CSS_MODULE_TYPE_GLOBAL = "css/global"; */ const CSS_MODULE_TYPE_MODULE = "css/module"; +/** + * @type {Readonly<"asset">} + * This is the module type used for automatically choosing between `asset/inline`, `asset/resource` based on asset size limit (8096). + */ +const ASSET_MODULE_TYPE = "asset"; + +/** + * @type {Readonly<"asset/inline">} + * This is the module type used for assets that are inlined as a data URI. This is the equivalent of `url-loader`. + */ +const ASSET_MODULE_TYPE_INLINE = "asset/inline"; + +/** + * @type {Readonly<"asset/resource">} + * This is the module type used for assets that are copied to the output directory. This is the equivalent of `file-loader`. + */ +const ASSET_MODULE_TYPE_RESOURCE = "asset/resource"; + +/** + * @type {Readonly<"asset/source">} + * This is the module type used for assets that are imported as source code. This is the equivalent of `raw-loader`. + */ +const ASSET_MODULE_TYPE_SOURCE = "asset/source"; + +/** + * @type {Readonly<"asset/raw-data-url">} + * TODO: Document what this asset type is for. See css-loader tests for its usage. + */ +const ASSET_MODULE_TYPE_RAW_DATA_URL = "asset/raw-data-url"; + +/** + * @type {Readonly<"runtime">} + * This is the module type used for the webpack runtime abstractions. + */ +const WEBPACK_MODULE_TYPE_RUNTIME = "runtime"; + +/** + * @type {Readonly<"fallback-module">} + * This is the module type used for the ModuleFederation feature's FallbackModule class. + * TODO: Document this better. + */ +const WEBPACK_MODULE_TYPE_FALLBACK = "fallback-module"; + +/** + * @type {Readonly<"remote-module">} + * This is the module type used for the ModuleFederation feature's RemoteModule class. + * TODO: Document this better. + */ +const WEBPACK_MODULE_TYPE_REMOTE = "remote-module"; + +/** + * @type {Readonly<"provide-module">} + * This is the module type used for the ModuleFederation feature's ProvideModule class. + * TODO: Document this better. + */ +const WEBPACK_MODULE_TYPE_PROVIDE = "provide-module"; + +/** + * @type {Readonly<"consume-shared-module">} + * This is the module type used for the ModuleFederation feature's ConsumeSharedModule class. + */ +const WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE = "consume-shared-module"; + +/** + * @type {Readonly<"lazy-compilation-proxy">} + * Module type used for `experiments.lazyCompilation` feature. See `LazyCompilationPlugin` for more information. + */ +const WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY = "lazy-compilation-proxy"; + +/** @typedef {"javascript/auto" | "javascript/dynamic" | "javascript/esm"} JavaScriptModuleTypes */ +/** @typedef {"json"} JSONModuleType */ +/** @typedef {"webassembly/async" | "webassembly/sync"} WebAssemblyModuleTypes */ +/** @typedef {"css" | "css/global" | "css/module"} CSSModuleTypes */ +/** @typedef {"asset" | "asset/inline" | "asset/resource" | "asset/source" | "asset/raw-data-url"} AssetModuleTypes */ +/** @typedef {"runtime" | "fallback-module" | "remote-module" | "provide-module" | "consume-shared-module" | "lazy-compilation-proxy"} WebpackModuleTypes */ +/** @typedef {JavaScriptModuleTypes | JSONModuleType | WebAssemblyModuleTypes | CSSModuleTypes | AssetModuleTypes | WebpackModuleTypes} ModuleTypes */ + +exports.ASSET_MODULE_TYPE = ASSET_MODULE_TYPE; +exports.ASSET_MODULE_TYPE_RAW_DATA_URL = ASSET_MODULE_TYPE_RAW_DATA_URL; +exports.ASSET_MODULE_TYPE_SOURCE = ASSET_MODULE_TYPE_SOURCE; +exports.ASSET_MODULE_TYPE_RESOURCE = ASSET_MODULE_TYPE_RESOURCE; +exports.ASSET_MODULE_TYPE_INLINE = ASSET_MODULE_TYPE_INLINE; exports.JAVASCRIPT_MODULE_TYPE_AUTO = JAVASCRIPT_MODULE_TYPE_AUTO; exports.JAVASCRIPT_MODULE_TYPE_DYNAMIC = JAVASCRIPT_MODULE_TYPE_DYNAMIC; exports.JAVASCRIPT_MODULE_TYPE_ESM = JAVASCRIPT_MODULE_TYPE_ESM; @@ -69,3 +151,11 @@ exports.WEBASSEMBLY_MODULE_TYPE_SYNC = WEBASSEMBLY_MODULE_TYPE_SYNC; exports.CSS_MODULE_TYPE = CSS_MODULE_TYPE; exports.CSS_MODULE_TYPE_GLOBAL = CSS_MODULE_TYPE_GLOBAL; exports.CSS_MODULE_TYPE_MODULE = CSS_MODULE_TYPE_MODULE; +exports.WEBPACK_MODULE_TYPE_RUNTIME = WEBPACK_MODULE_TYPE_RUNTIME; +exports.WEBPACK_MODULE_TYPE_FALLBACK = WEBPACK_MODULE_TYPE_FALLBACK; +exports.WEBPACK_MODULE_TYPE_REMOTE = WEBPACK_MODULE_TYPE_REMOTE; +exports.WEBPACK_MODULE_TYPE_PROVIDE = WEBPACK_MODULE_TYPE_PROVIDE; +exports.WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE = + WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE; +exports.WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY = + WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY; diff --git a/lib/NormalModule.js b/lib/NormalModule.js index 610d5d9e9..87b78f30f 100644 --- a/lib/NormalModule.js +++ b/lib/NormalModule.js @@ -65,6 +65,7 @@ const memoize = require("./util/memoize"); /** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */ /** @typedef {import("./ModuleGraph")} ModuleGraph */ /** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */ +/** @typedef {import("./ModuleTypeConstants").JavaScriptModuleTypes} JavaScriptModuleTypes */ /** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */ /** @typedef {import("./Parser")} Parser */ /** @typedef {import("./RequestShortener")} RequestShortener */ @@ -201,7 +202,7 @@ makeSerializable( /** * @typedef {Object} NormalModuleCreateData * @property {string=} layer an optional layer in which the module is - * @property {string} type module type + * @property {JavaScriptModuleTypes | ""} type module type. When deserializing, this is set to an empty string "". * @property {string} request request string * @property {string} userRequest request intended by user (without loaders from config) * @property {string} rawRequest request without resolving diff --git a/lib/RuntimeModule.js b/lib/RuntimeModule.js index 9c955d95d..dc711c758 100644 --- a/lib/RuntimeModule.js +++ b/lib/RuntimeModule.js @@ -8,6 +8,7 @@ const { RawSource } = require("webpack-sources"); const OriginalSource = require("webpack-sources").OriginalSource; const Module = require("./Module"); +const { WEBPACK_MODULE_TYPE_RUNTIME } = require("./ModuleTypeConstants"); /** @typedef {import("webpack-sources").Source} Source */ /** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions */ @@ -24,7 +25,7 @@ const Module = require("./Module"); /** @typedef {import("./util/Hash")} Hash */ /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */ -const TYPES = new Set(["runtime"]); +const TYPES = new Set([WEBPACK_MODULE_TYPE_RUNTIME]); class RuntimeModule extends Module { /** @@ -32,7 +33,7 @@ class RuntimeModule extends Module { * @param {number=} stage an optional stage */ constructor(name, stage = 0) { - super("runtime"); + super(WEBPACK_MODULE_TYPE_RUNTIME); this.name = name; this.stage = stage; this.buildMeta = {}; @@ -137,7 +138,7 @@ class RuntimeModule extends Module { const generatedCode = this.getGeneratedCode(); if (generatedCode) { sources.set( - "runtime", + WEBPACK_MODULE_TYPE_RUNTIME, this.useSourceMap || this.useSimpleSourceMap ? new OriginalSource(generatedCode, this.identifier()) : new RawSource(generatedCode) diff --git a/lib/Template.js b/lib/Template.js index 35c17ec2b..59cb2c157 100644 --- a/lib/Template.js +++ b/lib/Template.js @@ -6,6 +6,7 @@ "use strict"; const { ConcatSource, PrefixSource } = require("webpack-sources"); +const { WEBPACK_MODULE_TYPE_RUNTIME } = require("./ModuleTypeConstants"); /** @typedef {import("webpack-sources").Source} Source */ /** @typedef {import("../declarations/WebpackOptions").Output} OutputOptions */ @@ -362,7 +363,7 @@ class Template { runtimeSource = codeGenerationResults.getSource( module, renderContext.chunk.runtime, - "runtime" + WEBPACK_MODULE_TYPE_RUNTIME ); } else { const codeGenResult = module.codeGeneration({ diff --git a/lib/asset/AssetGenerator.js b/lib/asset/AssetGenerator.js index 80e6ddba3..deb975310 100644 --- a/lib/asset/AssetGenerator.js +++ b/lib/asset/AssetGenerator.js @@ -10,6 +10,7 @@ const path = require("path"); const { RawSource } = require("webpack-sources"); const ConcatenationScope = require("../ConcatenationScope"); const Generator = require("../Generator"); +const { ASSET_MODULE_TYPE } = require("../ModuleTypeConstants"); const RuntimeGlobals = require("../RuntimeGlobals"); const createHash = require("../util/createHash"); const { makePathsRelative } = require("../util/identifier"); @@ -122,7 +123,7 @@ const decodeDataUriContent = (encoding, content) => { }; const JS_TYPES = new Set(["javascript"]); -const JS_AND_ASSET_TYPES = new Set(["javascript", "asset"]); +const JS_AND_ASSET_TYPES = new Set(["javascript", ASSET_MODULE_TYPE]); const DEFAULT_ENCODING = "base64"; class AssetGenerator extends Generator { @@ -228,7 +229,7 @@ class AssetGenerator extends Generator { } ) { switch (type) { - case "asset": + case ASSET_MODULE_TYPE: return module.originalSource(); default: { let content; @@ -406,7 +407,7 @@ class AssetGenerator extends Generator { */ getSize(module, type) { switch (type) { - case "asset": { + case ASSET_MODULE_TYPE: { const originalSource = module.originalSource(); if (!originalSource) { diff --git a/lib/asset/AssetModulesPlugin.js b/lib/asset/AssetModulesPlugin.js index c01fd8433..31bd42d8f 100644 --- a/lib/asset/AssetModulesPlugin.js +++ b/lib/asset/AssetModulesPlugin.js @@ -5,6 +5,12 @@ "use strict"; +const { + ASSET_MODULE_TYPE_RESOURCE, + ASSET_MODULE_TYPE_INLINE, + ASSET_MODULE_TYPE, + ASSET_MODULE_TYPE_SOURCE +} = require("../ModuleTypeConstants"); const { cleverMerge } = require("../util/cleverMerge"); const { compareModulesByIdentifier } = require("../util/comparators"); const createSchemaValidation = require("../util/create-schema-validation"); @@ -61,7 +67,7 @@ const getAssetSourceGenerator = memoize(() => require("./AssetSourceGenerator") ); -const type = "asset"; +const type = ASSET_MODULE_TYPE; const plugin = "AssetModulesPlugin"; class AssetModulesPlugin { @@ -75,7 +81,7 @@ class AssetModulesPlugin { plugin, (compilation, { normalModuleFactory }) => { normalModuleFactory.hooks.createParser - .for("asset") + .for(ASSET_MODULE_TYPE) .tap(plugin, parserOptions => { validateParserOptions(parserOptions); parserOptions = cleverMerge( @@ -96,35 +102,39 @@ class AssetModulesPlugin { return new AssetParser(dataUrlCondition); }); normalModuleFactory.hooks.createParser - .for("asset/inline") + .for(ASSET_MODULE_TYPE_INLINE) .tap(plugin, parserOptions => { const AssetParser = getAssetParser(); return new AssetParser(true); }); normalModuleFactory.hooks.createParser - .for("asset/resource") + .for(ASSET_MODULE_TYPE_RESOURCE) .tap(plugin, parserOptions => { const AssetParser = getAssetParser(); return new AssetParser(false); }); normalModuleFactory.hooks.createParser - .for("asset/source") + .for(ASSET_MODULE_TYPE_SOURCE) .tap(plugin, parserOptions => { const AssetSourceParser = getAssetSourceParser(); return new AssetSourceParser(); }); - for (const type of ["asset", "asset/inline", "asset/resource"]) { + for (const type of [ + ASSET_MODULE_TYPE, + ASSET_MODULE_TYPE_INLINE, + ASSET_MODULE_TYPE_RESOURCE + ]) { normalModuleFactory.hooks.createGenerator .for(type) .tap(plugin, generatorOptions => { validateGeneratorOptions[type](generatorOptions); let dataUrl = undefined; - if (type !== "asset/resource") { + if (type !== ASSET_MODULE_TYPE_RESOURCE) { dataUrl = generatorOptions.dataUrl; if (!dataUrl || typeof dataUrl === "object") { dataUrl = { @@ -138,7 +148,7 @@ class AssetModulesPlugin { let filename = undefined; let publicPath = undefined; let outputPath = undefined; - if (type !== "asset/inline") { + if (type !== ASSET_MODULE_TYPE_INLINE) { filename = generatorOptions.filename; publicPath = generatorOptions.publicPath; outputPath = generatorOptions.outputPath; @@ -156,7 +166,7 @@ class AssetModulesPlugin { }); } normalModuleFactory.hooks.createGenerator - .for("asset/source") + .for(ASSET_MODULE_TYPE_SOURCE) .tap(plugin, () => { const AssetSourceGenerator = getAssetSourceGenerator(); @@ -169,7 +179,7 @@ class AssetModulesPlugin { const modules = chunkGraph.getOrderedChunkModulesIterableBySourceType( chunk, - "asset", + ASSET_MODULE_TYPE, compareModulesByIdentifier ); if (modules) { @@ -207,7 +217,7 @@ class AssetModulesPlugin { "AssetModulesPlugin", (options, context) => { const { codeGenerationResult } = options; - const source = codeGenerationResult.sources.get("asset"); + const source = codeGenerationResult.sources.get(ASSET_MODULE_TYPE); if (source === undefined) return; context.assets.set(codeGenerationResult.data.get("filename"), { source, diff --git a/lib/asset/RawDataUrlModule.js b/lib/asset/RawDataUrlModule.js index 26f8316c1..8ae4bb8cf 100644 --- a/lib/asset/RawDataUrlModule.js +++ b/lib/asset/RawDataUrlModule.js @@ -7,6 +7,7 @@ const { RawSource } = require("webpack-sources"); const Module = require("../Module"); +const { ASSET_MODULE_TYPE_RAW_DATA_URL } = require("../ModuleTypeConstants"); const RuntimeGlobals = require("../RuntimeGlobals"); const makeSerializable = require("../util/makeSerializable"); @@ -33,7 +34,7 @@ class RawDataUrlModule extends Module { * @param {string=} readableIdentifier readable identifier */ constructor(url, identifier, readableIdentifier) { - super("asset/raw-data-url", null); + super(ASSET_MODULE_TYPE_RAW_DATA_URL, null); this.url = url; this.urlBuffer = url ? Buffer.from(url) : undefined; this.identifierStr = identifier || this.url; diff --git a/lib/config/defaults.js b/lib/config/defaults.js index 4d6fb2428..c4cf66e8e 100644 --- a/lib/config/defaults.js +++ b/lib/config/defaults.js @@ -13,7 +13,8 @@ const { WEBASSEMBLY_MODULE_TYPE_ASYNC, JAVASCRIPT_MODULE_TYPE_ESM, JAVASCRIPT_MODULE_TYPE_DYNAMIC, - WEBASSEMBLY_MODULE_TYPE_SYNC + WEBASSEMBLY_MODULE_TYPE_SYNC, + ASSET_MODULE_TYPE } = require("../ModuleTypeConstants"); const Template = require("../Template"); const { cleverMerge } = require("../util/cleverMerge"); @@ -511,7 +512,7 @@ const applyModuleDefaults = ( D(module, "unsafeCache", false); } - F(module.parser, "asset", () => ({})); + F(module.parser, ASSET_MODULE_TYPE, () => ({})); F(module.parser.asset, "dataUrlCondition", () => ({})); if (typeof module.parser.asset.dataUrlCondition === "object") { D(module.parser.asset.dataUrlCondition, "maxSize", 8096); diff --git a/lib/container/FallbackModule.js b/lib/container/FallbackModule.js index c3e3c31cb..c7123af46 100644 --- a/lib/container/FallbackModule.js +++ b/lib/container/FallbackModule.js @@ -7,6 +7,7 @@ const { RawSource } = require("webpack-sources"); const Module = require("../Module"); +const { WEBPACK_MODULE_TYPE_FALLBACK } = require("../ModuleTypeConstants"); const RuntimeGlobals = require("../RuntimeGlobals"); const Template = require("../Template"); const makeSerializable = require("../util/makeSerializable"); @@ -37,7 +38,7 @@ class FallbackModule extends Module { * @param {string[]} requests list of requests to choose one */ constructor(requests) { - super("fallback-module"); + super(WEBPACK_MODULE_TYPE_FALLBACK); this.requests = requests; this._identifier = `fallback ${this.requests.join(" ")}`; } diff --git a/lib/container/RemoteModule.js b/lib/container/RemoteModule.js index 92e4b8ea2..d59a0fadb 100644 --- a/lib/container/RemoteModule.js +++ b/lib/container/RemoteModule.js @@ -7,6 +7,7 @@ const { RawSource } = require("webpack-sources"); const Module = require("../Module"); +const { WEBPACK_MODULE_TYPE_REMOTE } = require("../ModuleTypeConstants"); const RuntimeGlobals = require("../RuntimeGlobals"); const makeSerializable = require("../util/makeSerializable"); const FallbackDependency = require("./FallbackDependency"); @@ -39,7 +40,7 @@ class RemoteModule extends Module { * @param {string} shareScope the used share scope name */ constructor(request, externalRequests, internalRequest, shareScope) { - super("remote-module"); + super(WEBPACK_MODULE_TYPE_REMOTE); this.request = request; this.externalRequests = externalRequests; this.internalRequest = internalRequest; diff --git a/lib/css/CssModulesPlugin.js b/lib/css/CssModulesPlugin.js index 799cd432b..0cdd83ff6 100644 --- a/lib/css/CssModulesPlugin.js +++ b/lib/css/CssModulesPlugin.js @@ -157,7 +157,6 @@ class CssModulesPlugin { return new CssParser(); case CSS_MODULE_TYPE_GLOBAL: return new CssParser({ - allowPseudoBlocks: false, allowModeSwitch: false }); case CSS_MODULE_TYPE_MODULE: @@ -302,12 +301,20 @@ class CssModulesPlugin { } return result; }); - const enabledChunks = new WeakSet(); + const globalChunkLoading = compilation.outputOptions.chunkLoading; + const isEnabledForChunk = chunk => { + const options = chunk.getEntryOptions(); + const chunkLoading = + options && options.chunkLoading !== undefined + ? options.chunkLoading + : globalChunkLoading; + return chunkLoading === "jsonp"; + }; + const onceForChunkSet = new WeakSet(); const handler = (chunk, set) => { - if (enabledChunks.has(chunk)) { - return; - } - enabledChunks.add(chunk); + if (onceForChunkSet.has(chunk)) return; + onceForChunkSet.add(chunk); + if (!isEnabledForChunk(chunk)) return; set.add(RuntimeGlobals.publicPath); set.add(RuntimeGlobals.getChunkCssFilename); diff --git a/lib/css/CssParser.js b/lib/css/CssParser.js index e89aacd87..20bf8b88b 100644 --- a/lib/css/CssParser.js +++ b/lib/css/CssParser.js @@ -120,21 +120,15 @@ class LocConverter { } const CSS_MODE_TOP_LEVEL = 0; -const CSS_MODE_IN_RULE = 1; -const CSS_MODE_IN_LOCAL_RULE = 2; -const CSS_MODE_AT_IMPORT_EXPECT_URL = 3; -const CSS_MODE_AT_IMPORT_EXPECT_LAYER_OR_SUPPORTS_OR_MEDIA = 4; -const CSS_MODE_AT_IMPORT_INVALID = 5; -const CSS_MODE_AT_NAMESPACE_INVALID = 6; +const CSS_MODE_IN_BLOCK = 1; +const CSS_MODE_AT_IMPORT_EXPECT_URL = 2; +const CSS_MODE_AT_IMPORT_EXPECT_LAYER_OR_SUPPORTS_OR_MEDIA = 3; +const CSS_MODE_AT_IMPORT_INVALID = 4; +const CSS_MODE_AT_NAMESPACE_INVALID = 5; class CssParser extends Parser { - constructor({ - allowPseudoBlocks = true, - allowModeSwitch = true, - defaultMode = "global" - } = {}) { + constructor({ allowModeSwitch = true, defaultMode = "global" } = {}) { super(); - this.allowPseudoBlocks = allowPseudoBlocks; this.allowModeSwitch = allowModeSwitch; this.defaultMode = defaultMode; } @@ -174,30 +168,57 @@ class CssParser extends Parser { } const module = state.module; - - const declaredCssVariables = new Set(); - const locConverter = new LocConverter(source); + /** @type {Set}*/ + const declaredCssVariables = new Set(); /** @type {number} */ - let mode = CSS_MODE_TOP_LEVEL; + let scope = CSS_MODE_TOP_LEVEL; /** @type {number} */ - let modeNestingLevel = 0; + let blockNestingLevel = 0; /** @type {boolean} */ let allowImportAtRule = true; + /** @type {"local" | "global" | undefined} */ let modeData = undefined; - /** @type {string | boolean | undefined} */ - let singleClassSelector = undefined; /** @type {[number, number] | undefined} */ let lastIdentifier = undefined; - /** @type {boolean} */ - let awaitRightParenthesis = false; /** @type [string, number, number][] */ let balanced = []; - const modeStack = []; + /** @type {undefined | { start: number, end: number, url?: string, media?: string, supports?: string, layer?: string }} */ + let importData = undefined; + /** @type {boolean} */ + let inAnimationProperty = false; + /** @type {boolean} */ + let isNextRulePrelude = true; - const isTopLevelLocal = () => + /** + * @param {string} input input + * @param {number} pos position + * @returns {boolean} true, when next is nested syntax + */ + const isNextNestedSyntax = (input, pos) => { + pos = walkCssTokens.eatWhitespaceAndComments(input, pos); + + if (input[pos] === "}") { + return false; + } + + // According spec only identifier can be used as a property name + const isIdentifier = walkCssTokens.isIdentStartCodePoint( + input.charCodeAt(pos) + ); + + return !isIdentifier; + }; + /** + * @returns {boolean} true, when in local scope + */ + const isLocalMode = () => modeData === "local" || (this.defaultMode === "local" && modeData === undefined); + /** + * @param {string} chars characters + * @returns {(input: string, pos: number) => number} function to eat characters + */ const eatUntil = chars => { const charCodes = Array.from({ length: chars.length }, (_, i) => chars.charCodeAt(i) @@ -218,6 +239,12 @@ class CssParser extends Parser { } }; }; + /** + * @param {string} input input + * @param {number} pos start position + * @param {(input: string, pos: number) => number} eater eater + * @returns {[number,string]} new position and text + */ const eatText = (input, pos, eater) => { let text = ""; for (;;) { @@ -245,6 +272,11 @@ class CssParser extends Parser { }; const eatExportName = eatUntil(":};/"); const eatExportValue = eatUntil("};/"); + /** + * @param {string} input input + * @param {number} pos start position + * @returns {number} position after parse + */ const parseExports = (input, pos) => { pos = walkCssTokens.eatWhitespaceAndComments(input, pos); const cc = input.charCodeAt(pos); @@ -313,9 +345,14 @@ class CssParser extends Parser { return pos; }; const eatPropertyName = eatUntil(":{};"); - const processLocalDeclaration = (input, pos) => { + /** + * @param {string} input input + * @param {number} pos name start position + * @param {number} end name end position + * @returns {number} position after handling + */ + const processLocalDeclaration = (input, pos, end) => { modeData = undefined; - const start = pos; pos = walkCssTokens.eatWhitespaceAndComments(input, pos); const propertyNameStart = pos; const [propertyNameEnd, propertyName] = eatText( @@ -323,7 +360,7 @@ class CssParser extends Parser { pos, eatPropertyName ); - if (input.charCodeAt(propertyNameEnd) !== CC_COLON) return start; + if (input.charCodeAt(propertyNameEnd) !== CC_COLON) return end; pos = propertyNameEnd + 1; if (propertyName.startsWith("--")) { // CSS Variable @@ -339,44 +376,40 @@ class CssParser extends Parser { module.addDependency(dep); declaredCssVariables.add(name); } else if ( + !propertyName.startsWith("--") && OPTIONALLY_VENDOR_PREFIXED_ANIMATION_PROPERTY.test(propertyName) ) { - modeData = "animation"; - lastIdentifier = undefined; + inAnimationProperty = true; } return pos; }; - const processDeclarationValueDone = (input, pos) => { - if (modeData === "animation" && lastIdentifier) { + /** + * @param {string} input input + */ + const processDeclarationValueDone = input => { + if (inAnimationProperty && lastIdentifier) { const { line: sl, column: sc } = locConverter.get(lastIdentifier[0]); const { line: el, column: ec } = locConverter.get(lastIdentifier[1]); const name = input.slice(lastIdentifier[0], lastIdentifier[1]); const dep = new CssSelfLocalIdentifierDependency(name, lastIdentifier); dep.setLoc(sl, sc, el, ec); module.addDependency(dep); + lastIdentifier = undefined; } }; - const eatAtRuleNested = eatUntil("{};/"); const eatKeyframes = eatUntil("{};/"); const eatNameInVar = eatUntil(",)};/"); walkCssTokens(source, { isSelector: () => { - return ( - mode !== CSS_MODE_IN_RULE && - mode !== CSS_MODE_IN_LOCAL_RULE && - mode !== CSS_MODE_AT_IMPORT_EXPECT_URL && - mode !== CSS_MODE_AT_IMPORT_EXPECT_LAYER_OR_SUPPORTS_OR_MEDIA && - mode !== CSS_MODE_AT_IMPORT_INVALID && - mode !== CSS_MODE_AT_NAMESPACE_INVALID - ); + return isNextRulePrelude; }, url: (input, start, end, contentStart, contentEnd) => { let value = normalizeUrl(input.slice(contentStart, contentEnd), false); - switch (mode) { + switch (scope) { case CSS_MODE_AT_IMPORT_EXPECT_URL: { - modeData.url = value; - modeData.lastPos = end; - mode = CSS_MODE_AT_IMPORT_EXPECT_LAYER_OR_SUPPORTS_OR_MEDIA; + importData.url = value; + importData.end = end; + scope = CSS_MODE_AT_IMPORT_EXPECT_LAYER_OR_SUPPORTS_OR_MEDIA; break; } // Do not parse URLs in `supports(...)` @@ -388,7 +421,7 @@ class CssParser extends Parser { case CSS_MODE_AT_IMPORT_INVALID: { break; } - default: { + case CSS_MODE_IN_BLOCK: { // Ignore `url()`, `url('')` and `url("")`, they are valid by spec if (value.length === 0) { break; @@ -406,16 +439,19 @@ class CssParser extends Parser { return end; }, string: (input, start, end) => { - switch (mode) { + switch (scope) { case CSS_MODE_AT_IMPORT_EXPECT_URL: { - modeData.url = normalizeUrl(input.slice(start + 1, end - 1), true); - modeData.lastPos = end; + importData.url = normalizeUrl( + input.slice(start + 1, end - 1), + true + ); + importData.end = end; const insideURLFunction = balanced[balanced.length - 1] && balanced[balanced.length - 1][0] === "url"; if (!insideURLFunction) { - mode = CSS_MODE_AT_IMPORT_EXPECT_LAYER_OR_SUPPORTS_OR_MEDIA; + scope = CSS_MODE_AT_IMPORT_EXPECT_LAYER_OR_SUPPORTS_OR_MEDIA; } break; } @@ -423,7 +459,7 @@ class CssParser extends Parser { case CSS_MODE_AT_IMPORT_EXPECT_LAYER_OR_SUPPORTS_OR_MEDIA: { break; } - default: { + case CSS_MODE_IN_BLOCK: { // TODO move escaped parsing to tokenizer const last = balanced[balanced.length - 1]; @@ -458,7 +494,7 @@ class CssParser extends Parser { atKeyword: (input, start, end) => { const name = input.slice(start, end).toLowerCase(); if (name === "@namespace") { - mode = CSS_MODE_AT_NAMESPACE_INVALID; + scope = CSS_MODE_AT_NAMESPACE_INVALID; this._emitWarning( state, "@namespace is not supported in bundled CSS", @@ -469,7 +505,7 @@ class CssParser extends Parser { return end; } else if (name === "@import") { if (!allowImportAtRule) { - mode = CSS_MODE_AT_IMPORT_INVALID; + scope = CSS_MODE_AT_IMPORT_INVALID; this._emitWarning( state, "Any @import rules must precede all other rules", @@ -480,17 +516,10 @@ class CssParser extends Parser { return end; } - mode = CSS_MODE_AT_IMPORT_EXPECT_URL; - modeData = { - atRuleStart: start, - lastPos: end, - url: undefined, - layer: undefined, - supports: undefined, - media: undefined - }; + scope = CSS_MODE_AT_IMPORT_EXPECT_URL; + importData = { start, end }; } else if ( - isTopLevelLocal() && + this.allowModeSwitch && OPTIONALLY_VENDOR_PREFIXED_KEYFRAMES_AT_RULE.test(name) ) { let pos = end; @@ -515,31 +544,60 @@ class CssParser extends Parser { dep.setLoc(sl, sc, el, ec); module.addDependency(dep); pos = newPos; - mode = CSS_MODE_IN_LOCAL_RULE; - modeNestingLevel = 1; return pos + 1; - } else if (name === "@media" || name === "@supports") { - // TODO handle nested CSS syntax + } else if (this.allowModeSwitch && name === "@property") { let pos = end; - const [newPos] = eatText(input, pos, eatAtRuleNested); - pos = newPos; + pos = walkCssTokens.eatWhitespaceAndComments(input, pos); if (pos === input.length) return pos; - if (input.charCodeAt(pos) !== CC_LEFT_CURLY) { + const propertyNameStart = pos; + const [propertyNameEnd, propertyName] = eatText( + input, + pos, + eatKeyframes + ); + if (propertyNameEnd === input.length) return propertyNameEnd; + if (!propertyName.startsWith("--")) return propertyNameEnd; + if (input.charCodeAt(propertyNameEnd) !== CC_LEFT_CURLY) { this._emitWarning( state, - `Unexpected ${input[pos]} at ${pos} during parsing of @media or @supports (expected '{')`, + `Unexpected '${input[propertyNameEnd]}' at ${propertyNameEnd} during parsing of @property (expected '{')`, locConverter, start, - pos + end ); - return pos; + + return propertyNameEnd; } + const { line: sl, column: sc } = locConverter.get(pos); + const { line: el, column: ec } = locConverter.get(propertyNameEnd); + const name = propertyName.slice(2); + const dep = new CssLocalIdentifierDependency( + name, + [propertyNameStart, propertyNameEnd], + "--" + ); + dep.setLoc(sl, sc, el, ec); + module.addDependency(dep); + declaredCssVariables.add(name); + pos = propertyNameEnd; return pos + 1; + } else if ( + name === "@media" || + name === "@supports" || + name === "@layer" || + name === "@container" + ) { + modeData = isLocalMode() ? "local" : "global"; + isNextRulePrelude = true; + return end; + } else if (this.allowModeSwitch) { + modeData = "global"; + isNextRulePrelude = false; } return end; }, semicolon: (input, start, end) => { - switch (mode) { + switch (scope) { case CSS_MODE_AT_IMPORT_EXPECT_URL: { this._emitWarning( state, @@ -551,124 +609,119 @@ class CssParser extends Parser { return end; } case CSS_MODE_AT_IMPORT_EXPECT_LAYER_OR_SUPPORTS_OR_MEDIA: { - if (modeData.url === undefined) { + if (!importData.url === undefined) { this._emitWarning( state, - `Expected URL for @import at ${modeData.atRuleStart}`, + `Expected URL for @import at ${importData.start}`, locConverter, - modeData.atRuleStart, - modeData.lastPos + importData.start, + importData.end ); return end; } const semicolonPos = end; end = walkCssTokens.eatWhiteLine(input, end + 1); - const { line: sl, column: sc } = locConverter.get( - modeData.atRuleStart - ); + const { line: sl, column: sc } = locConverter.get(importData.start); const { line: el, column: ec } = locConverter.get(end); const pos = walkCssTokens.eatWhitespaceAndComments( input, - modeData.lastPos + importData.end ); // Prevent to consider comments as a part of media query if (pos !== semicolonPos - 1) { - modeData.media = input - .slice(modeData.lastPos, semicolonPos - 1) + importData.media = input + .slice(importData.end, semicolonPos - 1) .trim(); } const dep = new CssImportDependency( - modeData.url.trim(), - [modeData.start, end], - modeData.layer, - modeData.supports, - modeData.media && modeData.media.length > 0 - ? modeData.media + importData.url.trim(), + [importData.start, end], + importData.layer, + importData.supports, + importData.media && importData.media.length > 0 + ? importData.media : undefined ); dep.setLoc(sl, sc, el, ec); module.addDependency(dep); - modeData = undefined; - mode = CSS_MODE_TOP_LEVEL; + importData = undefined; + scope = CSS_MODE_TOP_LEVEL; break; } - case CSS_MODE_IN_LOCAL_RULE: { - processDeclarationValueDone(input, start); - return processLocalDeclaration(input, end); - } - case CSS_MODE_IN_RULE: { - return end; + case CSS_MODE_IN_BLOCK: { + if (this.allowModeSwitch) { + processDeclarationValueDone(input); + inAnimationProperty = false; + isNextRulePrelude = isNextNestedSyntax(input, end); + } + break; } } - mode = CSS_MODE_TOP_LEVEL; - modeData = undefined; - singleClassSelector = undefined; return end; }, leftCurlyBracket: (input, start, end) => { - switch (mode) { - case CSS_MODE_TOP_LEVEL: + switch (scope) { + case CSS_MODE_TOP_LEVEL: { allowImportAtRule = false; - mode = isTopLevelLocal() - ? CSS_MODE_IN_LOCAL_RULE - : CSS_MODE_IN_RULE; - modeNestingLevel = 1; - if (mode === CSS_MODE_IN_LOCAL_RULE) - return processLocalDeclaration(input, end); + scope = CSS_MODE_IN_BLOCK; + blockNestingLevel = 1; + + if (this.allowModeSwitch) { + isNextRulePrelude = isNextNestedSyntax(input, end); + } + break; - case CSS_MODE_IN_RULE: - case CSS_MODE_IN_LOCAL_RULE: - modeNestingLevel++; + } + case CSS_MODE_IN_BLOCK: { + blockNestingLevel++; + + if (this.allowModeSwitch) { + isNextRulePrelude = isNextNestedSyntax(input, end); + } break; + } } return end; }, rightCurlyBracket: (input, start, end) => { - switch (mode) { - case CSS_MODE_IN_LOCAL_RULE: - processDeclarationValueDone(input, start); - /* falls through */ - case CSS_MODE_IN_RULE: - if (--modeNestingLevel === 0) { - mode = CSS_MODE_TOP_LEVEL; - modeData = undefined; - singleClassSelector = undefined; - } - break; - } - return end; - }, - id: (input, start, end) => { - singleClassSelector = false; - switch (mode) { - case CSS_MODE_TOP_LEVEL: - if (isTopLevelLocal()) { - const name = input.slice(start + 1, end); - const dep = new CssLocalIdentifierDependency(name, [ - start + 1, - end - ]); - const { line: sl, column: sc } = locConverter.get(start); - const { line: el, column: ec } = locConverter.get(end); - dep.setLoc(sl, sc, el, ec); - module.addDependency(dep); + switch (scope) { + case CSS_MODE_IN_BLOCK: { + if (isLocalMode()) { + processDeclarationValueDone(input); + inAnimationProperty = false; + } + if (--blockNestingLevel === 0) { + scope = CSS_MODE_TOP_LEVEL; + + if (this.allowModeSwitch) { + isNextRulePrelude = true; + modeData = undefined; + } + } else if (this.allowModeSwitch) { + isNextRulePrelude = isNextNestedSyntax(input, end); } break; + } } return end; }, identifier: (input, start, end) => { - singleClassSelector = false; - switch (mode) { - case CSS_MODE_IN_LOCAL_RULE: - if (modeData === "animation") { - lastIdentifier = [start, end]; + switch (scope) { + case CSS_MODE_IN_BLOCK: { + if (isLocalMode()) { + // Handle only top level values and not inside functions + if (inAnimationProperty && balanced.length === 0) { + lastIdentifier = [start, end]; + } else { + return processLocalDeclaration(input, start, end); + } } break; + } case CSS_MODE_AT_IMPORT_EXPECT_LAYER_OR_SUPPORTS_OR_MEDIA: { if (input.slice(start, end).toLowerCase() === "layer") { - modeData.layer = ""; - modeData.lastPos = end; + importData.layer = ""; + importData.end = end; } break; } @@ -676,24 +729,25 @@ class CssParser extends Parser { return end; }, class: (input, start, end) => { - switch (mode) { - case CSS_MODE_TOP_LEVEL: { - if (isTopLevelLocal()) { - const name = input.slice(start + 1, end); - const dep = new CssLocalIdentifierDependency(name, [ - start + 1, - end - ]); - const { line: sl, column: sc } = locConverter.get(start); - const { line: el, column: ec } = locConverter.get(end); - dep.setLoc(sl, sc, el, ec); - module.addDependency(dep); - if (singleClassSelector === undefined) singleClassSelector = name; - } else { - singleClassSelector = false; - } - break; - } + if (isLocalMode()) { + const name = input.slice(start + 1, end); + const dep = new CssLocalIdentifierDependency(name, [start + 1, end]); + const { line: sl, column: sc } = locConverter.get(start); + const { line: el, column: ec } = locConverter.get(end); + dep.setLoc(sl, sc, el, ec); + module.addDependency(dep); + } + + return end; + }, + id: (input, start, end) => { + if (isLocalMode()) { + const name = input.slice(start + 1, end); + const dep = new CssLocalIdentifierDependency(name, [start + 1, end]); + const { line: sl, column: sc } = locConverter.get(start); + const { line: el, column: ec } = locConverter.get(end); + dep.setLoc(sl, sc, el, ec); + module.addDependency(dep); } return end; }, @@ -702,75 +756,74 @@ class CssParser extends Parser { balanced.push([name, start, end]); - switch (mode) { - case CSS_MODE_IN_LOCAL_RULE: { - name = name.toLowerCase(); + if (isLocalMode()) { + name = name.toLowerCase(); - if (name === "var") { - let pos = walkCssTokens.eatWhitespaceAndComments(input, end); - if (pos === input.length) return pos; - const [newPos, name] = eatText(input, pos, eatNameInVar); - if (!name.startsWith("--")) return end; - const { line: sl, column: sc } = locConverter.get(pos); - const { line: el, column: ec } = locConverter.get(newPos); - const dep = new CssSelfLocalIdentifierDependency( - name.slice(2), - [pos, newPos], - "--", - declaredCssVariables - ); - dep.setLoc(sl, sc, el, ec); - module.addDependency(dep); - return newPos; - } - break; + // Don't rename animation name when we have `var()` function + if (inAnimationProperty && balanced.length === 1) { + lastIdentifier = undefined; + } + + if (name === "var") { + let pos = walkCssTokens.eatWhitespaceAndComments(input, end); + if (pos === input.length) return pos; + const [newPos, name] = eatText(input, pos, eatNameInVar); + if (!name.startsWith("--")) return end; + const { line: sl, column: sc } = locConverter.get(pos); + const { line: el, column: ec } = locConverter.get(newPos); + const dep = new CssSelfLocalIdentifierDependency( + name.slice(2), + [pos, newPos], + "--", + declaredCssVariables + ); + dep.setLoc(sl, sc, el, ec); + module.addDependency(dep); + return newPos; } } + return end; }, leftParenthesis: (input, start, end) => { balanced.push(["(", start, end]); - switch (mode) { - case CSS_MODE_TOP_LEVEL: { - modeStack.push(false); - break; - } - } return end; }, rightParenthesis: (input, start, end) => { const last = balanced[balanced.length - 1]; + const popped = balanced.pop(); - balanced.pop(); + if ( + this.allowModeSwitch && + popped && + (popped[0] === ":local" || popped[0] === ":global") + ) { + modeData = balanced[balanced.length - 1] + ? /** @type {"local" | "global"} */ + (balanced[balanced.length - 1][0]) + : undefined; + const dep = new ConstDependency("", [start, end]); + module.addPresentationalDependency(dep); - switch (mode) { - case CSS_MODE_TOP_LEVEL: { - if (awaitRightParenthesis) { - awaitRightParenthesis = false; - } - const newModeData = modeStack.pop(); - if (newModeData !== false) { - modeData = newModeData; - const dep = new ConstDependency("", [start, end]); - module.addPresentationalDependency(dep); - } - break; - } + return end; + } + + switch (scope) { case CSS_MODE_AT_IMPORT_EXPECT_URL: { if (last && last[0] === "url") { - modeData.lastPos = end; - mode = CSS_MODE_AT_IMPORT_EXPECT_LAYER_OR_SUPPORTS_OR_MEDIA; + importData.end = end; + scope = CSS_MODE_AT_IMPORT_EXPECT_LAYER_OR_SUPPORTS_OR_MEDIA; } break; } case CSS_MODE_AT_IMPORT_EXPECT_LAYER_OR_SUPPORTS_OR_MEDIA: { if (last && last[0].toLowerCase() === "layer") { - modeData.layer = input.slice(last[2], end - 1).trim(); - modeData.lastPos = end; + importData.layer = input.slice(last[2], end - 1).trim(); + importData.end = end; } else if (last && last[0].toLowerCase() === "supports") { - modeData.supports = input.slice(last[2], end - 1).trim(); - modeData.lastPos = end; + importData.supports = input.slice(last[2], end - 1).trim(); + importData.end = end; } break; } @@ -779,27 +832,38 @@ class CssParser extends Parser { return end; }, pseudoClass: (input, start, end) => { - singleClassSelector = false; - switch (mode) { - case CSS_MODE_TOP_LEVEL: { - const name = input.slice(start, end).toLowerCase(); - if (this.allowModeSwitch && name === ":global") { - modeData = "global"; - const dep = new ConstDependency("", [start, end]); - module.addPresentationalDependency(dep); - } else if (this.allowModeSwitch && name === ":local") { - modeData = "local"; - const dep = new ConstDependency("", [start, end]); - module.addPresentationalDependency(dep); - } else if (this.allowPseudoBlocks && name === ":export") { - const pos = parseExports(input, end); - const dep = new ConstDependency("", [start, pos]); - module.addPresentationalDependency(dep); - return pos; + if (this.allowModeSwitch) { + const name = input.slice(start, end).toLowerCase(); + + if (name === ":global") { + modeData = "global"; + // Eat extra whitespace and comments + end = walkCssTokens.eatWhitespace(input, end); + const dep = new ConstDependency("", [start, end]); + module.addPresentationalDependency(dep); + return end; + } else if (name === ":local") { + modeData = "local"; + // Eat extra whitespace and comments + end = walkCssTokens.eatWhitespace(input, end); + const dep = new ConstDependency("", [start, end]); + module.addPresentationalDependency(dep); + return end; + } + + switch (scope) { + case CSS_MODE_TOP_LEVEL: { + if (name === ":export") { + const pos = parseExports(input, end); + const dep = new ConstDependency("", [start, pos]); + module.addPresentationalDependency(dep); + return pos; + } + break; } - break; } } + return end; }, pseudoFunction: (input, start, end) => { @@ -807,40 +871,36 @@ class CssParser extends Parser { balanced.push([name, start, end]); - switch (mode) { - case CSS_MODE_TOP_LEVEL: { - name = name.toLowerCase(); + if (this.allowModeSwitch) { + name = name.toLowerCase(); - if (this.allowModeSwitch && name === ":global") { - modeStack.push(modeData); - modeData = "global"; - const dep = new ConstDependency("", [start, end]); - module.addPresentationalDependency(dep); - } else if (this.allowModeSwitch && name === ":local") { - modeStack.push(modeData); - modeData = "local"; - const dep = new ConstDependency("", [start, end]); - module.addPresentationalDependency(dep); - } else { - awaitRightParenthesis = true; - modeStack.push(false); - } - break; + if (name === ":global") { + modeData = "global"; + const dep = new ConstDependency("", [start, end]); + module.addPresentationalDependency(dep); + } else if (name === ":local") { + modeData = "local"; + const dep = new ConstDependency("", [start, end]); + module.addPresentationalDependency(dep); } } + return end; }, comma: (input, start, end) => { - switch (mode) { - case CSS_MODE_TOP_LEVEL: - if (!awaitRightParenthesis) { - modeData = undefined; - modeStack.length = 0; + if (this.allowModeSwitch) { + // Reset stack for `:global .class :local .class-other` selector after + modeData = undefined; + + switch (scope) { + case CSS_MODE_IN_BLOCK: { + if (isLocalMode()) { + processDeclarationValueDone(input); + } + + break; } - break; - case CSS_MODE_IN_LOCAL_RULE: - processDeclarationValueDone(input, start); - break; + } } return end; } diff --git a/lib/css/walkCssTokens.js b/lib/css/walkCssTokens.js index 87523e913..badc61aa6 100644 --- a/lib/css/walkCssTokens.js +++ b/lib/css/walkCssTokens.js @@ -124,10 +124,14 @@ const _isWhiteSpace = cc => { }; /** + * ident-start code point + * + * A letter, a non-ASCII code point, or U+005F LOW LINE (_). + * * @param {number} cc char code * @returns {boolean} true, if cc is a start code point of an identifier */ -const _isIdentStartCodePoint = cc => { +const isIdentStartCodePoint = cc => { return ( (cc >= CC_LOWER_A && cc <= CC_LOWER_Z) || (cc >= CC_UPPER_A && cc <= CC_UPPER_Z) || @@ -341,11 +345,7 @@ const consumeNumericToken = (input, pos, callbacks) => { const consumeOtherIdentifier = (input, pos, callbacks) => { const start = pos; pos = _consumeIdentifier(input, pos, callbacks); - if ( - pos !== input.length && - !callbacks.isSelector(input, pos) && - input.charCodeAt(pos) === CC_LEFT_PARENTHESIS - ) { + if (pos !== input.length && input.charCodeAt(pos) === CC_LEFT_PARENTHESIS) { pos++; if (callbacks.function !== undefined) { return callbacks.function(input, start, pos); @@ -683,7 +683,7 @@ const CHAR_MAP = Array.from({ length: 0x80 }, (_, cc) => { // digit if (_isDigit(cc)) return consumeNumericToken; // ident-start code point - if (_isIdentStartCodePoint(cc)) { + if (isIdentStartCodePoint(cc)) { return consumeOtherIdentifier; } // EOF, but we don't have it @@ -715,6 +715,8 @@ module.exports = (input, callbacks) => { } }; +module.exports.isIdentStartCodePoint = isIdentStartCodePoint; + /** * @param {string} input input * @param {number} pos position @@ -732,6 +734,19 @@ module.exports.eatComments = (input, pos) => { return pos; }; +/** + * @param {string} input input + * @param {number} pos position + * @returns {number} position after whitespace + */ +module.exports.eatWhitespace = (input, pos) => { + while (_isWhiteSpace(input.charCodeAt(pos))) { + pos++; + } + + return pos; +}; + /** * @param {string} input input * @param {number} pos position diff --git a/lib/esm/ModuleChunkLoadingRuntimeModule.js b/lib/esm/ModuleChunkLoadingRuntimeModule.js index 4a846a7e4..091bb86db 100644 --- a/lib/esm/ModuleChunkLoadingRuntimeModule.js +++ b/lib/esm/ModuleChunkLoadingRuntimeModule.js @@ -127,7 +127,7 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule { "", "// object to store loaded and loading chunks", "// undefined = chunk not loaded, null = chunk preloaded/prefetched", - "// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded", + "// [resolve, Promise] = chunk loading, 0 = chunk loaded", `var installedChunks = ${ stateExpression ? `${stateExpression} = ${stateExpression} || ` : "" }{`, @@ -210,7 +210,9 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule { )})])`, `promises.push(installedChunkData[1] = promise);` ]), - "} else installedChunks[chunkId] = 0;" + hasJsMatcher === true + ? "}" + : "} else installedChunks[chunkId] = 0;" ]), "}" ]), diff --git a/lib/hmr/LazyCompilationPlugin.js b/lib/hmr/LazyCompilationPlugin.js index 2e3b3d3df..84a28b727 100644 --- a/lib/hmr/LazyCompilationPlugin.js +++ b/lib/hmr/LazyCompilationPlugin.js @@ -10,6 +10,9 @@ const AsyncDependenciesBlock = require("../AsyncDependenciesBlock"); const Dependency = require("../Dependency"); const Module = require("../Module"); const ModuleFactory = require("../ModuleFactory"); +const { + WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY +} = require("../ModuleTypeConstants"); const RuntimeGlobals = require("../RuntimeGlobals"); const Template = require("../Template"); const CommonJsRequireDependency = require("../dependencies/CommonJsRequireDependency"); @@ -95,7 +98,11 @@ registerNotSerializable(LazyCompilationDependency); class LazyCompilationProxyModule extends Module { constructor(context, originalModule, request, client, data, active) { - super("lazy-compilation-proxy", context, originalModule.layer); + super( + WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY, + context, + originalModule.layer + ); this.originalModule = originalModule; this.request = request; this.client = client; @@ -107,7 +114,7 @@ class LazyCompilationProxyModule extends Module { * @returns {string} a unique identifier of the module */ identifier() { - return `lazy-compilation-proxy|${this.originalModule.identifier()}`; + return `${WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY}|${this.originalModule.identifier()}`; } /** @@ -115,7 +122,7 @@ class LazyCompilationProxyModule extends Module { * @returns {string} a user readable identifier of the module */ readableIdentifier(requestShortener) { - return `lazy-compilation-proxy ${this.originalModule.readableIdentifier( + return `${WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY} ${this.originalModule.readableIdentifier( requestShortener )}`; } @@ -142,7 +149,9 @@ class LazyCompilationProxyModule extends Module { * @returns {string | null} an identifier for library inclusion */ libIdent(options) { - return `${this.originalModule.libIdent(options)}!lazy-compilation-proxy`; + return `${this.originalModule.libIdent( + options + )}!${WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY}`; } /** diff --git a/lib/javascript/JavascriptModulesPlugin.js b/lib/javascript/JavascriptModulesPlugin.js index 077a24ce3..4ed0f1373 100644 --- a/lib/javascript/JavascriptModulesPlugin.js +++ b/lib/javascript/JavascriptModulesPlugin.js @@ -21,7 +21,8 @@ const InitFragment = require("../InitFragment"); const { JAVASCRIPT_MODULE_TYPE_AUTO, JAVASCRIPT_MODULE_TYPE_DYNAMIC, - JAVASCRIPT_MODULE_TYPE_ESM + JAVASCRIPT_MODULE_TYPE_ESM, + WEBPACK_MODULE_TYPE_RUNTIME } = require("../ModuleTypeConstants"); const RuntimeGlobals = require("../RuntimeGlobals"); const Template = require("../Template"); @@ -394,7 +395,7 @@ class JavascriptModulesPlugin { } const runtimeModules = chunkGraph.getChunkModulesIterableBySourceType( chunk, - "runtime" + WEBPACK_MODULE_TYPE_RUNTIME ); if (runtimeModules) { const xor = new StringXor(); diff --git a/lib/node/ReadFileChunkLoadingRuntimeModule.js b/lib/node/ReadFileChunkLoadingRuntimeModule.js index 68e292ffa..9bc763672 100644 --- a/lib/node/ReadFileChunkLoadingRuntimeModule.js +++ b/lib/node/ReadFileChunkLoadingRuntimeModule.js @@ -178,7 +178,9 @@ class ReadFileChunkLoadingRuntimeModule extends RuntimeModule { "});", "promises.push(installedChunkData[2] = promise);" ]), - "} else installedChunks[chunkId] = 0;" + hasJsMatcher === true + ? "}" + : "} else installedChunks[chunkId] = 0;" ]), "}" ]), diff --git a/lib/sharing/ConsumeSharedModule.js b/lib/sharing/ConsumeSharedModule.js index 12f2918c6..0ad41d313 100644 --- a/lib/sharing/ConsumeSharedModule.js +++ b/lib/sharing/ConsumeSharedModule.js @@ -8,6 +8,9 @@ const { RawSource } = require("webpack-sources"); const AsyncDependenciesBlock = require("../AsyncDependenciesBlock"); const Module = require("../Module"); +const { + WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE +} = require("../ModuleTypeConstants"); const RuntimeGlobals = require("../RuntimeGlobals"); const makeSerializable = require("../util/makeSerializable"); const { rangeToString, stringifyHoley } = require("../util/semver"); @@ -52,7 +55,7 @@ class ConsumeSharedModule extends Module { * @param {ConsumeOptions} options consume options */ constructor(context, options) { - super("consume-shared-module", context); + super(WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE, context); this.options = options; } @@ -69,7 +72,7 @@ class ConsumeSharedModule extends Module { singleton, eager } = this.options; - return `consume-shared-module|${shareScope}|${shareKey}|${ + return `${WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE}|${shareScope}|${shareKey}|${ requiredVersion && rangeToString(requiredVersion) }|${strictVersion}|${importResolved}|${singleton}|${eager}`; } diff --git a/lib/sharing/ProvideSharedModule.js b/lib/sharing/ProvideSharedModule.js index 97ce92d99..23f67eb7d 100644 --- a/lib/sharing/ProvideSharedModule.js +++ b/lib/sharing/ProvideSharedModule.js @@ -7,6 +7,7 @@ const AsyncDependenciesBlock = require("../AsyncDependenciesBlock"); const Module = require("../Module"); +const { WEBPACK_MODULE_TYPE_PROVIDE } = require("../ModuleTypeConstants"); const RuntimeGlobals = require("../RuntimeGlobals"); const makeSerializable = require("../util/makeSerializable"); const ProvideForSharedDependency = require("./ProvideForSharedDependency"); @@ -39,7 +40,7 @@ class ProvideSharedModule extends Module { * @param {boolean} eager include the module in sync way */ constructor(shareScope, name, version, request, eager) { - super("provide-module"); + super(WEBPACK_MODULE_TYPE_PROVIDE); this._shareScope = shareScope; this._name = name; this._version = version; diff --git a/lib/stats/DefaultStatsFactoryPlugin.js b/lib/stats/DefaultStatsFactoryPlugin.js index 602481ea5..a18aa475c 100644 --- a/lib/stats/DefaultStatsFactoryPlugin.js +++ b/lib/stats/DefaultStatsFactoryPlugin.js @@ -6,6 +6,7 @@ "use strict"; const util = require("util"); +const { WEBPACK_MODULE_TYPE_RUNTIME } = require("../ModuleTypeConstants"); const ModuleDependency = require("../dependencies/ModuleDependency"); const formatLocation = require("../formatLocation"); const { LogType } = require("../logging/Logger"); @@ -2093,19 +2094,21 @@ const MODULES_GROUPERS = type => ({ if (!module.moduleType) return; if (groupModulesByType) { return [module.moduleType.split("/", 1)[0]]; - } else if (module.moduleType === "runtime") { - return ["runtime"]; + } else if (module.moduleType === WEBPACK_MODULE_TYPE_RUNTIME) { + return [WEBPACK_MODULE_TYPE_RUNTIME]; } }, getOptions: key => { - const exclude = key === "runtime" && !options.runtimeModules; + const exclude = + key === WEBPACK_MODULE_TYPE_RUNTIME && !options.runtimeModules; return { groupChildren: !exclude, force: exclude }; }, createGroup: (key, children, modules) => { - const exclude = key === "runtime" && !options.runtimeModules; + const exclude = + key === WEBPACK_MODULE_TYPE_RUNTIME && !options.runtimeModules; return { type: `${key} modules`, moduleType: key, diff --git a/lib/util/createHash.js b/lib/util/createHash.js index f727a1fdc..8351e4f27 100644 --- a/lib/util/createHash.js +++ b/lib/util/createHash.js @@ -107,8 +107,9 @@ class DebugHash extends Hash { */ update(data, inputEncoding) { if (typeof data !== "string") data = data.toString("utf-8"); - if (data.startsWith("debug-digest-")) { - data = Buffer.from(data.slice("debug-digest-".length), "hex").toString(); + const prefix = Buffer.from("@webpack-debug-digest@").toString("hex"); + if (data.startsWith(prefix)) { + data = Buffer.from(data.slice(prefix.length), "hex").toString(); } this.string += `[${data}](${new Error().stack.split("\n", 3)[2]})\n`; return this; @@ -120,7 +121,7 @@ class DebugHash extends Hash { * @returns {string|Buffer} digest */ digest(encoding) { - return "debug-digest-" + Buffer.from(this.string).toString("hex"); + return Buffer.from("@webpack-debug-digest@" + this.string).toString("hex"); } } diff --git a/lib/web/JsonpChunkLoadingRuntimeModule.js b/lib/web/JsonpChunkLoadingRuntimeModule.js index ea7bfb4ab..9eaf9b35d 100644 --- a/lib/web/JsonpChunkLoadingRuntimeModule.js +++ b/lib/web/JsonpChunkLoadingRuntimeModule.js @@ -189,7 +189,9 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule { )};`, `${RuntimeGlobals.loadScript}(url, loadingEnded, "chunk-" + chunkId, chunkId);` ]), - "} else installedChunks[chunkId] = 0;" + hasJsMatcher === true + ? "}" + : "} else installedChunks[chunkId] = 0;" ]), "}" ]), @@ -250,7 +252,7 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule { linkPreload.call( Template.asString([ "var link = document.createElement('link');", - scriptType + scriptType && scriptType !== "module" ? `link.type = ${JSON.stringify(scriptType)};` : "", "link.charset = 'utf-8';", @@ -259,8 +261,10 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule { `link.setAttribute("nonce", ${RuntimeGlobals.scriptNonce});` ), "}", - 'link.rel = "preload";', - 'link.as = "script";', + scriptType === "module" + ? 'link.rel = "modulepreload";' + : 'link.rel = "preload";', + scriptType === "module" ? "" : 'link.as = "script";', `link.href = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkScriptFilename}(chunkId);`, crossOriginLoading ? crossOriginLoading === "use-credentials" diff --git a/package.json b/package.json index 77af3da63..c751d3cc8 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "webpack", "version": "5.82.0", "author": "Tobias Koppers @sokra", - "description": "Packs CommonJs/AMD modules for the browser. Allows to split your codebase into multiple bundles, which can be loaded on demand. Support loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.", + "description": "Packs ECMAScript/CommonJs/AMD modules for the browser. Allows you to split your codebase into multiple bundles, which can be loaded on demand. Supports loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.", "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.3", diff --git a/test/__snapshots__/ConfigCacheTestCases.longtest.js.snap b/test/__snapshots__/ConfigCacheTestCases.longtest.js.snap index 9092cbc3b..72c503d38 100644 --- a/test/__snapshots__/ConfigCacheTestCases.longtest.js.snap +++ b/test/__snapshots__/ConfigCacheTestCases.longtest.js.snap @@ -1034,6 +1034,45 @@ a { } } +/* Has the same URL */ +/*@import url(); +@import url(''); +@import url(\\"\\"); +@import ''; +@import \\"\\"; +@import \\" \\"; +@import \\"\\\\ +\\"; +@import url(); +@import url(''); +@import url(\\"\\");*/ +/*@import url(https://test.cases/path/../../../../configCases/css/css-import/external.css) screen and (orientation:landscape); +@import url(https://test.cases/path/../../../../configCases/css/css-import/external.css) screen and (orientation:landscape);*/ +/*@import \\"//example.com/style.css\\";*/ +/*@import url(~package/test.css);*/ +/*@import ;*/ +/*@import foo-bar;*/ +/*@import-normalize;*/ +/*@import url('http://') :root {}*/ +/*@import url('query.css?foo=1&bar=1');*/ +/*@import url('other-query.css?foo=1&bar=1#hash');*/ +/*@import url('other-query.css?foo=1&bar=1#hash') screen and (orientation:landscape);*/ +/*@import url('https://fonts.googleapis.com/css?family=Roboto');*/ +/*@import url('https://fonts.googleapis.com/css?family=Noto+Sans+TC');*/ +/*@import url('https://fonts.googleapis.com/css?family=Noto+Sans+TC|Roboto');*/ + +/*@import nourl(test.css); +@import '\\\\ +\\\\ +\\\\ +'; +@import url('!!../../helpers/string-loader.js?esModule=false!~package/tilde.css');*/ +/*@import url(' https://fonts.googleapis.com/css?family=Roboto ');*/ +/*@import url('!!../../helpers/string-loader.js?esModule=false!');*/ +/*@import url(' !!../../helpers/string-loader.js?esModule=false!~package/tilde.css ');*/ +/*@import \\"http://example.com/style.css\\" supports(display: flex) screen and (min-width: 400px);*/ +/* anonymous */ +/* All unknown parse as media for compatibility */ body { background: red; } @@ -1046,6 +1085,634 @@ exports[`ConfigCacheTestCases css pure-css exported tests should compile 1`] = ` Array [ ".class { color: red; +} + +.local1, +.local2 :global .global, +.local3 { + color: green; +} + +:global .global :local .local4 { + color: yellow; +} + +.local5:global(.global).local6 { + color: blue; +} + +.local7 div:not(.disabled, .mButtonDisabled, .tipOnly) { + pointer-events: initial !important; +} + +.local8 :is(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local9 :matches(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local10 :where(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local11 div:has(.disabled, .mButtonDisabled, .tipOnly) { + pointer-events: initial !important; +} + +.local12 div:current(p, span) { + background-color: yellow; +} + +.local13 div:past(p, span) { + display: none; +} + +.local14 div:future(p, span) { + background-color: yellow; +} + +.local15 div:-moz-any(ol, ul, menu, dir) { + list-style-type: square; +} + +.local16 li:-webkit-any(:first-child, :last-child) { + background-color: aquamarine; +} + +.local9 :matches(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +:global(:global(:local(.nested1)).nested2).nested3 { + color: pink; +} + +#ident { + color: purple; +} + +@keyframes localkeyframes { + 0% { + left: var(--pos1x); + top: var(--pos1y); + color: var(--theme-color1); + } + 100% { + left: var(--pos2x); + top: var(--pos2y); + color: var(--theme-color2); + } +} + +@keyframes localkeyframes2 { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.animation { + animation-name: localkeyframes; + animation: 3s ease-in 1s 2 reverse both paused localkeyframes, localkeyframes2; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +/* .composed { + composes: local1; + composes: local2; +} */ + +.vars { + color: var(--local-color); + --local-color: red; +} + +.globalVars :global { + color: var(--global-color); + --global-color: red; +} + +@media (min-width: 1600px) { + .wideScreenClass { + color: var(--local-color); + --local-color: green; + } +} + +@media screen and (max-width: 600px) { + .narrowScreenClass { + color: var(--local-color); + --local-color: purple; + } +} + +@supports (display: grid) { + .displayGridInSupports { + display: grid; + } +} + +@supports not (display: grid) { + .floatRightInNegativeSupports { + float: right; + } +} + +@supports (display: flex) { + @media screen and (min-width: 900px) { + .displayFlexInMediaInSupports { + display: flex; + } + } +} + +@media screen and (min-width: 900px) { + @supports (display: flex) { + .displayFlexInSupportsInMedia { + display: flex; + } + } +} + +@MEDIA screen and (min-width: 900px) { + @SUPPORTS (display: flex) { + .displayFlexInSupportsInMediaUpperCase { + display: flex; + } + } +} + +.animationUpperCase { + ANIMATION-NAME: localkeyframesUPPERCASE; + ANIMATION: 3s ease-in 1s 2 reverse both paused localkeyframesUPPERCASE, localkeyframes2UPPPERCASE; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +@KEYFRAMES localkeyframesUPPERCASE { + 0% { + left: VAR(--pos1x); + top: VAR(--pos1y); + color: VAR(--theme-color1); + } + 100% { + left: VAR(--pos2x); + top: VAR(--pos2y); + color: VAR(--theme-color2); + } +} + +@KEYframes localkeyframes2UPPPERCASE { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +:GLOBAL .globalUpperCase :LOCAL .localUpperCase { + color: yellow; +} + +.VARS { + color: VAR(--LOCAL-COLOR); + --LOCAL-COLOR: red; +} + +.globalVarsUpperCase :GLOBAL { + COLOR: VAR(--GLOBAR-COLOR); + --GLOBAR-COLOR: red; +} + +@supports (top: env(safe-area-inset-top, 0)) { + .inSupportScope { + color: red; + } +} + +.a { + animation: 3s animationName; + -webkit-animation: 3s animationName; +} + +.b { + animation: animationName 3s; + -webkit-animation: animationName 3s; +} + +.c { + animation-name: animationName; + -webkit-animation-name: animationName; +} + +.d { + --animation-name: animationName; +} + +@keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-webkit-keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-moz-keyframes mozAnimationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@counter-style thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +/* At-rule for \\"nice-style\\" in Font Two */ +@font-feature-values Font Two { + @styleset { + nice-style: 4; + } +} + +@property --my-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +.class { + color: var(--my-color); +} + +@layer utilities { + .padding-sm { + padding: 0.5rem; + } + + .padding-lg { + padding: 0.8rem; + } +} + +.class { + color: red; + + .nested-pure { + color: red; + } + + @media screen and (min-width: 200px) { + color: blue; + + .nested-media { + color: blue; + } + } + + @supports (display: flex) { + display: flex; + + .nested-supports { + display: flex; + } + } + + @layer foo { + background: red; + + .nested-layer { + background: red; + } + } + + @container foo { + background: red; + + .nested-layer { + background: red; + } + } +} + +.not-selector-inside { + color: #fff; + opacity: 0.12; + padding: .5px; + unknown: :local(.test); + unknown1: :local .test; + unknown2: :global .test; + unknown3: :global .test; + unknown4: .foo, .bar, #bar; +} + +@unknown :local .local :global .global { + color: red; +} + +@unknown :local(.local) :global(.global) { + color: red; +} + +.nested-var { + .again { + color: var(--local-color); + } +} + +.nested-with-local-pseudo { + color: red; + + :local .local-nested { + color: red; + } + + :global .global-nested { + color: red; + } + + :local(.local-nested) { + color: red; + } + + :global(.global-nested) { + color: red; + } + + :local .local-nested, :global .global-nested-next { + color: red; + } + + :local(.local-nested), :global(.global-nested-next) { + color: red; + } + + :global .foo, .bar { + color: red; + } +} + +#id-foo { + color: red; + + #id-bar { + color: red; + } +} + +.nested-parens { + .local9 div:has(.vertical-tiny, .vertical-small) { + max-height: 0; + margin: 0; + overflow: hidden; + } +} + +:global .global-foo { + .nested-global { + color: red; + } + + :local .local-in-global { + color: blue; + } +} + +@unknown .class { + color: red; + + .class { + color: red; + } +} + +:global .class :local .in-local-global-scope, +:global .class :local .in-local-global-scope, +:local .class-local-scope :global .in-local-global-scope { + color: red; +} + +@container (width > 400px) { + .class-in-container { + font-size: 1.5em; + } +} + +@container summary (min-width: 400px) { + @container (width > 400px) { + .deep-class-in-container { + font-size: 1.5em; + } + } +} + +:scope { + color: red; +} + +.placeholder-gray-700:-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} + +:root { + --test: dark; +} + +@media screen and (prefers-color-scheme: var(--test)) { + .baz { + color: white; + } +} + +@keyframes slidein { + from { + margin-left: 100%; + width: 300%; + } + + to { + margin-left: 0%; + width: 100%; + } +} + +.class { + animation: + foo var(--animation-name) 3s, + var(--animation-name) 3s, + 3s linear 1s infinite running slidein, + 3s linear env(foo, var(--baz)) infinite running slidein; +} + +:root { + --baz: 10px; +} + +.class { + bar: env(foo, var(--baz)); +} + +:global .global-foo, :local .bar { + :local .local-in-global { + color: blue; + } + + @media screen { + :global .my-global-class-again, + :local .my-global-class-again { + color: red; + } + } +} + +.first-nested { + .first-nested-nested { + color: red; + } +} + +.first-nested-at-rule { + @media screen { + .first-nested-nested-at-rule-deep { + color: red; + } + } +} + +:global .again-global { + color:red; +} + +:global .again-again-global { + :global .again-again-global { + color: red; + } +} + +:root { + --foo: red; +} + +:global .again-again-global { + color: var(--foo); + + :global .again-again-global { + color: var(--foo); + } +} + +:global .again-again-global { + animation: slidein 3s; + + :global .again-again-global, .class, :global(:global(:local(.nested1)).nested2).nested3 { + animation: slidein 3s; + } + + .local2 :global .global, + .local3 { + color: red; + } +} + +@unknown var(--foo) { + color: red; +} + +.class { + .class { + .class { + .class {} + } + } +} + +.class { + .class { + .class { + .class { + animation: slidein 3s; + } + } + } +} + +.class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + } + } + } +} + +.class { + color: red; background: var(--color); } @@ -1078,7 +1745,11 @@ Array [ foo: bar; } -head{--webpack-main:\\\\.\\\\/style\\\\.css;}", +.class { + animation: test 1s, test; +} + +head{--webpack-main:\\\\.\\\\.\\\\/css-modules\\\\/style\\\\.module\\\\.css,\\\\.\\\\/style\\\\.css;}", ] `; diff --git a/test/__snapshots__/ConfigTestCases.basictest.js.snap b/test/__snapshots__/ConfigTestCases.basictest.js.snap index a36de1caf..d226f3283 100644 --- a/test/__snapshots__/ConfigTestCases.basictest.js.snap +++ b/test/__snapshots__/ConfigTestCases.basictest.js.snap @@ -1034,6 +1034,45 @@ a { } } +/* Has the same URL */ +/*@import url(); +@import url(''); +@import url(\\"\\"); +@import ''; +@import \\"\\"; +@import \\" \\"; +@import \\"\\\\ +\\"; +@import url(); +@import url(''); +@import url(\\"\\");*/ +/*@import url(https://test.cases/path/../../../../configCases/css/css-import/external.css) screen and (orientation:landscape); +@import url(https://test.cases/path/../../../../configCases/css/css-import/external.css) screen and (orientation:landscape);*/ +/*@import \\"//example.com/style.css\\";*/ +/*@import url(~package/test.css);*/ +/*@import ;*/ +/*@import foo-bar;*/ +/*@import-normalize;*/ +/*@import url('http://') :root {}*/ +/*@import url('query.css?foo=1&bar=1');*/ +/*@import url('other-query.css?foo=1&bar=1#hash');*/ +/*@import url('other-query.css?foo=1&bar=1#hash') screen and (orientation:landscape);*/ +/*@import url('https://fonts.googleapis.com/css?family=Roboto');*/ +/*@import url('https://fonts.googleapis.com/css?family=Noto+Sans+TC');*/ +/*@import url('https://fonts.googleapis.com/css?family=Noto+Sans+TC|Roboto');*/ + +/*@import nourl(test.css); +@import '\\\\ +\\\\ +\\\\ +'; +@import url('!!../../helpers/string-loader.js?esModule=false!~package/tilde.css');*/ +/*@import url(' https://fonts.googleapis.com/css?family=Roboto ');*/ +/*@import url('!!../../helpers/string-loader.js?esModule=false!');*/ +/*@import url(' !!../../helpers/string-loader.js?esModule=false!~package/tilde.css ');*/ +/*@import \\"http://example.com/style.css\\" supports(display: flex) screen and (min-width: 400px);*/ +/* anonymous */ +/* All unknown parse as media for compatibility */ body { background: red; } @@ -1046,6 +1085,634 @@ exports[`ConfigTestCases css pure-css exported tests should compile 1`] = ` Array [ ".class { color: red; +} + +.local1, +.local2 :global .global, +.local3 { + color: green; +} + +:global .global :local .local4 { + color: yellow; +} + +.local5:global(.global).local6 { + color: blue; +} + +.local7 div:not(.disabled, .mButtonDisabled, .tipOnly) { + pointer-events: initial !important; +} + +.local8 :is(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local9 :matches(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local10 :where(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local11 div:has(.disabled, .mButtonDisabled, .tipOnly) { + pointer-events: initial !important; +} + +.local12 div:current(p, span) { + background-color: yellow; +} + +.local13 div:past(p, span) { + display: none; +} + +.local14 div:future(p, span) { + background-color: yellow; +} + +.local15 div:-moz-any(ol, ul, menu, dir) { + list-style-type: square; +} + +.local16 li:-webkit-any(:first-child, :last-child) { + background-color: aquamarine; +} + +.local9 :matches(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +:global(:global(:local(.nested1)).nested2).nested3 { + color: pink; +} + +#ident { + color: purple; +} + +@keyframes localkeyframes { + 0% { + left: var(--pos1x); + top: var(--pos1y); + color: var(--theme-color1); + } + 100% { + left: var(--pos2x); + top: var(--pos2y); + color: var(--theme-color2); + } +} + +@keyframes localkeyframes2 { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.animation { + animation-name: localkeyframes; + animation: 3s ease-in 1s 2 reverse both paused localkeyframes, localkeyframes2; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +/* .composed { + composes: local1; + composes: local2; +} */ + +.vars { + color: var(--local-color); + --local-color: red; +} + +.globalVars :global { + color: var(--global-color); + --global-color: red; +} + +@media (min-width: 1600px) { + .wideScreenClass { + color: var(--local-color); + --local-color: green; + } +} + +@media screen and (max-width: 600px) { + .narrowScreenClass { + color: var(--local-color); + --local-color: purple; + } +} + +@supports (display: grid) { + .displayGridInSupports { + display: grid; + } +} + +@supports not (display: grid) { + .floatRightInNegativeSupports { + float: right; + } +} + +@supports (display: flex) { + @media screen and (min-width: 900px) { + .displayFlexInMediaInSupports { + display: flex; + } + } +} + +@media screen and (min-width: 900px) { + @supports (display: flex) { + .displayFlexInSupportsInMedia { + display: flex; + } + } +} + +@MEDIA screen and (min-width: 900px) { + @SUPPORTS (display: flex) { + .displayFlexInSupportsInMediaUpperCase { + display: flex; + } + } +} + +.animationUpperCase { + ANIMATION-NAME: localkeyframesUPPERCASE; + ANIMATION: 3s ease-in 1s 2 reverse both paused localkeyframesUPPERCASE, localkeyframes2UPPPERCASE; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +@KEYFRAMES localkeyframesUPPERCASE { + 0% { + left: VAR(--pos1x); + top: VAR(--pos1y); + color: VAR(--theme-color1); + } + 100% { + left: VAR(--pos2x); + top: VAR(--pos2y); + color: VAR(--theme-color2); + } +} + +@KEYframes localkeyframes2UPPPERCASE { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +:GLOBAL .globalUpperCase :LOCAL .localUpperCase { + color: yellow; +} + +.VARS { + color: VAR(--LOCAL-COLOR); + --LOCAL-COLOR: red; +} + +.globalVarsUpperCase :GLOBAL { + COLOR: VAR(--GLOBAR-COLOR); + --GLOBAR-COLOR: red; +} + +@supports (top: env(safe-area-inset-top, 0)) { + .inSupportScope { + color: red; + } +} + +.a { + animation: 3s animationName; + -webkit-animation: 3s animationName; +} + +.b { + animation: animationName 3s; + -webkit-animation: animationName 3s; +} + +.c { + animation-name: animationName; + -webkit-animation-name: animationName; +} + +.d { + --animation-name: animationName; +} + +@keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-webkit-keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-moz-keyframes mozAnimationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@counter-style thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +/* At-rule for \\"nice-style\\" in Font Two */ +@font-feature-values Font Two { + @styleset { + nice-style: 4; + } +} + +@property --my-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +.class { + color: var(--my-color); +} + +@layer utilities { + .padding-sm { + padding: 0.5rem; + } + + .padding-lg { + padding: 0.8rem; + } +} + +.class { + color: red; + + .nested-pure { + color: red; + } + + @media screen and (min-width: 200px) { + color: blue; + + .nested-media { + color: blue; + } + } + + @supports (display: flex) { + display: flex; + + .nested-supports { + display: flex; + } + } + + @layer foo { + background: red; + + .nested-layer { + background: red; + } + } + + @container foo { + background: red; + + .nested-layer { + background: red; + } + } +} + +.not-selector-inside { + color: #fff; + opacity: 0.12; + padding: .5px; + unknown: :local(.test); + unknown1: :local .test; + unknown2: :global .test; + unknown3: :global .test; + unknown4: .foo, .bar, #bar; +} + +@unknown :local .local :global .global { + color: red; +} + +@unknown :local(.local) :global(.global) { + color: red; +} + +.nested-var { + .again { + color: var(--local-color); + } +} + +.nested-with-local-pseudo { + color: red; + + :local .local-nested { + color: red; + } + + :global .global-nested { + color: red; + } + + :local(.local-nested) { + color: red; + } + + :global(.global-nested) { + color: red; + } + + :local .local-nested, :global .global-nested-next { + color: red; + } + + :local(.local-nested), :global(.global-nested-next) { + color: red; + } + + :global .foo, .bar { + color: red; + } +} + +#id-foo { + color: red; + + #id-bar { + color: red; + } +} + +.nested-parens { + .local9 div:has(.vertical-tiny, .vertical-small) { + max-height: 0; + margin: 0; + overflow: hidden; + } +} + +:global .global-foo { + .nested-global { + color: red; + } + + :local .local-in-global { + color: blue; + } +} + +@unknown .class { + color: red; + + .class { + color: red; + } +} + +:global .class :local .in-local-global-scope, +:global .class :local .in-local-global-scope, +:local .class-local-scope :global .in-local-global-scope { + color: red; +} + +@container (width > 400px) { + .class-in-container { + font-size: 1.5em; + } +} + +@container summary (min-width: 400px) { + @container (width > 400px) { + .deep-class-in-container { + font-size: 1.5em; + } + } +} + +:scope { + color: red; +} + +.placeholder-gray-700:-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} + +:root { + --test: dark; +} + +@media screen and (prefers-color-scheme: var(--test)) { + .baz { + color: white; + } +} + +@keyframes slidein { + from { + margin-left: 100%; + width: 300%; + } + + to { + margin-left: 0%; + width: 100%; + } +} + +.class { + animation: + foo var(--animation-name) 3s, + var(--animation-name) 3s, + 3s linear 1s infinite running slidein, + 3s linear env(foo, var(--baz)) infinite running slidein; +} + +:root { + --baz: 10px; +} + +.class { + bar: env(foo, var(--baz)); +} + +:global .global-foo, :local .bar { + :local .local-in-global { + color: blue; + } + + @media screen { + :global .my-global-class-again, + :local .my-global-class-again { + color: red; + } + } +} + +.first-nested { + .first-nested-nested { + color: red; + } +} + +.first-nested-at-rule { + @media screen { + .first-nested-nested-at-rule-deep { + color: red; + } + } +} + +:global .again-global { + color:red; +} + +:global .again-again-global { + :global .again-again-global { + color: red; + } +} + +:root { + --foo: red; +} + +:global .again-again-global { + color: var(--foo); + + :global .again-again-global { + color: var(--foo); + } +} + +:global .again-again-global { + animation: slidein 3s; + + :global .again-again-global, .class, :global(:global(:local(.nested1)).nested2).nested3 { + animation: slidein 3s; + } + + .local2 :global .global, + .local3 { + color: red; + } +} + +@unknown var(--foo) { + color: red; +} + +.class { + .class { + .class { + .class {} + } + } +} + +.class { + .class { + .class { + .class { + animation: slidein 3s; + } + } + } +} + +.class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + } + } + } +} + +.class { + color: red; background: var(--color); } @@ -1078,7 +1745,11 @@ Array [ foo: bar; } -head{--webpack-main:\\\\.\\\\/style\\\\.css;}", +.class { + animation: test 1s, test; +} + +head{--webpack-main:\\\\.\\\\.\\\\/css-modules\\\\/style\\\\.module\\\\.css,\\\\.\\\\/style\\\\.css;}", ] `; diff --git a/test/__snapshots__/StatsTestCases.basictest.js.snap b/test/__snapshots__/StatsTestCases.basictest.js.snap index 0b21d1c47..d5704c42e 100644 --- a/test/__snapshots__/StatsTestCases.basictest.js.snap +++ b/test/__snapshots__/StatsTestCases.basictest.js.snap @@ -3,14 +3,14 @@ exports[`StatsTestCases should print correct stats for aggressive-splitting-entry 1`] = ` "fitting: PublicPath: auto - asset fitting-27df06fdbf7adbff38d6.js 16.2 KiB [emitted] [immutable] + asset fitting-42703728faa2ac5f1783.js 16.1 KiB [emitted] [immutable] asset fitting-50595d23e8f97d7ccd2a.js 1.9 KiB [emitted] [immutable] asset fitting-5bc77880fdc9e2bf09ee.js 1.9 KiB [emitted] [immutable] asset fitting-72afdc913f6cf884b457.js 1.08 KiB [emitted] [immutable] - Entrypoint main 20 KiB = fitting-50595d23e8f97d7ccd2a.js 1.9 KiB fitting-5bc77880fdc9e2bf09ee.js 1.9 KiB fitting-27df06fdbf7adbff38d6.js 16.2 KiB - chunk (runtime: main) fitting-27df06fdbf7adbff38d6.js 1.87 KiB (javascript) 8.7 KiB (runtime) [entry] [rendered] + Entrypoint main 19.9 KiB = fitting-50595d23e8f97d7ccd2a.js 1.9 KiB fitting-5bc77880fdc9e2bf09ee.js 1.9 KiB fitting-42703728faa2ac5f1783.js 16.1 KiB + chunk (runtime: main) fitting-42703728faa2ac5f1783.js 1.87 KiB (javascript) 8.67 KiB (runtime) [entry] [rendered] > ./index main - runtime modules 8.7 KiB 11 modules + runtime modules 8.67 KiB 11 modules cacheable modules 1.87 KiB ./e.js 899 bytes [dependent] [built] [code generated] ./f.js 900 bytes [dependent] [built] [code generated] @@ -30,14 +30,14 @@ exports[`StatsTestCases should print correct stats for aggressive-splitting-entr content-change: PublicPath: auto - asset content-change-ea14516bfb79836da4ae.js 16.2 KiB [emitted] [immutable] + asset content-change-bf86f7c713e56417a7d9.js 16.1 KiB [emitted] [immutable] asset content-change-50595d23e8f97d7ccd2a.js 1.9 KiB [emitted] [immutable] asset content-change-5bc77880fdc9e2bf09ee.js 1.9 KiB [emitted] [immutable] asset content-change-72afdc913f6cf884b457.js 1.08 KiB [emitted] [immutable] - Entrypoint main 20 KiB = content-change-50595d23e8f97d7ccd2a.js 1.9 KiB content-change-5bc77880fdc9e2bf09ee.js 1.9 KiB content-change-ea14516bfb79836da4ae.js 16.2 KiB - chunk (runtime: main) content-change-ea14516bfb79836da4ae.js 1.87 KiB (javascript) 8.71 KiB (runtime) [entry] [rendered] + Entrypoint main 20 KiB = content-change-50595d23e8f97d7ccd2a.js 1.9 KiB content-change-5bc77880fdc9e2bf09ee.js 1.9 KiB content-change-bf86f7c713e56417a7d9.js 16.1 KiB + chunk (runtime: main) content-change-bf86f7c713e56417a7d9.js 1.87 KiB (javascript) 8.68 KiB (runtime) [entry] [rendered] > ./index main - runtime modules 8.71 KiB 11 modules + runtime modules 8.68 KiB 11 modules cacheable modules 1.87 KiB ./e.js 899 bytes [dependent] [built] [code generated] ./f.js 900 bytes [dependent] [built] [code generated] @@ -58,7 +58,7 @@ content-change: exports[`StatsTestCases should print correct stats for aggressive-splitting-on-demand 1`] = ` "PublicPath: auto -asset abdecc928f4f9878244e.js 11.7 KiB [emitted] [immutable] (name: main) +asset 4b96d6b25c31d619b4d3.js 11.7 KiB [emitted] [immutable] (name: main) asset 3fc6535262efa7e4fa3b.js 1.91 KiB [emitted] [immutable] asset 56815935c535fbc0e462.js 1.91 KiB [emitted] [immutable] asset 2b8c8882bd4326b27013.js 1.9 KiB [emitted] [immutable] @@ -70,14 +70,14 @@ asset f79c60cc3faba968a476.js 1.9 KiB [emitted] [immutable] asset 7294786e49319a98f5af.js 1010 bytes [emitted] [immutable] asset c5861419d7f3f6ea6c19.js 1010 bytes [emitted] [immutable] asset f897ac9956540163d002.js 1010 bytes [emitted] [immutable] -Entrypoint main 11.7 KiB = abdecc928f4f9878244e.js +Entrypoint main 11.7 KiB = 4b96d6b25c31d619b4d3.js chunk (runtime: main) 5bc77880fdc9e2bf09ee.js 1.76 KiB [rendered] [recorded] aggressive splitted > ./c ./d ./e ./index.js 3:0-30 ./c.js 899 bytes [built] [code generated] ./d.js 899 bytes [built] [code generated] -chunk (runtime: main) abdecc928f4f9878244e.js (main) 248 bytes (javascript) 6.36 KiB (runtime) [entry] [rendered] +chunk (runtime: main) 4b96d6b25c31d619b4d3.js (main) 248 bytes (javascript) 6.33 KiB (runtime) [entry] [rendered] > ./index main - runtime modules 6.36 KiB 7 modules + runtime modules 6.33 KiB 7 modules ./index.js 248 bytes [built] [code generated] chunk (runtime: main) 3fc6535262efa7e4fa3b.js 1.76 KiB [rendered] > ./f ./g ./h ./i ./j ./k ./index.js 4:0-51 @@ -191,9 +191,9 @@ webpack x.x.x compiled successfully in X ms" `; exports[`StatsTestCases should print correct stats for async-commons-chunk 1`] = ` -"chunk (runtime: main) main.js (main) 515 bytes (javascript) 6.05 KiB (runtime) >{460}< >{847}< >{996}< [entry] [rendered] +"chunk (runtime: main) main.js (main) 515 bytes (javascript) 6.01 KiB (runtime) >{460}< >{847}< >{996}< [entry] [rendered] > ./ main - runtime modules 6.05 KiB 7 modules + runtime modules 6.01 KiB 7 modules ./index.js 515 bytes [built] [code generated] chunk (runtime: main) 460.js 21 bytes <{179}> ={847}= [rendered] > ./index.js 17:1-21:3 @@ -220,9 +220,9 @@ exports[`StatsTestCases should print correct stats for async-commons-chunk-auto > ./g ./a.js 6:0-47 dependent modules 20 bytes [dependent] 1 module ./g.js 45 bytes [built] [code generated] - chunk (runtime: main) disabled/main.js (main) 147 bytes (javascript) 6.7 KiB (runtime) [entry] [rendered] + chunk (runtime: main) disabled/main.js (main) 147 bytes (javascript) 6.67 KiB (runtime) [entry] [rendered] > ./ main - runtime modules 6.7 KiB 9 modules + runtime modules 6.67 KiB 9 modules ./index.js 147 bytes [built] [code generated] chunk (runtime: main) disabled/async-b.js (async-b) 196 bytes [rendered] > ./b ./index.js 2:0-47 @@ -237,9 +237,9 @@ exports[`StatsTestCases should print correct stats for async-commons-chunk-auto dependent modules 60 bytes [dependent] 3 modules runtime modules 396 bytes 2 modules ./c.js + 1 modules 136 bytes [built] [code generated] - chunk (runtime: a) disabled/a.js (a) 245 bytes (javascript) 6.64 KiB (runtime) [entry] [rendered] + chunk (runtime: a) disabled/a.js (a) 245 bytes (javascript) 6.61 KiB (runtime) [entry] [rendered] > ./a a - runtime modules 6.64 KiB 9 modules + runtime modules 6.61 KiB 9 modules dependent modules 60 bytes [dependent] 3 modules ./a.js + 1 modules 185 bytes [built] [code generated] chunk (runtime: main) disabled/async-a.js (async-a) 245 bytes [rendered] @@ -257,9 +257,9 @@ default: chunk (runtime: a, main) default/async-g.js (async-g) 45 bytes [rendered] > ./g ./a.js 6:0-47 ./g.js 45 bytes [built] [code generated] - chunk (runtime: main) default/main.js (main) 147 bytes (javascript) 6.71 KiB (runtime) [entry] [rendered] + chunk (runtime: main) default/main.js (main) 147 bytes (javascript) 6.68 KiB (runtime) [entry] [rendered] > ./ main - runtime modules 6.71 KiB 9 modules + runtime modules 6.68 KiB 9 modules ./index.js 147 bytes [built] [code generated] chunk (runtime: main) default/282.js (id hint: vendors) 20 bytes [rendered] split chunk (cache group: defaultVendors) > ./a ./index.js 1:0-47 @@ -290,9 +290,9 @@ default: chunk (runtime: main) default/769.js (id hint: vendors) 20 bytes [rendered] split chunk (cache group: defaultVendors) > ./c ./index.js 3:0-47 ./node_modules/z.js 20 bytes [built] [code generated] - chunk (runtime: a) default/a.js (a) 245 bytes (javascript) 6.7 KiB (runtime) [entry] [rendered] + chunk (runtime: a) default/a.js (a) 245 bytes (javascript) 6.67 KiB (runtime) [entry] [rendered] > ./a a - runtime modules 6.7 KiB 9 modules + runtime modules 6.67 KiB 9 modules dependent modules 60 bytes [dependent] 3 modules ./a.js + 1 modules 185 bytes [built] [code generated] chunk (runtime: main) default/async-a.js (async-a) 185 bytes [rendered] @@ -305,7 +305,7 @@ default: default (webpack x.x.x) compiled successfully vendors: - Entrypoint main 11.2 KiB = vendors/main.js + Entrypoint main 11.1 KiB = vendors/main.js Entrypoint a 14.5 KiB = vendors/vendors.js 1.04 KiB vendors/a.js 13.5 KiB Entrypoint b 8.17 KiB = vendors/vendors.js 1.04 KiB vendors/b.js 7.13 KiB Entrypoint c 8.17 KiB = vendors/vendors.js 1.04 KiB vendors/c.js 7.13 KiB @@ -318,9 +318,9 @@ vendors: > ./g ./a.js 6:0-47 dependent modules 20 bytes [dependent] 1 module ./g.js 45 bytes [built] [code generated] - chunk (runtime: main) vendors/main.js (main) 147 bytes (javascript) 6.7 KiB (runtime) [entry] [rendered] + chunk (runtime: main) vendors/main.js (main) 147 bytes (javascript) 6.66 KiB (runtime) [entry] [rendered] > ./ main - runtime modules 6.7 KiB 9 modules + runtime modules 6.66 KiB 9 modules ./index.js 147 bytes [built] [code generated] chunk (runtime: a, b, c) vendors/vendors.js (vendors) (id hint: vendors) 60 bytes [initial] [rendered] split chunk (cache group: vendors) (name: vendors) > ./a a @@ -342,9 +342,9 @@ vendors: runtime modules 2.75 KiB 4 modules dependent modules 40 bytes [dependent] 2 modules ./c.js 116 bytes [built] [code generated] - chunk (runtime: a) vendors/a.js (a) 205 bytes (javascript) 7.59 KiB (runtime) [entry] [rendered] + chunk (runtime: a) vendors/a.js (a) 205 bytes (javascript) 7.55 KiB (runtime) [entry] [rendered] > ./a a - runtime modules 7.59 KiB 10 modules + runtime modules 7.55 KiB 10 modules dependent modules 20 bytes [dependent] 1 module ./a.js + 1 modules 185 bytes [built] [code generated] chunk (runtime: main) vendors/async-a.js (async-a) 245 bytes [rendered] @@ -354,8 +354,8 @@ vendors: vendors (webpack x.x.x) compiled successfully multiple-vendors: - Entrypoint main 11.6 KiB = multiple-vendors/main.js - Entrypoint a 15.1 KiB = multiple-vendors/libs-x.js 412 bytes multiple-vendors/954.js 412 bytes multiple-vendors/767.js 412 bytes multiple-vendors/390.js 412 bytes multiple-vendors/a.js 13.4 KiB + Entrypoint main 11.5 KiB = multiple-vendors/main.js + Entrypoint a 15 KiB = multiple-vendors/libs-x.js 412 bytes multiple-vendors/954.js 412 bytes multiple-vendors/767.js 412 bytes multiple-vendors/390.js 412 bytes multiple-vendors/a.js 13.4 KiB Entrypoint b 8.13 KiB = multiple-vendors/libs-x.js 412 bytes multiple-vendors/954.js 412 bytes multiple-vendors/767.js 412 bytes multiple-vendors/568.js 412 bytes multiple-vendors/b.js 6.52 KiB Entrypoint c 8.13 KiB = multiple-vendors/libs-x.js 412 bytes multiple-vendors/769.js 412 bytes multiple-vendors/767.js 412 bytes multiple-vendors/568.js 412 bytes multiple-vendors/c.js 6.52 KiB chunk (runtime: a, b, c, main) multiple-vendors/libs-x.js (libs-x) (id hint: libs) 20 bytes [initial] [rendered] split chunk (cache group: libs) (name: libs-x) @@ -373,9 +373,9 @@ multiple-vendors: chunk (runtime: a, main) multiple-vendors/async-g.js (async-g) 45 bytes [rendered] > ./g ./a.js 6:0-47 ./g.js 45 bytes [built] [code generated] - chunk (runtime: main) multiple-vendors/main.js (main) 147 bytes (javascript) 6.73 KiB (runtime) [entry] [rendered] + chunk (runtime: main) multiple-vendors/main.js (main) 147 bytes (javascript) 6.7 KiB (runtime) [entry] [rendered] > ./ main - runtime modules 6.73 KiB 9 modules + runtime modules 6.7 KiB 9 modules ./index.js 147 bytes [built] [code generated] chunk (runtime: main) multiple-vendors/async-b.js (async-b) 116 bytes [rendered] > ./b ./index.js 2:0-47 @@ -410,9 +410,9 @@ multiple-vendors: > ./c ./index.js 3:0-47 > ./c c ./node_modules/z.js 20 bytes [built] [code generated] - chunk (runtime: a) multiple-vendors/a.js (a) 165 bytes (javascript) 7.63 KiB (runtime) [entry] [rendered] + chunk (runtime: a) multiple-vendors/a.js (a) 165 bytes (javascript) 7.6 KiB (runtime) [entry] [rendered] > ./a a - runtime modules 7.63 KiB 10 modules + runtime modules 7.6 KiB 10 modules ./a.js 165 bytes [built] [code generated] chunk (runtime: main) multiple-vendors/async-a.js (async-a) 165 bytes [rendered] > ./a ./index.js 1:0-47 @@ -437,9 +437,9 @@ all: chunk (runtime: a, main) all/async-g.js (async-g) 45 bytes [rendered] > ./g ./a.js 6:0-47 ./g.js 45 bytes [built] [code generated] - chunk (runtime: main) all/main.js (main) 147 bytes (javascript) 6.71 KiB (runtime) [entry] [rendered] + chunk (runtime: main) all/main.js (main) 147 bytes (javascript) 6.67 KiB (runtime) [entry] [rendered] > ./ main - runtime modules 6.71 KiB 9 modules + runtime modules 6.67 KiB 9 modules ./index.js 147 bytes [built] [code generated] chunk (runtime: a, b, c, main) all/282.js (id hint: vendors) 20 bytes [initial] [rendered] split chunk (cache group: vendors) > ./a ./index.js 1:0-47 @@ -482,9 +482,9 @@ all: > ./c ./index.js 3:0-47 > ./c c ./node_modules/z.js 20 bytes [built] [code generated] - chunk (runtime: a) all/a.js (a) 165 bytes (javascript) 7.62 KiB (runtime) [entry] [rendered] + chunk (runtime: a) all/a.js (a) 165 bytes (javascript) 7.59 KiB (runtime) [entry] [rendered] > ./a a - runtime modules 7.62 KiB 10 modules + runtime modules 7.59 KiB 10 modules ./a.js 165 bytes [built] [code generated] chunk (runtime: main) all/async-a.js (async-a) 165 bytes [rendered] > ./a ./index.js 1:0-47 @@ -550,9 +550,9 @@ asset bundle.js 10.3 KiB [emitted] (name: main) asset 460.bundle.js 323 bytes [emitted] asset 524.bundle.js 206 bytes [emitted] asset 996.bundle.js 138 bytes [emitted] -chunk (runtime: main) bundle.js (main) 73 bytes (javascript) 6.06 KiB (runtime) >{460}< >{996}< [entry] [rendered] +chunk (runtime: main) bundle.js (main) 73 bytes (javascript) 6.02 KiB (runtime) >{460}< >{996}< [entry] [rendered] > ./index main - runtime modules 6.06 KiB 7 modules + runtime modules 6.02 KiB 7 modules cacheable modules 73 bytes ./a.js 22 bytes [dependent] [built] [code generated] cjs self exports reference ./a.js 1:0-14 @@ -592,7 +592,7 @@ webpack x.x.x compiled successfully in X ms" exports[`StatsTestCases should print correct stats for chunks-development 1`] = ` "PublicPath: auto -asset bundle.js 11.4 KiB [emitted] (name: main) +asset bundle.js 11.3 KiB [emitted] (name: main) asset d_js-e_js.bundle.js 1.07 KiB [emitted] asset c_js.bundle.js 1010 bytes [emitted] asset b_js.bundle.js 816 bytes [emitted] @@ -621,9 +621,9 @@ chunk (runtime: main) d_js-e_js.bundle.js 60 bytes <{c_js}> [rendered] cjs self exports reference ./e.js 2:0-14 X ms -> X ms -> X ms (resolving: X ms, restoring: X ms, integration: X ms, building: X ms, storing: X ms) -chunk (runtime: main) bundle.js (main) 73 bytes (javascript) 6.06 KiB (runtime) >{b_js}< >{c_js}< [entry] [rendered] +chunk (runtime: main) bundle.js (main) 73 bytes (javascript) 6.02 KiB (runtime) >{b_js}< >{c_js}< [entry] [rendered] > ./index main - runtime modules 6.06 KiB 7 modules + runtime modules 6.02 KiB 7 modules cacheable modules 73 bytes ./a.js 22 bytes [dependent] [built] [code generated] cjs self exports reference ./a.js 1:0-14 @@ -640,8 +640,8 @@ webpack x.x.x compiled successfully in X ms" exports[`StatsTestCases should print correct stats for circular-correctness 1`] = ` "chunk (runtime: main) 128.bundle.js (b) 49 bytes <{179}> <{459}> >{459}< [rendered] ./module-b.js 49 bytes [built] [code generated] -chunk (runtime: main) bundle.js (main) 98 bytes (javascript) 7.74 KiB (runtime) >{128}< >{786}< [entry] [rendered] - runtime modules 7.74 KiB 10 modules +chunk (runtime: main) bundle.js (main) 98 bytes (javascript) 7.7 KiB (runtime) >{128}< >{786}< [entry] [rendered] + runtime modules 7.7 KiB 10 modules ./index.js 98 bytes [built] [code generated] chunk (runtime: main) 459.bundle.js (c) 98 bytes <{128}> <{786}> >{128}< >{786}< [rendered] ./module-c.js 98 bytes [built] [code generated] @@ -751,11 +751,11 @@ exports[`StatsTestCases should print correct stats for concat-and-sideeffects 1` `; exports[`StatsTestCases should print correct stats for context-independence 1`] = ` -"asset main-5479233a626f640195f9.js 12.8 KiB [emitted] [immutable] (name: main) - sourceMap main-5479233a626f640195f9.js.map 11.1 KiB [emitted] [dev] (auxiliary name: main) +"asset main-5a998235f48a10c7522b.js 12.8 KiB [emitted] [immutable] (name: main) + sourceMap main-5a998235f48a10c7522b.js.map 11.1 KiB [emitted] [dev] (auxiliary name: main) asset 695-d9846ea7920868a759cd.js 455 bytes [emitted] [immutable] sourceMap 695-d9846ea7920868a759cd.js.map 347 bytes [emitted] [dev] -runtime modules 6.65 KiB 9 modules +runtime modules 6.61 KiB 9 modules orphan modules 19 bytes [orphan] 1 module built modules 500 bytes [built] modules by layer 234 bytes @@ -767,11 +767,11 @@ built modules 500 bytes [built] ./a/chunk.js + 1 modules (in Xdir/context-independence/a) 66 bytes [built] [code generated] webpack x.x.x compiled successfully in X ms -asset main-5479233a626f640195f9.js 12.8 KiB [emitted] [immutable] (name: main) - sourceMap main-5479233a626f640195f9.js.map 11.1 KiB [emitted] [dev] (auxiliary name: main) +asset main-5a998235f48a10c7522b.js 12.8 KiB [emitted] [immutable] (name: main) + sourceMap main-5a998235f48a10c7522b.js.map 11.1 KiB [emitted] [dev] (auxiliary name: main) asset 695-d9846ea7920868a759cd.js 455 bytes [emitted] [immutable] sourceMap 695-d9846ea7920868a759cd.js.map 347 bytes [emitted] [dev] -runtime modules 6.65 KiB 9 modules +runtime modules 6.61 KiB 9 modules orphan modules 19 bytes [orphan] 1 module built modules 500 bytes [built] modules by layer 234 bytes @@ -783,9 +783,9 @@ built modules 500 bytes [built] ./b/chunk.js + 1 modules (in Xdir/context-independence/b) 66 bytes [built] [code generated] webpack x.x.x compiled successfully in X ms -asset main-afc6c97c5c3aafd6f882.js 14.9 KiB [emitted] [immutable] (name: main) +asset main-21184090ed4ef75bcb88.js 14.9 KiB [emitted] [immutable] (name: main) asset 695-3a54289b6e0375f1e753.js 1.51 KiB [emitted] [immutable] -runtime modules 6.65 KiB 9 modules +runtime modules 6.61 KiB 9 modules orphan modules 19 bytes [orphan] 1 module built modules 500 bytes [built] modules by layer 234 bytes @@ -797,9 +797,9 @@ built modules 500 bytes [built] ./a/chunk.js + 1 modules (in Xdir/context-independence/a) 66 bytes [built] [code generated] webpack x.x.x compiled successfully in X ms -asset main-afc6c97c5c3aafd6f882.js 14.9 KiB [emitted] [immutable] (name: main) +asset main-21184090ed4ef75bcb88.js 14.9 KiB [emitted] [immutable] (name: main) asset 695-3a54289b6e0375f1e753.js 1.51 KiB [emitted] [immutable] -runtime modules 6.65 KiB 9 modules +runtime modules 6.61 KiB 9 modules orphan modules 19 bytes [orphan] 1 module built modules 500 bytes [built] modules by layer 234 bytes @@ -811,9 +811,9 @@ built modules 500 bytes [built] ./b/chunk.js + 1 modules (in Xdir/context-independence/b) 66 bytes [built] [code generated] webpack x.x.x compiled successfully in X ms -asset main-7dd3306e33267a41ff55.js 13.8 KiB [emitted] [immutable] (name: main) +asset main-bd73ac146ff966959dfc.js 13.8 KiB [emitted] [immutable] (name: main) asset 695-ace208366ce0ce2556ef.js 1.01 KiB [emitted] [immutable] -runtime modules 6.65 KiB 9 modules +runtime modules 6.61 KiB 9 modules orphan modules 19 bytes [orphan] 1 module built modules 500 bytes [built] modules by layer 234 bytes @@ -825,9 +825,9 @@ built modules 500 bytes [built] ./a/chunk.js + 1 modules (in Xdir/context-independence/a) 66 bytes [built] [code generated] webpack x.x.x compiled successfully in X ms -asset main-7dd3306e33267a41ff55.js 13.8 KiB [emitted] [immutable] (name: main) +asset main-bd73ac146ff966959dfc.js 13.8 KiB [emitted] [immutable] (name: main) asset 695-ace208366ce0ce2556ef.js 1.01 KiB [emitted] [immutable] -runtime modules 6.65 KiB 9 modules +runtime modules 6.61 KiB 9 modules orphan modules 19 bytes [orphan] 1 module built modules 500 bytes [built] modules by layer 234 bytes @@ -1184,16 +1184,16 @@ exports[`StatsTestCases should print correct stats for graph-correctness-entries "chunk (runtime: e1, e2) b.js (b) 49 bytes <{786}> >{459}< [rendered] ./module-b.js 49 bytes [built] [code generated] import() ./module-b ./module-a.js 1:0-47 -chunk (runtime: e1) e1.js (e1) 49 bytes (javascript) 7.76 KiB (runtime) >{786}< [entry] [rendered] - runtime modules 7.76 KiB 10 modules +chunk (runtime: e1) e1.js (e1) 49 bytes (javascript) 7.73 KiB (runtime) >{786}< [entry] [rendered] + runtime modules 7.73 KiB 10 modules ./e1.js 49 bytes [built] [code generated] entry ./e1 e1 chunk (runtime: e1, e2) c.js (c) 49 bytes <{128}> <{621}> >{786}< [rendered] ./module-c.js 49 bytes [built] [code generated] import() ./module-c ./e2.js 1:0-47 import() ./module-c ./module-b.js 1:0-47 -chunk (runtime: e2) e2.js (e2) 49 bytes (javascript) 7.76 KiB (runtime) >{459}< [entry] [rendered] - runtime modules 7.76 KiB 10 modules +chunk (runtime: e2) e2.js (e2) 49 bytes (javascript) 7.73 KiB (runtime) >{459}< [entry] [rendered] + runtime modules 7.73 KiB 10 modules ./e2.js 49 bytes [built] [code generated] entry ./e2 e2 chunk (runtime: e1, e2) a.js (a) 49 bytes <{257}> <{459}> >{128}< [rendered] @@ -1207,8 +1207,8 @@ exports[`StatsTestCases should print correct stats for graph-correctness-modules "chunk (runtime: e1, e2) b.js (b) 179 bytes <{786}> >{459}< [rendered] ./module-b.js 179 bytes [built] [code generated] import() ./module-b ./module-a.js 1:0-47 -chunk (runtime: e1) e1.js (e1) 119 bytes (javascript) 8.03 KiB (runtime) >{786}< >{892}< [entry] [rendered] - runtime modules 8.03 KiB 11 modules +chunk (runtime: e1) e1.js (e1) 119 bytes (javascript) 8 KiB (runtime) >{786}< >{892}< [entry] [rendered] + runtime modules 8 KiB 11 modules cacheable modules 119 bytes ./e1.js 70 bytes [built] [code generated] entry ./e1 e1 @@ -1220,8 +1220,8 @@ chunk (runtime: e1, e2) c.js (c) 49 bytes <{128}> <{621}> >{786}< [rendered] ./module-c.js 49 bytes [built] [code generated] import() ./module-c ./e2.js 2:0-47 import() ./module-c ./module-b.js 1:0-47 -chunk (runtime: e2) e2.js (e2) 119 bytes (javascript) 8.03 KiB (runtime) >{459}< >{892}< [entry] [rendered] - runtime modules 8.03 KiB 11 modules +chunk (runtime: e2) e2.js (e2) 119 bytes (javascript) 8 KiB (runtime) >{459}< >{892}< [entry] [rendered] + runtime modules 8 KiB 11 modules cacheable modules 119 bytes ./e2.js 70 bytes [built] [code generated] entry ./e2 e2 @@ -1260,8 +1260,8 @@ chunk (runtime: main) id-equals-name_js0.js 21 bytes [rendered] ./id-equals-name.js 21 bytes [built] [code generated] chunk (runtime: main) id-equals-name_js_3.js 21 bytes [rendered] ./id-equals-name.js?3 21 bytes [built] [code generated] -chunk (runtime: main) main.js (main) 639 bytes (javascript) 6.62 KiB (runtime) [entry] [rendered] - runtime modules 6.62 KiB 9 modules +chunk (runtime: main) main.js (main) 639 bytes (javascript) 6.59 KiB (runtime) [entry] [rendered] + runtime modules 6.59 KiB 9 modules ./index.js 639 bytes [built] [code generated] chunk (runtime: main) tree.js (tree) 137 bytes [rendered] dependent modules 98 bytes [dependent] 3 modules @@ -1290,7 +1290,7 @@ webpack x.x.x compiled with 2 warnings in X ms" `; exports[`StatsTestCases should print correct stats for immutable 1`] = ` -"asset 5d45ce8c58c0be47d4b1.js 13.4 KiB [emitted] [immutable] (name: main) +"asset d152df65a78b496079d0.js 13.4 KiB [emitted] [immutable] (name: main) asset 22c24a3b26d46118dc06.js 809 bytes [emitted] [immutable]" `; @@ -1299,7 +1299,7 @@ exports[`StatsTestCases should print correct stats for import-context-filter 1`] asset 398.js 482 bytes [emitted] asset 544.js 482 bytes [emitted] asset 718.js 482 bytes [emitted] -runtime modules 6.62 KiB 9 modules +runtime modules 6.58 KiB 9 modules built modules 724 bytes [built] modules by path ./templates/*.js 114 bytes ./templates/bar.js 38 bytes [optional] [built] [code generated] @@ -1313,7 +1313,7 @@ webpack x.x.x compiled successfully in X ms" exports[`StatsTestCases should print correct stats for import-weak 1`] = ` "asset entry.js 13.1 KiB [emitted] (name: entry) asset 836.js 138 bytes [emitted] -runtime modules 7.73 KiB 10 modules +runtime modules 7.7 KiB 10 modules orphan modules 37 bytes [orphan] 1 module cacheable modules 142 bytes ./entry.js 120 bytes [built] [code generated] @@ -1322,9 +1322,9 @@ webpack x.x.x compiled successfully in X ms" `; exports[`StatsTestCases should print correct stats for import-weak-parser-option 1`] = ` -"asset entry.js 13.1 KiB [emitted] (name: entry) +"asset entry.js 13 KiB [emitted] (name: entry) asset 836.js 138 bytes [emitted] -runtime modules 7.73 KiB 10 modules +runtime modules 7.7 KiB 10 modules orphan modules 37 bytes [orphan] 1 module cacheable modules 116 bytes ./entry.js 94 bytes [built] [code generated] @@ -1333,7 +1333,7 @@ webpack x.x.x compiled successfully in X ms" `; exports[`StatsTestCases should print correct stats for import-with-invalid-options-comments 1`] = ` -"runtime modules 8.66 KiB 12 modules +"runtime modules 8.62 KiB 12 modules cacheable modules 559 bytes ./index.js 50 bytes [built] [code generated] ./chunk.js 401 bytes [built] [code generated] [3 warnings] @@ -1409,8 +1409,8 @@ exports[`StatsTestCases should print correct stats for limit-chunk-count-plugin 2 chunks: asset bundle2.js 12.6 KiB [emitted] (name: main) asset 459.bundle2.js 664 bytes [emitted] (name: c) - chunk (runtime: main) bundle2.js (main) 101 bytes (javascript) 7.74 KiB (runtime) >{459}< [entry] [rendered] - runtime modules 7.74 KiB 10 modules + chunk (runtime: main) bundle2.js (main) 101 bytes (javascript) 7.71 KiB (runtime) >{459}< [entry] [rendered] + runtime modules 7.71 KiB 10 modules ./index.js 101 bytes [built] [code generated] chunk (runtime: main) 459.bundle2.js (c) 118 bytes <{179}> <{459}> >{459}< [rendered] dependent modules 44 bytes [dependent] @@ -1425,8 +1425,8 @@ exports[`StatsTestCases should print correct stats for limit-chunk-count-plugin asset bundle3.js 12.6 KiB [emitted] (name: main) asset 459.bundle3.js 528 bytes [emitted] (name: c) asset 524.bundle3.js 206 bytes [emitted] - chunk (runtime: main) bundle3.js (main) 101 bytes (javascript) 7.74 KiB (runtime) >{459}< [entry] [rendered] - runtime modules 7.74 KiB 10 modules + chunk (runtime: main) bundle3.js (main) 101 bytes (javascript) 7.71 KiB (runtime) >{459}< [entry] [rendered] + runtime modules 7.71 KiB 10 modules ./index.js 101 bytes [built] [code generated] chunk (runtime: main) 459.bundle3.js (c) 74 bytes <{179}> >{524}< [rendered] ./a.js 22 bytes [built] [code generated] @@ -1442,8 +1442,8 @@ exports[`StatsTestCases should print correct stats for limit-chunk-count-plugin asset 459.bundle4.js 392 bytes [emitted] (name: c) asset 394.bundle4.js 206 bytes [emitted] asset 524.bundle4.js 206 bytes [emitted] - chunk (runtime: main) bundle4.js (main) 101 bytes (javascript) 7.74 KiB (runtime) >{394}< >{459}< [entry] [rendered] - runtime modules 7.74 KiB 10 modules + chunk (runtime: main) bundle4.js (main) 101 bytes (javascript) 7.71 KiB (runtime) >{394}< >{459}< [entry] [rendered] + runtime modules 7.71 KiB 10 modules ./index.js 101 bytes [built] [code generated] chunk (runtime: main) 394.bundle4.js 44 bytes <{179}> [rendered] ./a.js 22 bytes [built] [code generated] @@ -1599,7 +1599,7 @@ webpack x.x.x compiled successfully in X ms" `; exports[`StatsTestCases should print correct stats for module-assets 1`] = ` -"assets by path *.js 11.8 KiB +"assets by path *.js 11.7 KiB asset main.js 10.5 KiB [emitted] (name: main) asset a.js 732 bytes [emitted] (name: a) asset b.js 549 bytes [emitted] (name: b) @@ -1612,13 +1612,13 @@ Chunk Group b 549 bytes (21 KiB) = b.js 549 bytes (2.png 21 KiB) chunk (runtime: main) b.js (b) 67 bytes [rendered] ./node_modules/a/2.png 49 bytes [dependent] [built] [code generated] [1 asset] ./node_modules/b/index.js 18 bytes [built] [code generated] -chunk (runtime: main) main.js (main) 82 bytes (javascript) 6.34 KiB (runtime) [entry] [rendered] - runtime modules 6.34 KiB 8 modules +chunk (runtime: main) main.js (main) 82 bytes (javascript) 6.3 KiB (runtime) [entry] [rendered] + runtime modules 6.3 KiB 8 modules ./index.js 82 bytes [built] [code generated] chunk (runtime: main) a.js (a) 134 bytes [rendered] ./node_modules/a/2.png 49 bytes [dependent] [built] [code generated] [1 asset] ./node_modules/a/index.js + 1 modules 85 bytes [built] [code generated] [1 asset] -runtime modules 6.34 KiB 8 modules +runtime modules 6.3 KiB 8 modules orphan modules 49 bytes [orphan] 1 module modules with assets 234 bytes modules by path ./node_modules/a/ 134 bytes @@ -1641,8 +1641,8 @@ asset 593.js 524 bytes [emitted] asset 716.js 524 bytes [emitted] chunk (runtime: e1) 114.js 61 bytes [rendered] ./async1.js 61 bytes [built] [code generated] -chunk (runtime: e3) e3.js (e3) 249 bytes (javascript) 6.62 KiB (runtime) [entry] [rendered] - runtime modules 6.62 KiB 9 modules +chunk (runtime: e3) e3.js (e3) 249 bytes (javascript) 6.58 KiB (runtime) [entry] [rendered] + runtime modules 6.58 KiB 9 modules cacheable modules 249 bytes ./b.js 20 bytes [dependent] [built] [code generated] ./e3.js + 2 modules 209 bytes [built] [code generated] @@ -1650,8 +1650,8 @@ chunk (runtime: e3) e3.js (e3) 249 bytes (javascript) 6.62 KiB (runtime) [entry] chunk (runtime: e1, e3) 172.js 81 bytes [rendered] ./async2.js 61 bytes [built] [code generated] ./f.js 20 bytes [dependent] [built] [code generated] -chunk (runtime: e1) e1.js (e1) 249 bytes (javascript) 6.62 KiB (runtime) [entry] [rendered] - runtime modules 6.62 KiB 9 modules +chunk (runtime: e1) e1.js (e1) 249 bytes (javascript) 6.58 KiB (runtime) [entry] [rendered] + runtime modules 6.58 KiB 9 modules cacheable modules 249 bytes ./b.js 20 bytes [dependent] [built] [code generated] ./d.js 20 bytes [dependent] [built] [code generated] @@ -1661,8 +1661,8 @@ chunk (runtime: e1, e2) 326.js 81 bytes [rendered] ./h.js 20 bytes [dependent] [built] [code generated] chunk (runtime: e3) 593.js 61 bytes [rendered] ./async3.js 61 bytes [built] [code generated] -chunk (runtime: e2) e2.js (e2) 249 bytes (javascript) 6.62 KiB (runtime) [entry] [rendered] - runtime modules 6.62 KiB 9 modules +chunk (runtime: e2) e2.js (e2) 249 bytes (javascript) 6.58 KiB (runtime) [entry] [rendered] + runtime modules 6.58 KiB 9 modules cacheable modules 249 bytes ./b.js 20 bytes [dependent] [built] [code generated] ./e2.js + 2 modules 209 bytes [built] [code generated] @@ -1676,20 +1676,20 @@ webpack x.x.x compiled successfully" `; exports[`StatsTestCases should print correct stats for module-deduplication-named 1`] = ` -"asset e1.js 12.1 KiB [emitted] (name: e1) -asset e2.js 12.1 KiB [emitted] (name: e2) -asset e3.js 12.1 KiB [emitted] (name: e3) +"asset e1.js 12 KiB [emitted] (name: e1) +asset e2.js 12 KiB [emitted] (name: e2) +asset e3.js 12 KiB [emitted] (name: e3) asset async1.js 962 bytes [emitted] (name: async1) asset async2.js 962 bytes [emitted] (name: async2) asset async3.js 962 bytes [emitted] (name: async3) -chunk (runtime: e3) e3.js (e3) 242 bytes (javascript) 6.66 KiB (runtime) [entry] [rendered] - runtime modules 6.66 KiB 9 modules +chunk (runtime: e3) e3.js (e3) 242 bytes (javascript) 6.63 KiB (runtime) [entry] [rendered] + runtime modules 6.63 KiB 9 modules cacheable modules 242 bytes ./b.js 20 bytes [dependent] [built] [code generated] ./e3.js + 2 modules 202 bytes [built] [code generated] ./h.js 20 bytes [dependent] [built] [code generated] -chunk (runtime: e1) e1.js (e1) 242 bytes (javascript) 6.66 KiB (runtime) [entry] [rendered] - runtime modules 6.66 KiB 9 modules +chunk (runtime: e1) e1.js (e1) 242 bytes (javascript) 6.63 KiB (runtime) [entry] [rendered] + runtime modules 6.63 KiB 9 modules cacheable modules 242 bytes ./b.js 20 bytes [dependent] [built] [code generated] ./d.js 20 bytes [dependent] [built] [code generated] @@ -1700,8 +1700,8 @@ chunk (runtime: e1, e2, e3) async1.js (async1) 135 bytes [rendered] chunk (runtime: e1, e2, e3) async3.js (async3) 135 bytes [rendered] ./async3.js 115 bytes [built] [code generated] ./h.js 20 bytes [dependent] [built] [code generated] -chunk (runtime: e2) e2.js (e2) 242 bytes (javascript) 6.66 KiB (runtime) [entry] [rendered] - runtime modules 6.66 KiB 9 modules +chunk (runtime: e2) e2.js (e2) 242 bytes (javascript) 6.63 KiB (runtime) [entry] [rendered] + runtime modules 6.63 KiB 9 modules cacheable modules 242 bytes ./b.js 20 bytes [dependent] [built] [code generated] ./e2.js + 2 modules 202 bytes [built] [code generated] @@ -1713,10 +1713,10 @@ webpack x.x.x compiled successfully" `; exports[`StatsTestCases should print correct stats for module-federation-custom-exposed-module-name 1`] = ` -"asset container_bundle.js 12 KiB [emitted] (name: container) +"asset container_bundle.js 11.9 KiB [emitted] (name: container) asset custom-entry_bundle.js 414 bytes [emitted] (name: custom-entry) asset main_bundle.js 84 bytes [emitted] (name: main) -runtime modules 6.63 KiB 9 modules +runtime modules 6.6 KiB 9 modules built modules 82 bytes [built] ./index.js 1 bytes [built] [code generated] container entry 42 bytes [built] [code generated] @@ -1821,9 +1821,9 @@ chunk (runtime: main) a-52.js 149 bytes [rendered] split chunk (cache group: def > ./a ./index.js 1:0-47 > ./b ./index.js 2:0-47 ./shared.js 149 bytes [built] [code generated] -chunk (runtime: main) a-main.js (main) 146 bytes (javascript) 6.96 KiB (runtime) [entry] [rendered] +chunk (runtime: main) a-main.js (main) 146 bytes (javascript) 6.92 KiB (runtime) [entry] [rendered] > ./ main - runtime modules 6.96 KiB 10 modules + runtime modules 6.92 KiB 10 modules ./index.js 146 bytes [built] [code generated] chunk (runtime: main) a-vendors.js (vendors) (id hint: vendors) 40 bytes [rendered] split chunk (cache group: vendors) (name: vendors) > ./c ./index.js 3:0-47 @@ -1848,9 +1848,9 @@ chunk (runtime: main) b-52.js 149 bytes [rendered] split chunk (cache group: def > ./a ./index.js 1:0-47 > ./b ./index.js 2:0-47 ./shared.js 149 bytes [built] [code generated] -chunk (runtime: main) b-main.js (main) 146 bytes (javascript) 6.96 KiB (runtime) [entry] [rendered] +chunk (runtime: main) b-main.js (main) 146 bytes (javascript) 6.92 KiB (runtime) [entry] [rendered] > ./ main - runtime modules 6.96 KiB 10 modules + runtime modules 6.92 KiB 10 modules ./index.js 146 bytes [built] [code generated] chunk (runtime: main) b-vendors.js (vendors) (id hint: vendors) 40 bytes [rendered] split chunk (cache group: vendors) (name: vendors) > ./c ./index.js 3:0-47 @@ -1885,7 +1885,7 @@ exports[`StatsTestCases should print correct stats for named-chunks-plugin-async "asset entry.js 12.5 KiB [emitted] (name: entry) asset modules_a_js.js 313 bytes [emitted] asset modules_b_js.js 149 bytes [emitted] -runtime modules 7.74 KiB 10 modules +runtime modules 7.7 KiB 10 modules cacheable modules 106 bytes ./entry.js 47 bytes [built] [code generated] ./modules/a.js 37 bytes [built] [code generated] @@ -1919,9 +1919,9 @@ chunk {90} (runtime: main) ab.js (ab) 2 bytes <{179}> >{753}< [rendered] > [10] ./index.js 1:0-6:8 ./modules/a.js [839] 1 bytes {90} {374} [built] [code generated] ./modules/b.js [836] 1 bytes {90} {374} [built] [code generated] -chunk {179} (runtime: main) main.js (main) 524 bytes (javascript) 6.15 KiB (runtime) >{90}< >{289}< >{374}< >{592}< [entry] [rendered] +chunk {179} (runtime: main) main.js (main) 524 bytes (javascript) 6.12 KiB (runtime) >{90}< >{289}< >{374}< >{592}< [entry] [rendered] > ./index main - runtime modules 6.15 KiB 7 modules + runtime modules 6.12 KiB 7 modules cacheable modules 524 bytes ./index.js [10] 523 bytes {179} [built] [code generated] ./modules/f.js [544] 1 bytes {179} [dependent] [built] [code generated] @@ -1953,9 +1953,9 @@ webpack x.x.x compiled successfully in X ms" `; exports[`StatsTestCases should print correct stats for output-module 1`] = ` -"asset main.mjs 9.57 KiB [emitted] [javascript module] (name: main) +"asset main.mjs 9.53 KiB [emitted] [javascript module] (name: main) asset 52.mjs 356 bytes [emitted] [javascript module] -runtime modules 5.8 KiB 7 modules +runtime modules 5.76 KiB 7 modules orphan modules 38 bytes [orphan] 1 module cacheable modules 263 bytes ./index.js + 1 modules 225 bytes [built] [code generated] @@ -2064,7 +2064,7 @@ asset 460.js 323 bytes [emitted] asset 524.js 206 bytes [emitted] asset 996.js 138 bytes [emitted] Entrypoint main 303 KiB = main.js -runtime modules 6.05 KiB 7 modules +runtime modules 6.01 KiB 7 modules cacheable modules 293 KiB ./index.js 52 bytes [built] [code generated] ./a.js 293 KiB [built] [code generated] @@ -2081,7 +2081,7 @@ asset 460.js 323 bytes [emitted] asset 524.js 206 bytes [emitted] asset 996.js 138 bytes [emitted] Entrypoint main [big] 303 KiB = main.js -runtime modules 6.05 KiB 7 modules +runtime modules 6.01 KiB 7 modules cacheable modules 293 KiB ./index.js 52 bytes [built] [code generated] ./a.js 293 KiB [built] [code generated] @@ -2140,7 +2140,7 @@ asset 460.js 323 bytes [emitted] asset 524.js 206 bytes [emitted] asset 996.js 138 bytes [emitted] Entrypoint main [big] 303 KiB = main.js -runtime modules 6.05 KiB 7 modules +runtime modules 6.01 KiB 7 modules cacheable modules 293 KiB ./index.js 52 bytes [built] [code generated] ./a.js 293 KiB [built] [code generated] @@ -2192,7 +2192,7 @@ asset normal.js 109 bytes {30} [emitted] (name: normal) Entrypoint main 16.9 KiB = main.js prefetch: prefetched2.js {379} (name: prefetched2), prefetched.js {505} (name: prefetched), prefetched3.js {220} (name: prefetched3) chunk {30} (runtime: main) normal.js (normal) 1 bytes <{179}> [rendered] -chunk {179} (runtime: main) main.js (main) 436 bytes (javascript) 9.99 KiB (runtime) >{30}< >{220}< >{379}< >{505}< (prefetch: {379} {505} {220}) [entry] [rendered] +chunk {179} (runtime: main) main.js (main) 436 bytes (javascript) 9.96 KiB (runtime) >{30}< >{220}< >{379}< >{505}< (prefetch: {379} {505} {220}) [entry] [rendered] chunk {220} (runtime: main) prefetched3.js (prefetched3) 1 bytes <{179}> [rendered] chunk {379} (runtime: main) prefetched2.js (prefetched2) 1 bytes <{179}> [rendered] chunk {505} (runtime: main) prefetched.js (prefetched) 228 bytes <{179}> >{641}< >{746}< (prefetch: {641} {746}) [rendered] @@ -2225,7 +2225,7 @@ asset preloaded3.js 108 bytes [emitted] (name: preloaded3) Entrypoint main 15.2 KiB = main.js preload: preloaded2.js (name: preloaded2), preloaded.js (name: preloaded), preloaded3.js (name: preloaded3) chunk (runtime: main) normal.js (normal) 1 bytes [rendered] -chunk (runtime: main) main.js (main) 424 bytes (javascript) 8.93 KiB (runtime) (preload: {363} {851} {355}) [entry] [rendered] +chunk (runtime: main) main.js (main) 424 bytes (javascript) 8.9 KiB (runtime) (preload: {363} {851} {355}) [entry] [rendered] chunk (runtime: main) preloaded3.js (preloaded3) 1 bytes [rendered] chunk (runtime: main) preloaded2.js (preloaded2) 1 bytes [rendered] chunk (runtime: main) inner2.js (inner2) 2 bytes [rendered] @@ -2248,7 +2248,7 @@ asset 460.js 323 bytes {460} [emitted] asset 524.js 206 bytes {524} [emitted] asset 996.js 138 bytes {996} [emitted] Entrypoint main 10.3 KiB = main.js -chunk {179} (runtime: main) main.js (main) 73 bytes (javascript) 6.05 KiB (runtime) >{460}< >{996}< [entry] [rendered] +chunk {179} (runtime: main) main.js (main) 73 bytes (javascript) 6.01 KiB (runtime) >{460}< >{996}< [entry] [rendered] > ./index main chunk {460} (runtime: main) 460.js 54 bytes <{179}> >{524}< [rendered] > ./c [10] ./index.js 3:0-16 @@ -2256,7 +2256,7 @@ chunk {524} (runtime: main) 524.js 44 bytes <{460}> [rendered] > [460] ./c.js 1:0-52 chunk {996} (runtime: main) 996.js 22 bytes <{179}> [rendered] > ./b [10] ./index.js 2:0-16 -runtime modules 6.05 KiB +runtime modules 6.01 KiB webpack/runtime/ensure chunk 326 bytes {179} [code generated] [no exports] [used exports unknown] @@ -2269,7 +2269,7 @@ runtime modules 6.05 KiB webpack/runtime/hasOwnProperty shorthand 88 bytes {179} [code generated] [no exports] [used exports unknown] - webpack/runtime/jsonp chunk loading 3 KiB {179} [code generated] + webpack/runtime/jsonp chunk loading 2.97 KiB {179} [code generated] [no exports] [used exports unknown] webpack/runtime/load script 1.36 KiB {179} [code generated] @@ -2346,7 +2346,7 @@ LOG from webpack.FileSystemInfo Directory info in cache: 0 timestamps 0 hashes 0 timestamp hash combinations Managed items info in cache: 0 items -1970-04-20 12:42:42: webpack x.x.x compiled successfully in X ms (b5dd2f2a91faf2c4143f)" +1970-04-20 12:42:42: webpack x.x.x compiled successfully in X ms (5ca1c1296db8ec0dffb3)" `; exports[`StatsTestCases should print correct stats for preset-errors-only 1`] = `""`; @@ -2425,7 +2425,7 @@ asset main.js 10.3 KiB [emitted] (name: main) asset 460.js 323 bytes [emitted] asset 524.js 206 bytes [emitted] asset 996.js 138 bytes [emitted] -runtime modules 6.05 KiB 7 modules +runtime modules 6.01 KiB 7 modules cacheable modules 193 bytes ./index.js 51 bytes [built] [code generated] ./a.js 22 bytes [built] [code generated] @@ -2448,7 +2448,7 @@ exports[`StatsTestCases should print correct stats for preset-normal-performance asset 460.js 323 bytes [emitted] asset 524.js 206 bytes [emitted] asset 996.js 138 bytes [emitted] -runtime modules 6.05 KiB 7 modules +runtime modules 6.01 KiB 7 modules cacheable modules 293 KiB ./index.js 52 bytes [built] [code generated] ./a.js 293 KiB [built] [code generated] @@ -2476,7 +2476,7 @@ exports[`StatsTestCases should print correct stats for preset-normal-performance asset 460.js 355 bytes [emitted] 1 related asset asset 524.js 238 bytes [emitted] 1 related asset asset 996.js 170 bytes [emitted] 1 related asset -runtime modules 6.05 KiB 7 modules +runtime modules 6.01 KiB 7 modules cacheable modules 293 KiB ./index.js 52 bytes [built] [code generated] ./a.js 293 KiB [built] [code generated] @@ -2524,9 +2524,9 @@ asset 460.js 323 bytes {460} [emitted] asset 524.js 206 bytes {524} [emitted] asset 996.js 138 bytes {996} [emitted] Entrypoint main 10.3 KiB = main.js -chunk {179} (runtime: main) main.js (main) 73 bytes (javascript) 6.05 KiB (runtime) >{460}< >{996}< [entry] [rendered] +chunk {179} (runtime: main) main.js (main) 73 bytes (javascript) 6.01 KiB (runtime) >{460}< >{996}< [entry] [rendered] > ./index main - runtime modules 6.05 KiB + runtime modules 6.01 KiB webpack/runtime/ensure chunk 326 bytes {179} [code generated] [no exports] [used exports unknown] @@ -2539,7 +2539,7 @@ chunk {179} (runtime: main) main.js (main) 73 bytes (javascript) 6.05 KiB (runti webpack/runtime/hasOwnProperty shorthand 88 bytes {179} [code generated] [no exports] [used exports unknown] - webpack/runtime/jsonp chunk loading 3 KiB {179} [code generated] + webpack/runtime/jsonp chunk loading 2.97 KiB {179} [code generated] [no exports] [used exports unknown] webpack/runtime/load script 1.36 KiB {179} [code generated] @@ -2722,7 +2722,7 @@ LOG from webpack.FileSystemInfo Directory info in cache: 0 timestamps 0 hashes 0 timestamp hash combinations Managed items info in cache: 0 items -1970-04-20 12:42:42: webpack x.x.x compiled successfully in X ms (b5dd2f2a91faf2c4143f)" +1970-04-20 12:42:42: webpack x.x.x compiled successfully in X ms (5ca1c1296db8ec0dffb3)" `; exports[`StatsTestCases should print correct stats for real-content-hash 1`] = ` @@ -2857,9 +2857,9 @@ relatedAssets: asset relatedAssets-main.js 14.5 KiB [emitted] (name: main) compressed relatedAssets-main.js.br 14.5 KiB [emitted] compressed relatedAssets-main.js.gz 14.5 KiB [emitted] - sourceMap relatedAssets-main.js.map 12.6 KiB [emitted] [dev] (auxiliary name: main) - compressed relatedAssets-main.js.map.br 12.6 KiB [emitted] - compressed relatedAssets-main.js.map.gz 12.6 KiB [emitted] + sourceMap relatedAssets-main.js.map 12.5 KiB [emitted] [dev] (auxiliary name: main) + compressed relatedAssets-main.js.map.br 12.5 KiB [emitted] + compressed relatedAssets-main.js.map.gz 12.5 KiB [emitted] asset relatedAssets-chunk_js.js 809 bytes [emitted] compressed relatedAssets-chunk_js.js.br 809 bytes [emitted] compressed relatedAssets-chunk_js.js.gz 809 bytes [emitted] @@ -2885,7 +2885,7 @@ exclude1: asset exclude1-main.js 14.5 KiB [emitted] (name: main) hidden assets 29 KiB 2 assets sourceMap exclude1-main.js.map 12.5 KiB [emitted] [dev] (auxiliary name: main) - hidden assets 25.1 KiB 2 assets + hidden assets 25 KiB 2 assets + 1 related asset + 1 related asset asset exclude1-chunk_js.js 804 bytes [emitted] @@ -3066,16 +3066,16 @@ webpack x.x.x compiled successfully" exports[`StatsTestCases should print correct stats for runtime-specific-used-exports 1`] = ` "production: - asset production-a.js 13.2 KiB [emitted] (name: a) - asset production-b.js 13.2 KiB [emitted] (name: b) + asset production-a.js 13.1 KiB [emitted] (name: a) + asset production-b.js 13.1 KiB [emitted] (name: b) asset production-dw_js-_a6170.js 1.15 KiB [emitted] asset production-dw_js-_a6171.js 1.15 KiB [emitted] asset production-dx_js.js 1.15 KiB [emitted] asset production-dy_js.js 1.13 KiB [emitted] asset production-dz_js.js 1.13 KiB [emitted] asset production-c.js 93 bytes [emitted] (name: c) - chunk (runtime: a) production-a.js (a) 605 bytes (javascript) 6.63 KiB (runtime) [entry] [rendered] - runtime modules 6.63 KiB 9 modules + chunk (runtime: a) production-a.js (a) 605 bytes (javascript) 6.59 KiB (runtime) [entry] [rendered] + runtime modules 6.59 KiB 9 modules cacheable modules 605 bytes ./a.js 261 bytes [built] [code generated] [no exports used] @@ -3087,8 +3087,8 @@ exports[`StatsTestCases should print correct stats for runtime-specific-used-exp [only some exports used: x] ./reexport.js 37 bytes [dependent] [built] [code generated] [only some exports used: x] - chunk (runtime: b) production-b.js (b) 605 bytes (javascript) 6.63 KiB (runtime) [entry] [rendered] - runtime modules 6.63 KiB 9 modules + chunk (runtime: b) production-b.js (b) 605 bytes (javascript) 6.59 KiB (runtime) [entry] [rendered] + runtime modules 6.59 KiB 9 modules cacheable modules 605 bytes ./b.js 261 bytes [built] [code generated] [no exports used] @@ -3123,7 +3123,7 @@ exports[`StatsTestCases should print correct stats for runtime-specific-used-exp ./dz.js 46 bytes [built] [code generated] ./module.js?chunk 122 bytes [dependent] [built] [code generated] [only some exports used: identity, w, x, z] - runtime modules 13.3 KiB 18 modules + runtime modules 13.2 KiB 18 modules cacheable modules 1.15 KiB ./a.js 261 bytes [built] [code generated] [no exports used] @@ -3148,15 +3148,15 @@ exports[`StatsTestCases should print correct stats for runtime-specific-used-exp production (webpack x.x.x) compiled successfully in X ms development: - asset development-a.js 15.9 KiB [emitted] (name: a) - asset development-b.js 15.9 KiB [emitted] (name: b) + asset development-a.js 15.8 KiB [emitted] (name: a) + asset development-b.js 15.8 KiB [emitted] (name: b) asset development-dw_js.js 2.09 KiB [emitted] asset development-dx_js.js 2.09 KiB [emitted] asset development-dy_js.js 2.09 KiB [emitted] asset development-dz_js.js 2.09 KiB [emitted] asset development-c.js 1.13 KiB [emitted] (name: c) - chunk (runtime: a) development-a.js (a) 605 bytes (javascript) 6.63 KiB (runtime) [entry] [rendered] - runtime modules 6.63 KiB 9 modules + chunk (runtime: a) development-a.js (a) 605 bytes (javascript) 6.59 KiB (runtime) [entry] [rendered] + runtime modules 6.59 KiB 9 modules cacheable modules 605 bytes ./a.js 261 bytes [built] [code generated] [used exports unknown] @@ -3168,8 +3168,8 @@ development: [used exports unknown] ./reexport.js 37 bytes [dependent] [built] [code generated] [used exports unknown] - chunk (runtime: b) development-b.js (b) 605 bytes (javascript) 6.63 KiB (runtime) [entry] [rendered] - runtime modules 6.63 KiB 9 modules + chunk (runtime: b) development-b.js (b) 605 bytes (javascript) 6.59 KiB (runtime) [entry] [rendered] + runtime modules 6.59 KiB 9 modules cacheable modules 605 bytes ./b.js 261 bytes [built] [code generated] [used exports unknown] @@ -3204,7 +3204,7 @@ development: [used exports unknown] ./module.js?chunk 122 bytes [dependent] [built] [code generated] [used exports unknown] - runtime modules 13.3 KiB 18 modules + runtime modules 13.2 KiB 18 modules cacheable modules 1.15 KiB ./a.js 261 bytes [built] [code generated] [used exports unknown] @@ -3233,15 +3233,15 @@ development: development (webpack x.x.x) compiled successfully in X ms global: - asset global-a.js 13.4 KiB [emitted] (name: a) - asset global-b.js 13.4 KiB [emitted] (name: b) + asset global-a.js 13.3 KiB [emitted] (name: a) + asset global-b.js 13.3 KiB [emitted] (name: b) asset global-dw_js.js 1.15 KiB [emitted] asset global-dx_js.js 1.15 KiB [emitted] asset global-dy_js.js 1.15 KiB [emitted] asset global-dz_js.js 1.15 KiB [emitted] asset global-c.js 93 bytes [emitted] (name: c) - chunk (runtime: a) global-a.js (a) 605 bytes (javascript) 6.62 KiB (runtime) [entry] [rendered] - runtime modules 6.62 KiB 9 modules + chunk (runtime: a) global-a.js (a) 605 bytes (javascript) 6.59 KiB (runtime) [entry] [rendered] + runtime modules 6.59 KiB 9 modules cacheable modules 605 bytes ./a.js 261 bytes [built] [code generated] [no exports used] @@ -3253,8 +3253,8 @@ global: [only some exports used: x, y] ./reexport.js 37 bytes [dependent] [built] [code generated] [only some exports used: x, y] - chunk (runtime: b) global-b.js (b) 605 bytes (javascript) 6.62 KiB (runtime) [entry] [rendered] - runtime modules 6.62 KiB 9 modules + chunk (runtime: b) global-b.js (b) 605 bytes (javascript) 6.59 KiB (runtime) [entry] [rendered] + runtime modules 6.59 KiB 9 modules cacheable modules 605 bytes ./b.js 261 bytes [built] [code generated] [no exports used] @@ -3311,7 +3311,7 @@ global: `; exports[`StatsTestCases should print correct stats for scope-hoisting-bailouts 1`] = ` -"runtime modules 6.88 KiB 10 modules +"runtime modules 6.84 KiB 10 modules built modules 615 bytes [built] code generated modules 530 bytes [code generated] ./index.js 150 bytes [built] [code generated] @@ -3348,7 +3348,7 @@ webpack x.x.x compiled successfully in X ms" exports[`StatsTestCases should print correct stats for scope-hoisting-multi 1`] = ` "Entrypoint first 14.4 KiB = a-vendor.js 417 bytes a-first.js 14 KiB -Entrypoint second 14 KiB = a-vendor.js 417 bytes a-second.js 13.5 KiB +Entrypoint second 13.9 KiB = a-vendor.js 417 bytes a-second.js 13.5 KiB runtime modules 15.2 KiB 20 modules orphan modules 37 bytes [orphan] 1 module cacheable modules 807 bytes @@ -3365,7 +3365,7 @@ cacheable modules 807 bytes webpack x.x.x compiled successfully in X ms Entrypoint first 13.7 KiB = b-vendor.js 417 bytes b-first.js 13.3 KiB -Entrypoint second 13.6 KiB = b-vendor.js 417 bytes b-second.js 13.2 KiB +Entrypoint second 13.5 KiB = b-vendor.js 417 bytes b-second.js 13.1 KiB runtime modules 15.2 KiB 20 modules cacheable modules 975 bytes code generated modules 857 bytes [code generated] @@ -3391,9 +3391,9 @@ webpack x.x.x compiled successfully in X ms" `; exports[`StatsTestCases should print correct stats for side-effects-issue-7428 1`] = ` -"asset main.js 12.4 KiB [emitted] (name: main) +"asset main.js 12.3 KiB [emitted] (name: main) asset 1.js 643 bytes [emitted] -runtime modules 6.62 KiB 9 modules +runtime modules 6.58 KiB 9 modules cacheable modules 823 bytes modules by path ./components/src/ 501 bytes orphan modules 315 bytes [orphan] @@ -3580,9 +3580,9 @@ exports[`StatsTestCases should print correct stats for split-chunks 1`] = ` chunk (runtime: a, main) default/async-g.js (async-g) 45 bytes <{282}> <{767}> <{786}> <{794}> <{954}> ={568}= [rendered] > ./g ./a.js 6:0-47 ./g.js 45 bytes [built] [code generated] - chunk (runtime: main) default/main.js (main) 147 bytes (javascript) 6.71 KiB (runtime) >{282}< >{334}< >{383}< >{568}< >{767}< >{769}< >{794}< >{954}< [entry] [rendered] + chunk (runtime: main) default/main.js (main) 147 bytes (javascript) 6.68 KiB (runtime) >{282}< >{334}< >{383}< >{568}< >{767}< >{769}< >{794}< >{954}< [entry] [rendered] > ./ main - runtime modules 6.71 KiB 9 modules + runtime modules 6.68 KiB 9 modules ./index.js 147 bytes [built] [code generated] chunk (runtime: main) default/282.js (id hint: vendors) 20 bytes <{179}> ={334}= ={383}= ={568}= ={767}= ={769}= ={794}= ={954}= >{137}< >{568}< [rendered] split chunk (cache group: defaultVendors) > ./a ./index.js 1:0-47 @@ -3613,9 +3613,9 @@ exports[`StatsTestCases should print correct stats for split-chunks 1`] = ` chunk (runtime: main) default/769.js (id hint: vendors) 20 bytes <{179}> ={282}= ={383}= ={568}= ={767}= [rendered] split chunk (cache group: defaultVendors) > ./c ./index.js 3:0-47 ./node_modules/z.js 20 bytes [built] [code generated] - chunk (runtime: a) default/a.js (a) 245 bytes (javascript) 6.7 KiB (runtime) >{137}< >{568}< [entry] [rendered] + chunk (runtime: a) default/a.js (a) 245 bytes (javascript) 6.67 KiB (runtime) >{137}< >{568}< [entry] [rendered] > ./a a - runtime modules 6.7 KiB 9 modules + runtime modules 6.67 KiB 9 modules dependent modules 60 bytes [dependent] 3 modules ./a.js + 1 modules 185 bytes [built] [code generated] chunk (runtime: main) default/async-a.js (async-a) 185 bytes <{179}> ={282}= ={767}= ={954}= >{137}< >{568}< [rendered] @@ -3628,8 +3628,8 @@ exports[`StatsTestCases should print correct stats for split-chunks 1`] = ` default (webpack x.x.x) compiled successfully all-chunks: - Entrypoint main 11.6 KiB = all-chunks/main.js - Entrypoint a 15.1 KiB = all-chunks/282.js 412 bytes all-chunks/954.js 412 bytes all-chunks/767.js 412 bytes all-chunks/390.js 412 bytes all-chunks/a.js 13.4 KiB + Entrypoint main 11.5 KiB = all-chunks/main.js + Entrypoint a 15 KiB = all-chunks/282.js 412 bytes all-chunks/954.js 412 bytes all-chunks/767.js 412 bytes all-chunks/390.js 412 bytes all-chunks/a.js 13.4 KiB Entrypoint b 8.13 KiB = all-chunks/282.js 412 bytes all-chunks/954.js 412 bytes all-chunks/767.js 412 bytes all-chunks/568.js 412 bytes all-chunks/b.js 6.52 KiB Entrypoint c 8.13 KiB = all-chunks/282.js 412 bytes all-chunks/769.js 412 bytes all-chunks/767.js 412 bytes all-chunks/568.js 412 bytes all-chunks/c.js 6.52 KiB chunk (runtime: b) all-chunks/b.js (b) 116 bytes (javascript) 2.76 KiB (runtime) ={282}= ={568}= ={767}= ={954}= [entry] [rendered] @@ -3639,9 +3639,9 @@ all-chunks: chunk (runtime: a, main) all-chunks/async-g.js (async-g) 45 bytes <{282}> <{390}> <{767}> <{786}> <{794}> <{954}> ={568}= [rendered] > ./g ./a.js 6:0-47 ./g.js 45 bytes [built] [code generated] - chunk (runtime: main) all-chunks/main.js (main) 147 bytes (javascript) 6.71 KiB (runtime) >{282}< >{334}< >{383}< >{390}< >{568}< >{767}< >{769}< >{794}< >{954}< [entry] [rendered] + chunk (runtime: main) all-chunks/main.js (main) 147 bytes (javascript) 6.68 KiB (runtime) >{282}< >{334}< >{383}< >{390}< >{568}< >{767}< >{769}< >{794}< >{954}< [entry] [rendered] > ./ main - runtime modules 6.71 KiB 9 modules + runtime modules 6.68 KiB 9 modules ./index.js 147 bytes [built] [code generated] chunk (runtime: a, b, c, main) all-chunks/282.js (id hint: vendors) 20 bytes <{179}> ={128}= ={334}= ={383}= ={390}= ={459}= ={568}= ={767}= ={769}= ={786}= ={794}= ={954}= >{137}< >{568}< [initial] [rendered] split chunk (cache group: defaultVendors) > ./a ./index.js 1:0-47 @@ -3684,9 +3684,9 @@ all-chunks: > ./c ./index.js 3:0-47 > ./c c ./node_modules/z.js 20 bytes [built] [code generated] - chunk (runtime: a) all-chunks/a.js (a) 165 bytes (javascript) 7.63 KiB (runtime) ={282}= ={390}= ={767}= ={954}= >{137}< >{568}< [entry] [rendered] + chunk (runtime: a) all-chunks/a.js (a) 165 bytes (javascript) 7.59 KiB (runtime) ={282}= ={390}= ={767}= ={954}= >{137}< >{568}< [entry] [rendered] > ./a a - runtime modules 7.63 KiB 10 modules + runtime modules 7.59 KiB 10 modules ./a.js 165 bytes [built] [code generated] chunk (runtime: main) all-chunks/async-a.js (async-a) 165 bytes <{179}> ={282}= ={390}= ={767}= ={954}= >{137}< >{568}< [rendered] > ./a ./index.js 1:0-47 @@ -3701,7 +3701,7 @@ all-chunks: manual: Entrypoint main 11.3 KiB = manual/main.js - Entrypoint a 14.8 KiB = manual/vendors.js 1.04 KiB manual/a.js 13.8 KiB + Entrypoint a 14.8 KiB = manual/vendors.js 1.04 KiB manual/a.js 13.7 KiB Entrypoint b 8.44 KiB = manual/vendors.js 1.04 KiB manual/b.js 7.39 KiB Entrypoint c 8.44 KiB = manual/vendors.js 1.04 KiB manual/c.js 7.39 KiB chunk (runtime: b) manual/b.js (b) 156 bytes (javascript) 2.76 KiB (runtime) ={216}= [entry] [rendered] @@ -3716,9 +3716,9 @@ manual: > ./g ./a.js 6:0-47 dependent modules 20 bytes [dependent] 1 module ./g.js 45 bytes [built] [code generated] - chunk (runtime: main) manual/main.js (main) 147 bytes (javascript) 6.71 KiB (runtime) >{216}< >{334}< >{383}< >{794}< [entry] [rendered] + chunk (runtime: main) manual/main.js (main) 147 bytes (javascript) 6.68 KiB (runtime) >{216}< >{334}< >{383}< >{794}< [entry] [rendered] > ./ main - runtime modules 6.71 KiB 9 modules + runtime modules 6.68 KiB 9 modules ./index.js 147 bytes [built] [code generated] chunk (runtime: a, b, c, main) manual/vendors.js (vendors) (id hint: vendors) 60 bytes <{179}> ={128}= ={334}= ={383}= ={459}= ={786}= ={794}= >{137}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors) > ./a ./index.js 1:0-47 @@ -3755,12 +3755,12 @@ manual: runtime modules 2.76 KiB 4 modules dependent modules 40 bytes [dependent] 2 modules ./c.js 116 bytes [built] [code generated] - chunk (runtime: a) manual/a.js (a) 205 bytes (javascript) 7.59 KiB (runtime) ={216}= >{137}< [entry] [rendered] + chunk (runtime: a) manual/a.js (a) 205 bytes (javascript) 7.56 KiB (runtime) ={216}= >{137}< [entry] [rendered] > ./a a > x a > y a > z a - runtime modules 7.59 KiB 10 modules + runtime modules 7.56 KiB 10 modules dependent modules 20 bytes [dependent] 1 module ./a.js + 1 modules 185 bytes [built] [code generated] chunk (runtime: main) manual/async-a.js (async-a) 205 bytes <{179}> ={216}= >{137}< [rendered] @@ -3770,16 +3770,16 @@ manual: manual (webpack x.x.x) compiled successfully name-too-long: - Entrypoint main 11.6 KiB = name-too-long/main.js - Entrypoint aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 15.1 KiB = name-too-long/282.js 412 bytes name-too-long/954.js 412 bytes name-too-long/767.js 412 bytes name-too-long/390.js 412 bytes name-too-long/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.js 13.4 KiB + Entrypoint main 11.5 KiB = name-too-long/main.js + Entrypoint aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 15 KiB = name-too-long/282.js 412 bytes name-too-long/954.js 412 bytes name-too-long/767.js 412 bytes name-too-long/390.js 412 bytes name-too-long/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.js 13.4 KiB Entrypoint bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 8.13 KiB = name-too-long/282.js 412 bytes name-too-long/954.js 412 bytes name-too-long/767.js 412 bytes name-too-long/568.js 412 bytes name-too-long/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js 6.52 KiB Entrypoint cccccccccccccccccccccccccccccc 8.13 KiB = name-too-long/282.js 412 bytes name-too-long/769.js 412 bytes name-too-long/767.js 412 bytes name-too-long/568.js 412 bytes name-too-long/cccccccccccccccccccccccccccccc.js 6.52 KiB chunk (runtime: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, main) name-too-long/async-g.js (async-g) 45 bytes <{282}> <{390}> <{751}> <{767}> <{794}> <{954}> ={568}= [rendered] > ./g ./a.js 6:0-47 ./g.js 45 bytes [built] [code generated] - chunk (runtime: main) name-too-long/main.js (main) 147 bytes (javascript) 6.72 KiB (runtime) >{282}< >{334}< >{383}< >{390}< >{568}< >{767}< >{769}< >{794}< >{954}< [entry] [rendered] + chunk (runtime: main) name-too-long/main.js (main) 147 bytes (javascript) 6.68 KiB (runtime) >{282}< >{334}< >{383}< >{390}< >{568}< >{767}< >{769}< >{794}< >{954}< [entry] [rendered] > ./ main - runtime modules 6.72 KiB 9 modules + runtime modules 6.68 KiB 9 modules ./index.js 147 bytes [built] [code generated] chunk (runtime: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb, cccccccccccccccccccccccccccccc, main) name-too-long/282.js (id hint: vendors) 20 bytes <{179}> ={334}= ={383}= ={390}= ={568}= ={658}= ={751}= ={766}= ={767}= ={769}= ={794}= ={954}= >{137}< >{568}< [initial] [rendered] split chunk (cache group: defaultVendors) > ./a ./index.js 1:0-47 @@ -3810,9 +3810,9 @@ name-too-long: > ./c cccccccccccccccccccccccccccccc runtime modules 2.76 KiB 4 modules ./c.js 116 bytes [built] [code generated] - chunk (runtime: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) name-too-long/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.js (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) 165 bytes (javascript) 7.63 KiB (runtime) ={282}= ={390}= ={767}= ={954}= >{137}< >{568}< [entry] [rendered] + chunk (runtime: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) name-too-long/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.js (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) 165 bytes (javascript) 7.6 KiB (runtime) ={282}= ={390}= ={767}= ={954}= >{137}< >{568}< [entry] [rendered] > ./a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - runtime modules 7.63 KiB 10 modules + runtime modules 7.6 KiB 10 modules ./a.js 165 bytes [built] [code generated] chunk (runtime: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) name-too-long/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js (bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) 116 bytes (javascript) 2.76 KiB (runtime) ={282}= ={568}= ={767}= ={954}= [entry] [rendered] > ./b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb @@ -3853,9 +3853,9 @@ custom-chunks-filter: chunk (runtime: a, main) custom-chunks-filter/async-g.js (async-g) 45 bytes <{282}> <{767}> <{786}> <{794}> <{954}> ={568}= [rendered] > ./g ./a.js 6:0-47 ./g.js 45 bytes [built] [code generated] - chunk (runtime: main) custom-chunks-filter/main.js (main) 147 bytes (javascript) 6.72 KiB (runtime) >{282}< >{334}< >{383}< >{568}< >{767}< >{769}< >{794}< >{954}< [entry] [rendered] + chunk (runtime: main) custom-chunks-filter/main.js (main) 147 bytes (javascript) 6.69 KiB (runtime) >{282}< >{334}< >{383}< >{568}< >{767}< >{769}< >{794}< >{954}< [entry] [rendered] > ./ main - runtime modules 6.72 KiB 9 modules + runtime modules 6.69 KiB 9 modules ./index.js 147 bytes [built] [code generated] chunk (runtime: b, c, main) custom-chunks-filter/282.js (id hint: vendors) 20 bytes <{179}> ={128}= ={334}= ={383}= ={459}= ={568}= ={767}= ={769}= ={794}= ={954}= >{137}< >{568}< [initial] [rendered] split chunk (cache group: defaultVendors) > ./a ./index.js 1:0-47 @@ -3892,9 +3892,9 @@ custom-chunks-filter: > ./c ./index.js 3:0-47 > ./c c ./node_modules/z.js 20 bytes [built] [code generated] - chunk (runtime: a) custom-chunks-filter/a.js (a) 245 bytes (javascript) 6.71 KiB (runtime) >{137}< >{568}< [entry] [rendered] + chunk (runtime: a) custom-chunks-filter/a.js (a) 245 bytes (javascript) 6.68 KiB (runtime) >{137}< >{568}< [entry] [rendered] > ./a a - runtime modules 6.71 KiB 9 modules + runtime modules 6.68 KiB 9 modules dependent modules 60 bytes [dependent] 3 modules ./a.js + 1 modules 185 bytes [built] [code generated] chunk (runtime: main) custom-chunks-filter/async-a.js (async-a) 185 bytes <{179}> ={282}= ={767}= ={954}= >{137}< >{568}< [rendered] @@ -3909,7 +3909,7 @@ custom-chunks-filter: custom-chunks-filter-in-cache-groups: Entrypoint main 11.3 KiB = custom-chunks-filter-in-cache-groups/main.js - Entrypoint a 14.6 KiB = custom-chunks-filter-in-cache-groups/176.js 860 bytes custom-chunks-filter-in-cache-groups/a.js 13.8 KiB + Entrypoint a 14.6 KiB = custom-chunks-filter-in-cache-groups/176.js 860 bytes custom-chunks-filter-in-cache-groups/a.js 13.7 KiB Entrypoint b 8.44 KiB = custom-chunks-filter-in-cache-groups/vendors.js 1.05 KiB custom-chunks-filter-in-cache-groups/b.js 7.39 KiB Entrypoint c 8.44 KiB = custom-chunks-filter-in-cache-groups/vendors.js 1.05 KiB custom-chunks-filter-in-cache-groups/c.js 7.39 KiB chunk (runtime: b) custom-chunks-filter-in-cache-groups/b.js (b) 156 bytes (javascript) 2.76 KiB (runtime) ={216}= [entry] [rendered] @@ -3932,9 +3932,9 @@ custom-chunks-filter-in-cache-groups: ./node_modules/x.js 20 bytes [built] [code generated] ./node_modules/y.js 20 bytes [built] [code generated] ./node_modules/z.js 20 bytes [built] [code generated] - chunk (runtime: main) custom-chunks-filter-in-cache-groups/main.js (main) 147 bytes (javascript) 6.74 KiB (runtime) >{216}< >{334}< >{383}< >{794}< [entry] [rendered] + chunk (runtime: main) custom-chunks-filter-in-cache-groups/main.js (main) 147 bytes (javascript) 6.71 KiB (runtime) >{216}< >{334}< >{383}< >{794}< [entry] [rendered] > ./ main - runtime modules 6.74 KiB 9 modules + runtime modules 6.71 KiB 9 modules ./index.js 147 bytes [built] [code generated] chunk (runtime: b, c, main) custom-chunks-filter-in-cache-groups/vendors.js (vendors) (id hint: vendors) 60 bytes <{179}> ={128}= ={334}= ={383}= ={459}= ={794}= >{137}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors) > ./a ./index.js 1:0-47 @@ -3967,12 +3967,12 @@ custom-chunks-filter-in-cache-groups: runtime modules 2.76 KiB 4 modules dependent modules 40 bytes [dependent] 2 modules ./c.js 116 bytes [built] [code generated] - chunk (runtime: a) custom-chunks-filter-in-cache-groups/a.js (a) 205 bytes (javascript) 7.62 KiB (runtime) ={176}= >{137}< [entry] [rendered] + chunk (runtime: a) custom-chunks-filter-in-cache-groups/a.js (a) 205 bytes (javascript) 7.59 KiB (runtime) ={176}= >{137}< [entry] [rendered] > ./a a > x a > y a > z a - runtime modules 7.62 KiB 10 modules + runtime modules 7.59 KiB 10 modules dependent modules 20 bytes [dependent] 1 module ./a.js + 1 modules 185 bytes [built] [code generated] chunk (runtime: main) custom-chunks-filter-in-cache-groups/async-a.js (async-a) 205 bytes <{179}> ={216}= >{137}< [rendered] @@ -4014,18 +4014,18 @@ chunk (runtime: main) common-node_modules_y_js.js (id hint: common) 20 bytes <{m chunk (runtime: main) common-node_modules_z_js.js (id hint: common) 20 bytes <{main}> ={async-c}= ={common-d_js}= ={common-f_js}= ={common-node_modules_x_js}= [rendered] split chunk (cache group: b) > ./c ./index.js 3:0-47 ./node_modules/z.js 20 bytes [built] [code generated] -chunk (runtime: main) main.js (main) 147 bytes (javascript) 6.62 KiB (runtime) >{async-a}< >{async-b}< >{async-c}< >{common-d_js}< >{common-f_js}< >{common-node_modules_x_js}< >{common-node_modules_y_js}< >{common-node_modules_z_js}< [entry] [rendered] +chunk (runtime: main) main.js (main) 147 bytes (javascript) 6.59 KiB (runtime) >{async-a}< >{async-b}< >{async-c}< >{common-d_js}< >{common-f_js}< >{common-node_modules_x_js}< >{common-node_modules_y_js}< >{common-node_modules_z_js}< [entry] [rendered] > ./ main - runtime modules 6.62 KiB 9 modules + runtime modules 6.59 KiB 9 modules ./index.js 147 bytes [built] [code generated] production (webpack x.x.x) compiled successfully" `; exports[`StatsTestCases should print correct stats for split-chunks-chunk-name 1`] = ` -"Entrypoint main 11.3 KiB = default/main.js -chunk (runtime: main) default/main.js (main) 192 bytes (javascript) 6.68 KiB (runtime) >{334}< >{709}< >{794}< [entry] [rendered] +"Entrypoint main 11.2 KiB = default/main.js +chunk (runtime: main) default/main.js (main) 192 bytes (javascript) 6.65 KiB (runtime) >{334}< >{709}< >{794}< [entry] [rendered] > ./ main - runtime modules 6.68 KiB 9 modules + runtime modules 6.65 KiB 9 modules ./index.js 192 bytes [built] [code generated] chunk (runtime: main) default/async-b.js (async-b) (id hint: vendors) 122 bytes <{179}> [rendered] reused as split chunk (cache group: defaultVendors) > b ./index.js 2:0-45 @@ -4050,9 +4050,9 @@ chunk (runtime: main) async-g.js (async-g) 132 bytes <{179}> [rendered] > ./g ./index.js 7:0-47 dependent modules 87 bytes [dependent] 1 module ./g.js 45 bytes [built] [code generated] -chunk (runtime: main) main.js (main) 343 bytes (javascript) 6.74 KiB (runtime) >{31}< >{137}< >{206}< >{334}< >{383}< >{449}< >{794}< >{804}< [entry] [rendered] +chunk (runtime: main) main.js (main) 343 bytes (javascript) 6.71 KiB (runtime) >{31}< >{137}< >{206}< >{334}< >{383}< >{449}< >{794}< >{804}< [entry] [rendered] > ./ main - runtime modules 6.74 KiB 9 modules + runtime modules 6.71 KiB 9 modules ./index.js 343 bytes [built] [code generated] chunk (runtime: main) async-f.js (async-f) 132 bytes <{179}> [rendered] > ./f ./index.js 6:0-47 @@ -4081,10 +4081,10 @@ webpack x.x.x compiled successfully" `; exports[`StatsTestCases should print correct stats for split-chunks-issue-6413 1`] = ` -"Entrypoint main 11.4 KiB = main.js -chunk (runtime: main) main.js (main) 147 bytes (javascript) 6.68 KiB (runtime) >{282}< >{334}< >{383}< >{543}< >{794}< [entry] [rendered] +"Entrypoint main 11.3 KiB = main.js +chunk (runtime: main) main.js (main) 147 bytes (javascript) 6.65 KiB (runtime) >{282}< >{334}< >{383}< >{543}< >{794}< [entry] [rendered] > ./ main - runtime modules 6.68 KiB 9 modules + runtime modules 6.65 KiB 9 modules ./index.js 147 bytes [built] [code generated] chunk (runtime: main) 282.js (id hint: vendors) 20 bytes <{179}> ={334}= ={383}= ={543}= ={794}= [rendered] split chunk (cache group: defaultVendors) > ./a ./index.js 1:0-47 @@ -4110,9 +4110,9 @@ default (webpack x.x.x) compiled successfully" exports[`StatsTestCases should print correct stats for split-chunks-issue-6696 1`] = ` "Entrypoint main 13.4 KiB = vendors.js 412 bytes main.js 13 KiB -chunk (runtime: main) main.js (main) 134 bytes (javascript) 7.6 KiB (runtime) ={216}= >{334}< >{794}< [entry] [rendered] +chunk (runtime: main) main.js (main) 134 bytes (javascript) 7.57 KiB (runtime) ={216}= >{334}< >{794}< [entry] [rendered] > ./ main - runtime modules 7.6 KiB 10 modules + runtime modules 7.57 KiB 10 modules ./index.js 134 bytes [built] [code generated] chunk (runtime: main) vendors.js (vendors) (id hint: vendors) 20 bytes ={179}= >{334}< >{794}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors) > ./ main @@ -4132,9 +4132,9 @@ exports[`StatsTestCases should print correct stats for split-chunks-issue-7401 1 "Entrypoint a 6.42 KiB = 282.js 412 bytes a.js 6.02 KiB Entrypoint b 10.9 KiB = b.js Chunk Group c 795 bytes = 282.js 412 bytes c.js 383 bytes -chunk (runtime: b) b.js (b) 43 bytes (javascript) 6.64 KiB (runtime) >{282}< >{459}< [entry] [rendered] +chunk (runtime: b) b.js (b) 43 bytes (javascript) 6.61 KiB (runtime) >{282}< >{459}< [entry] [rendered] > ./b b - runtime modules 6.64 KiB 9 modules + runtime modules 6.61 KiB 9 modules ./b.js 43 bytes [built] [code generated] chunk (runtime: a, b) 282.js (id hint: vendors) 20 bytes <{128}> ={459}= ={786}= [initial] [rendered] split chunk (cache group: defaultVendors) > ./c ./b.js 1:0-41 @@ -4155,9 +4155,9 @@ exports[`StatsTestCases should print correct stats for split-chunks-keep-remaini chunk (runtime: main) default/async-d.js (async-d) 84 bytes <{179}> ={782}= [rendered] > ./d ./index.js 4:0-47 ./d.js 84 bytes [built] [code generated] -chunk (runtime: main) default/main.js (main) 196 bytes (javascript) 6.71 KiB (runtime) >{31}< >{334}< >{383}< >{782}< >{794}< >{821}< [entry] [rendered] +chunk (runtime: main) default/main.js (main) 196 bytes (javascript) 6.68 KiB (runtime) >{31}< >{334}< >{383}< >{782}< >{794}< >{821}< [entry] [rendered] > ./ main - runtime modules 6.71 KiB 9 modules + runtime modules 6.68 KiB 9 modules ./index.js 196 bytes [built] [code generated] chunk (runtime: main) default/async-b.js (async-b) 50 bytes <{179}> ={821}= [rendered] > ./b ./index.js 2:0-47 @@ -4472,10 +4472,10 @@ zero-min: zero-min (webpack x.x.x) compiled successfully max-async-size: - Entrypoint main 16 KiB = max-async-size-main.js - chunk (runtime: main) max-async-size-main.js (main) 2.46 KiB (javascript) 6.99 KiB (runtime) >{342}< >{385}< >{820}< >{920}< [entry] [rendered] + Entrypoint main 15.9 KiB = max-async-size-main.js + chunk (runtime: main) max-async-size-main.js (main) 2.46 KiB (javascript) 6.96 KiB (runtime) >{342}< >{385}< >{820}< >{920}< [entry] [rendered] > ./async main - runtime modules 6.99 KiB 10 modules + runtime modules 6.96 KiB 10 modules dependent modules 2.09 KiB [dependent] 6 modules ./async/index.js 386 bytes [built] [code generated] chunk (runtime: main) max-async-size-async-b-77a8c116.js (async-b-77a8c116) 1.57 KiB <{179}> ={385}= ={820}= ={920}= [rendered] @@ -4592,9 +4592,9 @@ exports[`StatsTestCases should print correct stats for split-chunks-min-size-red chunk (runtime: main) default/async-d.js (async-d) 50 bytes <{179}> ={821}= [rendered] > ./d ./index.js 4:0-47 ./d.js 50 bytes [built] [code generated] -chunk (runtime: main) default/main.js (main) 245 bytes (javascript) 6.73 KiB (runtime) >{31}< >{334}< >{383}< >{449}< >{794}< >{821}< [entry] [rendered] +chunk (runtime: main) default/main.js (main) 245 bytes (javascript) 6.69 KiB (runtime) >{31}< >{334}< >{383}< >{449}< >{794}< >{821}< [entry] [rendered] > ./ main - runtime modules 6.73 KiB 9 modules + runtime modules 6.69 KiB 9 modules ./index.js 245 bytes [built] [code generated] chunk (runtime: main) default/async-b.js (async-b) 176 bytes <{179}> [rendered] > ./b ./index.js 2:0-47 @@ -4625,9 +4625,9 @@ chunk (runtime: main) default/118.js 150 bytes <{179}> ={334}= ={383}= [rendered > ./c ./index.js 3:0-47 ./d.js 63 bytes [built] [code generated] ./f.js 87 bytes [built] [code generated] -chunk (runtime: main) default/main.js (main) 147 bytes (javascript) 6.7 KiB (runtime) >{118}< >{334}< >{383}< >{794}< [entry] [rendered] +chunk (runtime: main) default/main.js (main) 147 bytes (javascript) 6.66 KiB (runtime) >{118}< >{334}< >{383}< >{794}< [entry] [rendered] > ./ main - runtime modules 6.7 KiB 9 modules + runtime modules 6.66 KiB 9 modules ./index.js 147 bytes [built] [code generated] chunk (runtime: main) default/async-b.js (async-b) 158 bytes <{179}> ={118}= [rendered] > ./b ./index.js 2:0-47 @@ -4758,8 +4758,8 @@ webpack x.x.x compiled with 1 warning in X ms" `; exports[`StatsTestCases should print correct stats for wasm-explorer-examples-sync 1`] = ` -"assets by path *.js 21.8 KiB - asset bundle.js 16.3 KiB [emitted] (name: main) +"assets by path *.js 21.7 KiB + asset bundle.js 16.2 KiB [emitted] (name: main) asset 325.bundle.js 3.89 KiB [emitted] asset 795.bundle.js 557 bytes [emitted] asset 526.bundle.js 364 bytes [emitted] (id hint: vendors) @@ -4775,8 +4775,8 @@ assets by path *.wasm 1.37 KiB asset 0301cb3f9f4151b567f5.module.wasm 120 bytes [emitted] [immutable] chunk (runtime: main) 20.bundle.js 50 bytes (javascript) 531 bytes (webassembly) [rendered] ./duff.wasm 50 bytes (javascript) 531 bytes (webassembly) [built] [code generated] -chunk (runtime: main) bundle.js (main) 586 bytes (javascript) 9.18 KiB (runtime) [entry] [rendered] - runtime modules 9.18 KiB 11 modules +chunk (runtime: main) bundle.js (main) 586 bytes (javascript) 9.14 KiB (runtime) [entry] [rendered] + runtime modules 9.14 KiB 11 modules ./index.js 586 bytes [built] [code generated] chunk (runtime: main) 189.bundle.js 50 bytes (javascript) 156 bytes (webassembly) [rendered] ./Q_rsqrt.wasm 50 bytes (javascript) 156 bytes (webassembly) [built] [code generated] @@ -4790,7 +4790,7 @@ chunk (runtime: main) 526.bundle.js (id hint: vendors) 34 bytes [rendered] split chunk (runtime: main) 795.bundle.js 110 bytes (javascript) 444 bytes (webassembly) [rendered] ./fact.wasm 50 bytes (javascript) 154 bytes (webassembly) [built] [code generated] ./fast-math.wasm 60 bytes (javascript) 290 bytes (webassembly) [built] [code generated] -runtime modules 9.18 KiB 11 modules +runtime modules 9.14 KiB 11 modules cacheable modules 2.31 KiB (javascript) 1.37 KiB (webassembly) webassembly modules 310 bytes (javascript) 1.37 KiB (webassembly) ./Q_rsqrt.wasm 50 bytes (javascript) 156 bytes (webassembly) [built] [code generated] diff --git a/test/configCases/css/css-import/style.css b/test/configCases/css/css-import/style.css index 90c3f286d..149a1b1b2 100644 --- a/test/configCases/css/css-import/style.css +++ b/test/configCases/css/css-import/style.css @@ -60,7 +60,7 @@ style2.css?foo=9 @import url(https://test.cases/path/../../../../configCases/css/css-import/external.css); /*@import url(https://test.cases/path/../../../../configCases/css/css-import/external.css) screen and (orientation:landscape); @import url(https://test.cases/path/../../../../configCases/css/css-import/external.css) screen and (orientation:landscape);*/ -/*@import url("//example.com/style.css");*/ +/*@import "//example.com/style.css";*/ /*@import url(~package/test.css);*/ /*@import ;*/ /*@import foo-bar;*/ @@ -145,7 +145,7 @@ le3.css?=bar4'); @import url("./layer.css?foo=5") layer(); @import url("./layer.css?foo=6") layer( foo.bar.baz ); @import url("./layer.css?foo=7") layer( ); -/*@import url("http://example.com/style.css") supports(display: flex) screen and (min-width: 400px);*/ +/*@import "http://example.com/style.css" supports(display: flex) screen and (min-width: 400px);*/ @import url("./style6.css")layer(default)supports(display: flex)screen and (min-width:400px); @import "./style6.css?foo=1"layer(default)supports(display: flex)screen and (min-width:400px); @import "./style6.css?foo=2"supports(display: flex)screen and (min-width:400px); diff --git a/test/configCases/css/css-modules-in-node/index.js b/test/configCases/css/css-modules-in-node/index.js index 73c255d96..534e39592 100644 --- a/test/configCases/css/css-modules-in-node/index.js +++ b/test/configCases/css/css-modules-in-node/index.js @@ -73,7 +73,28 @@ it("should allow to create css modules", done => { : "./style.module.css-animationName", mozAnimationName: prod ? "my-app-491-t6" - : "./style.module.css-mozAnimationName" + : "./style.module.css-mozAnimationName", + myColor: prod + ? "--my-app-491-lC" + : "--./style.module.css-my-color", + paddingLg: prod + ? "my-app-491-FP" + : "./style.module.css-padding-lg", + paddingSm: prod + ? "my-app-491-zE" + : "./style.module.css-padding-sm", + classLocalScope: prod + ? "my-app-491-gz" + : "./style.module.css-class-local-scope", + inLocalGlobalScope: prod + ? "my-app-491-Zv" + : "./style.module.css-in-local-global-scope", + classInContainer: prod + ? "my-app-491-Gp" + : "./style.module.css-class-in-container", + deepClassInContainer: prod + ? "my-app-491-rn" + : "./style.module.css-deep-class-in-container", }); } catch (e) { return done(e); diff --git a/test/configCases/css/css-modules/index.js b/test/configCases/css/css-modules/index.js index 267c674eb..d78771321 100644 --- a/test/configCases/css/css-modules/index.js +++ b/test/configCases/css/css-modules/index.js @@ -88,7 +88,28 @@ it("should allow to create css modules", done => { : "./style.module.css-animationName", mozAnimationName: prod ? "my-app-491-t6" - : "./style.module.css-mozAnimationName" + : "./style.module.css-mozAnimationName", + myColor: prod + ? "--my-app-491-lC" + : "--./style.module.css-my-color", + paddingLg: prod + ? "my-app-491-FP" + : "./style.module.css-padding-lg", + paddingSm: prod + ? "my-app-491-zE" + : "./style.module.css-padding-sm", + classLocalScope: prod + ? "my-app-491-gz" + : "./style.module.css-class-local-scope", + inLocalGlobalScope: prod + ? "my-app-491-Zv" + : "./style.module.css-in-local-global-scope", + classInContainer: prod + ? "my-app-491-Gp" + : "./style.module.css-class-in-container", + deepClassInContainer: prod + ? "my-app-491-rn" + : "./style.module.css-deep-class-in-container", }); } catch (e) { return done(e); diff --git a/test/configCases/css/css-modules/style.module.css b/test/configCases/css/css-modules/style.module.css index f331c3880..eae52a0c8 100644 --- a/test/configCases/css/css-modules/style.module.css +++ b/test/configCases/css/css-modules/style.module.css @@ -71,6 +71,15 @@ background-color: aquamarine; } +.local9 :matches(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + :global(:global(:local(.nested1)).nested2).nested3 { color: pink; } @@ -271,3 +280,348 @@ background: red; } } + +@counter-style thumbs { + system: cyclic; + symbols: "\1F44D"; + suffix: " "; +} + +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +/* At-rule for "nice-style" in Font Two */ +@font-feature-values Font Two { + @styleset { + nice-style: 4; + } +} + +@property --my-color { + syntax: ""; + inherits: false; + initial-value: #c0ffee; +} + +.class { + color: var(--my-color); +} + +@layer utilities { + .padding-sm { + padding: 0.5rem; + } + + .padding-lg { + padding: 0.8rem; + } +} + +.class { + color: red; + + .nested-pure { + color: red; + } + + @media screen and (min-width: 200px) { + color: blue; + + .nested-media { + color: blue; + } + } + + @supports (display: flex) { + display: flex; + + .nested-supports { + display: flex; + } + } + + @layer foo { + background: red; + + .nested-layer { + background: red; + } + } + + @container foo { + background: red; + + .nested-layer { + background: red; + } + } +} + +.not-selector-inside { + color: #fff; + opacity: 0.12; + padding: .5px; + unknown: :local(.test); + unknown1: :local .test; + unknown2: :global .test; + unknown3: :global .test; + unknown4: .foo, .bar, #bar; +} + +@unknown :local .local :global .global { + color: red; +} + +@unknown :local(.local) :global(.global) { + color: red; +} + +.nested-var { + .again { + color: var(--local-color); + } +} + +.nested-with-local-pseudo { + color: red; + + :local .local-nested { + color: red; + } + + :global .global-nested { + color: red; + } + + :local(.local-nested) { + color: red; + } + + :global(.global-nested) { + color: red; + } + + :local .local-nested, :global .global-nested-next { + color: red; + } + + :local(.local-nested), :global(.global-nested-next) { + color: red; + } + + :global .foo, .bar { + color: red; + } +} + +#id-foo { + color: red; + + #id-bar { + color: red; + } +} + +.nested-parens { + .local9 div:has(.vertical-tiny, .vertical-small) { + max-height: 0; + margin: 0; + overflow: hidden; + } +} + +:global .global-foo { + .nested-global { + color: red; + } + + :local .local-in-global { + color: blue; + } +} + +@unknown .class { + color: red; + + .class { + color: red; + } +} + +:global .class :local .in-local-global-scope, +:global .class :local .in-local-global-scope, +:local .class-local-scope :global .in-local-global-scope { + color: red; +} + +@container (width > 400px) { + .class-in-container { + font-size: 1.5em; + } +} + +@container summary (min-width: 400px) { + @container (width > 400px) { + .deep-class-in-container { + font-size: 1.5em; + } + } +} + +:scope { + color: red; +} + +.placeholder-gray-700:-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} + +:root { + --test: dark; +} + +@media screen and (prefers-color-scheme: var(--test)) { + .baz { + color: white; + } +} + +@keyframes slidein { + from { + margin-left: 100%; + width: 300%; + } + + to { + margin-left: 0%; + width: 100%; + } +} + +.class { + animation: + foo var(--animation-name) 3s, + var(--animation-name) 3s, + 3s linear 1s infinite running slidein, + 3s linear env(foo, var(--baz)) infinite running slidein; +} + +:root { + --baz: 10px; +} + +.class { + bar: env(foo, var(--baz)); +} + +:global .global-foo, :local .bar { + :local .local-in-global { + color: blue; + } + + @media screen { + :global .my-global-class-again, + :local .my-global-class-again { + color: red; + } + } +} + +.first-nested { + .first-nested-nested { + color: red; + } +} + +.first-nested-at-rule { + @media screen { + .first-nested-nested-at-rule-deep { + color: red; + } + } +} + +:global .again-global { + color:red; +} + +:global .again-again-global { + :global .again-again-global { + color: red; + } +} + +:root { + --foo: red; +} + +:global .again-again-global { + color: var(--foo); + + :global .again-again-global { + color: var(--foo); + } +} + +:global .again-again-global { + animation: slidein 3s; + + :global .again-again-global, .class, :global(:global(:local(.nested1)).nested2).nested3 { + animation: slidein 3s; + } + + .local2 :global .global, + .local3 { + color: red; + } +} + +@unknown var(--foo) { + color: red; +} + +.class { + .class { + .class { + .class {} + } + } +} + +.class { + .class { + .class { + .class { + animation: slidein 3s; + } + } + } +} + +.class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + } + } + } +} diff --git a/test/configCases/css/css-modules/use-style.js b/test/configCases/css/css-modules/use-style.js index 48b4fc3b8..838b4990b 100644 --- a/test/configCases/css/css-modules/use-style.js +++ b/test/configCases/css/css-modules/use-style.js @@ -34,4 +34,11 @@ export default { inSupportScope: style.inSupportScope, animationName: style.animationName, mozAnimationName: style.mozAnimationName, + myColor: style['my-color'], + paddingSm: style['padding-sm'], + paddingLg: style['padding-lg'], + inLocalGlobalScope: style['in-local-global-scope'], + classLocalScope: style['class-local-scope'], + classInContainer: style['class-in-container'], + deepClassInContainer: style['deep-class-in-container'], }; diff --git a/test/configCases/css/import-module/a-pitching-loader.js b/test/configCases/css/import-module/a-pitching-loader.js new file mode 100644 index 000000000..eb9ad595c --- /dev/null +++ b/test/configCases/css/import-module/a-pitching-loader.js @@ -0,0 +1,9 @@ +/** @type {import("../../../../").PitchLoaderDefinitionFunction} */ +exports.pitch = async function (remaining) { + const result = await this.importModule( + this.resourcePath + '.webpack[javascript/auto]' + '!=!' + remaining, { + publicPath: '' + }); + + return result.default || result; +}; diff --git a/test/configCases/css/import-module/colors.js b/test/configCases/css/import-module/colors.js new file mode 100644 index 000000000..91f7b0d0d --- /dev/null +++ b/test/configCases/css/import-module/colors.js @@ -0,0 +1,2 @@ +export const red = '#f00'; +export const green = '#0f0'; \ No newline at end of file diff --git a/test/configCases/css/import-module/index.js b/test/configCases/css/import-module/index.js new file mode 100644 index 000000000..ba908562a --- /dev/null +++ b/test/configCases/css/import-module/index.js @@ -0,0 +1,6 @@ +import stylesheet from './stylesheet.js'; + +it("should compile", () => { + expect(stylesheet).toBe("body { background: #f00; color: #0f0; }"); +}); + diff --git a/test/configCases/css/import-module/stylesheet.js b/test/configCases/css/import-module/stylesheet.js new file mode 100644 index 000000000..a2400fa41 --- /dev/null +++ b/test/configCases/css/import-module/stylesheet.js @@ -0,0 +1,3 @@ +import { green, red } from './colors.js'; + +export default `body { background: ${red}; color: ${green}; }`; diff --git a/test/configCases/css/import-module/webpack.config.js b/test/configCases/css/import-module/webpack.config.js new file mode 100644 index 000000000..06bb9ba02 --- /dev/null +++ b/test/configCases/css/import-module/webpack.config.js @@ -0,0 +1,19 @@ +const webpack = require("../../../../"); +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [new webpack.HotModuleReplacementPlugin()], + target: "web", + mode: "development", + module: { + rules: [ + { + test: /stylesheet\.js$/i, + use: ["./a-pitching-loader.js"], + type: "asset/source" + } + ] + }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/pure-css/style.css b/test/configCases/css/pure-css/style.css index 0fdcb919b..6d8da5a2a 100644 --- a/test/configCases/css/pure-css/style.css +++ b/test/configCases/css/pure-css/style.css @@ -1,3 +1,5 @@ +@import url("../css-modules/style.module.css"); + .class { color: red; background: var(--color); @@ -31,3 +33,7 @@ :export { foo: bar; } + +.class { + animation: test 1s, test; +} diff --git a/test/configCases/custom-hash-function/debug-hash/files/file1.js b/test/configCases/custom-hash-function/debug-hash/files/file1.js new file mode 100644 index 000000000..3cec1b77a --- /dev/null +++ b/test/configCases/custom-hash-function/debug-hash/files/file1.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/custom-hash-function/debug-hash/files/file10.js b/test/configCases/custom-hash-function/debug-hash/files/file10.js new file mode 100644 index 000000000..3cec1b77a --- /dev/null +++ b/test/configCases/custom-hash-function/debug-hash/files/file10.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/custom-hash-function/debug-hash/files/file11.js b/test/configCases/custom-hash-function/debug-hash/files/file11.js new file mode 100644 index 000000000..3cec1b77a --- /dev/null +++ b/test/configCases/custom-hash-function/debug-hash/files/file11.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/custom-hash-function/debug-hash/files/file12.js b/test/configCases/custom-hash-function/debug-hash/files/file12.js new file mode 100644 index 000000000..3cec1b77a --- /dev/null +++ b/test/configCases/custom-hash-function/debug-hash/files/file12.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/custom-hash-function/debug-hash/files/file13.js b/test/configCases/custom-hash-function/debug-hash/files/file13.js new file mode 100644 index 000000000..3cec1b77a --- /dev/null +++ b/test/configCases/custom-hash-function/debug-hash/files/file13.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/custom-hash-function/debug-hash/files/file14.js b/test/configCases/custom-hash-function/debug-hash/files/file14.js new file mode 100644 index 000000000..3cec1b77a --- /dev/null +++ b/test/configCases/custom-hash-function/debug-hash/files/file14.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/custom-hash-function/debug-hash/files/file15.js b/test/configCases/custom-hash-function/debug-hash/files/file15.js new file mode 100644 index 000000000..3cec1b77a --- /dev/null +++ b/test/configCases/custom-hash-function/debug-hash/files/file15.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/custom-hash-function/debug-hash/files/file2.js b/test/configCases/custom-hash-function/debug-hash/files/file2.js new file mode 100644 index 000000000..3cec1b77a --- /dev/null +++ b/test/configCases/custom-hash-function/debug-hash/files/file2.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/custom-hash-function/debug-hash/files/file3.js b/test/configCases/custom-hash-function/debug-hash/files/file3.js new file mode 100644 index 000000000..3cec1b77a --- /dev/null +++ b/test/configCases/custom-hash-function/debug-hash/files/file3.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/custom-hash-function/debug-hash/files/file4.js b/test/configCases/custom-hash-function/debug-hash/files/file4.js new file mode 100644 index 000000000..3cec1b77a --- /dev/null +++ b/test/configCases/custom-hash-function/debug-hash/files/file4.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/custom-hash-function/debug-hash/files/file5.js b/test/configCases/custom-hash-function/debug-hash/files/file5.js new file mode 100644 index 000000000..3cec1b77a --- /dev/null +++ b/test/configCases/custom-hash-function/debug-hash/files/file5.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/custom-hash-function/debug-hash/files/file6.js b/test/configCases/custom-hash-function/debug-hash/files/file6.js new file mode 100644 index 000000000..3cec1b77a --- /dev/null +++ b/test/configCases/custom-hash-function/debug-hash/files/file6.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/custom-hash-function/debug-hash/files/file7.js b/test/configCases/custom-hash-function/debug-hash/files/file7.js new file mode 100644 index 000000000..3cec1b77a --- /dev/null +++ b/test/configCases/custom-hash-function/debug-hash/files/file7.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/custom-hash-function/debug-hash/files/file8.js b/test/configCases/custom-hash-function/debug-hash/files/file8.js new file mode 100644 index 000000000..3cec1b77a --- /dev/null +++ b/test/configCases/custom-hash-function/debug-hash/files/file8.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/custom-hash-function/debug-hash/files/file9.js b/test/configCases/custom-hash-function/debug-hash/files/file9.js new file mode 100644 index 000000000..3cec1b77a --- /dev/null +++ b/test/configCases/custom-hash-function/debug-hash/files/file9.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/custom-hash-function/debug-hash/index.js b/test/configCases/custom-hash-function/debug-hash/index.js new file mode 100644 index 000000000..7b74a5a38 --- /dev/null +++ b/test/configCases/custom-hash-function/debug-hash/index.js @@ -0,0 +1,8 @@ +it("debug hash should works", function () { + var ids = []; + for(var i = 1; i <= 15; i++) { + var id = require("./files/file" + i + ".js"); + expect(ids.indexOf(id)).toBe(-1); + ids.push(id); + } +}); diff --git a/test/configCases/custom-hash-function/debug-hash/webpack.config.js b/test/configCases/custom-hash-function/debug-hash/webpack.config.js new file mode 100644 index 000000000..ee9e650c7 --- /dev/null +++ b/test/configCases/custom-hash-function/debug-hash/webpack.config.js @@ -0,0 +1,8 @@ +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + output: { + hashFunction: "debug" + } + } +]; diff --git a/test/configCases/web/prefetch-preload-module/chunk1-a.js b/test/configCases/web/prefetch-preload-module/chunk1-a.js new file mode 100644 index 000000000..e69de29bb diff --git a/test/configCases/web/prefetch-preload-module/chunk1-b.js b/test/configCases/web/prefetch-preload-module/chunk1-b.js new file mode 100644 index 000000000..e69de29bb diff --git a/test/configCases/web/prefetch-preload-module/chunk1-c.js b/test/configCases/web/prefetch-preload-module/chunk1-c.js new file mode 100644 index 000000000..e69de29bb diff --git a/test/configCases/web/prefetch-preload-module/chunk1.js b/test/configCases/web/prefetch-preload-module/chunk1.js new file mode 100644 index 000000000..60d6f1685 --- /dev/null +++ b/test/configCases/web/prefetch-preload-module/chunk1.js @@ -0,0 +1,5 @@ +export default function() { + import(/* webpackPrefetch: true, webpackChunkName: "chunk1-a" */ "./chunk1-a"); + import(/* webpackPreload: true, webpackChunkName: "chunk1-b" */ "./chunk1-b"); + import(/* webpackPrefetch: 10, webpackChunkName: "chunk1-c" */ "./chunk1-c"); +} diff --git a/test/configCases/web/prefetch-preload-module/chunk2.js b/test/configCases/web/prefetch-preload-module/chunk2.js new file mode 100644 index 000000000..a225cae31 --- /dev/null +++ b/test/configCases/web/prefetch-preload-module/chunk2.js @@ -0,0 +1,4 @@ +export default function() { + import(/* webpackPrefetch: true, webpackChunkName: "chunk1-a" */ "./chunk1-a"); + import(/* webpackPreload: true, webpackChunkName: "chunk1-b" */ "./chunk1-b"); +} diff --git a/test/configCases/web/prefetch-preload-module/index.js b/test/configCases/web/prefetch-preload-module/index.js new file mode 100644 index 000000000..86c0ff080 --- /dev/null +++ b/test/configCases/web/prefetch-preload-module/index.js @@ -0,0 +1,90 @@ +// This config need to be set on initial evaluation to be effective +__webpack_nonce__ = "nonce"; +__webpack_public_path__ = "https://example.com/public/path/"; + +it("should prefetch and preload child chunks on chunk load", () => { + let link, script; + + expect(document.head._children).toHaveLength(1); + + // Test prefetch from entry chunk + link = document.head._children[0]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("prefetch"); + expect(link.href).toBe("https://example.com/public/path/chunk1.js"); + + const promise = import( + /* webpackChunkName: "chunk1", webpackPrefetch: true */ "./chunk1" + ); + + expect(document.head._children).toHaveLength(3); + + // Test normal script loading + script = document.head._children[1]; + expect(script._type).toBe("script"); + expect(script.src).toBe("https://example.com/public/path/chunk1.js"); + expect(script.getAttribute("nonce")).toBe("nonce"); + expect(script.crossOrigin).toBe("anonymous"); + expect(script.onload).toBeTypeOf("function"); + + // Test preload of chunk1-b + link = document.head._children[2]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("preload"); + expect(link.as).toBe("script"); + expect(link.href).toBe("https://example.com/public/path/chunk1-b.js"); + expect(link.charset).toBe("utf-8"); + expect(link.getAttribute("nonce")).toBe("nonce"); + expect(link.crossOrigin).toBe("anonymous"); + + // Run the script + __non_webpack_require__("./chunk1.js"); + + script.onload(); + + return promise.then(() => { + expect(document.head._children).toHaveLength(4); + + // Test prefetching for chunk1-c and chunk1-a in this order + link = document.head._children[2]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("prefetch"); + expect(link.href).toBe("https://example.com/public/path/chunk1-c.js"); + expect(link.crossOrigin).toBe("anonymous"); + + link = document.head._children[3]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("prefetch"); + expect(link.href).toBe("https://example.com/public/path/chunk1-a.js"); + expect(link.crossOrigin).toBe("anonymous"); + + const promise2 = import( + /* webpackChunkName: "chunk1", webpackPrefetch: true */ "./chunk1" + ); + + // Loading chunk1 again should not trigger prefetch/preload + expect(document.head._children).toHaveLength(4); + + const promise3 = import(/* webpackChunkName: "chunk2" */ "./chunk2"); + + expect(document.head._children).toHaveLength(5); + + // Test normal script loading + script = document.head._children[4]; + expect(script._type).toBe("script"); + expect(script.src).toBe("https://example.com/public/path/chunk2.js"); + expect(script.getAttribute("nonce")).toBe("nonce"); + expect(script.crossOrigin).toBe("anonymous"); + expect(script.onload).toBeTypeOf("function"); + + // Run the script + __non_webpack_require__("./chunk2.js"); + + script.onload(); + + return promise3.then(() => { + // Loading chunk2 again should not trigger prefetch/preload as it's already prefetch/preloaded + expect(document.head._children).toHaveLength(4); + }); + }); +}); diff --git a/test/configCases/web/prefetch-preload-module/index.mjs b/test/configCases/web/prefetch-preload-module/index.mjs new file mode 100644 index 000000000..63f67a46e --- /dev/null +++ b/test/configCases/web/prefetch-preload-module/index.mjs @@ -0,0 +1,89 @@ +// This config need to be set on initial evaluation to be effective +__webpack_nonce__ = "nonce"; +__webpack_public_path__ = "https://example.com/public/path/"; + +it("should prefetch and preload child chunks on chunk load", () => { + let link, script; + + expect(document.head._children).toHaveLength(1); + + // Test prefetch from entry chunk + link = document.head._children[0]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("prefetch"); + expect(link.href).toBe("https://example.com/public/path/chunk1.js"); + + const promise = import( + /* webpackChunkName: "chunk1", webpackPrefetch: true */ "./chunk1.js" + ); + + expect(document.head._children).toHaveLength(3); + + // Test normal script loading + script = document.head._children[1]; + expect(script._type).toBe("script"); + expect(script.src).toBe("https://example.com/public/path/chunk1.js"); + expect(script.getAttribute("nonce")).toBe("nonce"); + expect(script.crossOrigin).toBe("anonymous"); + expect(script.onload).toBeTypeOf("function"); + + // Test preload of chunk1-b + link = document.head._children[2]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("modulepreload"); + expect(link.href).toBe("https://example.com/public/path/chunk1-b.js"); + expect(link.charset).toBe("utf-8"); + expect(link.getAttribute("nonce")).toBe("nonce"); + expect(link.crossOrigin).toBe("anonymous"); + + // Run the script + __non_webpack_require__("./chunk1.js"); + + script.onload(); + + return promise.then(() => { + expect(document.head._children).toHaveLength(4); + + // Test prefetching for chunk1-c and chunk1-a in this order + link = document.head._children[2]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("prefetch"); + expect(link.href).toBe("https://example.com/public/path/chunk1-c.js"); + expect(link.crossOrigin).toBe("anonymous"); + + link = document.head._children[3]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("prefetch"); + expect(link.href).toBe("https://example.com/public/path/chunk1-a.js"); + expect(link.crossOrigin).toBe("anonymous"); + + const promise2 = import( + /* webpackChunkName: "chunk1", webpackPrefetch: true */ "./chunk1.js" + ); + + // Loading chunk1 again should not trigger prefetch/preload + expect(document.head._children).toHaveLength(4); + + const promise3 = import(/* webpackChunkName: "chunk2" */ "./chunk2.js"); + + expect(document.head._children).toHaveLength(5); + + // Test normal script loading + script = document.head._children[4]; + expect(script._type).toBe("script"); + expect(script.src).toBe("https://example.com/public/path/chunk2.js"); + expect(script.getAttribute("nonce")).toBe("nonce"); + expect(script.crossOrigin).toBe("anonymous"); + expect(script.onload).toBeTypeOf("function"); + + // Run the script + __non_webpack_require__("./chunk2.js"); + + script.onload(); + + return promise3.then(() => { + // Loading chunk2 again should not trigger prefetch/preload as it's already prefetch/preloaded + expect(document.head._children).toHaveLength(4); + }); + }); +}); diff --git a/test/configCases/web/prefetch-preload-module/webpack.config.js b/test/configCases/web/prefetch-preload-module/webpack.config.js new file mode 100644 index 000000000..cd4e599f1 --- /dev/null +++ b/test/configCases/web/prefetch-preload-module/webpack.config.js @@ -0,0 +1,22 @@ +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: "./index.mjs", + experiments: { + outputModule: true + }, + name: "esm", + target: "web", + output: { + publicPath: "", + module: true, + filename: "bundle0.js", + chunkFilename: "[name].js", + crossOriginLoading: "anonymous" + }, + performance: { + hints: false + }, + optimization: { + minimize: false + } +}; diff --git a/types.d.ts b/types.d.ts index 6b5c31705..aa81deaff 100644 --- a/types.d.ts +++ b/types.d.ts @@ -6871,8 +6871,54 @@ declare interface MinChunkSizePluginOptions { minChunkSize: number; } declare class Module extends DependenciesBlock { - constructor(type: string, context?: string, layer?: string); - type: string; + constructor( + type: + | "" + | "runtime" + | "javascript/auto" + | "javascript/dynamic" + | "javascript/esm" + | "json" + | "webassembly/async" + | "webassembly/sync" + | "css" + | "css/global" + | "css/module" + | "asset" + | "asset/inline" + | "asset/resource" + | "asset/source" + | "asset/raw-data-url" + | "fallback-module" + | "remote-module" + | "provide-module" + | "consume-shared-module" + | "lazy-compilation-proxy", + context?: string, + layer?: string + ); + type: + | "" + | "runtime" + | "javascript/auto" + | "javascript/dynamic" + | "javascript/esm" + | "json" + | "webassembly/async" + | "webassembly/sync" + | "css" + | "css/global" + | "css/module" + | "asset" + | "asset/inline" + | "asset/resource" + | "asset/source" + | "asset/raw-data-url" + | "fallback-module" + | "remote-module" + | "provide-module" + | "consume-shared-module" + | "lazy-compilation-proxy"; context: null | string; layer: null | string; needId: boolean; @@ -7831,9 +7877,9 @@ declare interface NormalModuleCreateData { layer?: string; /** - * module type + * module type. When deserializing, this is set to an empty string "". */ - type: string; + type: "" | "javascript/auto" | "javascript/dynamic" | "javascript/esm"; /** * request string diff --git a/yarn.lock b/yarn.lock index 419a7e40c..ca8da1897 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1366,20 +1366,20 @@ "@webassemblyjs/ast" "1.11.5" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.0.1.tgz#a69720f6c9bad6aef54a8fa6ba9c3533e7ef4c7f" - integrity sha512-njsdJXJSiS2iNbQVS0eT8A/KPnmyH4pv1APj2K0d1wrZcBLw+yppxOy4CGqa0OxDJkzfL/XELDhD8rocnIwB5A== +"@webpack-cli/configtest@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.0.tgz#b59b33377b1b896a9a7357cfc643b39c1524b1e6" + integrity sha512-K/vuv72vpfSEZoo5KIU0a2FsEoYdW0DUMtMpB5X3LlUwshetMZRZRxB7sCsVji/lFaSxtQQ3aM9O4eMolXkU9w== "@webpack-cli/info@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.1.tgz#eed745799c910d20081e06e5177c2b2569f166c0" integrity sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA== -"@webpack-cli/serve@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.2.tgz#10aa290e44a182c02e173a89452781b1acbc86d9" - integrity sha512-S9h3GmOmzUseyeFW3tYNnWS7gNUuwxZ3mmMq0JyW78Vx1SGKPSkt5bT4pB0rUnVfHjP0EL9gW2bOzmtiTfQt0A== +"@webpack-cli/serve@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.3.tgz#c00c48d19340224242842e38b8f7b76c308bbd3f" + integrity sha512-Bwxd73pHuYc0cyl7vulPp2I6kAYtmJPkfUivbts7by6wDAVyFdKzGX3AksbvCRyNVFUJu7o2ZTcWXdT90T3qbg== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -2140,9 +2140,9 @@ copy-anything@^2.0.1: is-what "^3.14.1" core-js@^3.6.5: - version "3.30.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.30.1.tgz#fc9c5adcc541d8e9fa3e381179433cbf795628ba" - integrity sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ== + version "3.30.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.30.2.tgz#6528abfda65e5ad728143ea23f7a14f0dcf503fc" + integrity sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg== core-util-is@1.0.2: version "1.0.2" @@ -6324,14 +6324,14 @@ webidl-conversions@^3.0.0: integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webpack-cli@^5.0.1: - version "5.0.2" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.0.2.tgz#2954c10ecb61c5d4dad6f68ee2d77f051741946c" - integrity sha512-4y3W5Dawri5+8dXm3+diW6Mn1Ya+Dei6eEVAdIduAmYNLzv1koKVAqsfgrrc9P2mhrYHQphx5htnGkcNwtubyQ== + version "5.1.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.0.tgz#abc4b1f44b50250f2632d8b8b536cfe2f6257891" + integrity sha512-a7KRJnCxejFoDpYTOwzm5o21ZXMaNqtRlvS183XzGDUPRdVEzJNImcQokqYZ8BNTnk9DkKiuWxw75+DCCoZ26w== dependencies: "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^2.0.1" + "@webpack-cli/configtest" "^2.1.0" "@webpack-cli/info" "^2.0.1" - "@webpack-cli/serve" "^2.0.2" + "@webpack-cli/serve" "^2.0.3" colorette "^2.0.14" commander "^10.0.1" cross-spawn "^7.0.3" From 31e8758a41789df1cf7f2ca3d2ec3c4a9dc26aea Mon Sep 17 00:00:00 2001 From: Ben Worline Date: Tue, 9 May 2023 14:43:25 -0700 Subject: [PATCH 6/7] update snapshot --- .../StatsTestCases.basictest.js.snap | 158 +++++++++--------- 1 file changed, 79 insertions(+), 79 deletions(-) diff --git a/test/__snapshots__/StatsTestCases.basictest.js.snap b/test/__snapshots__/StatsTestCases.basictest.js.snap index e4faba6b7..d5704c42e 100644 --- a/test/__snapshots__/StatsTestCases.basictest.js.snap +++ b/test/__snapshots__/StatsTestCases.basictest.js.snap @@ -306,9 +306,9 @@ default: vendors: Entrypoint main 11.1 KiB = vendors/main.js - Entrypoint a 14.5 KiB = vendors/vendors.js 1.05 KiB vendors/a.js 13.5 KiB - Entrypoint b 8.18 KiB = vendors/vendors.js 1.05 KiB vendors/b.js 7.13 KiB - Entrypoint c 8.18 KiB = vendors/vendors.js 1.05 KiB vendors/c.js 7.13 KiB + Entrypoint a 14.5 KiB = vendors/vendors.js 1.04 KiB vendors/a.js 13.5 KiB + Entrypoint b 8.17 KiB = vendors/vendors.js 1.04 KiB vendors/b.js 7.13 KiB + Entrypoint c 8.17 KiB = vendors/vendors.js 1.04 KiB vendors/c.js 7.13 KiB chunk (runtime: b) vendors/b.js (b) 156 bytes (javascript) 2.75 KiB (runtime) [entry] [rendered] > ./b b runtime modules 2.75 KiB 4 modules @@ -355,9 +355,9 @@ vendors: multiple-vendors: Entrypoint main 11.5 KiB = multiple-vendors/main.js - Entrypoint a 15 KiB = multiple-vendors/libs-x.js 414 bytes multiple-vendors/954.js 414 bytes multiple-vendors/767.js 414 bytes multiple-vendors/390.js 414 bytes multiple-vendors/a.js 13.4 KiB - Entrypoint b 8.14 KiB = multiple-vendors/libs-x.js 414 bytes multiple-vendors/954.js 414 bytes multiple-vendors/767.js 414 bytes multiple-vendors/568.js 414 bytes multiple-vendors/b.js 6.52 KiB - Entrypoint c 8.14 KiB = multiple-vendors/libs-x.js 414 bytes multiple-vendors/769.js 414 bytes multiple-vendors/767.js 414 bytes multiple-vendors/568.js 414 bytes multiple-vendors/c.js 6.52 KiB + Entrypoint a 15 KiB = multiple-vendors/libs-x.js 412 bytes multiple-vendors/954.js 412 bytes multiple-vendors/767.js 412 bytes multiple-vendors/390.js 412 bytes multiple-vendors/a.js 13.4 KiB + Entrypoint b 8.13 KiB = multiple-vendors/libs-x.js 412 bytes multiple-vendors/954.js 412 bytes multiple-vendors/767.js 412 bytes multiple-vendors/568.js 412 bytes multiple-vendors/b.js 6.52 KiB + Entrypoint c 8.13 KiB = multiple-vendors/libs-x.js 412 bytes multiple-vendors/769.js 412 bytes multiple-vendors/767.js 412 bytes multiple-vendors/568.js 412 bytes multiple-vendors/c.js 6.52 KiB chunk (runtime: a, b, c, main) multiple-vendors/libs-x.js (libs-x) (id hint: libs) 20 bytes [initial] [rendered] split chunk (cache group: libs) (name: libs-x) > ./a ./index.js 1:0-47 > ./b ./index.js 2:0-47 @@ -427,9 +427,9 @@ multiple-vendors: all: Entrypoint main 11.5 KiB = all/main.js - Entrypoint a 15 KiB = all/282.js 414 bytes all/954.js 414 bytes all/767.js 414 bytes all/390.js 414 bytes all/a.js 13.4 KiB - Entrypoint b 8.14 KiB = all/282.js 414 bytes all/954.js 414 bytes all/767.js 414 bytes all/568.js 414 bytes all/b.js 6.52 KiB - Entrypoint c 8.14 KiB = all/282.js 414 bytes all/769.js 414 bytes all/767.js 414 bytes all/568.js 414 bytes all/c.js 6.52 KiB + Entrypoint a 15 KiB = all/282.js 412 bytes all/954.js 412 bytes all/767.js 412 bytes all/390.js 412 bytes all/a.js 13.4 KiB + Entrypoint b 8.13 KiB = all/282.js 412 bytes all/954.js 412 bytes all/767.js 412 bytes all/568.js 412 bytes all/b.js 6.52 KiB + Entrypoint c 8.13 KiB = all/282.js 412 bytes all/769.js 412 bytes all/767.js 412 bytes all/568.js 412 bytes all/c.js 6.52 KiB chunk (runtime: b) all/b.js (b) 116 bytes (javascript) 2.76 KiB (runtime) [entry] [rendered] > ./b b runtime modules 2.76 KiB 4 modules @@ -710,8 +710,8 @@ webpack x.x.x compiled successfully in X ms" exports[`StatsTestCases should print correct stats for commons-plugin-issue-4980 1`] = ` "asset app.a304ced30e50efdd246d-1.js 6.24 KiB [emitted] [immutable] (name: app) -asset vendor.e8705eba33f92df1cf62-1.js 619 bytes [emitted] [immutable] (name: vendor) (id hint: vendor) -Entrypoint app 6.84 KiB = vendor.e8705eba33f92df1cf62-1.js 619 bytes app.a304ced30e50efdd246d-1.js 6.24 KiB +asset vendor.e8705eba33f92df1cf62-1.js 611 bytes [emitted] [immutable] (name: vendor) (id hint: vendor) +Entrypoint app 6.83 KiB = vendor.e8705eba33f92df1cf62-1.js 611 bytes app.a304ced30e50efdd246d-1.js 6.24 KiB runtime modules 2.75 KiB 4 modules orphan modules 118 bytes [orphan] 2 modules cacheable modules 272 bytes @@ -720,8 +720,8 @@ cacheable modules 272 bytes webpack x.x.x compiled successfully in X ms asset app.8f403eca7a1e59a7ce89-2.js 6.25 KiB [emitted] [immutable] (name: app) -asset vendor.e8705eba33f92df1cf62-2.js 619 bytes [emitted] [immutable] (name: vendor) (id hint: vendor) -Entrypoint app 6.86 KiB = vendor.e8705eba33f92df1cf62-2.js 619 bytes app.8f403eca7a1e59a7ce89-2.js 6.25 KiB +asset vendor.e8705eba33f92df1cf62-2.js 611 bytes [emitted] [immutable] (name: vendor) (id hint: vendor) +Entrypoint app 6.85 KiB = vendor.e8705eba33f92df1cf62-2.js 611 bytes app.8f403eca7a1e59a7ce89-2.js 6.25 KiB runtime modules 2.75 KiB 4 modules orphan modules 125 bytes [orphan] 2 modules cacheable modules 279 bytes @@ -1633,9 +1633,9 @@ exports[`StatsTestCases should print correct stats for module-deduplication 1`] "asset e1.js 12.2 KiB [emitted] (name: e1) asset e2.js 12.2 KiB [emitted] (name: e2) asset e3.js 12.2 KiB [emitted] (name: e3) -asset 172.js 858 bytes [emitted] -asset 326.js 858 bytes [emitted] -asset 923.js 858 bytes [emitted] +asset 172.js 856 bytes [emitted] +asset 326.js 856 bytes [emitted] +asset 923.js 856 bytes [emitted] asset 114.js 524 bytes [emitted] asset 593.js 524 bytes [emitted] asset 716.js 524 bytes [emitted] @@ -1676,12 +1676,12 @@ webpack x.x.x compiled successfully" `; exports[`StatsTestCases should print correct stats for module-deduplication-named 1`] = ` -"asset e1.js 12.1 KiB [emitted] (name: e1) -asset e2.js 12.1 KiB [emitted] (name: e2) -asset e3.js 12.1 KiB [emitted] (name: e3) -asset async1.js 964 bytes [emitted] (name: async1) -asset async2.js 964 bytes [emitted] (name: async2) -asset async3.js 964 bytes [emitted] (name: async3) +"asset e1.js 12 KiB [emitted] (name: e1) +asset e2.js 12 KiB [emitted] (name: e2) +asset e3.js 12 KiB [emitted] (name: e3) +asset async1.js 962 bytes [emitted] (name: async1) +asset async2.js 962 bytes [emitted] (name: async2) +asset async3.js 962 bytes [emitted] (name: async3) chunk (runtime: e3) e3.js (e3) 242 bytes (javascript) 6.63 KiB (runtime) [entry] [rendered] runtime modules 6.63 KiB 9 modules cacheable modules 242 bytes @@ -1816,7 +1816,7 @@ exports[`StatsTestCases should print correct stats for named-chunk-groups 1`] = "Chunk Group main 11.7 KiB = a-main.js Chunk Group async-a 1.07 KiB = a-52.js 257 bytes a-async-a.js 836 bytes Chunk Group async-b 1.07 KiB = a-52.js 257 bytes a-async-b.js 836 bytes -Chunk Group async-c 1.45 KiB = a-vendors.js 744 bytes a-async-c.js 741 bytes +Chunk Group async-c 1.45 KiB = a-vendors.js 740 bytes a-async-c.js 741 bytes chunk (runtime: main) a-52.js 149 bytes [rendered] split chunk (cache group: default) > ./a ./index.js 1:0-47 > ./b ./index.js 2:0-47 @@ -1843,7 +1843,7 @@ webpack x.x.x compiled successfully Entrypoint main 11.7 KiB = b-main.js Chunk Group async-a 1.07 KiB = b-52.js 257 bytes b-async-a.js 836 bytes Chunk Group async-b 1.07 KiB = b-52.js 257 bytes b-async-b.js 836 bytes -Chunk Group async-c 1.45 KiB = b-vendors.js 744 bytes b-async-c.js 741 bytes +Chunk Group async-c 1.45 KiB = b-vendors.js 740 bytes b-async-c.js 741 bytes chunk (runtime: main) b-52.js 149 bytes [rendered] split chunk (cache group: default) > ./a ./index.js 1:0-47 > ./b ./index.js 2:0-47 @@ -1954,7 +1954,7 @@ webpack x.x.x compiled successfully in X ms" exports[`StatsTestCases should print correct stats for output-module 1`] = ` "asset main.mjs 9.53 KiB [emitted] [javascript module] (name: main) -asset 52.mjs 358 bytes [emitted] [javascript module] +asset 52.mjs 356 bytes [emitted] [javascript module] runtime modules 5.76 KiB 7 modules orphan modules 38 bytes [orphan] 1 module cacheable modules 263 bytes @@ -3066,13 +3066,13 @@ webpack x.x.x compiled successfully" exports[`StatsTestCases should print correct stats for runtime-specific-used-exports 1`] = ` "production: - asset production-a.js 13.2 KiB [emitted] (name: a) - asset production-b.js 13.2 KiB [emitted] (name: b) - asset production-dx_js.js 1.16 KiB [emitted] - asset production-dw_js-_a6170.js 1.16 KiB [emitted] - asset production-dw_js-_a6171.js 1.16 KiB [emitted] - asset production-dy_js.js 1.14 KiB [emitted] - asset production-dz_js.js 1.14 KiB [emitted] + asset production-a.js 13.1 KiB [emitted] (name: a) + asset production-b.js 13.1 KiB [emitted] (name: b) + asset production-dw_js-_a6170.js 1.15 KiB [emitted] + asset production-dw_js-_a6171.js 1.15 KiB [emitted] + asset production-dx_js.js 1.15 KiB [emitted] + asset production-dy_js.js 1.13 KiB [emitted] + asset production-dz_js.js 1.13 KiB [emitted] asset production-c.js 93 bytes [emitted] (name: c) chunk (runtime: a) production-a.js (a) 605 bytes (javascript) 6.59 KiB (runtime) [entry] [rendered] runtime modules 6.59 KiB 9 modules @@ -3148,12 +3148,12 @@ exports[`StatsTestCases should print correct stats for runtime-specific-used-exp production (webpack x.x.x) compiled successfully in X ms development: - asset development-a.js 15.9 KiB [emitted] (name: a) - asset development-b.js 15.9 KiB [emitted] (name: b) - asset development-dw_js.js 2.11 KiB [emitted] - asset development-dx_js.js 2.11 KiB [emitted] - asset development-dy_js.js 2.11 KiB [emitted] - asset development-dz_js.js 2.11 KiB [emitted] + asset development-a.js 15.8 KiB [emitted] (name: a) + asset development-b.js 15.8 KiB [emitted] (name: b) + asset development-dw_js.js 2.09 KiB [emitted] + asset development-dx_js.js 2.09 KiB [emitted] + asset development-dy_js.js 2.09 KiB [emitted] + asset development-dz_js.js 2.09 KiB [emitted] asset development-c.js 1.13 KiB [emitted] (name: c) chunk (runtime: a) development-a.js (a) 605 bytes (javascript) 6.59 KiB (runtime) [entry] [rendered] runtime modules 6.59 KiB 9 modules @@ -3235,10 +3235,10 @@ development: global: asset global-a.js 13.3 KiB [emitted] (name: a) asset global-b.js 13.3 KiB [emitted] (name: b) - asset global-dw_js.js 1.16 KiB [emitted] - asset global-dx_js.js 1.16 KiB [emitted] - asset global-dy_js.js 1.16 KiB [emitted] - asset global-dz_js.js 1.16 KiB [emitted] + asset global-dw_js.js 1.15 KiB [emitted] + asset global-dx_js.js 1.15 KiB [emitted] + asset global-dy_js.js 1.15 KiB [emitted] + asset global-dz_js.js 1.15 KiB [emitted] asset global-c.js 93 bytes [emitted] (name: c) chunk (runtime: a) global-a.js (a) 605 bytes (javascript) 6.59 KiB (runtime) [entry] [rendered] runtime modules 6.59 KiB 9 modules @@ -3347,8 +3347,8 @@ webpack x.x.x compiled successfully in X ms" `; exports[`StatsTestCases should print correct stats for scope-hoisting-multi 1`] = ` -"Entrypoint first 14.4 KiB = a-vendor.js 419 bytes a-first.js 14 KiB -Entrypoint second 13.9 KiB = a-vendor.js 419 bytes a-second.js 13.5 KiB +"Entrypoint first 14.4 KiB = a-vendor.js 417 bytes a-first.js 14 KiB +Entrypoint second 13.9 KiB = a-vendor.js 417 bytes a-second.js 13.5 KiB runtime modules 15.2 KiB 20 modules orphan modules 37 bytes [orphan] 1 module cacheable modules 807 bytes @@ -3364,8 +3364,8 @@ cacheable modules 807 bytes ./common_lazy_shared.js 25 bytes [built] [code generated] webpack x.x.x compiled successfully in X ms -Entrypoint first 13.7 KiB = b-vendor.js 419 bytes b-first.js 13.3 KiB -Entrypoint second 13.5 KiB = b-vendor.js 419 bytes b-second.js 13.1 KiB +Entrypoint first 13.7 KiB = b-vendor.js 417 bytes b-first.js 13.3 KiB +Entrypoint second 13.5 KiB = b-vendor.js 417 bytes b-second.js 13.1 KiB runtime modules 15.2 KiB 20 modules cacheable modules 975 bytes code generated modules 857 bytes [code generated] @@ -3570,8 +3570,8 @@ exports[`StatsTestCases should print correct stats for split-chunks 1`] = ` "default: Entrypoint main 11.5 KiB = default/main.js Entrypoint a 12.6 KiB = default/a.js - Entrypoint b 3.94 KiB = default/b.js - Entrypoint c 3.94 KiB = default/c.js + Entrypoint b 3.93 KiB = default/b.js + Entrypoint c 3.93 KiB = default/c.js chunk (runtime: b) default/b.js (b) 196 bytes (javascript) 396 bytes (runtime) [entry] [rendered] > ./b b dependent modules 80 bytes [dependent] 4 modules @@ -3629,9 +3629,9 @@ exports[`StatsTestCases should print correct stats for split-chunks 1`] = ` all-chunks: Entrypoint main 11.5 KiB = all-chunks/main.js - Entrypoint a 15 KiB = all-chunks/282.js 414 bytes all-chunks/954.js 414 bytes all-chunks/767.js 414 bytes all-chunks/390.js 414 bytes all-chunks/a.js 13.4 KiB - Entrypoint b 8.14 KiB = all-chunks/282.js 414 bytes all-chunks/954.js 414 bytes all-chunks/767.js 414 bytes all-chunks/568.js 414 bytes all-chunks/b.js 6.52 KiB - Entrypoint c 8.14 KiB = all-chunks/282.js 414 bytes all-chunks/769.js 414 bytes all-chunks/767.js 414 bytes all-chunks/568.js 414 bytes all-chunks/c.js 6.52 KiB + Entrypoint a 15 KiB = all-chunks/282.js 412 bytes all-chunks/954.js 412 bytes all-chunks/767.js 412 bytes all-chunks/390.js 412 bytes all-chunks/a.js 13.4 KiB + Entrypoint b 8.13 KiB = all-chunks/282.js 412 bytes all-chunks/954.js 412 bytes all-chunks/767.js 412 bytes all-chunks/568.js 412 bytes all-chunks/b.js 6.52 KiB + Entrypoint c 8.13 KiB = all-chunks/282.js 412 bytes all-chunks/769.js 412 bytes all-chunks/767.js 412 bytes all-chunks/568.js 412 bytes all-chunks/c.js 6.52 KiB chunk (runtime: b) all-chunks/b.js (b) 116 bytes (javascript) 2.76 KiB (runtime) ={282}= ={568}= ={767}= ={954}= [entry] [rendered] > ./b b runtime modules 2.76 KiB 4 modules @@ -3701,9 +3701,9 @@ all-chunks: manual: Entrypoint main 11.3 KiB = manual/main.js - Entrypoint a 14.8 KiB = manual/vendors.js 1.05 KiB manual/a.js 13.7 KiB - Entrypoint b 8.45 KiB = manual/vendors.js 1.05 KiB manual/b.js 7.4 KiB - Entrypoint c 8.45 KiB = manual/vendors.js 1.05 KiB manual/c.js 7.4 KiB + Entrypoint a 14.8 KiB = manual/vendors.js 1.04 KiB manual/a.js 13.7 KiB + Entrypoint b 8.44 KiB = manual/vendors.js 1.04 KiB manual/b.js 7.39 KiB + Entrypoint c 8.44 KiB = manual/vendors.js 1.04 KiB manual/c.js 7.39 KiB chunk (runtime: b) manual/b.js (b) 156 bytes (javascript) 2.76 KiB (runtime) ={216}= [entry] [rendered] > ./b b > x b @@ -3771,9 +3771,9 @@ manual: name-too-long: Entrypoint main 11.5 KiB = name-too-long/main.js - Entrypoint aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 15 KiB = name-too-long/282.js 414 bytes name-too-long/954.js 414 bytes name-too-long/767.js 414 bytes name-too-long/390.js 414 bytes name-too-long/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.js 13.4 KiB - Entrypoint bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 8.14 KiB = name-too-long/282.js 414 bytes name-too-long/954.js 414 bytes name-too-long/767.js 414 bytes name-too-long/568.js 414 bytes name-too-long/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js 6.52 KiB - Entrypoint cccccccccccccccccccccccccccccc 8.14 KiB = name-too-long/282.js 414 bytes name-too-long/769.js 414 bytes name-too-long/767.js 414 bytes name-too-long/568.js 414 bytes name-too-long/cccccccccccccccccccccccccccccc.js 6.52 KiB + Entrypoint aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 15 KiB = name-too-long/282.js 412 bytes name-too-long/954.js 412 bytes name-too-long/767.js 412 bytes name-too-long/390.js 412 bytes name-too-long/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.js 13.4 KiB + Entrypoint bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 8.13 KiB = name-too-long/282.js 412 bytes name-too-long/954.js 412 bytes name-too-long/767.js 412 bytes name-too-long/568.js 412 bytes name-too-long/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js 6.52 KiB + Entrypoint cccccccccccccccccccccccccccccc 8.13 KiB = name-too-long/282.js 412 bytes name-too-long/769.js 412 bytes name-too-long/767.js 412 bytes name-too-long/568.js 412 bytes name-too-long/cccccccccccccccccccccccccccccc.js 6.52 KiB chunk (runtime: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, main) name-too-long/async-g.js (async-g) 45 bytes <{282}> <{390}> <{751}> <{767}> <{794}> <{954}> ={568}= [rendered] > ./g ./a.js 6:0-47 ./g.js 45 bytes [built] [code generated] @@ -3844,8 +3844,8 @@ name-too-long: custom-chunks-filter: Entrypoint main 11.5 KiB = custom-chunks-filter/main.js Entrypoint a 12.6 KiB = custom-chunks-filter/a.js - Entrypoint b 8.14 KiB = custom-chunks-filter/282.js 414 bytes custom-chunks-filter/954.js 414 bytes custom-chunks-filter/568.js 414 bytes custom-chunks-filter/767.js 414 bytes custom-chunks-filter/b.js 6.52 KiB - Entrypoint c 8.14 KiB = custom-chunks-filter/282.js 414 bytes custom-chunks-filter/769.js 414 bytes custom-chunks-filter/568.js 414 bytes custom-chunks-filter/767.js 414 bytes custom-chunks-filter/c.js 6.52 KiB + Entrypoint b 8.13 KiB = custom-chunks-filter/282.js 412 bytes custom-chunks-filter/954.js 412 bytes custom-chunks-filter/568.js 412 bytes custom-chunks-filter/767.js 412 bytes custom-chunks-filter/b.js 6.52 KiB + Entrypoint c 8.13 KiB = custom-chunks-filter/282.js 412 bytes custom-chunks-filter/769.js 412 bytes custom-chunks-filter/568.js 412 bytes custom-chunks-filter/767.js 412 bytes custom-chunks-filter/c.js 6.52 KiB chunk (runtime: b) custom-chunks-filter/b.js (b) 116 bytes (javascript) 2.76 KiB (runtime) ={282}= ={568}= ={767}= ={954}= [entry] [rendered] > ./b b runtime modules 2.76 KiB 4 modules @@ -3909,9 +3909,9 @@ custom-chunks-filter: custom-chunks-filter-in-cache-groups: Entrypoint main 11.3 KiB = custom-chunks-filter-in-cache-groups/main.js - Entrypoint a 14.6 KiB = custom-chunks-filter-in-cache-groups/176.js 864 bytes custom-chunks-filter-in-cache-groups/a.js 13.8 KiB - Entrypoint b 8.45 KiB = custom-chunks-filter-in-cache-groups/vendors.js 1.05 KiB custom-chunks-filter-in-cache-groups/b.js 7.4 KiB - Entrypoint c 8.45 KiB = custom-chunks-filter-in-cache-groups/vendors.js 1.05 KiB custom-chunks-filter-in-cache-groups/c.js 7.4 KiB + Entrypoint a 14.6 KiB = custom-chunks-filter-in-cache-groups/176.js 860 bytes custom-chunks-filter-in-cache-groups/a.js 13.7 KiB + Entrypoint b 8.44 KiB = custom-chunks-filter-in-cache-groups/vendors.js 1.05 KiB custom-chunks-filter-in-cache-groups/b.js 7.39 KiB + Entrypoint c 8.44 KiB = custom-chunks-filter-in-cache-groups/vendors.js 1.05 KiB custom-chunks-filter-in-cache-groups/c.js 7.39 KiB chunk (runtime: b) custom-chunks-filter-in-cache-groups/b.js (b) 156 bytes (javascript) 2.76 KiB (runtime) ={216}= [entry] [rendered] > ./b b > x b @@ -4109,7 +4109,7 @@ default (webpack x.x.x) compiled successfully" `; exports[`StatsTestCases should print correct stats for split-chunks-issue-6696 1`] = ` -"Entrypoint main 13.4 KiB = vendors.js 414 bytes main.js 13 KiB +"Entrypoint main 13.4 KiB = vendors.js 412 bytes main.js 13 KiB chunk (runtime: main) main.js (main) 134 bytes (javascript) 7.57 KiB (runtime) ={216}= >{334}< >{794}< [entry] [rendered] > ./ main runtime modules 7.57 KiB 10 modules @@ -4129,9 +4129,9 @@ default (webpack x.x.x) compiled successfully" `; exports[`StatsTestCases should print correct stats for split-chunks-issue-7401 1`] = ` -"Entrypoint a 6.42 KiB = 282.js 414 bytes a.js 6.02 KiB +"Entrypoint a 6.42 KiB = 282.js 412 bytes a.js 6.02 KiB Entrypoint b 10.9 KiB = b.js -Chunk Group c 797 bytes = 282.js 414 bytes c.js 383 bytes +Chunk Group c 795 bytes = 282.js 412 bytes c.js 383 bytes chunk (runtime: b) b.js (b) 43 bytes (javascript) 6.61 KiB (runtime) >{282}< >{459}< [entry] [rendered] > ./b b runtime modules 6.61 KiB 9 modules @@ -4647,11 +4647,11 @@ exports[`StatsTestCases should print correct stats for split-chunks-runtime-spec "used-exports: asset used-exports-c.js 6.04 KiB [emitted] (name: c) asset used-exports-b.js 6.03 KiB [emitted] (name: b) - asset used-exports-332.js 424 bytes [emitted] + asset used-exports-332.js 422 bytes [emitted] asset used-exports-a.js 257 bytes [emitted] (name: a) Entrypoint a 257 bytes = used-exports-a.js - Entrypoint b 6.44 KiB = used-exports-332.js 424 bytes used-exports-b.js 6.03 KiB - Entrypoint c 6.45 KiB = used-exports-332.js 424 bytes used-exports-c.js 6.04 KiB + Entrypoint b 6.44 KiB = used-exports-332.js 422 bytes used-exports-b.js 6.03 KiB + Entrypoint c 6.45 KiB = used-exports-332.js 422 bytes used-exports-c.js 6.04 KiB chunk (runtime: b) used-exports-b.js (b) 54 bytes (javascript) 2.75 KiB (runtime) [entry] [rendered] runtime modules 2.75 KiB 4 modules ./b.js 54 bytes [built] [code generated] @@ -4668,10 +4668,10 @@ no-used-exports: asset no-used-exports-c.js 6.04 KiB [emitted] (name: c) asset no-used-exports-a.js 6.03 KiB [emitted] (name: a) asset no-used-exports-b.js 6.03 KiB [emitted] (name: b) - asset no-used-exports-332.js 447 bytes [emitted] - Entrypoint a 6.47 KiB = no-used-exports-332.js 447 bytes no-used-exports-a.js 6.03 KiB - Entrypoint b 6.47 KiB = no-used-exports-332.js 447 bytes no-used-exports-b.js 6.03 KiB - Entrypoint c 6.47 KiB = no-used-exports-332.js 447 bytes no-used-exports-c.js 6.04 KiB + asset no-used-exports-332.js 443 bytes [emitted] + Entrypoint a 6.46 KiB = no-used-exports-332.js 443 bytes no-used-exports-a.js 6.03 KiB + Entrypoint b 6.46 KiB = no-used-exports-332.js 443 bytes no-used-exports-b.js 6.03 KiB + Entrypoint c 6.47 KiB = no-used-exports-332.js 443 bytes no-used-exports-c.js 6.04 KiB chunk (runtime: b) no-used-exports-b.js (b) 54 bytes (javascript) 2.75 KiB (runtime) [entry] [rendered] runtime modules 2.75 KiB 4 modules ./b.js 54 bytes [built] [code generated] @@ -4689,10 +4689,10 @@ global: asset global-c.js 6.04 KiB [emitted] (name: c) asset global-a.js 6.03 KiB [emitted] (name: a) asset global-b.js 6.03 KiB [emitted] (name: b) - asset global-332.js 447 bytes [emitted] - Entrypoint a 6.47 KiB = global-332.js 447 bytes global-a.js 6.03 KiB - Entrypoint b 6.47 KiB = global-332.js 447 bytes global-b.js 6.03 KiB - Entrypoint c 6.47 KiB = global-332.js 447 bytes global-c.js 6.04 KiB + asset global-332.js 443 bytes [emitted] + Entrypoint a 6.46 KiB = global-332.js 443 bytes global-a.js 6.03 KiB + Entrypoint b 6.46 KiB = global-332.js 443 bytes global-b.js 6.03 KiB + Entrypoint c 6.47 KiB = global-332.js 443 bytes global-c.js 6.04 KiB chunk (runtime: b) global-b.js (b) 54 bytes (javascript) 2.75 KiB (runtime) [entry] [rendered] runtime modules 2.75 KiB 4 modules ./b.js 54 bytes [built] [code generated] @@ -4708,7 +4708,7 @@ global: `; exports[`StatsTestCases should print correct stats for tree-shaking 1`] = ` -"asset bundle.js 6.89 KiB [emitted] (name: main) +"asset bundle.js 6.88 KiB [emitted] (name: main) runtime modules 663 bytes 3 modules orphan modules 14 bytes [orphan] 1 module cacheable modules 782 bytes @@ -4760,9 +4760,9 @@ webpack x.x.x compiled with 1 warning in X ms" exports[`StatsTestCases should print correct stats for wasm-explorer-examples-sync 1`] = ` "assets by path *.js 21.7 KiB asset bundle.js 16.2 KiB [emitted] (name: main) - asset 325.bundle.js 3.9 KiB [emitted] + asset 325.bundle.js 3.89 KiB [emitted] asset 795.bundle.js 557 bytes [emitted] - asset 526.bundle.js 366 bytes [emitted] (id hint: vendors) + asset 526.bundle.js 364 bytes [emitted] (id hint: vendors) asset 189.bundle.js 243 bytes [emitted] asset 517.bundle.js 243 bytes [emitted] asset 20.bundle.js 241 bytes [emitted] From c70277db4e4e71853b4f766119b4aba0b08dd2b6 Mon Sep 17 00:00:00 2001 From: Ben Worline Date: Tue, 9 May 2023 15:13:20 -0700 Subject: [PATCH 7/7] cspell lint fix --- test/helpers/expectSource.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/helpers/expectSource.js b/test/helpers/expectSource.js index 583b16b90..b8ad4c43f 100644 --- a/test/helpers/expectSource.js +++ b/test/helpers/expectSource.js @@ -4,7 +4,7 @@ var regexEscape = require("./regexEscape.js"); // being tested for, so we have to use the "DO NOT MATCH BELOW..." technique to exclude the actual testing code from the test. // Place your jest 'expect' calls below a line containing the DO NOT MATCH BELOW... string constructed below. See other tests for examples. -// Break up the match string so we don't match it in these expect* funtions either. +// Break up the match string so we don't match it in these expect* functions either. const doNotMatch = ["DO", "NOT", "MATCH", "BELOW", "THIS", "LINE"].join(" "); function expectSourceToContain(source, str) {