@codefast/di 0.5.0 → 0.6.1

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 (266) hide show
  1. package/CHANGELOG.md +712 -0
  2. package/README.md +119 -30
  3. package/dist/ambient/active-container.d.ts +37 -0
  4. package/dist/ambient/active-container.d.ts.map +1 -0
  5. package/dist/ambient/active-container.js +41 -0
  6. package/dist/ambient/active-container.js.map +1 -0
  7. package/dist/container/binding-builders.d.ts +12 -8
  8. package/dist/container/binding-builders.d.ts.map +1 -1
  9. package/dist/container/binding-builders.js +62 -31
  10. package/dist/container/binding-builders.js.map +1 -1
  11. package/dist/container/container.d.ts +33 -19
  12. package/dist/container/container.d.ts.map +1 -1
  13. package/dist/container/container.js +281 -118
  14. package/dist/container/container.js.map +1 -1
  15. package/dist/{resolution → core}/binding-scope.d.ts +2 -2
  16. package/dist/core/binding-scope.d.ts.map +1 -0
  17. package/dist/core/binding-scope.js.map +1 -0
  18. package/dist/{binding.d.ts → core/binding.d.ts} +70 -15
  19. package/dist/core/binding.d.ts.map +1 -0
  20. package/dist/{binding.js → core/binding.js} +27 -12
  21. package/dist/core/binding.js.map +1 -0
  22. package/dist/core/constraint-requirement.d.ts +53 -0
  23. package/dist/core/constraint-requirement.d.ts.map +1 -0
  24. package/dist/core/constraint-requirement.js +62 -0
  25. package/dist/core/constraint-requirement.js.map +1 -0
  26. package/dist/{constructor-type.d.ts → core/constructor-type.d.ts} +1 -1
  27. package/dist/core/constructor-type.d.ts.map +1 -0
  28. package/dist/core/constructor-type.js.map +1 -0
  29. package/dist/{module.d.ts → core/module.d.ts} +5 -5
  30. package/dist/core/module.d.ts.map +1 -0
  31. package/dist/{module.js → core/module.js} +4 -4
  32. package/dist/core/module.js.map +1 -0
  33. package/dist/{registry.d.ts → core/registry.d.ts} +27 -7
  34. package/dist/core/registry.d.ts.map +1 -0
  35. package/dist/{registry.js → core/registry.js} +125 -52
  36. package/dist/core/registry.js.map +1 -0
  37. package/dist/core/tag.d.ts +80 -0
  38. package/dist/core/tag.d.ts.map +1 -0
  39. package/dist/core/tag.js +96 -0
  40. package/dist/core/tag.js.map +1 -0
  41. package/dist/{token.d.ts → core/token.d.ts} +2 -6
  42. package/dist/core/token.d.ts.map +1 -0
  43. package/dist/core/token.js +13 -0
  44. package/dist/core/token.js.map +1 -0
  45. package/dist/{types.d.ts → core/types.d.ts} +27 -21
  46. package/dist/core/types.d.ts.map +1 -0
  47. package/dist/core/types.js.map +1 -0
  48. package/dist/decorators/inject.d.ts +5 -49
  49. package/dist/decorators/inject.d.ts.map +1 -1
  50. package/dist/decorators/inject.js +34 -104
  51. package/dist/decorators/inject.js.map +1 -1
  52. package/dist/decorators/injectable.d.ts +25 -5
  53. package/dist/decorators/injectable.d.ts.map +1 -1
  54. package/dist/decorators/injectable.js +2 -3
  55. package/dist/decorators/injectable.js.map +1 -1
  56. package/dist/decorators/lifecycle-decorators.d.ts +4 -2
  57. package/dist/decorators/lifecycle-decorators.d.ts.map +1 -1
  58. package/dist/decorators/lifecycle-decorators.js +19 -25
  59. package/dist/decorators/lifecycle-decorators.js.map +1 -1
  60. package/dist/{resolution → errors}/diagnostics.d.ts +2 -0
  61. package/dist/errors/diagnostics.d.ts.map +1 -0
  62. package/dist/errors/diagnostics.js.map +1 -0
  63. package/dist/{errors.d.ts → errors/errors.d.ts} +89 -4
  64. package/dist/errors/errors.d.ts.map +1 -0
  65. package/dist/{errors.js → errors/errors.js} +129 -7
  66. package/dist/errors/errors.js.map +1 -0
  67. package/dist/index.d.ts +21 -14
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +15 -7
  70. package/dist/index.js.map +1 -1
  71. package/dist/injection/descriptor.d.ts +79 -0
  72. package/dist/injection/descriptor.d.ts.map +1 -0
  73. package/dist/injection/descriptor.js +118 -0
  74. package/dist/injection/descriptor.js.map +1 -0
  75. package/dist/{resolution → injection}/resolve-options.d.ts +21 -11
  76. package/dist/injection/resolve-options.d.ts.map +1 -0
  77. package/dist/injection/resolve-options.js +101 -0
  78. package/dist/injection/resolve-options.js.map +1 -0
  79. package/dist/introspection/dependency-graph.d.ts +16 -5
  80. package/dist/introspection/dependency-graph.d.ts.map +1 -1
  81. package/dist/introspection/dependency-graph.js +138 -57
  82. package/dist/introspection/dependency-graph.js.map +1 -1
  83. package/dist/introspection/graph-adapters/cytoscape.d.ts +6 -3
  84. package/dist/introspection/graph-adapters/cytoscape.d.ts.map +1 -1
  85. package/dist/introspection/graph-adapters/cytoscape.js +3 -0
  86. package/dist/introspection/graph-adapters/cytoscape.js.map +1 -1
  87. package/dist/introspection/graph-adapters/dot.d.ts.map +1 -1
  88. package/dist/introspection/graph-adapters/dot.js +12 -5
  89. package/dist/introspection/graph-adapters/dot.js.map +1 -1
  90. package/dist/introspection/graph-adapters/mermaid.d.ts +9 -0
  91. package/dist/introspection/graph-adapters/mermaid.d.ts.map +1 -0
  92. package/dist/introspection/graph-adapters/mermaid.js +47 -0
  93. package/dist/introspection/graph-adapters/mermaid.js.map +1 -0
  94. package/dist/introspection/graph-adapters/reactflow.d.ts +6 -3
  95. package/dist/introspection/graph-adapters/reactflow.d.ts.map +1 -1
  96. package/dist/introspection/graph-adapters/reactflow.js +5 -1
  97. package/dist/introspection/graph-adapters/reactflow.js.map +1 -1
  98. package/dist/introspection/inspector.d.ts +4 -4
  99. package/dist/introspection/inspector.d.ts.map +1 -1
  100. package/dist/introspection/inspector.js +10 -6
  101. package/dist/introspection/inspector.js.map +1 -1
  102. package/dist/lifecycle/lifecycle-manager.d.ts +27 -0
  103. package/dist/lifecycle/lifecycle-manager.d.ts.map +1 -0
  104. package/dist/{resolution/lifecycle.js → lifecycle/lifecycle-manager.js} +39 -9
  105. package/dist/lifecycle/lifecycle-manager.js.map +1 -0
  106. package/dist/lifecycle/scope-manager.d.ts +48 -0
  107. package/dist/lifecycle/scope-manager.d.ts.map +1 -0
  108. package/dist/lifecycle/scope-manager.js +135 -0
  109. package/dist/lifecycle/scope-manager.js.map +1 -0
  110. package/dist/metadata/metadata-reader-token.d.ts +1 -1
  111. package/dist/metadata/metadata-reader-token.d.ts.map +1 -1
  112. package/dist/metadata/metadata-reader-token.js +1 -1
  113. package/dist/metadata/metadata-reader-token.js.map +1 -1
  114. package/dist/metadata/metadata-types.d.ts +9 -9
  115. package/dist/metadata/metadata-types.d.ts.map +1 -1
  116. package/dist/metadata/symbol-metadata-reader.d.ts +19 -6
  117. package/dist/metadata/symbol-metadata-reader.d.ts.map +1 -1
  118. package/dist/metadata/symbol-metadata-reader.js +89 -9
  119. package/dist/metadata/symbol-metadata-reader.js.map +1 -1
  120. package/dist/metadata/verifying-metadata-reader.d.ts +16 -0
  121. package/dist/metadata/verifying-metadata-reader.d.ts.map +1 -0
  122. package/dist/metadata/verifying-metadata-reader.js +32 -0
  123. package/dist/metadata/verifying-metadata-reader.js.map +1 -0
  124. package/dist/resolution/{activation-need.d.ts → cache/activation-need.d.ts} +5 -5
  125. package/dist/resolution/cache/activation-need.d.ts.map +1 -0
  126. package/dist/resolution/cache/activation-need.js.map +1 -0
  127. package/dist/resolution/{binding-lookup-cache.d.ts → cache/binding-lookup-cache.d.ts} +9 -5
  128. package/dist/resolution/cache/binding-lookup-cache.d.ts.map +1 -0
  129. package/dist/resolution/{binding-lookup-cache.js → cache/binding-lookup-cache.js} +55 -0
  130. package/dist/resolution/cache/binding-lookup-cache.js.map +1 -0
  131. package/dist/resolution/cache/class-introspector.d.ts +66 -0
  132. package/dist/resolution/cache/class-introspector.d.ts.map +1 -0
  133. package/dist/resolution/cache/class-introspector.js +194 -0
  134. package/dist/resolution/cache/class-introspector.js.map +1 -0
  135. package/dist/resolution/context.d.ts +84 -0
  136. package/dist/resolution/context.d.ts.map +1 -0
  137. package/dist/resolution/{environment.js → context.js} +54 -80
  138. package/dist/resolution/context.js.map +1 -0
  139. package/dist/resolution/path/resolution-path.d.ts +94 -0
  140. package/dist/resolution/path/resolution-path.d.ts.map +1 -0
  141. package/dist/resolution/path/resolution-path.js +117 -0
  142. package/dist/resolution/path/resolution-path.js.map +1 -0
  143. package/dist/resolution/{instantiation-plan.d.ts → plan/instantiation-plan.d.ts} +37 -7
  144. package/dist/resolution/plan/instantiation-plan.d.ts.map +1 -0
  145. package/dist/resolution/plan/instantiation-plan.js +419 -0
  146. package/dist/resolution/plan/instantiation-plan.js.map +1 -0
  147. package/dist/resolution/resolver.d.ts +28 -28
  148. package/dist/resolution/resolver.d.ts.map +1 -1
  149. package/dist/resolution/resolver.js +581 -239
  150. package/dist/resolution/resolver.js.map +1 -1
  151. package/dist/resolution/select/binding-select.d.ts +34 -0
  152. package/dist/resolution/select/binding-select.d.ts.map +1 -0
  153. package/dist/resolution/select/binding-select.js +175 -0
  154. package/dist/resolution/select/binding-select.js.map +1 -0
  155. package/dist/resolution/{constraints.d.ts → select/constraints.d.ts} +13 -12
  156. package/dist/resolution/select/constraints.d.ts.map +1 -0
  157. package/dist/resolution/{constraints.js → select/constraints.js} +33 -22
  158. package/dist/resolution/select/constraints.js.map +1 -0
  159. package/package.json +160 -20
  160. package/src/ambient/active-container.ts +65 -0
  161. package/src/container/binding-builders.ts +79 -44
  162. package/src/container/container.ts +357 -170
  163. package/src/{resolution → core}/binding-scope.ts +2 -2
  164. package/src/{binding.ts → core/binding.ts} +101 -39
  165. package/src/core/constraint-requirement.ts +94 -0
  166. package/src/{constructor-type.ts → core/constructor-type.ts} +1 -1
  167. package/src/{module.ts → core/module.ts} +10 -10
  168. package/src/core/registry.ts +365 -0
  169. package/src/core/tag.ts +158 -0
  170. package/src/{token.ts → core/token.ts} +2 -14
  171. package/src/{types.ts → core/types.ts} +37 -34
  172. package/src/decorators/inject.ts +39 -175
  173. package/src/decorators/injectable.ts +40 -10
  174. package/src/decorators/lifecycle-decorators.ts +22 -34
  175. package/src/{resolution → errors}/diagnostics.ts +2 -0
  176. package/src/{errors.ts → errors/errors.ts} +152 -8
  177. package/src/index.ts +43 -15
  178. package/src/injection/descriptor.ts +206 -0
  179. package/src/injection/resolve-options.ts +144 -0
  180. package/src/introspection/dependency-graph.ts +223 -63
  181. package/src/introspection/graph-adapters/cytoscape.ts +9 -3
  182. package/src/introspection/graph-adapters/dot.ts +13 -5
  183. package/src/introspection/graph-adapters/mermaid.ts +61 -0
  184. package/src/introspection/graph-adapters/reactflow.ts +11 -4
  185. package/src/introspection/inspector.ts +16 -12
  186. package/src/{resolution/lifecycle.ts → lifecycle/lifecycle-manager.ts} +68 -32
  187. package/src/lifecycle/scope-manager.ts +156 -0
  188. package/src/metadata/metadata-reader-token.ts +2 -2
  189. package/src/metadata/metadata-types.ts +9 -9
  190. package/src/metadata/symbol-metadata-reader.ts +95 -18
  191. package/src/metadata/verifying-metadata-reader.ts +41 -0
  192. package/src/resolution/{activation-need.ts → cache/activation-need.ts} +8 -8
  193. package/src/resolution/{binding-lookup-cache.ts → cache/binding-lookup-cache.ts} +63 -5
  194. package/src/resolution/cache/class-introspector.ts +251 -0
  195. package/src/resolution/{environment.ts → context.ts} +84 -145
  196. package/src/resolution/path/resolution-path.ts +167 -0
  197. package/src/resolution/plan/instantiation-plan.ts +615 -0
  198. package/src/resolution/resolver.ts +663 -313
  199. package/src/resolution/select/binding-select.ts +210 -0
  200. package/src/resolution/select/constraints.ts +130 -0
  201. package/dist/binding.d.ts.map +0 -1
  202. package/dist/binding.js.map +0 -1
  203. package/dist/constructor-type.d.ts.map +0 -1
  204. package/dist/constructor-type.js.map +0 -1
  205. package/dist/errors.d.ts.map +0 -1
  206. package/dist/errors.js.map +0 -1
  207. package/dist/module.d.ts.map +0 -1
  208. package/dist/module.js.map +0 -1
  209. package/dist/registry.d.ts.map +0 -1
  210. package/dist/registry.js.map +0 -1
  211. package/dist/resolution/activation-need.d.ts.map +0 -1
  212. package/dist/resolution/activation-need.js.map +0 -1
  213. package/dist/resolution/binding-lookup-cache.d.ts.map +0 -1
  214. package/dist/resolution/binding-lookup-cache.js.map +0 -1
  215. package/dist/resolution/binding-scope.d.ts.map +0 -1
  216. package/dist/resolution/binding-scope.js.map +0 -1
  217. package/dist/resolution/binding-select.d.ts +0 -23
  218. package/dist/resolution/binding-select.d.ts.map +0 -1
  219. package/dist/resolution/binding-select.js +0 -121
  220. package/dist/resolution/binding-select.js.map +0 -1
  221. package/dist/resolution/class-introspector.d.ts +0 -27
  222. package/dist/resolution/class-introspector.d.ts.map +0 -1
  223. package/dist/resolution/class-introspector.js +0 -60
  224. package/dist/resolution/class-introspector.js.map +0 -1
  225. package/dist/resolution/constraints.d.ts.map +0 -1
  226. package/dist/resolution/constraints.js.map +0 -1
  227. package/dist/resolution/diagnostics.d.ts.map +0 -1
  228. package/dist/resolution/diagnostics.js.map +0 -1
  229. package/dist/resolution/environment.d.ts +0 -94
  230. package/dist/resolution/environment.d.ts.map +0 -1
  231. package/dist/resolution/environment.js.map +0 -1
  232. package/dist/resolution/instantiation-plan.d.ts.map +0 -1
  233. package/dist/resolution/instantiation-plan.js +0 -183
  234. package/dist/resolution/instantiation-plan.js.map +0 -1
  235. package/dist/resolution/lifecycle.d.ts +0 -23
  236. package/dist/resolution/lifecycle.d.ts.map +0 -1
  237. package/dist/resolution/lifecycle.js.map +0 -1
  238. package/dist/resolution/resolution-path.d.ts +0 -98
  239. package/dist/resolution/resolution-path.d.ts.map +0 -1
  240. package/dist/resolution/resolution-path.js +0 -98
  241. package/dist/resolution/resolution-path.js.map +0 -1
  242. package/dist/resolution/resolve-options.d.ts.map +0 -1
  243. package/dist/resolution/resolve-options.js +0 -56
  244. package/dist/resolution/resolve-options.js.map +0 -1
  245. package/dist/resolution/scope.d.ts +0 -28
  246. package/dist/resolution/scope.d.ts.map +0 -1
  247. package/dist/resolution/scope.js +0 -88
  248. package/dist/resolution/scope.js.map +0 -1
  249. package/dist/token.d.ts.map +0 -1
  250. package/dist/token.js +0 -22
  251. package/dist/token.js.map +0 -1
  252. package/dist/types.d.ts.map +0 -1
  253. package/dist/types.js.map +0 -1
  254. package/src/registry.ts +0 -282
  255. package/src/resolution/binding-select.ts +0 -154
  256. package/src/resolution/class-introspector.ts +0 -74
  257. package/src/resolution/constraints.ts +0 -121
  258. package/src/resolution/instantiation-plan.ts +0 -292
  259. package/src/resolution/resolution-path.ts +0 -156
  260. package/src/resolution/resolve-options.ts +0 -89
  261. package/src/resolution/scope.ts +0 -105
  262. /package/dist/{resolution → core}/binding-scope.js +0 -0
  263. /package/dist/{constructor-type.js → core/constructor-type.js} +0 -0
  264. /package/dist/{types.js → core/types.js} +0 -0
  265. /package/dist/{resolution → errors}/diagnostics.js +0 -0
  266. /package/dist/resolution/{activation-need.js → cache/activation-need.js} +0 -0
@@ -0,0 +1,419 @@
1
+ import { NO_INSTANCE } from "#/core/binding";
2
+ import { tokenName } from "#/core/token";
3
+ import { AsyncResolutionError } from "#/errors/errors";
4
+ import { injectionSlotToResolveOptions, isNameOnlyOptions } from "#/injection/resolve-options";
5
+ // Past this depth a dependency escapes to the runtime path rather than inlining further —
6
+ // compiled closures nest one JS frame per level, and pathological graphs are the runtime's job.
7
+ const PLAN_DEPTH_LIMIT = 32;
8
+ /**
9
+ * Compilation asked to retry later (class lifecycle metadata not discovered yet).
10
+ *
11
+ * @since 0.5.0-canary.7
12
+ */
13
+ export const PLAN_RETRY = Symbol("di:plan-retry");
14
+ function allSynchronous(deps) {
15
+ for (let index = 0; index < deps.length; index += 1) {
16
+ if (deps[index].promiseShape !== "never") {
17
+ return false;
18
+ }
19
+ }
20
+ return true;
21
+ }
22
+ /**
23
+ * The promise-aware combinator: run every dep thunk, await them together, then apply.
24
+ *
25
+ * @remarks A dep's sync throw becomes that slot's rejection so its siblings still start — the
26
+ * interpreted path starts every sibling before the first rejection propagates, and so does this.
27
+ */
28
+ function settleThenApply(deps, apply) {
29
+ return () => {
30
+ const pending = new Array(deps.length);
31
+ for (let index = 0; index < deps.length; index += 1) {
32
+ try {
33
+ pending[index] = deps[index].run();
34
+ }
35
+ catch (dependencyError) {
36
+ pending[index] = Promise.reject(dependencyError);
37
+ }
38
+ }
39
+ return Promise.all(pending).then(apply);
40
+ };
41
+ }
42
+ /**
43
+ * @since 0.3.16-canary.1
44
+ */
45
+ export class InstantiationPlanCompiler {
46
+ #host;
47
+ constructor(host) {
48
+ this.#host = host;
49
+ }
50
+ compile(binding) {
51
+ return binding.kind === "class"
52
+ ? this.#compileClassPlan(binding, new Set(), 0, [])
53
+ : this.#compileResolvedPlan(binding, new Set(), 0, []);
54
+ }
55
+ /**
56
+ * Re-entry into the runtime resolver for a dependency the plan can't see through.
57
+ *
58
+ * The ancestors are fixed at compile time, so the seed is built once and lent per call — the
59
+ * root-stack rule one level down: every sync lane pops what it pushes, so the owned array still
60
+ * holds exactly the seed when a call returns. A reentrant call finds it claimed and mints its
61
+ * own copy; a return that did not restore the length hands nothing back, so the next call mints.
62
+ */
63
+ #compileEscapeThunk(token, ancestors, arity = "single", options) {
64
+ const host = this.#host;
65
+ const frames = ancestors.map((ancestor) => host.getResolutionFrame(ancestor));
66
+ const depth = frames.length;
67
+ let owned = [...frames];
68
+ return () => {
69
+ const stack = owned ?? [...frames];
70
+ owned = undefined;
71
+ try {
72
+ return host.resolveEscaped(token, options, arity, stack);
73
+ }
74
+ finally {
75
+ if (stack.length === depth) {
76
+ owned = stack;
77
+ }
78
+ }
79
+ };
80
+ }
81
+ // A resolved binding declares its deps as explicit descriptors — same rules as
82
+ // class params, with the factory call (and its sync-only check) in place of `new`.
83
+ #compileResolvedPlan(binding, compileStack, depth, ancestors) {
84
+ if (binding.onActivation !== undefined || this.#host.hasActivationHandlers(binding)) {
85
+ return null;
86
+ }
87
+ const factory = binding.factory;
88
+ const tokenDisplayName = tokenName(binding.token);
89
+ const depThunks = new Array(binding.deps.length);
90
+ const depAncestors = [...ancestors, binding];
91
+ compileStack.add(binding.id);
92
+ try {
93
+ for (let index = 0; index < binding.deps.length; index += 1) {
94
+ const thunk = this.#compileInjectionThunk(binding.deps[index], compileStack, depth, depAncestors);
95
+ if (thunk === PLAN_RETRY) {
96
+ return thunk;
97
+ }
98
+ depThunks[index] = thunk;
99
+ }
100
+ }
101
+ finally {
102
+ compileStack.delete(binding.id);
103
+ }
104
+ return () => {
105
+ const factoryResult = factory(...depThunks.map((thunk) => thunk()));
106
+ if (factoryResult instanceof Promise) {
107
+ throw new AsyncResolutionError(tokenDisplayName);
108
+ }
109
+ return factoryResult;
110
+ };
111
+ }
112
+ /**
113
+ * One dependency of a plan node — a constructor param or a `toResolved` descriptor.
114
+ *
115
+ * @remarks Anything but a plain required single dependency escapes to the runtime path.
116
+ */
117
+ #compileInjectionThunk(descriptor, compileStack, depth, ancestors) {
118
+ const token = descriptor.token;
119
+ const options = injectionSlotToResolveOptions(descriptor);
120
+ if (descriptor.multi) {
121
+ return this.#compileEscapeThunk(token, ancestors, "all", options);
122
+ }
123
+ if (descriptor.optional) {
124
+ return this.#compileEscapeThunk(token, ancestors, "optional", options);
125
+ }
126
+ if (options !== undefined) {
127
+ // A name the registry can settle without reading a path is a dependency like any other: it
128
+ // escapes only because it carries a criterion, not because anything about it is opaque.
129
+ if (isNameOnlyOptions(options)) {
130
+ const named = this.#host.lookupPathIndependentNamedEntry(token, options);
131
+ if (named !== null) {
132
+ return this.#compileDepThunk(named, compileStack, depth, ancestors, options);
133
+ }
134
+ }
135
+ else {
136
+ // The host owns the whole single-tag decision, including whether the options qualify.
137
+ const tagged = this.#host.lookupPathIndependentTaggedEntry?.(token, options);
138
+ if (tagged !== null && tagged !== undefined) {
139
+ return this.#compileDepThunk(tagged, compileStack, depth, ancestors, options);
140
+ }
141
+ }
142
+ return this.#compileEscapeThunk(token, ancestors, "single", options);
143
+ }
144
+ const entry = this.#host.lookupDependencyEntry(token);
145
+ if (entry === null) {
146
+ return this.#compileEscapeThunk(token, ancestors);
147
+ }
148
+ return this.#compileDepThunk(entry, compileStack, depth, ancestors);
149
+ }
150
+ #compileClassPlan(binding, compileStack, depth, ancestors) {
151
+ if (binding.onActivation !== undefined || this.#host.hasActivationHandlers(binding)) {
152
+ return null;
153
+ }
154
+ const target = binding.target;
155
+ const hasPostConstruct = this.#host.knownPostConstruct(target);
156
+ if (hasPostConstruct === undefined) {
157
+ return PLAN_RETRY;
158
+ }
159
+ if (hasPostConstruct || this.#host.needsActiveContainer(target)) {
160
+ return null;
161
+ }
162
+ const invokable = target;
163
+ const meta = this.#host.getConstructorMetadata(target);
164
+ if (meta === undefined) {
165
+ // Metadata-less classes with required params throw on the runtime path — keep them there.
166
+ return target.length === 0 ? () => new invokable() : null;
167
+ }
168
+ const params = meta.params;
169
+ if (params.length === 0) {
170
+ return () => new invokable();
171
+ }
172
+ const depThunks = new Array(params.length);
173
+ const depAncestors = [...ancestors, binding];
174
+ compileStack.add(binding.id);
175
+ try {
176
+ for (let index = 0; index < params.length; index += 1) {
177
+ const thunk = this.#compileInjectionThunk(params[index], compileStack, depth, depAncestors);
178
+ if (thunk === PLAN_RETRY) {
179
+ return thunk;
180
+ }
181
+ depThunks[index] = thunk;
182
+ }
183
+ }
184
+ finally {
185
+ compileStack.delete(binding.id);
186
+ }
187
+ switch (depThunks.length) {
188
+ case 1: {
189
+ const dep0 = depThunks[0];
190
+ return () => new invokable(dep0());
191
+ }
192
+ case 2: {
193
+ const dep0 = depThunks[0];
194
+ const dep1 = depThunks[1];
195
+ return () => new invokable(dep0(), dep1());
196
+ }
197
+ case 3: {
198
+ const dep0 = depThunks[0];
199
+ const dep1 = depThunks[1];
200
+ const dep2 = depThunks[2];
201
+ return () => new invokable(dep0(), dep1(), dep2());
202
+ }
203
+ default:
204
+ return () => new invokable(...depThunks.map((thunk) => thunk()));
205
+ }
206
+ }
207
+ #compileDepThunk(entry, compileStack, depth, ancestors, options) {
208
+ const { binding } = entry;
209
+ if (binding.kind === "constant" && binding.onActivation === undefined) {
210
+ if (!this.#host.hasActivationHandlers(binding)) {
211
+ const value = binding.value;
212
+ return () => value;
213
+ }
214
+ }
215
+ const scope = binding.scope;
216
+ if (scope === "singleton") {
217
+ // Cached-singleton read; the first materialization escapes so it sees the same ancestors
218
+ // (and therefore the same cycle detection) the interpreted path would have built.
219
+ const escape = this.#compileEscapeThunk(binding.token, ancestors, "single", options);
220
+ const singletonBinding = binding;
221
+ return () => {
222
+ const cached = singletonBinding.instance;
223
+ return cached === NO_INSTANCE ? escape() : cached;
224
+ };
225
+ }
226
+ if (scope === "transient" &&
227
+ binding.kind === "class" &&
228
+ depth < PLAN_DEPTH_LIMIT &&
229
+ !compileStack.has(binding.id)) {
230
+ const inlined = this.#compileClassPlan(binding, compileStack, depth + 1, ancestors);
231
+ if (inlined !== null) {
232
+ return inlined;
233
+ }
234
+ }
235
+ // Anything opaque — a factory, a scoped binding, an activation hook, a class the compiler
236
+ // declined — runs on the runtime path, seeded with this plan's ancestors.
237
+ return this.#compileEscapeThunk(binding.token, ancestors, "single", options);
238
+ }
239
+ // ── The async lane ─────────────────────────────────────────────────────────────────────────────────────────────────
240
+ /**
241
+ * Compiles a transient binding whose graph is statically visible, for the async entry point.
242
+ *
243
+ * @remarks Same gates as the sync lane; the differences are downstream — escapes replay the async
244
+ * dispatch, and a node whose dependencies may yield promises awaits them together, exactly as the
245
+ * interpreted async path does.
246
+ */
247
+ compileAsync(binding) {
248
+ const node = binding.kind === "class"
249
+ ? this.#compileAsyncClassNode(binding, new Set(), 0, [])
250
+ : this.#compileAsyncResolvedNode(binding, new Set(), 0, []);
251
+ if (node === null || node === PLAN_RETRY) {
252
+ return node;
253
+ }
254
+ return node.run;
255
+ }
256
+ #compileAsyncEscapeThunk(token, ancestors, arity = "single", options) {
257
+ const host = this.#host;
258
+ const frames = ancestors.map((ancestor) => host.getResolutionFrame(ancestor));
259
+ return {
260
+ run: () => host.resolveEscapedAsync(token, options, arity, [...frames]),
261
+ promiseShape: "always",
262
+ };
263
+ }
264
+ #compileAsyncClassNode(binding, compileStack, depth, ancestors) {
265
+ if (binding.onActivation !== undefined || this.#host.hasActivationHandlers(binding)) {
266
+ return null;
267
+ }
268
+ const target = binding.target;
269
+ const hasPostConstruct = this.#host.knownPostConstruct(target);
270
+ if (hasPostConstruct === undefined) {
271
+ return PLAN_RETRY;
272
+ }
273
+ if (hasPostConstruct || this.#host.needsActiveContainer(target)) {
274
+ return null;
275
+ }
276
+ const invokable = target;
277
+ const meta = this.#host.getConstructorMetadata(target);
278
+ if (meta === undefined) {
279
+ // Metadata-less classes with required params throw on the runtime path — keep them there.
280
+ return target.length === 0 ? { run: () => new invokable(), promiseShape: "never" } : null;
281
+ }
282
+ const params = meta.params;
283
+ if (params.length === 0) {
284
+ return { run: () => new invokable(), promiseShape: "never" };
285
+ }
286
+ const depThunks = new Array(params.length);
287
+ const depAncestors = [...ancestors, binding];
288
+ compileStack.add(binding.id);
289
+ try {
290
+ for (let index = 0; index < params.length; index += 1) {
291
+ const thunk = this.#compileAsyncInjectionThunk(params[index], compileStack, depth, depAncestors);
292
+ if (thunk === PLAN_RETRY) {
293
+ return thunk;
294
+ }
295
+ depThunks[index] = thunk;
296
+ }
297
+ }
298
+ finally {
299
+ compileStack.delete(binding.id);
300
+ }
301
+ if (allSynchronous(depThunks)) {
302
+ switch (depThunks.length) {
303
+ case 1: {
304
+ const dep0 = depThunks[0].run;
305
+ return { run: () => new invokable(dep0()), promiseShape: "never" };
306
+ }
307
+ case 2: {
308
+ const dep0 = depThunks[0].run;
309
+ const dep1 = depThunks[1].run;
310
+ return { run: () => new invokable(dep0(), dep1()), promiseShape: "never" };
311
+ }
312
+ default:
313
+ return {
314
+ run: () => new invokable(...depThunks.map((thunk) => thunk.run())),
315
+ promiseShape: "never",
316
+ };
317
+ }
318
+ }
319
+ return { run: settleThenApply(depThunks, (values) => new invokable(...values)), promiseShape: "always" };
320
+ }
321
+ #compileAsyncResolvedNode(binding, compileStack, depth, ancestors) {
322
+ if (binding.onActivation !== undefined || this.#host.hasActivationHandlers(binding)) {
323
+ return null;
324
+ }
325
+ const factory = binding.factory;
326
+ const depThunks = new Array(binding.deps.length);
327
+ const depAncestors = [...ancestors, binding];
328
+ compileStack.add(binding.id);
329
+ try {
330
+ for (let index = 0; index < binding.deps.length; index += 1) {
331
+ const thunk = this.#compileAsyncInjectionThunk(binding.deps[index], compileStack, depth, depAncestors);
332
+ if (thunk === PLAN_RETRY) {
333
+ return thunk;
334
+ }
335
+ depThunks[index] = thunk;
336
+ }
337
+ }
338
+ finally {
339
+ compileStack.delete(binding.id);
340
+ }
341
+ // A sync-kind factory may still hand back a promise on this path — the async entry awaits it,
342
+ // so the consumer is told to as well.
343
+ const directShape = binding.kind === "resolved-async" ? "always" : "maybe";
344
+ if (allSynchronous(depThunks)) {
345
+ return { run: () => factory(...depThunks.map((thunk) => thunk.run())), promiseShape: directShape };
346
+ }
347
+ return { run: settleThenApply(depThunks, (values) => factory(...values)), promiseShape: "always" };
348
+ }
349
+ /** Mirrors {@link InstantiationPlanCompiler.#compileInjectionThunk}, escaping through the async dispatch. */
350
+ #compileAsyncInjectionThunk(descriptor, compileStack, depth, ancestors) {
351
+ const token = descriptor.token;
352
+ const options = injectionSlotToResolveOptions(descriptor);
353
+ if (descriptor.multi) {
354
+ return this.#compileAsyncEscapeThunk(token, ancestors, "all", options);
355
+ }
356
+ if (descriptor.optional) {
357
+ return this.#compileAsyncEscapeThunk(token, ancestors, "optional", options);
358
+ }
359
+ if (options !== undefined) {
360
+ if (isNameOnlyOptions(options)) {
361
+ const named = this.#host.lookupPathIndependentNamedEntry(token, options);
362
+ if (named !== null) {
363
+ return this.#compileAsyncDepThunk(named, compileStack, depth, ancestors, options);
364
+ }
365
+ }
366
+ else {
367
+ // The host owns the whole single-tag decision, including whether the options qualify.
368
+ const tagged = this.#host.lookupPathIndependentTaggedEntry?.(token, options);
369
+ if (tagged !== null && tagged !== undefined) {
370
+ return this.#compileAsyncDepThunk(tagged, compileStack, depth, ancestors, options);
371
+ }
372
+ }
373
+ return this.#compileAsyncEscapeThunk(token, ancestors, "single", options);
374
+ }
375
+ const entry = this.#host.lookupDependencyEntry(token);
376
+ if (entry === null) {
377
+ return this.#compileAsyncEscapeThunk(token, ancestors);
378
+ }
379
+ return this.#compileAsyncDepThunk(entry, compileStack, depth, ancestors);
380
+ }
381
+ #compileAsyncDepThunk(entry, compileStack, depth, ancestors, options) {
382
+ const { binding } = entry;
383
+ if (binding.kind === "constant" && binding.onActivation === undefined) {
384
+ if (!this.#host.hasActivationHandlers(binding)) {
385
+ const value = binding.value;
386
+ // The interpreted path funnels every dependency through an await, which unwraps a
387
+ // promise-valued constant — so one compiles as needing that same await.
388
+ return { run: () => value, promiseShape: value instanceof Promise ? "always" : "never" };
389
+ }
390
+ }
391
+ const scope = binding.scope;
392
+ if (scope === "singleton") {
393
+ // Cached-singleton read; the cold materialization escapes with the same criteria.
394
+ const escape = this.#compileAsyncEscapeThunk(binding.token, ancestors, "single", options);
395
+ const singletonBinding = binding;
396
+ return {
397
+ run: () => {
398
+ const cached = singletonBinding.instance;
399
+ return cached === NO_INSTANCE ? escape.run() : cached;
400
+ },
401
+ promiseShape: "maybe",
402
+ };
403
+ }
404
+ if (scope === "transient" && depth < PLAN_DEPTH_LIMIT && !compileStack.has(binding.id)) {
405
+ let inlined = null;
406
+ if (binding.kind === "class") {
407
+ inlined = this.#compileAsyncClassNode(binding, compileStack, depth + 1, ancestors);
408
+ }
409
+ else if (binding.kind === "resolved" || binding.kind === "resolved-async") {
410
+ inlined = this.#compileAsyncResolvedNode(binding, compileStack, depth + 1, ancestors);
411
+ }
412
+ if (inlined !== null) {
413
+ return inlined;
414
+ }
415
+ }
416
+ return this.#compileAsyncEscapeThunk(binding.token, ancestors, "single", options);
417
+ }
418
+ }
419
+ //# sourceMappingURL=instantiation-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instantiation-plan.js","sourceRoot":"","sources":["../../../src/resolution/plan/instantiation-plan.ts"],"names":[],"mappings":"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"}
@@ -1,34 +1,34 @@
1
- import type { Binding } from "#/binding";
2
1
  import type { Container } from "#/container/container";
2
+ import type { Binding } from "#/core/binding";
3
+ import type { BindingRegistry } from "#/core/registry";
4
+ import type { Token } from "#/core/token";
5
+ import type { Constructor, ResolutionFrame, ResolveOptions } from "#/core/types";
6
+ import type { ResolutionDiagnostics } from "#/errors/diagnostics";
7
+ import type { LifecycleManager } from "#/lifecycle/lifecycle-manager";
8
+ import type { ScopeManager } from "#/lifecycle/scope-manager";
3
9
  import type { MetadataReader } from "#/metadata/metadata-types";
4
- import type { BindingRegistry } from "#/registry";
5
- import type { DefaultLookupEntry } from "#/resolution/binding-lookup-cache";
6
- import type { ResolutionDiagnostics } from "#/resolution/diagnostics";
7
- import type { ResolverCallbacks } from "#/resolution/environment";
8
- import type { LifecycleManager } from "#/resolution/lifecycle";
9
- import type { BranchDepth } from "#/resolution/resolution-path";
10
- import type { ScopeManager } from "#/resolution/scope";
11
- import type { Token } from "#/token";
12
- import type { Constructor, ResolutionFrame, ResolveOptions } from "#/types";
10
+ import type { DefaultLookupEntry } from "#/resolution/cache/binding-lookup-cache";
11
+ import type { ResolverCallbacks } from "#/resolution/context";
12
+ import type { BranchDepth } from "#/resolution/path/resolution-path";
13
13
  /**
14
14
  * @since 0.3.16-canary.0
15
15
  */
16
16
  export declare class DependencyResolver implements ResolverCallbacks {
17
17
  #private;
18
18
  /**
19
- * The pair a top-level **sync** resolve reuses instead of minting two arrays per call.
19
+ * The stack a top-level **sync** resolve reuses instead of minting an array per call.
20
20
  *
21
- * @remarks Read directly rather than through an accessor returning both: a shallow resolve is one
22
- * top-level call, so a call and an object literal there are not amortised over anything. Every sync
23
- * lane pops what it pushes, so `rootStack.length === 0` means no resolve holds the pair; async
24
- * appends without popping and mints its own. Keeping the pair stable is also what lets a pooled
25
- * context skip storing pointers it already holds.
21
+ * @remarks Read directly rather than through an accessor: a shallow resolve is one top-level
22
+ * call, so a call there is not amortised over anything. Every sync lane pops what it pushes, so
23
+ * `rootStack.length === 0` means no resolve holds the stack; async appends without popping and
24
+ * mints its own. Keeping it stable is also what lets a pooled context skip re-storing it.
26
25
  */
27
- readonly rootPath: Array<string>;
28
26
  readonly rootStack: Array<ResolutionFrame>;
29
27
  constructor(registry: BindingRegistry, scope: ScopeManager, lifecycle: LifecycleManager, metadataReader: MetadataReader, container: Container, parent: DependencyResolver | undefined);
30
- /** Structural counts for {@link RESOLUTION_DIAGNOSTICS}; see `resolution/diagnostics.ts`. */
31
- describeCaches(): Pick<ResolutionDiagnostics, "compiledPlanCount" | "syncContextPoolSize">;
28
+ /** The reader this resolver was built with, which is the one its container answers with. */
29
+ get metadataReader(): MetadataReader;
30
+ /** Structural counts for the {@link ResolutionDiagnostics} a container reports. */
31
+ describeCaches(): Pick<ResolutionDiagnostics, "compiledPlanCount" | "compiledAsyncPlanCount" | "syncContextPoolSize">;
32
32
  /**
33
33
  * Binding lookup aligned with `resolve` — used by `Container.validate` without instantiating.
34
34
  */
@@ -37,19 +37,19 @@ export declare class DependencyResolver implements ResolverCallbacks {
37
37
  * Mirrors {@link DependencyResolver.resolveAll} candidate selection only (no instantiation).
38
38
  */
39
39
  peekCandidateBindingsForValidate(token: Token<unknown> | Constructor, options: ResolveOptions | undefined): ReadonlyArray<Binding>;
40
- resolveFromContext<const Value>(token: Token<Value> | Constructor<Value>, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame>): Value;
41
- resolve<const Value>(token: Token<Value> | Constructor<Value>, options: ResolveOptions | undefined, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame>): Value;
42
- resolveOptional<const Value>(token: Token<Value> | Constructor<Value>, options: ResolveOptions | undefined, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame>): Value | undefined;
43
- resolveAll<const Value>(token: Token<Value> | Constructor<Value>, options: ResolveOptions | undefined, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame>): Array<Value>;
44
- resolveAsyncFromContext<const Value>(token: Token<Value> | Constructor<Value>, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame>, branchDepth: BranchDepth): Promise<Value>;
45
- resolveAsync<const Value>(token: Token<Value> | Constructor<Value>, options: ResolveOptions | undefined, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame>, branchDepth?: BranchDepth): Promise<Value>;
46
- resolveOptionalAsync<const Value>(token: Token<Value> | Constructor<Value>, options: ResolveOptions | undefined, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame>, branchDepth?: BranchDepth): Promise<Value | undefined>;
47
- resolveAllAsync<const Value>(token: Token<Value> | Constructor<Value>, options: ResolveOptions | undefined, resolutionPath: Array<string>, resolutionStack: Array<ResolutionFrame>, branchDepth?: BranchDepth): Promise<Array<Value>>;
40
+ resolveFromContext<Value>(token: Token<Value> | Constructor<Value>, resolutionStack: Array<ResolutionFrame>): Value;
41
+ resolve<Value>(token: Token<Value> | Constructor<Value>, options: ResolveOptions | undefined, resolutionStack: Array<ResolutionFrame>): Value;
42
+ resolveOptional<Value>(token: Token<Value> | Constructor<Value>, options: ResolveOptions | undefined, resolutionStack: Array<ResolutionFrame>): Value | undefined;
43
+ resolveAll<Value>(token: Token<Value> | Constructor<Value>, options: ResolveOptions | undefined, resolutionStack: Array<ResolutionFrame>): Array<Value>;
44
+ resolveAsyncFromContext<Value>(token: Token<Value> | Constructor<Value>, resolutionStack: Array<ResolutionFrame>, branchDepth: BranchDepth): Promise<Value>;
45
+ resolveAsync<Value>(token: Token<Value> | Constructor<Value>, options: ResolveOptions | undefined, resolutionStack: Array<ResolutionFrame>, branchDepth?: BranchDepth): Promise<Value>;
46
+ resolveOptionalAsync<Value>(token: Token<Value> | Constructor<Value>, options: ResolveOptions | undefined, resolutionStack: Array<ResolutionFrame>, branchDepth?: BranchDepth): Promise<Value | undefined>;
47
+ resolveAllAsync<Value>(token: Token<Value> | Constructor<Value>, options: ResolveOptions | undefined, resolutionStack: Array<ResolutionFrame>, branchDepth?: BranchDepth): Promise<Array<Value>>;
48
48
  /**
49
49
  * Entry for a request a factory makes from inside an open synchronous cascade.
50
50
  *
51
51
  * @remarks A request arriving with no cascade open came out of a continuation, so its ancestors
52
- * are on no call stack — it escapes to the branch lane. See `ARCHITECTURE.md`.
52
+ * are on no call stack — it escapes to the branch lane.
53
53
  */
54
54
  resolveAsyncFromCascade(token: Token<unknown> | Constructor): Promise<unknown>;
55
55
  /** Entry for a resolve the container starts, which opens the cascade rather than joining one. */
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/resolution/resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/resolution/resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAwD,MAAM,gBAAgB,CAAC;AAEpG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,KAAK,EAKV,WAAW,EACX,eAAe,EACf,cAAc,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAclE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,2BAA2B,CAAC;AAE/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAGlF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAO9D,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,mCAAmC,CAAC;AA0BvF;;GAEG;AACH,qBAAa,kBAAmB,YAAW,iBAAiB;;IAI1D;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,eAAe,CAAC,CAAM;IAuBhD,YACE,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,gBAAgB,EAC3B,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,kBAAkB,GAAG,SAAS,EAcvC;IAED,4FAA4F;IAC5F,IAAI,cAAc,IAAI,cAAc,CAEnC;IAED,mFAAmF;IACnF,cAAc,IAAI,IAAI,CACpB,qBAAqB,EACrB,mBAAmB,GAAG,wBAAwB,GAAG,qBAAqB,CACvE,CAkBA;IA0GD;;OAEG;IACH,sBAAsB,CACpB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,EACnC,OAAO,EAAE,cAAc,GAAG,SAAS,GAClC,kBAAkB,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAEpD;IAED;;OAEG;IACH,gCAAgC,CAC9B,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,EACnC,OAAO,EAAE,cAAc,GAAG,SAAS,GAClC,aAAa,CAAC,OAAO,CAAC,CAExB;IAID,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,GAAG,KAAK,CAYlH;IA6MD,OAAO,CAAC,KAAK,EACX,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EACxC,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,GACtC,KAAK,CAwCP;IAoMD,eAAe,CAAC,KAAK,EACnB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EACxC,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,GACtC,KAAK,GAAG,SAAS,CAenB;IAED,UAAU,CAAC,KAAK,EACd,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EACxC,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,GACtC,KAAK,CAAC,KAAK,CAAC,CAOd;IAuBD,uBAAuB,CAAC,KAAK,EAC3B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EACxC,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,EACvC,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,KAAK,CAAC,CAwBhB;IAmCK,YAAY,CAAC,KAAK,EACtB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EACxC,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,EACvC,WAAW,GAAE,WAA4B,GACxC,OAAO,CAAC,KAAK,CAAC,CAOhB;IAiPK,oBAAoB,CAAC,KAAK,EAC9B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EACxC,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,EACvC,WAAW,GAAE,WAA4B,GACxC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAc5B;IAEK,eAAe,CAAC,KAAK,EACzB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EACxC,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,EACvC,WAAW,GAAE,WAA4B,GACxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAYvB;IA+PD;;;;;OAKG;IACH,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAK7E;IAED,iGAAiG;IACjG,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAE1E;CA6MF"}