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

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 (214) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +73 -496
  3. package/dist/binding.d.ts +211 -0
  4. package/dist/binding.d.ts.map +1 -0
  5. package/dist/binding.js +46 -0
  6. package/dist/binding.js.map +1 -0
  7. package/dist/{constructor-type.d.mts → constructor-type.d.ts} +3 -5
  8. package/dist/constructor-type.d.ts.map +1 -0
  9. package/dist/constructor-type.js +2 -0
  10. package/dist/constructor-type.js.map +1 -0
  11. package/dist/container/binding-builders.d.ts +35 -0
  12. package/dist/container/binding-builders.d.ts.map +1 -0
  13. package/dist/container/binding-builders.js +247 -0
  14. package/dist/container/binding-builders.js.map +1 -0
  15. package/dist/container/container.d.ts +58 -0
  16. package/dist/container/container.d.ts.map +1 -0
  17. package/dist/container/container.js +641 -0
  18. package/dist/container/container.js.map +1 -0
  19. package/dist/decorators/inject.d.ts +57 -0
  20. package/dist/decorators/inject.d.ts.map +1 -0
  21. package/dist/decorators/inject.js +145 -0
  22. package/dist/decorators/inject.js.map +1 -0
  23. package/dist/decorators/injectable.d.ts +29 -0
  24. package/dist/decorators/injectable.d.ts.map +1 -0
  25. package/dist/decorators/injectable.js +53 -0
  26. package/dist/decorators/injectable.js.map +1 -0
  27. package/dist/decorators/lifecycle-decorators.d.ts +9 -0
  28. package/dist/decorators/lifecycle-decorators.d.ts.map +1 -0
  29. package/dist/decorators/lifecycle-decorators.js +40 -0
  30. package/dist/decorators/lifecycle-decorators.js.map +1 -0
  31. package/dist/errors.d.ts +150 -0
  32. package/dist/errors.d.ts.map +1 -0
  33. package/dist/errors.js +197 -0
  34. package/dist/errors.js.map +1 -0
  35. package/dist/index.d.ts +30 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +25 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/introspection/dependency-graph.d.ts +40 -0
  40. package/dist/introspection/dependency-graph.d.ts.map +1 -0
  41. package/dist/introspection/dependency-graph.js +66 -0
  42. package/dist/introspection/dependency-graph.js.map +1 -0
  43. package/dist/introspection/graph-adapters/cytoscape.d.ts +33 -0
  44. package/dist/introspection/graph-adapters/cytoscape.d.ts.map +1 -0
  45. package/dist/introspection/graph-adapters/cytoscape.js +30 -0
  46. package/dist/introspection/graph-adapters/cytoscape.js.map +1 -0
  47. package/dist/introspection/graph-adapters/dot.d.ts +6 -0
  48. package/dist/introspection/graph-adapters/dot.d.ts.map +1 -0
  49. package/dist/introspection/graph-adapters/dot.js +18 -0
  50. package/dist/introspection/graph-adapters/dot.js.map +1 -0
  51. package/dist/introspection/graph-adapters/reactflow.d.ts +38 -0
  52. package/dist/introspection/graph-adapters/reactflow.d.ts.map +1 -0
  53. package/dist/introspection/graph-adapters/reactflow.js +33 -0
  54. package/dist/introspection/graph-adapters/reactflow.js.map +1 -0
  55. package/dist/introspection/inspector.d.ts +39 -0
  56. package/dist/introspection/inspector.d.ts.map +1 -0
  57. package/dist/introspection/inspector.js +82 -0
  58. package/dist/introspection/inspector.js.map +1 -0
  59. package/dist/metadata/{metadata-keys.d.mts → metadata-keys.d.ts} +5 -7
  60. package/dist/metadata/metadata-keys.d.ts.map +1 -0
  61. package/dist/metadata/metadata-keys.js +25 -0
  62. package/dist/metadata/metadata-keys.js.map +1 -0
  63. package/dist/metadata/metadata-reader-token.d.ts +7 -0
  64. package/dist/metadata/metadata-reader-token.d.ts.map +1 -0
  65. package/dist/metadata/metadata-reader-token.js +6 -0
  66. package/dist/metadata/metadata-reader-token.js.map +1 -0
  67. package/dist/metadata/metadata-types.d.ts +48 -0
  68. package/dist/metadata/metadata-types.d.ts.map +1 -0
  69. package/dist/metadata/metadata-types.js +2 -0
  70. package/dist/metadata/metadata-types.js.map +1 -0
  71. package/dist/metadata/symbol-metadata-reader.d.ts +20 -0
  72. package/dist/metadata/symbol-metadata-reader.d.ts.map +1 -0
  73. package/dist/metadata/symbol-metadata-reader.js +34 -0
  74. package/dist/metadata/symbol-metadata-reader.js.map +1 -0
  75. package/dist/module.d.ts +67 -0
  76. package/dist/module.d.ts.map +1 -0
  77. package/dist/module.js +54 -0
  78. package/dist/module.js.map +1 -0
  79. package/dist/registry.d.ts +33 -0
  80. package/dist/registry.d.ts.map +1 -0
  81. package/dist/registry.js +249 -0
  82. package/dist/registry.js.map +1 -0
  83. package/dist/resolution/binding-scope.d.ts +10 -0
  84. package/dist/resolution/binding-scope.d.ts.map +1 -0
  85. package/dist/resolution/binding-scope.js +24 -0
  86. package/dist/resolution/binding-scope.js.map +1 -0
  87. package/dist/resolution/binding-select.d.ts +16 -0
  88. package/dist/resolution/binding-select.d.ts.map +1 -0
  89. package/dist/resolution/binding-select.js +143 -0
  90. package/dist/resolution/binding-select.js.map +1 -0
  91. package/dist/resolution/constraints.d.ts +51 -0
  92. package/dist/resolution/constraints.d.ts.map +1 -0
  93. package/dist/resolution/constraints.js +88 -0
  94. package/dist/resolution/constraints.js.map +1 -0
  95. package/dist/resolution/environment.d.ts +47 -0
  96. package/dist/resolution/environment.d.ts.map +1 -0
  97. package/dist/resolution/environment.js +100 -0
  98. package/dist/resolution/environment.js.map +1 -0
  99. package/dist/resolution/instantiation-plan.d.ts +67 -0
  100. package/dist/resolution/instantiation-plan.d.ts.map +1 -0
  101. package/dist/resolution/instantiation-plan.js +163 -0
  102. package/dist/resolution/instantiation-plan.js.map +1 -0
  103. package/dist/resolution/lifecycle.d.ts +21 -0
  104. package/dist/resolution/lifecycle.d.ts.map +1 -0
  105. package/dist/resolution/lifecycle.js +178 -0
  106. package/dist/resolution/lifecycle.js.map +1 -0
  107. package/dist/resolution/resolution-path.d.ts +31 -0
  108. package/dist/resolution/resolution-path.d.ts.map +1 -0
  109. package/dist/resolution/resolution-path.js +53 -0
  110. package/dist/resolution/resolution-path.js.map +1 -0
  111. package/dist/resolution/resolve-options.d.ts +19 -0
  112. package/dist/resolution/resolve-options.d.ts.map +1 -0
  113. package/dist/resolution/resolve-options.js +32 -0
  114. package/dist/resolution/resolve-options.js.map +1 -0
  115. package/dist/resolution/resolver.d.ts +35 -0
  116. package/dist/resolution/resolver.d.ts.map +1 -0
  117. package/dist/resolution/resolver.js +1320 -0
  118. package/dist/resolution/resolver.js.map +1 -0
  119. package/dist/resolution/scope.d.ts +32 -0
  120. package/dist/resolution/scope.d.ts.map +1 -0
  121. package/dist/resolution/scope.js +76 -0
  122. package/dist/resolution/scope.js.map +1 -0
  123. package/dist/token.d.ts +23 -0
  124. package/dist/token.d.ts.map +1 -0
  125. package/dist/token.js +22 -0
  126. package/dist/token.js.map +1 -0
  127. package/dist/types.d.ts +90 -0
  128. package/dist/types.d.ts.map +1 -0
  129. package/dist/types.js +2 -0
  130. package/dist/types.js.map +1 -0
  131. package/package.json +143 -120
  132. package/src/binding.ts +38 -22
  133. package/src/container/binding-builders.ts +397 -0
  134. package/src/container/container.ts +838 -0
  135. package/src/decorators/inject.ts +16 -3
  136. package/src/decorators/injectable.ts +3 -3
  137. package/src/index.ts +14 -7
  138. package/src/{dependency-graph.ts → introspection/dependency-graph.ts} +1 -1
  139. package/src/{graph-adapters → introspection/graph-adapters}/cytoscape.ts +1 -1
  140. package/src/{graph-adapters → introspection/graph-adapters}/dot.ts +1 -1
  141. package/src/{graph-adapters → introspection/graph-adapters}/reactflow.ts +13 -2
  142. package/src/{inspector.ts → introspection/inspector.ts} +26 -21
  143. package/src/metadata/symbol-metadata-reader.ts +4 -4
  144. package/src/module.ts +14 -6
  145. package/src/registry.ts +115 -61
  146. package/src/{binding-select.ts → resolution/binding-select.ts} +16 -3
  147. package/src/{environment.ts → resolution/environment.ts} +35 -35
  148. package/src/resolution/instantiation-plan.ts +240 -0
  149. package/src/{lifecycle.ts → resolution/lifecycle.ts} +20 -13
  150. package/src/resolution/resolution-path.ts +77 -0
  151. package/src/resolution/resolver.ts +1755 -0
  152. package/src/{scope.ts → resolution/scope.ts} +35 -18
  153. package/src/token.ts +0 -3
  154. package/dist/binding-scope.d.mts +0 -13
  155. package/dist/binding-scope.mjs +0 -21
  156. package/dist/binding-select.d.mts +0 -19
  157. package/dist/binding-select.mjs +0 -72
  158. package/dist/binding.d.mts +0 -191
  159. package/dist/binding.mjs +0 -36
  160. package/dist/constraints.d.mts +0 -55
  161. package/dist/constraints.mjs +0 -87
  162. package/dist/constructor-type.mjs +0 -1
  163. package/dist/container.d.mts +0 -62
  164. package/dist/container.mjs +0 -741
  165. package/dist/decorators/inject.d.mts +0 -49
  166. package/dist/decorators/inject.mjs +0 -136
  167. package/dist/decorators/injectable.d.mts +0 -32
  168. package/dist/decorators/injectable.mjs +0 -57
  169. package/dist/decorators/lifecycle-decorators.d.mts +0 -11
  170. package/dist/decorators/lifecycle-decorators.mjs +0 -38
  171. package/dist/dependency-graph.d.mts +0 -43
  172. package/dist/dependency-graph.mjs +0 -63
  173. package/dist/environment.d.mts +0 -55
  174. package/dist/environment.mjs +0 -98
  175. package/dist/errors.d.mts +0 -153
  176. package/dist/errors.mjs +0 -197
  177. package/dist/graph-adapters/cytoscape.d.mts +0 -36
  178. package/dist/graph-adapters/cytoscape.mjs +0 -26
  179. package/dist/graph-adapters/dot.d.mts +0 -9
  180. package/dist/graph-adapters/dot.mjs +0 -20
  181. package/dist/graph-adapters/reactflow.d.mts +0 -41
  182. package/dist/graph-adapters/reactflow.mjs +0 -29
  183. package/dist/index.d.mts +0 -18
  184. package/dist/index.mjs +0 -12
  185. package/dist/inspector.d.mts +0 -48
  186. package/dist/inspector.mjs +0 -71
  187. package/dist/lifecycle.d.mts +0 -25
  188. package/dist/lifecycle.mjs +0 -118
  189. package/dist/metadata/metadata-keys.mjs +0 -27
  190. package/dist/metadata/metadata-reader-token.d.mts +0 -10
  191. package/dist/metadata/metadata-reader-token.mjs +0 -8
  192. package/dist/metadata/metadata-types.d.mts +0 -51
  193. package/dist/metadata/metadata-types.mjs +0 -1
  194. package/dist/metadata/symbol-metadata-reader.d.mts +0 -23
  195. package/dist/metadata/symbol-metadata-reader.mjs +0 -29
  196. package/dist/module.d.mts +0 -62
  197. package/dist/module.mjs +0 -42
  198. package/dist/registry.d.mts +0 -45
  199. package/dist/registry.mjs +0 -163
  200. package/dist/resolve-options.d.mts +0 -22
  201. package/dist/resolve-options.mjs +0 -28
  202. package/dist/resolver.d.mts +0 -94
  203. package/dist/resolver.mjs +0 -767
  204. package/dist/scope.d.mts +0 -28
  205. package/dist/scope.mjs +0 -58
  206. package/dist/token.d.mts +0 -25
  207. package/dist/token.mjs +0 -22
  208. package/dist/types.d.mts +0 -92
  209. package/dist/types.mjs +0 -1
  210. package/src/container.ts +0 -1141
  211. package/src/resolver.ts +0 -1626
  212. /package/src/{binding-scope.ts → resolution/binding-scope.ts} +0 -0
  213. /package/src/{constraints.ts → resolution/constraints.ts} +0 -0
  214. /package/src/{resolve-options.ts → resolution/resolve-options.ts} +0 -0
@@ -0,0 +1,211 @@
1
+ import type { InjectableDependency, InjectionDescriptor, ResolvedDependencyValue } from "#/decorators/inject";
2
+ import type { Token } from "#/token";
3
+ import type { ActivationHandler, BindingIdentifier, BindingScope, BindingTag, Constructor, DeactivationHandler, ResolutionContext, ResolutionFrame, ConstraintContext } from "#/types";
4
+ /**
5
+ * @since 0.3.16-canary.0
6
+ */
7
+ export interface BindingSlot {
8
+ readonly name: string | undefined;
9
+ readonly tags: ReadonlyArray<BindingTag>;
10
+ }
11
+ /**
12
+ * @since 0.3.16-canary.0
13
+ */
14
+ export declare function bindingSlotEquals(left: BindingSlot, right: BindingSlot): boolean;
15
+ /**
16
+ * @since 0.3.16-canary.0
17
+ */
18
+ export declare const DEFAULT_BINDING_SLOT: {
19
+ name: undefined;
20
+ tags: never[];
21
+ };
22
+ /**
23
+ * @since 0.3.16-canary.0
24
+ */
25
+ export declare function bindingSlotToString(slot: BindingSlot): string;
26
+ interface BindingBase<Value> {
27
+ readonly id: BindingIdentifier;
28
+ /**
29
+ * True while this binding's factory is on the sync resolution stack. The sync resolver marks
30
+ * it on enter and clears it on exit, making cycle detection an O(1) field read with no hashing,
31
+ * no path scan, and no side table. Sync resolution is single-threaded, so the flag is exactly
32
+ * path membership; the async lane keeps its own per-path check because chains can interleave.
33
+ *
34
+ * @remarks Resolver-owned bookkeeping — `registry.add` normalizes it, so callers never set it.
35
+ */
36
+ inFlight?: boolean | undefined;
37
+ /**
38
+ * Memoized resolution frame for this binding. Its contents derive only from immutable binding
39
+ * fields, so it is computed once on first resolve and reused instead of a per-resolver Map
40
+ * lookup on every hop.
41
+ *
42
+ * @remarks Resolver-owned bookkeeping — `registry.add` normalizes it, so callers never set it.
43
+ */
44
+ frame?: ResolutionFrame | undefined;
45
+ readonly token: Token<Value> | Constructor<Value>;
46
+ readonly slot: BindingSlot;
47
+ readonly predicate?: ((ctx: ConstraintContext) => boolean) | undefined;
48
+ }
49
+ type BindingBaseKeys = keyof BindingBase<unknown>;
50
+ /**
51
+ * @since 0.3.16-canary.0
52
+ */
53
+ export interface ClassBinding<Value> extends BindingBase<Value> {
54
+ readonly kind: "class";
55
+ readonly target: Constructor<Value>;
56
+ readonly scope: BindingScope;
57
+ readonly onActivation?: ActivationHandler<Value> | undefined;
58
+ readonly onDeactivation?: DeactivationHandler<Value> | undefined;
59
+ }
60
+ /**
61
+ * @since 0.3.16-canary.0
62
+ */
63
+ export interface DynamicBinding<Value> extends BindingBase<Value> {
64
+ readonly kind: "dynamic";
65
+ readonly factory: (ctx: ResolutionContext) => Value;
66
+ readonly scope: BindingScope;
67
+ readonly onActivation?: ActivationHandler<Value> | undefined;
68
+ readonly onDeactivation?: DeactivationHandler<Value> | undefined;
69
+ }
70
+ /**
71
+ * @since 0.3.16-canary.0
72
+ */
73
+ export interface DynamicAsyncBinding<Value> extends BindingBase<Value> {
74
+ readonly kind: "dynamic-async";
75
+ readonly factory: (ctx: ResolutionContext) => Promise<Value>;
76
+ readonly scope: BindingScope;
77
+ readonly onActivation?: ActivationHandler<Value> | undefined;
78
+ readonly onDeactivation?: DeactivationHandler<Value> | undefined;
79
+ }
80
+ /**
81
+ * @since 0.3.16-canary.0
82
+ */
83
+ export interface ResolvedBinding<Value> extends BindingBase<Value> {
84
+ readonly kind: "resolved";
85
+ readonly factory: (...args: Array<unknown>) => Value;
86
+ readonly deps: ReadonlyArray<InjectionDescriptor>;
87
+ readonly scope: BindingScope;
88
+ readonly onActivation?: ActivationHandler<Value> | undefined;
89
+ readonly onDeactivation?: DeactivationHandler<Value> | undefined;
90
+ }
91
+ /**
92
+ * @since 0.3.16-canary.0
93
+ */
94
+ export interface ResolvedAsyncBinding<Value> extends BindingBase<Value> {
95
+ readonly kind: "resolved-async";
96
+ readonly factory: (...args: Array<unknown>) => Promise<Value>;
97
+ readonly deps: ReadonlyArray<InjectionDescriptor>;
98
+ readonly scope: BindingScope;
99
+ readonly onActivation?: ActivationHandler<Value> | undefined;
100
+ readonly onDeactivation?: DeactivationHandler<Value> | undefined;
101
+ }
102
+ /**
103
+ * @since 0.3.16-canary.0
104
+ */
105
+ export interface ConstantBinding<Value> extends BindingBase<Value> {
106
+ readonly kind: "constant";
107
+ readonly value: Value;
108
+ readonly scope: "singleton";
109
+ readonly onActivation?: ActivationHandler<Value> | undefined;
110
+ readonly onDeactivation?: DeactivationHandler<Value> | undefined;
111
+ }
112
+ /**
113
+ * @since 0.3.16-canary.0
114
+ */
115
+ export interface AliasBinding<Value> extends BindingBase<Value> {
116
+ readonly kind: "alias";
117
+ readonly target: Token<Value> | Constructor<Value>;
118
+ }
119
+ /**
120
+ * @since 0.3.16-canary.0
121
+ */
122
+ export type Binding<Value = unknown> = ClassBinding<Value> | DynamicBinding<Value> | DynamicAsyncBinding<Value> | ResolvedBinding<Value> | ResolvedAsyncBinding<Value> | ConstantBinding<Value> | AliasBinding<Value>;
123
+ /**
124
+ * Builder-only payload before `id`, `token`, `slot`, and `predicate` are applied.
125
+ *
126
+ * @since 0.3.16-canary.0
127
+ */
128
+ export type PartialBinding<Value> = Omit<ClassBinding<Value>, BindingBaseKeys> | Omit<DynamicBinding<Value>, BindingBaseKeys> | Omit<DynamicAsyncBinding<Value>, BindingBaseKeys> | Omit<ResolvedBinding<Value>, BindingBaseKeys> | Omit<ResolvedAsyncBinding<Value>, BindingBaseKeys> | Omit<ConstantBinding<Value>, BindingBaseKeys> | Omit<AliasBinding<Value>, BindingBaseKeys>;
129
+ /**
130
+ * @since 0.3.16-canary.0
131
+ */
132
+ export declare function generateBindingId(): BindingIdentifier;
133
+ /**
134
+ * Common slot-constraint + id methods shared by all concrete binding builders.
135
+ *
136
+ * @since 0.3.16-canary.0
137
+ */
138
+ export interface SlotConstrainedBuilder {
139
+ when(predicate: (ctx: ConstraintContext) => boolean): this;
140
+ whenNamed(name: string): this;
141
+ whenTagged(tag: string, value: unknown): this;
142
+ whenDefault(): this;
143
+ id(): BindingIdentifier;
144
+ }
145
+ /**
146
+ * @since 0.3.16-canary.0
147
+ */
148
+ export interface BindToBuilder<Value> {
149
+ to(type: Constructor<Value>): BindingBuilder<Value>;
150
+ toSelf(): BindingBuilder<Value>;
151
+ toConstantValue(value: Value): ConstantBindingBuilder<Value>;
152
+ toDynamic(factory: (ctx: ResolutionContext) => Value): BindingBuilder<Value>;
153
+ toDynamicAsync(factory: (ctx: ResolutionContext) => Promise<Value>): BindingBuilder<Value>;
154
+ toResolved<const Deps extends ReadonlyArray<InjectableDependency>>(factory: (...args: {
155
+ [K in keyof Deps]: ResolvedDependencyValue<NoInfer<Deps>[K]>;
156
+ }) => Value, deps: Deps): BindingBuilder<Value>;
157
+ toResolvedAsync<const Deps extends ReadonlyArray<InjectableDependency>>(factory: (...args: {
158
+ [K in keyof Deps]: ResolvedDependencyValue<NoInfer<Deps>[K]>;
159
+ }) => Promise<Value>, deps: Deps): BindingBuilder<Value>;
160
+ toAlias(target: Token<Value> | Constructor<Value>): AliasBindingBuilder;
161
+ }
162
+ /**
163
+ * @since 0.3.16-canary.0
164
+ */
165
+ export interface BindingBuilder<Value> extends SlotConstrainedBuilder {
166
+ singleton(): SingletonBindingBuilder<Value>;
167
+ transient(): TransientBindingBuilder<Value>;
168
+ scoped(): ScopedBindingBuilder<Value>;
169
+ }
170
+ /**
171
+ * @since 0.3.16-canary.0
172
+ */
173
+ export interface ConstantBindingBuilder<Value> extends SlotConstrainedBuilder {
174
+ onActivation(fn: ActivationHandler<Value>): SingletonLifecycleBuilder<Value>;
175
+ onDeactivation(fn: DeactivationHandler<Value>): SingletonLifecycleBuilder<Value>;
176
+ }
177
+ /**
178
+ * @since 0.3.16-canary.0
179
+ */
180
+ export interface AliasBindingBuilder extends SlotConstrainedBuilder {
181
+ }
182
+ /**
183
+ * @since 0.3.16-canary.0
184
+ */
185
+ export interface SingletonBindingBuilder<Value> {
186
+ onActivation(fn: ActivationHandler<Value>): this;
187
+ onDeactivation(fn: DeactivationHandler<Value>): this;
188
+ id(): BindingIdentifier;
189
+ }
190
+ /**
191
+ * @since 0.3.16-canary.0
192
+ */
193
+ export interface TransientBindingBuilder<Value> {
194
+ onActivation(fn: ActivationHandler<Value>): this;
195
+ id(): BindingIdentifier;
196
+ }
197
+ /**
198
+ * @since 0.3.16-canary.0
199
+ */
200
+ export interface ScopedBindingBuilder<Value> extends TransientBindingBuilder<Value> {
201
+ }
202
+ /**
203
+ * @since 0.3.16-canary.0
204
+ */
205
+ export interface SingletonLifecycleBuilder<Value> {
206
+ onActivation(fn: ActivationHandler<Value>): this;
207
+ onDeactivation(fn: DeactivationHandler<Value>): this;
208
+ id(): BindingIdentifier;
209
+ }
210
+ export {};
211
+ //# sourceMappingURL=binding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9G,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAIjB;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CAC1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAahF;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;CAAsD,CAAC;AAExF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAY7D;AAID,UAAU,WAAW,CAAC,KAAK;IACzB,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAC;IAC/B;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClD,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;CACxE;AAED,KAAK,eAAe,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;AAIlD;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,KAAK,CAAE,SAAQ,WAAW,CAAC,KAAK,CAAC;IAC7D,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IAC7D,QAAQ,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;CAClE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,KAAK,CAAE,SAAQ,WAAW,CAAC,KAAK,CAAC;IAC/D,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,KAAK,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IAC7D,QAAQ,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;CAClE;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,KAAK,CAAE,SAAQ,WAAW,CAAC,KAAK,CAAC;IACpE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7D,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IAC7D,QAAQ,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;CAClE;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,KAAK,CAAE,SAAQ,WAAW,CAAC,KAAK,CAAC;IAChE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC;IACrD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IAC7D,QAAQ,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;CAClE;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,KAAK,CAAE,SAAQ,WAAW,CAAC,KAAK,CAAC;IACrE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9D,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IAC7D,QAAQ,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;CAClE;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,KAAK,CAAE,SAAQ,WAAW,CAAC,KAAK,CAAC;IAChE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IAC7D,QAAQ,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;CAClE;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,KAAK,CAAE,SAAQ,WAAW,CAAC,KAAK,CAAC;IAC7D,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,MAAM,OAAO,CAAC,KAAK,GAAG,OAAO,IAC/B,YAAY,CAAC,KAAK,CAAC,GACnB,cAAc,CAAC,KAAK,CAAC,GACrB,mBAAmB,CAAC,KAAK,CAAC,GAC1B,eAAe,CAAC,KAAK,CAAC,GACtB,oBAAoB,CAAC,KAAK,CAAC,GAC3B,eAAe,CAAC,KAAK,CAAC,GACtB,YAAY,CAAC,KAAK,CAAC,CAAC;AAExB;;;;GAIG;AACH,MAAM,MAAM,cAAc,CAAC,KAAK,IAC5B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,GAC1C,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,GAC5C,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,GACjD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,GAC7C,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,GAClD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,GAC7C,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,CAAC;AAK/C;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,iBAAiB,CAErD;AAID;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,GAAG,IAAI,CAAC;IAC3D,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9C,WAAW,IAAI,IAAI,CAAC;IACpB,EAAE,IAAI,iBAAiB,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,KAAK;IAClC,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;IAChC,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC7D,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAC7E,cAAc,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3F,UAAU,CAAC,KAAK,CAAC,IAAI,SAAS,aAAa,CAAC,oBAAoB,CAAC,EAC/D,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;SAAG,CAAC,IAAI,MAAM,IAAI,GAAG,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,KAAK,KAAK,EAC7F,IAAI,EAAE,IAAI,GACT,cAAc,CAAC,KAAK,CAAC,CAAC;IACzB,eAAe,CAAC,KAAK,CAAC,IAAI,SAAS,aAAa,CAAC,oBAAoB,CAAC,EACpE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;SAAG,CAAC,IAAI,MAAM,IAAI,GAAG,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,KAAK,OAAO,CAAC,KAAK,CAAC,EACtG,IAAI,EAAE,IAAI,GACT,cAAc,CAAC,KAAK,CAAC,CAAC;IACzB,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,mBAAmB,CAAC;CACzE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,KAAK,CAAE,SAAQ,sBAAsB;IACnE,SAAS,IAAI,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC5C,SAAS,IAAI,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,KAAK,CAAE,SAAQ,sBAAsB;IAC3E,YAAY,CAAC,EAAE,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAC7E,cAAc,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;CAClF;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,sBAAsB;CAAG;AAEtE;;GAEG;AACH,MAAM,WAAW,uBAAuB,CAAC,KAAK;IAC5C,YAAY,CAAC,EAAE,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACjD,cAAc,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACrD,EAAE,IAAI,iBAAiB,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB,CAAC,KAAK;IAC5C,YAAY,CAAC,EAAE,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACjD,EAAE,IAAI,iBAAiB,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,KAAK,CAAE,SAAQ,uBAAuB,CAAC,KAAK,CAAC;CAAG;AAEtF;;GAEG;AACH,MAAM,WAAW,yBAAyB,CAAC,KAAK;IAC9C,YAAY,CAAC,EAAE,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACjD,cAAc,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACrD,EAAE,IAAI,iBAAiB,CAAC;CACzB"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @since 0.3.16-canary.0
3
+ */
4
+ export function bindingSlotEquals(left, right) {
5
+ if (left.name !== right.name) {
6
+ return false;
7
+ }
8
+ if (left.tags.length !== right.tags.length) {
9
+ return false;
10
+ }
11
+ for (const [tagKey, tagValue] of left.tags) {
12
+ if (!right.tags.some(([otherKey, otherValue]) => otherKey === tagKey && Object.is(otherValue, tagValue))) {
13
+ return false;
14
+ }
15
+ }
16
+ return true;
17
+ }
18
+ /**
19
+ * @since 0.3.16-canary.0
20
+ */
21
+ export const DEFAULT_BINDING_SLOT = { name: undefined, tags: [] };
22
+ /**
23
+ * @since 0.3.16-canary.0
24
+ */
25
+ export function bindingSlotToString(slot) {
26
+ if (slot.name === undefined && slot.tags.length === 0) {
27
+ return "default";
28
+ }
29
+ const parts = [];
30
+ if (slot.name !== undefined) {
31
+ parts.push(`name:${slot.name}`);
32
+ }
33
+ for (const [tagKey, tagValue] of slot.tags) {
34
+ parts.push(`tag:${tagKey}=${String(tagValue)}`);
35
+ }
36
+ return parts.join(",");
37
+ }
38
+ // ── ID generation ─────────────────────────────────────────────────────────────
39
+ let bindingIdCounter = 0;
40
+ /**
41
+ * @since 0.3.16-canary.0
42
+ */
43
+ export function generateBindingId() {
44
+ return String(++bindingIdCounter);
45
+ }
46
+ //# sourceMappingURL=binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding.js","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"AAwBA;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAiB,EAAE,KAAkB;IACrE,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,QAAQ,KAAK,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;YACzG,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAwB,CAAC;AAExF;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAiB;IACnD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAsID,iFAAiF;AAEjF,IAAI,gBAAgB,GAAG,CAAC,CAAC;AACzB;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,MAAM,CAAC,EAAE,gBAAgB,CAAsB,CAAC;AACzD,CAAC"}
@@ -1,4 +1,3 @@
1
- //#region src/constructor-type.d.ts
2
1
  /**
3
2
  * A class (newable) that produces `Value`. Rest parameters are `never[]` so
4
3
  * real classes with typed constructors remain assignable under
@@ -8,7 +7,7 @@
8
7
  *
9
8
  * @since 0.3.16-canary.0
10
9
  */
11
- type Constructor<Value = unknown> = new (...args: Array<never>) => Value;
10
+ export type Constructor<Value = unknown> = new (...args: Array<never>) => Value;
12
11
  /**
13
12
  * Class constructor as invoked by the resolver after metadata-driven
14
13
  * resolution of `unknown[]` dependencies — separate from {@link Constructor},
@@ -16,6 +15,5 @@ type Constructor<Value = unknown> = new (...args: Array<never>) => Value;
16
15
  *
17
16
  * @since 0.3.16-canary.0
18
17
  */
19
- type ConstructorInvocation = new (...args: Array<unknown>) => unknown;
20
- //#endregion
21
- export { Constructor, ConstructorInvocation };
18
+ export type ConstructorInvocation = new (...args: Array<unknown>) => unknown;
19
+ //# sourceMappingURL=constructor-type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constructor-type.d.ts","sourceRoot":"","sources":["../src/constructor-type.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,CAAC,KAAK,GAAG,OAAO,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;AAEhF;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=constructor-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constructor-type.js","sourceRoot":"","sources":["../src/constructor-type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Fluent binding-builder chain behind `container.bind()` / `container.rebind()`.
3
+ *
4
+ * Every builder commits eagerly on construction and re-commits (replacing the
5
+ * previous binding by id) whenever a later fluent call refines the binding —
6
+ * so a chain left half-finished is still a valid registration.
7
+ */
8
+ import type { AliasBindingBuilder, Binding, BindingBuilder, BindToBuilder, ConstantBindingBuilder } from "#/binding";
9
+ import type { InjectableDependency, ResolvedDependencyValue } from "#/decorators/inject";
10
+ import type { Token } from "#/token";
11
+ import type { BindingIdentifier, Constructor, ResolutionContext } from "#/types";
12
+ /**
13
+ * @since 0.5.0-canary.7
14
+ */
15
+ export type CommitFn = <Value>(binding: Binding<Value>, previousId?: BindingIdentifier) => BindingIdentifier;
16
+ /**
17
+ * @since 0.5.0-canary.7
18
+ */
19
+ export declare class BindingEntry<Value> implements BindToBuilder<Value> {
20
+ #private;
21
+ constructor(token: Token<Value> | Constructor<Value>, commitBinding: CommitFn);
22
+ to(type: Constructor<Value>): BindingBuilder<Value>;
23
+ toSelf(): BindingBuilder<Value>;
24
+ toConstantValue(value: Value): ConstantBindingBuilder<Value>;
25
+ toDynamic(factory: (ctx: ResolutionContext) => Value): BindingBuilder<Value>;
26
+ toDynamicAsync(factory: (ctx: ResolutionContext) => Promise<Value>): BindingBuilder<Value>;
27
+ toResolved<const Deps extends ReadonlyArray<InjectableDependency>>(factory: (...args: {
28
+ [K in keyof Deps]: ResolvedDependencyValue<NoInfer<Deps>[K]>;
29
+ }) => Value, deps: Deps): BindingBuilder<Value>;
30
+ toResolvedAsync<const Deps extends ReadonlyArray<InjectableDependency>>(factory: (...args: {
31
+ [K in keyof Deps]: ResolvedDependencyValue<NoInfer<Deps>[K]>;
32
+ }) => Promise<Value>, deps: Deps): BindingBuilder<Value>;
33
+ toAlias(target: Token<Value> | Constructor<Value>): AliasBindingBuilder;
34
+ }
35
+ //# sourceMappingURL=binding-builders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-builders.d.ts","sourceRoot":"","sources":["../../src/container/binding-builders.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EACV,mBAAmB,EACnB,OAAO,EACP,cAAc,EAEd,aAAa,EACb,sBAAsB,EAMvB,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEzF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAEV,iBAAiB,EAEjB,WAAW,EAEX,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAIjB;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,EAAE,iBAAiB,KAAK,iBAAiB,CAAC;AAsD7G;;GAEG;AACH,qBAAa,YAAY,CAAC,KAAK,CAAE,YAAW,aAAa,CAAC,KAAK,CAAC;;IAI9D,YAAY,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,QAAQ,EAG5E;IAED,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAMlD;IAED,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,CAS9B;IAED,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAE3D;IAED,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAM3E;IAED,cAAc,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAMzF;IAED,UAAU,CAAC,KAAK,CAAC,IAAI,SAAS,aAAa,CAAC,oBAAoB,CAAC,EAC/D,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;SAAG,CAAC,IAAI,MAAM,IAAI,GAAG,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,KAAK,KAAK,EAC7F,IAAI,EAAE,IAAI,GACT,cAAc,CAAC,KAAK,CAAC,CAYvB;IAED,eAAe,CAAC,KAAK,CAAC,IAAI,SAAS,aAAa,CAAC,oBAAoB,CAAC,EACpE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;SAAG,CAAC,IAAI,MAAM,IAAI,GAAG,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,KAAK,OAAO,CAAC,KAAK,CAAC,EACtG,IAAI,EAAE,IAAI,GACT,cAAc,CAAC,KAAK,CAAC,CAYvB;IAED,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,mBAAmB,CAEtE;CACF"}
@@ -0,0 +1,247 @@
1
+ import { DEFAULT_BINDING_SLOT, generateBindingId } from "#/binding";
2
+ import { normalizeToDescriptor } from "#/decorators/inject";
3
+ function updateSlotTag(slot, tag, value) {
4
+ const existing = [...slot.tags];
5
+ const idx = existing.findIndex(([k]) => k === tag);
6
+ if (idx !== -1) {
7
+ existing[idx] = [tag, value];
8
+ }
9
+ else {
10
+ existing.push([tag, value]);
11
+ }
12
+ return { ...slot, tags: existing };
13
+ }
14
+ // ── SlotBuilder ───────────────────────────────────────────────────────────────
15
+ class SlotBuilder {
16
+ slot = DEFAULT_BINDING_SLOT; // ✓ T3-1: no redundant spread
17
+ predicate;
18
+ committedId;
19
+ when(predicate) {
20
+ this.predicate = predicate;
21
+ this.commit();
22
+ return this;
23
+ }
24
+ whenNamed(name) {
25
+ this.slot = { ...this.slot, name };
26
+ this.commit();
27
+ return this;
28
+ }
29
+ whenTagged(tag, value) {
30
+ this.slot = updateSlotTag(this.slot, tag, value);
31
+ this.commit();
32
+ return this;
33
+ }
34
+ whenDefault() {
35
+ return this;
36
+ }
37
+ id() {
38
+ return this.committedId;
39
+ }
40
+ }
41
+ // ── BindingEntry ──────────────────────────────────────────────────────────────
42
+ /**
43
+ * @since 0.5.0-canary.7
44
+ */
45
+ export class BindingEntry {
46
+ #token;
47
+ #commitBinding;
48
+ constructor(token, commitBinding) {
49
+ this.#token = token;
50
+ this.#commitBinding = commitBinding;
51
+ }
52
+ to(type) {
53
+ return new ConstraintBuilder(this.#token, { kind: "class", target: type, scope: "transient" }, this.#commitBinding);
54
+ }
55
+ toSelf() {
56
+ if (typeof this.#token !== "function") {
57
+ throw new Error("toSelf() requires token to be a Constructor");
58
+ }
59
+ return new ConstraintBuilder(this.#token, { kind: "class", target: this.#token, scope: "transient" }, this.#commitBinding);
60
+ }
61
+ toConstantValue(value) {
62
+ return new ConstantBuilder(this.#token, value, this.#commitBinding);
63
+ }
64
+ toDynamic(factory) {
65
+ return new ConstraintBuilder(this.#token, { kind: "dynamic", factory, scope: "transient" }, this.#commitBinding);
66
+ }
67
+ toDynamicAsync(factory) {
68
+ return new ConstraintBuilder(this.#token, { kind: "dynamic-async", factory, scope: "transient" }, this.#commitBinding);
69
+ }
70
+ toResolved(factory, deps) {
71
+ const normalizedDeps = deps.map((dependency) => normalizeToDescriptor(dependency));
72
+ return new ConstraintBuilder(this.#token, {
73
+ kind: "resolved",
74
+ factory: factory,
75
+ deps: normalizedDeps,
76
+ scope: "transient",
77
+ }, this.#commitBinding);
78
+ }
79
+ toResolvedAsync(factory, deps) {
80
+ const normalizedDeps = deps.map((dependency) => normalizeToDescriptor(dependency));
81
+ return new ConstraintBuilder(this.#token, {
82
+ kind: "resolved-async",
83
+ factory: factory,
84
+ deps: normalizedDeps,
85
+ scope: "transient",
86
+ }, this.#commitBinding);
87
+ }
88
+ toAlias(target) {
89
+ return new AliasBuilder(this.#token, target, this.#commitBinding);
90
+ }
91
+ }
92
+ // ── ConstraintBuilder ─────────────────────────────────────────────────────────
93
+ class ConstraintBuilder extends SlotBuilder {
94
+ #token;
95
+ #partial;
96
+ #commitBinding;
97
+ constructor(token, partial, commitBinding) {
98
+ super();
99
+ this.#token = token;
100
+ this.#partial = partial;
101
+ this.#commitBinding = commitBinding;
102
+ this.commit();
103
+ }
104
+ commit() {
105
+ const previousId = this.committedId;
106
+ const binding = {
107
+ ...this.#partial,
108
+ id: generateBindingId(),
109
+ inFlight: false,
110
+ token: this.#token,
111
+ slot: this.slot,
112
+ predicate: this.predicate,
113
+ };
114
+ this.committedId = this.#commitBinding(binding, previousId);
115
+ }
116
+ singleton() {
117
+ const previousId = this.committedId;
118
+ this.committedId = undefined;
119
+ return new ScopeBuilder(this.#token, { ...this.#partial, scope: "singleton" }, this.slot, this.predicate, this.#commitBinding, previousId);
120
+ }
121
+ transient() {
122
+ const previousId = this.committedId;
123
+ this.committedId = undefined;
124
+ return new ScopeBuilder(this.#token, { ...this.#partial, scope: "transient" }, this.slot, this.predicate, this.#commitBinding, previousId);
125
+ }
126
+ scoped() {
127
+ const previousId = this.committedId;
128
+ this.committedId = undefined;
129
+ return new ScopeBuilder(this.#token, { ...this.#partial, scope: "scoped" }, this.slot, this.predicate, this.#commitBinding, previousId);
130
+ }
131
+ }
132
+ // ── ScopeBuilder ─────────────────────────────────────────────────────────────
133
+ class ScopeBuilder {
134
+ #onActivation;
135
+ #onDeactivation;
136
+ #committedId;
137
+ #token;
138
+ #partial;
139
+ #slot;
140
+ #predicate;
141
+ #commitBinding;
142
+ #initialPreviousId;
143
+ constructor(token, partial, slot, predicate, commitBinding, initialPreviousId) {
144
+ this.#token = token;
145
+ this.#partial = partial;
146
+ this.#slot = slot;
147
+ this.#predicate = predicate;
148
+ this.#commitBinding = commitBinding;
149
+ this.#initialPreviousId = initialPreviousId;
150
+ this.#commit();
151
+ }
152
+ #commit() {
153
+ const previousId = this.#committedId ?? this.#initialPreviousId;
154
+ const binding = {
155
+ ...this.#partial,
156
+ id: generateBindingId(),
157
+ inFlight: false,
158
+ token: this.#token,
159
+ slot: this.#slot,
160
+ predicate: this.#predicate,
161
+ onActivation: this.#onActivation,
162
+ onDeactivation: this.#onDeactivation,
163
+ };
164
+ this.#committedId = this.#commitBinding(binding, previousId);
165
+ }
166
+ onActivation(fn) {
167
+ this.#onActivation = fn;
168
+ this.#commit();
169
+ return this;
170
+ }
171
+ onDeactivation(fn) {
172
+ this.#onDeactivation = fn;
173
+ this.#commit();
174
+ return this;
175
+ }
176
+ id() {
177
+ return this.#committedId;
178
+ }
179
+ }
180
+ // ── ConstantBuilder ───────────────────────────────────────────────────────────
181
+ class ConstantBuilder extends SlotBuilder {
182
+ #onActivation;
183
+ #onDeactivation;
184
+ #token;
185
+ #value;
186
+ #commitBinding;
187
+ constructor(token, value, commitBinding) {
188
+ super();
189
+ this.#token = token;
190
+ this.#value = value;
191
+ this.#commitBinding = commitBinding;
192
+ this.commit();
193
+ }
194
+ commit() {
195
+ const previousId = this.committedId;
196
+ const binding = {
197
+ kind: "constant",
198
+ id: generateBindingId(),
199
+ inFlight: false,
200
+ token: this.#token,
201
+ slot: this.slot,
202
+ predicate: this.predicate,
203
+ value: this.#value,
204
+ scope: "singleton",
205
+ onActivation: this.#onActivation,
206
+ onDeactivation: this.#onDeactivation,
207
+ };
208
+ this.committedId = this.#commitBinding(binding, previousId);
209
+ }
210
+ onActivation(fn) {
211
+ this.#onActivation = fn;
212
+ this.commit();
213
+ return this;
214
+ }
215
+ onDeactivation(fn) {
216
+ this.#onDeactivation = fn;
217
+ this.commit();
218
+ return this;
219
+ }
220
+ }
221
+ // ── AliasBuilder ──────────────────────────────────────────────────────────────
222
+ class AliasBuilder extends SlotBuilder {
223
+ #token;
224
+ #target;
225
+ #commitBinding;
226
+ constructor(token, target, commitBinding) {
227
+ super();
228
+ this.#token = token;
229
+ this.#target = target;
230
+ this.#commitBinding = commitBinding;
231
+ this.commit();
232
+ }
233
+ commit() {
234
+ const previousId = this.committedId;
235
+ const binding = {
236
+ kind: "alias",
237
+ id: generateBindingId(),
238
+ inFlight: false,
239
+ token: this.#token,
240
+ slot: this.slot,
241
+ predicate: this.predicate,
242
+ target: this.#target,
243
+ };
244
+ this.committedId = this.#commitBinding(binding, previousId);
245
+ }
246
+ }
247
+ //# sourceMappingURL=binding-builders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-builders.js","sourceRoot":"","sources":["../../src/container/binding-builders.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAqB5D,SAAS,aAAa,CAAC,IAAiB,EAAE,GAAW,EAAE,KAAc;IACnE,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;IACnD,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;QACf,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACrC,CAAC;AAED,iFAAiF;AAEjF,MAAe,WAAW;IACd,IAAI,GAAgB,oBAAoB,CAAC,CAAC,8BAA8B;IACxE,SAAS,CAAoD;IAC7D,WAAW,CAAgC;IAIrD,IAAI,CAAC,SAA8C;QACjD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,IAAY;QACpB,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,GAAW,EAAE,KAAc;QACpC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IAED,EAAE;QACA,OAAO,IAAI,CAAC,WAAY,CAAC;IAC3B,CAAC;CACF;AAED,iFAAiF;AAEjF;;GAEG;AACH,MAAM,OAAO,YAAY;IACd,MAAM,CAAoC;IAC1C,cAAc,CAAW;IAElC,YAAY,KAAwC,EAAE,aAAuB;QAC3E,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;IACtC,CAAC;IAED,EAAE,CAAC,IAAwB;QACzB,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,MAAM,EACX,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,EACnD,IAAI,CAAC,cAAc,CACpB,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,MAAM,EACX,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,EAC1D,IAAI,CAAC,cAAc,CACpB,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,KAAY;QAC1B,OAAO,IAAI,eAAe,CAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAC7E,CAAC;IAED,SAAS,CAAC,OAA0C;QAClD,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,MAAM,EACX,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAChD,IAAI,CAAC,cAAc,CACpB,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,OAAmD;QAChE,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,MAAM,EACX,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EACtD,IAAI,CAAC,cAAc,CACpB,CAAC;IACJ,CAAC;IAED,UAAU,CACR,OAA6F,EAC7F,IAAU;QAEV,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC;QACnF,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,MAAM,EACX;YACE,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,OAA6C;YACtD,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,WAAW;SACnB,EACD,IAAI,CAAC,cAAc,CACpB,CAAC;IACJ,CAAC;IAED,eAAe,CACb,OAAsG,EACtG,IAAU;QAEV,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC;QACnF,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,MAAM,EACX;YACE,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,OAAsD;YAC/D,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,WAAW;SACnB,EACD,IAAI,CAAC,cAAc,CACpB,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,MAAyC;QAC/C,OAAO,IAAI,YAAY,CAAQ,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3E,CAAC;CACF;AAED,iFAAiF;AAEjF,MAAM,iBAAyB,SAAQ,WAAW;IACvC,MAAM,CAAoC;IAC1C,QAAQ,CAA8B;IACtC,cAAc,CAAW;IAElC,YAAY,KAAwC,EAAE,OAAoC,EAAE,aAAuB;QACjH,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAES,MAAM;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,MAAM,OAAO,GAAmB;YAC9B,GAAG,IAAI,CAAC,QAAQ;YAChB,EAAE,EAAE,iBAAiB,EAAE;YACvB,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS;QACP,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,OAAO,IAAI,YAAY,CACrB,IAAI,CAAC,MAAM,EACX,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,EACxC,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,cAAc,EACnB,UAAU,CACX,CAAC;IACJ,CAAC;IAED,SAAS;QACP,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,OAAO,IAAI,YAAY,CACrB,IAAI,CAAC,MAAM,EACX,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,EACxC,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,cAAc,EACnB,UAAU,CACX,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,OAAO,IAAI,YAAY,CACrB,IAAI,CAAC,MAAM,EACX,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EACrC,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,cAAc,EACnB,UAAU,CACX,CAAC;IACJ,CAAC;CACF;AAED,gFAAgF;AAEhF,MAAM,YAAY;IAChB,aAAa,CAAuC;IACpD,eAAe,CAAyC;IACxD,YAAY,CAAgC;IAEnC,MAAM,CAAoC;IAC1C,QAAQ,CAA8B;IACtC,KAAK,CAAc;IACnB,UAAU,CAAoD;IAC9D,cAAc,CAAW;IACzB,kBAAkB,CAAgC;IAE3D,YACE,KAAwC,EACxC,OAAoC,EACpC,IAAiB,EACjB,SAA4D,EAC5D,aAAuB,EACvB,iBAAqC;QAErC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,OAAO;QACL,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,kBAAkB,CAAC;QAChE,MAAM,OAAO,GAAmB;YAC9B,GAAG,IAAI,CAAC,QAAQ;YAChB,EAAE,EAAE,iBAAiB,EAAE;YACvB,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,cAAc,EAAE,IAAI,CAAC,eAAe;SACrC,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC/D,CAAC;IAED,YAAY,CAAC,EAA4B;QACvC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc,CAAC,EAA8B;QAC3C,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,EAAE;QACA,OAAO,IAAI,CAAC,YAAa,CAAC;IAC5B,CAAC;CACF;AAED,iFAAiF;AAEjF,MAAM,eACJ,SAAQ,WAAW;IAGnB,aAAa,CAAuC;IACpD,eAAe,CAAyC;IAE/C,MAAM,CAAoC;IAC1C,MAAM,CAAQ;IACd,cAAc,CAAW;IAElC,YAAY,KAAwC,EAAE,KAAY,EAAE,aAAuB;QACzF,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAES,MAAM;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,MAAM,OAAO,GAAmB;YAC9B,IAAI,EAAE,UAAU;YAChB,EAAE,EAAE,iBAAiB,EAAE;YACvB,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,KAAK,EAAE,WAAW;YAClB,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,cAAc,EAAE,IAAI,CAAC,eAAe;SACrC,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC9D,CAAC;IAED,YAAY,CAAC,EAA4B;QACvC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc,CAAC,EAA8B;QAC3C,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,iFAAiF;AAEjF,MAAM,YAAoB,SAAQ,WAAW;IAClC,MAAM,CAAoC;IAC1C,OAAO,CAAoC;IAC3C,cAAc,CAAW;IAElC,YACE,KAAwC,EACxC,MAAyC,EACzC,aAAuB;QAEvB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAES,MAAM;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,MAAM,OAAO,GAAmB;YAC9B,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,iBAAiB,EAAE;YACvB,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC9D,CAAC;CACF"}