Skip to content

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

Merged
NullVoxPopuli merged 2 commits intomainfrom
nvp/remove-barrel-imports
May 6, 2026
Merged

Remove barrel file imports from internal code for better tree-shaking#21350
NullVoxPopuli merged 2 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.

Note

I'm ok with dropping the new lint rule - the code is hot garbage -- I think next, I want to PR a smoke test that + GH Action that gives us the bytes of the smallest app possible, so we have something to track against.


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 36kb gzip
(this is 31kb brotli)

once done, this would put us ahead of react in bundle size

https://bundlejs.com/?q=react%4019.2.5%2Creact-dom%2Fclient&treeshake=%5B%7B+%2F*+doesn%27t+matter%21+nothing%21+*%2F+%7D%5D%2C%5B%7B+createRoot+%7D%5D

image

60.9kb gzip

it seemed high, so I checked on stackblitz as vite reports it, not just bundlejs...

image

https://stackblitz.com/edit/vitejs-vite-n3xcucgm?file=index.html&terminal=dev

@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-ai-agent pushed a commit to NullVoxPopuli-ai-agent/ember.js that referenced this pull request May 1, 2026
The smoke tests on emberjs#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>
@NullVoxPopuli NullVoxPopuli marked this pull request as ready for review May 1, 2026 22:31
@NullVoxPopuli NullVoxPopuli changed the title [BUGFIX] Remove barrel file imports from internal code for better tree-shaking Remove barrel file imports from internal code for better tree-shaking May 2, 2026
kategengler
kategengler previously approved these changes May 2, 2026
Copy link
Copy Markdown
Member

@kategengler kategengler left a comment

Choose a reason for hiding this comment

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

I think this is annoying for core devs but fine.

You say that the lint rule is "hot garbage" but I believe we need the lint rule + fixing or nobody will ever adhere to this: The feedback needs to be at dev time and not in a CI job at PR submission time. SO, assuming you are willing to support correcting the lint rule when necessary, I'm 👍

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 2, 2026

📊 Size report

Tarball size1.2 MB1.2 MB

dist/dev   -0.96%↓

File Before (Size / Brotli) After (Size / Brotli)
Total (Includes all files) 2.1 MB / 477.2 kB -0.96%↓2 MB / 2%↑484.7 kB
Show files (123 files)
File Before (Size / Brotli) After (Size / Brotli)
./packages/@ember/-internals/container/index.js 25.3 kB / 5.2 kB -49.7%↓12.8 kB / -47.8%↓2.7 kB
./packages/@ember/-internals/environment/index.js 5.8 kB / 1.7 kB -89.2%↓625 B / -82.7%↓301 B
./packages/@ember/-internals/metal/index.js 3.8 kB / 1.2 kB 16%↑4.4 kB / 9%↑1.3 kB
./packages/@ember/-internals/routing/index.js 1 kB / 314 B -42.8%↓596 B / -35.4%↓203 B
./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
./packages/@ember/-internals/runtime/lib/mixins/target_action_support.js 5 kB / 1.3 kB -7.89%↓4.6 kB / -6.4%↓1.2 kB
./packages/@ember/-internals/utils/index.js 1.4 kB / 583 B 22%↑1.7 kB / 12%↑651 B
./packages/@ember/-internals/views/lib/mixins/action_support.js 1.7 kB / 587 B -28.7%↓1.2 kB / -15.7%↓495 B
./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
./packages/@ember/-internals/views/lib/views/core_view.js 3.2 kB / 1 kB -27.8%↓2.3 kB / -18%↓827 B
./packages/@ember/application/index.js 36.4 kB / 9 kB -3.24%↓35.3 kB / -2.62%↓8.8 kB
./packages/@ember/application/instance.js 15.9 kB / 4.4 kB -5.74%↓15 kB / -5.43%↓4.1 kB
./packages/@ember/application/namespace.js 2.4 kB / 778 B -15%↓2 kB / -13.6%↓672 B
./packages/@ember/array/index.js 19.1 kB / 4.7 kB -1.86%↓18.8 kB / -2.13%↓4.6 kB
./packages/@ember/array/proxy.js 10.7 kB / 2.6 kB -1.41%↓10.5 kB / -1.77%↓2.5 kB
./packages/@ember/component/helper.js 689 B / 245 B -87.8%↓84 B / -64.1%↓88 B
./packages/@ember/component/index.js 1.6 kB / 473 B 2,740%↑44.4 kB / 2,060%↑10.2 kB
./packages/@ember/component/template-only.js 1.6 kB / 615 B -24.9%↓1.2 kB / -18.4%↓502 B
./packages/@ember/controller/index.js 5.6 kB / 1.7 kB -13.6%↓4.8 kB / -9.08%↓1.6 kB
./packages/@ember/debug/container-debug-adapter.js 3.8 kB / 1.2 kB -25.5%↓2.8 kB / -19.7%↓939 B
./packages/@ember/debug/data-adapter.js 16.2 kB / 3.9 kB -1.96%↓15.9 kB / -2.26%↓3.9 kB
./packages/@ember/engine/index.js 16.6 kB / 3.9 kB -7.84%↓15.3 kB / -7.41%↓3.6 kB
./packages/@ember/engine/instance.js 7.2 kB / 2.2 kB -3.96%↓6.9 kB / -2.35%↓2.1 kB
./packages/@ember/helper/index.js 22.6 kB / 5.5 kB -1.81%↓22.2 kB / -1.85%↓5.4 kB
./packages/@ember/modifier/index.js 1.1 kB / 351 B -61.7%↓424 B / -40.7%↓208 B
./packages/@ember/modifier/on.js 1.1 kB / 455 B -36%↓732 B / -22.9%↓351 B
./packages/@ember/object/-internals.js 2.5 kB / 852 B -16%↓2.1 kB / -11.2%↓757 B
./packages/@ember/object/compat.js 6.4 kB / 1.6 kB -5.29%↓6.1 kB / -5.42%↓1.5 kB
./packages/@ember/object/computed.js 982 B / 375 B -48.7%↓504 B / -34.7%↓245 B
./packages/@ember/object/core.js 32.3 kB / 7.8 kB -1.16%↓31.9 kB / -0.44%↓7.8 kB
./packages/@ember/object/evented.js 2.1 kB / 656 B -23.4%↓1.6 kB / -17.4%↓542 B
./packages/@ember/object/events.js 592 B / 240 B -81.1%↓112 B / -60%↓96 B
./packages/@ember/object/index.js 7.4 kB / 2.1 kB -2.01%↓7.3 kB / -2.03%↓2 kB
./packages/@ember/object/lib/computed/computed_macros.js 23.9 kB / 3.5 kB -3.81%↓23 kB / -5.37%↓3.3 kB
./packages/@ember/object/lib/computed/reduce_computed_macros.js 35.4 kB / 5.6 kB -1.18%↓35 kB / -1.92%↓5.5 kB
./packages/@ember/object/mixin.js 17.9 kB / 4.6 kB -0.7%↓17.8 kB / -0.65%↓4.6 kB
./packages/@ember/object/observable.js 6.8 kB / 1.8 kB -2.42%↓6.6 kB / -3.95%↓1.8 kB
./packages/@ember/object/observers.js 576 B / 209 B -82.8%↓99 B / -51.7%↓101 B
./packages/@ember/object/promise-proxy-mixin.js 4.1 kB / 1.3 kB -10.8%↓3.6 kB / -9.3%↓1.2 kB
./packages/@ember/object/proxy.js 2.9 kB / 826 B -13.7%↓2.5 kB / -7.63%↓763 B
./packages/@ember/reactive/collections.js 137 B / 98 B 14,400%↑19.9 kB / 3,350%↑3.4 kB
./packages/@ember/renderer/index.js 704 B / 252 B -86.1%↓98 B / -67.1%↓83 B
./packages/@ember/routing/-internals.js 1.2 kB / 363 B -37.8%↓733 B / -31.7%↓248 B
./packages/@ember/routing/index.js 675 B / 219 B 2,770%↑19.3 kB / 1,990%↑4.6 kB
./packages/@ember/routing/lib/generate_controller.js 2.8 kB / 874 B -16.9%↓2.3 kB / -14.4%↓748 B
./packages/@ember/routing/lib/routing-service.js 5.1 kB / 1.4 kB -10.6%↓4.6 kB / -3.49%↓1.4 kB
./packages/@ember/routing/lib/utils.js 7.7 kB / 2.3 kB -6.16%↓7.2 kB / -6.23%↓2.1 kB
./packages/@ember/routing/route.js 60.1 kB / 13.3 kB -0.88%↓59.6 kB / -0.75%↓13.2 kB
./packages/@ember/routing/router-service.js 25.4 kB / 5.4 kB -1.77%↓24.9 kB / -1.03%↓5.3 kB
./packages/@ember/routing/router.js 52.8 kB / 11.9 kB -1.58%↓52 kB / -1.42%↓11.7 kB
./packages/@ember/runloop/index.js 24 kB / 5.2 kB -1.87%↓23.5 kB / -2.36%↓5.1 kB
./packages/@ember/service/index.js 3.7 kB / 1.1 kB -12.8%↓3.2 kB / -13.2%↓976 B
./packages/@ember/template-compiler/lib/compile-options.js 6.2 kB / 2 kB -7.54%↓5.7 kB / -4.63%↓1.9 kB
./packages/@ember/template-compiler/lib/plugins/transform-resolutions.js 353 B / 161 B -33.1%↓236 B / -24.8%↓121 B
./packages/@ember/template-compiler/lib/template.js 9.3 kB / 2.6 kB -4.55%↓8.9 kB / -4.19%↓2.4 kB
./packages/@ember/template-factory/index.js 439 B / 179 B -80.9%↓84 B / -55.3%↓80 B
./packages/@ember/template/index.js 730 B / 243 B -83%↓124 B / -57.2%↓104 B
./packages/@ember/utils/lib/compare.js 5.1 kB / 1.5 kB -8.08%↓4.7 kB / -3.93%↓1.4 kB
./packages/@ember/utils/lib/is_empty.js 2.1 kB / 677 B -25.5%↓1.6 kB / -21%↓535 B
./packages/@glimmer/manager/index.js 10.9 kB / 2.3 kB -90.6%↓1 kB / -86.9%↓297 B
./packages/@glimmer/node/index.js 1.6 kB / 581 B -22.6%↓1.3 kB / -16%↓488 B
./packages/@glimmer/program/index.js 421 B / 191 B 1,690%↑7.5 kB / 769%↑1.7 kB
./packages/@glimmer/runtime/index.js 1.8 kB / 679 B 24%↑2.2 kB / 14%↑777 B
./packages/@glimmer/tracking/index.js 5.2 kB / 1.7 kB -7.96%↓4.8 kB / -6.88%↓1.6 kB
./packages/@glimmer/tracking/primitives/cache/index.js 629 B / 213 B -82.7%↓109 B / -54.5%↓97 B
./packages/@glimmer/validator/index.js 40 kB / 8.4 kB -96.1%↓1.6 kB / -92.8%↓612 B
./packages/@glimmer/wire-format/index.js 2.4 kB / 781 B -39%↓1.5 kB / -33.6%↓519 B
./packages/shared-chunks/alias-{hash}.js 3.1 kB / 1 kB 6%↑3.3 kB / 8%↑1.1 kB
./packages/shared-chunks/cache-{hash}.js 697 B / 258 B 2,460%↑17.9 kB / 1,760%↑4.8 kB
./packages/shared-chunks/capabilities-{hash}.js 1.8 kB / 519 B -11%↓1.6 kB / -13.1%↓451 B
./packages/shared-chunks/chain-tags-D6tuFUj_.js 7.6 kB / 2.2 kB
./packages/shared-chunks/compiler-{hash}.js 178.8 kB / 34.2 kB 94%↑346.8 kB / 95%↑66.7 kB
./packages/shared-chunks/computed-CJnghmXC.js 34 kB / 7.9 kB
./packages/shared-chunks/constants-BDQzpQ5G.js 7.7 kB / 1.8 kB
./packages/shared-chunks/container-BzzHmCNj.js 13 kB / 3 kB
./packages/shared-chunks/curly-CvC8E_4-.js 21.5 kB / 5.1 kB
./packages/shared-chunks/curried-BVwSNqpf.js 19.9 kB / 4.9 kB
./packages/shared-chunks/decorator-B5Uh5NFI.js 4.7 kB / 1.3 kB
./packages/shared-chunks/dynamic-CoakIILv.js 117.2 kB / 23.6 kB
./packages/shared-chunks/element-{hash}.js 11.7 kB / 2.6 kB 112%↑24.8 kB / 111%↑5.5 kB
./packages/shared-chunks/element-C-QcIABg.js 3.3 kB / 1.1 kB
./packages/shared-chunks/env-g-kaAFLN.js 5.3 kB / 1.6 kB
./packages/shared-chunks/events-6aFVjD4k.js 5.7 kB / 1.5 kB
./packages/shared-chunks/fragment-Cc5k9Oy4.js 30.4 kB / 7.4 kB
./packages/shared-chunks/get_properties-CIm8IAtP.js 1.3 kB / 476 B
./packages/shared-chunks/get-CpJjYeJO.js 3.7 kB / 1.1 kB
./packages/shared-chunks/get-debug-name-CSniHBsn.js 1.6 kB / 506 B
./packages/shared-chunks/guid-Cbq2sNV_.js 3.2 kB / 1.1 kB
./packages/shared-chunks/hash-D3BENmhU.js 5.9 kB / 1.9 kB
./packages/shared-chunks/helper-DlC4YesW.js 10.9 kB / 3.5 kB
./packages/shared-chunks/index-{hash}.js 199.2 kB / 43.7 kB -60.6%↓78.5 kB / -56.4%↓19.1 kB
./packages/shared-chunks/injected_property-B4T-FzZZ.js 2.1 kB / 776 B
./packages/shared-chunks/intern-zquhAEIg.js 1.7 kB / 679 B
./packages/shared-chunks/internal-CbQSKXEm.js 4.2 kB / 1.3 kB
./packages/shared-chunks/internal-helper-Dsl9_7H_.js 184 B / 108 B
./packages/shared-chunks/invoke-B6j6DdDz.js 2.5 kB / 843 B
./packages/shared-chunks/libraries-CHBwbR72.js 2.2 kB / 729 B
./packages/shared-chunks/mandatory-{hash}.js 13.2 kB / 3.9 kB -71.9%↓3.7 kB / -71.8%↓1.1 kB
./packages/shared-chunks/meta-BmRXesrk.js 1.2 kB / 493 B
./packages/shared-chunks/normalize-CKySQVU7.js 2.2 kB / 617 B
./packages/shared-chunks/not-CugJBw_G.js 4.4 kB / 1.2 kB
./packages/shared-chunks/observers-{hash}.js 70.7 kB / 15.8 kB -90.4%↓6.8 kB / -90.1%↓1.6 kB
./packages/shared-chunks/on-D8QwT-eN.js 8.5 kB / 2.4 kB
./packages/shared-chunks/opcode-metadata-9iSW5JGP.js 10.7 kB / 2.6 kB
./packages/shared-chunks/opcodes-CplRyHl_.js 923 B / 373 B
./packages/shared-chunks/or-DBU9Ge4r.js 2.9 kB / 584 B
./packages/shared-chunks/property_get-CIBS9umw.js 4.8 kB / 1.5 kB
./packages/shared-chunks/props-fiqxqhAH.js 2.3 kB / 735 B
./packages/shared-chunks/rehydrate-{hash}.js 15.7 kB / 3.2 kB -0.73%↓15.6 kB / -1.7%↓3.1 kB
./packages/shared-chunks/render-{hash}.js 38.4 kB / 8.4 kB 45%↑55.5 kB / 44%↑12 kB
./packages/shared-chunks/serialize-{hash}.js 4 kB / 1.2 kB -7.72%↓3.7 kB / -10.2%↓1 kB
./packages/shared-chunks/set_properties-{hash}.js 2.5 kB / 813 B -51%↓1.2 kB / -39.2%↓494 B
./packages/shared-chunks/setup-{hash}.js 2.4 kB / 795 B 17%↑2.8 kB / 14%↑907 B
./packages/shared-chunks/spec-BXl1reqK.js 443 B / 216 B
./packages/shared-chunks/super-BBBjgF69.js 2.7 kB / 790 B
./packages/shared-chunks/template-only-Yluyu0DY.js 2.7 kB / 912 B
./packages/shared-chunks/textarea-C0Us0PNJ.js 14.5 kB / 3.5 kB
./packages/shared-chunks/tracked-CKE4wnE6.js 6 kB / 1.8 kB
./packages/shared-chunks/tracked-data-CGnA4ytZ.js 841 B / 373 B
./packages/shared-chunks/transform-{hash}.js 188.7 kB / 38.1 kB -90.9%↓17.2 kB / -90.1%↓3.8 kB
./packages/shared-chunks/unique-id-A83bjEE-.js 1.4 kB / 661 B
./packages/shared-chunks/untouchable-this-cH6_N2LJ.js 62.6 kB / 12.2 kB
./packages/shared-chunks/well-known-_EVO9RaV.js 237 B / 143 B

dist/prod   -0.39%↓

File Before (Size / Brotli) After (Size / Brotli)
Total (Includes all files) 1.9 MB / 436.8 kB -0.39%↓1.8 MB / 2%↑444 kB
Show files (114 files)
File Before (Size / Brotli) After (Size / Brotli)
./packages/@ember/-internals/container/index.js 20.5 kB / 4 kB -46%↓11 kB / -42.4%↓2.3 kB
./packages/@ember/-internals/environment/index.js 5.8 kB / 1.7 kB -89.1%↓625 B / -81.9%↓314 B
./packages/@ember/-internals/metal/index.js 3.8 kB / 1.2 kB 11%↑4.2 kB / 7%↑1.2 kB
./packages/@ember/-internals/routing/index.js 807 B / 255 B -23.9%↓614 B / -14.9%↓217 B
./packages/@ember/-internals/runtime/lib/mixins/action_handler.js 5.6 kB / 1.5 kB -3.89%↓5.4 kB / -3.14%↓1.5 kB
./packages/@ember/-internals/runtime/lib/mixins/target_action_support.js 4.5 kB / 1.2 kB -4.09%↓4.3 kB / -3.53%↓1.2 kB
./packages/@ember/-internals/utils/index.js 2.5 kB / 926 B 8%↑2.7 kB / 2%↑948 B
./packages/@ember/-internals/views/lib/mixins/action_support.js 887 B / 351 B -24.5%↓670 B / -16%↓295 B
./packages/@ember/-internals/views/lib/system/event_dispatcher.js 7.2 kB / 2 kB -3.02%↓7 kB / -2.63%↓2 kB
./packages/@ember/-internals/views/lib/views/core_view.js 3 kB / 967 B -23.2%↓2.3 kB / -14.5%↓827 B
./packages/@ember/application/index.js 32.9 kB / 8.5 kB -2.96%↓31.9 kB / -2.39%↓8.2 kB
./packages/@ember/application/instance.js 14.8 kB / 4.2 kB -3.9%↓14.3 kB / -3.06%↓4 kB
./packages/@ember/application/namespace.js 2 kB / 673 B -7.38%↓1.9 kB / -5.05%↓639 B
./packages/@ember/array/index.js 16.9 kB / 4.4 kB -1.01%↓16.7 kB / -1.03%↓4.3 kB
./packages/@ember/component/helper.js 596 B / 233 B -85.9%↓84 B / -62.2%↓88 B
./packages/@ember/component/index.js 1.5 kB / 461 B 2,630%↑40.2 kB / 1,930%↑9.4 kB
./packages/@ember/component/template-only.js 1.5 kB / 582 B -16.7%↓1.2 kB / -13.9%↓501 B
./packages/@ember/controller/index.js 5.5 kB / 1.7 kB -12.1%↓4.8 kB / -8.03%↓1.6 kB
./packages/@ember/debug/container-debug-adapter.js 3.6 kB / 1.1 kB -20.8%↓2.8 kB / -15.2%↓939 B
./packages/@ember/engine/index.js 15.5 kB / 3.6 kB -6.75%↓14.4 kB / -5.84%↓3.4 kB
./packages/@ember/engine/instance.js 6.8 kB / 2 kB -4.04%↓6.5 kB / -1.32%↓2 kB
./packages/@ember/helper/index.js 22.5 kB / 5.4 kB -1.4%↓22.2 kB / -1.6%↓5.4 kB
./packages/@ember/modifier/index.js 1 kB / 336 B -58.1%↓424 B / -35.4%↓217 B
./packages/@ember/modifier/on.js 986 B / 418 B -25.8%↓732 B / -14.8%↓356 B
./packages/@ember/object/-internals.js 1.4 kB / 531 B -10.9%↓1.3 kB / -5.84%↓500 B
./packages/@ember/object/compat.js 3.9 kB / 1.2 kB -3.57%↓3.8 kB / -2.68%↓1.2 kB
./packages/@ember/object/computed.js 808 B / 335 B -37.6%↓504 B / -26.6%↓246 B
./packages/@ember/object/core.js 26.5 kB / 6.4 kB -1.15%↓26.2 kB / -0.2%↓6.4 kB
./packages/@ember/object/evented.js 1.8 kB / 596 B -13.7%↓1.6 kB / -10.9%↓531 B
./packages/@ember/object/events.js 359 B / 163 B -68.8%↓112 B / -40.5%↓97 B
./packages/@ember/object/internals.js 419 B / 172 B -37%↓264 B / -25%↓129 B
./packages/@ember/object/lib/computed/computed_macros.js 19.6 kB / 3.2 kB -3.92%↓18.8 kB / -4.77%↓3 kB
./packages/@ember/object/lib/computed/reduce_computed_macros.js 27.5 kB / 4.8 kB -1.01%↓27.2 kB / -1.29%↓4.7 kB
./packages/@ember/object/observers.js 343 B / 158 B -71.1%↓99 B / -38%↓98 B
./packages/@ember/object/promise-proxy-mixin.js 3.9 kB / 1.2 kB -6.95%↓3.6 kB / -5.99%↓1.2 kB
./packages/@ember/object/proxy.js 2.9 kB / 826 B -13.7%↓2.5 kB / -7.63%↓763 B
./packages/@ember/reactive/collections.js 137 B / 98 B 14,400%↑19.9 kB / 3,340%↑3.4 kB
./packages/@ember/renderer/index.js 611 B / 207 B -84%↓98 B / -57%↓89 B
./packages/@ember/routing/index.js 582 B / 200 B 2,580%↑15.6 kB / 1,820%↑3.8 kB
./packages/@ember/routing/lib/generate_controller.js 2 kB / 626 B -10.5%↓1.8 kB / -6.87%↓583 B
./packages/@ember/routing/lib/routing-service.js 4.6 kB / 1.3 kB -10.7%↓4.1 kB / -6.94%↓1.2 kB
./packages/@ember/routing/lib/utils.js 6.9 kB / 2.1 kB -3%↓6.7 kB / -2.36%↓2 kB
./packages/@ember/routing/route.js 54.6 kB / 12.1 kB -0.85%↓54.2 kB / -0.83%↓12 kB
./packages/@ember/routing/router-service.js 24.1 kB / 5.1 kB -1.64%↓23.7 kB / -0.82%↓5.1 kB
./packages/@ember/routing/router.js 44.8 kB / 10.4 kB -1.45%↓44.1 kB / -1.29%↓10.3 kB
./packages/@ember/runloop/index.js 22.4 kB / 4.9 kB -0.88%↓22.2 kB / -1.22%↓4.9 kB
./packages/@ember/service/index.js 3.5 kB / 1.1 kB -8.51%↓3.2 kB / -7.66%↓976 B
./packages/@ember/template-compiler/lib/compile-options.js 5.3 kB / 1.7 kB -6.62%↓4.9 kB / -4.14%↓1.6 kB
./packages/@ember/template-compiler/lib/plugins/transform-resolutions.js 216 B / 134 B 1,190%↑2.8 kB / 501%↑805 B
./packages/@ember/template-compiler/lib/template.js 9.2 kB / 2.5 kB -2.86%↓8.9 kB / -2.74%↓2.4 kB
./packages/@ember/template-factory/index.js 286 B / 134 B -70.6%↓84 B / -41.8%↓78 B
./packages/@ember/template/index.js 637 B / 225 B -80.5%↓124 B / -53.8%↓104 B
./packages/@ember/utils/lib/compare.js 4.4 kB / 1.4 kB -9.32%↓4 kB / -3.04%↓1.3 kB
./packages/@ember/utils/lib/is_empty.js 1.9 kB / 622 B -15.5%↓1.6 kB / -13.8%↓536 B
./packages/@glimmer/manager/index.js 9.1 kB / 1.9 kB -88.7%↓1 kB / -84.2%↓298 B
./packages/@glimmer/node/index.js 1.5 kB / 547 B -15.7%↓1.3 kB / -10.1%↓492 B
./packages/@glimmer/program/index.js 421 B / 183 B 1,680%↑7.5 kB / 808%↑1.7 kB
./packages/@glimmer/runtime/index.js 1.7 kB / 652 B 29%↑2.2 kB / 18%↑767 B
./packages/@glimmer/tracking/index.js 4 kB / 1.4 kB -5.93%↓3.7 kB / -3.03%↓1.3 kB
./packages/@glimmer/tracking/primitives/cache/index.js 370 B / 152 B -70.5%↓109 B / -36.2%↓97 B
./packages/@glimmer/validator/index.js 31.8 kB / 6.4 kB -94.8%↓1.7 kB / -89.5%↓672 B
./packages/@glimmer/wire-format/index.js 2.4 kB / 781 B -39%↓1.5 kB / -33.6%↓519 B
./packages/ember-template-compiler/index.js 3.3 kB / 1.2 kB -3.51%↓3.2 kB / -3.44%↓1.1 kB
./packages/shared-chunks/assert-CUCJBR2C.js 619 B / 299 B
./packages/shared-chunks/cache-{hash}.js 697 B / 258 B 1,320%↑9.9 kB / 981%↑2.8 kB
./packages/shared-chunks/capabilities-{hash}.js 1.5 kB / 392 B -7.44%↓1.3 kB / -13.5%↓339 B
./packages/shared-chunks/chain-tags-BJqcuCM1.js 6.9 kB / 2 kB
./packages/shared-chunks/compiler-{hash}.js 188.8 kB / 36.1 kB 91%↑360.1 kB / 91%↑69 kB
./packages/shared-chunks/computed-2Udcmflw.js 28 kB / 6.6 kB
./packages/shared-chunks/constants-nj_R0ZMU.js 7.5 kB / 1.7 kB
./packages/shared-chunks/container-D5NwW5Fd.js 9.8 kB / 2.2 kB
./packages/shared-chunks/curly-BsqvV8G0.js 17.3 kB / 4.3 kB
./packages/shared-chunks/curried-BVwSNqpf.js 19.9 kB / 4.9 kB
./packages/shared-chunks/debug-render-tree-BLtnOSbb.js 58.4 kB / 11.3 kB
./packages/shared-chunks/element-BjFr0tO0.js 2.7 kB / 931 B
./packages/shared-chunks/element-{hash}.js 22.8 kB / 5.1 kB 7%↑24.3 kB / 5%↑5.4 kB
./packages/shared-chunks/env-DXxsTFkM.js 5.2 kB / 1.6 kB
./packages/shared-chunks/events-970OxD6Q.js 4.7 kB / 1.4 kB
./packages/shared-chunks/fragment-D7nBU9ae.js 30.9 kB / 7.5 kB
./packages/shared-chunks/get_properties-BcAC5sGx.js 1.3 kB / 479 B
./packages/shared-chunks/get-D5wxdTkY.js 3.7 kB / 1.2 kB
./packages/shared-chunks/guid-Cbq2sNV_.js 3.2 kB / 1.1 kB
./packages/shared-chunks/hash-DcUe-meU.js 5.6 kB / 1.8 kB
./packages/shared-chunks/helper-Da672z4a.js 10.3 kB / 3.3 kB
./packages/shared-chunks/index-{hash}.js 172 kB / 38.4 kB -61.3%↓66.5 kB / -57.6%↓16.3 kB
./packages/shared-chunks/intern-zquhAEIg.js 1.7 kB / 679 B
./packages/shared-chunks/internal-DidurjJB.js 3.8 kB / 1.3 kB
./packages/shared-chunks/internal-helper-DIbr1RgC.js 184 B / 106 B
./packages/shared-chunks/invoke-Dr_CRwA_.js 1.7 kB / 612 B
./packages/shared-chunks/libraries-DaXpIDYN.js 1.3 kB / 455 B
./packages/shared-chunks/meta-B9mldqPL.js 942 B / 364 B
./packages/shared-chunks/namespace_search-{hash}.js 31.9 kB / 7.6 kB -87.6%↓4 kB / -83.8%↓1.2 kB
./packages/shared-chunks/normalize-D9jDJVGg.js 2.2 kB / 617 B
./packages/shared-chunks/not-DKFJP5Gp.js 2.7 kB / 834 B
./packages/shared-chunks/observers-{hash}.js 22.5 kB / 5.6 kB -69.8%↓6.8 kB / -71.9%↓1.6 kB
./packages/shared-chunks/on-{hash}.js 96.6 kB / 19.5 kB -93%↓6.8 kB / -90.1%↓1.9 kB
./packages/shared-chunks/opcode-metadata-9iSW5JGP.js 10.7 kB / 2.6 kB
./packages/shared-chunks/opcodes-CplRyHl_.js 923 B / 373 B
./packages/shared-chunks/or-oTVMuHc8.js 1.7 kB / 475 B
./packages/shared-chunks/property_get-hWJ0nGhW.js 3.6 kB / 1.2 kB
./packages/shared-chunks/props-fiqxqhAH.js 2.3 kB / 735 B
./packages/shared-chunks/rehydrate-{hash}.js 15.4 kB / 3.1 kB 0.9%↑15.6 kB / 1%↑3.1 kB
./packages/shared-chunks/render-{hash}.js 36.2 kB / 7.9 kB 43%↑51.8 kB / 41%↑11.2 kB
./packages/shared-chunks/serialize-{hash}.js 3.8 kB / 1.1 kB -4.49%↓3.7 kB / -7.4%↓1 kB
./packages/shared-chunks/set_properties-{hash}.js 2.5 kB / 823 B -52%↓1.2 kB / -40%↓494 B
./packages/shared-chunks/setup-{hash}.js 2.1 kB / 723 B 22%↑2.6 kB / 20%↑871 B
./packages/shared-chunks/spec-BXl1reqK.js 443 B / 216 B
./packages/shared-chunks/super-{hash}.js 7.9 kB / 2.5 kB -66%↓2.7 kB / -68.1%↓790 B
./packages/shared-chunks/template-only-BtLl0uH0.js 2.7 kB / 909 B
./packages/shared-chunks/textarea-CPKZ1c_O.js 12.5 kB / 3.2 kB
./packages/shared-chunks/tracked-data-C83f5V5S.js 841 B / 372 B
./packages/shared-chunks/transform-resolutions-DR4GLmR2.js 173.9 kB / 35.3 kB
./packages/shared-chunks/unique-id-CfHImDRV.js 1.4 kB / 657 B
./packages/shared-chunks/well-known-_EVO9RaV.js 237 B / 143 B

smoke-tests/v2-app-hello-world-template/dist   -3.18%↓

File Before (Size / Brotli) After (Size / Brotli)
./assets/main-{hash}.js 251.3 kB / 68.7 kB -3.18%↓243.3 kB / -2.96%↓66.7 kB
Total (Includes all files) 251.6 kB / 68.8 kB -3.18%↓243.6 kB / -2.95%↓66.8 kB

🤖 This report was automatically generated by wyvox/pkg-size

@NullVoxPopuli
Copy link
Copy Markdown
Contributor Author

Here is the journey so far on top of this PR for the hello-world test: #21359

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.

Revert manual changes, so we can test lint

Lint rule

Lint rule

Update sub-path exports

Lint rule

Lint rule

eslint

lint:fix

Lockfile

Fix

fix
@NullVoxPopuli NullVoxPopuli force-pushed the nvp/remove-barrel-imports branch from c00601d to 0f20060 Compare May 6, 2026 05:05
@NullVoxPopuli NullVoxPopuli requested a review from kategengler May 6, 2026 17:37
@NullVoxPopuli NullVoxPopuli merged commit 26161bd into main May 6, 2026
38 checks passed
@NullVoxPopuli NullVoxPopuli deleted the nvp/remove-barrel-imports branch May 6, 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