@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.
- package/CHANGELOG.md +87 -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 -1558
- package/lib/browser/index.mjs +29 -2749
- 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-DAKOvAgr.mjs → container-8-z89TyQ.mjs} +1325 -1462
- package/lib/container-8-z89TyQ.mjs.map +1 -0
- package/lib/{container-Bp1W-pWJ.d.mts → container-CNiqesCL.d.mts} +598 -617
- package/lib/container-CNiqesCL.d.mts.map +1 -0
- package/lib/{container-DENMeJ87.cjs → container-CaY2fDuk.cjs} +1369 -1512
- package/lib/container-CaY2fDuk.cjs.map +1 -0
- package/lib/{container-YPwvmlK2.d.cts → container-D-0Ho3qL.d.cts} +598 -612
- 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 +460 -302
- 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-resolver.mts +122 -0
- 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-Bp1W-pWJ.d.mts.map +0 -1
- package/lib/container-DAKOvAgr.mjs.map +0 -1
- package/lib/container-DENMeJ87.cjs.map +0 -1
- package/lib/container-YPwvmlK2.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 -225
- package/src/internal/core/invalidator.mts +0 -437
- package/src/internal/core/service-locator.mts +0 -202
- package/src/internal/core/token-processor.mts +0 -252
- package/src/internal/holder/base-holder-manager.mts +0 -334
- package/src/internal/holder/holder-manager.mts +0 -85
- package/src/internal/holder/request-storage.mts +0 -127
- package/src/internal/holder/singleton-storage.mts +0 -92
- package/src/testing/README.md +0 -80
- package/src/testing/__tests__/test-container.spec.mts +0 -173
package/src/errors/di-error.mts
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
|
+
import type { InjectionTokenSchemaType } from '../token/injection-token.mjs'
|
|
2
|
+
import type { FactoryRecord } from '../token/registry.mjs'
|
|
3
|
+
|
|
1
4
|
export enum DIErrorCode {
|
|
2
5
|
FactoryNotFound = 'FactoryNotFound',
|
|
3
6
|
FactoryTokenNotResolved = 'FactoryTokenNotResolved',
|
|
4
7
|
InstanceNotFound = 'InstanceNotFound',
|
|
5
8
|
InstanceDestroying = 'InstanceDestroying',
|
|
6
9
|
CircularDependency = 'CircularDependency',
|
|
10
|
+
TokenValidationError = 'TokenValidationError',
|
|
11
|
+
TokenSchemaRequiredError = 'TokenSchemaRequiredError',
|
|
12
|
+
ClassNotInjectable = 'ClassNotInjectable',
|
|
13
|
+
ScopeMismatchError = 'ScopeMismatchError',
|
|
14
|
+
PriorityConflictError = 'PriorityConflictError',
|
|
15
|
+
StorageError = 'StorageError',
|
|
16
|
+
InitializationError = 'InitializationError',
|
|
17
|
+
DependencyResolutionError = 'DependencyResolutionError',
|
|
7
18
|
UnknownError = 'UnknownError',
|
|
8
19
|
}
|
|
9
20
|
|
|
@@ -17,6 +28,7 @@ export class DIError extends Error {
|
|
|
17
28
|
) {
|
|
18
29
|
super(message)
|
|
19
30
|
this.context = context
|
|
31
|
+
this.name = 'DIError'
|
|
20
32
|
}
|
|
21
33
|
|
|
22
34
|
// Static factory methods for common error types
|
|
@@ -73,4 +85,88 @@ export class DIError extends Error {
|
|
|
73
85
|
{ cycle },
|
|
74
86
|
)
|
|
75
87
|
}
|
|
88
|
+
|
|
89
|
+
static tokenValidationError(
|
|
90
|
+
message: string,
|
|
91
|
+
schema: InjectionTokenSchemaType | undefined,
|
|
92
|
+
value: unknown,
|
|
93
|
+
): DIError {
|
|
94
|
+
return new DIError(DIErrorCode.TokenValidationError, message, {
|
|
95
|
+
schema,
|
|
96
|
+
value,
|
|
97
|
+
})
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
static tokenSchemaRequiredError(token: string | symbol | unknown): DIError {
|
|
101
|
+
return new DIError(
|
|
102
|
+
DIErrorCode.TokenSchemaRequiredError,
|
|
103
|
+
`Token ${token?.toString() ?? 'unknown'} requires schema arguments and cannot be used with addInstance. Use BoundInjectionToken or provide arguments when resolving.`,
|
|
104
|
+
{ token },
|
|
105
|
+
)
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
static classNotInjectable(className: string): DIError {
|
|
109
|
+
return new DIError(
|
|
110
|
+
DIErrorCode.ClassNotInjectable,
|
|
111
|
+
`Class ${className} is not decorated with @Injectable.`,
|
|
112
|
+
{ className },
|
|
113
|
+
)
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
static scopeMismatchError(
|
|
117
|
+
token: string | symbol | unknown,
|
|
118
|
+
expectedScope: string,
|
|
119
|
+
actualScope: string,
|
|
120
|
+
): DIError {
|
|
121
|
+
return new DIError(
|
|
122
|
+
DIErrorCode.ScopeMismatchError,
|
|
123
|
+
`Scope mismatch for ${token?.toString() ?? 'unknown'}: expected ${expectedScope}, got ${actualScope}`,
|
|
124
|
+
{ token, expectedScope, actualScope },
|
|
125
|
+
)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
static priorityConflictError(
|
|
129
|
+
token: string | symbol | unknown,
|
|
130
|
+
records: FactoryRecord[],
|
|
131
|
+
): DIError {
|
|
132
|
+
return new DIError(
|
|
133
|
+
DIErrorCode.PriorityConflictError,
|
|
134
|
+
`Priority conflict for ${token?.toString() ?? 'unknown'}: multiple bindings with same priority`,
|
|
135
|
+
{ token, records },
|
|
136
|
+
)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
static storageError(
|
|
140
|
+
message: string,
|
|
141
|
+
operation: string,
|
|
142
|
+
instanceName?: string,
|
|
143
|
+
): DIError {
|
|
144
|
+
return new DIError(DIErrorCode.StorageError, `Storage error: ${message}`, {
|
|
145
|
+
operation,
|
|
146
|
+
instanceName,
|
|
147
|
+
})
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
static initializationError(
|
|
151
|
+
serviceName: string,
|
|
152
|
+
error: Error | string,
|
|
153
|
+
): DIError {
|
|
154
|
+
return new DIError(
|
|
155
|
+
DIErrorCode.InitializationError,
|
|
156
|
+
`Service ${serviceName} initialization failed: ${error instanceof Error ? error.message : error}`,
|
|
157
|
+
{ serviceName, error },
|
|
158
|
+
)
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
static dependencyResolutionError(
|
|
162
|
+
serviceName: string,
|
|
163
|
+
dependencyName: string,
|
|
164
|
+
error: Error | string,
|
|
165
|
+
): DIError {
|
|
166
|
+
return new DIError(
|
|
167
|
+
DIErrorCode.DependencyResolutionError,
|
|
168
|
+
`Failed to resolve dependency ${dependencyName} for service ${serviceName}: ${error instanceof Error ? error.message : error}`,
|
|
169
|
+
{ serviceName, dependencyName, error },
|
|
170
|
+
)
|
|
171
|
+
}
|
|
76
172
|
}
|
package/src/event-emitter.mts
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-empty-object-type */
|
|
3
3
|
/* eslint-disable @typescript-eslint/no-unsafe-function-type */
|
|
4
4
|
|
|
5
|
-
import { Injectable
|
|
5
|
+
import { Injectable } from './decorators/index.mjs'
|
|
6
|
+
import { InjectableScope } from './enums/index.mjs'
|
|
6
7
|
|
|
7
8
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
8
9
|
export type EventsConfig = {
|
|
@@ -17,33 +18,8 @@ export type EventsArgs<
|
|
|
17
18
|
Name extends EventsNames<Events>,
|
|
18
19
|
> = Events[Name] extends any[] ? Events[Name] : []
|
|
19
20
|
|
|
20
|
-
export type ChannelEmitter<
|
|
21
|
-
Events extends EventsConfig,
|
|
22
|
-
Ns extends string,
|
|
23
|
-
E extends EventsNames<Events>,
|
|
24
|
-
> = {
|
|
25
|
-
emit<Args extends EventsArgs<Events, E>>(
|
|
26
|
-
ns: Ns,
|
|
27
|
-
event: E,
|
|
28
|
-
...args: Args
|
|
29
|
-
): Promise<any>
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export interface EventEmitterInterface<Events extends EventsConfig> {
|
|
33
|
-
on<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(
|
|
34
|
-
event: E,
|
|
35
|
-
listener: (...args: Args) => void | Promise<void>,
|
|
36
|
-
): () => void
|
|
37
|
-
emit<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(
|
|
38
|
-
event: E,
|
|
39
|
-
...args: Args
|
|
40
|
-
): void | Promise<void>
|
|
41
|
-
}
|
|
42
|
-
|
|
43
21
|
@Injectable({ scope: InjectableScope.Transient })
|
|
44
|
-
export class EventEmitter<Events extends EventsConfig = {}>
|
|
45
|
-
implements EventEmitterInterface<Events>
|
|
46
|
-
{
|
|
22
|
+
export class EventEmitter<Events extends EventsConfig = {}> {
|
|
47
23
|
private listeners: Map<EventsNames<Events>, Set<Function>> = new Map()
|
|
48
24
|
|
|
49
25
|
on<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(
|
package/src/index.mts
CHANGED
|
@@ -1,157 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
* @navios/di - Dependency Injection Library
|
|
3
|
-
*
|
|
4
|
-
* This library provides a flexible dependency injection system with support for:
|
|
5
|
-
* - Singleton and request-scoped services
|
|
6
|
-
* - Factory-based and class-based service instantiation
|
|
7
|
-
* - Circular dependency detection
|
|
8
|
-
* - Schema validation for service arguments
|
|
9
|
-
* - Lifecycle hooks (onServiceInit, onServiceDestroy)
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
// ============================================================================
|
|
13
|
-
// PUBLIC API - Container
|
|
14
|
-
// ============================================================================
|
|
15
|
-
|
|
16
|
-
export { Container } from './container/container.mjs'
|
|
17
|
-
export { ScopedContainer } from './container/scoped-container.mjs'
|
|
18
|
-
|
|
19
|
-
// ============================================================================
|
|
20
|
-
// PUBLIC API - Tokens
|
|
21
|
-
// ============================================================================
|
|
22
|
-
|
|
23
|
-
export {
|
|
24
|
-
InjectionToken,
|
|
25
|
-
BoundInjectionToken,
|
|
26
|
-
FactoryInjectionToken,
|
|
27
|
-
type ClassType,
|
|
28
|
-
type ClassTypeWithoutArguments,
|
|
29
|
-
type ClassTypeWithArgument,
|
|
30
|
-
type ClassTypeWithOptionalArgument,
|
|
31
|
-
type ClassTypeWithInstance,
|
|
32
|
-
type ClassTypeWithInstanceAndArgument,
|
|
33
|
-
type ClassTypeWithInstanceAndOptionalArgument,
|
|
34
|
-
type AnyInjectableType,
|
|
35
|
-
type InjectionTokenType,
|
|
36
|
-
type InjectionTokenSchemaType,
|
|
37
|
-
} from './token/injection-token.mjs'
|
|
38
|
-
|
|
39
|
-
export {
|
|
40
|
-
Registry,
|
|
41
|
-
globalRegistry,
|
|
42
|
-
type FactoryRecord,
|
|
43
|
-
} from './token/registry.mjs'
|
|
44
|
-
|
|
45
|
-
// ============================================================================
|
|
46
|
-
// PUBLIC API - Decorators
|
|
47
|
-
// ============================================================================
|
|
48
|
-
|
|
1
|
+
export * from './container/index.mjs'
|
|
49
2
|
export * from './decorators/index.mjs'
|
|
50
|
-
|
|
51
|
-
// ============================================================================
|
|
52
|
-
// PUBLIC API - Enums
|
|
53
|
-
// ============================================================================
|
|
54
|
-
|
|
55
3
|
export * from './enums/index.mjs'
|
|
56
|
-
|
|
57
|
-
// ============================================================================
|
|
58
|
-
// PUBLIC API - Interfaces
|
|
59
|
-
// ============================================================================
|
|
60
|
-
|
|
61
|
-
export * from './interfaces/index.mjs'
|
|
62
|
-
|
|
63
|
-
// ============================================================================
|
|
64
|
-
// PUBLIC API - Errors
|
|
65
|
-
// ============================================================================
|
|
66
|
-
|
|
67
4
|
export * from './errors/index.mjs'
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
// PUBLIC API - Utilities
|
|
71
|
-
// ============================================================================
|
|
72
|
-
|
|
73
|
-
export * from './utils/index.mjs'
|
|
74
|
-
|
|
75
|
-
// ============================================================================
|
|
76
|
-
// PUBLIC API - Symbols
|
|
77
|
-
// ============================================================================
|
|
78
|
-
|
|
5
|
+
export * from './interfaces/index.mjs'
|
|
6
|
+
export * from './internal/index.mjs'
|
|
79
7
|
export * from './symbols/index.mjs'
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
// ============================================================================
|
|
84
|
-
|
|
85
|
-
export { EventEmitter } from './event-emitter.mjs'
|
|
86
|
-
|
|
87
|
-
// ============================================================================
|
|
88
|
-
// PUBLIC API - Injectors
|
|
89
|
-
// ============================================================================
|
|
90
|
-
|
|
91
|
-
export {
|
|
92
|
-
defaultInjectors,
|
|
93
|
-
asyncInject,
|
|
94
|
-
inject,
|
|
95
|
-
optional,
|
|
96
|
-
wrapSyncInit,
|
|
97
|
-
provideFactoryContext,
|
|
98
|
-
} from './injectors.mjs'
|
|
99
|
-
|
|
100
|
-
// ============================================================================
|
|
101
|
-
// INTERNAL API (exported for advanced use cases)
|
|
102
|
-
// ============================================================================
|
|
103
|
-
|
|
104
|
-
// Context types
|
|
105
|
-
export type { FactoryContext } from './internal/context/factory-context.mjs'
|
|
106
|
-
export {
|
|
107
|
-
type RequestContext,
|
|
108
|
-
type RequestContextHolder,
|
|
109
|
-
DefaultRequestContext,
|
|
110
|
-
createRequestContext,
|
|
111
|
-
} from './internal/context/request-context.mjs'
|
|
112
|
-
export {
|
|
113
|
-
type ResolutionContextData,
|
|
114
|
-
withResolutionContext,
|
|
115
|
-
getCurrentResolutionContext,
|
|
116
|
-
withoutResolutionContext,
|
|
117
|
-
} from './internal/context/resolution-context.mjs'
|
|
118
|
-
|
|
119
|
-
// Holder types
|
|
120
|
-
export {
|
|
121
|
-
InstanceStatus,
|
|
122
|
-
type InstanceHolder,
|
|
123
|
-
type InstanceEffect,
|
|
124
|
-
type InstanceDestroyListener,
|
|
125
|
-
type InstanceHolderCreating,
|
|
126
|
-
type InstanceHolderCreated,
|
|
127
|
-
type InstanceHolderDestroying,
|
|
128
|
-
type InstanceHolderError,
|
|
129
|
-
} from './internal/holder/instance-holder.mjs'
|
|
130
|
-
|
|
131
|
-
export {
|
|
132
|
-
BaseHolderManager,
|
|
133
|
-
type HolderReadyResult,
|
|
134
|
-
} from './internal/holder/base-holder-manager.mjs'
|
|
135
|
-
|
|
136
|
-
export { HolderManager } from './internal/holder/holder-manager.mjs'
|
|
137
|
-
|
|
138
|
-
export {
|
|
139
|
-
type HolderGetResult,
|
|
140
|
-
type IHolderStorage,
|
|
141
|
-
} from './internal/holder/holder-storage.interface.mjs'
|
|
142
|
-
|
|
143
|
-
export { SingletonStorage } from './internal/holder/singleton-storage.mjs'
|
|
144
|
-
|
|
145
|
-
export { RequestStorage } from './internal/holder/request-storage.mjs'
|
|
146
|
-
|
|
147
|
-
// Lifecycle
|
|
148
|
-
export { LifecycleEventBus } from './internal/lifecycle/lifecycle-event-bus.mjs'
|
|
149
|
-
|
|
150
|
-
export { CircularDetector } from './internal/lifecycle/circular-detector.mjs'
|
|
151
|
-
|
|
152
|
-
// Core engine
|
|
153
|
-
export { ServiceLocator } from './internal/core/service-locator.mjs'
|
|
154
|
-
export { InstanceResolver } from './internal/core/instance-resolver.mjs'
|
|
155
|
-
export { Instantiator } from './internal/core/instantiator.mjs'
|
|
156
|
-
export { Invalidator } from './internal/core/invalidator.mjs'
|
|
157
|
-
export { TokenProcessor } from './internal/core/token-processor.mjs'
|
|
8
|
+
export * from './token/index.mjs'
|
|
9
|
+
export * from './utils/index.mjs'
|
|
10
|
+
export * from './event-emitter.mjs'
|
|
@@ -62,6 +62,19 @@ export interface IContainer {
|
|
|
62
62
|
*/
|
|
63
63
|
isRegistered(token: any): boolean
|
|
64
64
|
|
|
65
|
+
/**
|
|
66
|
+
* Adds an instance to the container.
|
|
67
|
+
* Accepts class types, InjectionTokens, and BoundInjectionTokens.
|
|
68
|
+
* Rejects InjectionTokens with required schemas (use BoundInjectionToken instead).
|
|
69
|
+
*
|
|
70
|
+
* @param token The class type, InjectionToken, or BoundInjectionToken to register the instance for
|
|
71
|
+
* @param instance The instance to store
|
|
72
|
+
*/
|
|
73
|
+
addInstance<T>(
|
|
74
|
+
token: ClassType | InjectionToken<T, any> | BoundInjectionToken<T, any>,
|
|
75
|
+
instance: T,
|
|
76
|
+
): void
|
|
77
|
+
|
|
65
78
|
/**
|
|
66
79
|
* Disposes the container and cleans up all resources.
|
|
67
80
|
*/
|
package/src/interfaces/index.mts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { IAsyncLocalStorage } from './async-local-storage.types.mjs'
|
|
2
|
+
|
|
1
3
|
import { AsyncLocalStorage } from 'node:async_hooks'
|
|
2
4
|
|
|
3
5
|
/**
|
|
@@ -14,8 +16,6 @@ import { AsyncLocalStorage } from 'node:async_hooks'
|
|
|
14
16
|
* and works with both ESM and CJS builds.
|
|
15
17
|
*/
|
|
16
18
|
|
|
17
|
-
import type { IAsyncLocalStorage } from './async-local-storage.types.mjs'
|
|
18
|
-
|
|
19
19
|
export type { IAsyncLocalStorage }
|
|
20
20
|
|
|
21
21
|
const isProduction = process.env.NODE_ENV === 'production'
|
|
@@ -66,3 +66,4 @@ export function createAsyncLocalStorage<T>(): IAsyncLocalStorage<T> {
|
|
|
66
66
|
export function isUsingNativeAsyncLocalStorage(): boolean {
|
|
67
67
|
return getModule().isUsingNativeAsyncLocalStorage()
|
|
68
68
|
}
|
|
69
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { InjectableScope } from '../../enums/index.mjs'
|
|
2
|
+
import type { IContainer } from '../../interfaces/container.interface.mjs'
|
|
3
|
+
import type { Injectors } from '../../utils/index.mjs'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Context provided to injectors during service initialization.
|
|
7
|
+
*
|
|
8
|
+
* Extends FactoryContext with additional tracking information about
|
|
9
|
+
* the service being initialized, its dependencies, and scope.
|
|
10
|
+
* Used for scope upgrade tracking and dependency management.
|
|
11
|
+
*/
|
|
12
|
+
export interface ServiceInitializationContext {
|
|
13
|
+
inject: Injectors['asyncInject']
|
|
14
|
+
/**
|
|
15
|
+
* The container instance for dependency resolution.
|
|
16
|
+
* This may be either a Container or ScopedContainer.
|
|
17
|
+
*/
|
|
18
|
+
container: IContainer
|
|
19
|
+
addDestroyListener: (listener: () => void) => void
|
|
20
|
+
getDestroyListeners: () => (() => void)[]
|
|
21
|
+
/**
|
|
22
|
+
* The name of the service being initialized.
|
|
23
|
+
*/
|
|
24
|
+
serviceName: string
|
|
25
|
+
/**
|
|
26
|
+
* Set of dependency names that this service depends on.
|
|
27
|
+
* Automatically populated as dependencies are resolved.
|
|
28
|
+
*/
|
|
29
|
+
dependencies: Set<string>
|
|
30
|
+
/**
|
|
31
|
+
* The scope of the service being initialized.
|
|
32
|
+
*/
|
|
33
|
+
scope: InjectableScope
|
|
34
|
+
/**
|
|
35
|
+
* Track a dependency that was resolved.
|
|
36
|
+
* Used for scope upgrade tracking - if a Singleton service
|
|
37
|
+
* resolves a Request dependency, the scope can be upgraded.
|
|
38
|
+
*
|
|
39
|
+
* @param name The name of the dependency
|
|
40
|
+
* @param scope The scope of the dependency
|
|
41
|
+
*/
|
|
42
|
+
trackDependency(name: string, scope: InjectableScope): void
|
|
43
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export * from './service-locator.mjs'
|
|
2
1
|
export * from './instance-resolver.mjs'
|
|
3
|
-
export * from './
|
|
4
|
-
export * from './
|
|
5
|
-
export * from './
|
|
2
|
+
export * from './name-resolver.mjs'
|
|
3
|
+
export * from './scope-tracker.mjs'
|
|
4
|
+
export * from './service-initializer.mjs'
|
|
5
|
+
export * from './service-invalidator.mjs'
|
|
6
|
+
export * from './token-resolver.mjs'
|