Skip to content

fix(parser): SyntaxError for new import.defer/source(...) and SequenceExpression specifiers; clean up test262 known-bugs list#20917

Merged
alexander-akait merged 11 commits into
mainfrom
claude/fix-test262-bugs-YA4VY
May 7, 2026
Merged

fix(parser): SyntaxError for new import.defer/source(...) and SequenceExpression specifiers; clean up test262 known-bugs list#20917
alexander-akait merged 11 commits into
mainfrom
claude/fix-test262-bugs-YA4VY

Conversation

@alexander-akait
Copy link
Copy Markdown
Member

@alexander-akait alexander-akait commented May 6, 2026

Summary

Two small parser fixes (with changesets), plus a cleanup of test/test262.spectest.js's knownBugs list:

  1. SyntaxError for new import.defer(...) / new import.source(...). acorn-import-phases accepts these even though ImportCall is a CallExpression per spec (so it's not a valid new operand — bare new import(...) is correctly rejected by acorn). walkNewExpression now throws a SyntaxError (surfaced by NormalModule as ModuleParseError) when the callee is an ImportExpression and the source between new and the callee contains no ( outside comments. Parenthesized forms (new (import.defer(...))) stay valid and continue to throw TypeError at runtime. Inline TODO notes that this is an upstream-parser workaround that should be removed once acorn-import-phases (or acorn) reports the SyntaxError natively.

  2. Fold side-effect-free SequenceExpression to its tail in evaluation. Adds an evaluate hook for SequenceExpression in JavascriptParser._initializeEvaluating so import((1, 0, "./mod.js")) resolves the same as import("./mod.js"). The fold is gated on parser.isPure for every leading expression so side effects are never silently dropped, and on evaluated.isCompileTimeValue() for the tail so identifier / member-chain tails like (0, eval)("…") are not folded (which would otherwise conflate the canonical indirect-eval pattern with a direct eval() call and trigger JavascriptMetaInfoPlugin's concatenation bailout).

  3. knownBugs cleanup. Removed three duplicate entries from the import-attributes/2nd-param-evaluation-* block, removed entries that now pass thanks to the parser fixes (the *-import-defer-no-new-call-expression.js family and cover-parenthesized-expr.js), and rewrote terse / missing comments on the remaining entries with the actual root cause (global this wrap, namespace-exotic semantics, build-time vs runtime error reporting, top-level-await ordering, etc.).

What kind of change does this PR introduce?

fix

Did you add tests for your changes?

Yes — fixes are covered by removing skips from test/test262.spectest.js. Net test262 wins on top of main: dynamic-import 2,252 → 2,348 (+96), 21 invalid-syntax *-import-defer-no-new-call-expression.js cases now pass, plus cover-parenthesized-expr.js and new-covered-expression-is-valid.js.

Does this PR introduce a breaking change?

No.

If relevant, what needs to be documented…

n/a

Use of AI

Claude Code drafted the implementation, the test262 audit and the changesets under human review.

https://claude.ai/code/session_01BCUNtcBHAZPzjvuUbnW37R

Removed three duplicate entries from the import-attributes 2nd-param section
and added explanatory comments to previously uncommented groups so each
unfixable entry documents the underlying root cause (global \`this\` wrap,
namespace exotic semantics, build-time vs runtime error reporting, nested
\`import(import(...))\`, top-level-await ordering, etc.).

https://claude.ai/code/session_01BCUNtcBHAZPzjvuUbnW37R
…) specifier

`import((1, 0, "./mod.js"))` (and any other comma expression whose leading
operands are pure) now resolves to `import("./mod.js")` instead of being
rejected as unresolvable. Previously the parser had no `evaluate` hook for
`SequenceExpression`, so the specifier was unknown and the dependency could
not be created. The new hook only folds when each leading expression is
side-effect free, so e.g. `import((effectfulFn(), "./mod.js"))` is still
left dynamic and its side effects are preserved.

Removes test262 case `expressions/dynamic-import/assignment-expression/cover-parenthesized-expr.js`
from \`knownBugs\` (it now passes) and clarifies the comment for
\`statements/async-function/evaluation-body.js\` (failure is Jest's per-test
unhandled-rejection tracking, not microtask ordering).

https://claude.ai/code/session_01BCUNtcBHAZPzjvuUbnW37R
Per spec ImportCall is a CallExpression, never a MemberExpression, so
\`new import.defer(...)\` and \`new import.source(...)\` are SyntaxErrors.
Acorn rejects bare \`new import(...)\`, but the \`acorn-import-phases\` plugin
currently accepts the phased variants. We now detect this in
\`walkNewExpression\` and throw a SyntaxError, which gets surfaced as a
\`ModuleParseError\` by NormalModule. Parenthesized forms
\`new (import.defer(...))\` produce the same AST shape but are valid syntax;
we tell them apart by checking for an opening paren in the source between
\`new\` and the callee, leaving them to throw \`TypeError\` at runtime.

Removes 21 corresponding test262 entries from \`knownBugs\`:
  - the 19 \`syntax/invalid/*-import-defer-no-new-call-expression.js\` cases
  - \`syntax/invalid/{nested-with,top-level}-import-defer-no-new-call-expression.js\`
    (previously misclassified as acorn bugs)
And one valid-syntax entry that was incorrectly listed:
  - \`syntax/valid/new-covered-expression-is-valid.js\`

Also clarifies the comment for
\`expressions/dynamic-import/custom-primitive.js\` (root cause is
\`__webpack_exports__\` inheriting \`Object.prototype\` rather than having
\`null\` prototype like a real module namespace exotic, so
\`Object.prototype.toString\` shadows the missing-\`toString\` fallback path).

https://claude.ai/code/session_01BCUNtcBHAZPzjvuUbnW37R
… wrap dynamic options in IIFE

* Moved the SequenceExpression evaluator and the new \`new import.defer/source(...)\` SyntaxError check out of \`JavascriptParser\` and into \`ImportParserPlugin\`. \`JavascriptParser\` now exposes a \`newImportCall\` SyncBailHook that fires whenever a \`NewExpression\`'s callee is an \`ImportExpression\`; \`ImportParserPlugin\` taps it.
* Added \`dynamicOptionsRange\` to \`ImportDependency\` (and the Eager / Weak subclasses). When set, the dependency template wraps the runtime require chain in \`((opts) => <chain>)((<options-source>))\` so the original second-argument expression is still evaluated for side effects, even though webpack overwrites the entire \`import(...)\` source range.
* Removes \`expressions/dynamic-import/import-attributes/2nd-param-yield-expr.js\` and the \`2nd-param-evaluation-abrupt-{return,throw}.js\` cases from \`knownBugs\` (they pass now). Comments updated for the remaining 2nd-param cases that need spec-level runtime validation of the options object.

https://claude.ai/code/session_01BCUNtcBHAZPzjvuUbnW37R
The comma-expression fold isn't import-specific — any \`evaluateExpression\`
caller can benefit, so it lives alongside the other generic language-level
evaluators (\`LogicalExpression\`, \`ConditionalExpression\`, ...) in
\`JavascriptParser._initializeEvaluating\` instead of \`ImportParserPlugin\`.

The \`new import.defer/source(...)\` SyntaxError check stays in
\`ImportParserPlugin\` (it taps the \`newImportCall\` hook on the parser)
because that one truly is import-specific.

https://claude.ai/code/session_01BCUNtcBHAZPzjvuUbnW37R
The wrap fixed three test262 cases (\`2nd-param-yield-expr\`,
\`2nd-param-evaluation-abrupt-{return,throw}\`) but added \`dynamicOptionsRange\`
plumbing across \`ImportDependency\`, \`ImportEagerDependency\`,
\`ImportWeakDependency\` (constructor + serialize/deserialize), a new
\`wrapWithDynamicOptions\` helper, and template branches in three places, plus
matching changes in \`ImportParserPlugin\`. Net cost was ~140 lines for 3 tests
and the spec also requires runtime validation of the options object that
the wrap doesn't address. Roll it back; the affected entries go back into
\`knownBugs\` with a single comment explaining the architectural cause.

https://claude.ai/code/session_01BCUNtcBHAZPzjvuUbnW37R
The hook + tap was overkill for a workaround whose only purpose is to fire
a SyntaxError that acorn-import-phases (or acorn itself) should be raising.
Move the check back inline in \`walkNewExpression\` with a TODO that says it
is not a webpack bug and should be removed once the upstream parser native
handling is fixed. Removes the \`newImportCall\` hook and the
\`ImportParserPlugin\` tap.

https://claude.ai/code/session_01BCUNtcBHAZPzjvuUbnW37R
Copilot AI review requested due to automatic review settings May 6, 2026 11:42
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 6, 2026

🦋 Changeset detected

Latest commit: 4f1f2e7

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
webpack Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 6, 2026

This PR is packaged and the instant preview is available (3032f8c).

Install it locally:

  • npm
npm i -D webpack@https://pkg.pr.new/webpack@3032f8c
  • yarn
yarn add -D webpack@https://pkg.pr.new/webpack@3032f8c
  • pnpm
pnpm add -D webpack@https://pkg.pr.new/webpack@3032f8c

@codecov
Copy link
Copy Markdown

codecov Bot commented May 6, 2026

Codecov Report

❌ Patch coverage is 96.00000% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 91.35%. Comparing base (2fd88dd) to head (4f1f2e7).
⚠️ Report is 6 commits behind head on main.

Files with missing lines Patch % Lines
lib/javascript/JavascriptParser.js 96.00% 1 Missing ⚠️

❌ Your patch check has failed because the patch coverage (56.00%) is below the target coverage (90.00%). You can increase the patch coverage or adjust the target coverage.

Additional details and impacted files
@@            Coverage Diff             @@
##             main   #20917      +/-   ##
==========================================
+ Coverage   91.34%   91.35%   +0.01%     
==========================================
  Files         563      566       +3     
  Lines       55887    56026     +139     
  Branches    14819    14875      +56     
==========================================
+ Hits        51050    51184     +134     
- Misses       4837     4842       +5     
Flag Coverage Δ
integration 90.29% <56.00%> (-0.01%) ⬇️
test262 45.83% <96.00%> (-0.01%) ⬇️
unit 36.21% <12.00%> (+0.08%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates webpack’s Test262 harness skip list to remove duplicates and document known-spec divergences more clearly, and it also includes two small parser fixes (with changesets) to improve dynamic import() handling and reject invalid new import.*(...) forms.

Changes:

  • Clean up test/test262.spectest.js known-bugs entries (remove duplicates) and add root-cause comments for skipped groups.
  • JavascriptParser: evaluate side-effect-free SequenceExpression tails to allow resolving import((1, 0, "./mod.js")).
  • JavascriptParser: reject new import.defer(...) / new import.source(...) as a parse-time SyntaxError, and add changesets for both user-facing fixes.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

File Description
test/test262.spectest.js Removes duplicate skip entries and expands comments explaining why certain Test262 cases remain skipped.
lib/javascript/JavascriptParser.js Adds a SequenceExpression evaluator for safe folding, and throws a SyntaxError for invalid new import.*(...) forms.
.changeset/new-import-call-syntax-error.md Patch release note for rejecting new import.defer/source(...) at parse time.
.changeset/dynamic-import-sequence-expression.md Patch release note for resolving static specifiers from side-effect-free sequence expressions in import().

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread lib/javascript/JavascriptParser.js Outdated
Comment on lines +3891 to +3901
if (between !== undefined && !/\(/.test(between)) {
const err =
/** @type {SyntaxError & { loc?: { line: number, column: number } }} */
(new SyntaxError("import call cannot be the target of `new`"));
if (expression.loc) {
err.loc = {
line: expression.loc.start.line,
column: expression.loc.start.column
};
}
throw err;
Comment thread lib/javascript/JavascriptParser.js
Comment thread lib/javascript/JavascriptParser.js Outdated
Comment on lines +1985 to +1998
// Only fold a comma expression to its tail when the leading
// expressions are side-effect free; otherwise downstream
// transforms that replace the whole expression range (e.g.
// `ImportDependency` for `import(...)`) would silently drop the
// leading side effects.
let commentsStartPos = /** @type {Range} */ (expr.range)[0];
for (let i = 0; i < expr.expressions.length - 1; i++) {
const item = expr.expressions[i];
if (!this.isPure(item, commentsStartPos)) return;
commentsStartPos = /** @type {Range} */ (item.range)[1];
}
const last = expr.expressions[expr.expressions.length - 1];
return this.evaluateExpression(last).setRange(
/** @type {Range} */ (expr.range)
- \`walkNewExpression\`: strip block and line comments from the source between \`new\` and the \`ImportExpression\` callee before checking for \`(\`, so e.g. \`new /* ( */ import.defer(...)\` is still rejected.
- \`SequenceExpression\` evaluator: bail out when \`expr.range\` or any \`expr.expressions[i].range\` is missing. \`JavascriptParser.prototype.evaluate(source)\` parses without \`ranges: true\` (e.g. when \`DefinePlugin\` evaluates a config string), so the previous unconditional \`expr.range[0]\` access would throw and surface as a \`console.warn\` from \`evaluateExpression\`'s catch block.

https://claude.ai/code/session_01BCUNtcBHAZPzjvuUbnW37R
@codspeed-hq
Copy link
Copy Markdown

codspeed-hq Bot commented May 6, 2026

Merging this PR will degrade performance by 27.21%

⚠️ Different runtime environments detected

Some benchmarks with significant performance changes were compared across different runtime environments,
which may affect the accuracy of the results.

Open the report in CodSpeed to investigate

⚡ 2 improved benchmarks
❌ 3 regressed benchmarks
✅ 139 untouched benchmarks

⚠️ Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Mode Benchmark BASE HEAD Efficiency
Simulation benchmark "asset-modules-resource", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 188.1 ms 72.2 ms ×2.6
Memory benchmark "asset-modules-source", scenario '{"name":"mode-development","mode":"development"}' 833.2 KB 659.5 KB +26.34%
Memory benchmark "many-chunks-commonjs", scenario '{"name":"mode-production","mode":"production"}' 6.6 MB 8.6 MB -22.87%
Memory benchmark "devtool-eval-source-map", scenario '{"name":"mode-development","mode":"development"}' 1,017.5 KB 1,397.8 KB -27.21%
Memory benchmark "future-defaults", scenario '{"name":"mode-development","mode":"development"}' 1.4 MB 1.8 MB -25.72%

Comparing claude/fix-test262-bugs-YA4VY (4f1f2e7) with main (d060ace)

Open in CodSpeed

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment thread lib/javascript/JavascriptParser.js Outdated
Comment on lines +2003 to +2005
return this.evaluateExpression(last).setRange(
/** @type {Range} */ (expr.range)
);
Comment thread .changeset/dynamic-import-sequence-expression.md
… value

Copilot review: with the previous fold, \`(0, eval)("...")\` evaluated to the
\`eval\` identifier and triggered \`parser.hooks.call.for("eval")\`, which made
\`JavascriptMetaInfoPlugin\` bail out of module concatenation for the
canonical indirect-eval pattern (and would similarly conflate other
\`(0, ident)(...)\` direct/indirect-call distinctions). Restrict the fold to
\`isCompileTimeValue()\` results — string / number / boolean / RegExp / null /
undefined / BigInt / const-array — so the static \`import((1, 0, "./mod.js"))\`
case still resolves while identifier and member-chain tails are left alone.

Verified: with this guard, \`(0, eval)("2 + 2")\` no longer sets
\`buildInfo.moduleConcatenationBailout = "eval()"\`, and
\`expressions/dynamic-import/assignment-expression/cover-parenthesized-expr.js\`
still passes.

https://claude.ai/code/session_01BCUNtcBHAZPzjvuUbnW37R
@alexander-akait alexander-akait changed the title test: clean up duplicate test262 known bug entries and clarify comments fix(parser): SyntaxError for new import.defer/source(...) and SequenceExpression specifiers; clean up test262 known-bugs list May 6, 2026
@alexander-akait alexander-akait requested a review from Copilot May 6, 2026 15:52
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

…tly in walkNewExpression

\`parse()\` already converts a Buffer source to UTF-8 string at the top, but
only the local variable was updated; \`state.source\` could still be a Buffer.
Mirror the conversion onto \`state.source\` so downstream walkers (currently
the \`new ImportExpression\` workaround) can read it as a string without an
extra \`Buffer.toString("utf8")\` per check, simplifying the call site.

https://claude.ai/code/session_01BCUNtcBHAZPzjvuUbnW37R
The range guard stays — \`parser.evaluate(source)\` (used by \`DefinePlugin\`)
parses with \`defaultParserOptions.ranges = false\`, so AST nodes from that
path don't carry ranges and the unconditional \`expr.range[0]\` access would
otherwise throw and surface as a \`console.warn\`. Just drop the multi-line
explanations.

https://claude.ai/code/session_01BCUNtcBHAZPzjvuUbnW37R
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 6, 2026

Types Coverage

Coverage after merging claude/fix-test262-bugs-YA4VY into main will be
98.92%
Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
bin
   webpack.js98.77%100%100%98.77%91
examples
   build-common.js100%100%100%100%
   buildAll.js100%100%100%100%
   examples.js100%100%100%100%
   template-common.js98.21%100%100%98.21%72
examples/custom-javascript-parser
   test.filter.js100%100%100%100%
examples/custom-javascript-parser/internals
   acorn-parse.js100%100%100%100%
   meriyah-parse.js100%100%100%100%
   oxc-parse.js91.30%100%100%91.30%140, 142–143, 145, 147, 153–154, 161, 168, 90
examples/markdown
   webpack.config.mjs100%100%100%100%
examples/typescript
   test.filter.js50%100%100%50%5
examples/virtual-modules
   test.filter.js100%100%100%100%
examples/wasm-bindgen-esm
   test.filter.js100%100%100%100%
examples/wasm-complex
   test.filter.js100%100%100%100%
examples/wasm-simple
   test.filter.js100%100%100%100%
examples/wasm-simple-source-phase
   test.filter.js100%100%100%100%
lib
   APIPlugin.js100%100%100%100%
   AsyncDependenciesBlock.js100%100%100%100%
   AutomaticPrefetchPlugin.js100%100%100%100%
   BannerPlugin.js100%100%100%100%
   Cache.js98.21%100%100%98.21%101
   CacheFacade.js100%100%100%100%
   Chunk.js99.72%100%100%99.72%37
   ChunkGraph.js100%100%100%100%
   ChunkGroup.js100%100%100%100%
   ChunkTemplate.js100%100%100%100%
   CleanPlugin.js98.72%100%100%98.72%206, 226, 382
   CodeGenerationResults.js100%100%100%100%
   CompatibilityPlugin.js100%100%100%100%
   Compilation.js98.55%100%100%98.55%1554, 1850, 1857, 1865, 1887, 2783, 3208, 3870, 3899, 3952–3953, 3957, 3962, 3978–3979, 3993–3994, 3999–4000, 4477, 4503, 493, 498, 5211, 5292, 5307, 5332–5333, 5335, 5659, 5664, 5670, 5673, 5685, 5687, 5691, 5707, 5722, 5754, 5808, 5832, 5946, 712–713
   Compiler.js99.55%100%100%99.55%1116–1117, 1125
   ConcatenationScope.js98.59%100%100%98.59%189
   ConditionalInitFragment.js100%100%100%100%
   ConstPlugin.js100%100%100%100%
   ContextExclusionPlugin.js100%100%100%100%
   ContextModule.js100%100%100%100%
   ContextModuleFactory.js97.75%100%100%97.75%258, 393, 418, 443, 447, 458
   ContextReplacementPlugin.js100%100%100%100%
   DefinePlugin.js98.92%100%100%98.92%158–159, 175, 194, 268
   DependenciesBlock.js100%100%100%100%
   Dependency.js98.20%100%100%98.20%379, 425
   DependencyTemplate.js100%100%100%100%
   DependencyTemplates.js100%100%100%100%
   DotenvPlugin.js97.88%100%100%97.88%237, 378, 391–392
   DynamicEntryPlugin.js100%100%100%100%
   EntryOptionPlugin.js100%100%100%100%
   EntryPlugin.js100%100%100%100%
   Entrypoint.js100%100%100%100%
   EnvironmentPlugin.js97.14%100%100%97.14%49
   ErrorHelpers.js100%100%100%100%
   EvalDevToolModulePlugin.js100%100%100%100%
   EvalSourceMapDevToolPlugin.js100%100%100%100%
   ExportsInfo.js100%100%100%100%
   ExportsInfoApiPlugin.js100%100%100%100%
   ExternalModule.js98.89%100%100%98.89%399–403, 542
   ExternalModuleFactoryPlugin.js100%100%100%100%
   ExternalsPlugin.js100%100%100%100%
   FileSystemInfo.js99.50%100%100%99.50%182, 2252–2253, 2256, 2267, 2278, 2289, 278, 3694, 3709, 3733
   FlagAllModulesAsUsedPlugin.js100%100%100%100%
   FlagDependencyExportsPlugin.js98.74%100%100%98.74%399, 401, 405
   FlagDependencyUsagePlugin.js100%100%100%100%
   FlagEntryExportAsUsedPlugin.js100%100%100%100%
   Generator.js100%100%100%100%
   HotModuleReplacementPlugin.js100%100%100%100%
   HotUpdateChunk.js100%100%100%100%
   IgnorePlugin.js100%100%100%100%
   IgnoreWarningsPlugin.js100%100%100%100%
   InitFragment.js100%100%100%100%
   JavascriptMetaInfoPlugin.js100%100%100%100%
   LibraryTemplatePlugin.js100%100%100%100%
   LoaderOptionsPlugin.js100%100%100%100%
   LoaderTargetPlugin.js100%100%100%100%
   MainTemplate.js100%100%100%100%
   ManifestPlugin.js100%100%100%100%
   Module.js98.50%100%100%98.50%1304, 1309, 1370, 1384, 1446, 1455
   ModuleFactory.js100%100%100%100%
   ModuleFilenameHelpers.js98.85%100%100%98.85%106, 108
   ModuleGraph.js99.73%100%100%99.73%1004
   ModuleGraphConnection.js100%100%100%100%
   ModuleInfoHeaderPlugin.js100%100%100%100%
   ModuleProfile.js100%100%100%100%
   ModuleSourceTypeConstants.js100%100%100%100%
   ModuleTemplate.js100%100%100%100%
   ModuleTypeConstants.js100%100%100%100%
   MultiCompiler.js99.69%100%100%99.69%645
   MultiStats.js100%100%100%100%
   MultiWatching.js100%100%100%100%
   NoEmitOnErrorsPlugin.js100%100%100%100%
   NodeStuffPlugin.js100%100%100%100%
   NormalModule.js97.78%100%100%97.78%1020, 1036, 1123, 1774, 1779–1789, 708, 711, 728, 745, 986
   NormalModuleFactory.js99.47%100%100%99.47%1067, 1376, 466, 478
   NormalModuleReplacementPlugin.js100%100%100%100%
   NullFactory.js100%100%100%100%
   OptimizationStages.js100%100%100%100%
   OptionsApply.js100%100%100%100%
   Parser.js100%100%100%100%
   PlatformPlugin.js100%100%100%100%
   PrefetchPlugin.js100%100%100%100%
   ProgressPlugin.js98.75%100%100%98.75%446–447, 452, 454, 518
   ProvidePlugin.js100%100%100%100%
   RawModule.js100%100%100%100%
   RecordIdsPlugin.js100%100%100%100%
   RequestShortener.js100%100%100%100%
   ResolverFactory.js100%100%100%100%
   RuntimeGlobals.js100%100%100%100%
   RuntimeModule.js100%100%100%100%
   RuntimePlugin.js100%100%100%100%
   RuntimeTemplate.js100%100%100%100%
   SelfModuleFactory.js100%100%100%100%
   SingleEntryPlugin.js100%100%100%100%
   SourceMapDevToolModuleOptionsPlugin.js100%100%100%100%
   SourceMapDevToolPlugin.js99.16%100%100%99.16%267–268, 610
   Stats.js100%100%100%100%
   Template.js100%100%100%100%
   TemplatedPathPlugin.js98.86%100%100%98.86%134–135
   UseStrictPlugin.js100%100%100%100%
   WarnCaseSensitiveModulesPlugin.js100%100%100%100%
   WarnDeprecatedOptionPlugin.js100%100%100%100%
   WarnNoModeSetPlugin.js100%100%100%100%
   WatchIgnorePlugin.js100%100%100%100%
   Watching.js100%100%100%100%
   WebpackError.js100%100%100%100%
   WebpackIsIncludedPlugin.js100%100%100%100%
   WebpackOptionsApply.js100%100%100%100%
   WebpackOptionsDefaulter.js100%100%100%100%
   buildChunkGraph.js99.87%100%100%99.87%325
   cli.js98.71%100%100%98.71%117, 469, 501, 543, 813
   index.js100%100%100%100%
   validateSchema.js94.67%100%100%94.67%100, 87, 89, 98
   webpack.js97.22%100%100%97.22%196, 218, 220
lib/asset
   AssetBytesGenerator.js100%100%100%100%
   AssetBytesParser.js100%100%100%100%
   AssetGenerator.js100%100%100%100%
   AssetModulesPlugin.js97.77%100%100%97.77%285, 309, 312, 364, 40
   AssetParser.js100%100%100%100%
   AssetSourceGenerator.js100%100%100%100%
   AssetSourceParser.js100%100%100%100%
   RawDataUrlModule.js100%100%100%100%
lib/async-modules
   AsyncModuleHelpers.js100%100%100%100%
   AwaitDependenciesInitFragment.js100%100%100%100%
   InferAsyncModulesPlugin.js100%100%100%100%
lib/cache
   AddBuildDependenciesPlugin.js100%100%100%100%
   AddManagedPathsPlugin.js100%100%100%100%
   IdleFileCachePlugin.js97.92%100%100%97.92%71, 83, 91
   MemoryCachePlugin.js95.83%100%100%95.83%33
   MemoryWithGcCachePlugin.js93.15%100%100%93.15%106, 113–114, 122, 89
   PackFileCacheStrategy.js96.40%100%100%96.40%1250, 1350, 1354, 1416, 628, 647, 657–659, 661, 677–678, 683, 686, 688, 693, 698, 722, 728, 762, 768, 774, 779, 790, 799, 804–805, 807, 824, 830–831, 833
   ResolverCachePlugin.js100%100%100%100%
   getLazyHashedEtag.js100%100%100%100%
   mergeEtags.js100%100%100%100%
lib/config
   browserslistTargetHandler.js100%100%100%100%
   defaults.js99.14%100%100%99.14%1314–1316, 1324, 271, 274, 279, 283, 472
   normalization.js99%100%100%99%191–192, 258, 273
   target.js100%100%100%100%
lib/container
   ContainerEntryDependency.js100%100%100%100%
   ContainerEntryModule.js100%100%100%100%
   ContainerEntryModuleFactory.js100%100%100%100%
   ContainerExposedDependency.js100%100%100%100%
   ContainerPlugin.js100%100%100%100%
   ContainerReferencePlugin.js100%100%100%100%
   FallbackDependency.js100%100%100%100%
   FallbackItemDependency.js100%100%100%100%
   FallbackModule.js100%100%100%100%
   FallbackModuleFactory.js100%100%100%100%
   HoistContainerReferencesPlugin.js100%100%100%100%
   ModuleFederationPlugin.js100%100%100%100%
   RemoteModule.js100%100%100%100%
   RemoteRuntimeModule.js100%100%100%100%
   

@alexander-akait alexander-akait merged commit 3032f8c into main May 7, 2026
58 of 61 checks passed
@alexander-akait alexander-akait deleted the claude/fix-test262-bugs-YA4VY branch May 7, 2026 13:45
aryanraj45 pushed a commit to aryanraj45/webpack that referenced this pull request May 8, 2026
…nceExpression specifiers; clean up test262 known-bugs list (webpack#20917)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants