@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.
- package/CHANGELOG.md +110 -0
- package/README.md +117 -17
- package/lib/browser/container/abstract-container.d.mts +112 -0
- package/lib/browser/container/abstract-container.d.mts.map +1 -0
- package/lib/browser/container/abstract-container.mjs +100 -0
- package/lib/browser/container/abstract-container.mjs.map +1 -0
- package/lib/browser/container/container.d.mts +100 -0
- package/lib/browser/container/container.d.mts.map +1 -0
- package/lib/browser/container/container.mjs +424 -0
- package/lib/browser/container/container.mjs.map +1 -0
- package/lib/browser/container/scoped-container.d.mts +93 -0
- package/lib/browser/container/scoped-container.d.mts.map +1 -0
- package/lib/browser/container/scoped-container.mjs +119 -0
- package/lib/browser/container/scoped-container.mjs.map +1 -0
- package/lib/browser/decorators/factory.decorator.d.mts +26 -0
- package/lib/browser/decorators/factory.decorator.d.mts.map +1 -0
- package/lib/browser/decorators/factory.decorator.mjs +20 -0
- package/lib/browser/decorators/factory.decorator.mjs.map +1 -0
- package/lib/browser/decorators/injectable.decorator.d.mts +38 -0
- package/lib/browser/decorators/injectable.decorator.d.mts.map +1 -0
- package/lib/browser/decorators/injectable.decorator.mjs +21 -0
- package/lib/browser/decorators/injectable.decorator.mjs.map +1 -0
- package/lib/browser/enums/injectable-scope.enum.d.mts +18 -0
- package/lib/browser/enums/injectable-scope.enum.d.mts.map +1 -0
- package/lib/browser/enums/injectable-scope.enum.mjs +20 -0
- package/lib/browser/enums/injectable-scope.enum.mjs.map +1 -0
- package/lib/browser/enums/injectable-type.enum.d.mts +8 -0
- package/lib/browser/enums/injectable-type.enum.d.mts.map +1 -0
- package/lib/browser/enums/injectable-type.enum.mjs +10 -0
- package/lib/browser/enums/injectable-type.enum.mjs.map +1 -0
- package/lib/browser/errors/di-error.d.mts +43 -0
- package/lib/browser/errors/di-error.d.mts.map +1 -0
- package/lib/browser/errors/di-error.mjs +98 -0
- package/lib/browser/errors/di-error.mjs.map +1 -0
- package/lib/browser/event-emitter.d.mts +16 -0
- package/lib/browser/event-emitter.d.mts.map +1 -0
- package/lib/browser/event-emitter.mjs +320 -0
- package/lib/browser/event-emitter.mjs.map +1 -0
- package/lib/browser/index.d.mts +37 -1508
- package/lib/browser/index.mjs +29 -2650
- package/lib/browser/interfaces/container.interface.d.mts +59 -0
- package/lib/browser/interfaces/container.interface.d.mts.map +1 -0
- package/lib/browser/interfaces/factory.interface.d.mts +14 -0
- package/lib/browser/interfaces/factory.interface.d.mts.map +1 -0
- package/lib/browser/interfaces/on-service-destroy.interface.d.mts +7 -0
- package/lib/browser/interfaces/on-service-destroy.interface.d.mts.map +1 -0
- package/lib/browser/interfaces/on-service-init.interface.d.mts +7 -0
- package/lib/browser/interfaces/on-service-init.interface.d.mts.map +1 -0
- package/lib/browser/internal/context/async-local-storage.browser.mjs +20 -0
- package/lib/browser/internal/context/async-local-storage.browser.mjs.map +1 -0
- package/lib/browser/internal/context/async-local-storage.d.mts +9 -0
- package/lib/browser/internal/context/async-local-storage.d.mts.map +1 -0
- package/lib/browser/internal/context/async-local-storage.types.d.mts +11 -0
- package/lib/browser/internal/context/async-local-storage.types.d.mts.map +1 -0
- package/lib/browser/internal/context/factory-context.d.mts +23 -0
- package/lib/browser/internal/context/factory-context.d.mts.map +1 -0
- package/lib/browser/internal/context/resolution-context.d.mts +43 -0
- package/lib/browser/internal/context/resolution-context.d.mts.map +1 -0
- package/lib/browser/internal/context/resolution-context.mjs +56 -0
- package/lib/browser/internal/context/resolution-context.mjs.map +1 -0
- package/lib/browser/internal/context/service-initialization-context.d.mts +48 -0
- package/lib/browser/internal/context/service-initialization-context.d.mts.map +1 -0
- package/lib/browser/internal/context/sync-local-storage.mjs +53 -0
- package/lib/browser/internal/context/sync-local-storage.mjs.map +1 -0
- package/lib/browser/internal/core/instance-resolver.d.mts +119 -0
- package/lib/browser/internal/core/instance-resolver.d.mts.map +1 -0
- package/lib/browser/internal/core/instance-resolver.mjs +306 -0
- package/lib/browser/internal/core/instance-resolver.mjs.map +1 -0
- package/lib/browser/internal/core/name-resolver.d.mts +52 -0
- package/lib/browser/internal/core/name-resolver.d.mts.map +1 -0
- package/lib/browser/internal/core/name-resolver.mjs +118 -0
- package/lib/browser/internal/core/name-resolver.mjs.map +1 -0
- package/lib/browser/internal/core/scope-tracker.d.mts +65 -0
- package/lib/browser/internal/core/scope-tracker.d.mts.map +1 -0
- package/lib/browser/internal/core/scope-tracker.mjs +120 -0
- package/lib/browser/internal/core/scope-tracker.mjs.map +1 -0
- package/lib/browser/internal/core/service-initializer.d.mts +44 -0
- package/lib/browser/internal/core/service-initializer.d.mts.map +1 -0
- package/lib/browser/internal/core/service-initializer.mjs +109 -0
- package/lib/browser/internal/core/service-initializer.mjs.map +1 -0
- package/lib/browser/internal/core/service-invalidator.d.mts +81 -0
- package/lib/browser/internal/core/service-invalidator.d.mts.map +1 -0
- package/lib/browser/internal/core/service-invalidator.mjs +142 -0
- package/lib/browser/internal/core/service-invalidator.mjs.map +1 -0
- package/lib/browser/internal/core/token-resolver.d.mts +54 -0
- package/lib/browser/internal/core/token-resolver.d.mts.map +1 -0
- package/lib/browser/internal/core/token-resolver.mjs +77 -0
- package/lib/browser/internal/core/token-resolver.mjs.map +1 -0
- package/lib/browser/internal/holder/holder-storage.interface.d.mts +99 -0
- package/lib/browser/internal/holder/holder-storage.interface.d.mts.map +1 -0
- package/lib/browser/internal/holder/instance-holder.d.mts +101 -0
- package/lib/browser/internal/holder/instance-holder.d.mts.map +1 -0
- package/lib/browser/internal/holder/instance-holder.mjs +19 -0
- package/lib/browser/internal/holder/instance-holder.mjs.map +1 -0
- package/lib/browser/internal/holder/unified-storage.d.mts +53 -0
- package/lib/browser/internal/holder/unified-storage.d.mts.map +1 -0
- package/lib/browser/internal/holder/unified-storage.mjs +144 -0
- package/lib/browser/internal/holder/unified-storage.mjs.map +1 -0
- package/lib/browser/internal/lifecycle/circular-detector.d.mts +39 -0
- package/lib/browser/internal/lifecycle/circular-detector.d.mts.map +1 -0
- package/lib/browser/internal/lifecycle/circular-detector.mjs +55 -0
- package/lib/browser/internal/lifecycle/circular-detector.mjs.map +1 -0
- package/lib/browser/internal/lifecycle/lifecycle-event-bus.d.mts +18 -0
- package/lib/browser/internal/lifecycle/lifecycle-event-bus.d.mts.map +1 -0
- package/lib/browser/internal/lifecycle/lifecycle-event-bus.mjs +43 -0
- package/lib/browser/internal/lifecycle/lifecycle-event-bus.mjs.map +1 -0
- package/lib/browser/internal/stub-factory-class.d.mts +14 -0
- package/lib/browser/internal/stub-factory-class.d.mts.map +1 -0
- package/lib/browser/internal/stub-factory-class.mjs +18 -0
- package/lib/browser/internal/stub-factory-class.mjs.map +1 -0
- package/lib/browser/symbols/injectable-token.d.mts +5 -0
- package/lib/browser/symbols/injectable-token.d.mts.map +1 -0
- package/lib/browser/symbols/injectable-token.mjs +6 -0
- package/lib/browser/symbols/injectable-token.mjs.map +1 -0
- package/lib/browser/token/injection-token.d.mts +55 -0
- package/lib/browser/token/injection-token.d.mts.map +1 -0
- package/lib/browser/token/injection-token.mjs +100 -0
- package/lib/browser/token/injection-token.mjs.map +1 -0
- package/lib/browser/token/registry.d.mts +37 -0
- package/lib/browser/token/registry.d.mts.map +1 -0
- package/lib/browser/token/registry.mjs +86 -0
- package/lib/browser/token/registry.mjs.map +1 -0
- package/lib/browser/utils/default-injectors.d.mts +12 -0
- package/lib/browser/utils/default-injectors.d.mts.map +1 -0
- package/lib/browser/utils/default-injectors.mjs +13 -0
- package/lib/browser/utils/default-injectors.mjs.map +1 -0
- package/lib/browser/utils/get-injectable-token.d.mts +9 -0
- package/lib/browser/utils/get-injectable-token.d.mts.map +1 -0
- package/lib/browser/utils/get-injectable-token.mjs +13 -0
- package/lib/browser/utils/get-injectable-token.mjs.map +1 -0
- package/lib/browser/utils/get-injectors.d.mts +55 -0
- package/lib/browser/utils/get-injectors.d.mts.map +1 -0
- package/lib/browser/utils/get-injectors.mjs +121 -0
- package/lib/browser/utils/get-injectors.mjs.map +1 -0
- package/lib/browser/utils/types.d.mts +23 -0
- package/lib/browser/utils/types.d.mts.map +1 -0
- package/lib/{container-Pb_Y4Z4x.mjs → container-8-z89TyQ.mjs} +1269 -1305
- package/lib/container-8-z89TyQ.mjs.map +1 -0
- package/lib/{container-BuAutHGg.d.mts → container-CNiqesCL.d.mts} +600 -569
- package/lib/container-CNiqesCL.d.mts.map +1 -0
- package/lib/{container-DnzgpfBe.cjs → container-CaY2fDuk.cjs} +1287 -1329
- package/lib/container-CaY2fDuk.cjs.map +1 -0
- package/lib/{container-oGTgX2iX.d.cts → container-D-0Ho3qL.d.cts} +601 -565
- package/lib/container-D-0Ho3qL.d.cts.map +1 -0
- package/lib/index.cjs +13 -15
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +58 -223
- package/lib/index.d.cts.map +1 -1
- package/lib/index.d.mts +62 -222
- package/lib/index.d.mts.map +1 -1
- package/lib/index.mjs +5 -6
- package/lib/index.mjs.map +1 -1
- package/lib/testing/index.cjs +569 -311
- package/lib/testing/index.cjs.map +1 -1
- package/lib/testing/index.d.cts +370 -41
- package/lib/testing/index.d.cts.map +1 -1
- package/lib/testing/index.d.mts +370 -41
- package/lib/testing/index.d.mts.map +1 -1
- package/lib/testing/index.mjs +568 -305
- package/lib/testing/index.mjs.map +1 -1
- package/package.json +2 -1
- package/src/__tests__/circular-detector.spec.mts +193 -0
- package/src/__tests__/concurrent.spec.mts +368 -0
- package/src/__tests__/container.spec.mts +32 -30
- package/src/__tests__/di-error.spec.mts +351 -0
- package/src/__tests__/e2e.browser.spec.mts +0 -4
- package/src/__tests__/e2e.spec.mts +10 -19
- package/src/__tests__/event-emitter.spec.mts +232 -109
- package/src/__tests__/get-injectors.spec.mts +250 -39
- package/src/__tests__/injection-token.spec.mts +293 -349
- package/src/__tests__/library-findings.spec.mts +8 -8
- package/src/__tests__/registry.spec.mts +358 -210
- package/src/__tests__/resolution-context.spec.mts +255 -0
- package/src/__tests__/scope-tracker.spec.mts +598 -0
- package/src/__tests__/scope-upgrade.spec.mts +808 -0
- package/src/__tests__/scoped-container.spec.mts +595 -0
- package/src/__tests__/test-container.spec.mts +293 -0
- package/src/__tests__/token-resolver.spec.mts +207 -0
- package/src/__tests__/unified-storage.spec.mts +535 -0
- package/src/__tests__/unit-test-container.spec.mts +405 -0
- package/src/__type-tests__/container.spec-d.mts +180 -0
- package/src/__type-tests__/factory.spec-d.mts +15 -3
- package/src/__type-tests__/inject.spec-d.mts +115 -20
- package/src/__type-tests__/injectable.spec-d.mts +69 -52
- package/src/__type-tests__/injection-token.spec-d.mts +176 -0
- package/src/__type-tests__/scoped-container.spec-d.mts +212 -0
- package/src/container/abstract-container.mts +327 -0
- package/src/container/container.mts +142 -170
- package/src/container/scoped-container.mts +126 -208
- package/src/decorators/factory.decorator.mts +16 -11
- package/src/decorators/injectable.decorator.mts +20 -16
- package/src/enums/index.mts +2 -2
- package/src/enums/injectable-scope.enum.mts +1 -0
- package/src/enums/injectable-type.enum.mts +1 -0
- package/src/errors/di-error.mts +96 -0
- package/src/event-emitter.mts +3 -27
- package/src/index.mts +6 -153
- package/src/interfaces/container.interface.mts +13 -0
- package/src/interfaces/factory.interface.mts +1 -1
- package/src/interfaces/index.mts +1 -1
- package/src/internal/context/async-local-storage.mts +3 -2
- package/src/internal/context/async-local-storage.types.mts +1 -0
- package/src/internal/context/factory-context.mts +1 -0
- package/src/internal/context/index.mts +3 -1
- package/src/internal/context/resolution-context.mts +1 -0
- package/src/internal/context/service-initialization-context.mts +43 -0
- package/src/internal/core/index.mts +5 -4
- package/src/internal/core/instance-resolver.mts +461 -292
- package/src/internal/core/name-resolver.mts +196 -0
- package/src/internal/core/scope-tracker.mts +242 -0
- package/src/internal/core/{instantiator.mts → service-initializer.mts} +51 -29
- package/src/internal/core/service-invalidator.mts +290 -0
- package/src/internal/core/{token-processor.mts → token-resolver.mts} +17 -88
- package/src/internal/holder/holder-storage.interface.mts +11 -5
- package/src/internal/holder/index.mts +2 -5
- package/src/internal/holder/instance-holder.mts +1 -3
- package/src/internal/holder/unified-storage.mts +245 -0
- package/src/internal/index.mts +2 -1
- package/src/internal/lifecycle/circular-detector.mts +1 -0
- package/src/internal/lifecycle/index.mts +1 -1
- package/src/internal/lifecycle/lifecycle-event-bus.mts +1 -0
- package/src/internal/stub-factory-class.mts +16 -0
- package/src/symbols/injectable-token.mts +3 -1
- package/src/testing/index.mts +2 -0
- package/src/testing/test-container.mts +546 -85
- package/src/testing/types.mts +117 -0
- package/src/testing/unit-test-container.mts +509 -0
- package/src/token/injection-token.mts +41 -4
- package/src/token/registry.mts +75 -9
- package/src/utils/default-injectors.mts +16 -0
- package/src/utils/get-injectable-token.mts +2 -3
- package/src/utils/get-injectors.mts +26 -15
- package/src/utils/index.mts +3 -1
- package/src/utils/types.mts +1 -0
- package/tsdown.config.mts +11 -1
- package/lib/browser/index.d.mts.map +0 -1
- package/lib/browser/index.mjs.map +0 -1
- package/lib/container-BuAutHGg.d.mts.map +0 -1
- package/lib/container-DnzgpfBe.cjs.map +0 -1
- package/lib/container-Pb_Y4Z4x.mjs.map +0 -1
- package/lib/container-oGTgX2iX.d.cts.map +0 -1
- package/src/__tests__/async-local-storage.browser.spec.mts +0 -166
- package/src/__tests__/async-local-storage.spec.mts +0 -333
- package/src/__tests__/errors.spec.mts +0 -87
- package/src/__tests__/factory.spec.mts +0 -137
- package/src/__tests__/injectable.spec.mts +0 -246
- package/src/__tests__/request-scope.spec.mts +0 -416
- package/src/__tests__/service-instantiator.spec.mts +0 -410
- package/src/__tests__/service-locator-event-bus.spec.mts +0 -242
- package/src/__tests__/service-locator-manager.spec.mts +0 -300
- package/src/__tests__/service-locator.spec.mts +0 -966
- package/src/__tests__/unified-api.spec.mts +0 -130
- package/src/browser.mts +0 -11
- package/src/injectors.mts +0 -18
- package/src/internal/context/request-context.mts +0 -214
- package/src/internal/core/invalidator.mts +0 -437
- package/src/internal/core/service-locator.mts +0 -202
- package/src/internal/holder/base-holder-manager.mts +0 -238
- package/src/internal/holder/holder-manager.mts +0 -85
- package/src/internal/holder/request-storage.mts +0 -134
- package/src/internal/holder/singleton-storage.mts +0 -105
- package/src/testing/README.md +0 -80
- 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
|
-
}
|