@navios/di 0.8.0 → 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 (264) hide show
  1. package/CHANGELOG.md +87 -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 -1558
  40. package/lib/browser/index.mjs +29 -2749
  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-DAKOvAgr.mjs → container-8-z89TyQ.mjs} +1325 -1462
  138. package/lib/container-8-z89TyQ.mjs.map +1 -0
  139. package/lib/{container-Bp1W-pWJ.d.mts → container-CNiqesCL.d.mts} +598 -617
  140. package/lib/container-CNiqesCL.d.mts.map +1 -0
  141. package/lib/{container-DENMeJ87.cjs → container-CaY2fDuk.cjs} +1369 -1512
  142. package/lib/container-CaY2fDuk.cjs.map +1 -0
  143. package/lib/{container-YPwvmlK2.d.cts → container-D-0Ho3qL.d.cts} +598 -612
  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 +460 -302
  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-resolver.mts +122 -0
  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-Bp1W-pWJ.d.mts.map +0 -1
  239. package/lib/container-DAKOvAgr.mjs.map +0 -1
  240. package/lib/container-DENMeJ87.cjs.map +0 -1
  241. package/lib/container-YPwvmlK2.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 -225
  256. package/src/internal/core/invalidator.mts +0 -437
  257. package/src/internal/core/service-locator.mts +0 -202
  258. package/src/internal/core/token-processor.mts +0 -252
  259. package/src/internal/holder/base-holder-manager.mts +0 -334
  260. package/src/internal/holder/holder-manager.mts +0 -85
  261. package/src/internal/holder/request-storage.mts +0 -127
  262. package/src/internal/holder/singleton-storage.mts +0 -92
  263. package/src/testing/README.md +0 -80
  264. package/src/testing/__tests__/test-container.spec.mts +0 -173
@@ -1,300 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from 'vitest'
2
-
3
- import { InjectableScope, InjectableType } from '../enums/index.mjs'
4
- import { DIError } from '../errors/index.mjs'
5
- import { HolderManager } from '../internal/holder/holder-manager.mjs'
6
- import { InstanceStatus } from '../internal/holder/instance-holder.mjs'
7
-
8
- describe('HolderManager', () => {
9
- let manager: HolderManager
10
- let mockLogger: Console
11
-
12
- beforeEach(() => {
13
- mockLogger = {
14
- log: vi.fn(),
15
- } as any as Console
16
- manager = new HolderManager(mockLogger)
17
- })
18
-
19
- describe('constructor', () => {
20
- it('should create manager without logger', () => {
21
- const managerWithoutLogger = new HolderManager()
22
- expect(managerWithoutLogger).toBeDefined()
23
- })
24
-
25
- it('should create manager with logger', () => {
26
- expect(manager).toBeDefined()
27
- })
28
- })
29
-
30
- describe('get', () => {
31
- it('should return DIError.instanceNotFound for non-existent instance', () => {
32
- const result = manager.get('non-existent')
33
-
34
- expect(result).toHaveLength(1)
35
- expect(result[0]).toBeInstanceOf(DIError)
36
- expect(mockLogger.log).toHaveBeenCalledWith(
37
- '[HolderManager]#get() Instance non-existent not found',
38
- )
39
- })
40
-
41
- it('should return valid holder for existing instance', () => {
42
- const holder = manager.storeCreatedHolder(
43
- 'test-instance',
44
- { value: 'test' },
45
- InjectableType.Class,
46
- InjectableScope.Singleton,
47
- )
48
-
49
- const result = manager.get('test-instance')
50
-
51
- expect(result).toHaveLength(2)
52
- expect(result[0]).toBeUndefined()
53
- expect(result[1]).toBe(holder)
54
- })
55
-
56
- it('should return DIError.instanceDestroying for destroying instance', () => {
57
- const holder = manager.storeCreatedHolder(
58
- 'destroying-instance',
59
- { value: 'test' },
60
- InjectableType.Class,
61
- InjectableScope.Singleton,
62
- )
63
-
64
- // Manually set status to destroying
65
- holder.status = InstanceStatus.Destroying
66
-
67
- const result = manager.get('destroying-instance')
68
-
69
- expect(result).toHaveLength(2)
70
- expect(result[0]).toBeInstanceOf(DIError)
71
- expect(result[1]).toBe(holder)
72
- expect(mockLogger.log).toHaveBeenCalledWith(
73
- '[HolderManager]#get() Instance destroying-instance is destroying',
74
- )
75
- })
76
-
77
- it('should return error for instance in error state', () => {
78
- const holder = manager.storeCreatedHolder(
79
- 'error-instance',
80
- { value: 'test' },
81
- InjectableType.Class,
82
- InjectableScope.Singleton,
83
- )
84
-
85
- // Manually set status to error with an error instance
86
- holder.status = InstanceStatus.Error
87
- const errorInstance = DIError.instanceNotFound('error-instance')
88
- holder.instance = errorInstance as unknown as Error
89
-
90
- const result = manager.get('error-instance')
91
-
92
- expect(result).toHaveLength(2)
93
- expect(result[0]).toBeInstanceOf(DIError)
94
- expect(result[1]).toBe(holder)
95
- expect(mockLogger.log).toHaveBeenCalledWith(
96
- '[HolderManager]#get() Instance error-instance is in error state',
97
- )
98
- })
99
- })
100
-
101
- describe('set', () => {
102
- it('should store holder with given name', () => {
103
- const holder = manager.storeCreatedHolder(
104
- 'test-instance',
105
- { value: 'test' },
106
- InjectableType.Class,
107
- InjectableScope.Singleton,
108
- )
109
-
110
- manager.set('new-name', holder)
111
-
112
- const result = manager.get('new-name')
113
- expect(result).toHaveLength(2)
114
- expect(result[0]).toBeUndefined()
115
- expect(result[1]).toBe(holder)
116
- })
117
- })
118
-
119
- describe('has', () => {
120
- it('should return false for non-existent instance', () => {
121
- const result = manager.has('non-existent')
122
-
123
- expect(result).toHaveLength(2)
124
- expect(result[0]).toBeUndefined()
125
- expect(result[1]).toBe(false)
126
- })
127
-
128
- it('should return true for existing instance', () => {
129
- manager.storeCreatedHolder(
130
- 'test-instance',
131
- { value: 'test' },
132
- InjectableType.Class,
133
- InjectableScope.Singleton,
134
- )
135
-
136
- const result = manager.has('test-instance')
137
-
138
- expect(result).toHaveLength(2)
139
- expect(result[0]).toBeUndefined()
140
- expect(result[1]).toBe(true)
141
- })
142
-
143
- it('should return error for destroying instance', () => {
144
- const holder = manager.storeCreatedHolder(
145
- 'destroying-instance',
146
- { value: 'test' },
147
- InjectableType.Class,
148
- InjectableScope.Singleton,
149
- )
150
-
151
- holder.status = InstanceStatus.Destroying
152
-
153
- const result = manager.has('destroying-instance')
154
-
155
- expect(result).toHaveLength(1)
156
- expect(result[0]).toBeInstanceOf(DIError)
157
- })
158
- })
159
-
160
- describe('delete', () => {
161
- it('should delete existing instance and return true', () => {
162
- manager.storeCreatedHolder(
163
- 'test-instance',
164
- { value: 'test' },
165
- InjectableType.Class,
166
- InjectableScope.Singleton,
167
- )
168
-
169
- const result = manager.delete('test-instance')
170
- expect(result).toBe(true)
171
-
172
- const getResult = manager.get('test-instance')
173
- expect(getResult).toHaveLength(1)
174
- expect(getResult[0]).toBeInstanceOf(DIError)
175
- })
176
-
177
- it('should return false for non-existent instance', () => {
178
- const result = manager.delete('non-existent')
179
- expect(result).toBe(false)
180
- })
181
- })
182
-
183
- describe('filter', () => {
184
- it('should filter instances by predicate', () => {
185
- manager.storeCreatedHolder(
186
- 'instance1',
187
- { value: 'test1' },
188
- InjectableType.Class,
189
- InjectableScope.Singleton,
190
- )
191
- manager.storeCreatedHolder(
192
- 'instance2',
193
- { value: 'test2' },
194
- InjectableType.Factory,
195
- InjectableScope.Transient,
196
- )
197
-
198
- const result = manager.filter(
199
- (holder) => holder.type === InjectableType.Class,
200
- )
201
-
202
- expect(result.size).toBe(1)
203
- expect(result.has('instance1')).toBe(true)
204
- expect(result.has('instance2')).toBe(false)
205
- })
206
-
207
- it('should return empty map when no instances match', () => {
208
- manager.storeCreatedHolder(
209
- 'instance1',
210
- { value: 'test1' },
211
- InjectableType.Class,
212
- InjectableScope.Singleton,
213
- )
214
-
215
- const result = manager.filter(
216
- (holder) => holder.type === InjectableType.Factory,
217
- )
218
-
219
- expect(result.size).toBe(0)
220
- })
221
- })
222
-
223
- describe('createCreatingHolder', () => {
224
- it('should create holder with Creating status and deferred promise', () => {
225
- const [deferred, holder] = manager.createCreatingHolder(
226
- 'test-instance',
227
- InjectableType.Class,
228
- InjectableScope.Singleton,
229
- )
230
-
231
- expect(deferred).toBeDefined()
232
- expect(deferred.promise).toBeInstanceOf(Promise)
233
- expect(holder.status).toBe(InstanceStatus.Creating)
234
- expect(holder.name).toBe('test-instance')
235
- expect(holder.instance).toBeNull()
236
- expect(holder.creationPromise).toBe(deferred.promise)
237
- expect(holder.type).toBe(InjectableType.Class)
238
- expect(holder.scope).toBe(InjectableScope.Singleton)
239
- expect(holder.deps).toEqual(new Set())
240
- })
241
-
242
- it('should create holder with custom dependencies', () => {
243
- const deps = new Set(['dep1', 'dep2'])
244
-
245
- const [, holder] = manager.createCreatingHolder(
246
- 'test-instance',
247
- InjectableType.Factory,
248
- InjectableScope.Request,
249
- deps,
250
- )
251
-
252
- expect(holder.deps).toBe(deps)
253
- expect(holder.type).toBe(InjectableType.Factory)
254
- expect(holder.scope).toBe(InjectableScope.Request)
255
- })
256
- })
257
-
258
- describe('storeCreatedHolder', () => {
259
- it('should create and store holder with Created status', () => {
260
- const instance = { value: 'test' }
261
- const holder = manager.storeCreatedHolder(
262
- 'test-instance',
263
- instance,
264
- InjectableType.Class,
265
- InjectableScope.Singleton,
266
- )
267
-
268
- expect(holder.status).toBe(InstanceStatus.Created)
269
- expect(holder.name).toBe('test-instance')
270
- expect(holder.instance).toBe(instance)
271
- expect(holder.creationPromise).toBeNull()
272
- expect(holder.type).toBe(InjectableType.Class)
273
- expect(holder.scope).toBe(InjectableScope.Singleton)
274
- expect(holder.deps).toEqual(new Set())
275
-
276
- // Verify it's stored
277
- const getResult = manager.get('test-instance')
278
- expect(getResult).toHaveLength(2)
279
- expect(getResult[0]).toBeUndefined()
280
- expect(getResult[1]).toBe(holder)
281
- })
282
-
283
- it('should create holder with custom dependencies', () => {
284
- const deps = new Set(['dep1', 'dep2'])
285
- const instance = { value: 'test' }
286
-
287
- const holder = manager.storeCreatedHolder(
288
- 'test-instance',
289
- instance,
290
- InjectableType.Factory,
291
- InjectableScope.Request,
292
- deps,
293
- )
294
-
295
- expect(holder.deps).toBe(deps)
296
- expect(holder.type).toBe(InjectableType.Factory)
297
- expect(holder.scope).toBe(InjectableScope.Request)
298
- })
299
- })
300
- })