Skip to content

Test css more#20771

Merged
alexander-akait merged 19 commits intomainfrom
test-css-more
Apr 3, 2026
Merged

Test css more#20771
alexander-akait merged 19 commits intomainfrom
test-css-more

Conversation

@alexander-akait
Copy link
Copy Markdown
Member

Summary

bugfix

What kind of change does this PR introduce?

fix

Did you add tests for your changes?

Yes

Does this PR introduce a breaking change?

No

If relevant, what needs to be documented once your changes are merged or what have you already documented?

Nothing

Use of AI

No

Copilot AI review requested due to automatic review settings April 3, 2026 17:13
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Apr 3, 2026

🦋 Changeset detected

Latest commit: 9f544fa

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

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

Install it locally:

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

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 expands CSS Modules test coverage (notably re-exporting and composition scenarios) and updates webpack’s internal ICSS parsing/resolution logic to fix CSS Modules symbol/value resolution.

Changes:

  • Added a new css/reexport config case with multi-mode builds and snapshot assertions for emitted CSS + JS exports.
  • Refactored ICSS import/export/symbol dependency modeling and resolution (including @value parsing and composes handling).
  • Updated multiple existing snapshot baselines and warning expectations to reflect the new resolution behavior.

Reviewed changes

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

Show a summary per file
File Description
test/configCases/css/reexport/webpack.config.js New config case running in development + production for CSS experiments.
test/configCases/css/reexport/index.js Snapshot test asserting emitted CSS and module exports.
test/configCases/css/reexport/test.config.js Injects generated CSS into the test DOM via <link>.
test/configCases/css/reexport/styles.module.css Comprehensive fixture covering @value, reexports, composes, globals, custom properties, etc.
test/configCases/css/reexport/value-at-rule.module.css Fixture for @value ... from ... and indirect imports.
test/configCases/css/reexport/theme.module.css Fixture for chained @value reexports.
test/configCases/css/reexport/colors.module.css Fixture for values + deep import.
test/configCases/css/reexport/colors-more.module.css Fixture backing deep value imports.
test/configCases/css/reexport/selectors.module.css Fixture for selector value imports/reexports.
test/configCases/css/reexport/selectors-more.module.css Fixture backing selector reexports.
test/configCases/css/reexport/cyclical.module.css Fixture for cyclical ICSS cases.
test/configCases/css/reexport/vars.module.css Fixture for custom properties / vars.
test/configCases/css/reexport/shared-custom-properties.module.css Fixture for shared custom properties with deep var() usage.
test/configCases/css/reexport/shared-deep-custom-properties.module.css Fixture for deep custom properties.
test/configCases/css/reexport/reset.module.css Fixture used via composes chain.
test/configCases/css/reexport/atoms-extra.module.css Fixture used via composes chain.
test/configCases/css/reexport/atoms.module.css Fixture used via composes chain.
test/configCases/css/reexport/button.module.css Fixture for reexported class composition.
test/configCases/css/reexport/button-reexport.module.css Fixture for reexport target.
test/configCases/css/reexport/classes-deep.module.css Fixture for deep selector/class export chains.
test/configCases/css/reexport/classes.module.css Fixture for selector exports and nested imports.
test/configCases/css/reexport/classes-the-same.module.css Fixture to validate same class names across modules.
test/configCases/css/reexport/abcd.modules.css Fixture for imported class sets used in composes.
test/configCases/css/reexport/pseudo-import-and-export.module.css Fixture for :import/:export pseudo rules and reexport chaining.
test/configCases/css/reexport/pseudo-import-and-export-deep.module.css Fixture for deeper pseudo import/export chaining.
test/configCases/css/reexport/pseudo-import-and-export-deep-more.module.css Fixture for deepest pseudo export leaf.
test/configCases/css/reexport/snapshots/ConfigTest.snap New snapshots for the reexport case.
test/configCases/css/reexport/snapshots/ConfigCacheTest.snap New cache-mode snapshots for the reexport case.
test/configCases/css/css-modules/warnings.js Adds expected warning for additional broken @value form.
test/configCases/css/postcss-modules-plugins/snapshots/ConfigTest.snap Snapshot updates reflecting new resolution/composes behavior.
test/configCases/css/postcss-modules-plugins/snapshots/ConfigCacheTest.snap Cache snapshot updates reflecting new resolution/composes behavior.
test/configCases/css/css-loader/snapshots/ConfigTest.snap Snapshot updates reflecting new class aggregation results.
test/configCases/css/css-loader/snapshots/ConfigCacheTest.snap Cache snapshot updates reflecting new class aggregation results.
lib/dependencies/CssIcssSymbolDependency.js Refactors symbol dependency shape to support new resolution model.
lib/dependencies/CssIcssImportDependency.js Simplifies ICSS import dependency to focus on import/local naming.
lib/dependencies/CssIcssExportDependency.js Adds new resolve logic, composes export type, and reference aggregation.
lib/css/CssParser.js Reworks @value parsing and ICSS definition tracking for reexports/composes/custom props.
.changeset/clean-radios-punch.md Patch changeset documenting the CSS Modules resolving fix.

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

Comment thread lib/dependencies/CssIcssSymbolDependency.js
Comment thread lib/dependencies/CssIcssExportDependency.js Outdated
Comment thread lib/dependencies/CssIcssExportDependency.js
Comment thread lib/css/CssParser.js Outdated
@codspeed-hq
Copy link
Copy Markdown

codspeed-hq Bot commented Apr 3, 2026

Merging this PR will degrade performance by 25.55%

⚡ 3 improved benchmarks
❌ 1 regressed benchmark
✅ 140 untouched benchmarks

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

Performance Changes

Mode Benchmark BASE HEAD Efficiency
Memory benchmark "lodash", scenario '{"name":"mode-development","mode":"development"}' 5.3 MB 4.1 MB +29.2%
Memory benchmark "react", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 865.3 KB 645.2 KB +34.11%
Memory benchmark "cache-filesystem", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 765.1 KB 1,027.6 KB -25.55%
Memory benchmark "css-modules", scenario '{"name":"mode-production","mode":"production"}' 8.5 MB 7.1 MB +20.43%

Comparing test-css-more (9f544fa) with main (61fbd29)

Open in CodSpeed

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 3, 2026

Types Coverage

Coverage after merging test-css-more into main will be
98.95%
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%
lib
   APIPlugin.js100%100%100%100%
   AbstractMethodError.js100%100%100%100%
   AsyncDependenciesBlock.js100%100%100%100%
   AsyncDependencyToInitialChunkError.js100%100%100%100%
   AutomaticPrefetchPlugin.js100%100%100%100%
   BannerPlugin.js100%100%100%100%
   Cache.js98.21%100%100%98.21%87
   CacheFacade.js100%100%100%100%
   CaseSensitiveModulesWarning.js100%100%100%100%
   Chunk.js99.72%100%100%99.72%37
   ChunkGraph.js100%100%100%100%
   ChunkGroup.js100%100%100%100%
   ChunkRenderError.js100%100%100%100%
   ChunkTemplate.js100%100%100%100%
   CleanPlugin.js98.72%100%100%98.72%196, 216, 371
   CodeGenerationError.js100%100%100%100%
   CodeGenerationResults.js100%100%100%100%
   CommentCompilationWarning.js100%100%100%100%
   CompatibilityPlugin.js100%100%100%100%
   Compilation.js98.55%100%100%98.55%1511, 1800, 1807, 1815, 1837, 2713, 3131, 3779, 3808, 3860–3861, 3865, 3870, 3886–3887, 3901–3902, 3907–3908, 4370, 4396, 470, 475, 5091, 5171, 5186, 5211–5212, 5214, 5530, 5535, 5541, 5544, 5556, 5558, 5562, 5578, 5593, 5624, 5678, 5702, 5812, 681–682
   Compiler.js99.56%100%100%99.56%1091–1092, 1100
   ConcatenationScope.js98.59%100%100%98.59%166
   ConcurrentCompilationError.js100%100%100%100%
   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%253, 385, 410, 435, 439, 450
   ContextReplacementPlugin.js100%100%100%100%
   CssModule.js81.32%100%100%81.32%152, 157–172
   DefinePlugin.js98.92%100%100%98.92%153–154, 170, 189, 263
   DelegatedModule.js95.24%100%100%95.24%240–244
   DelegatedModuleFactoryPlugin.js98.15%100%100%98.15%103
   DelegatedPlugin.js100%100%100%100%
   DependenciesBlock.js100%100%100%100%
   Dependency.js98.13%100%100%98.13%351, 381
   DependencyTemplate.js100%100%100%100%
   DependencyTemplates.js100%100%100%100%
   DllEntryPlugin.js100%100%100%100%
   DllModule.js100%100%100%100%
   DllModuleFactory.js100%100%100%100%
   DllPlugin.js100%100%100%100%
   DllReferencePlugin.js100%100%100%100%
   DotenvPlugin.js97.88%100%100%97.88%235, 375, 388–389
   DynamicEntryPlugin.js100%100%100%100%
   EntryOptionPlugin.js100%100%100%100%
   EntryPlugin.js100%100%100%100%
   Entrypoint.js100%100%100%100%
   EnvironmentNotSupportAsyncWarning.js100%100%100%100%
   EnvironmentPlugin.js97.14%100%100%97.14%48
   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%385–389, 526
   ExternalModuleFactoryPlugin.js100%100%100%100%
   ExternalsPlugin.js100%100%100%100%
   FalseIIFEUmdWarning.js100%100%100%100%
   FileSystemInfo.js99.49%100%100%99.49%168, 2142–2143, 2146, 2157, 2168, 2179, 261, 3497, 3512, 3536
   FlagAllModulesAsUsedPlugin.js100%100%100%100%
   FlagDependencyExportsPlugin.js98.74%100%100%98.74%396, 398, 402
   FlagDependencyUsagePlugin.js100%100%100%100%
   FlagEntryExportAsUsedPlugin.js100%100%100%100%
   Generator.js100%100%100%100%
   GraphHelpers.js100%100%100%100%
   HarmonyLinkingError.js100%100%100%100%
   HookWebpackError.js100%100%100%100%
   HotModuleReplacementPlugin.js100%100%100%100%
   HotUpdateChunk.js100%100%100%100%
   IgnoreErrorModuleFactory.js100%100%100%100%
   IgnorePlugin.js100%100%100%100%
   IgnoreWarningsPlugin.js100%100%100%100%
   InitFragment.js100%100%100%100%
   InvalidDependenciesModuleWarning.js100%100%100%100%
   JavascriptMetaInfoPlugin.js100%100%100%100%
   LibManifestPlugin.js97.14%100%100%97.14%114, 117
   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%1186, 1191, 1249, 1262, 1319, 1327
   ModuleBuildError.js100%100%100%100%
   ModuleDependencyError.js100%100%100%100%
   ModuleDependencyWarning.js100%100%100%100%
   ModuleError.js100%100%100%100%
   ModuleFactory.js100%100%100%100%
   ModuleFilenameHelpers.js98.85%100%100%98.85%105, 107
   ModuleGraph.js99.73%100%100%99.73%942
   ModuleGraphConnection.js100%100%100%100%
   ModuleHashingError.js100%100%100%100%
   ModuleInfoHeaderPlugin.js100%100%100%100%
   ModuleNotFoundError.js100%100%100%100%
   ModuleParseError.js100%100%100%100%
   ModuleProfile.js100%100%100%100%
   ModuleRestoreError.js100%100%100%100%
   ModuleSourceTypeConstants.js100%100%100%100%
   ModuleStoreError.js100%100%100%100%
   ModuleTemplate.js100%100%100%100%
   ModuleTypeConstants.js100%100%100%100%
   ModuleWarning.js100%100%100%100%
   MultiCompiler.js99.69%100%100%99.69%619
   MultiStats.js100%100%100%100%
   MultiWatching.js100%100%100%100%
   NoEmitOnErrorsPlugin.js100%100%100%100%
   NoModeWarning.js100%100%100%100%
   NodeStuffInWebError.js100%100%100%100%
   NodeStuffPlugin.js100%100%100%100%
   NormalModule.js97.78%100%100%97.78%1032, 1048, 1135, 1765, 1770–1780, 214, 722, 740, 757, 998
   NormalModuleFactory.js99.46%100%100%99.46%1032, 1337, 447, 459
   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%431–432, 437, 439, 503
   ProvidePlugin.js100%100%100%100%
   RawModule.js100%100%100%100%
   RecordIdsPlugin.js100%100%100%100%
   RequestShortener.js100%100%100%100%
   RequireJsStuffPlugin.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%
   SizeFormatHelpers.js100%100%100%100%
   SourceMapDevToolModuleOptionsPlugin.js100%100%100%100%
   SourceMapDevToolPlugin.js99.16%100%100%99.16%265–266, 608
   Stats.js100%100%100%100%
   Template.js100%100%100%100%
   TemplatedPathPlugin.js98.85%100%100%98.85%128–129
   UnhandledSchemeError.js100%100%100%100%
   UnsupportedFeatureWarning.js100%100%100%100%
   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.js96.97%100%100%96.97%43
   WebpackIsIncludedPlugin.js100%100%100%100%
   WebpackOptionsApply.js100%100%100%100%
   WebpackOptionsDefaulter.js100%100%100%100%
   buildChunkGraph.js99.87%100%100%99.87%317
   cli.js98.71%100%100%98.71%109, 453, 485, 527, 787
   formatLocation.js100%100%100%100%
   index.js100%100%100%100%
   validateSchema.js94.67%100%100%94.67%86, 88, 97, 99
   webpack.js97.22%100%100%97.22%186, 208, 210
lib/asset
   AssetBytesGenerator.js100%100%100%100%
   AssetBytesParser.js100%100%100%100%
   AssetGenerator.js100%100%100%100%
   AssetModulesPlugin.js97.77%100%100%97.77%282, 306, 309, 361, 39
   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%70, 82, 90
   MemoryCachePlugin.js95.83%100%100%95.83%33
   MemoryWithGcCachePlugin.js93.15%100%100%93.15%104, 111–112, 120, 87
   PackFileCacheStrategy.js96.40%100%100%96.40%1225,

@alexander-akait alexander-akait merged commit 91aa5da into main Apr 3, 2026
55 of 56 checks passed
@alexander-akait alexander-akait deleted the test-css-more branch April 3, 2026 19:03
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