@navios/di 0.7.1 → 0.9.0

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 (263) hide show
  1. package/CHANGELOG.md +110 -0
  2. package/README.md +117 -17
  3. package/lib/browser/container/abstract-container.d.mts +112 -0
  4. package/lib/browser/container/abstract-container.d.mts.map +1 -0
  5. package/lib/browser/container/abstract-container.mjs +100 -0
  6. package/lib/browser/container/abstract-container.mjs.map +1 -0
  7. package/lib/browser/container/container.d.mts +100 -0
  8. package/lib/browser/container/container.d.mts.map +1 -0
  9. package/lib/browser/container/container.mjs +424 -0
  10. package/lib/browser/container/container.mjs.map +1 -0
  11. package/lib/browser/container/scoped-container.d.mts +93 -0
  12. package/lib/browser/container/scoped-container.d.mts.map +1 -0
  13. package/lib/browser/container/scoped-container.mjs +119 -0
  14. package/lib/browser/container/scoped-container.mjs.map +1 -0
  15. package/lib/browser/decorators/factory.decorator.d.mts +26 -0
  16. package/lib/browser/decorators/factory.decorator.d.mts.map +1 -0
  17. package/lib/browser/decorators/factory.decorator.mjs +20 -0
  18. package/lib/browser/decorators/factory.decorator.mjs.map +1 -0
  19. package/lib/browser/decorators/injectable.decorator.d.mts +38 -0
  20. package/lib/browser/decorators/injectable.decorator.d.mts.map +1 -0
  21. package/lib/browser/decorators/injectable.decorator.mjs +21 -0
  22. package/lib/browser/decorators/injectable.decorator.mjs.map +1 -0
  23. package/lib/browser/enums/injectable-scope.enum.d.mts +18 -0
  24. package/lib/browser/enums/injectable-scope.enum.d.mts.map +1 -0
  25. package/lib/browser/enums/injectable-scope.enum.mjs +20 -0
  26. package/lib/browser/enums/injectable-scope.enum.mjs.map +1 -0
  27. package/lib/browser/enums/injectable-type.enum.d.mts +8 -0
  28. package/lib/browser/enums/injectable-type.enum.d.mts.map +1 -0
  29. package/lib/browser/enums/injectable-type.enum.mjs +10 -0
  30. package/lib/browser/enums/injectable-type.enum.mjs.map +1 -0
  31. package/lib/browser/errors/di-error.d.mts +43 -0
  32. package/lib/browser/errors/di-error.d.mts.map +1 -0
  33. package/lib/browser/errors/di-error.mjs +98 -0
  34. package/lib/browser/errors/di-error.mjs.map +1 -0
  35. package/lib/browser/event-emitter.d.mts +16 -0
  36. package/lib/browser/event-emitter.d.mts.map +1 -0
  37. package/lib/browser/event-emitter.mjs +320 -0
  38. package/lib/browser/event-emitter.mjs.map +1 -0
  39. package/lib/browser/index.d.mts +37 -1508
  40. package/lib/browser/index.mjs +29 -2650
  41. package/lib/browser/interfaces/container.interface.d.mts +59 -0
  42. package/lib/browser/interfaces/container.interface.d.mts.map +1 -0
  43. package/lib/browser/interfaces/factory.interface.d.mts +14 -0
  44. package/lib/browser/interfaces/factory.interface.d.mts.map +1 -0
  45. package/lib/browser/interfaces/on-service-destroy.interface.d.mts +7 -0
  46. package/lib/browser/interfaces/on-service-destroy.interface.d.mts.map +1 -0
  47. package/lib/browser/interfaces/on-service-init.interface.d.mts +7 -0
  48. package/lib/browser/interfaces/on-service-init.interface.d.mts.map +1 -0
  49. package/lib/browser/internal/context/async-local-storage.browser.mjs +20 -0
  50. package/lib/browser/internal/context/async-local-storage.browser.mjs.map +1 -0
  51. package/lib/browser/internal/context/async-local-storage.d.mts +9 -0
  52. package/lib/browser/internal/context/async-local-storage.d.mts.map +1 -0
  53. package/lib/browser/internal/context/async-local-storage.types.d.mts +11 -0
  54. package/lib/browser/internal/context/async-local-storage.types.d.mts.map +1 -0
  55. package/lib/browser/internal/context/factory-context.d.mts +23 -0
  56. package/lib/browser/internal/context/factory-context.d.mts.map +1 -0
  57. package/lib/browser/internal/context/resolution-context.d.mts +43 -0
  58. package/lib/browser/internal/context/resolution-context.d.mts.map +1 -0
  59. package/lib/browser/internal/context/resolution-context.mjs +56 -0
  60. package/lib/browser/internal/context/resolution-context.mjs.map +1 -0
  61. package/lib/browser/internal/context/service-initialization-context.d.mts +48 -0
  62. package/lib/browser/internal/context/service-initialization-context.d.mts.map +1 -0
  63. package/lib/browser/internal/context/sync-local-storage.mjs +53 -0
  64. package/lib/browser/internal/context/sync-local-storage.mjs.map +1 -0
  65. package/lib/browser/internal/core/instance-resolver.d.mts +119 -0
  66. package/lib/browser/internal/core/instance-resolver.d.mts.map +1 -0
  67. package/lib/browser/internal/core/instance-resolver.mjs +306 -0
  68. package/lib/browser/internal/core/instance-resolver.mjs.map +1 -0
  69. package/lib/browser/internal/core/name-resolver.d.mts +52 -0
  70. package/lib/browser/internal/core/name-resolver.d.mts.map +1 -0
  71. package/lib/browser/internal/core/name-resolver.mjs +118 -0
  72. package/lib/browser/internal/core/name-resolver.mjs.map +1 -0
  73. package/lib/browser/internal/core/scope-tracker.d.mts +65 -0
  74. package/lib/browser/internal/core/scope-tracker.d.mts.map +1 -0
  75. package/lib/browser/internal/core/scope-tracker.mjs +120 -0
  76. package/lib/browser/internal/core/scope-tracker.mjs.map +1 -0
  77. package/lib/browser/internal/core/service-initializer.d.mts +44 -0
  78. package/lib/browser/internal/core/service-initializer.d.mts.map +1 -0
  79. package/lib/browser/internal/core/service-initializer.mjs +109 -0
  80. package/lib/browser/internal/core/service-initializer.mjs.map +1 -0
  81. package/lib/browser/internal/core/service-invalidator.d.mts +81 -0
  82. package/lib/browser/internal/core/service-invalidator.d.mts.map +1 -0
  83. package/lib/browser/internal/core/service-invalidator.mjs +142 -0
  84. package/lib/browser/internal/core/service-invalidator.mjs.map +1 -0
  85. package/lib/browser/internal/core/token-resolver.d.mts +54 -0
  86. package/lib/browser/internal/core/token-resolver.d.mts.map +1 -0
  87. package/lib/browser/internal/core/token-resolver.mjs +77 -0
  88. package/lib/browser/internal/core/token-resolver.mjs.map +1 -0
  89. package/lib/browser/internal/holder/holder-storage.interface.d.mts +99 -0
  90. package/lib/browser/internal/holder/holder-storage.interface.d.mts.map +1 -0
  91. package/lib/browser/internal/holder/instance-holder.d.mts +101 -0
  92. package/lib/browser/internal/holder/instance-holder.d.mts.map +1 -0
  93. package/lib/browser/internal/holder/instance-holder.mjs +19 -0
  94. package/lib/browser/internal/holder/instance-holder.mjs.map +1 -0
  95. package/lib/browser/internal/holder/unified-storage.d.mts +53 -0
  96. package/lib/browser/internal/holder/unified-storage.d.mts.map +1 -0
  97. package/lib/browser/internal/holder/unified-storage.mjs +144 -0
  98. package/lib/browser/internal/holder/unified-storage.mjs.map +1 -0
  99. package/lib/browser/internal/lifecycle/circular-detector.d.mts +39 -0
  100. package/lib/browser/internal/lifecycle/circular-detector.d.mts.map +1 -0
  101. package/lib/browser/internal/lifecycle/circular-detector.mjs +55 -0
  102. package/lib/browser/internal/lifecycle/circular-detector.mjs.map +1 -0
  103. package/lib/browser/internal/lifecycle/lifecycle-event-bus.d.mts +18 -0
  104. package/lib/browser/internal/lifecycle/lifecycle-event-bus.d.mts.map +1 -0
  105. package/lib/browser/internal/lifecycle/lifecycle-event-bus.mjs +43 -0
  106. package/lib/browser/internal/lifecycle/lifecycle-event-bus.mjs.map +1 -0
  107. package/lib/browser/internal/stub-factory-class.d.mts +14 -0
  108. package/lib/browser/internal/stub-factory-class.d.mts.map +1 -0
  109. package/lib/browser/internal/stub-factory-class.mjs +18 -0
  110. package/lib/browser/internal/stub-factory-class.mjs.map +1 -0
  111. package/lib/browser/symbols/injectable-token.d.mts +5 -0
  112. package/lib/browser/symbols/injectable-token.d.mts.map +1 -0
  113. package/lib/browser/symbols/injectable-token.mjs +6 -0
  114. package/lib/browser/symbols/injectable-token.mjs.map +1 -0
  115. package/lib/browser/token/injection-token.d.mts +55 -0
  116. package/lib/browser/token/injection-token.d.mts.map +1 -0
  117. package/lib/browser/token/injection-token.mjs +100 -0
  118. package/lib/browser/token/injection-token.mjs.map +1 -0
  119. package/lib/browser/token/registry.d.mts +37 -0
  120. package/lib/browser/token/registry.d.mts.map +1 -0
  121. package/lib/browser/token/registry.mjs +86 -0
  122. package/lib/browser/token/registry.mjs.map +1 -0
  123. package/lib/browser/utils/default-injectors.d.mts +12 -0
  124. package/lib/browser/utils/default-injectors.d.mts.map +1 -0
  125. package/lib/browser/utils/default-injectors.mjs +13 -0
  126. package/lib/browser/utils/default-injectors.mjs.map +1 -0
  127. package/lib/browser/utils/get-injectable-token.d.mts +9 -0
  128. package/lib/browser/utils/get-injectable-token.d.mts.map +1 -0
  129. package/lib/browser/utils/get-injectable-token.mjs +13 -0
  130. package/lib/browser/utils/get-injectable-token.mjs.map +1 -0
  131. package/lib/browser/utils/get-injectors.d.mts +55 -0
  132. package/lib/browser/utils/get-injectors.d.mts.map +1 -0
  133. package/lib/browser/utils/get-injectors.mjs +121 -0
  134. package/lib/browser/utils/get-injectors.mjs.map +1 -0
  135. package/lib/browser/utils/types.d.mts +23 -0
  136. package/lib/browser/utils/types.d.mts.map +1 -0
  137. package/lib/{container-Pb_Y4Z4x.mjs → container-8-z89TyQ.mjs} +1269 -1305
  138. package/lib/container-8-z89TyQ.mjs.map +1 -0
  139. package/lib/{container-BuAutHGg.d.mts → container-CNiqesCL.d.mts} +600 -569
  140. package/lib/container-CNiqesCL.d.mts.map +1 -0
  141. package/lib/{container-DnzgpfBe.cjs → container-CaY2fDuk.cjs} +1287 -1329
  142. package/lib/container-CaY2fDuk.cjs.map +1 -0
  143. package/lib/{container-oGTgX2iX.d.cts → container-D-0Ho3qL.d.cts} +601 -565
  144. package/lib/container-D-0Ho3qL.d.cts.map +1 -0
  145. package/lib/index.cjs +13 -15
  146. package/lib/index.cjs.map +1 -1
  147. package/lib/index.d.cts +58 -223
  148. package/lib/index.d.cts.map +1 -1
  149. package/lib/index.d.mts +62 -222
  150. package/lib/index.d.mts.map +1 -1
  151. package/lib/index.mjs +5 -6
  152. package/lib/index.mjs.map +1 -1
  153. package/lib/testing/index.cjs +569 -311
  154. package/lib/testing/index.cjs.map +1 -1
  155. package/lib/testing/index.d.cts +370 -41
  156. package/lib/testing/index.d.cts.map +1 -1
  157. package/lib/testing/index.d.mts +370 -41
  158. package/lib/testing/index.d.mts.map +1 -1
  159. package/lib/testing/index.mjs +568 -305
  160. package/lib/testing/index.mjs.map +1 -1
  161. package/package.json +2 -1
  162. package/src/__tests__/circular-detector.spec.mts +193 -0
  163. package/src/__tests__/concurrent.spec.mts +368 -0
  164. package/src/__tests__/container.spec.mts +32 -30
  165. package/src/__tests__/di-error.spec.mts +351 -0
  166. package/src/__tests__/e2e.browser.spec.mts +0 -4
  167. package/src/__tests__/e2e.spec.mts +10 -19
  168. package/src/__tests__/event-emitter.spec.mts +232 -109
  169. package/src/__tests__/get-injectors.spec.mts +250 -39
  170. package/src/__tests__/injection-token.spec.mts +293 -349
  171. package/src/__tests__/library-findings.spec.mts +8 -8
  172. package/src/__tests__/registry.spec.mts +358 -210
  173. package/src/__tests__/resolution-context.spec.mts +255 -0
  174. package/src/__tests__/scope-tracker.spec.mts +598 -0
  175. package/src/__tests__/scope-upgrade.spec.mts +808 -0
  176. package/src/__tests__/scoped-container.spec.mts +595 -0
  177. package/src/__tests__/test-container.spec.mts +293 -0
  178. package/src/__tests__/token-resolver.spec.mts +207 -0
  179. package/src/__tests__/unified-storage.spec.mts +535 -0
  180. package/src/__tests__/unit-test-container.spec.mts +405 -0
  181. package/src/__type-tests__/container.spec-d.mts +180 -0
  182. package/src/__type-tests__/factory.spec-d.mts +15 -3
  183. package/src/__type-tests__/inject.spec-d.mts +115 -20
  184. package/src/__type-tests__/injectable.spec-d.mts +69 -52
  185. package/src/__type-tests__/injection-token.spec-d.mts +176 -0
  186. package/src/__type-tests__/scoped-container.spec-d.mts +212 -0
  187. package/src/container/abstract-container.mts +327 -0
  188. package/src/container/container.mts +142 -170
  189. package/src/container/scoped-container.mts +126 -208
  190. package/src/decorators/factory.decorator.mts +16 -11
  191. package/src/decorators/injectable.decorator.mts +20 -16
  192. package/src/enums/index.mts +2 -2
  193. package/src/enums/injectable-scope.enum.mts +1 -0
  194. package/src/enums/injectable-type.enum.mts +1 -0
  195. package/src/errors/di-error.mts +96 -0
  196. package/src/event-emitter.mts +3 -27
  197. package/src/index.mts +6 -153
  198. package/src/interfaces/container.interface.mts +13 -0
  199. package/src/interfaces/factory.interface.mts +1 -1
  200. package/src/interfaces/index.mts +1 -1
  201. package/src/internal/context/async-local-storage.mts +3 -2
  202. package/src/internal/context/async-local-storage.types.mts +1 -0
  203. package/src/internal/context/factory-context.mts +1 -0
  204. package/src/internal/context/index.mts +3 -1
  205. package/src/internal/context/resolution-context.mts +1 -0
  206. package/src/internal/context/service-initialization-context.mts +43 -0
  207. package/src/internal/core/index.mts +5 -4
  208. package/src/internal/core/instance-resolver.mts +461 -292
  209. package/src/internal/core/name-resolver.mts +196 -0
  210. package/src/internal/core/scope-tracker.mts +242 -0
  211. package/src/internal/core/{instantiator.mts → service-initializer.mts} +51 -29
  212. package/src/internal/core/service-invalidator.mts +290 -0
  213. package/src/internal/core/{token-processor.mts → token-resolver.mts} +17 -88
  214. package/src/internal/holder/holder-storage.interface.mts +11 -5
  215. package/src/internal/holder/index.mts +2 -5
  216. package/src/internal/holder/instance-holder.mts +1 -3
  217. package/src/internal/holder/unified-storage.mts +245 -0
  218. package/src/internal/index.mts +2 -1
  219. package/src/internal/lifecycle/circular-detector.mts +1 -0
  220. package/src/internal/lifecycle/index.mts +1 -1
  221. package/src/internal/lifecycle/lifecycle-event-bus.mts +1 -0
  222. package/src/internal/stub-factory-class.mts +16 -0
  223. package/src/symbols/injectable-token.mts +3 -1
  224. package/src/testing/index.mts +2 -0
  225. package/src/testing/test-container.mts +546 -85
  226. package/src/testing/types.mts +117 -0
  227. package/src/testing/unit-test-container.mts +509 -0
  228. package/src/token/injection-token.mts +41 -4
  229. package/src/token/registry.mts +75 -9
  230. package/src/utils/default-injectors.mts +16 -0
  231. package/src/utils/get-injectable-token.mts +2 -3
  232. package/src/utils/get-injectors.mts +26 -15
  233. package/src/utils/index.mts +3 -1
  234. package/src/utils/types.mts +1 -0
  235. package/tsdown.config.mts +11 -1
  236. package/lib/browser/index.d.mts.map +0 -1
  237. package/lib/browser/index.mjs.map +0 -1
  238. package/lib/container-BuAutHGg.d.mts.map +0 -1
  239. package/lib/container-DnzgpfBe.cjs.map +0 -1
  240. package/lib/container-Pb_Y4Z4x.mjs.map +0 -1
  241. package/lib/container-oGTgX2iX.d.cts.map +0 -1
  242. package/src/__tests__/async-local-storage.browser.spec.mts +0 -166
  243. package/src/__tests__/async-local-storage.spec.mts +0 -333
  244. package/src/__tests__/errors.spec.mts +0 -87
  245. package/src/__tests__/factory.spec.mts +0 -137
  246. package/src/__tests__/injectable.spec.mts +0 -246
  247. package/src/__tests__/request-scope.spec.mts +0 -416
  248. package/src/__tests__/service-instantiator.spec.mts +0 -410
  249. package/src/__tests__/service-locator-event-bus.spec.mts +0 -242
  250. package/src/__tests__/service-locator-manager.spec.mts +0 -300
  251. package/src/__tests__/service-locator.spec.mts +0 -966
  252. package/src/__tests__/unified-api.spec.mts +0 -130
  253. package/src/browser.mts +0 -11
  254. package/src/injectors.mts +0 -18
  255. package/src/internal/context/request-context.mts +0 -214
  256. package/src/internal/core/invalidator.mts +0 -437
  257. package/src/internal/core/service-locator.mts +0 -202
  258. package/src/internal/holder/base-holder-manager.mts +0 -238
  259. package/src/internal/holder/holder-manager.mts +0 -85
  260. package/src/internal/holder/request-storage.mts +0 -134
  261. package/src/internal/holder/singleton-storage.mts +0 -105
  262. package/src/testing/README.md +0 -80
  263. package/src/testing/__tests__/test-container.spec.mts +0 -173
@@ -1,130 +0,0 @@
1
- import { describe, expect, it } from 'vitest'
2
-
3
- import { InjectableScope, InjectableType } from '../enums/index.mjs'
4
- import { DefaultRequestContext } from '../internal/context/request-context.mjs'
5
- import { HolderManager } from '../internal/holder/holder-manager.mjs'
6
-
7
- describe('Unified API', () => {
8
- describe('Common methods between HolderManager and RequestContext', () => {
9
- it('should have the same basic API surface', () => {
10
- const holderManager = new HolderManager()
11
- const requestContext = new DefaultRequestContext(
12
- 'test-request',
13
- 100,
14
- )
15
-
16
- // Both should have the same common methods
17
- expect(typeof holderManager.size).toBe('function')
18
- expect(typeof requestContext.size).toBe('function')
19
-
20
- expect(typeof holderManager.isEmpty).toBe('function')
21
- expect(typeof requestContext.isEmpty).toBe('function')
22
-
23
- expect(typeof holderManager.filter).toBe('function')
24
- expect(typeof requestContext.filter).toBe('function')
25
-
26
- expect(typeof holderManager.clear).toBe('function')
27
- expect(typeof requestContext.clear).toBe('function')
28
-
29
- expect(typeof holderManager.delete).toBe('function')
30
- expect(typeof requestContext.delete).toBe('function')
31
-
32
- expect(typeof holderManager.getAllNames).toBe('function')
33
- expect(typeof requestContext.getAllNames).toBe('function')
34
-
35
- expect(typeof holderManager.getAllHolders).toBe('function')
36
- expect(typeof requestContext.getAllHolders).toBe('function')
37
-
38
- expect(typeof holderManager.createCreatingHolder).toBe('function')
39
- expect(typeof requestContext.createCreatingHolder).toBe('function')
40
- })
41
-
42
- it('should work with the same holder creation patterns', () => {
43
- const holderManager = new HolderManager()
44
- const requestContext = new DefaultRequestContext(
45
- 'test-request',
46
- 100,
47
- )
48
-
49
- // Both should be able to create holders the same way
50
- const [deferred1, holder1] = holderManager.createCreatingHolder(
51
- 'Service1',
52
- InjectableType.Class,
53
- InjectableScope.Singleton,
54
- )
55
-
56
- const [deferred2, holder2] = requestContext.createCreatingHolder(
57
- 'Service2',
58
- InjectableType.Class,
59
- InjectableScope.Request,
60
- )
61
-
62
- expect(holder1.name).toBe('Service1')
63
- expect(holder1.scope).toBe(InjectableScope.Singleton)
64
- expect(holder2.name).toBe('Service2')
65
- expect(holder2.scope).toBe(InjectableScope.Request)
66
-
67
- // Both should be able to store holders
68
- holderManager.set('Service1', holder1)
69
- requestContext.set('Service2', holder2)
70
-
71
- expect(holderManager.size()).toBe(1)
72
- expect(requestContext.size()).toBe(1)
73
- })
74
-
75
- it('should support the same filtering patterns', () => {
76
- const holderManager = new HolderManager()
77
- const requestContext = new DefaultRequestContext(
78
- 'test-request',
79
- 100,
80
- )
81
-
82
- // Create and store different types of holders
83
- const singletonHolder = holderManager.storeCreatedHolder(
84
- 'Singleton',
85
- {},
86
- InjectableType.Class,
87
- InjectableScope.Singleton,
88
- )
89
-
90
- // Create a holder first, then add it to the request context
91
- const [, transientHolderTemp] = requestContext.createCreatingHolder(
92
- 'Transient',
93
- InjectableType.Class,
94
- InjectableScope.Transient,
95
- )
96
- requestContext.set('Transient', transientHolderTemp)
97
- const transientHolder = transientHolderTemp
98
-
99
- // Both should support the same filtering API
100
- const singletons = holderManager.filter(
101
- (holder) => holder.scope === InjectableScope.Singleton,
102
- )
103
- const transients = requestContext.filter(
104
- (holder) => holder.scope === InjectableScope.Transient,
105
- )
106
-
107
- expect(singletons.size).toBe(1)
108
- expect(transients.size).toBe(1)
109
- expect(singletons.get('Singleton')).toBe(singletonHolder)
110
- expect(transients.get('Transient')).toBe(transientHolder)
111
- })
112
-
113
- it('should maintain their specific behaviors while sharing common API', () => {
114
- const holderManager = new HolderManager()
115
- const requestContext = new DefaultRequestContext(
116
- 'test-request',
117
- 100,
118
- )
119
-
120
- // HolderManager has specific error handling
121
- const [notFound] = holderManager.get('NonExistent')
122
- expect(notFound).toBeDefined()
123
-
124
- // RequestContext has specific request features
125
- expect(requestContext.requestId).toBe('test-request')
126
- expect(requestContext.priority).toBe(100)
127
- expect(requestContext.metadata).toBeInstanceOf(Map)
128
- })
129
- })
130
- })
package/src/browser.mts DELETED
@@ -1,11 +0,0 @@
1
- /**
2
- * Browser-specific entry point for @navios/di.
3
- *
4
- * This entry point is automatically selected by bundlers that respect
5
- * the "browser" condition in package.json exports.
6
- *
7
- * The browser build uses SyncLocalStorage instead of Node's AsyncLocalStorage,
8
- * which is sufficient for synchronous DI resolution in browser environments.
9
- */
10
-
11
- export * from './index.mjs'
package/src/injectors.mts DELETED
@@ -1,18 +0,0 @@
1
- import type { Injectors } from './utils/index.mjs'
2
-
3
- import { getInjectors } from './utils/index.mjs'
4
-
5
- export const defaultInjectors = getInjectors()
6
-
7
- export const asyncInject: Injectors['asyncInject'] =
8
- defaultInjectors.asyncInject
9
-
10
- export const inject: Injectors['inject'] = defaultInjectors.inject
11
-
12
- export const optional: Injectors['optional'] = defaultInjectors.optional
13
-
14
- export const wrapSyncInit: Injectors['wrapSyncInit'] =
15
- defaultInjectors.wrapSyncInit
16
-
17
- export const provideFactoryContext: Injectors['provideFactoryContext'] =
18
- defaultInjectors.provideFactoryContext
@@ -1,214 +0,0 @@
1
- import type { InstanceHolder } from '../holder/instance-holder.mjs'
2
-
3
- import { BaseHolderManager } from '../holder/base-holder-manager.mjs'
4
- import { InjectableScope, InjectableType } from '../../enums/index.mjs'
5
- import { InjectionToken } from '../../token/injection-token.mjs'
6
-
7
- /**
8
- * Interface for request context that manages pre-prepared instances for a specific request.
9
- *
10
- * Provides isolated storage for request-scoped services, enabling efficient
11
- * instantiation and cleanup within the lifecycle of a single request.
12
- */
13
- export interface RequestContext {
14
- /**
15
- * Unique identifier for this request context.
16
- */
17
- readonly requestId: string
18
-
19
- /**
20
- * Instance holders for request-scoped services.
21
- */
22
- readonly holders: Map<string, InstanceHolder>
23
-
24
- /**
25
- * Priority for resolution in FactoryContext.inject method.
26
- * Higher values take precedence.
27
- */
28
- readonly priority: number
29
-
30
- /**
31
- * Request-specific metadata that can be used during instantiation.
32
- */
33
- readonly metadata: Map<string, any>
34
-
35
- /**
36
- * Timestamp when this context was created.
37
- */
38
- readonly createdAt: number
39
-
40
- /**
41
- * Adds a pre-prepared instance to this context.
42
- */
43
- addInstance(
44
- instanceName: string,
45
- instance: any,
46
- holder: InstanceHolder,
47
- ): void
48
-
49
- /**
50
- * Adds a pre-prepared instance to this context.
51
- */
52
- addInstance(token: InjectionToken<any, undefined>, instance: any): void
53
-
54
- /**
55
- * Gets an instance holder from this context.
56
- */
57
- get(instanceName: string): InstanceHolder | undefined
58
-
59
- /**
60
- * Sets an instance holder by name.
61
- */
62
- set(instanceName: string, holder: InstanceHolder): void
63
-
64
- /**
65
- * Checks if this context has a pre-prepared instance.
66
- */
67
- has(instanceName: string): boolean
68
-
69
- /**
70
- * Clears all instances and holders from this context.
71
- */
72
- clear(): void
73
-
74
- /**
75
- * Gets metadata value by key.
76
- */
77
- getMetadata(key: string): any | undefined
78
-
79
- /**
80
- * Sets metadata value by key.
81
- */
82
- setMetadata(key: string, value: any): void
83
-
84
- // Methods inherited from BaseHolderManager
85
- /**
86
- * Filters holders based on a predicate function.
87
- */
88
- filter(
89
- predicate: (
90
- value: InstanceHolder<any>,
91
- key: string,
92
- ) => boolean,
93
- ): Map<string, InstanceHolder>
94
-
95
- /**
96
- * Deletes a holder by name.
97
- */
98
- delete(name: string): boolean
99
-
100
- /**
101
- * Gets the number of holders currently managed.
102
- */
103
- size(): number
104
-
105
- /**
106
- * Checks if this manager has any holders.
107
- */
108
- isEmpty(): boolean
109
- }
110
-
111
- /** @deprecated Use RequestContext instead */
112
- export type RequestContextHolder = RequestContext
113
-
114
- /**
115
- * Default implementation of RequestContext.
116
- *
117
- * Extends BaseHolderManager to provide holder management functionality
118
- * with request-specific metadata and lifecycle support.
119
- */
120
- export class DefaultRequestContext
121
- extends BaseHolderManager
122
- implements RequestContext
123
- {
124
- public readonly metadata = new Map<string, any>()
125
- public readonly createdAt = Date.now()
126
-
127
- constructor(
128
- public readonly requestId: string,
129
- public readonly priority: number = 100,
130
- initialMetadata?: Record<string, any>,
131
- ) {
132
- super(null) // RequestContext doesn't need logging
133
- if (initialMetadata) {
134
- Object.entries(initialMetadata).forEach(([key, value]) => {
135
- this.metadata.set(key, value)
136
- })
137
- }
138
- }
139
-
140
- /**
141
- * Public getter for holders to maintain interface compatibility.
142
- */
143
- get holders(): Map<string, InstanceHolder> {
144
- return this._holders
145
- }
146
-
147
- /**
148
- * Gets a holder by name. For RequestContext, this is a simple lookup.
149
- */
150
- get(name: string): InstanceHolder | undefined {
151
- return this._holders.get(name)
152
- }
153
-
154
- /**
155
- * Sets a holder by name.
156
- */
157
- set(name: string, holder: InstanceHolder): void {
158
- this._holders.set(name, holder)
159
- }
160
-
161
- /**
162
- * Checks if a holder exists by name.
163
- */
164
- has(name: string): boolean {
165
- return this._holders.has(name)
166
- }
167
-
168
- addInstance(
169
- instanceName: string | InjectionToken<any, undefined>,
170
- instance: any,
171
- holder?: InstanceHolder,
172
- ): void {
173
- if (instanceName instanceof InjectionToken) {
174
- const name = instanceName.toString()
175
- const createdHolder = this.createCreatedHolder(
176
- name,
177
- instance,
178
- InjectableType.Class,
179
- InjectableScope.Singleton,
180
- new Set(),
181
- )
182
- this._holders.set(name, createdHolder)
183
- } else {
184
- if (!holder) {
185
- throw new Error('Holder is required when adding an instance by name')
186
- }
187
- this._holders.set(instanceName, holder)
188
- }
189
- }
190
-
191
- clear(): void {
192
- super.clear() // Use the base class clear method for holders
193
- this.metadata.clear()
194
- }
195
-
196
- getMetadata(key: string): any | undefined {
197
- return this.metadata.get(key)
198
- }
199
-
200
- setMetadata(key: string, value: any): void {
201
- this.metadata.set(key, value)
202
- }
203
- }
204
-
205
- /**
206
- * Creates a new request context with the given parameters.
207
- */
208
- export function createRequestContext(
209
- requestId: string,
210
- priority: number = 100,
211
- initialMetadata?: Record<string, any>,
212
- ): RequestContext {
213
- return new DefaultRequestContext(requestId, priority, initialMetadata)
214
- }