Skip to content

Commit d2b78c9

Browse files
authored
perf: hoist picomatch pattern compilation outside filter callback in formatErrors
1 parent 65e0876 commit d2b78c9

2 files changed

Lines changed: 84 additions & 105 deletions

File tree

src/utils.ts

Lines changed: 32 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -50,44 +50,46 @@ export function formatErrors(
5050
merge: { file?: string; module?: webpack.Module },
5151
context: string
5252
): webpack.WebpackError[] {
53+
// Split positive and negative patterns to replicate micromatch semantics:
54+
// a file must match a positive pattern AND not match any negative pattern.
55+
const { positivePatterns, negativePatterns } =
56+
loaderOptions.reportFiles.reduce<{
57+
positivePatterns: string[];
58+
negativePatterns: string[];
59+
}>(
60+
(acc, p) => {
61+
if (p.startsWith('!')) {
62+
acc.negativePatterns.push(p.slice(1));
63+
} else {
64+
acc.positivePatterns.push(p);
65+
}
66+
return acc;
67+
},
68+
{ positivePatterns: [], negativePatterns: [] }
69+
);
70+
const matchPos =
71+
loaderOptions.reportFiles.length > 0
72+
? picomatch(positivePatterns.length > 0 ? positivePatterns : ['**'])
73+
: null;
74+
const matchNeg =
75+
negativePatterns.length > 0 ? picomatch(negativePatterns) : null;
76+
5377
return diagnostics === undefined
5478
? []
5579
: diagnostics
5680
.filter(diagnostic => {
5781
if (loaderOptions.ignoreDiagnostics.indexOf(diagnostic.code) !== -1) {
5882
return false;
5983
}
60-
if (
61-
loaderOptions.reportFiles.length > 0 &&
62-
diagnostic.file !== undefined
63-
) {
84+
if (matchPos !== null && diagnostic.file !== undefined) {
6485
const relativeFileName = path.relative(
6586
context,
6687
diagnostic.file.fileName
6788
);
68-
// Split positive and negative patterns to replicate micromatch semantics:
69-
// a file must match a positive pattern AND not match any negative pattern.
70-
const { positivePatterns, negativePatterns } =
71-
loaderOptions.reportFiles.reduce<{
72-
positivePatterns: string[];
73-
negativePatterns: string[];
74-
}>(
75-
(acc, p) => {
76-
if (p.startsWith('!')) {
77-
acc.negativePatterns.push(p.slice(1));
78-
} else {
79-
acc.positivePatterns.push(p);
80-
}
81-
return acc;
82-
},
83-
{ positivePatterns: [], negativePatterns: [] }
84-
);
85-
const matchPos = picomatch(
86-
positivePatterns.length > 0 ? positivePatterns : ['**']
87-
);
88-
const matchNeg =
89-
negativePatterns.length > 0 ? picomatch(negativePatterns) : null;
90-
if (!matchPos(relativeFileName) || (matchNeg && matchNeg(relativeFileName))) {
89+
if (
90+
!matchPos(relativeFileName) ||
91+
(matchNeg && matchNeg(relativeFileName))
92+
) {
9193
return false;
9294
}
9395
}
@@ -181,7 +183,7 @@ export function makeError(
181183
error.details = tsLoaderSource(loaderOptions);
182184

183185
return error;
184-
}
186+
}
185187

186188
return {
187189
message,
@@ -334,7 +336,8 @@ export function ensureProgram(instance: TSInstance) {
334336
instance.watchHost.updateRootFileNames();
335337
}
336338
if (instance.watchOfFilesAndCompilerOptions) {
337-
instance.builderProgram = instance.watchOfFilesAndCompilerOptions.getProgram();
339+
instance.builderProgram =
340+
instance.watchOfFilesAndCompilerOptions.getProgram();
338341
instance.program = instance.builderProgram.getProgram();
339342
}
340343
instance.hasUnaccountedModifiedFiles = false;

yarn.lock

Lines changed: 52 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -488,17 +488,7 @@ ajv@^6.14.0:
488488
json-schema-traverse "^0.4.1"
489489
uri-js "^4.2.2"
490490

491-
ajv@^8.0.0:
492-
version "8.17.1"
493-
resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz"
494-
integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==
495-
dependencies:
496-
fast-deep-equal "^3.1.3"
497-
fast-uri "^3.0.1"
498-
json-schema-traverse "^1.0.0"
499-
require-from-string "^2.0.2"
500-
501-
ajv@^8.9.0:
491+
ajv@^8.0.0, ajv@^8.9.0:
502492
version "8.17.1"
503493
resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz"
504494
integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==
@@ -1706,7 +1696,21 @@ date-format@^4.0.10:
17061696
resolved "https://registry.npmjs.org/date-format/-/date-format-4.0.10.tgz"
17071697
integrity sha512-RuMIHocrVjF84bUSTcd1uokIsLsOsk1Awb7TexNOI3f48ukCu39mjslWquDTA08VaDMF2umr3MB9ow5EyJTWyA==
17081698

1709-
debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@2.6.9:
1699+
debug@^2.2.0:
1700+
version "2.6.9"
1701+
resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
1702+
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
1703+
dependencies:
1704+
ms "2.0.0"
1705+
1706+
debug@^2.3.3:
1707+
version "2.6.9"
1708+
resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
1709+
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
1710+
dependencies:
1711+
ms "2.0.0"
1712+
1713+
debug@^2.6.8:
17101714
version "2.6.9"
17111715
resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
17121716
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
@@ -1720,35 +1724,7 @@ debug@^3.1.0:
17201724
dependencies:
17211725
ms "^2.1.1"
17221726

1723-
debug@^4.0.1:
1724-
version "4.4.3"
1725-
resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz"
1726-
integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
1727-
dependencies:
1728-
ms "^2.1.3"
1729-
1730-
debug@^4.3.1:
1731-
version "4.4.3"
1732-
resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz"
1733-
integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
1734-
dependencies:
1735-
ms "^2.1.3"
1736-
1737-
debug@^4.3.2:
1738-
version "4.4.3"
1739-
resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz"
1740-
integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
1741-
dependencies:
1742-
ms "^2.1.3"
1743-
1744-
debug@^4.3.4:
1745-
version "4.4.3"
1746-
resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz"
1747-
integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
1748-
dependencies:
1749-
ms "^2.1.3"
1750-
1751-
debug@^4.4.3:
1727+
debug@^4.0.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.3:
17521728
version "4.4.3"
17531729
resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz"
17541730
integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
@@ -1776,6 +1752,13 @@ debug@~4.3.2:
17761752
dependencies:
17771753
ms "2.1.2"
17781754

1755+
debug@2.6.9:
1756+
version "2.6.9"
1757+
resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
1758+
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
1759+
dependencies:
1760+
ms "2.0.0"
1761+
17791762
debug@3.2.6:
17801763
version "3.2.6"
17811764
resolved "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz"
@@ -3223,7 +3206,21 @@ keyv@^4.5.4:
32233206
dependencies:
32243207
json-buffer "3.0.1"
32253208

3226-
kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
3209+
kind-of@^3.0.2:
3210+
version "3.2.2"
3211+
resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz"
3212+
integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==
3213+
dependencies:
3214+
is-buffer "^1.1.5"
3215+
3216+
kind-of@^3.0.3:
3217+
version "3.2.2"
3218+
resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz"
3219+
integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==
3220+
dependencies:
3221+
is-buffer "^1.1.5"
3222+
3223+
kind-of@^3.2.0:
32273224
version "3.2.2"
32283225
resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz"
32293226
integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==
@@ -3242,12 +3239,7 @@ kind-of@^5.0.0:
32423239
resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz"
32433240
integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
32443241

3245-
kind-of@^6.0.0:
3246-
version "6.0.3"
3247-
resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz"
3248-
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
3249-
3250-
kind-of@^6.0.2:
3242+
kind-of@^6.0.0, kind-of@^6.0.2:
32513243
version "6.0.3"
32523244
resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz"
32533245
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
@@ -4023,12 +4015,7 @@ path-is-inside@^1.0.1, path-is-inside@^1.0.2:
40234015
resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz"
40244016
integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==
40254017

4026-
path-key@^2.0.0:
4027-
version "2.0.1"
4028-
resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz"
4029-
integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
4030-
4031-
path-key@^2.0.1:
4018+
path-key@^2.0.0, path-key@^2.0.1:
40324019
version "2.0.1"
40334020
resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz"
40344021
integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
@@ -4712,7 +4699,15 @@ string-width@^1.0.1, "string-width@^1.0.2 || 2":
47124699
is-fullwidth-code-point "^1.0.0"
47134700
strip-ansi "^3.0.0"
47144701

4715-
string-width@^2.0.0, string-width@^2.1.1:
4702+
string-width@^2.0.0:
4703+
version "2.1.1"
4704+
resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz"
4705+
integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
4706+
dependencies:
4707+
is-fullwidth-code-point "^2.0.0"
4708+
strip-ansi "^4.0.0"
4709+
4710+
string-width@^2.1.1:
47164711
version "2.1.1"
47174712
resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz"
47184713
integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
@@ -5163,14 +5158,7 @@ which@^1.2.1:
51635158
dependencies:
51645159
isexe "^2.0.0"
51655160

5166-
which@^1.2.10:
5167-
version "1.3.1"
5168-
resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz"
5169-
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
5170-
dependencies:
5171-
isexe "^2.0.0"
5172-
5173-
which@^1.2.9:
5161+
which@^1.2.10, which@^1.2.9, which@1.3.1:
51745162
version "1.3.1"
51755163
resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz"
51765164
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
@@ -5184,13 +5172,6 @@ which@^2.0.1:
51845172
dependencies:
51855173
isexe "^2.0.0"
51865174

5187-
which@1.3.1:
5188-
version "1.3.1"
5189-
resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz"
5190-
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
5191-
dependencies:
5192-
isexe "^2.0.0"
5193-
51945175
wide-align@1.1.3:
51955176
version "1.1.3"
51965177
resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz"
@@ -5248,12 +5229,7 @@ xtend@~4.0.1:
52485229
resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"
52495230
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
52505231

5251-
"y18n@^3.2.1 || ^4.0.0":
5252-
version "4.0.0"
5253-
resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz"
5254-
integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
5255-
5256-
y18n@^4.0.0:
5232+
"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0:
52575233
version "4.0.0"
52585234
resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz"
52595235
integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==

0 commit comments

Comments
 (0)