Skip to content

test: add circular composes case for CSS modules#20929

Merged
alexander-akait merged 7 commits into
mainfrom
claude/add-circular-compose-test-syL5J
May 8, 2026
Merged

test: add circular composes case for CSS modules#20929
alexander-akait merged 7 commits into
mainfrom
claude/add-circular-compose-test-syL5J

Conversation

@alexander-akait
Copy link
Copy Markdown
Member

Adds composes-circular.module.css covering .local-name { composes: local-name from "./composes-circular.module.css" } (a class composing
itself from the same file) so the snapshot pins webpack's output for
self-referential composes against css-loader behavior.

https://claude.ai/code/session_01LBzxuwEJhYcDUrD6xUQBid

Copilot AI review requested due to automatic review settings May 7, 2026 22:55
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 7, 2026

🦋 Changeset detected

Latest commit: 72fb606

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 7, 2026

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

Install it locally:

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

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 tightens CSS Modules behavior to avoid creating duplicate module instances when the same .module.<ext> file is reached both directly (JS import) and indirectly via ICSS (composes from / :import), and adds a dedicated circular-composes fixture to pin self-referential behavior against css-loader.

Changes:

  • Prevent duplicate CSS module instances by excluding .module.<ext> from the css-import-(local|global)-module default rules (so .module.* continues to be classified by the css/auto rule).
  • Collapse composes: <name> from "./self.module.css" inside self.module.css to a self-reference (and treat exact same-name self-compose as a no-op).
  • Update/extend config-case tests and snapshots (including a new composes-circular.module.css fixture) and adjust css-modules config-case bundling expectations for deterministic IDs.

Reviewed changes

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

Show a summary per file
File Description
test/configCases/css/reexport/snapshots/ConfigTest.snap Snapshot updates reflecting deduped CSS module output/class exports.
test/configCases/css/reexport/snapshots/ConfigCacheTest.snap Cache snapshot updates reflecting deduped CSS module output/class exports.
test/configCases/css/css-modules/webpack.config.js Narrows parser-option overrides to the entry stylesheet via a targeted rule.
test/configCases/css/css-modules/warnings.js Updates expected warning ordering/occurrence for css-modules config cases.
test/configCases/css/css-modules/test.config.js Makes bundle selection robust to deterministic numeric chunk prefixes.
test/configCases/css/css-modules/index.js Reads the production CSS output using a directory scan for the deterministic chunk name.
test/configCases/css/css-loader/index.js Adds the new circular composes fixture to the css-loader parity test list.
test/configCases/css/css-loader/composes-circular.module.css New fixture covering self-referential composes from in the same file.
test/configCases/css/css-loader/snapshots/ConfigTest.snap Snapshot updates + new snapshot entry for the circular composes fixture across export types.
test/configCases/css/css-loader/snapshots/ConfigCacheTest.snap Cache snapshot updates + new snapshot entry for the circular composes fixture.
lib/css/CssParser.js Adds self-reference detection for composes from and collapses same-file requests to self-references.
lib/config/defaults.js Excludes .module.<ext> from `css-import-(local
.changeset/css-modules-dedup-icss-import.md Changeset documenting the dedup fix and parser-option side effect.
.changeset/css-composes-circular-self-reference.md Changeset documenting the self-referential composes from fix.

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

Comment thread lib/css/CssParser.js Outdated
Comment on lines +680 to +698
const moduleResourcePath = parseResource(
/** @type {string} */ (module.getResource())
).path;

/**
* Check whether a request points back to the current module
* (e.g. `composes: foo from "./self.module.css"` inside `self.module.css`).
* Only relative requests are checked — aliases / package / absolute requests
* fall through to the normal import path.
* @param {string} request request string from `from "<request>"`
* @returns {boolean} true if request resolves to the current module
*/
const isSelfReferenceRequest = (request) => {
if (!/^\.{1,2}\//.test(request)) return false;
if (!module.context) return false;
const requestPath = parseResource(request).path;
try {
return path.resolve(module.context, requestPath) === moduleResourcePath;
} catch (_err) {
let cssOutputFilename;
if (prod) {
const files = fs.readdirSync(__dirname);
cssOutputFilename = files.find(f => /^\d+\.bundle1\.css$/.test(f));
@codecov
Copy link
Copy Markdown

codecov Bot commented May 7, 2026

Codecov Report

❌ Patch coverage is 90.00000% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 91.37%. Comparing base (325af56) to head (72fb606).

Files with missing lines Patch % Lines
lib/css/CssParser.js 89.47% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #20929      +/-   ##
==========================================
+ Coverage   91.35%   91.37%   +0.02%     
==========================================
  Files         568      568              
  Lines       56466    56486      +20     
  Branches    14993    14999       +6     
==========================================
+ Hits        51583    51614      +31     
+ Misses       4883     4872      -11     
Flag Coverage Δ
integration 90.31% <90.00%> (+0.02%) ⬆️
test262 45.60% <5.00%> (-0.02%) ⬇️
unit 36.03% <10.00%> (-0.02%) ⬇️

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.

alexander-akait added a commit that referenced this pull request May 7, 2026
* `isSelfReferenceRequest`: also compare `query` and `fragment` from
  `parseResource`, since `NormalModuleFactory` keys modules on the full
  resource string. `composes: foo from "./self.module.css?bar"` from a
  parent without `?bar` is no longer collapsed to a self-reference, so
  resource-query variants stay distinct.

* `test/configCases/css/css-modules/index.js`: throw an explicit error
  with the directory listing when no `*.bundle1.css` is found, instead
  of letting `path.join(undefined, ...)` blow up later with a less
  informative message.

* `webpack.config.js` typing: extract the base rules array so the type
  checker can flow into the `[...baseRules, ...]` spread (`base.module`
  was typed as optional, breaking `lint:types-test`).

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

codspeed-hq Bot commented May 7, 2026

Merging this PR will degrade performance by 82.39%

⚡ 8 improved benchmarks
❌ 6 regressed benchmarks
✅ 130 untouched benchmarks
⏩ 72 skipped benchmarks1

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

Performance Changes

Mode Benchmark BASE HEAD Efficiency
Memory benchmark "asset-modules-source", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 157.1 KB 368 KB -57.31%
Memory benchmark "many-chunks-commonjs", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 979.6 KB 464.1 KB ×2.1
Memory benchmark "many-chunks-commonjs", scenario '{"name":"mode-production","mode":"production"}' 8.9 MB 7.1 MB +25.09%
Memory benchmark "wasm-modules-sync", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 330.4 KB 577 KB -42.74%
Memory benchmark "devtool-eval", scenario '{"name":"mode-development","mode":"development"}' 1,276.2 KB 845.6 KB +50.92%
Memory benchmark "many-chunks-esm", scenario '{"name":"mode-production","mode":"production"}' 9.3 MB 7.6 MB +23.29%
Memory benchmark "devtool-eval-source-map", scenario '{"name":"mode-development","mode":"development"}' 820.3 KB 1,398.7 KB -41.35%
Memory benchmark "asset-modules-source", scenario '{"name":"mode-development","mode":"development"}' 831.9 KB 4,723.1 KB -82.39%
Memory benchmark "side-effects-reexport", scenario '{"name":"mode-development","mode":"development"}' 5 MB 4.2 MB +20.82%
Memory benchmark "asset-modules-resource", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 397.6 KB 215.4 KB +84.6%
Memory benchmark "future-defaults", scenario '{"name":"mode-development","mode":"development"}' 1.4 MB 1.8 MB -26.37%
Memory benchmark "concatenate-modules", scenario '{"name":"mode-development","mode":"development"}' 556.5 KB 746.8 KB -25.48%
Memory benchmark "concatenate-modules", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 297.9 KB 159.6 KB +86.73%
Memory benchmark "json-modules", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 293.2 KB 185.5 KB +58.08%

Comparing claude/add-circular-compose-test-syL5J (72fb606) with main (325af56)

Open in CodSpeed

Footnotes

  1. 72 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

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 14 out of 14 changed files in this pull request and generated 1 comment.

Comment thread lib/css/CssParser.js
Comment on lines +684 to +692
/**
* Check whether a request points back to the current module
* (e.g. `composes: foo from "./self.module.css"` inside `self.module.css`).
* Only relative requests are checked — aliases / package / absolute requests
* fall through to the normal import path. Requests with a `?query` or
* `#fragment` are only treated as self when the parent module's resource
* has the same query/fragment, since `NormalModuleFactory` keys modules
* on the full resource string.
* @param {string} request request string from `from "<request>"`
Adds composes-circular.module.css covering `.local-name { composes:
local-name from "./composes-circular.module.css" }` (a class composing
itself from the same file) so the snapshot pins webpack's output for
self-referential composes against css-loader behavior.

https://claude.ai/code/session_01LBzxuwEJhYcDUrD6xUQBid
A `composes: foo from "./self.module.css"` written inside
`self.module.css` previously created a CssIcssImportDependency that
factory-resolved into a second `css/module` instance of the same file
(the original was loaded as `css/auto`). The CSS chunk emitted both
copies with different localIdent hashes, and the JS export string
chained the duplicated class names.

CssParser now detects when a relative `from` request points back to the
current module and emits a SELF_REFERENCE export dependency instead of
an import + APPEND pair, matching css-loader. When the composed name
equals the local class name (e.g. `.foo { composes: foo from "./self.module.css" }`),
no extra dependency is emitted at all — it is a true no-op.

Aliased / package / absolute requests are intentionally untouched
because they require resolver work to compare safely.

https://claude.ai/code/session_01LBzxuwEJhYcDUrD6xUQBid
The default rule

    { dependency: /css-import-(local|global)-module/, type: css/module }

forces any file pulled in by `composes: ... from "./x"` or
`:import("./x")` to type `css/module`. For plain `.css` files this is
needed so they're parsed as CSS modules. But for `.module.<ext>` files
the auto rule already classifies them as modules, and overriding the
type stamp to `css/module` makes `NormalModuleFactory` keep the
icss-imported instance separate from a sibling `css/auto` instance
loaded directly by JS — same resource, two module IDs, two `localIdent`
hashes, two copies of the file in the CSS chunk, and chained class
names in the JS export.

Add `exclude: /\.module\.\w+$/i` to both rules so `.module.css`,
`.module.less`, `.module.scss`, etc. fall back to whatever the file's
own rule assigns. The result is a single module instance, single hash,
single CSS block, css-loader-shaped exports.

Knock-on test fixture changes:

* `test/configCases/css/css-modules/index.js` and `test.config.js`:
  the deterministic JS chunk filename pattern (`501.bundle1.js`,
  `272.bundle3.js`, `244.bundle5.js`) was hardcoded — those module IDs
  shifted because at-rule-value.module.css and friends now keep their
  `css/auto` type. Resolved at runtime via a regex-scan of the output
  directory so future shifts don't break the harness.
* `test/configCases/css/css-modules/warnings.js`: the per-config
  warning order changed when at-rule-value.module.css went from
  `css/module` to `css/auto`; the @value warnings now arrive before
  the :global/:local warnings. Reordered to match.
* CSS chunk and JS export snapshots in `css-loader`, `css-modules`,
  and `reexport`: the duplicated blocks / hash-suffixed class names
  collapse to a single instance.

https://claude.ai/code/session_01LBzxuwEJhYcDUrD6xUQBid
Parser options configured under `module.parser["css/auto"]` now also
apply to `.module.<ext>` files reached via icss-import. Previously the
forced `css/module` type silently overrode them. Users who relied on
the old behavior need to mirror their `css/auto` parser options under
`css/module`.

https://claude.ai/code/session_01LBzxuwEJhYcDUrD6xUQBid
The "should allow to disable" test set parser options under
`module.parser["css/auto"]`, which now (post dedup fix) propagates to
`@import`ed `.module.css` files. That correctly disabled custom-property
hashing in `var-function.module.css` too — but it also wiped its
`var(--foo from "./var-function-export.modules.css")` icss-imports,
since `dashedIdents: false` short-circuits the parser before the
import dependency is emitted.

Move the option overrides to a rule-specific `parser` block keyed on
`/style\.module\.css$/` so the disable applies only to the entry. The
@imported `var-function.module.css` keeps default options, its custom
properties stay hashed, and `var-function-export.modules.css` is
loaded again.

https://claude.ai/code/session_01LBzxuwEJhYcDUrD6xUQBid
* `isSelfReferenceRequest`: also compare `query` and `fragment` from
  `parseResource`, since `NormalModuleFactory` keys modules on the full
  resource string. `composes: foo from "./self.module.css?bar"` from a
  parent without `?bar` is no longer collapsed to a self-reference, so
  resource-query variants stay distinct.

* `test/configCases/css/css-modules/index.js`: throw an explicit error
  with the directory listing when no `*.bundle1.css` is found, instead
  of letting `path.join(undefined, ...)` blow up later with a less
  informative message.

* `webpack.config.js` typing: extract the base rules array so the type
  checker can flow into the `[...baseRules, ...]` spread (`base.module`
  was typed as optional, breaking `lint:types-test`).

https://claude.ai/code/session_01LBzxuwEJhYcDUrD6xUQBid
`Defaults.unittest.js` pins the resolved default `module.rules` array.
Adding `exclude: /\.module\.\w+$/i` to the
`css-import-(local|global)-module` dependency rules in `defaults.js`
changes that array, so the inline snapshots (and the surrounding
context lines they reflow into) need to be regenerated. Ran
`yarn test:unit -u`; only the two CSS-defaults snapshots updated.

https://claude.ai/code/session_01LBzxuwEJhYcDUrD6xUQBid
@alexander-akait alexander-akait force-pushed the claude/add-circular-compose-test-syL5J branch from 5047463 to 72fb606 Compare May 8, 2026 10:39
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 8, 2026

Types Coverage

Coverage after merging claude/add-circular-compose-test-syL5J into main will be
98.93%
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%1074, 1383, 473, 485
   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.85%100%100%98.85%519–520, 525, 527, 591
   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.15%100%100%99.15%1327–1329, 1337, 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 d21b845 into main May 8, 2026
61 checks passed
@alexander-akait alexander-akait deleted the claude/add-circular-compose-test-syL5J branch May 8, 2026 12:21
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