@codefast/di 0.5.0-canary.7 → 0.5.0-canary.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/CHANGELOG.md +205 -0
  2. package/README.md +6 -2
  3. package/dist/binding.d.ts +85 -24
  4. package/dist/binding.d.ts.map +1 -1
  5. package/dist/binding.js +55 -0
  6. package/dist/binding.js.map +1 -1
  7. package/dist/constructor-type.d.ts +4 -5
  8. package/dist/constructor-type.d.ts.map +1 -1
  9. package/dist/container/binding-builders.d.ts +32 -11
  10. package/dist/container/binding-builders.d.ts.map +1 -1
  11. package/dist/container/binding-builders.js +144 -192
  12. package/dist/container/binding-builders.js.map +1 -1
  13. package/dist/container/container.d.ts.map +1 -1
  14. package/dist/container/container.js +141 -201
  15. package/dist/container/container.js.map +1 -1
  16. package/dist/decorators/inject.d.ts +2 -4
  17. package/dist/decorators/inject.d.ts.map +1 -1
  18. package/dist/decorators/inject.js.map +1 -1
  19. package/dist/errors.d.ts +24 -0
  20. package/dist/errors.d.ts.map +1 -1
  21. package/dist/errors.js +30 -0
  22. package/dist/errors.js.map +1 -1
  23. package/dist/index.d.ts +1 -2
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +3 -2
  26. package/dist/index.js.map +1 -1
  27. package/dist/introspection/inspector.d.ts +0 -1
  28. package/dist/introspection/inspector.d.ts.map +1 -1
  29. package/dist/introspection/inspector.js +3 -8
  30. package/dist/introspection/inspector.js.map +1 -1
  31. package/dist/metadata/metadata-keys.d.ts +3 -6
  32. package/dist/metadata/metadata-keys.d.ts.map +1 -1
  33. package/dist/metadata/metadata-keys.js +3 -6
  34. package/dist/metadata/metadata-keys.js.map +1 -1
  35. package/dist/registry.d.ts +14 -2
  36. package/dist/registry.d.ts.map +1 -1
  37. package/dist/registry.js +81 -78
  38. package/dist/registry.js.map +1 -1
  39. package/dist/resolution/activation-need.d.ts +27 -0
  40. package/dist/resolution/activation-need.d.ts.map +1 -0
  41. package/dist/resolution/activation-need.js +68 -0
  42. package/dist/resolution/activation-need.js.map +1 -0
  43. package/dist/resolution/binding-lookup-cache.d.ts +41 -0
  44. package/dist/resolution/binding-lookup-cache.d.ts.map +1 -0
  45. package/dist/resolution/binding-lookup-cache.js +118 -0
  46. package/dist/resolution/binding-lookup-cache.js.map +1 -0
  47. package/dist/resolution/binding-scope.d.ts +5 -2
  48. package/dist/resolution/binding-scope.d.ts.map +1 -1
  49. package/dist/resolution/binding-scope.js +6 -17
  50. package/dist/resolution/binding-scope.js.map +1 -1
  51. package/dist/resolution/binding-select.d.ts +8 -1
  52. package/dist/resolution/binding-select.d.ts.map +1 -1
  53. package/dist/resolution/binding-select.js +14 -36
  54. package/dist/resolution/binding-select.js.map +1 -1
  55. package/dist/resolution/class-introspector.d.ts +27 -0
  56. package/dist/resolution/class-introspector.d.ts.map +1 -0
  57. package/dist/resolution/class-introspector.js +60 -0
  58. package/dist/resolution/class-introspector.js.map +1 -0
  59. package/dist/resolution/diagnostics.d.ts +41 -0
  60. package/dist/resolution/diagnostics.d.ts.map +1 -0
  61. package/dist/resolution/diagnostics.js +18 -0
  62. package/dist/resolution/diagnostics.js.map +1 -0
  63. package/dist/resolution/environment.d.ts +48 -1
  64. package/dist/resolution/environment.d.ts.map +1 -1
  65. package/dist/resolution/environment.js +134 -5
  66. package/dist/resolution/environment.js.map +1 -1
  67. package/dist/resolution/instantiation-plan.d.ts +15 -15
  68. package/dist/resolution/instantiation-plan.d.ts.map +1 -1
  69. package/dist/resolution/instantiation-plan.js +69 -49
  70. package/dist/resolution/instantiation-plan.js.map +1 -1
  71. package/dist/resolution/lifecycle.d.ts +2 -0
  72. package/dist/resolution/lifecycle.d.ts.map +1 -1
  73. package/dist/resolution/lifecycle.js +60 -62
  74. package/dist/resolution/lifecycle.js.map +1 -1
  75. package/dist/resolution/resolution-path.d.ts +84 -17
  76. package/dist/resolution/resolution-path.d.ts.map +1 -1
  77. package/dist/resolution/resolution-path.js +68 -23
  78. package/dist/resolution/resolution-path.js.map +1 -1
  79. package/dist/resolution/resolve-options.d.ts +41 -4
  80. package/dist/resolution/resolve-options.d.ts.map +1 -1
  81. package/dist/resolution/resolve-options.js +25 -1
  82. package/dist/resolution/resolve-options.js.map +1 -1
  83. package/dist/resolution/resolver.d.ts +33 -10
  84. package/dist/resolution/resolver.d.ts.map +1 -1
  85. package/dist/resolution/resolver.js +471 -830
  86. package/dist/resolution/resolver.js.map +1 -1
  87. package/dist/resolution/scope.d.ts +11 -15
  88. package/dist/resolution/scope.d.ts.map +1 -1
  89. package/dist/resolution/scope.js +55 -43
  90. package/dist/resolution/scope.js.map +1 -1
  91. package/package.json +10 -106
  92. package/src/binding.ts +146 -24
  93. package/src/constructor-type.ts +4 -5
  94. package/src/container/binding-builders.ts +184 -284
  95. package/src/container/container.ts +161 -221
  96. package/src/decorators/inject.ts +3 -5
  97. package/src/errors.ts +38 -0
  98. package/src/index.ts +4 -1
  99. package/src/introspection/inspector.ts +3 -9
  100. package/src/metadata/metadata-keys.ts +3 -6
  101. package/src/registry.ts +90 -94
  102. package/src/resolution/activation-need.ts +85 -0
  103. package/src/resolution/binding-lookup-cache.ts +148 -0
  104. package/src/resolution/binding-scope.ts +6 -17
  105. package/src/resolution/binding-select.ts +15 -39
  106. package/src/resolution/class-introspector.ts +74 -0
  107. package/src/resolution/diagnostics.ts +43 -0
  108. package/src/resolution/environment.ts +181 -5
  109. package/src/resolution/instantiation-plan.ts +116 -64
  110. package/src/resolution/lifecycle.ts +69 -62
  111. package/src/resolution/resolution-path.ts +122 -43
  112. package/src/resolution/resolve-options.ts +51 -4
  113. package/src/resolution/resolver.ts +649 -1081
  114. package/src/resolution/scope.ts +58 -47
package/dist/registry.js CHANGED
@@ -1,30 +1,4 @@
1
1
  import { bindingSlotEquals, bindingSlotToString } from "#/binding";
2
- /**
3
- * Rebuilds a binding with every kind's fields in one fixed key order, so all stored
4
- * bindings share a single V8 hidden class. Mixed binding kinds otherwise turn the
5
- * resolver's hot property reads (kind/scope/factory/...) megamorphic, which costs
6
- * ~30% throughput in processes that exercise many kinds. The value-erasing cast is
7
- * safe: every declared field is copied verbatim and `kind` stays the discriminant.
8
- */
9
- function normalizeBindingShape(binding) {
10
- const source = binding;
11
- return {
12
- kind: source.kind,
13
- id: source.id,
14
- inFlight: false,
15
- frame: undefined,
16
- token: source.token,
17
- slot: source.slot,
18
- predicate: source.predicate,
19
- scope: source.scope,
20
- target: source.target,
21
- factory: source.factory,
22
- deps: source.deps,
23
- value: source.value,
24
- onActivation: source.onActivation,
25
- onDeactivation: source.onDeactivation,
26
- };
27
- }
28
2
  /**
29
3
  * @since 0.3.16-canary.0
30
4
  */
@@ -35,27 +9,40 @@ export class BindingRegistry {
35
9
  #bindings = new Map();
36
10
  // Fast lookup by binding ID
37
11
  #byId = new Map();
38
- // Fast lookup for slot { name, tags: [] }
39
- #simpleNamed = new Map();
12
+ // Fast lookup for slot { name, tags: [] } — unallocated until a named binding is registered.
13
+ #simpleNamed;
40
14
  // Fast path for one default slot binding with no predicate
41
15
  #fastDefault = new Map();
42
- // Fast lookup for slot { name: undefined, tags: [[key, value]] } with no predicate
43
- #simpleTagged = new Map();
16
+ // Fast lookup for slot { name: undefined, tags: [[key, value]] } with no predicate — likewise
17
+ // unallocated until a tagged binding is registered.
18
+ #simpleTagged;
44
19
  /** Monotonic version — increments on every mutation. */
45
20
  get version() {
46
21
  return this.#version;
47
22
  }
48
- /** Add or replace binding using slot-aware last-wins. Returns the displaced binding, if any. */
49
- add(uncommittedBinding) {
23
+ /**
24
+ * Registers a mutation the indexes don't care about (a fluent chain refining scope or an
25
+ * activation hook in place), so version-stamped resolver caches still invalidate.
26
+ */
27
+ touch() {
28
+ this.#version += 1;
29
+ }
30
+ /**
31
+ * Add or replace binding using slot-aware last-wins. Returns the displaced binding, if any.
32
+ *
33
+ * @remarks The binding is stored by reference — it must come from `createBinding`, which is
34
+ * what guarantees the single hidden class the resolver's hot reads depend on.
35
+ */
36
+ add(binding) {
50
37
  this.#version += 1;
51
- const binding = normalizeBindingShape(uncommittedBinding);
52
38
  const key = binding.token;
53
- // ✓ TS6.0: Map.getOrInsert (ES2025) replaces the manual get+check+set upsert
39
+ // Eager, not computed: a bind is usually the token's first, so the fallback is usually the
40
+ // one that gets stored — and the computed form would add a call to allocating it anyway.
54
41
  const bindingsForToken = this.#bindings.getOrInsert(key, []);
55
42
  // Only apply last-wins for slot-based bindings (not predicate-only)
56
43
  let displacedBinding;
57
- if (!this.#isPurePredicateBinding(binding)) {
58
- const existingIndex = bindingsForToken.findIndex((candidate) => !this.#isPurePredicateBinding(candidate) && bindingSlotEquals(candidate.slot, binding.slot));
44
+ if (!isPurePredicateBinding(binding)) {
45
+ const existingIndex = bindingsForToken.findIndex((candidate) => !isPurePredicateBinding(candidate) && bindingSlotEquals(candidate.slot, binding.slot));
59
46
  if (existingIndex !== -1) {
60
47
  displacedBinding = bindingsForToken[existingIndex];
61
48
  this.#byId.delete(displacedBinding.id);
@@ -77,8 +64,8 @@ export class BindingRegistry {
77
64
  const key = token;
78
65
  const bindingsForToken = this.#bindings.get(key) ?? [];
79
66
  this.#bindings.delete(key);
80
- this.#simpleNamed.delete(key);
81
- this.#simpleTagged.delete(key);
67
+ this.#simpleNamed?.delete(key);
68
+ this.#simpleTagged?.delete(key);
82
69
  this.#fastDefault.delete(key);
83
70
  for (const binding of bindingsForToken) {
84
71
  this.#byId.delete(binding.id);
@@ -104,8 +91,8 @@ export class BindingRegistry {
104
91
  this.#deindexSimpleTaggedBinding(key, binding);
105
92
  if (bindingsForToken.length === 0) {
106
93
  this.#bindings.delete(key);
107
- this.#simpleNamed.delete(key);
108
- this.#simpleTagged.delete(key);
94
+ this.#simpleNamed?.delete(key);
95
+ this.#simpleTagged?.delete(key);
109
96
  this.#fastDefault.delete(key);
110
97
  }
111
98
  else {
@@ -142,17 +129,17 @@ export class BindingRegistry {
142
129
  const all = this.allBindings();
143
130
  this.#bindings.clear();
144
131
  this.#byId.clear();
145
- this.#simpleNamed.clear();
146
- this.#simpleTagged.clear();
132
+ this.#simpleNamed?.clear();
133
+ this.#simpleTagged?.clear();
147
134
  this.#fastDefault.clear();
148
135
  return all;
149
136
  }
150
137
  getSimpleNamed(token, name) {
151
- return this.#simpleNamed.get(token)?.get(name);
138
+ return this.#simpleNamed?.get(token)?.get(name);
152
139
  }
153
140
  getSimpleTagged(token, tagKey, tagValue) {
154
141
  return this.#simpleTagged
155
- .get(token)
142
+ ?.get(token)
156
143
  ?.get(tagKey)
157
144
  ?.get(tagValue);
158
145
  }
@@ -165,22 +152,22 @@ export class BindingRegistry {
165
152
  return bindingsForToken.map((binding) => bindingSlotToString(binding.slot));
166
153
  }
167
154
  #indexSimpleTaggedBinding(tokenKey, binding) {
168
- const slot = binding.slot;
169
- if (slot.name !== undefined || slot.tags.length !== 1 || binding.predicate !== undefined) {
155
+ const tag = simpleTagOf(binding);
156
+ if (tag === undefined) {
170
157
  return;
171
158
  }
172
- const [tagKey, tagValue] = slot.tags[0];
173
- const byTagKey = this.#simpleTagged.getOrInsert(tokenKey, new Map());
159
+ const [tagKey, tagValue] = tag;
160
+ const byTagKey = (this.#simpleTagged ??= new Map()).getOrInsert(tokenKey, new Map());
174
161
  const byTagValue = byTagKey.getOrInsert(tagKey, new Map());
175
162
  byTagValue.set(tagValue, binding);
176
163
  }
177
164
  #deindexSimpleTaggedBinding(tokenKey, binding) {
178
- const slot = binding.slot;
179
- if (slot.name !== undefined || slot.tags.length !== 1 || binding.predicate !== undefined) {
165
+ const tag = simpleTagOf(binding);
166
+ if (tag === undefined) {
180
167
  return;
181
168
  }
182
- const [tagKey, tagValue] = slot.tags[0];
183
- const byTagKey = this.#simpleTagged.get(tokenKey);
169
+ const [tagKey, tagValue] = tag;
170
+ const byTagKey = this.#simpleTagged?.get(tokenKey);
184
171
  if (byTagKey === undefined) {
185
172
  return;
186
173
  }
@@ -199,33 +186,25 @@ export class BindingRegistry {
199
186
  }
200
187
  }
201
188
  }
202
- #isPurePredicateBinding(binding) {
203
- const slot = binding.slot;
204
- const hasPredicate = binding.predicate !== undefined;
205
- const hasConstraint = slot.name !== undefined || slot.tags.length > 0;
206
- // Pure predicate = has predicate but no slot constraint (name/tags)
207
- return hasPredicate && !hasConstraint;
208
- }
209
189
  #indexSimpleNamedBinding(tokenKey, binding) {
210
- const slot = binding.slot;
211
- if (slot.name === undefined || slot.tags.length > 0) {
190
+ const name = simpleNameOf(binding);
191
+ if (name === undefined) {
212
192
  return;
213
193
  }
214
- const bindingsByName = this.#simpleNamed.getOrInsert(tokenKey, new Map());
215
- bindingsByName.set(slot.name, binding);
194
+ const bindingsByName = (this.#simpleNamed ??= new Map()).getOrInsert(tokenKey, new Map());
195
+ bindingsByName.set(name, binding);
216
196
  }
217
197
  #deindexSimpleNamedBinding(tokenKey, binding) {
218
- const slot = binding.slot;
219
- if (slot.name === undefined || slot.tags.length > 0) {
198
+ const name = simpleNameOf(binding);
199
+ if (name === undefined) {
220
200
  return;
221
201
  }
222
- const bindingsByName = this.#simpleNamed.get(tokenKey);
202
+ const bindingsByName = this.#simpleNamed?.get(tokenKey);
223
203
  if (bindingsByName === undefined) {
224
204
  return;
225
205
  }
226
- const currentBinding = bindingsByName.get(slot.name);
227
- if (currentBinding?.id === binding.id) {
228
- bindingsByName.delete(slot.name);
206
+ if (bindingsByName.get(name)?.id === binding.id) {
207
+ bindingsByName.delete(name);
229
208
  if (bindingsByName.size === 0) {
230
209
  this.#simpleNamed.delete(tokenKey);
231
210
  }
@@ -233,17 +212,41 @@ export class BindingRegistry {
233
212
  }
234
213
  #refreshFastDefaultForToken(tokenKey) {
235
214
  const bindingsForToken = this.#bindings.get(tokenKey);
236
- if (bindingsForToken === undefined || bindingsForToken.length !== 1) {
237
- this.#fastDefault.delete(tokenKey);
238
- return;
239
- }
240
- const onlyBinding = bindingsForToken[0];
241
- const isDefaultSlot = onlyBinding.slot.name === undefined && onlyBinding.slot.tags.length === 0;
242
- if (!isDefaultSlot || onlyBinding.predicate !== undefined) {
243
- this.#fastDefault.delete(tokenKey);
215
+ const onlyBinding = bindingsForToken?.length === 1 ? bindingsForToken[0] : undefined;
216
+ if (onlyBinding !== undefined && isDefaultSlotBinding(onlyBinding)) {
217
+ this.#fastDefault.set(tokenKey, onlyBinding);
244
218
  return;
245
219
  }
246
- this.#fastDefault.set(tokenKey, onlyBinding);
220
+ this.#fastDefault.delete(tokenKey);
247
221
  }
222
+ /** Whether the deferred table behind `#simpleNamed` has had to be built. */
223
+ get isBuilt() {
224
+ return this.#simpleNamed !== undefined;
225
+ }
226
+ }
227
+ /** The name a binding is indexed under, or `undefined` when its slot is more than a plain name. */
228
+ function simpleNameOf(binding) {
229
+ const { name, tags } = binding.slot;
230
+ return name !== undefined && tags.length === 0 ? name : undefined;
231
+ }
232
+ /**
233
+ * The tag a binding is indexed under, or `undefined` when its slot is more than one plain tag.
234
+ *
235
+ * @remarks A predicate is excluded here — unlike the name index — because the tag index is read
236
+ * without a re-check, so an indexed hit must be unconditional.
237
+ */
238
+ function simpleTagOf(binding) {
239
+ const { name, tags } = binding.slot;
240
+ return name === undefined && tags.length === 1 && binding.predicate === undefined ? tags[0] : undefined;
241
+ }
242
+ /** A binding nothing has to be matched against: the default slot, no predicate. */
243
+ function isDefaultSlotBinding(binding) {
244
+ const { name, tags } = binding.slot;
245
+ return name === undefined && tags.length === 0 && binding.predicate === undefined;
246
+ }
247
+ /** A predicate with no slot constraint: last-wins does not apply to it. */
248
+ function isPurePredicateBinding(binding) {
249
+ const { name, tags } = binding.slot;
250
+ return binding.predicate !== undefined && name === undefined && tags.length === 0;
248
251
  }
249
252
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Per binding: does resolving it have to go through the activation pipeline?
3
+ *
4
+ * @remarks Versioned on the lifecycle manager plus the own registry, since `onActivation` can be
5
+ * registered at any time and a rebind mints binding ids the memo must not keep forever.
6
+ */
7
+ import type { Binding } from "#/binding";
8
+ import type { BindingRegistry } from "#/registry";
9
+ import type { ClassIntrospector } from "#/resolution/class-introspector";
10
+ import type { LifecycleManager } from "#/resolution/lifecycle";
11
+ /**
12
+ * @since 0.5.0-canary.8
13
+ */
14
+ export declare class ActivationNeedCache {
15
+ #private;
16
+ constructor(lifecycle: LifecycleManager, classes: ClassIntrospector, registry: BindingRegistry);
17
+ needsActivation<const Value>(binding: Binding<Value>): boolean;
18
+ /**
19
+ * Settles a class binding's answer once its lifecycle metadata has actually been read, which
20
+ * only happens on the first instantiation.
21
+ *
22
+ * @returns the answer to use for this resolve — possibly now `false` where it was a
23
+ * conservative `true`.
24
+ */
25
+ refreshAfterFirstInstantiation<Value>(binding: Binding<Value>, needsActivation: boolean): boolean;
26
+ }
27
+ //# sourceMappingURL=activation-need.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activation-need.d.ts","sourceRoot":"","sources":["../../src/resolution/activation-need.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D;;GAEG;AACH,qBAAa,mBAAmB;;IAO9B,YAAY,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAI7F;IAED,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CA0B7D;IAED;;;;;;OAMG;IACH,8BAA8B,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,eAAe,EAAE,OAAO,GAAG,OAAO,CAOhG;CAcF"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @since 0.5.0-canary.8
3
+ */
4
+ export class ActivationNeedCache {
5
+ #needByBindingId = new Map();
6
+ #version = -1;
7
+ #lifecycle;
8
+ #classes;
9
+ #registry;
10
+ constructor(lifecycle, classes, registry) {
11
+ this.#lifecycle = lifecycle;
12
+ this.#classes = classes;
13
+ this.#registry = registry;
14
+ }
15
+ needsActivation(binding) {
16
+ // The chain writes a binding's own hook in place with no version anything here can see, so it
17
+ // is read fresh on every call; the memo covers only container hooks and lifecycle metadata.
18
+ if (binding.kind !== "alias" && binding.onActivation !== undefined) {
19
+ return true;
20
+ }
21
+ const lifecycleVersion = this.#lifecycle.activationVersion;
22
+ // No hooks registered anywhere and none on the binding: only classes can still surprise us,
23
+ // via a @postConstruct we have not looked for yet.
24
+ if (lifecycleVersion === 0 && binding.kind !== "class" && binding.kind !== "alias") {
25
+ return false;
26
+ }
27
+ // The registry version evicts entries for binding ids a rebind has retired.
28
+ const version = lifecycleVersion + this.#registry.version;
29
+ if (this.#version !== version) {
30
+ this.#needByBindingId.clear();
31
+ this.#version = version;
32
+ }
33
+ const cached = this.#needByBindingId.get(binding.id);
34
+ if (cached !== undefined) {
35
+ return cached;
36
+ }
37
+ const needsActivation = binding.kind === "class" ? this.#classNeedsActivation(binding) : this.#nonClassNeedsActivation(binding);
38
+ this.#needByBindingId.set(binding.id, needsActivation);
39
+ return needsActivation;
40
+ }
41
+ /**
42
+ * Settles a class binding's answer once its lifecycle metadata has actually been read, which
43
+ * only happens on the first instantiation.
44
+ *
45
+ * @returns the answer to use for this resolve — possibly now `false` where it was a
46
+ * conservative `true`.
47
+ */
48
+ refreshAfterFirstInstantiation(binding, needsActivation) {
49
+ if (binding.kind !== "class" || this.#classes.knownPostConstruct(binding.target) !== undefined) {
50
+ return needsActivation;
51
+ }
52
+ this.#classes.discoverPostConstruct(binding.target);
53
+ this.#needByBindingId.delete(binding.id);
54
+ return this.needsActivation(binding);
55
+ }
56
+ // Own hooks are answered before the memo, so both computations cover the memoizable rest only.
57
+ #classNeedsActivation(binding) {
58
+ if (this.#lifecycle.hasActivationHandlers(binding.token)) {
59
+ return true;
60
+ }
61
+ // Unknown lifecycle metadata: activate once so the first instantiation can settle it.
62
+ return this.#classes.knownPostConstruct(binding.target) !== false;
63
+ }
64
+ #nonClassNeedsActivation(binding) {
65
+ return this.#lifecycle.hasActivationHandlers(binding.token);
66
+ }
67
+ }
68
+ //# sourceMappingURL=activation-need.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activation-need.js","sourceRoot":"","sources":["../../src/resolution/activation-need.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Options-less token → terminal binding, memoized per container chain.
3
+ *
4
+ * @see `ARCHITECTURE.md` — why these caches form their own parent chain.
5
+ */
6
+ import type { Binding } from "#/binding";
7
+ import type { BindingRegistry } from "#/registry";
8
+ import type { Token } from "#/token";
9
+ import type { Constructor } from "#/types";
10
+ /**
11
+ * A token's terminal binding with alias hops already folded, plus the container that owns it.
12
+ *
13
+ * @typeParam Owner - the resolver type, kept generic so this module stays free of resolver internals
14
+ *
15
+ * @since 0.5.0-canary.8
16
+ */
17
+ export interface DefaultLookupEntry<Owner> {
18
+ readonly binding: Binding;
19
+ readonly owner: Owner;
20
+ }
21
+ /**
22
+ * Alias folding gives up past this many hops and defers to the full resolve loop, whose
23
+ * Set-based traversal detects genuine cycles exactly rather than by an arbitrary cap.
24
+ *
25
+ * @since 0.5.0-canary.8
26
+ */
27
+ export declare const ALIAS_HOP_LIMIT = 32;
28
+ /**
29
+ * @since 0.5.0-canary.9
30
+ */
31
+ export declare class BindingLookupCache<Owner> {
32
+ #private;
33
+ constructor(registry: BindingRegistry, owner: Owner, parent: BindingLookupCache<Owner> | undefined);
34
+ /** Summed registry versions of this cache's whole chain — the memo stamp. */
35
+ chainVersion(): number;
36
+ /** `null` when the token's shape needs the full selection path. */
37
+ defaultEntry(token: Token<unknown> | Constructor): DefaultLookupEntry<Owner> | null;
38
+ /** `null` when the name's shape needs the full selection path. */
39
+ namedEntry(token: Token<unknown> | Constructor, name: string): DefaultLookupEntry<Owner> | null;
40
+ }
41
+ //# sourceMappingURL=binding-lookup-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-lookup-cache.d.ts","sourceRoot":"","sources":["../../src/resolution/binding-lookup-cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB,CAAC,KAAK;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAOlC;;GAEG;AACH,qBAAa,kBAAkB,CAAC,KAAK;;IAenC,YAAY,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,SAAS,EAIjG;IAED,6EAA6E;IAC7E,YAAY,IAAI,MAAM,CAMrB;IAED,mEAAmE;IACnE,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,IAAI,CAiBlF;IAED,kEAAkE;IAClE,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,IAAI,CAe9F;CA2CF"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Alias folding gives up past this many hops and defers to the full resolve loop, whose
3
+ * Set-based traversal detects genuine cycles exactly rather than by an arbitrary cap.
4
+ *
5
+ * @since 0.5.0-canary.8
6
+ */
7
+ export const ALIAS_HOP_LIMIT = 32;
8
+ /**
9
+ * @since 0.5.0-canary.8
10
+ */
11
+ const newNameToEntryMap = () => new Map();
12
+ /**
13
+ * @since 0.5.0-canary.9
14
+ */
15
+ export class BindingLookupCache {
16
+ #byToken = new Map();
17
+ #version = -1;
18
+ // One entry in front of the map: the two shapes that reach here — an alias, and a token owned by
19
+ // a parent — are both resolved in a loop over the same token. `null` is a real answer, so absence
20
+ // is tracked by the token slot rather than by the entry.
21
+ #lastToken;
22
+ #lastEntry = null;
23
+ #byTokenAndName = new Map();
24
+ #namedVersion = -1;
25
+ #registry;
26
+ #owner;
27
+ #parent;
28
+ constructor(registry, owner, parent) {
29
+ this.#registry = registry;
30
+ this.#owner = owner;
31
+ this.#parent = parent;
32
+ }
33
+ /** Summed registry versions of this cache's whole chain — the memo stamp. */
34
+ chainVersion() {
35
+ let version = this.#registry.version;
36
+ for (let cache = this.#parent; cache !== undefined; cache = cache.#parent) {
37
+ version += cache.#registry.version;
38
+ }
39
+ return version;
40
+ }
41
+ /** `null` when the token's shape needs the full selection path. */
42
+ defaultEntry(token) {
43
+ const version = this.chainVersion();
44
+ if (version !== this.#version) {
45
+ this.#byToken.clear();
46
+ this.#version = version;
47
+ this.#lastToken = undefined;
48
+ }
49
+ else if (token === this.#lastToken) {
50
+ return this.#lastEntry;
51
+ }
52
+ let entry = this.#byToken.get(token);
53
+ if (entry === undefined) {
54
+ entry = this.#foldAliases(token);
55
+ this.#byToken.set(token, entry);
56
+ }
57
+ this.#lastToken = token;
58
+ this.#lastEntry = entry;
59
+ return entry;
60
+ }
61
+ /** `null` when the name's shape needs the full selection path. */
62
+ namedEntry(token, name) {
63
+ const version = this.chainVersion();
64
+ if (version !== this.#namedVersion) {
65
+ this.#byTokenAndName.clear();
66
+ this.#namedVersion = version;
67
+ }
68
+ // Computed, not eager: this runs on every named resolve, and `getOrInsert(token, new Map())`
69
+ // would allocate a Map per call only to discard it on the hit that follows.
70
+ const byName = this.#byTokenAndName.getOrInsertComputed(token, newNameToEntryMap);
71
+ let entry = byName.get(name);
72
+ if (entry === undefined) {
73
+ entry = this.#findNamedInChain(token, name);
74
+ byName.set(name, entry);
75
+ }
76
+ return entry;
77
+ }
78
+ #foldAliases(token) {
79
+ let current = token;
80
+ for (let hop = 0; hop < ALIAS_HOP_LIMIT; hop += 1) {
81
+ const entry = this.#findDefaultInChain(current);
82
+ if (entry === null) {
83
+ return null;
84
+ }
85
+ if (entry.binding.kind !== "alias") {
86
+ return entry;
87
+ }
88
+ current = entry.binding.target;
89
+ }
90
+ return null;
91
+ }
92
+ #findDefaultInChain(token) {
93
+ const fast = this.#registry.getFastDefault(token);
94
+ if (fast !== undefined) {
95
+ return { binding: fast, owner: this.#owner };
96
+ }
97
+ // A level with non-fast bindings (multi-slot / predicate) needs full selection — bail.
98
+ if (this.#registry.has(token)) {
99
+ return null;
100
+ }
101
+ return this.#parent === undefined ? null : this.#parent.#findDefaultInChain(token);
102
+ }
103
+ #findNamedInChain(token, name) {
104
+ const named = this.#registry.getSimpleNamed(token, name);
105
+ if (named !== undefined) {
106
+ // Predicates need a live context; aliases carry options through the full path.
107
+ if (named.predicate !== undefined || named.kind === "alias") {
108
+ return null;
109
+ }
110
+ return { binding: named, owner: this.#owner };
111
+ }
112
+ if (this.#registry.has(token)) {
113
+ return null;
114
+ }
115
+ return this.#parent === undefined ? null : this.#parent.#findNamedInChain(token, name);
116
+ }
117
+ }
118
+ //# sourceMappingURL=binding-lookup-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-lookup-cache.js","sourceRoot":"","sources":["../../src/resolution/binding-lookup-cache.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,11 @@
1
1
  import type { Binding } from "#/binding";
2
2
  import type { BindingScope } from "#/types";
3
3
  /**
4
- * Runtime scope used for validation and introspection. Alias bindings are treated as transient
5
- * because they defer scope to the aliased target at resolve time.
4
+ * The scope a binding resolves under.
5
+ *
6
+ * @remarks Every kind declares one — an alias declares `transient`, since it defers scoping to the
7
+ * binding it points at — so this is a field read, kept as a named function because it is the
8
+ * vocabulary validation and introspection speak.
6
9
  *
7
10
  * @since 0.3.16-canary.0
8
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"binding-scope.d.ts","sourceRoot":"","sources":["../../src/resolution/binding-scope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAgBpE"}
1
+ {"version":3,"file":"binding-scope.d.ts","sourceRoot":"","sources":["../../src/resolution/binding-scope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAEpE"}
@@ -1,24 +1,13 @@
1
1
  /**
2
- * Runtime scope used for validation and introspection. Alias bindings are treated as transient
3
- * because they defer scope to the aliased target at resolve time.
2
+ * The scope a binding resolves under.
3
+ *
4
+ * @remarks Every kind declares one — an alias declares `transient`, since it defers scoping to the
5
+ * binding it points at — so this is a field read, kept as a named function because it is the
6
+ * vocabulary validation and introspection speak.
4
7
  *
5
8
  * @since 0.3.16-canary.0
6
9
  */
7
10
  export function effectiveBindingScope(binding) {
8
- switch (binding.kind) {
9
- case "alias":
10
- return "transient";
11
- case "class":
12
- case "constant":
13
- case "dynamic":
14
- case "dynamic-async":
15
- case "resolved":
16
- case "resolved-async":
17
- return binding.scope;
18
- default: {
19
- const exhaustive = binding;
20
- return exhaustive;
21
- }
22
- }
11
+ return binding.scope;
23
12
  }
24
13
  //# sourceMappingURL=binding-scope.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"binding-scope.js","sourceRoot":"","sources":["../../src/resolution/binding-scope.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,OAAO;YACV,OAAO,WAAW,CAAC;QACrB,KAAK,OAAO,CAAC;QACb,KAAK,UAAU,CAAC;QAChB,KAAK,SAAS,CAAC;QACf,KAAK,eAAe,CAAC;QACrB,KAAK,UAAU,CAAC;QAChB,KAAK,gBAAgB;YACnB,OAAO,OAAO,CAAC,KAAK,CAAC;QACvB,SAAS,CAAC;YACR,MAAM,UAAU,GAAU,OAAO,CAAC;YAClC,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"binding-scope.js","sourceRoot":"","sources":["../../src/resolution/binding-scope.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO,OAAO,CAAC,KAAK,CAAC;AACvB,CAAC"}