Skip to content

Commit 250c2f7

Browse files
committed
Smaller
1 parent 1e7e9c6 commit 250c2f7

13 files changed

Lines changed: 175 additions & 45 deletions

File tree

build-metadata.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"version": "7.1.0-alpha.1.nvp-remove-barrel-imports+cfe606e3",
3-
"buildType": "nvp-remove-barrel-imports",
4-
"SHA": "cfe606e3df990ee59a228a835d43609fd2204a1b",
5-
"assetPath": "/nvp-remove-barrel-imports/shas/cfe606e3df990ee59a228a835d43609fd2204a1b.tgz"
2+
"version": "7.1.0-alpha.1.nvp-explore-true-minimal-app+1e7e9c62",
3+
"buildType": "nvp-explore-true-minimal-app",
4+
"SHA": "1e7e9c62837e9784ef6e4309923268bdc934451d",
5+
"assetPath": "/nvp-explore-true-minimal-app/shas/1e7e9c62837e9784ef6e4309923268bdc934451d.tgz"
66
}

package.json

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ember-source",
3-
"version": "7.1.0-alpha.1.nvp-remove-barrel-imports+cfe606e3",
3+
"version": "7.1.0-alpha.1.nvp-explore-true-minimal-app+1e7e9c62",
44
"description": "A JavaScript framework for creating ambitious web applications",
55
"keywords": [
66
"ember-addon"
@@ -22,6 +22,39 @@
2222
},
2323
"license": "MIT",
2424
"main": "lib/index.js",
25+
"sideEffects": [
26+
"./dist/*/packages/@ember/-internals/glimmer/lib/environment.js",
27+
"./dist/*/packages/@ember/-internals/glimmer/lib/renderer.js",
28+
"./dist/*/packages/@ember/-internals/glimmer/lib/setup-registry.js",
29+
"./dist/*/packages/@ember/-internals/glimmer/lib/syntax/register-routing-keywords.js",
30+
"./dist/*/packages/@ember/-internals/glimmer/lib/helper.js",
31+
"./dist/*/packages/@ember/-internals/glimmer/lib/component.js",
32+
"./dist/*/packages/@ember/-internals/glimmer/lib/components/*.js",
33+
"./dist/*/packages/@ember/-internals/glimmer/lib/component-managers/*.js",
34+
"./dist/*/packages/@ember/-internals/glimmer/lib/modifiers/*.js",
35+
"./dist/*/packages/@ember/-internals/glimmer/lib/helpers/component.js",
36+
"./dist/*/packages/@ember/-internals/glimmer/lib/templates/*.js",
37+
"./dist/*/packages/@ember/object/index.js",
38+
"./dist/*/packages/@ember/object/core.js",
39+
"./dist/*/packages/@ember/object/mixin.js",
40+
"./dist/*/packages/@ember/object/proxy.js",
41+
"./dist/*/packages/@ember/object/observable.js",
42+
"./dist/*/packages/@ember/-internals/runtime/lib/mixins/*.js",
43+
"./dist/*/packages/@ember/-internals/views/lib/views/*.js",
44+
"./dist/*/packages/@ember/-internals/views/lib/mixins/*.js",
45+
"./dist/*/packages/@ember/-internals/views/lib/system/event_dispatcher.js",
46+
"./dist/*/packages/@ember/array/index.js",
47+
"./dist/*/packages/@ember/array/proxy.js",
48+
"./dist/*/packages/@ember/array/mutable.js",
49+
"./dist/*/packages/@ember/enumerable/*.js",
50+
"./dist/*/packages/@ember/controller/index.js",
51+
"./dist/*/packages/@ember/service/index.js",
52+
"./dist/*/packages/@ember/routing/**/*.js",
53+
"./dist/*/packages/@ember/application/**/*.js",
54+
"./dist/*/packages/@ember/engine/**/*.js",
55+
"./dist/*/packages/ember/version.js",
56+
"./dist/*/packages/ember-testing/**/*.js"
57+
],
2558
"files": [
2659
"build-metadata.json",
2760
"blueprints",
@@ -177,6 +210,8 @@
177210
"@ember/-internals/environment/index.js": "ember-source/@ember/-internals/environment/index.js",
178211
"@ember/-internals/error-handling/index.js": "ember-source/@ember/-internals/error-handling/index.js",
179212
"@ember/-internals/glimmer/index.js": "ember-source/@ember/-internals/glimmer/index.js",
213+
"@ember/-internals/glimmer/lib/classic-helper-symbol.js": "ember-source/@ember/-internals/glimmer/lib/classic-helper-symbol.js",
214+
"@ember/-internals/glimmer/lib/component-managers/curly-symbols.js": "ember-source/@ember/-internals/glimmer/lib/component-managers/curly-symbols.js",
180215
"@ember/-internals/glimmer/lib/component-managers/curly.js": "ember-source/@ember/-internals/glimmer/lib/component-managers/curly.js",
181216
"@ember/-internals/glimmer/lib/component-managers/mount.js": "ember-source/@ember/-internals/glimmer/lib/component-managers/mount.js",
182217
"@ember/-internals/glimmer/lib/component-managers/outlet.js": "ember-source/@ember/-internals/glimmer/lib/component-managers/outlet.js",
@@ -237,6 +272,7 @@
237272
"@ember/-internals/runtime/lib/mixins/action_handler.js": "ember-source/@ember/-internals/runtime/lib/mixins/action_handler.js",
238273
"@ember/-internals/runtime/lib/mixins/comparable.js": "ember-source/@ember/-internals/runtime/lib/mixins/comparable.js",
239274
"@ember/-internals/runtime/lib/mixins/container_proxy.js": "ember-source/@ember/-internals/runtime/lib/mixins/container_proxy.js",
275+
"@ember/-internals/runtime/lib/mixins/content-for.js": "ember-source/@ember/-internals/runtime/lib/mixins/content-for.js",
240276
"@ember/-internals/runtime/lib/mixins/registry_proxy.js": "ember-source/@ember/-internals/runtime/lib/mixins/registry_proxy.js",
241277
"@ember/-internals/runtime/lib/mixins/target_action_support.js": "ember-source/@ember/-internals/runtime/lib/mixins/target_action_support.js",
242278
"@ember/-internals/string/index.js": "ember-source/@ember/-internals/string/index.js",
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Leaf-level brand and registration hook for the classic class-based
2+
// `Helper` system, factored out so the resolver doesn't statically depend on
3+
// `./helper` (which extends `FrameworkObject` and pulls in the entire
4+
// `EmberObject` / `Mixin` / `CoreObject` pyramid).
5+
//
6+
// `helper.ts` registers its `CLASSIC_HELPER_MANAGER` here on import. If the
7+
// app never imports `@ember/component/helper`, classic helpers can't exist
8+
// and the resolver short-circuits cleanly without dragging in any of it.
9+
10+
export const IS_CLASSIC_HELPER: unique symbol = Symbol('IS_CLASSIC_HELPER');
11+
12+
export function isClassicHelper(obj: object): boolean {
13+
return (obj as { [IS_CLASSIC_HELPER]?: boolean })[IS_CLASSIC_HELPER] === true;
14+
}
15+
16+
let classicHelperManager: object | null = null;
17+
18+
export function registerClassicHelperManager(manager: object): void {
19+
classicHelperManager = manager;
20+
}
21+
22+
export function getClassicHelperManager(): object | null {
23+
return classicHelperManager;
24+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Leaf-level symbols and the curly-manager identity check, factored out so
2+
// the renderer and resolver don't have to drag in the classic CurlyComponentManager
3+
// (and through it the entire `@ember/component`/EmberObject pyramid).
4+
//
5+
// `curly.ts` marks its manager singleton with `IS_CURLY_MANAGER` so the check
6+
// here works without the marker file knowing about the manager itself.
7+
8+
export const BOUNDS = Symbol('BOUNDS');
9+
export const DIRTY_TAG = Symbol('DIRTY_TAG');
10+
export const IS_DISPATCHING_ATTRS = Symbol('IS_DISPATCHING_ATTRS');
11+
12+
export const IS_CURLY_MANAGER = Symbol('IS_CURLY_MANAGER');
13+
14+
export function isCurlyManager(manager: object): boolean {
15+
return (manager as { [IS_CURLY_MANAGER]?: boolean })[IS_CURLY_MANAGER] === true;
16+
}

packages/@ember/-internals/glimmer/lib/component-managers/curly.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,15 @@ import {
6060

6161
import ComponentStateBucket from '../utils/curly-component-state-bucket';
6262
import { processComponentArgs } from '../utils/process-args';
63+
import {
64+
BOUNDS,
65+
DIRTY_TAG,
66+
IS_CURLY_MANAGER,
67+
IS_DISPATCHING_ATTRS,
68+
isCurlyManager,
69+
} from './curly-symbols';
70+
71+
export { BOUNDS, DIRTY_TAG, IS_DISPATCHING_ATTRS, isCurlyManager };
6372

6473
const COMPONENT_ARGS_MAP = new WeakMap<object, CapturedArguments['named']>();
6574

@@ -69,10 +78,6 @@ export function getComponentCapturedArgs(
6978
return COMPONENT_ARGS_MAP.get(component);
7079
}
7180

72-
export const DIRTY_TAG = Symbol('DIRTY_TAG');
73-
export const IS_DISPATCHING_ATTRS = Symbol('IS_DISPATCHING_ATTRS');
74-
export const BOUNDS = Symbol('BOUNDS');
75-
7681
const EMBER_VIEW_REF = createPrimitiveRef('ember-view');
7782

7883
function aliasIdToElementId(args: VMArguments, props: any) {
@@ -139,6 +144,10 @@ export default class CurlyComponentManager
139144
WithDynamicLayout<ComponentStateBucket, RuntimeResolver>,
140145
WithDynamicTagName<ComponentStateBucket>
141146
{
147+
// marker so `isCurlyManager` can identify this manager without needing
148+
// a reference to the singleton (which would re-pull this whole module).
149+
[IS_CURLY_MANAGER] = true as const;
150+
142151
protected templateFor(component: Component): CompilableProgram | null {
143152
let { layout, layoutName } = component;
144153
let owner = getOwner(component);
@@ -560,7 +569,3 @@ const CURLY_CAPABILITIES: InternalComponentCapabilities = {
560569
};
561570

562571
export const CURLY_COMPONENT_MANAGER = new CurlyComponentManager();
563-
564-
export function isCurlyManager(manager: object): boolean {
565-
return manager === CURLY_COMPONENT_MANAGER;
566-
}

packages/@ember/-internals/glimmer/lib/helper.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,26 @@ import { setHelperManager } from '@glimmer/manager/lib/public/api';
1616
import type { DirtyableTag } from '@glimmer/interfaces';
1717
import { consumeTag } from '@glimmer/validator/lib/tracking';
1818
import { createTag, DIRTY_TAG as dirtyTag } from '@glimmer/validator/lib/validators';
19+
import {
20+
IS_CLASSIC_HELPER,
21+
isClassicHelper,
22+
registerClassicHelperManager,
23+
} from './classic-helper-symbol';
24+
25+
export { isClassicHelper };
1926

2027
const RECOMPUTE_TAG = Symbol('RECOMPUTE_TAG');
2128

2229
// Signature type utilities
2330
type GetOr<T, K, Else> = K extends keyof T ? T[K] : Else;
2431

32+
// `IS_CLASSIC_HELPER` was historically declared here; it's now defined in
33+
// `./classic-helper-symbol` so the resolver can check the brand without
34+
// pulling this whole module (and through it, EmberObject) into the renderer
35+
// chunk. We keep the class-side brand assignment below to preserve runtime
36+
// identity — `isClassicHelper(SomeHelperClass) === true` for `Helper`
37+
// subclasses, exactly as before.
38+
2539
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
2640
type Args<S> = GetOr<S, 'Args', {}>;
2741

@@ -44,8 +58,6 @@ export interface HelperInstance<S> {
4458
[RECOMPUTE_TAG]: DirtyableTag;
4559
}
4660

47-
const IS_CLASSIC_HELPER: unique symbol = Symbol('IS_CLASSIC_HELPER');
48-
4961
export interface SimpleHelper<S> {
5062
compute: (positional: Positional<S>, named: Named<S>) => Return<S>;
5163
}
@@ -181,10 +193,6 @@ export default class Helper<S = unknown> extends FrameworkObject {
181193
}
182194
/* eslint-enable import/export */
183195

184-
export function isClassicHelper(obj: object): boolean {
185-
return (obj as any)[IS_CLASSIC_HELPER] === true;
186-
}
187-
188196
interface ClassicHelperStateBucket {
189197
instance: HelperInstance<unknown>;
190198
args: Arguments;
@@ -263,6 +271,10 @@ setHelperManager((owner: InternalOwner | undefined): ClassicHelperManager => {
263271

264272
export const CLASSIC_HELPER_MANAGER = getInternalHelperManager(Helper);
265273

274+
// Register with the leaf-level lookup so the resolver can find the classic
275+
// helper manager without statically importing this module.
276+
registerClassicHelperManager(CLASSIC_HELPER_MANAGER as object);
277+
266278
///////////
267279

268280
class Wrapper<S = unknown> implements HelperFactory<SimpleHelper<S>> {

packages/@ember/-internals/glimmer/lib/helpers/each-in.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
@module ember
33
*/
44
import { tagForObject } from '@ember/-internals/metal/lib/tags';
5-
import { contentFor as _contentFor } from '@ember/-internals/runtime/lib/mixins/-proxy';
5+
import { contentFor as _contentFor } from '@ember/-internals/runtime/lib/mixins/content-for';
66
import { isProxy } from '@ember/-internals/utils/lib/is_proxy';
77
import { assert } from '@ember/debug';
88
import type { CapturedArguments } from '@glimmer/interfaces';

packages/@ember/-internals/glimmer/lib/renderer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import { CURRENT_TAG, validateTag, valueForTag } from '@glimmer/validator/lib/va
3131
import type { SimpleDocument, SimpleElement } from '@simple-dom/interface';
3232
import { hasDOM } from '../../browser-environment';
3333
import type ClassicComponent from './component';
34-
import { BOUNDS } from './component-managers/curly';
34+
import { BOUNDS } from './component-managers/curly-symbols';
3535
import { EmberEnvironmentDelegate } from './environment';
3636
import ResolverImpl from './resolver';
3737
import { EvaluationContextImpl } from '@glimmer/opcode-compiler/lib/program-context';

packages/@ember/-internals/glimmer/lib/resolver.ts

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ import {
2727
templateOnlyComponent,
2828
TEMPLATE_ONLY_COMPONENT_MANAGER,
2929
} from '@glimmer/runtime/lib/component/template-only';
30-
import { isCurlyManager } from './component-managers/curly';
31-
import { CLASSIC_HELPER_MANAGER, isClassicHelper } from './helper';
30+
import { isCurlyManager } from './component-managers/curly-symbols';
31+
import { getClassicHelperManager, isClassicHelper } from './classic-helper-symbol';
3232
import { default as disallowDynamicResolution } from './helpers/-disallow-dynamic-resolution';
3333
import { default as inElementNullCheckHelper } from './helpers/-in-element-null-check';
3434
import { default as normalizeClassHelper } from './helpers/-normalize-class';
@@ -175,17 +175,29 @@ export default class ResolverImpl implements ClassicResolver<InternalOwner> {
175175
if (typeof definition === 'function' && isClassicHelper(definition)) {
176176
// For classic class based helpers, we need to pass the factoryFor result itself rather
177177
// than the raw value (`factoryFor(...).class`). This is because injections are already
178-
// bound in the factoryFor result, including type-based injections
179-
180-
if (DEBUG) {
181-
// In DEBUG we need to only set the associated value once, otherwise
182-
// we'll trigger an assertion
183-
if (!CLASSIC_HELPER_MANAGER_ASSOCIATED.has(factory)) {
184-
CLASSIC_HELPER_MANAGER_ASSOCIATED.add(factory);
185-
setInternalHelperManager(CLASSIC_HELPER_MANAGER, factory);
178+
// bound in the factoryFor result, including type-based injections.
179+
//
180+
// The manager is registered lazily by `./helper` on import, so apps that
181+
// never load classic helpers don't pull that module (and EmberObject)
182+
// into the bundle. If a classic-helper definition somehow shows up
183+
// without the manager being registered, that's a user error — assert in
184+
// DEBUG and fall through.
185+
let manager = getClassicHelperManager();
186+
assert(
187+
'Encountered a classic helper definition but `@ember/component/helper` was never imported, so its manager has not been registered.',
188+
manager !== null
189+
);
190+
if (manager !== null) {
191+
if (DEBUG) {
192+
// In DEBUG we need to only set the associated value once, otherwise
193+
// we'll trigger an assertion
194+
if (!CLASSIC_HELPER_MANAGER_ASSOCIATED.has(factory)) {
195+
CLASSIC_HELPER_MANAGER_ASSOCIATED.add(factory);
196+
setInternalHelperManager(manager, factory);
197+
}
198+
} else {
199+
setInternalHelperManager(manager, factory);
186200
}
187-
} else {
188-
setInternalHelperManager(CLASSIC_HELPER_MANAGER, factory);
189201
}
190202

191203
return factory;

packages/@ember/-internals/glimmer/lib/setup-registry.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ import RootTemplate from './templates/root';
99
// helpers. Importing this here keeps the renderer free of routing/engine
1010
// dependencies so apps that only use `renderComponent` don't pay for them.
1111
import './syntax/register-routing-keywords';
12+
// Side-effect import: registers the classic-helper manager with the resolver.
13+
// Apps that never use classic class-based helpers don't import this and so
14+
// never pay for `Helper extends FrameworkObject` (and through it, EmberObject).
15+
import './helper';
1216

1317
export function setupApplicationRegistry(registry: Registry): void {
1418
// because we are using injections we can't use instantiate false

0 commit comments

Comments
 (0)