Skip to content

build: upgrade typescript to v6 and patch tooling symbol-prop bug#20982

Merged
alexander-akait merged 1 commit into
mainfrom
claude/upgrade-typescript-v6-cyziZ
May 19, 2026
Merged

build: upgrade typescript to v6 and patch tooling symbol-prop bug#20982
alexander-akait merged 1 commit into
mainfrom
claude/upgrade-typescript-v6-cyziZ

Conversation

@alexander-akait

Copy link
Copy Markdown
Member

TypeScript 6.0 renumbered TypeFlags.ESSymbol/UniqueESSymbol, exposing a
latent category-error in tooling's generate-types that ANDed prop.flags
(SymbolFlags) against ts.TypeFlags.ESSymbolLike. The check used to keep
Symbol-keyed methods only because SymbolFlags.Method (8192) happened to
overlap with TypeFlags.ESSymbol (8192) in TS 5; under TS 6 the values no
longer overlap so Symbol.iterator etc. were being stripped from the
generated types.d.ts. Patched node_modules/tooling/generate-types via
patch-package to use ts.SymbolFlags.Method, preserving the prior
generated output.

Also adjusts to TS 6 fallout: avoid statically resolving assemblyscript
types in tooling/generate-wasm-code.js (its global d.ts redeclares
require), cast JSON schema requires through Schema, mark
cli.js Schema's CLI extensions optional (they always were in practice),
silence target=ES5 and moduleResolution=node deprecation errors via
ignoreDeprecations, and add types:[node] to tsconfig.hot.json.

Copilot AI review requested due to automatic review settings May 19, 2026 19:27
@changeset-bot

changeset-bot Bot commented May 19, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: a382bbb

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

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

@github-actions

github-actions Bot commented May 19, 2026

Copy link
Copy Markdown
Contributor

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

Install it locally:

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

@codecov

codecov Bot commented May 19, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.91%. Comparing base (45a1bab) to head (a382bbb).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main   #20982      +/-   ##
==========================================
- Coverage   90.92%   90.91%   -0.01%     
==========================================
  Files         573      573              
  Lines       58868    58868              
  Branches    15860    15860              
==========================================
- Hits        53525    53522       -3     
- Misses       5343     5346       +3     
Flag Coverage Δ
integration 89.68% <100.00%> (-0.01%) ⬇️
test262 45.38% <50.00%> (ø)
unit 36.61% <50.00%> (ø)

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.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

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 the TypeScript/tooling stack for TypeScript 6 compatibility and adjusts related type-checking workarounds for schema JSON imports and dynamic AssemblyScript loading.

Changes:

  • Upgrades typescript to ^6.0.3 and tooling to webpack/tooling#v1.26.2.
  • Adjusts TypeScript configs for module/hot type checks.
  • Adds JSDoc casts around JSON schema require calls and avoids static resolution of assemblyscript/asc.

Reviewed changes

Copilot reviewed 12 out of 13 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
package.json Updates TypeScript and tooling dev dependencies.
yarn.lock Locks updated TypeScript and tooling versions.
tsconfig.module.test.json Switches module test resolution to bundler.
tsconfig.hot.json Updates hot type-check target/libs and type package filtering.
tooling/generate-wasm-code.js Uses an indirect dynamic import for AssemblyScript asc.
lib/webpack.js Casts Webpack options schema JSON import.
lib/index.js Casts lazy Webpack options schema JSON import.
lib/IgnorePlugin.js Casts IgnorePlugin schema JSON import.
lib/cli.js Casts CLI schema JSON import.
lib/asset/AssetModulesPlugin.js Casts Webpack schema JSON import before destructuring definitions.
test/configCases/validate/loader-options/loader.js Casts loader option schema JSON import.
test/configCases/loaders/options/loader-1.js Casts loader option schema JSON import.
test/configCases/loaders/options/loader-2.js Casts loader option schema JSON import.

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

Comment thread tsconfig.hot.json
"module": "commonjs",
"lib": ["es5", "dom"],
"lib": ["es2015", "dom"],
"types": ["*"],

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

"*" is a documented wildcard for compilerOptions.types in TS 6 — it's handled in getAutomaticTypeDirectiveNames in typescript.js:

function getAutomaticTypeDirectiveNames(options, host) {
  if (!usesWildcardTypes(options)) {
    return options.types ?? [];
  }
  // ...wildcard expansion over typeRoots
  return deduplicate(flatten(options.types.map((t) => t === "*" ? wildcardMatches : t)), equateValues);
}
function usesWildcardTypes(options) {
  return some(options.types, (t) => t === "*");
}

When types contains "*", it expands to every package directory under typeRoots (i.e. the pre-TS6 "no types field" default). yarn lint:types-hot passes on the current commit, no TS2688.


Generated by Claude Code

@codspeed-hq

codspeed-hq Bot commented May 19, 2026

Copy link
Copy Markdown

Merging this PR will improve performance by 46.4%

⚡ 7 improved benchmarks
❌ 5 regressed benchmarks
✅ 132 untouched benchmarks
⏩ 72 skipped benchmarks1

Warning

Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Mode Benchmark BASE HEAD Efficiency
Memory benchmark "future-defaults", scenario '{"name":"mode-production","mode":"production"}' 9.3 MB 7.7 MB +20.68%
Memory benchmark "side-effects-reexport", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 405.2 KB 860.1 KB -52.89%
Memory benchmark "devtool-eval", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 404.8 KB 917.6 KB -55.89%
Memory benchmark "many-chunks-commonjs", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 445.5 KB 167.6 KB ×2.7
Memory benchmark "context-esm", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 663.2 KB 146.5 KB ×4.5
Memory benchmark "cache-filesystem", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 845.5 KB 168.7 KB ×5
Memory benchmark "side-effects-reexport", scenario '{"name":"mode-development","mode":"development"}' 5 MB 4 MB +24.78%
Memory benchmark "asset-modules-source", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 3,722.1 KB 398.5 KB ×9.3
Memory benchmark "concatenate-modules", scenario '{"name":"mode-development","mode":"development"}' 781.6 KB 1,000.9 KB -21.91%
Memory benchmark "many-modules-esm", scenario '{"name":"mode-development","mode":"development"}' 840 KB 1,358.3 KB -38.16%
Memory benchmark "many-chunks-esm", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 248.5 KB 169.4 KB +46.75%
Memory benchmark "many-chunks-commonjs", scenario '{"name":"mode-production","mode":"production"}' 7.4 MB 9.6 MB -22.37%

Tip

Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.


Comparing claude/upgrade-typescript-v6-cyziZ (a382bbb) with main (45a1bab)

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.

- typescript 5.9.3 -> 6.0.3
- tooling 1.26.1 -> 1.26.2 (includes the upstream fix to generate-types
  for the SymbolFlags/TypeFlags category-error that under TS 6 was
  silently stripping [Symbol.iterator]() etc. from types.d.ts)
- tooling/generate-wasm-code.js: use an indirect specifier for the
  `assemblyscript/asc` dynamic import so TypeScript does not statically
  resolve it and pull in its global d.ts which redeclares `require`
- lib/{webpack,index,cli,IgnorePlugin,asset/AssetModulesPlugin}.js and
  three test loaders: single EXPECTED_ANY cast around
  require("...schema.json") sites that pass the JSON directly to
  schema-utils. TS 6 infers JSON imports with `type: string` (widened
  from the "object" literal), which no longer satisfies
  JSONSchema7TypeName
- tsconfig.hot.json: target ES5 -> ES2015, lib ["es5","dom"] ->
  ["es2015","dom"] (target ES5 is deprecated in TS 6), and add
  "types": ["*"]. TS 6 changed getAutomaticTypeDirectiveNames so that
  with `types` unset it returns `[]` instead of auto-discovering every
  @types/* package. "*" is the spelling that restores the pre-TS6
  implicit behavior
- tsconfig.module.test.json: moduleResolution "node" -> "bundler"
  (matches `module: esnext` and avoids the node10 deprecation)
@alexander-akait alexander-akait force-pushed the claude/upgrade-typescript-v6-cyziZ branch from 314f1cb to a382bbb Compare May 19, 2026 20:09
@github-actions

Copy link
Copy Markdown
Contributor

Types Coverage

Coverage after merging claude/upgrade-typescript-v6-cyziZ into main will be
98.96%
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.js100%100%100%100%
examples/typescript-non-erasable
   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.js99.15%100%100%99.15%206, 226
   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.js98.41%100%100%98.41%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.96%100%100%98.96%424–428, 576
   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%1305, 1310, 1371, 1385, 1447, 1456
   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%1075, 1384, 474, 486
   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.46%100%100%98.46%10, 119, 471, 503, 545, 815
   index.js99.72%100%100%99.72%163
   validateSchema.js94.67%100%100%94.67%100, 87, 89, 98
   webpack.js96.33%100%100%96.33%10, 198, 220, 222
lib/asset
   AssetBytesGenerator.js100%100%100%100%
   AssetBytesParser.js100%100%100%100%
   AssetGenerator.js100%100%100%100%
   AssetModulesPlugin.js97.33%100%100%97.33%287, 311, 314, 366, 37, 42
   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.29%100%100%99.29%1411–1413, 1421, 271, 274, 279, 283
   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.js

@alexander-akait alexander-akait merged commit f8076be into main May 19, 2026
59 of 60 checks passed
@alexander-akait alexander-akait deleted the claude/upgrade-typescript-v6-cyziZ branch May 19, 2026 20:56
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