Skip to content

[BUGFIX] Remove barrel file imports from internal code for better tree-shaking#21350

Open
NullVoxPopuli wants to merge 13 commits intomainfrom
nvp/remove-barrel-imports
Open

[BUGFIX] Remove barrel file imports from internal code for better tree-shaking#21350
NullVoxPopuli wants to merge 13 commits intomainfrom
nvp/remove-barrel-imports

Conversation

@NullVoxPopuli
Copy link
Copy Markdown
Contributor

@NullVoxPopuli NullVoxPopuli commented Apr 30, 2026

The overall goal here is to be able to better analyze the dependency graph and not have arbitrary walls between packages, so that we can better refactor, trim away, and untangle all the imports.


Replace all internal imports with direct imports from the specific source files that define what is needed. Also replace all export * patterns in @ember packages with explicit named exports.

This is... quite a bit more annoying for typing out imports.... but, it allows us to better progress towards more optimized bundles, and allows us to analyze all of ember-source, without having to go through our artificially created package entrypoints.

The entrypoints are unchanged, as they are public/intimate API, but our own code won't be using them (except in tests).

I've also created a lint to autofix any usages of these things, because doing it manually is a bad time.

Test files are intentionally left unchanged as they may use barrel imports.

Here is an example of where we can go next: #21354


TLDR ALREADY

smallest project possible (weekend warrior enablement)

goes from 77kb gzip to 37kb gzip

Replace all internal barrel imports (from `@ember/-internals/glimmer`,
`@ember/-internals/environment`, etc.) with direct imports from the
specific source files that define what is needed. Also replace all
`export *` patterns in `@ember` packages with explicit named exports.

- Update ~40 source files to import from specific lib paths instead of
  barrel `index.ts` files
- Replace `export *` with named exports in `@ember/-internals/environment`,
  `@ember/engine/parent`, `@ember/template-compiler/*`, `ember-template-compiler`,
  and `ember-testing`
- Replace `import * as environment` with named `{ hasDOM }` import in
  `@ember/application/instance`
- Add deep import path entries to `@ember/-internals/package.json` exports map
- Add `@glimmer/opcode-compiler` dependency to `ember-template-compiler`

Test files are intentionally left unchanged as they may use barrel imports.
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 30, 2026

📊 Package size report   -0.44%↓

File Before (Size / Brotli) After (Size / Brotli)
Total (Includes all files) 5.4 MB / 1.3 MB -0.44%↓5.3 MB / 1%↑1.3 MB
Tarball size 1.2 MB -3.07%↓1.2 MB
Show files (239 files)
File Before (Size / Brotli) After (Size / Brotli)
dist/dev/packages/@ember/-internals/container/index.js 25.3 kB / 5.2 kB -49.7%↓12.8 kB / -47.8%↓2.7 kB
dist/dev/packages/@ember/-internals/environment/index.js 5.8 kB / 1.7 kB -89.2%↓625 B / -82.7%↓301 B
dist/dev/packages/@ember/-internals/metal/index.js 3.8 kB / 1.2 kB 16%↑4.4 kB / 9%↑1.3 kB
dist/dev/packages/@ember/-internals/routing/index.js 1 kB / 314 B -42.8%↓596 B / -35.4%↓203 B
dist/dev/packages/@ember/-internals/runtime/lib/mixins/action_handler.js 6.3 kB / 1.7 kB -7.97%↓5.8 kB / -7.12%↓1.6 kB
dist/dev/packages/@ember/-internals/runtime/lib/mixins/target_action_support.js 5 kB / 1.3 kB -7.89%↓4.6 kB / -5.71%↓1.2 kB
dist/dev/packages/@ember/-internals/utils/index.js 1.4 kB / 583 B 22%↑1.7 kB / 12%↑651 B
dist/dev/packages/@ember/-internals/views/lib/mixins/action_support.js 1.7 kB / 587 B -28.7%↓1.2 kB / -15.7%↓495 B
dist/dev/packages/@ember/-internals/views/lib/system/event_dispatcher.js 10.4 kB / 2.6 kB -4.8%↓9.9 kB / -4.83%↓2.5 kB
dist/dev/packages/@ember/-internals/views/lib/views/core_view.js 3.2 kB / 1 kB -27.8%↓2.3 kB / -18%↓827 B
dist/dev/packages/@ember/application/index.js 36.4 kB / 9 kB -3.24%↓35.3 kB / -2.65%↓8.8 kB
dist/dev/packages/@ember/application/instance.js 15.9 kB / 4.4 kB -5.74%↓15 kB / -5.39%↓4.1 kB
dist/dev/packages/@ember/application/namespace.js 2.4 kB / 778 B -15%↓2 kB / -13.6%↓672 B
dist/dev/packages/@ember/array/index.js 19.1 kB / 4.7 kB -1.86%↓18.8 kB / -1.94%↓4.6 kB
dist/dev/packages/@ember/array/proxy.js 10.7 kB / 2.6 kB -1.41%↓10.5 kB / -2.12%↓2.5 kB
dist/dev/packages/@ember/component/helper.js 689 B / 223 B -87.8%↓84 B / -61%↓87 B
dist/dev/packages/@ember/component/index.js 1.6 kB / 472 B 2,740%↑44.4 kB / 2,070%↑10.2 kB
dist/dev/packages/@ember/component/template-only.js 1.6 kB / 614 B -24.9%↓1.2 kB / -18.7%↓499 B
dist/dev/packages/@ember/controller/index.js 5.6 kB / 1.7 kB -13.6%↓4.8 kB / -9.13%↓1.6 kB
dist/dev/packages/@ember/debug/container-debug-adapter.js 3.8 kB / 1.2 kB -25.5%↓2.8 kB / -19.7%↓939 B
dist/dev/packages/@ember/debug/data-adapter.js 16.2 kB / 3.9 kB -1.96%↓15.9 kB / -2.26%↓3.9 kB
dist/dev/packages/@ember/engine/index.js 16.6 kB / 3.9 kB -7.84%↓15.3 kB / -7.52%↓3.6 kB
dist/dev/packages/@ember/engine/instance.js 7.2 kB / 2.2 kB -3.96%↓6.9 kB / -2.35%↓2.1 kB
dist/dev/packages/@ember/helper/index.js 18.7 kB / 4.9 kB -2.72%↓18.2 kB / -2.59%↓4.8 kB
dist/dev/packages/@ember/modifier/index.js 1.1 kB / 351 B -61.7%↓424 B / -41.3%↓206 B
dist/dev/packages/@ember/modifier/on.js 1.1 kB / 454 B -36%↓732 B / -22.5%↓352 B
dist/dev/packages/@ember/object/-internals.js 2.5 kB / 852 B -16%↓2.1 kB / -11.2%↓757 B
dist/dev/packages/@ember/object/compat.js 6.4 kB / 1.6 kB -5.29%↓6.1 kB / -5.42%↓1.5 kB
dist/dev/packages/@ember/object/computed.js 982 B / 375 B -48.7%↓504 B / -34.4%↓246 B
dist/dev/packages/@ember/object/core.js 32.3 kB / 7.8 kB -1.16%↓31.9 kB / -0.46%↓7.8 kB
dist/dev/packages/@ember/object/evented.js 2.1 kB / 656 B -23.4%↓1.6 kB / -17.4%↓542 B
dist/dev/packages/@ember/object/events.js 592 B / 240 B -81.1%↓112 B / -60%↓96 B
dist/dev/packages/@ember/object/index.js 7.4 kB / 2.1 kB -2.01%↓7.3 kB / -1.94%↓2 kB
dist/dev/packages/@ember/object/lib/computed/computed_macros.js 23.9 kB / 3.5 kB -3.81%↓23 kB / -5.29%↓3.3 kB
dist/dev/packages/@ember/object/lib/computed/reduce_computed_macros.js 35.4 kB / 5.6 kB -1.18%↓35 kB / -1.94%↓5.5 kB
dist/dev/packages/@ember/object/mixin.js 17.9 kB / 4.6 kB -0.7%↓17.8 kB / -0.72%↓4.6 kB
dist/dev/packages/@ember/object/observable.js 6.8 kB / 1.8 kB -2.42%↓6.6 kB / -3.79%↓1.8 kB
dist/dev/packages/@ember/object/observers.js 576 B / 209 B -82.8%↓99 B / -52.6%↓99 B
dist/dev/packages/@ember/object/promise-proxy-mixin.js 4.1 kB / 1.3 kB -10.8%↓3.6 kB / -9.14%↓1.2 kB
dist/dev/packages/@ember/object/proxy.js 2.9 kB / 826 B -13.7%↓2.5 kB / -7.63%↓763 B
dist/dev/packages/@ember/reactive/collections.js 137 B / 98 B 14,400%↑19.9 kB / 3,350%↑3.4 kB
dist/dev/packages/@ember/renderer/index.js 704 B / 224 B -86.1%↓98 B / -65.6%↓77 B
dist/dev/packages/@ember/routing/-internals.js 1.2 kB / 363 B -37.8%↓733 B / -31.7%↓248 B
dist/dev/packages/@ember/routing/index.js 675 B / 218 B 2,770%↑19.3 kB / 2,000%↑4.6 kB
dist/dev/packages/@ember/routing/lib/generate_controller.js 2.8 kB / 874 B -16.9%↓2.3 kB / -14.4%↓748 B
dist/dev/packages/@ember/routing/lib/routing-service.js 5.1 kB / 1.4 kB -10.6%↓4.6 kB / -3.63%↓1.4 kB
dist/dev/packages/@ember/routing/lib/utils.js 7.7 kB / 2.3 kB -6.16%↓7.2 kB / -6.23%↓2.1 kB
dist/dev/packages/@ember/routing/route.js 60.1 kB / 13.3 kB -0.88%↓59.6 kB / -0.82%↓13.2 kB
dist/dev/packages/@ember/routing/router-service.js 25.4 kB / 5.4 kB -1.77%↓24.9 kB / -0.88%↓5.3 kB
dist/dev/packages/@ember/routing/router.js 52.8 kB / 11.9 kB -1.58%↓52 kB / -1.38%↓11.7 kB
dist/dev/packages/@ember/runloop/index.js 24 kB / 5.2 kB -1.87%↓23.5 kB / -2.36%↓5.1 kB
dist/dev/packages/@ember/service/index.js 3.7 kB / 1.1 kB -12.8%↓3.2 kB / -13.2%↓976 B
dist/dev/packages/@ember/template-compiler/lib/compile-options.js 6.1 kB / 1.9 kB -11%↓5.4 kB / -9.18%↓1.8 kB
dist/dev/packages/@ember/template-compiler/lib/plugins/transform-resolutions.js 353 B / 161 B -33.1%↓236 B / -24.8%↓121 B
dist/dev/packages/@ember/template-compiler/lib/template.js 9.3 kB / 2.6 kB -4.55%↓8.9 kB / -4.23%↓2.4 kB
dist/dev/packages/@ember/template-factory/index.js 439 B / 179 B -80.9%↓84 B / -54.2%↓82 B
dist/dev/packages/@ember/template/index.js 730 B / 243 B -83%↓124 B / -57.2%↓104 B
dist/dev/packages/@ember/utils/lib/compare.js 5.1 kB / 1.5 kB -8.08%↓4.7 kB / -3.93%↓1.4 kB
dist/dev/packages/@ember/utils/lib/is_empty.js 2.1 kB / 677 B -25.5%↓1.6 kB / -21%↓535 B
dist/dev/packages/@glimmer/manager/index.js 10.9 kB / 2.3 kB -90.6%↓1 kB / -86.9%↓297 B
dist/dev/packages/@glimmer/node/index.js 1.6 kB / 581 B -22.6%↓1.3 kB / -16%↓488 B
dist/dev/packages/@glimmer/program/index.js 421 B / 185 B 1,690%↑7.5 kB / 798%↑1.7 kB
dist/dev/packages/@glimmer/runtime/index.js 1.7 kB / 652 B 18%↑2 kB / 10%↑715 B
dist/dev/packages/@glimmer/tracking/index.js 5.2 kB / 1.7 kB -7.96%↓4.8 kB / -6.7%↓1.6 kB
dist/dev/packages/@glimmer/tracking/primitives/cache/index.js 629 B / 213 B -82.7%↓109 B / -54.5%↓97 B
dist/dev/packages/@glimmer/validator/index.js 40 kB / 8.4 kB -96.1%↓1.6 kB / -92.8%↓612 B
dist/dev/packages/@glimmer/wire-format/index.js 2.4 kB / 781 B -39%↓1.5 kB / -33.6%↓519 B
dist/dev/packages/shared-chunks/alias-D-5Dj7Dt.js 3.1 kB / 1 kB 6%↑3.3 kB / 8%↑1.1 kB
dist/dev/packages/shared-chunks/capabilities-CZkuOqqC.js 1.8 kB / 519 B -11%↓1.6 kB / -13.1%↓451 B
dist/dev/packages/shared-chunks/chain-tags-2lycX6Gt.js 7.6 kB / 2.2 kB
dist/dev/packages/shared-chunks/compiler-VTLlittU.js 178.8 kB / 34.2 kB 94%↑346.8 kB / 95%↑66.7 kB
dist/dev/packages/shared-chunks/computed-BL7_lCK5.js 34 kB / 7.9 kB
dist/dev/packages/shared-chunks/constants-BbdWMvgs.js 7.7 kB / 1.8 kB
dist/dev/packages/shared-chunks/container-BzzHmCNj.js 13 kB / 3 kB
dist/dev/packages/shared-chunks/curly-Sz2BvRXl.js 21.5 kB / 5.1 kB
dist/dev/packages/shared-chunks/curried-BVwSNqpf.js 19.9 kB / 4.9 kB
dist/dev/packages/shared-chunks/decorator-B5Uh5NFI.js 4.7 kB / 1.3 kB
dist/dev/packages/shared-chunks/dynamic-CgX8M02_.js 116.3 kB / 23.5 kB
dist/dev/packages/shared-chunks/element-builder-kHVx0F__.js 11.7 kB / 2.6 kB 112%↑24.8 kB / 111%↑5.5 kB
dist/dev/packages/shared-chunks/element-D4_Ys3mp.js 3.3 kB / 1.1 kB
dist/dev/packages/shared-chunks/env-g-kaAFLN.js 5.3 kB / 1.6 kB
dist/dev/packages/shared-chunks/events-6aFVjD4k.js 5.7 kB / 1.5 kB
dist/dev/packages/shared-chunks/fragment-Cc5k9Oy4.js 30.4 kB / 7.4 kB
dist/dev/packages/shared-chunks/get_properties-CIm8IAtP.js 1.3 kB / 476 B
dist/dev/packages/shared-chunks/get-debug-name-CSniHBsn.js 1.6 kB / 506 B
dist/dev/packages/shared-chunks/guid-Cbq2sNV_.js 3.2 kB / 1.1 kB
dist/dev/packages/shared-chunks/hash-CEfXjnDQ.js 9.3 kB / 2.7 kB
dist/dev/packages/shared-chunks/helper-7JMQYo17.js 10.9 kB / 3.5 kB
dist/dev/packages/shared-chunks/index-BGP1rw3B.js 199.2 kB / 43.7 kB -68.6%↓62.6 kB / -71.4%↓12.5 kB
dist/dev/packages/shared-chunks/injected_property-Dl5xOzcT.js 2.1 kB / 779 B
dist/dev/packages/shared-chunks/intern-zquhAEIg.js 1.7 kB / 679 B
dist/dev/packages/shared-chunks/internal-Cr36uwNQ.js 4.2 kB / 1.3 kB
dist/dev/packages/shared-chunks/libraries-CHBwbR72.js 2.2 kB / 729 B
dist/dev/packages/shared-chunks/mandatory-setter-BpbAMTzV.js 13.2 kB / 3.9 kB -71.9%↓3.7 kB / -71.8%↓1.1 kB
dist/dev/packages/shared-chunks/meta-BmRXesrk.js 1.2 kB / 493 B
dist/dev/packages/shared-chunks/neq-DALeOkl0.js 3.2 kB / 1 kB -4.72%↓3 kB / -3.55%↓978 B
dist/dev/packages/shared-chunks/normalize-CKySQVU7.js 2.2 kB / 617 B
dist/dev/packages/shared-chunks/observers-4G2gCFGD.js 70.7 kB / 15.8 kB -90.4%↓6.8 kB / -90.1%↓1.6 kB
dist/dev/packages/shared-chunks/on-DLS3bT-q.js 8.5 kB / 2.4 kB
dist/dev/packages/shared-chunks/opcode-metadata-9iSW5JGP.js 10.7 kB / 2.6 kB
dist/dev/packages/shared-chunks/opcodes-CplRyHl_.js 923 B / 373 B
dist/dev/packages/shared-chunks/property_get-CIBS9umw.js 4.8 kB / 1.5 kB
dist/dev/packages/shared-chunks/props-fiqxqhAH.js 2.3 kB / 735 B
dist/dev/packages/shared-chunks/rehydrate-builder-DdzXTaJk.js 15.7 kB / 3.2 kB -0.73%↓15.6 kB / -1.58%↓3.1 kB
dist/dev/packages/shared-chunks/render-Sc9shNVo.js 38.4 kB / 8.4 kB 45%↑55.5 kB / 44%↑12 kB
dist/dev/packages/shared-chunks/serialize-builder-B3u9Wr3n.js 4 kB / 1.2 kB -7.72%↓3.7 kB / -10.3%↓1 kB
dist/dev/packages/shared-chunks/set_properties-bwLMNKFn.js 2.5 kB / 813 B -51%↓1.2 kB / -39.1%↓495 B
dist/dev/packages/shared-chunks/setup-registry-CC3EUmZF.js 2.4 kB / 789 B 17%↑2.8 kB / 15%↑908 B
dist/dev/packages/shared-chunks/spec-BXl1reqK.js 443 B / 216 B
dist/dev/packages/shared-chunks/super-BBBjgF69.js 2.7 kB / 790 B
dist/dev/packages/shared-chunks/template-only-CXL-ersb.js 2.7 kB / 914 B
dist/dev/packages/shared-chunks/textarea-dEn8dnx_.js 14.5 kB / 3.5 kB
dist/dev/packages/shared-chunks/tracked-data-CGnA4ytZ.js 841 B / 373 B
dist/dev/packages/shared-chunks/tracked-DxeNr0Y9.js 6 kB / 1.8 kB
dist/dev/packages/shared-chunks/transform-resolutions-h1ik8gqW.js 188.7 kB / 38.1 kB -90.9%↓17.2 kB / -90.1%↓3.8 kB
dist/dev/packages/shared-chunks/unique-id-DJU3uBZ-.js 1.5 kB / 692 B
dist/dev/packages/shared-chunks/untouchable-this-DKhPsAbp.js 62.6 kB / 12.2 kB
dist/dev/packages/shared-chunks/well-known-_EVO9RaV.js 237 B / 143 B
dist/prod/packages/@ember/-internals/container/index.js 20.5 kB / 4 kB -46%↓11 kB / -42.4%↓2.3 kB
dist/prod/packages/@ember/-internals/environment/index.js 5.8 kB / 1.7 kB -89.1%↓625 B / -81.9%↓314 B
dist/prod/packages/@ember/-internals/metal/index.js 3.8 kB / 1.2 kB 11%↑4.2 kB / 7%↑1.3 kB
dist/prod/packages/@ember/-internals/routing/index.js 807 B / 255 B -23.9%↓614 B / -14.5%↓218 B
dist/prod/packages/@ember/-internals/runtime/lib/mixins/action_handler.js 5.6 kB / 1.5 kB -3.89%↓5.4 kB / -2.07%↓1.5 kB
dist/prod/packages/@ember/-internals/runtime/lib/mixins/target_action_support.js 4.5 kB / 1.2 kB -4.09%↓4.3 kB / -5.34%↓1.2 kB
dist/prod/packages/@ember/-internals/utils/index.js 2.5 kB / 926 B 8%↑2.7 kB / 2%↑948 B
dist/prod/packages/@ember/-internals/views/lib/mixins/action_support.js 887 B / 351 B -24.5%↓670 B / -16%↓295 B
dist/prod/packages/@ember/-internals/views/lib/system/event_dispatcher.js 7.2 kB / 2 kB -3.02%↓7 kB / -2.63%↓2 kB
dist/prod/packages/@ember/-internals/views/lib/views/core_view.js 3 kB / 967 B -23.2%↓2.3 kB / -14.5%↓827 B
dist/prod/packages/@ember/application/index.js 32.9 kB / 8.5 kB -2.96%↓31.9 kB / -2.49%↓8.3 kB
dist/prod/packages/@ember/application/instance.js 14.8 kB / 4.1 kB -3.9%↓14.3 kB / -3.35%↓4 kB
dist/prod/packages/@ember/application/namespace.js 2 kB / 673 B -7.38%↓1.9 kB / -0.89%↓667 B
dist/prod/packages/@ember/array/index.js 16.9 kB / 4.4 kB -1.01%↓16.7 kB / -1.03%↓4.3 kB
dist/prod/packages/@ember/component/helper.js 596 B / 213 B -85.9%↓84 B / -60.1%↓85 B
dist/prod/packages/@ember/component/index.js 1.5 kB / 460 B 2,630%↑40.2 kB / 1,940%↑9.4 kB
dist/prod/packages/@ember/component/template-only.js 1.5 kB / 582 B -16.7%↓1.2 kB / -13.8%↓502 B
dist/prod/packages/@ember/controller/index.js 5.5 kB / 1.7 kB -12.1%↓4.8 kB / -8.14%↓1.6 kB
dist/prod/packages/@ember/debug/container-debug-adapter.js 3.6 kB / 1.1 kB -20.8%↓2.8 kB / -15.2%↓939 B
dist/prod/packages/@ember/engine/index.js 15.5 kB / 3.6 kB -6.75%↓14.4 kB / -5.67%↓3.4 kB
dist/prod/packages/@ember/engine/instance.js 6.8 kB / 2 kB -4.04%↓6.5 kB / -1.32%↓2 kB
dist/prod/packages/@ember/helper/index.js 18.6 kB / 4.9 kB -2.23%↓18.2 kB / -1.96%↓4.8 kB
dist/prod/packages/@ember/modifier/index.js 1 kB / 335 B -58.1%↓424 B / -36.7%↓212 B
dist/prod/packages/@ember/modifier/on.js 986 B / 420 B -25.8%↓732 B / -16.4%↓351 B
dist/prod/packages/@ember/object/-internals.js 1.4 kB / 531 B -10.9%↓1.3 kB / -5.84%↓500 B
dist/prod/packages/@ember/object/compat.js 3.9 kB / 1.2 kB -3.57%↓3.8 kB / -2.6%↓1.2 kB
dist/prod/packages/@ember/object/computed.js 808 B / 335 B -37.6%↓504 B / -26%↓248 B
dist/prod/packages/@ember/object/core.js 26.5 kB / 6.4 kB -1.15%↓26.2 kB / -0.28%↓6.4 kB
dist/prod/packages/@ember/object/evented.js 1.8 kB / 596 B -13.7%↓1.6 kB / -10.9%↓531 B
dist/prod/packages/@ember/object/events.js 359 B / 163 B -68.8%↓112 B / -40.5%↓97 B
dist/prod/packages/@ember/object/internals.js 419 B / 172 B -37%↓264 B / -25%↓129 B
dist/prod/packages/@ember/object/lib/computed/computed_macros.js 19.6 kB / 3.2 kB -3.92%↓18.8 kB / -4.17%↓3 kB
dist/prod/packages/@ember/object/lib/computed/reduce_computed_macros.js 27.5 kB / 4.8 kB -1.01%↓27.2 kB / -1.36%↓4.7 kB
dist/prod/packages/@ember/object/observers.js 343 B / 158 B -71.1%↓99 B / -38.6%↓97 B
dist/prod/packages/@ember/object/promise-proxy-mixin.js 3.9 kB / 1.2 kB -6.95%↓3.6 kB / -6.31%↓1.2 kB
dist/prod/packages/@ember/object/proxy.js 2.9 kB / 826 B -13.7%↓2.5 kB / -7.63%↓763 B
dist/prod/packages/@ember/reactive/collections.js 137 B / 98 B 14,400%↑19.9 kB / 3,340%↑3.4 kB
dist/prod/packages/@ember/renderer/index.js 611 B / 209 B -84%↓98 B / -58.4%↓87 B
dist/prod/packages/@ember/routing/index.js 582 B / 200 B 2,580%↑15.6 kB / 1,820%↑3.8 kB
dist/prod/packages/@ember/routing/lib/generate_controller.js 2 kB / 626 B -10.5%↓1.8 kB / -7.19%↓581 B
dist/prod/packages/@ember/routing/lib/routing-service.js 4.6 kB / 1.3 kB -10.7%↓4.1 kB / -6.86%↓1.2 kB
dist/prod/packages/@ember/routing/lib/utils.js 6.9 kB / 2.1 kB -3%↓6.7 kB / -2.41%↓2 kB
dist/prod/packages/@ember/routing/route.js 54.6 kB / 12.1 kB -0.85%↓54.2 kB / -0.85%↓12 kB
dist/prod/packages/@ember/routing/router-service.js 24.1 kB / 5.1 kB -1.64%↓23.7 kB / -1.04%↓5.1 kB
dist/prod/packages/@ember/routing/router.js 44.8 kB / 10.4 kB -1.45%↓44.1 kB / -1.37%↓10.2 kB
dist/prod/packages/@ember/runloop/index.js 22.4 kB / 4.9 kB -0.88%↓22.2 kB / -1.12%↓4.9 kB
dist/prod/packages/@ember/service/index.js 3.5 kB / 1.1 kB -8.51%↓3.2 kB / -7.57%↓977 B
dist/prod/packages/@ember/template-compiler/lib/compile-options.js 5.2 kB / 1.7 kB -10.6%↓4.6 kB / -6.97%↓1.5 kB
dist/prod/packages/@ember/template-compiler/lib/plugins/transform-resolutions.js 216 B / 134 B 1,190%↑2.8 kB / 501%↑805 B
dist/prod/packages/@ember/template-compiler/lib/template.js 9.2 kB / 2.5 kB -2.86%↓8.9 kB / -2.82%↓2.4 kB
dist/prod/packages/@ember/template-factory/index.js 286 B / 134 B -70.6%↓84 B / -40.3%↓80 B
dist/prod/packages/@ember/template/index.js 637 B / 225 B -80.5%↓124 B / -53.8%↓104 B
dist/prod/packages/@ember/utils/lib/compare.js 4.4 kB / 1.4 kB -9.32%↓4 kB / -3.04%↓1.3 kB
dist/prod/packages/@ember/utils/lib/is_empty.js 1.9 kB / 622 B -15.5%↓1.6 kB / -13.7%↓537 B
dist/prod/packages/@glimmer/manager/index.js 9.1 kB / 1.9 kB -88.7%↓1 kB / -84.2%↓299 B
dist/prod/packages/@glimmer/node/index.js 1.5 kB / 547 B -15.7%↓1.3 kB / -10.1%↓492 B
dist/prod/packages/@glimmer/program/index.js 421 B / 177 B 1,680%↑7.5 kB / 838%↑1.7 kB
dist/prod/packages/@glimmer/runtime/index.js 1.6 kB / 627 B 23%↑2 kB / 13%↑706 B
dist/prod/packages/@glimmer/tracking/index.js 4 kB / 1.4 kB -5.93%↓3.7 kB / -3.1%↓1.3 kB
dist/prod/packages/@glimmer/tracking/primitives/cache/index.js 370 B / 152 B -70.5%↓109 B / -36.8%↓96 B
dist/prod/packages/@glimmer/validator/index.js 31.8 kB / 6.4 kB -94.8%↓1.7 kB / -89.5%↓671 B
dist/prod/packages/@glimmer/wire-format/index.js 2.4 kB / 781 B -39%↓1.5 kB / -33.6%↓519 B
dist/prod/packages/ember-template-compiler/index.js 3.3 kB / 1.2 kB -3.51%↓3.2 kB / -2.84%↓1.1 kB
dist/prod/packages/shared-chunks/api-B2qmGaxz.js 6 kB / 1.5 kB 39%↑8.3 kB / 19%↑1.8 kB
dist/prod/packages/shared-chunks/assert-CUCJBR2C.js 619 B / 299 B
dist/prod/packages/shared-chunks/capabilities-_5e35539.js 1.5 kB / 392 B -7.44%↓1.3 kB / -13.5%↓339 B
dist/prod/packages/shared-chunks/chain-tags-B8e9QfF5.js 6.9 kB / 2 kB
dist/prod/packages/shared-chunks/compiler-BzZpoU6N.js 188.8 kB / 36.1 kB 91%↑360.1 kB / 91%↑69 kB
dist/prod/packages/shared-chunks/computed-BmokXpL8.js 28 kB / 6.6 kB
dist/prod/packages/shared-chunks/constants-DThhT5fu.js 7.5 kB / 1.7 kB
dist/prod/packages/shared-chunks/container-D5NwW5Fd.js 9.8 kB / 2.2 kB
dist/prod/packages/shared-chunks/curly-CUouZTRS.js 17.3 kB / 4.3 kB
dist/prod/packages/shared-chunks/curried-BVwSNqpf.js 19.9 kB / 4.9 kB
dist/prod/packages/shared-chunks/debug-render-tree-CT8tTes-.js 58.4 kB / 11.3 kB
dist/prod/packages/shared-chunks/element-Bc4iCT2M.js 2.7 kB / 939 B
dist/prod/packages/shared-chunks/element-builder-BPjq0rxK.js 22.8 kB / 5.1 kB 7%↑24.3 kB / 5%↑5.4 kB
dist/prod/packages/shared-chunks/env-DXxsTFkM.js 5.2 kB / 1.6 kB
dist/prod/packages/shared-chunks/events-970OxD6Q.js 4.7 kB / 1.4 kB
dist/prod/packages/shared-chunks/fragment-D7nBU9ae.js 30.9 kB / 7.5 kB
dist/prod/packages/shared-chunks/get_properties-lEI_CDbk.js 1.3 kB / 478 B
dist/prod/packages/shared-chunks/guid-Cbq2sNV_.js 3.2 kB / 1.1 kB
dist/prod/packages/shared-chunks/hash-GKD1EM9o.js 9.1 kB / 2.6 kB
dist/prod/packages/shared-chunks/helper-B5lFHW51.js 10.3 kB / 3.3 kB
dist/prod/packages/shared-chunks/index-BCdFhPCN.js 172 kB / 38.5 kB -96.1%↓6.6 kB / -96.3%↓1.4 kB
dist/prod/packages/shared-chunks/intern-zquhAEIg.js 1.7 kB / 679 B
dist/prod/packages/shared-chunks/internal-CXR5wbnB.js 3.8 kB / 1.3 kB
dist/prod/packages/shared-chunks/libraries-Dwjca1__.js 1.3 kB / 453 B
dist/prod/packages/shared-chunks/meta-CxaFYLIy.js 942 B / 364 B
dist/prod/packages/shared-chunks/namespace_search-BfvzEQzN.js 31.9 kB / 7.6 kB -87.6%↓4 kB / -83.8%↓1.2 kB
dist/prod/packages/shared-chunks/normalize-D9jDJVGg.js 2.2 kB / 617 B
dist/prod/packages/shared-chunks/observers-CDZtMnov.js 22.5 kB / 5.6 kB -69.8%↓6.8 kB / -71.9%↓1.6 kB
dist/prod/packages/shared-chunks/on-BGeKYkUL.js 96 kB / 19.5 kB -93%↓6.8 kB / -90.1%↓1.9 kB
dist/prod/packages/shared-chunks/opcode-metadata-9iSW5JGP.js 10.7 kB / 2.6 kB
dist/prod/packages/shared-chunks/opcodes-CplRyHl_.js 923 B / 373 B
dist/prod/packages/shared-chunks/property_get-DMn7dzdl.js 3.6 kB / 1.2 kB
dist/prod/packages/shared-chunks/props-fiqxqhAH.js 2.3 kB / 735 B
dist/prod/packages/shared-chunks/rehydrate-builder-BKg2X6Lo.js 15.4 kB / 3.1 kB 0.9%↑15.6 kB / 1%↑3.1 kB
dist/prod/packages/shared-chunks/render-DQq7cumt.js 36.2 kB / 7.9 kB 43%↑51.8 kB / 41%↑11.2 kB
dist/prod/packages/shared-chunks/serialize-builder-BGbC30SN.js 3.8 kB / 1.1 kB -4.49%↓3.7 kB / -7.07%↓1 kB
dist/prod/packages/shared-chunks/set_properties-CxRlysf4.js 2.5 kB / 823 B -52%↓1.2 kB / -40%↓494 B
dist/prod/packages/shared-chunks/setup-registry-DCCM7ZoI.js 2.1 kB / 721 B 22%↑2.6 kB / 21%↑875 B
dist/prod/packages/shared-chunks/spec-BXl1reqK.js 443 B / 216 B
dist/prod/packages/shared-chunks/super-BBBjgF69.js 7.9 kB / 2.5 kB -66%↓2.7 kB / -68.1%↓790 B
dist/prod/packages/shared-chunks/template-only-l4CKEGZv.js 2.7 kB / 913 B
dist/prod/packages/shared-chunks/textarea-D63PPDcg.js 12.5 kB / 3.2 kB
dist/prod/packages/shared-chunks/tracked-data-CETcy5V9.js 841 B / 374 B
dist/prod/packages/shared-chunks/transform-resolutions-DR4GLmR2.js 173.9 kB / 35.3 kB
dist/prod/packages/shared-chunks/unique-id-DVP_sTZd.js 1.5 kB / 690 B
dist/prod/packages/shared-chunks/well-known-_EVO9RaV.js 237 B / 143 B
types/stable/@ember/-internals/glimmer/lib/component.d.ts 42 kB / 7.9 kB 0.6%↑42.3 kB / 0.6%↑8 kB
types/stable/@ember/-internals/glimmer/lib/dom.d.ts 241 B / 152 B 116%↑521 B / 26%↑191 B
types/stable/@ember/application/index.d.ts 29.4 kB / 6.9 kB 0.4%↑29.5 kB / 0.5%↑6.9 kB
types/stable/@ember/application/instance.d.ts 11.3 kB / 3 kB 1%↑11.4 kB / 1%↑3 kB
types/stable/@ember/component/index.d.ts 3.8 kB / 934 B 7%↑4 kB / 3%↑961 B
types/stable/@ember/engine/instance.d.ts 4.8 kB / 1.3 kB 3%↑4.9 kB / 3%↑1.3 kB
types/stable/@ember/helper/index.d.ts 19.9 kB / 4.7 kB 0.6%↑20.1 kB / 0.5%↑4.7 kB
types/stable/@ember/object/computed.d.ts 511 B / 240 B 31%↑670 B / 11%↑266 B
types/stable/@ember/object/index.d.ts 2.3 kB / 771 B 19%↑2.8 kB / 7%↑823 B
types/stable/@ember/reactive/collections.d.ts 10.6 kB / 1.2 kB 1%↑10.7 kB / 2%↑1.2 kB
types/stable/@glimmer/compiler/lib/passes/2-encoding/mir.d.ts 9.8 kB / 1.5 kB 1%↑9.9 kB / 3%↑1.5 kB
types/stable/@glimmer/runtime/index.d.ts 2.8 kB / 763 B -5.25%↓2.6 kB / -6.16%↓716 B

🤖 This report was automatically generated by pkg-size-action

@NullVoxPopuli NullVoxPopuli changed the title Remove barrel file imports from internal code for better tree-shaking [BUGFIX] Remove barrel file imports from internal code for better tree-shaking Apr 30, 2026
NullVoxPopuli and others added 2 commits April 30, 2026 20:09
The smoke tests on #21350 fail with "Cannot read properties of null
(reading 'syscall')" in `AppendOpcodes.evaluate`. Cause: the lint
autofix replaced barrel imports of `@glimmer/runtime` with deep paths
(`@glimmer/runtime/lib/...`), so nothing pulled in the package index.
The index's `import './lib/bootstrap';` was the only thing loading the
opcode handler files (each `lib/compiled/opcodes/*.ts` registers via
top-level `APPEND_OPCODES.add(...)`), so 28 of 90 handlers stayed
unregistered.

Fix: own the bootstrap from the file that actually consumes registered
handlers — `lib/vm/low-level.ts`, where `evaluateSyscall` calls
`APPEND_OPCODES.evaluate(...)`. Any deep-import path that uses the VM
(directly or transitively) now triggers bootstrap; consumers that
don't need the VM don't pay for opcode handlers in their bundle.

Verified by counting top-level `APPEND_OPCODES.add(...)` calls in
`dist/dev`:

  origin/main:                   90 in a chunk loaded by everyone
  nvp/remove-barrel-imports:     62 loaded + 28 trapped in the unused
                                 `@glimmer/runtime/index.js`
  this commit:                   90 reachable from
                                 `@ember/-internals/glimmer/index.js`

Note for reviewers: the validator duplicate-package guard in
`@glimmer/validator/index.ts` and the `class EmberObject extends
CoreObject.extend(Observable)` extension in `@ember/object/index.ts`
are also barrel-only side effects. EmberObject's case is handled
naturally — `import EmberObject from '@ember/object'` is a default
import, which the lint rule's `kept` mechanism preserves on the
barrel. The validator guard becomes dormant under deep imports; if
that's a concern, move the registration check into a shared leaf
module (e.g. `lib/meta.ts`) in a follow-up.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…imports-lint

Preserve barrel side effects when rewriting deep imports
@NullVoxPopuli NullVoxPopuli marked this pull request as ready for review May 1, 2026 22:31
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.

1 participant