Skip to content

Remove barrel file imports from internal code#21295

Open
NullVoxPopuli-ai-agent wants to merge 1 commit intoemberjs:mainfrom
NullVoxPopuli-ai-agent:nvp/remove-barrel-imports
Open

Remove barrel file imports from internal code#21295
NullVoxPopuli-ai-agent wants to merge 1 commit intoemberjs:mainfrom
NullVoxPopuli-ai-agent:nvp/remove-barrel-imports

Conversation

@NullVoxPopuli-ai-agent
Copy link
Copy Markdown
Contributor

Summary

  • Replace all internal barrel imports (@ember/-internals/glimmer, @ember/-internals/environment, etc.) with direct imports from specific source files to improve tree-shaking
  • Replace all export * patterns in @ember packages with explicit named export { ... } statements
  • Replace import * as environment with named imports in @ember/application/instance
  • Add deep import path entries to @ember/-internals/package.json exports map for the new import paths
  • Add @glimmer/opcode-compiler as an explicit dependency of ember-template-compiler

This enables bundlers to tree-shake more effectively since importing from a barrel index.ts pulls in all transitive dependencies. Test files are intentionally left unchanged.

Barrel index.ts files themselves are preserved as the public API entry points -- only their consumers are updated.

Test plan

  • TypeScript type-check passes (pnpm run type-check:internals) -- only pre-existing type-test errors remain
  • ESLint passes (pnpm run lint:eslint)
  • Prettier passes (pnpm run lint:format)
  • Build succeeds (pnpm run build:js)
  • CI passes

🤖 Generated with Claude Code

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.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@NullVoxPopuli
Copy link
Copy Markdown
Contributor

📊 Package size report   0.2%↑

File Before (Size / Brotli) After (Size / Brotli)
Total (Includes all files) 5.3 MB / 1.3 MB 0.2%↑5.3 MB / 1%↑1.3 MB
Tarball size 1.2 MB -0.85%↓1.2 MB
Show files (49 files)
File Before (Size / Brotli) After (Size / Brotli)
dist/dev/packages/@ember/-internals/browser-environment/index.js 161 B / 121 B 554%↑1.1 kB / 152%↑305 B
dist/dev/packages/@ember/-internals/environment/index.js 5.5 kB / 1.7 kB -88.6%↓625 B / -83.8%↓270 B
dist/dev/packages/@ember/-internals/glimmer/index.js 2.2 kB / 695 B 14%↑2.5 kB / 10%↑762 B
dist/dev/packages/@ember/application/index.js 36.4 kB / 9 kB -0.54%↓36.2 kB / -0.86%↓9 kB
dist/dev/packages/@ember/application/instance.js 15.9 kB / 4.4 kB -2.58%↓15.5 kB / -3.05%↓4.3 kB
dist/dev/packages/@ember/component/helper.js 689 B / 229 B -87.8%↓84 B / -62%↓87 B
dist/dev/packages/@ember/component/index.js 1.6 kB / 486 B 2,780%↑45 kB / 2,030%↑10.3 kB
dist/dev/packages/@ember/engine/index.js 16.6 kB / 3.9 kB -1.68%↓16.3 kB / -2.16%↓3.8 kB
dist/dev/packages/@ember/helper/index.js 17.1 kB / 4.6 kB -0.91%↓16.9 kB / -1.2%↓4.5 kB
dist/dev/packages/@ember/modifier/index.js 1.1 kB / 351 B -34.2%↓728 B / -21.7%↓275 B
dist/dev/packages/@ember/renderer/index.js 704 B / 229 B -86.1%↓98 B / -62.9%↓85 B
dist/dev/packages/@ember/routing/index.js 675 B / 219 B 2,850%↑19.9 kB / 2,050%↑4.7 kB
dist/dev/packages/@ember/template/index.js 730 B / 243 B -83%↓124 B / -57.2%↓104 B
dist/dev/packages/@glimmer/manager/index.js 10.9 kB / 2.3 kB -90.6%↓1 kB / -86.8%↓299 B
dist/dev/packages/shared-chunks/curly-DqP54KEY.js 22 kB / 5.2 kB
dist/dev/packages/shared-chunks/env-B1wGC6ti.js 5 kB / 1.5 kB
dist/dev/packages/shared-chunks/helper-BdMdWh0A.js 11.1 kB / 3.5 kB
dist/dev/packages/shared-chunks/internal-DhrIAAx0.js 4.4 kB / 1.4 kB
dist/dev/packages/shared-chunks/setup-registry-DsQaOaUt.js 2.4 kB / 790 B 30%↑3.1 kB / 30%↑1 kB
dist/dev/packages/shared-chunks/textarea-V1Oa865S.js 14.9 kB / 3.6 kB
dist/dev/packages/shared-chunks/unique-id-2IcfUXOz.js 1.7 kB / 770 B
dist/prod/packages/@ember/-internals/browser-environment/index.js 222 B / 119 B 134%↑520 B / 85%↑220 B
dist/prod/packages/@ember/-internals/environment/index.js 5.5 kB / 1.7 kB -88.6%↓625 B / -81.7%↓304 B
dist/prod/packages/@ember/-internals/glimmer/index.js 2 kB / 664 B 15%↑2.3 kB / 10%↑729 B
dist/prod/packages/@ember/application/index.js 32.9 kB / 8.5 kB -0.6%↓32.7 kB / -1.05%↓8.4 kB
dist/prod/packages/@ember/application/instance.js 14.8 kB / 4.1 kB -2.79%↓14.4 kB / -2.51%↓4 kB
dist/prod/packages/@ember/component/helper.js 596 B / 213 B -85.9%↓84 B / -58.7%↓88 B
dist/prod/packages/@ember/component/index.js 1.5 kB / 463 B 2,680%↑40.8 kB / 1,950%↑9.5 kB
dist/prod/packages/@ember/engine/index.js 15.5 kB / 3.6 kB -1.47%↓15.2 kB / -1.73%↓3.6 kB
dist/prod/packages/@ember/helper/index.js 17 kB / 4.5 kB -1.3%↓16.8 kB / -0.84%↓4.5 kB
dist/prod/packages/@ember/modifier/index.js 1 kB / 333 B -43.2%↓575 B / -26.1%↓246 B
dist/prod/packages/@ember/renderer/index.js 611 B / 209 B -84%↓98 B / -60.3%↓83 B
dist/prod/packages/@ember/routing/index.js 582 B / 200 B 2,640%↑15.9 kB / 1,860%↑3.9 kB
dist/prod/packages/@ember/template/index.js 637 B / 226 B -80.5%↓124 B / -54%↓104 B
dist/prod/packages/@glimmer/manager/index.js 9.1 kB / 1.9 kB -88.7%↓1 kB / -84.4%↓294 B
dist/prod/packages/shared-chunks/curly-hqzcayEH.js 17.6 kB / 4.4 kB
dist/prod/packages/shared-chunks/element-builder-CvDvu-RQ.js 22.9 kB / 5.1 kB -9.87%↓20.6 kB / -12.2%↓4.5 kB
dist/prod/packages/shared-chunks/env-BaFuEcyx.js 4.9 kB / 1.5 kB
dist/prod/packages/shared-chunks/helper-CmRFr3P0.js 10.4 kB / 3.4 kB
dist/prod/packages/shared-chunks/index-D-xTBV4B.js 169.7 kB / 38 kB -64.7%↓59.9 kB / -68.2%↓12.1 kB
dist/prod/packages/shared-chunks/internal-dlYqo1M_.js 3.9 kB / 1.3 kB
dist/prod/packages/shared-chunks/props-fiqxqhAH.js 2.3 kB / 735 B
dist/prod/packages/shared-chunks/setup-registry-CTSD7GOw.js 2.1 kB / 731 B 32%↑2.8 kB / 32%↑964 B
dist/prod/packages/shared-chunks/textarea-iAZnZMrW.js 12.7 kB / 3.2 kB
dist/prod/packages/shared-chunks/unique-id-BIAPVprR.js 1.6 kB / 725 B
types/stable/@ember/component/index.d.ts 3.8 kB / 934 B 5%↑4 kB / 2%↑957 B
types/stable/@ember/template-compiler/index.d.ts 198 B / 111 B 52%↑300 B / 19%↑132 B
types/stable/@ember/template-compiler/lib/runtime.d.ts 118 B / 89 B 86%↑220 B / 27%↑113 B
types/stable/ember-template-compiler/index.d.ts 104 B / 83 B 267%↑382 B / 112%↑176 B

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

toEnvironment(): BootEnvironment {
// Do we really want to assign all of this!?
return {
...environment,
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.

was this totally redundant?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yes — ...environment was spreading { hasDOM, window, location, history, userAgent, isChrome, isFirefox } from @ember/-internals/browser-environment, but the BootEnvironment type only uses hasDOM, isInteractive, _renderMode, and options. The explicit hasDOM: this.isBrowser was already overriding it. The other properties (window, location, etc.) were not in the type and not used by any consumer.

@@ -1,6 +1,6 @@
export {
Helper as default,
default as default,
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.

can just be default, ya

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed — export { default } in the latest push on #21286.

export { setComponentTemplate, getComponentTemplate } from '@glimmer/manager';

export { Component as default, Input, Textarea } from '@ember/-internals/glimmer';
export { default as default } from '@ember/-internals/glimmer/lib/component';
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.

can just be export { default }, yea?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed — export { default } in the latest push on #21286.

@NullVoxPopuli
Copy link
Copy Markdown
Contributor

NullVoxPopuli commented Apr 4, 2026

as expected, there are a few more shared-chunks now (good)

File Before (Size / Brotli) After (Size / Brotli)
dist/prod/packages/@glimmer/manager/index.js 9.1 kB / 1.9 kB -88.7%↓1 kB / -84.4%↓294 B
dist/prod/packages/shared-chunks/curly-hqzcayEH.js 17.6 kB / 4.4 kB
dist/prod/packages/shared-chunks/element-builder-CvDvu-RQ.js 22.9 kB / 5.1 kB -9.87%↓20.6 kB / -12.2%↓4.5 kB
dist/prod/packages/shared-chunks/env-BaFuEcyx.js 4.9 kB / 1.5 kB
dist/prod/packages/shared-chunks/helper-CmRFr3P0.js 10.4 kB / 3.4 kB
dist/prod/packages/shared-chunks/index-D-xTBV4B.js 169.7 kB / 38 kB -64.7%↓59.9 kB / -68.2%↓12.1 kB
dist/prod/packages/shared-chunks/internal-dlYqo1M_.js 3.9 kB / 1.3 kB
dist/prod/packages/shared-chunks/props-fiqxqhAH.js 2.3 kB / 735 B
dist/prod/packages/shared-chunks/setup-registry-CTSD7GOw.js 2.1 kB / 731 B 32%↑2.8 kB / 32%↑964 B
dist/prod/packages/shared-chunks/textarea-iAZnZMrW.js 12.7 kB / 3.2 kB
dist/prod/packages/shared-chunks/unique-id-BIAPVprR.js 1.6 kB / 725 B
types/stable/@ember/component/index.d.ts 3.8 kB / 934 B 5%↑4 kB / 2%↑957 B
types/stable/@ember/template-compiler/index.d.ts 198 B / 111 B 52%↑300 B / 19%↑132 B
types/stable/@ember/template-compiler/lib/runtime.d.ts 118 B / 89 B 86%↑220 B / 27%↑113 B
types/stable/ember-template-compiler/index.d.ts 104 B / 83 B 267%↑382 B / 112%↑176 B

@NullVoxPopuli NullVoxPopuli marked this pull request as ready for review April 4, 2026 05:23
@NullVoxPopuli NullVoxPopuli marked this pull request as draft April 4, 2026 05:33
@NullVoxPopuli NullVoxPopuli marked this pull request as ready for review April 4, 2026 05:33
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