@codefast/di 1.0.0-canary.6 → 1.0.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 (175) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +67 -499
  3. package/dist/binding-scope.d.ts +10 -0
  4. package/dist/binding-scope.d.ts.map +1 -0
  5. package/dist/binding-scope.js +24 -0
  6. package/dist/binding-scope.js.map +1 -0
  7. package/dist/binding-select.d.ts +16 -0
  8. package/dist/binding-select.d.ts.map +1 -0
  9. package/dist/binding-select.js +130 -0
  10. package/dist/binding-select.js.map +1 -0
  11. package/dist/binding.d.ts +194 -0
  12. package/dist/binding.d.ts.map +1 -0
  13. package/dist/binding.js +46 -0
  14. package/dist/binding.js.map +1 -0
  15. package/dist/constraints.d.ts +51 -0
  16. package/dist/constraints.d.ts.map +1 -0
  17. package/dist/constraints.js +88 -0
  18. package/dist/constraints.js.map +1 -0
  19. package/dist/{constructor-type.d.mts → constructor-type.d.ts} +3 -5
  20. package/dist/constructor-type.d.ts.map +1 -0
  21. package/dist/constructor-type.js +2 -0
  22. package/dist/constructor-type.js.map +1 -0
  23. package/dist/container.d.ts +58 -0
  24. package/dist/container.d.ts.map +1 -0
  25. package/dist/container.js +853 -0
  26. package/dist/container.js.map +1 -0
  27. package/dist/decorators/inject.d.ts +46 -0
  28. package/dist/decorators/inject.d.ts.map +1 -0
  29. package/dist/decorators/inject.js +145 -0
  30. package/dist/decorators/inject.js.map +1 -0
  31. package/dist/decorators/injectable.d.ts +29 -0
  32. package/dist/decorators/injectable.d.ts.map +1 -0
  33. package/dist/decorators/injectable.js +53 -0
  34. package/dist/decorators/injectable.js.map +1 -0
  35. package/dist/decorators/lifecycle-decorators.d.ts +9 -0
  36. package/dist/decorators/lifecycle-decorators.d.ts.map +1 -0
  37. package/dist/decorators/lifecycle-decorators.js +40 -0
  38. package/dist/decorators/lifecycle-decorators.js.map +1 -0
  39. package/dist/dependency-graph.d.ts +40 -0
  40. package/dist/dependency-graph.d.ts.map +1 -0
  41. package/dist/dependency-graph.js +66 -0
  42. package/dist/dependency-graph.js.map +1 -0
  43. package/dist/environment.d.ts +51 -0
  44. package/dist/environment.d.ts.map +1 -0
  45. package/dist/environment.js +100 -0
  46. package/dist/environment.js.map +1 -0
  47. package/dist/errors.d.ts +150 -0
  48. package/dist/errors.d.ts.map +1 -0
  49. package/dist/errors.js +197 -0
  50. package/dist/errors.js.map +1 -0
  51. package/dist/graph-adapters/cytoscape.d.ts +33 -0
  52. package/dist/graph-adapters/cytoscape.d.ts.map +1 -0
  53. package/dist/graph-adapters/cytoscape.js +30 -0
  54. package/dist/graph-adapters/cytoscape.js.map +1 -0
  55. package/dist/graph-adapters/dot.d.ts +6 -0
  56. package/dist/graph-adapters/dot.d.ts.map +1 -0
  57. package/dist/graph-adapters/dot.js +18 -0
  58. package/dist/graph-adapters/dot.js.map +1 -0
  59. package/dist/graph-adapters/reactflow.d.ts +38 -0
  60. package/dist/graph-adapters/reactflow.d.ts.map +1 -0
  61. package/dist/graph-adapters/reactflow.js +23 -0
  62. package/dist/graph-adapters/reactflow.js.map +1 -0
  63. package/dist/index.d.ts +25 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +21 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/inspector.d.ts +44 -0
  68. package/dist/inspector.d.ts.map +1 -0
  69. package/dist/inspector.js +82 -0
  70. package/dist/inspector.js.map +1 -0
  71. package/dist/lifecycle.d.ts +21 -0
  72. package/dist/lifecycle.d.ts.map +1 -0
  73. package/dist/lifecycle.js +174 -0
  74. package/dist/lifecycle.js.map +1 -0
  75. package/dist/metadata/{metadata-keys.d.mts → metadata-keys.d.ts} +5 -7
  76. package/dist/metadata/metadata-keys.d.ts.map +1 -0
  77. package/dist/metadata/metadata-keys.js +25 -0
  78. package/dist/metadata/metadata-keys.js.map +1 -0
  79. package/dist/metadata/metadata-reader-token.d.ts +7 -0
  80. package/dist/metadata/metadata-reader-token.d.ts.map +1 -0
  81. package/dist/metadata/metadata-reader-token.js +6 -0
  82. package/dist/metadata/metadata-reader-token.js.map +1 -0
  83. package/dist/metadata/metadata-types.d.ts +48 -0
  84. package/dist/metadata/metadata-types.d.ts.map +1 -0
  85. package/dist/metadata/metadata-types.js +2 -0
  86. package/dist/metadata/metadata-types.js.map +1 -0
  87. package/dist/metadata/symbol-metadata-reader.d.ts +20 -0
  88. package/dist/metadata/symbol-metadata-reader.d.ts.map +1 -0
  89. package/dist/metadata/symbol-metadata-reader.js +34 -0
  90. package/dist/metadata/symbol-metadata-reader.js.map +1 -0
  91. package/dist/module.d.ts +60 -0
  92. package/dist/module.d.ts.map +1 -0
  93. package/dist/module.js +47 -0
  94. package/dist/module.js.map +1 -0
  95. package/dist/registry.d.ts +41 -0
  96. package/dist/registry.d.ts.map +1 -0
  97. package/dist/registry.js +208 -0
  98. package/dist/registry.js.map +1 -0
  99. package/dist/resolve-options.d.ts +19 -0
  100. package/dist/resolve-options.d.ts.map +1 -0
  101. package/dist/resolve-options.js +32 -0
  102. package/dist/resolve-options.js.map +1 -0
  103. package/dist/resolver.d.ts +90 -0
  104. package/dist/resolver.d.ts.map +1 -0
  105. package/dist/resolver.js +1208 -0
  106. package/dist/resolver.js.map +1 -0
  107. package/dist/scope.d.ts +25 -0
  108. package/dist/scope.d.ts.map +1 -0
  109. package/dist/scope.js +61 -0
  110. package/dist/scope.js.map +1 -0
  111. package/dist/token.d.ts +23 -0
  112. package/dist/token.d.ts.map +1 -0
  113. package/dist/token.js +25 -0
  114. package/dist/token.js.map +1 -0
  115. package/dist/types.d.ts +90 -0
  116. package/dist/types.d.ts.map +1 -0
  117. package/dist/types.js +2 -0
  118. package/dist/types.js.map +1 -0
  119. package/package.json +89 -80
  120. package/dist/binding-scope.d.mts +0 -13
  121. package/dist/binding-scope.mjs +0 -21
  122. package/dist/binding-select.d.mts +0 -19
  123. package/dist/binding-select.mjs +0 -72
  124. package/dist/binding.d.mts +0 -191
  125. package/dist/binding.mjs +0 -36
  126. package/dist/constraints.d.mts +0 -55
  127. package/dist/constraints.mjs +0 -87
  128. package/dist/constructor-type.mjs +0 -1
  129. package/dist/container.d.mts +0 -62
  130. package/dist/container.mjs +0 -741
  131. package/dist/decorators/inject.d.mts +0 -49
  132. package/dist/decorators/inject.mjs +0 -136
  133. package/dist/decorators/injectable.d.mts +0 -32
  134. package/dist/decorators/injectable.mjs +0 -57
  135. package/dist/decorators/lifecycle-decorators.d.mts +0 -11
  136. package/dist/decorators/lifecycle-decorators.mjs +0 -38
  137. package/dist/dependency-graph.d.mts +0 -43
  138. package/dist/dependency-graph.mjs +0 -63
  139. package/dist/environment.d.mts +0 -55
  140. package/dist/environment.mjs +0 -98
  141. package/dist/errors.d.mts +0 -153
  142. package/dist/errors.mjs +0 -197
  143. package/dist/graph-adapters/cytoscape.d.mts +0 -36
  144. package/dist/graph-adapters/cytoscape.mjs +0 -26
  145. package/dist/graph-adapters/dot.d.mts +0 -9
  146. package/dist/graph-adapters/dot.mjs +0 -20
  147. package/dist/graph-adapters/reactflow.d.mts +0 -41
  148. package/dist/graph-adapters/reactflow.mjs +0 -29
  149. package/dist/index.d.mts +0 -18
  150. package/dist/index.mjs +0 -12
  151. package/dist/inspector.d.mts +0 -48
  152. package/dist/inspector.mjs +0 -71
  153. package/dist/lifecycle.d.mts +0 -25
  154. package/dist/lifecycle.mjs +0 -118
  155. package/dist/metadata/metadata-keys.mjs +0 -27
  156. package/dist/metadata/metadata-reader-token.d.mts +0 -10
  157. package/dist/metadata/metadata-reader-token.mjs +0 -8
  158. package/dist/metadata/metadata-types.d.mts +0 -51
  159. package/dist/metadata/metadata-types.mjs +0 -1
  160. package/dist/metadata/symbol-metadata-reader.d.mts +0 -23
  161. package/dist/metadata/symbol-metadata-reader.mjs +0 -29
  162. package/dist/module.d.mts +0 -62
  163. package/dist/module.mjs +0 -42
  164. package/dist/registry.d.mts +0 -45
  165. package/dist/registry.mjs +0 -163
  166. package/dist/resolve-options.d.mts +0 -22
  167. package/dist/resolve-options.mjs +0 -28
  168. package/dist/resolver.d.mts +0 -94
  169. package/dist/resolver.mjs +0 -767
  170. package/dist/scope.d.mts +0 -28
  171. package/dist/scope.mjs +0 -58
  172. package/dist/token.d.mts +0 -25
  173. package/dist/token.mjs +0 -22
  174. package/dist/types.d.mts +0 -92
  175. package/dist/types.mjs +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codefast/di",
3
- "version": "1.0.0-canary.6",
3
+ "version": "1.0.0-canary.7",
4
4
  "description": "Lightweight dependency injection primitives for Codefast",
5
5
  "keywords": [
6
6
  "codefast",
@@ -25,9 +25,9 @@
25
25
  ],
26
26
  "type": "module",
27
27
  "sideEffects": false,
28
- "main": "./dist/index.mjs",
29
- "module": "./dist/index.mjs",
30
- "types": "./dist/index.d.mts",
28
+ "main": "./dist/index.js",
29
+ "module": "./dist/index.js",
30
+ "types": "./dist/index.d.ts",
31
31
  "imports": {
32
32
  "#/tests/*": [
33
33
  "./tests/*",
@@ -36,159 +36,169 @@
36
36
  "./tests/*/index.ts",
37
37
  "./tests/*/index.tsx"
38
38
  ],
39
- "#/*": [
40
- "./src/*",
41
- "./src/*.ts",
42
- "./src/*.tsx",
43
- "./src/*/index.ts",
44
- "./src/*/index.tsx"
45
- ]
39
+ "#/*": {
40
+ "source": [
41
+ "./src/*",
42
+ "./src/*.ts",
43
+ "./src/*.tsx",
44
+ "./src/*/index.ts",
45
+ "./src/*/index.tsx"
46
+ ],
47
+ "types": [
48
+ "./dist/*.d.ts",
49
+ "./dist/*/index.d.ts"
50
+ ],
51
+ "default": [
52
+ "./dist/*.js",
53
+ "./dist/*/index.js"
54
+ ]
55
+ }
46
56
  },
47
57
  "exports": {
48
58
  ".": {
49
59
  "source": "./src/index.ts",
50
- "types": "./dist/index.d.mts",
51
- "import": "./dist/index.mjs"
60
+ "types": "./dist/index.d.ts",
61
+ "import": "./dist/index.js"
52
62
  },
53
63
  "./binding": {
54
64
  "source": "./src/binding.ts",
55
- "types": "./dist/binding.d.mts",
56
- "import": "./dist/binding.mjs"
65
+ "types": "./dist/binding.d.ts",
66
+ "import": "./dist/binding.js"
57
67
  },
58
68
  "./binding-scope": {
59
69
  "source": "./src/binding-scope.ts",
60
- "types": "./dist/binding-scope.d.mts",
61
- "import": "./dist/binding-scope.mjs"
70
+ "types": "./dist/binding-scope.d.ts",
71
+ "import": "./dist/binding-scope.js"
62
72
  },
63
73
  "./binding-select": {
64
74
  "source": "./src/binding-select.ts",
65
- "types": "./dist/binding-select.d.mts",
66
- "import": "./dist/binding-select.mjs"
75
+ "types": "./dist/binding-select.d.ts",
76
+ "import": "./dist/binding-select.js"
67
77
  },
68
78
  "./constraints": {
69
79
  "source": "./src/constraints.ts",
70
- "types": "./dist/constraints.d.mts",
71
- "import": "./dist/constraints.mjs"
80
+ "types": "./dist/constraints.d.ts",
81
+ "import": "./dist/constraints.js"
72
82
  },
73
83
  "./constructor-type": {
74
84
  "source": "./src/constructor-type.ts",
75
- "types": "./dist/constructor-type.d.mts",
76
- "import": "./dist/constructor-type.mjs"
85
+ "types": "./dist/constructor-type.d.ts",
86
+ "import": "./dist/constructor-type.js"
77
87
  },
78
88
  "./container": {
79
89
  "source": "./src/container.ts",
80
- "types": "./dist/container.d.mts",
81
- "import": "./dist/container.mjs"
90
+ "types": "./dist/container.d.ts",
91
+ "import": "./dist/container.js"
82
92
  },
83
93
  "./decorators/inject": {
84
94
  "source": "./src/decorators/inject.ts",
85
- "types": "./dist/decorators/inject.d.mts",
86
- "import": "./dist/decorators/inject.mjs"
95
+ "types": "./dist/decorators/inject.d.ts",
96
+ "import": "./dist/decorators/inject.js"
87
97
  },
88
98
  "./decorators/injectable": {
89
99
  "source": "./src/decorators/injectable.ts",
90
- "types": "./dist/decorators/injectable.d.mts",
91
- "import": "./dist/decorators/injectable.mjs"
100
+ "types": "./dist/decorators/injectable.d.ts",
101
+ "import": "./dist/decorators/injectable.js"
92
102
  },
93
103
  "./decorators/lifecycle-decorators": {
94
104
  "source": "./src/decorators/lifecycle-decorators.ts",
95
- "types": "./dist/decorators/lifecycle-decorators.d.mts",
96
- "import": "./dist/decorators/lifecycle-decorators.mjs"
105
+ "types": "./dist/decorators/lifecycle-decorators.d.ts",
106
+ "import": "./dist/decorators/lifecycle-decorators.js"
97
107
  },
98
108
  "./dependency-graph": {
99
109
  "source": "./src/dependency-graph.ts",
100
- "types": "./dist/dependency-graph.d.mts",
101
- "import": "./dist/dependency-graph.mjs"
110
+ "types": "./dist/dependency-graph.d.ts",
111
+ "import": "./dist/dependency-graph.js"
102
112
  },
103
113
  "./environment": {
104
114
  "source": "./src/environment.ts",
105
- "types": "./dist/environment.d.mts",
106
- "import": "./dist/environment.mjs"
115
+ "types": "./dist/environment.d.ts",
116
+ "import": "./dist/environment.js"
107
117
  },
108
118
  "./errors": {
109
119
  "source": "./src/errors.ts",
110
- "types": "./dist/errors.d.mts",
111
- "import": "./dist/errors.mjs"
120
+ "types": "./dist/errors.d.ts",
121
+ "import": "./dist/errors.js"
112
122
  },
113
123
  "./graph-adapters/cytoscape": {
114
124
  "source": "./src/graph-adapters/cytoscape.ts",
115
- "types": "./dist/graph-adapters/cytoscape.d.mts",
116
- "import": "./dist/graph-adapters/cytoscape.mjs"
125
+ "types": "./dist/graph-adapters/cytoscape.d.ts",
126
+ "import": "./dist/graph-adapters/cytoscape.js"
117
127
  },
118
128
  "./graph-adapters/dot": {
119
129
  "source": "./src/graph-adapters/dot.ts",
120
- "types": "./dist/graph-adapters/dot.d.mts",
121
- "import": "./dist/graph-adapters/dot.mjs"
130
+ "types": "./dist/graph-adapters/dot.d.ts",
131
+ "import": "./dist/graph-adapters/dot.js"
122
132
  },
123
133
  "./graph-adapters/reactflow": {
124
134
  "source": "./src/graph-adapters/reactflow.ts",
125
- "types": "./dist/graph-adapters/reactflow.d.mts",
126
- "import": "./dist/graph-adapters/reactflow.mjs"
135
+ "types": "./dist/graph-adapters/reactflow.d.ts",
136
+ "import": "./dist/graph-adapters/reactflow.js"
127
137
  },
128
138
  "./inspector": {
129
139
  "source": "./src/inspector.ts",
130
- "types": "./dist/inspector.d.mts",
131
- "import": "./dist/inspector.mjs"
140
+ "types": "./dist/inspector.d.ts",
141
+ "import": "./dist/inspector.js"
132
142
  },
133
143
  "./lifecycle": {
134
144
  "source": "./src/lifecycle.ts",
135
- "types": "./dist/lifecycle.d.mts",
136
- "import": "./dist/lifecycle.mjs"
145
+ "types": "./dist/lifecycle.d.ts",
146
+ "import": "./dist/lifecycle.js"
137
147
  },
138
148
  "./metadata/metadata-keys": {
139
149
  "source": "./src/metadata/metadata-keys.ts",
140
- "types": "./dist/metadata/metadata-keys.d.mts",
141
- "import": "./dist/metadata/metadata-keys.mjs"
150
+ "types": "./dist/metadata/metadata-keys.d.ts",
151
+ "import": "./dist/metadata/metadata-keys.js"
142
152
  },
143
153
  "./metadata/metadata-reader-token": {
144
154
  "source": "./src/metadata/metadata-reader-token.ts",
145
- "types": "./dist/metadata/metadata-reader-token.d.mts",
146
- "import": "./dist/metadata/metadata-reader-token.mjs"
155
+ "types": "./dist/metadata/metadata-reader-token.d.ts",
156
+ "import": "./dist/metadata/metadata-reader-token.js"
147
157
  },
148
158
  "./metadata/metadata-types": {
149
159
  "source": "./src/metadata/metadata-types.ts",
150
- "types": "./dist/metadata/metadata-types.d.mts",
151
- "import": "./dist/metadata/metadata-types.mjs"
160
+ "types": "./dist/metadata/metadata-types.d.ts",
161
+ "import": "./dist/metadata/metadata-types.js"
152
162
  },
153
163
  "./metadata/symbol-metadata-reader": {
154
164
  "source": "./src/metadata/symbol-metadata-reader.ts",
155
- "types": "./dist/metadata/symbol-metadata-reader.d.mts",
156
- "import": "./dist/metadata/symbol-metadata-reader.mjs"
165
+ "types": "./dist/metadata/symbol-metadata-reader.d.ts",
166
+ "import": "./dist/metadata/symbol-metadata-reader.js"
157
167
  },
158
168
  "./module": {
159
169
  "source": "./src/module.ts",
160
- "types": "./dist/module.d.mts",
161
- "import": "./dist/module.mjs"
170
+ "types": "./dist/module.d.ts",
171
+ "import": "./dist/module.js"
162
172
  },
163
173
  "./registry": {
164
174
  "source": "./src/registry.ts",
165
- "types": "./dist/registry.d.mts",
166
- "import": "./dist/registry.mjs"
175
+ "types": "./dist/registry.d.ts",
176
+ "import": "./dist/registry.js"
167
177
  },
168
178
  "./resolve-options": {
169
179
  "source": "./src/resolve-options.ts",
170
- "types": "./dist/resolve-options.d.mts",
171
- "import": "./dist/resolve-options.mjs"
180
+ "types": "./dist/resolve-options.d.ts",
181
+ "import": "./dist/resolve-options.js"
172
182
  },
173
183
  "./resolver": {
174
184
  "source": "./src/resolver.ts",
175
- "types": "./dist/resolver.d.mts",
176
- "import": "./dist/resolver.mjs"
185
+ "types": "./dist/resolver.d.ts",
186
+ "import": "./dist/resolver.js"
177
187
  },
178
188
  "./scope": {
179
189
  "source": "./src/scope.ts",
180
- "types": "./dist/scope.d.mts",
181
- "import": "./dist/scope.mjs"
190
+ "types": "./dist/scope.d.ts",
191
+ "import": "./dist/scope.js"
182
192
  },
183
193
  "./token": {
184
194
  "source": "./src/token.ts",
185
- "types": "./dist/token.d.mts",
186
- "import": "./dist/token.mjs"
195
+ "types": "./dist/token.d.ts",
196
+ "import": "./dist/token.js"
187
197
  },
188
198
  "./types": {
189
199
  "source": "./src/types.ts",
190
- "types": "./dist/types.d.mts",
191
- "import": "./dist/types.mjs"
200
+ "types": "./dist/types.d.ts",
201
+ "import": "./dist/types.js"
192
202
  },
193
203
  "./package.json": "./package.json"
194
204
  },
@@ -199,22 +209,20 @@
199
209
  "@babel/core": "^8.0.1",
200
210
  "@babel/plugin-proposal-decorators": "8.0.2",
201
211
  "@rolldown/plugin-babel": "^0.2.3",
202
- "@types/node": "^26.1.0",
203
- "@typescript/native-preview": "7.0.0-dev.20260704.1",
204
- "@vitest/coverage-v8": "^4.1.9",
212
+ "@types/node": "^26.1.1",
213
+ "@vitest/coverage-v8": "^4.1.10",
205
214
  "expect-type": "^1.4.0",
206
- "tsdown": "^0.22.3",
207
- "tsx": "^4.23.0",
208
- "typescript": "^6.0.3",
209
- "vitest": "^4.1.9",
210
- "@codefast/typescript-config": "1.0.0-canary.6"
215
+ "tsx": "^4.23.1",
216
+ "typescript": "^7.0.2",
217
+ "vitest": "^4.1.10",
218
+ "@codefast/typescript-config": "1.0.0-canary.7"
211
219
  },
212
220
  "engines": {
213
221
  "node": ">=26.0.0"
214
222
  },
215
223
  "scripts": {
216
- "build": "tsdown",
217
- "check-types": "tsgo --noEmit",
224
+ "build": "rm -rf dist && tsc -p tsconfig.build.json",
225
+ "check-types": "tsc --noEmit",
218
226
  "clean": "rm -rf dist",
219
227
  "examples": "for file in examples/*/*.ts; do echo \"=== Running $file ===\"; node --import tsx/esm \"$file\"; echo \"\n\" || exit 1; done",
220
228
  "test": "vitest run",
@@ -223,6 +231,7 @@
223
231
  "test:integration": "vitest run tests/integration",
224
232
  "test:type": "vitest run tests/types",
225
233
  "test:unit": "vitest run tests/unit",
226
- "test:watch": "vitest"
234
+ "test:watch": "vitest",
235
+ "dev": "tsc -p tsconfig.build.json --watch --preserveWatchOutput"
227
236
  }
228
237
  }
@@ -1,13 +0,0 @@
1
- import { BindingScope } from "./types.mjs";
2
- import { Binding } from "./binding.mjs";
3
-
4
- //#region src/binding-scope.d.ts
5
- /**
6
- * Runtime scope used for validation and introspection. Alias bindings are treated as transient
7
- * because they defer scope to the aliased target at resolve time.
8
- *
9
- * @since 0.3.16-canary.0
10
- */
11
- declare function effectiveBindingScope(binding: Binding): BindingScope;
12
- //#endregion
13
- export { effectiveBindingScope };
@@ -1,21 +0,0 @@
1
- //#region src/binding-scope.ts
2
- /**
3
- * Runtime scope used for validation and introspection. Alias bindings are treated as transient
4
- * because they defer scope to the aliased target at resolve time.
5
- *
6
- * @since 0.3.16-canary.0
7
- */
8
- function effectiveBindingScope(binding) {
9
- switch (binding.kind) {
10
- case "alias": return "transient";
11
- case "class":
12
- case "constant":
13
- case "dynamic":
14
- case "dynamic-async":
15
- case "resolved":
16
- case "resolved-async": return binding.scope;
17
- default: return binding;
18
- }
19
- }
20
- //#endregion
21
- export { effectiveBindingScope };
@@ -1,19 +0,0 @@
1
- import { ConstraintContext, ResolveOptions } from "./types.mjs";
2
- import { Binding } from "./binding.mjs";
3
-
4
- //#region src/binding-select.d.ts
5
- /**
6
- * Select a single candidate from a list of bindings using slot matching + predicates.
7
- * Returns undefined if no match, throws AmbiguousBindingError if multiple match.
8
- *
9
- * @since 0.3.16-canary.0
10
- */
11
- declare function selectBinding(bindings: ReadonlyArray<Binding>, options: ResolveOptions | undefined, ctx: ConstraintContext, tokenDisplayName: string): Binding | undefined;
12
- /**
13
- * Select all candidates matching options + predicates.
14
- *
15
- * @since 0.3.16-canary.0
16
- */
17
- declare function selectAllBindings(bindings: ReadonlyArray<Binding>, options: ResolveOptions | undefined, ctx: ConstraintContext): Array<Binding>;
18
- //#endregion
19
- export { selectAllBindings, selectBinding };
@@ -1,72 +0,0 @@
1
- import { AmbiguousBindingError } from "./errors.mjs";
2
- //#region src/binding-select.ts
3
- /**
4
- * Select a single candidate from a list of bindings using slot matching + predicates.
5
- * Returns undefined if no match, throws AmbiguousBindingError if multiple match.
6
- *
7
- * @since 0.3.16-canary.0
8
- */
9
- function selectBinding(bindings, options, ctx, tokenDisplayName) {
10
- const candidates = filterBindings(bindings, options, ctx);
11
- if (candidates.length === 0) return;
12
- if (candidates.length === 1) return candidates[0];
13
- throw new AmbiguousBindingError(tokenDisplayName, candidates.map((c) => c.id));
14
- }
15
- /**
16
- * Select all candidates matching options + predicates.
17
- *
18
- * @since 0.3.16-canary.0
19
- */
20
- function selectAllBindings(bindings, options, ctx) {
21
- return filterBindings(bindings, options, ctx, "all");
22
- }
23
- function filterBindings(bindings, options, ctx, selectionMode = "single") {
24
- if (options === void 0) {
25
- const resultWithoutOptions = [];
26
- if (selectionMode === "all") {
27
- for (const binding of bindings) if (matchesPredicate(binding, ctx)) resultWithoutOptions.push(binding);
28
- } else for (const binding of bindings) {
29
- const slot = binding.slot;
30
- if (slot.name === void 0 && slot.tags.length === 0 && matchesPredicate(binding, ctx)) resultWithoutOptions.push(binding);
31
- }
32
- return resultWithoutOptions;
33
- }
34
- const result = [];
35
- for (const binding of bindings) if ((selectionMode === "all" ? matchesSlotForResolveAll(binding, options) : matchesSlot(binding, options)) && matchesPredicate(binding, ctx)) result.push(binding);
36
- return result;
37
- }
38
- function matchesSlotForResolveAll(binding, options) {
39
- if (!(options !== void 0 && (options.name !== void 0 || options.tags !== void 0 && options.tags.length > 0 || options.tag !== void 0))) return true;
40
- return matchesSlot(binding, options);
41
- }
42
- function matchesSlot(binding, options) {
43
- const slot = binding.slot;
44
- const requestedName = options?.name;
45
- const requestedTags = options?.tags;
46
- const singleRequestedTag = options?.tag;
47
- const hasRequestedTags = (requestedTags?.length ?? 0) > 0 || singleRequestedTag !== void 0;
48
- if (slot.name !== void 0) {
49
- if (requestedName === void 0) return false;
50
- if (slot.name !== requestedName) return false;
51
- } else if (requestedName !== void 0) return false;
52
- if (slot.tags.length > 0) {
53
- if (!hasRequestedTags) return false;
54
- for (const [tagKey, tagValue] of slot.tags) if (!matchesRequestedTag(tagKey, tagValue, requestedTags, singleRequestedTag)) return false;
55
- } else if (hasRequestedTags) return false;
56
- return true;
57
- }
58
- function matchesRequestedTag(tagKey, tagValue, requestedTags, singleRequestedTag) {
59
- if (singleRequestedTag !== void 0 && singleRequestedTag[0] === tagKey && Object.is(singleRequestedTag[1], tagValue)) return true;
60
- if (requestedTags === void 0 || requestedTags.length === 0) return false;
61
- for (let index = 0; index < requestedTags.length; index += 1) {
62
- const requestedTag = requestedTags[index];
63
- if (requestedTag[0] === tagKey && Object.is(requestedTag[1], tagValue)) return true;
64
- }
65
- return false;
66
- }
67
- function matchesPredicate(binding, ctx) {
68
- if (binding.predicate === void 0) return true;
69
- return binding.predicate(ctx);
70
- }
71
- //#endregion
72
- export { selectAllBindings, selectBinding };
@@ -1,191 +0,0 @@
1
- import { Constructor } from "./constructor-type.mjs";
2
- import { Token } from "./token.mjs";
3
- import { ActivationHandler, BindingIdentifier, BindingScope, BindingTag, ConstraintContext, DeactivationHandler, DependencyKey, ResolutionContext, TokenValue } from "./types.mjs";
4
- import { InjectionDescriptor } from "./decorators/inject.mjs";
5
-
6
- //#region src/binding.d.ts
7
- /**
8
- * @since 0.3.16-canary.0
9
- */
10
- interface BindingSlot {
11
- readonly name: string | undefined;
12
- readonly tags: ReadonlyArray<BindingTag>;
13
- }
14
- /**
15
- * @since 0.3.16-canary.0
16
- */
17
- declare function bindingSlotEquals(left: BindingSlot, right: BindingSlot): boolean;
18
- /**
19
- * @since 0.3.16-canary.0
20
- */
21
- declare const DEFAULT_BINDING_SLOT: {
22
- name: undefined;
23
- tags: never[];
24
- };
25
- /**
26
- * @since 0.3.16-canary.0
27
- */
28
- declare function bindingSlotToString(slot: BindingSlot): string;
29
- interface BindingBase<Value> {
30
- readonly id: BindingIdentifier;
31
- readonly token: Token<Value> | Constructor<Value>;
32
- readonly slot: BindingSlot;
33
- readonly predicate?: (ctx: ConstraintContext) => boolean;
34
- }
35
- type BindingBaseKeys = keyof BindingBase<unknown>;
36
- /**
37
- * @since 0.3.16-canary.0
38
- */
39
- interface ClassBinding<Value> extends BindingBase<Value> {
40
- readonly kind: "class";
41
- readonly target: Constructor<Value>;
42
- readonly scope: BindingScope;
43
- readonly onActivation?: ActivationHandler<Value>;
44
- readonly onDeactivation?: DeactivationHandler<Value>;
45
- }
46
- /**
47
- * @since 0.3.16-canary.0
48
- */
49
- interface DynamicBinding<Value> extends BindingBase<Value> {
50
- readonly kind: "dynamic";
51
- readonly factory: (ctx: ResolutionContext) => Value;
52
- readonly scope: BindingScope;
53
- readonly onActivation?: ActivationHandler<Value>;
54
- readonly onDeactivation?: DeactivationHandler<Value>;
55
- }
56
- /**
57
- * @since 0.3.16-canary.0
58
- */
59
- interface DynamicAsyncBinding<Value> extends BindingBase<Value> {
60
- readonly kind: "dynamic-async";
61
- readonly factory: (ctx: ResolutionContext) => Promise<Value>;
62
- readonly scope: BindingScope;
63
- readonly onActivation?: ActivationHandler<Value>;
64
- readonly onDeactivation?: DeactivationHandler<Value>;
65
- }
66
- /**
67
- * @since 0.3.16-canary.0
68
- */
69
- interface ResolvedBinding<Value> extends BindingBase<Value> {
70
- readonly kind: "resolved";
71
- readonly factory: (...args: Array<unknown>) => Value;
72
- readonly deps: ReadonlyArray<InjectionDescriptor>;
73
- readonly scope: BindingScope;
74
- readonly onActivation?: ActivationHandler<Value>;
75
- readonly onDeactivation?: DeactivationHandler<Value>;
76
- }
77
- /**
78
- * @since 0.3.16-canary.0
79
- */
80
- interface ResolvedAsyncBinding<Value> extends BindingBase<Value> {
81
- readonly kind: "resolved-async";
82
- readonly factory: (...args: Array<unknown>) => Promise<Value>;
83
- readonly deps: ReadonlyArray<InjectionDescriptor>;
84
- readonly scope: BindingScope;
85
- readonly onActivation?: ActivationHandler<Value>;
86
- readonly onDeactivation?: DeactivationHandler<Value>;
87
- }
88
- /**
89
- * @since 0.3.16-canary.0
90
- */
91
- interface ConstantBinding<Value> extends BindingBase<Value> {
92
- readonly kind: "constant";
93
- readonly value: Value;
94
- readonly scope: "singleton";
95
- readonly onActivation?: ActivationHandler<Value>;
96
- readonly onDeactivation?: DeactivationHandler<Value>;
97
- }
98
- /**
99
- * @since 0.3.16-canary.0
100
- */
101
- interface AliasBinding<Value> extends BindingBase<Value> {
102
- readonly kind: "alias";
103
- readonly target: Token<Value> | Constructor<Value>;
104
- }
105
- /**
106
- * @since 0.3.16-canary.0
107
- */
108
- type Binding<Value = unknown> = ClassBinding<Value> | DynamicBinding<Value> | DynamicAsyncBinding<Value> | ResolvedBinding<Value> | ResolvedAsyncBinding<Value> | ConstantBinding<Value> | AliasBinding<Value>;
109
- /**
110
- * Builder-only payload before `id`, `token`, `slot`, and `predicate` are applied.
111
- *
112
- * @since 0.3.16-canary.0
113
- */
114
- 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>;
115
- /**
116
- * @since 0.3.16-canary.0
117
- */
118
- declare function generateBindingId(): BindingIdentifier;
119
- /**
120
- * Common slot-constraint + id methods shared by all concrete binding builders.
121
- *
122
- * @since 0.3.16-canary.0
123
- */
124
- interface SlotConstrainedBuilder {
125
- when(predicate: (ctx: ConstraintContext) => boolean): this;
126
- whenNamed(name: string): this;
127
- whenTagged(tag: string, value: unknown): this;
128
- whenDefault(): this;
129
- id(): BindingIdentifier;
130
- }
131
- /**
132
- * @since 0.3.16-canary.0
133
- */
134
- interface BindToBuilder<Value> {
135
- to(type: Constructor<Value>): BindingBuilder<Value>;
136
- toSelf(): BindingBuilder<Value>;
137
- toConstantValue(value: Value): ConstantBindingBuilder<Value>;
138
- toDynamic(factory: (ctx: ResolutionContext) => Value): BindingBuilder<Value>;
139
- toDynamicAsync(factory: (ctx: ResolutionContext) => Promise<Value>): BindingBuilder<Value>;
140
- toResolved<const Deps extends ReadonlyArray<DependencyKey>>(factory: (...args: { [K in keyof Deps]: TokenValue<NoInfer<Deps>[K]> }) => Value, deps: Deps): BindingBuilder<Value>;
141
- toResolvedAsync<const Deps extends ReadonlyArray<DependencyKey>>(factory: (...args: { [K in keyof Deps]: TokenValue<NoInfer<Deps>[K]> }) => Promise<Value>, deps: Deps): BindingBuilder<Value>;
142
- toAlias(target: Token<Value> | Constructor<Value>): AliasBindingBuilder;
143
- }
144
- /**
145
- * @since 0.3.16-canary.0
146
- */
147
- interface BindingBuilder<Value> extends SlotConstrainedBuilder {
148
- singleton(): SingletonBindingBuilder<Value>;
149
- transient(): TransientBindingBuilder<Value>;
150
- scoped(): ScopedBindingBuilder<Value>;
151
- }
152
- /**
153
- * @since 0.3.16-canary.0
154
- */
155
- interface ConstantBindingBuilder<Value> extends SlotConstrainedBuilder {
156
- onActivation(fn: ActivationHandler<Value>): SingletonLifecycleBuilder<Value>;
157
- onDeactivation(fn: DeactivationHandler<Value>): SingletonLifecycleBuilder<Value>;
158
- }
159
- /**
160
- * @since 0.3.16-canary.0
161
- */
162
- interface AliasBindingBuilder extends SlotConstrainedBuilder {}
163
- /**
164
- * @since 0.3.16-canary.0
165
- */
166
- interface SingletonBindingBuilder<Value> {
167
- onActivation(fn: ActivationHandler<Value>): this;
168
- onDeactivation(fn: DeactivationHandler<Value>): this;
169
- id(): BindingIdentifier;
170
- }
171
- /**
172
- * @since 0.3.16-canary.0
173
- */
174
- interface TransientBindingBuilder<Value> {
175
- onActivation(fn: ActivationHandler<Value>): this;
176
- id(): BindingIdentifier;
177
- }
178
- /**
179
- * @since 0.3.16-canary.0
180
- */
181
- interface ScopedBindingBuilder<Value> extends TransientBindingBuilder<Value> {}
182
- /**
183
- * @since 0.3.16-canary.0
184
- */
185
- interface SingletonLifecycleBuilder<Value> {
186
- onActivation(fn: ActivationHandler<Value>): this;
187
- onDeactivation(fn: DeactivationHandler<Value>): this;
188
- id(): BindingIdentifier;
189
- }
190
- //#endregion
191
- export { AliasBinding, AliasBindingBuilder, BindToBuilder, Binding, BindingBuilder, BindingSlot, ClassBinding, ConstantBinding, ConstantBindingBuilder, DEFAULT_BINDING_SLOT, DynamicAsyncBinding, DynamicBinding, PartialBinding, ResolvedAsyncBinding, ResolvedBinding, ScopedBindingBuilder, SingletonBindingBuilder, SingletonLifecycleBuilder, SlotConstrainedBuilder, TransientBindingBuilder, bindingSlotEquals, bindingSlotToString, generateBindingId };
package/dist/binding.mjs DELETED
@@ -1,36 +0,0 @@
1
- //#region src/binding.ts
2
- /**
3
- * @since 0.3.16-canary.0
4
- */
5
- function bindingSlotEquals(left, right) {
6
- if (left.name !== right.name) return false;
7
- if (left.tags.length !== right.tags.length) return false;
8
- for (const [tagKey, tagValue] of left.tags) if (!right.tags.some(([otherKey, otherValue]) => otherKey === tagKey && Object.is(otherValue, tagValue))) return false;
9
- return true;
10
- }
11
- /**
12
- * @since 0.3.16-canary.0
13
- */
14
- const DEFAULT_BINDING_SLOT = {
15
- name: void 0,
16
- tags: []
17
- };
18
- /**
19
- * @since 0.3.16-canary.0
20
- */
21
- function bindingSlotToString(slot) {
22
- if (slot.name === void 0 && slot.tags.length === 0) return "default";
23
- const parts = [];
24
- if (slot.name !== void 0) parts.push(`name:${slot.name}`);
25
- for (const [tagKey, tagValue] of slot.tags) parts.push(`tag:${tagKey}=${String(tagValue)}`);
26
- return parts.join(",");
27
- }
28
- let _idCounter = 0;
29
- /**
30
- * @since 0.3.16-canary.0
31
- */
32
- function generateBindingId() {
33
- return String(++_idCounter);
34
- }
35
- //#endregion
36
- export { DEFAULT_BINDING_SLOT, bindingSlotEquals, bindingSlotToString, generateBindingId };