webpack 5.90.0 → 5.90.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of webpack might be problematic. Click here for more details.

Files changed (38) hide show
  1. package/lib/APIPlugin.js +16 -12
  2. package/lib/Compilation.js +1 -1
  3. package/lib/ConditionalInitFragment.js +3 -3
  4. package/lib/DefinePlugin.js +47 -26
  5. package/lib/EvalSourceMapDevToolPlugin.js +1 -1
  6. package/lib/InitFragment.js +7 -7
  7. package/lib/NodeStuffPlugin.js +3 -3
  8. package/lib/Stats.js +4 -0
  9. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  10. package/lib/buildChunkGraph.js +101 -15
  11. package/lib/config/browserslistTargetHandler.js +18 -16
  12. package/lib/config/defaults.js +1 -0
  13. package/lib/dependencies/AMDDefineDependency.js +4 -4
  14. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +126 -34
  15. package/lib/dependencies/AMDPlugin.js +11 -4
  16. package/lib/dependencies/AMDRequireArrayDependency.js +13 -1
  17. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +159 -43
  18. package/lib/dependencies/AMDRequireDependency.js +2 -2
  19. package/lib/dependencies/AMDRequireItemDependency.js +1 -1
  20. package/lib/dependencies/ExportsInfoDependency.js +6 -12
  21. package/lib/dependencies/ExternalModuleDependency.js +9 -0
  22. package/lib/dependencies/ExternalModuleInitFragment.js +10 -3
  23. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  24. package/lib/dependencies/HarmonyImportSpecifierDependency.js +1 -1
  25. package/lib/dependencies/ImportParserPlugin.js +1 -0
  26. package/lib/dependencies/LocalModuleDependency.js +1 -1
  27. package/lib/dependencies/WorkerPlugin.js +3 -2
  28. package/lib/dependencies/getFunctionExpression.js +2 -2
  29. package/lib/hmr/HotModuleReplacement.runtime.js +1 -1
  30. package/lib/javascript/JavascriptParser.js +212 -74
  31. package/lib/optimize/MangleExportsPlugin.js +5 -1
  32. package/lib/runtime/AutoPublicPathRuntimeModule.js +1 -1
  33. package/lib/util/chainedImports.js +7 -6
  34. package/lib/util/comparators.js +59 -23
  35. package/lib/util/numberHash.js +53 -52
  36. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +53 -28
  37. package/package.json +4 -59
  38. package/types.d.ts +101 -74
@@ -88,7 +88,11 @@ const mangleExportsInfo = (deterministic, exportsInfo, isNamespace) => {
88
88
  used === UsageState.OnlyPropertiesUsed ||
89
89
  used === UsageState.Unused
90
90
  ) {
91
- mangleExportsInfo(deterministic, exportInfo.exportsInfo, false);
91
+ mangleExportsInfo(
92
+ deterministic,
93
+ /** @type {ExportsInfo} */ (exportInfo.exportsInfo),
94
+ false
95
+ );
92
96
  }
93
97
  }
94
98
  }
@@ -56,7 +56,7 @@ class AutoPublicPathRuntimeModule extends RuntimeModule {
56
56
  "if(scripts.length) {",
57
57
  Template.indent([
58
58
  "var i = scripts.length - 1;",
59
- "while (i > -1 && !scriptUrl) scriptUrl = scripts[i--].src;"
59
+ "while (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;"
60
60
  ]),
61
61
  "}"
62
62
  ]),
@@ -6,6 +6,7 @@
6
6
  "use strict";
7
7
 
8
8
  /** @typedef {import("../Dependency")} Dependency */
9
+ /** @typedef {import("../Module")} Module */
9
10
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
10
11
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
11
12
 
@@ -17,7 +18,7 @@
17
18
  * because minifiers treat quoted accessors differently. e.g. import { a } from "./module"; a["b"] vs a.b
18
19
  * @param {string[]} untrimmedIds chained ids
19
20
  * @param {Range} untrimmedRange range encompassing allIds
20
- * @param {Range[]} ranges cumulative range of ids for each of allIds
21
+ * @param {Range[] | undefined} ranges cumulative range of ids for each of allIds
21
22
  * @param {ModuleGraph} moduleGraph moduleGraph
22
23
  * @param {Dependency} dependency dependency
23
24
  * @returns {{trimmedIds: string[], trimmedRange: Range}} computed trimmed ids and cumulative range of those ids
@@ -44,7 +45,7 @@ exports.getTrimmedIdsAndRange = (
44
45
  ranges === undefined
45
46
  ? -1 /* trigger failure case below */
46
47
  : ranges.length + (trimmedIds.length - untrimmedIds.length);
47
- if (idx < 0 || idx >= ranges.length) {
48
+ if (idx < 0 || idx >= /** @type {Range[]} */ (ranges).length) {
48
49
  // cspell:ignore minifiers
49
50
  // Should not happen but we can't throw an error here because of backward compatibility with
50
51
  // external plugins in wp5. Instead, we just disable trimming for now. This may break some minifiers.
@@ -52,7 +53,7 @@ exports.getTrimmedIdsAndRange = (
52
53
  // TODO webpack 6 remove the "trimmedIds = ids" above and uncomment the following line instead.
53
54
  // throw new Error("Missing range starts data for id replacement trimming.");
54
55
  } else {
55
- trimmedRange = ranges[idx];
56
+ trimmedRange = /** @type {Range[]} */ (ranges)[idx];
56
57
  }
57
58
  }
58
59
 
@@ -68,11 +69,11 @@ exports.getTrimmedIdsAndRange = (
68
69
  * @returns {string[]} trimmed ids
69
70
  */
70
71
  function trimIdsToThoseImported(ids, moduleGraph, dependency) {
72
+ /** @type {string[]} */
71
73
  let trimmedIds = [];
72
- const exportsInfo = moduleGraph.getExportsInfo(
73
- moduleGraph.getModule(dependency)
74
+ let currentExportsInfo = moduleGraph.getExportsInfo(
75
+ /** @type {Module} */ (moduleGraph.getModule(dependency))
74
76
  );
75
- let currentExportsInfo = /** @type {ExportsInfo=} */ exportsInfo;
76
77
  for (let i = 0; i < ids.length; i++) {
77
78
  if (i === 0 && ids[i] === "default") {
78
79
  continue; // ExportInfo for the next level under default is still at the root ExportsInfo, so don't advance currentExportsInfo
@@ -92,32 +92,68 @@ exports.compareNumbers = compareNumbers;
92
92
  * @returns {-1|0|1} compare result
93
93
  */
94
94
  const compareStringsNumeric = (a, b) => {
95
- const partsA = a.split(/(\d+)/);
96
- const partsB = b.split(/(\d+)/);
97
- const len = Math.min(partsA.length, partsB.length);
98
- for (let i = 0; i < len; i++) {
99
- const pA = partsA[i];
100
- const pB = partsB[i];
101
- if (i % 2 === 0) {
102
- if (pA.length > pB.length) {
103
- if (pA.slice(0, pB.length) > pB) return 1;
104
- return -1;
105
- } else if (pB.length > pA.length) {
106
- if (pB.slice(0, pA.length) > pA) return -1;
107
- return 1;
108
- } else {
109
- if (pA < pB) return -1;
110
- if (pA > pB) return 1;
111
- }
95
+ const aLength = a.length;
96
+ const bLength = b.length;
97
+
98
+ let aChar = 0;
99
+ let bChar = 0;
100
+
101
+ let aIsDigit = false;
102
+ let bIsDigit = false;
103
+ let i = 0;
104
+ let j = 0;
105
+ while (i < aLength && j < bLength) {
106
+ aChar = a.charCodeAt(i);
107
+ bChar = b.charCodeAt(j);
108
+
109
+ aIsDigit = aChar >= 48 && aChar <= 57;
110
+ bIsDigit = bChar >= 48 && bChar <= 57;
111
+
112
+ if (!aIsDigit && !bIsDigit) {
113
+ if (aChar < bChar) return -1;
114
+ if (aChar > bChar) return 1;
115
+ i++;
116
+ j++;
117
+ } else if (aIsDigit && !bIsDigit) {
118
+ // This segment of a is shorter than in b
119
+ return 1;
120
+ } else if (!aIsDigit && bIsDigit) {
121
+ // This segment of b is shorter than in a
122
+ return -1;
112
123
  } else {
113
- const nA = +pA;
114
- const nB = +pB;
115
- if (nA < nB) return -1;
116
- if (nA > nB) return 1;
124
+ let aNumber = aChar - 48;
125
+ let bNumber = bChar - 48;
126
+
127
+ while (++i < aLength) {
128
+ aChar = a.charCodeAt(i);
129
+ if (aChar < 48 || aChar > 57) break;
130
+ aNumber = aNumber * 10 + aChar - 48;
131
+ }
132
+
133
+ while (++j < bLength) {
134
+ bChar = b.charCodeAt(j);
135
+ if (bChar < 48 || bChar > 57) break;
136
+ bNumber = bNumber * 10 + bChar - 48;
137
+ }
138
+
139
+ if (aNumber < bNumber) return -1;
140
+ if (aNumber > bNumber) return 1;
117
141
  }
118
142
  }
119
- if (partsB.length < partsA.length) return 1;
120
- if (partsB.length > partsA.length) return -1;
143
+
144
+ if (j < bLength) {
145
+ // a is shorter than b
146
+ bChar = b.charCodeAt(j);
147
+ bIsDigit = bChar >= 48 && bChar <= 57;
148
+ return bIsDigit ? -1 : 1;
149
+ }
150
+ if (i < aLength) {
151
+ // b is shorter than a
152
+ aChar = a.charCodeAt(i);
153
+ aIsDigit = aChar >= 48 && aChar <= 57;
154
+ return aIsDigit ? 1 : -1;
155
+ }
156
+
121
157
  return 0;
122
158
  };
123
159
  exports.compareStringsNumeric = compareStringsNumeric;
@@ -6,36 +6,69 @@
6
6
  "use strict";
7
7
 
8
8
  /**
9
- * The maximum safe integer value for 32-bit integers.
9
+ * Threshold for switching from 32-bit to 64-bit hashing. This is selected to ensure that the bias towards lower modulo results when using 32-bit hashing is <0.5%.
10
10
  * @type {number}
11
11
  */
12
- const SAFE_LIMIT = 0x80000000;
12
+ const FNV_64_THRESHOLD = 1 << 24;
13
13
 
14
14
  /**
15
- * The maximum safe integer value for 32-bit integers minus one. This is used
16
- * in the algorithm to ensure that intermediate hash values do not exceed the
17
- * 32-bit integer limit.
15
+ * The FNV-1a offset basis for 32-bit hash values.
18
16
  * @type {number}
19
17
  */
20
- const SAFE_PART = SAFE_LIMIT - 1;
21
-
18
+ const FNV_OFFSET_32 = 2166136261;
22
19
  /**
23
- * The number of 32-bit integers used to store intermediate hash values.
20
+ * The FNV-1a prime for 32-bit hash values.
24
21
  * @type {number}
25
22
  */
26
- const COUNT = 4;
23
+ const FNV_PRIME_32 = 16777619;
24
+ /**
25
+ * The mask for a positive 32-bit signed integer.
26
+ * @type {number}
27
+ */
28
+ const MASK_31 = 0x7fffffff;
29
+
30
+ /**
31
+ * The FNV-1a offset basis for 64-bit hash values.
32
+ * @type {bigint}
33
+ */
34
+ const FNV_OFFSET_64 = BigInt("0xCBF29CE484222325");
35
+ /**
36
+ * The FNV-1a prime for 64-bit hash values.
37
+ * @type {bigint}
38
+ */
39
+ const FNV_PRIME_64 = BigInt("0x100000001B3");
27
40
 
28
41
  /**
29
- * An array used to store intermediate hash values during the calculation.
30
- * @type {number[]}
42
+ * Computes a 32-bit FNV-1a hash value for the given string.
43
+ * See https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function
44
+ * @param {string} str The input string to hash
45
+ * @returns {number} - The computed hash value.
31
46
  */
32
- const arr = [0, 0, 0, 0, 0];
47
+ function fnv1a32(str) {
48
+ let hash = FNV_OFFSET_32;
49
+ for (let i = 0, len = str.length; i < len; i++) {
50
+ hash ^= str.charCodeAt(i);
51
+ // Use Math.imul to do c-style 32-bit multiplication and keep only the 32 least significant bits
52
+ hash = Math.imul(hash, FNV_PRIME_32);
53
+ }
54
+ // Force the result to be positive
55
+ return hash & MASK_31;
56
+ }
33
57
 
34
58
  /**
35
- * An array of prime numbers used in the hash calculation.
36
- * @type {number[]}
59
+ * Computes a 64-bit FNV-1a hash value for the given string.
60
+ * See https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function
61
+ * @param {string} str The input string to hash
62
+ * @returns {bigint} - The computed hash value.
37
63
  */
38
- const primes = [3, 7, 17, 19];
64
+ function fnv1a64(str) {
65
+ let hash = FNV_OFFSET_64;
66
+ for (let i = 0, len = str.length; i < len; i++) {
67
+ hash ^= BigInt(str.charCodeAt(i));
68
+ hash = BigInt.asUintN(64, hash * FNV_PRIME_64);
69
+ }
70
+ return hash;
71
+ }
39
72
 
40
73
  /**
41
74
  * Computes a hash value for the given string and range. This hashing algorithm is a modified
@@ -53,47 +86,15 @@ const primes = [3, 7, 17, 19];
53
86
  *
54
87
  * ```js
55
88
  * const numberHash = require("webpack/lib/util/numberHash");
56
- * numberHash("hello", 1000); // 57
57
- * numberHash("hello world"); // 990
89
+ * numberHash("hello", 1000); // 73
90
+ * numberHash("hello world"); // 72
58
91
  * ```
59
92
  *
60
93
  */
61
94
  module.exports = (str, range) => {
62
- /**
63
- * Initialize the array with zeros before it is used
64
- * to store intermediate hash values.
65
- */
66
- arr.fill(0);
67
- // For each character in the string
68
- for (let i = 0; i < str.length; i++) {
69
- // Get the character code.
70
- const c = str.charCodeAt(i);
71
-
72
- // For each 32-bit integer used to store the hash value
73
- // add the character code to the current hash value and multiply by the prime number and
74
- // add the previous 32-bit integer.
75
- arr[0] = (arr[0] + c * primes[0] + arr[3]) & SAFE_PART;
76
- arr[1] = (arr[1] + c * primes[1] + arr[0]) & SAFE_PART;
77
- arr[2] = (arr[2] + c * primes[2] + arr[1]) & SAFE_PART;
78
- arr[3] = (arr[3] + c * primes[3] + arr[2]) & SAFE_PART;
79
-
80
- // For each 32-bit integer used to store the hash value
81
- // XOR the current hash value with the value of the next 32-bit integer.
82
- arr[0] = arr[0] ^ (arr[arr[0] % COUNT] >> 1);
83
- arr[1] = arr[1] ^ (arr[arr[1] % COUNT] >> 1);
84
- arr[2] = arr[2] ^ (arr[arr[2] % COUNT] >> 1);
85
- arr[3] = arr[3] ^ (arr[arr[3] % COUNT] >> 1);
86
- }
87
-
88
- if (range <= SAFE_PART) {
89
- return (arr[0] + arr[1] + arr[2] + arr[3]) % range;
95
+ if (range < FNV_64_THRESHOLD) {
96
+ return fnv1a32(str) % range;
90
97
  } else {
91
- // Calculate the range extension.
92
- const rangeExt = Math.floor(range / SAFE_LIMIT);
93
-
94
- const sum1 = (arr[0] + arr[2]) & SAFE_PART;
95
- const sum2 = (arr[0] + arr[2]) % rangeExt;
96
-
97
- return (sum2 * SAFE_LIMIT + sum1) % range;
98
+ return Number(fnv1a64(str) % BigInt(range));
98
99
  }
99
100
  };
@@ -52,38 +52,63 @@ class AsyncWasmLoadingRuntimeModule extends RuntimeModule {
52
52
  runtime: chunk.runtime
53
53
  }
54
54
  );
55
- return `${fn} = ${runtimeTemplate.basicFunction(
56
- "exports, wasmModuleId, wasmModuleHash, importsObj",
57
- [
58
- `var req = ${this.generateLoadBinaryCode(wasmModuleSrcPath)};`,
59
- this.supportsStreaming
60
- ? Template.asString([
61
- "if (typeof WebAssembly.instantiateStreaming === 'function') {",
55
+
56
+ const loader = this.generateLoadBinaryCode(wasmModuleSrcPath);
57
+ const fallback = [
58
+ `.then(${runtimeTemplate.returningFunction("x.arrayBuffer()", "x")})`,
59
+ `.then(${runtimeTemplate.returningFunction(
60
+ "WebAssembly.instantiate(bytes, importsObj)",
61
+ "bytes"
62
+ )})`,
63
+ `.then(${runtimeTemplate.returningFunction(
64
+ "Object.assign(exports, res.instance.exports)",
65
+ "res"
66
+ )})`
67
+ ];
68
+ const getStreaming = () => {
69
+ const concat = (/** @type {string[]} */ ...text) => text.join("");
70
+ return [
71
+ `var req = ${loader};`,
72
+ `var fallback = ${runtimeTemplate.returningFunction(Template.asString(["req", Template.indent(fallback)]))};`,
73
+ concat(
74
+ "return req.then(",
75
+ runtimeTemplate.basicFunction("res", [
76
+ `if (typeof WebAssembly.instantiateStreaming === "function") {`,
77
+ Template.indent([
78
+ "return WebAssembly.instantiateStreaming(res, importsObj)",
62
79
  Template.indent([
63
- "return WebAssembly.instantiateStreaming(req, importsObj)",
80
+ ".then(",
64
81
  Template.indent([
65
- `.then(${runtimeTemplate.returningFunction(
82
+ runtimeTemplate.returningFunction(
66
83
  "Object.assign(exports, res.instance.exports)",
67
84
  "res"
68
- )});`
69
- ])
70
- ]),
71
- "}"
72
- ])
73
- : "// no support for streaming compilation",
74
- "return req",
75
- Template.indent([
76
- `.then(${runtimeTemplate.returningFunction("x.arrayBuffer()", "x")})`,
77
- `.then(${runtimeTemplate.returningFunction(
78
- "WebAssembly.instantiate(bytes, importsObj)",
79
- "bytes"
80
- )})`,
81
- `.then(${runtimeTemplate.returningFunction(
82
- "Object.assign(exports, res.instance.exports)",
83
- "res"
84
- )});`
85
- ])
86
- ]
85
+ ) + ",",
86
+ runtimeTemplate.basicFunction("e", [
87
+ `if(res.headers.get("Content-Type") !== "application/wasm") {`,
88
+ Template.indent([
89
+ 'console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n", e);',
90
+ "return fallback();"
91
+ ]),
92
+ "}",
93
+ "throw e;"
94
+ ])
95
+ ]),
96
+ ");"
97
+ ])
98
+ ]),
99
+ "}",
100
+ "return fallback();"
101
+ ]),
102
+ ");"
103
+ )
104
+ ];
105
+ };
106
+
107
+ return `${fn} = ${runtimeTemplate.basicFunction(
108
+ "exports, wasmModuleId, wasmModuleHash, importsObj",
109
+ this.supportsStreaming
110
+ ? getStreaming()
111
+ : [`return ${loader}`, Template.indent(fallback) + ";"]
87
112
  )};`;
88
113
  }
89
114
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "webpack",
3
- "version": "5.90.0",
3
+ "version": "5.90.2",
4
4
  "author": "Tobias Koppers @sokra",
5
5
  "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.",
6
6
  "license": "MIT",
@@ -57,7 +57,7 @@
57
57
  "eslint": "^8.48.0",
58
58
  "eslint-config-prettier": "^9.1.0",
59
59
  "eslint-plugin-jest": "^27.6.3",
60
- "eslint-plugin-jsdoc": "^43.0.5",
60
+ "eslint-plugin-jsdoc": "^48.1.0",
61
61
  "eslint-plugin-n": "^16.6.2",
62
62
  "eslint-plugin-prettier": "^5.1.3",
63
63
  "file-loader": "^6.0.0",
@@ -84,6 +84,7 @@
84
84
  "mini-svg-data-uri": "^1.2.3",
85
85
  "nyc": "^15.1.0",
86
86
  "open-cli": "^7.2.0",
87
+ "prettier-2": "npm:prettier@^2",
87
88
  "prettier": "^3.2.1",
88
89
  "pretty-format": "^29.5.0",
89
90
  "pug": "^3.0.0",
@@ -158,7 +159,7 @@
158
159
  "special-lint-fix": "node node_modules/tooling/inherit-types --write && node node_modules/tooling/format-schemas --write && node tooling/generate-runtime-code.js --write && node tooling/generate-wasm-code.js --write && node node_modules/tooling/format-file-header --write && node node_modules/tooling/compile-to-definitions --write && node node_modules/tooling/precompile-schemas --write && node node_modules/tooling/generate-types --no-template-literals --write",
159
160
  "fix": "yarn code-lint --fix && yarn special-lint-fix && yarn pretty-lint-fix",
160
161
  "prepare": "husky install",
161
- "pretty-lint-base": "prettier --cache .",
162
+ "pretty-lint-base": "node node_modules/prettier/bin/prettier.cjs --cache .",
162
163
  "pretty-lint-fix": "yarn pretty-lint-base --loglevel warn --write",
163
164
  "pretty-lint": "yarn pretty-lint-base --check",
164
165
  "yarn-lint": "yarn-deduplicate --fail --list -s highest yarn.lock",
@@ -186,61 +187,5 @@
186
187
  "*.md|{.github,benchmark,bin,examples,hot,lib,schemas,setup,tooling}/**/*.{md,yml,yaml,js,json}": [
187
188
  "cspell"
188
189
  ]
189
- },
190
- "jest": {
191
- "forceExit": true,
192
- "setupFilesAfterEnv": [
193
- "<rootDir>/test/setupTestFramework.js"
194
- ],
195
- "testMatch": [
196
- "<rootDir>/test/*.test.js",
197
- "<rootDir>/test/*.basictest.js",
198
- "<rootDir>/test/*.longtest.js",
199
- "<rootDir>/test/*.unittest.js"
200
- ],
201
- "watchPathIgnorePatterns": [
202
- "<rootDir>/.git",
203
- "<rootDir>/node_modules",
204
- "<rootDir>/test/js",
205
- "<rootDir>/test/browsertest/js",
206
- "<rootDir>/test/fixtures/temp-cache-fixture",
207
- "<rootDir>/test/fixtures/temp-",
208
- "<rootDir>/benchmark",
209
- "<rootDir>/assembly",
210
- "<rootDir>/tooling",
211
- "<rootDir>/examples/*/dist",
212
- "<rootDir>/coverage",
213
- "<rootDir>/.eslintcache"
214
- ],
215
- "modulePathIgnorePatterns": [
216
- "<rootDir>/.git",
217
- "<rootDir>/node_modules/webpack/node_modules",
218
- "<rootDir>/test/js",
219
- "<rootDir>/test/browsertest/js",
220
- "<rootDir>/test/fixtures/temp-cache-fixture",
221
- "<rootDir>/test/fixtures/temp-",
222
- "<rootDir>/benchmark",
223
- "<rootDir>/examples/*/dist",
224
- "<rootDir>/coverage",
225
- "<rootDir>/.eslintcache"
226
- ],
227
- "transformIgnorePatterns": [
228
- "<rootDir>"
229
- ],
230
- "coverageDirectory": "<rootDir>/coverage",
231
- "coveragePathIgnorePatterns": [
232
- "\\.runtime\\.js$",
233
- "<rootDir>/test",
234
- "<rootDir>/schemas",
235
- "<rootDir>/node_modules"
236
- ],
237
- "testEnvironment": "./test/patch-node-env.js",
238
- "coverageReporters": [
239
- "json"
240
- ],
241
- "snapshotFormat": {
242
- "escapeString": true,
243
- "printBasicPrototype": true
244
- }
245
190
  }
246
191
  }