@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
package/lib/index.d.mts
CHANGED
|
@@ -1,35 +1,47 @@
|
|
|
1
|
-
import { $ as
|
|
2
|
-
import {
|
|
1
|
+
import { $ as ClassTypeWithoutArguments, A as Injectors, B as PopUnion, C as NameResolver, D as Factorable, E as globalRegistry, F as IContainer, G as BaseInjectionTokenSchemaType, H as UnionToIntersection, I as InjectRequest, J as ClassTypeWithArgument, K as BoundInjectionToken, L as InjectState, M as ServiceInitializationContext, N as InjectableType, O as FactorableWithArgs, P as InjectableScope, Q as ClassTypeWithOptionalArgument, R as IsUnion, S as DIErrorCode, T as Registry, U as UnionToOvlds, V as UnionToArray, W as AnyInjectableType, X as ClassTypeWithInstanceAndArgument, Y as ClassTypeWithInstance, Z as ClassTypeWithInstanceAndOptionalArgument, _ as InstanceHolderCreating, a as ScopedContainer, b as InstanceStatus, c as ClearAllOptions, d as LifecycleEventBus, et as FactoryInjectionToken, f as HolderGetResult, g as InstanceHolderCreated, h as InstanceHolder, i as ScopeTracker, it as OptionalInjectionTokenSchemaType, j as getInjectors, k as FactoryContext, l as InvalidationOptions, m as InstanceDestroyListener, n as InstanceResolver, nt as InjectionTokenSchemaType, o as UnifiedStorage, p as IHolderStorage, q as ClassType, r as ServiceInitializer, rt as InjectionTokenType, s as TokenResolver, t as Container, tt as InjectionToken, u as ServiceInvalidator, v as InstanceHolderDestroying, w as FactoryRecord, x as DIError, y as InstanceHolderError, z as Join } from "./container-CNiqesCL.mjs";
|
|
2
|
+
import { z } from "zod/v4";
|
|
3
3
|
|
|
4
|
-
//#region src/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
//#region src/utils/default-injectors.d.mts
|
|
5
|
+
declare const defaultInjectors: Injectors;
|
|
6
|
+
declare const inject: Injectors['inject'];
|
|
7
|
+
declare const optional: Injectors['optional'];
|
|
8
|
+
declare const asyncInject: Injectors['asyncInject'];
|
|
9
|
+
declare const wrapSyncInit: Injectors['wrapSyncInit'];
|
|
10
|
+
declare const provideFactoryContext: Injectors['provideFactoryContext'];
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region src/utils/get-injectable-token.d.mts
|
|
13
|
+
declare function getInjectableToken<R>(target: ClassType): R extends {
|
|
14
|
+
create(...args: any[]): infer V;
|
|
15
|
+
} ? InjectionToken<V> : InjectionToken<R>;
|
|
8
16
|
//#endregion
|
|
9
17
|
//#region src/interfaces/on-service-destroy.interface.d.mts
|
|
10
18
|
interface OnServiceDestroy {
|
|
11
19
|
onServiceDestroy(): Promise<void> | void;
|
|
12
20
|
}
|
|
13
21
|
//#endregion
|
|
22
|
+
//#region src/interfaces/on-service-init.interface.d.mts
|
|
23
|
+
interface OnServiceInit {
|
|
24
|
+
onServiceInit(): Promise<void> | void;
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
14
27
|
//#region src/decorators/factory.decorator.d.mts
|
|
15
28
|
interface FactoryOptions {
|
|
16
29
|
scope?: InjectableScope;
|
|
17
30
|
token?: InjectionToken<any, any>;
|
|
18
31
|
registry?: Registry;
|
|
32
|
+
priority?: number;
|
|
19
33
|
}
|
|
20
34
|
declare function Factory<R>(options?: {
|
|
21
35
|
scope?: InjectableScope;
|
|
22
36
|
registry?: Registry;
|
|
37
|
+
priority?: number;
|
|
23
38
|
}): <T extends ClassTypeWithInstance<Factorable<R>>>(target: T, context?: ClassDecoratorContext) => T;
|
|
24
39
|
declare function Factory<R, S>(options: {
|
|
25
40
|
scope?: InjectableScope;
|
|
26
41
|
token: InjectionToken<R, S>;
|
|
27
42
|
registry?: Registry;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
target: T, context?: ClassDecoratorContext) => T : S extends undefined ? <T extends ClassTypeWithInstance<Factorable<R>>>(
|
|
31
|
-
// #2.3.1 Token without a schema
|
|
32
|
-
target: T, context?: ClassDecoratorContext) => T : never;
|
|
43
|
+
priority?: number;
|
|
44
|
+
}): R extends undefined ? never : S extends InjectionTokenSchemaType ? <T extends ClassTypeWithInstance<FactorableWithArgs<R, S>>>(target: T, context?: ClassDecoratorContext) => T : S extends undefined ? <T extends ClassTypeWithInstance<Factorable<R>>>(target: T, context?: ClassDecoratorContext) => T : never;
|
|
33
45
|
//#endregion
|
|
34
46
|
//#region src/decorators/injectable.decorator.d.mts
|
|
35
47
|
interface InjectableOptions {
|
|
@@ -37,62 +49,43 @@ interface InjectableOptions {
|
|
|
37
49
|
token?: InjectionToken<any, any>;
|
|
38
50
|
schema?: InjectionTokenSchemaType;
|
|
39
51
|
registry?: Registry;
|
|
52
|
+
priority?: number;
|
|
40
53
|
}
|
|
41
54
|
declare function Injectable(): <T extends ClassTypeWithoutArguments>(target: T, context?: ClassDecoratorContext) => T;
|
|
42
55
|
declare function Injectable(options: {
|
|
43
56
|
scope?: InjectableScope;
|
|
44
57
|
registry: Registry;
|
|
58
|
+
priority?: number;
|
|
45
59
|
}): <T extends ClassTypeWithoutArguments>(target: T, context?: ClassDecoratorContext) => T;
|
|
46
60
|
declare function Injectable(options: {
|
|
47
61
|
scope: InjectableScope;
|
|
62
|
+
priority?: number;
|
|
48
63
|
}): <T extends ClassTypeWithoutArguments>(target: T, context?: ClassDecoratorContext) => T;
|
|
49
64
|
declare function Injectable<Schema extends InjectionTokenSchemaType>(options: {
|
|
50
65
|
scope?: InjectableScope;
|
|
51
66
|
schema: Schema;
|
|
52
67
|
registry?: Registry;
|
|
68
|
+
priority?: number;
|
|
53
69
|
}): <T extends ClassTypeWithArgument<z.output<Schema>>>(target: T, context?: ClassDecoratorContext) => T;
|
|
54
70
|
declare function Injectable<Type, Schema>(options: {
|
|
55
71
|
scope?: InjectableScope;
|
|
56
72
|
token: InjectionToken<Type, Schema>;
|
|
57
73
|
registry?: Registry;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
target: T, context?: ClassDecoratorContext) => T : <T extends ClassTypeWithInstanceAndArgument<Type, z.output<Schema>>>(
|
|
61
|
-
// #3.1.2 Typed token
|
|
62
|
-
target: T, context?: ClassDecoratorContext) => T : Schema extends OptionalInjectionTokenSchemaType ? Type extends undefined ? <T extends ClassTypeWithOptionalArgument<z.output<Schema>>>(
|
|
63
|
-
// #3.2.1 Typeless token
|
|
64
|
-
target: T, context?: ClassDecoratorContext) => T : <T extends ClassTypeWithInstanceAndOptionalArgument<Type, z.output<Schema>>>(target: T, context?: ClassDecoratorContext) => T : Schema extends undefined ? <R extends ClassTypeWithInstance<Type>>(
|
|
65
|
-
// #3.3.1 Token must have a type
|
|
66
|
-
target: R, context?: ClassDecoratorContext) => R : never;
|
|
74
|
+
priority?: number;
|
|
75
|
+
}): Schema extends BaseInjectionTokenSchemaType ? Type extends undefined ? <T extends ClassTypeWithArgument<z.output<Schema>>>(target: T, context?: ClassDecoratorContext) => T : <T extends ClassTypeWithInstanceAndArgument<Type, z.output<Schema>>>(target: T, context?: ClassDecoratorContext) => T : Schema extends OptionalInjectionTokenSchemaType ? Type extends undefined ? <T extends ClassTypeWithOptionalArgument<z.output<Schema>>>(target: T, context?: ClassDecoratorContext) => T : <T extends ClassTypeWithInstanceAndOptionalArgument<Type, z.output<Schema>>>(target: T, context?: ClassDecoratorContext) => T : Schema extends undefined ? <R extends ClassTypeWithInstance<Type>>(target: R, context?: ClassDecoratorContext) => R : never;
|
|
67
76
|
//#endregion
|
|
68
|
-
//#region src/
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
type EventsNames<Events extends EventsConfig> = Exclude<keyof Events, symbol | number>;
|
|
76
|
-
type EventsArgs<Events extends EventsConfig, Name extends EventsNames<Events>> = Events[Name] extends any[] ? Events[Name] : [];
|
|
77
|
-
interface EventEmitterInterface<Events extends EventsConfig> {
|
|
78
|
-
on<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): () => void;
|
|
79
|
-
emit<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, ...args: Args): void | Promise<void>;
|
|
80
|
-
}
|
|
81
|
-
declare class EventEmitter<Events extends EventsConfig = {}> implements EventEmitterInterface<Events> {
|
|
82
|
-
private listeners;
|
|
83
|
-
on<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): () => void;
|
|
84
|
-
off<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): void;
|
|
85
|
-
once<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): () => void;
|
|
86
|
-
emit<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, ...args: Args): Promise<any>;
|
|
77
|
+
//#region src/internal/context/async-local-storage.types.d.mts
|
|
78
|
+
/**
|
|
79
|
+
* Interface matching the subset of AsyncLocalStorage API we use.
|
|
80
|
+
*/
|
|
81
|
+
interface IAsyncLocalStorage<T> {
|
|
82
|
+
run<R>(store: T, fn: () => R): R;
|
|
83
|
+
getStore(): T | undefined;
|
|
87
84
|
}
|
|
88
85
|
//#endregion
|
|
89
|
-
//#region src/
|
|
90
|
-
declare
|
|
91
|
-
declare
|
|
92
|
-
declare const inject: Injectors['inject'];
|
|
93
|
-
declare const optional: Injectors['optional'];
|
|
94
|
-
declare const wrapSyncInit: Injectors['wrapSyncInit'];
|
|
95
|
-
declare const provideFactoryContext: Injectors['provideFactoryContext'];
|
|
86
|
+
//#region src/internal/context/async-local-storage.d.mts
|
|
87
|
+
declare function createAsyncLocalStorage<T>(): IAsyncLocalStorage<T>;
|
|
88
|
+
declare function isUsingNativeAsyncLocalStorage(): boolean;
|
|
96
89
|
//#endregion
|
|
97
90
|
//#region src/internal/context/resolution-context.d.mts
|
|
98
91
|
/**
|
|
@@ -132,53 +125,6 @@ declare function getCurrentResolutionContext(): ResolutionContextData | undefine
|
|
|
132
125
|
*/
|
|
133
126
|
declare function withoutResolutionContext<T>(fn: () => T): T;
|
|
134
127
|
//#endregion
|
|
135
|
-
//#region src/internal/holder/singleton-storage.d.mts
|
|
136
|
-
/**
|
|
137
|
-
* Storage implementation for Singleton-scoped services.
|
|
138
|
-
*
|
|
139
|
-
* Wraps a HolderManager instance and provides the IHolderStorage interface.
|
|
140
|
-
* This allows the InstanceResolver to work with singleton storage
|
|
141
|
-
* using the same interface as request-scoped storage.
|
|
142
|
-
*/
|
|
143
|
-
declare class SingletonStorage implements IHolderStorage {
|
|
144
|
-
private readonly manager;
|
|
145
|
-
readonly scope = InjectableScope.Singleton;
|
|
146
|
-
constructor(manager: HolderManager);
|
|
147
|
-
get<T = unknown>(instanceName: string): HolderGetResult<T>;
|
|
148
|
-
set(instanceName: string, holder: InstanceHolder): void;
|
|
149
|
-
delete(instanceName: string): boolean;
|
|
150
|
-
createHolder<T>(instanceName: string, type: InjectableType, deps: Set<string>): [ReturnType<typeof Promise.withResolvers<[undefined, T]>>, InstanceHolder<T>];
|
|
151
|
-
handles(scope: InjectableScope): boolean;
|
|
152
|
-
getAllNames(): string[];
|
|
153
|
-
forEach(callback: (name: string, holder: InstanceHolder) => void): void;
|
|
154
|
-
findByInstance(instance: unknown): InstanceHolder | null;
|
|
155
|
-
findDependents(instanceName: string): string[];
|
|
156
|
-
}
|
|
157
|
-
//#endregion
|
|
158
|
-
//#region src/internal/holder/request-storage.d.mts
|
|
159
|
-
/**
|
|
160
|
-
* Storage implementation for Request-scoped services.
|
|
161
|
-
*
|
|
162
|
-
* Wraps a RequestContext instance from a ScopedContainer and provides
|
|
163
|
-
* the IHolderStorage interface. This allows the InstanceResolver to work
|
|
164
|
-
* with request-scoped storage using the same interface as singleton storage.
|
|
165
|
-
*/
|
|
166
|
-
declare class RequestStorage implements IHolderStorage {
|
|
167
|
-
private readonly contextHolder;
|
|
168
|
-
private readonly holderManager;
|
|
169
|
-
readonly scope = InjectableScope.Request;
|
|
170
|
-
constructor(contextHolder: RequestContext, holderManager: BaseHolderManager);
|
|
171
|
-
get<T = unknown>(instanceName: string): HolderGetResult<T>;
|
|
172
|
-
set(instanceName: string, holder: InstanceHolder): void;
|
|
173
|
-
delete(instanceName: string): boolean;
|
|
174
|
-
createHolder<T>(instanceName: string, type: InjectableType, deps: Set<string>): [ReturnType<typeof Promise.withResolvers<[undefined, T]>>, InstanceHolder<T>];
|
|
175
|
-
handles(scope: InjectableScope): boolean;
|
|
176
|
-
getAllNames(): string[];
|
|
177
|
-
forEach(callback: (name: string, holder: InstanceHolder) => void): void;
|
|
178
|
-
findByInstance(instance: unknown): InstanceHolder | null;
|
|
179
|
-
findDependents(instanceName: string): string[];
|
|
180
|
-
}
|
|
181
|
-
//#endregion
|
|
182
128
|
//#region src/internal/lifecycle/circular-detector.d.mts
|
|
183
129
|
/**
|
|
184
130
|
* Detects circular dependencies by analyzing the waitingFor relationships
|
|
@@ -213,140 +159,34 @@ declare class CircularDetector {
|
|
|
213
159
|
static formatCycle(cycle: string[]): string;
|
|
214
160
|
}
|
|
215
161
|
//#endregion
|
|
216
|
-
//#region src/internal/
|
|
162
|
+
//#region src/internal/stub-factory-class.d.mts
|
|
217
163
|
/**
|
|
218
|
-
*
|
|
164
|
+
* Stub factory class used when registering InjectionTokens without a real class implementation.
|
|
165
|
+
* This is used in ScopedContainer.addInstance() to allow registering tokens that don't have
|
|
166
|
+
* a corresponding class, while preventing accidental instantiation.
|
|
219
167
|
*
|
|
220
|
-
*
|
|
221
|
-
* managing the instantiation lifecycle including sync initialization retries
|
|
222
|
-
* and lifecycle hook invocation (onServiceInit, onServiceDestroy).
|
|
168
|
+
* @internal
|
|
223
169
|
*/
|
|
224
|
-
declare class
|
|
225
|
-
|
|
226
|
-
constructor(injectors: Injectors);
|
|
227
|
-
/**
|
|
228
|
-
* Instantiates a service based on its registry record.
|
|
229
|
-
* @param ctx The factory context for dependency injection
|
|
230
|
-
* @param record The factory record from the registry
|
|
231
|
-
* @param args Optional arguments for the service
|
|
232
|
-
* @returns Promise resolving to [undefined, instance] or [error]
|
|
233
|
-
*/
|
|
234
|
-
instantiateService<T>(ctx: FactoryContext, record: FactoryRecord<T, any>, args?: any): Promise<[undefined, T] | [DIError]>;
|
|
235
|
-
/**
|
|
236
|
-
* Instantiates a class-based service (Injectable decorator).
|
|
237
|
-
* @param ctx The factory context for dependency injection
|
|
238
|
-
* @param record The factory record from the registry
|
|
239
|
-
* @param args Optional arguments for the service constructor
|
|
240
|
-
* @returns Promise resolving to [undefined, instance] or [error]
|
|
241
|
-
*/
|
|
242
|
-
private instantiateClass;
|
|
243
|
-
/**
|
|
244
|
-
* Instantiates a factory-based service (Factory decorator).
|
|
245
|
-
* @param ctx The factory context for dependency injection
|
|
246
|
-
* @param record The factory record from the registry
|
|
247
|
-
* @param args Optional arguments for the factory
|
|
248
|
-
* @returns Promise resolving to [undefined, instance] or [error]
|
|
249
|
-
*/
|
|
250
|
-
private instantiateFactory;
|
|
170
|
+
declare class StubFactoryClass {
|
|
171
|
+
constructor();
|
|
251
172
|
}
|
|
252
173
|
//#endregion
|
|
253
|
-
//#region src/
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
private
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
constructor(registry: Registry, manager: HolderManager, instantiator: Instantiator, tokenProcessor: TokenProcessor, logger: (Console | null) | undefined, serviceLocator: ServiceLocator);
|
|
269
|
-
/**
|
|
270
|
-
* Resolves an instance for the given token and arguments.
|
|
271
|
-
* This method is used for singleton and transient services.
|
|
272
|
-
*
|
|
273
|
-
* @param token The injection token
|
|
274
|
-
* @param args Optional arguments
|
|
275
|
-
* @param contextContainer The container to use for creating FactoryContext
|
|
276
|
-
*/
|
|
277
|
-
resolveInstance(token: AnyInjectableType, args: any, contextContainer: IContainer): Promise<[undefined, any] | [DIError]>;
|
|
278
|
-
/**
|
|
279
|
-
* Resolves a request-scoped instance for a ScopedContainer.
|
|
280
|
-
* The service will be stored in the ScopedContainer's request context.
|
|
281
|
-
*
|
|
282
|
-
* @param token The injection token
|
|
283
|
-
* @param args Optional arguments
|
|
284
|
-
* @param scopedContainer The ScopedContainer that owns the request context
|
|
285
|
-
*/
|
|
286
|
-
resolveRequestScopedInstance(token: AnyInjectableType, args: any, scopedContainer: ScopedContainer): Promise<[undefined, any] | [DIError]>;
|
|
287
|
-
/**
|
|
288
|
-
* Unified resolution method that works with any IHolderStorage.
|
|
289
|
-
* This eliminates duplication between singleton and request-scoped resolution.
|
|
290
|
-
*
|
|
291
|
-
* IMPORTANT: The check-and-store logic is carefully designed to avoid race conditions.
|
|
292
|
-
* The storage check and holder creation must happen synchronously (no awaits between).
|
|
293
|
-
*
|
|
294
|
-
* @param token The injection token
|
|
295
|
-
* @param args Optional arguments
|
|
296
|
-
* @param contextContainer The container for FactoryContext
|
|
297
|
-
* @param storage The storage strategy to use
|
|
298
|
-
* @param scopedContainer Optional scoped container for request-scoped services
|
|
299
|
-
*/
|
|
300
|
-
private resolveWithStorage;
|
|
301
|
-
/**
|
|
302
|
-
* Handles storage error states (destroying, error, etc.).
|
|
303
|
-
* Returns a result if handled, null if should proceed with creation.
|
|
304
|
-
*/
|
|
305
|
-
private handleStorageError;
|
|
306
|
-
/**
|
|
307
|
-
* Creates a new instance and stores it using the provided storage strategy.
|
|
308
|
-
* This unified method replaces instantiateServiceFromRegistry and createRequestScopedInstance.
|
|
309
|
-
*
|
|
310
|
-
* For transient services, the instance is created but not stored (no caching).
|
|
311
|
-
*/
|
|
312
|
-
private createAndStoreInstance;
|
|
313
|
-
/**
|
|
314
|
-
* Creates a transient instance without storage or locking.
|
|
315
|
-
* Each call creates a new instance.
|
|
316
|
-
*/
|
|
317
|
-
private createTransientInstance;
|
|
318
|
-
/**
|
|
319
|
-
* Gets a synchronous instance (for sync operations).
|
|
320
|
-
*/
|
|
321
|
-
getSyncInstance<Instance, Schema extends InjectionTokenSchemaType | undefined>(token: AnyInjectableType, args: Schema extends ZodObject ? z.input<Schema> : Schema extends ZodOptional<ZodObject> ? z.input<Schema> | undefined : undefined, contextContainer: IContainer): Instance | null;
|
|
322
|
-
/**
|
|
323
|
-
* Internal method to resolve token args and create instance name.
|
|
324
|
-
* Handles factory token resolution and validation.
|
|
325
|
-
*/
|
|
326
|
-
private resolveTokenAndPrepareInstanceName;
|
|
327
|
-
/**
|
|
328
|
-
* Waits for an instance holder to be ready and returns the appropriate result.
|
|
329
|
-
* Uses the shared utility from BaseHolderManager.
|
|
330
|
-
* Passes the current resolution context for circular dependency detection.
|
|
331
|
-
*/
|
|
332
|
-
private waitForInstanceReady;
|
|
333
|
-
/**
|
|
334
|
-
* Handles the result of service instantiation.
|
|
335
|
-
*/
|
|
336
|
-
private handleInstantiationResult;
|
|
337
|
-
/**
|
|
338
|
-
* Handles successful service instantiation.
|
|
339
|
-
*/
|
|
340
|
-
private handleInstantiationSuccess;
|
|
341
|
-
/**
|
|
342
|
-
* Handles service instantiation errors.
|
|
343
|
-
*/
|
|
344
|
-
private handleInstantiationError;
|
|
345
|
-
/**
|
|
346
|
-
* Creates a factory context for dependency injection during service instantiation.
|
|
347
|
-
*/
|
|
348
|
-
private createFactoryContext;
|
|
174
|
+
//#region src/symbols/injectable-token.d.mts
|
|
175
|
+
declare const InjectableTokenMeta: unique symbol;
|
|
176
|
+
//#endregion
|
|
177
|
+
//#region src/event-emitter.d.mts
|
|
178
|
+
type EventsConfig = {
|
|
179
|
+
[event: string]: any[];
|
|
180
|
+
};
|
|
181
|
+
type EventsNames<Events extends EventsConfig> = Exclude<keyof Events, symbol | number>;
|
|
182
|
+
type EventsArgs<Events extends EventsConfig, Name extends EventsNames<Events>> = Events[Name] extends any[] ? Events[Name] : [];
|
|
183
|
+
declare class EventEmitter<Events extends EventsConfig = {}> {
|
|
184
|
+
private listeners;
|
|
185
|
+
on<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): () => void;
|
|
186
|
+
off<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): void;
|
|
187
|
+
once<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): () => void;
|
|
188
|
+
emit<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, ...args: Args): Promise<any>;
|
|
349
189
|
}
|
|
350
190
|
//#endregion
|
|
351
|
-
export {
|
|
191
|
+
export { AnyInjectableType, BaseInjectionTokenSchemaType, BoundInjectionToken, CircularDetector, ClassType, ClassTypeWithArgument, ClassTypeWithInstance, ClassTypeWithInstanceAndArgument, ClassTypeWithInstanceAndOptionalArgument, ClassTypeWithOptionalArgument, ClassTypeWithoutArguments, ClearAllOptions, Container, DIError, DIErrorCode, EventEmitter, EventsArgs, EventsConfig, EventsNames, Factorable, FactorableWithArgs, Factory, FactoryContext, FactoryInjectionToken, FactoryOptions, FactoryRecord, HolderGetResult, type IAsyncLocalStorage, IContainer, IHolderStorage, InjectRequest, InjectState, Injectable, InjectableOptions, InjectableScope, InjectableTokenMeta, InjectableType, InjectionToken, InjectionTokenSchemaType, InjectionTokenType, Injectors, InstanceDestroyListener, InstanceHolder, InstanceHolderCreated, InstanceHolderCreating, InstanceHolderDestroying, InstanceHolderError, InstanceResolver, InstanceStatus, InvalidationOptions, IsUnion, Join, LifecycleEventBus, NameResolver, OnServiceDestroy, OnServiceInit, OptionalInjectionTokenSchemaType, PopUnion, Registry, ResolutionContextData, ScopeTracker, ScopedContainer, ServiceInitializationContext, ServiceInitializer, ServiceInvalidator, StubFactoryClass, TokenResolver, UnifiedStorage, UnionToArray, UnionToIntersection, UnionToOvlds, asyncInject, createAsyncLocalStorage, defaultInjectors, getCurrentResolutionContext, getInjectableToken, getInjectors, globalRegistry, inject, isUsingNativeAsyncLocalStorage, optional, provideFactoryContext, withResolutionContext, withoutResolutionContext, wrapSyncInit };
|
|
352
192
|
//# sourceMappingURL=index.d.mts.map
|
package/lib/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/utils/default-injectors.mts","../src/utils/get-injectable-token.mts","../src/interfaces/on-service-destroy.interface.mts","../src/interfaces/on-service-init.interface.mts","../src/decorators/factory.decorator.mts","../src/decorators/injectable.decorator.mts","../src/internal/context/async-local-storage.types.mts","../src/internal/context/async-local-storage.mts","../src/internal/context/resolution-context.mts","../src/internal/lifecycle/circular-detector.mts","../src/internal/stub-factory-class.mts","../src/symbols/injectable-token.mts","../src/event-emitter.mts"],"sourcesContent":[],"mappings":"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"}
|
package/lib/index.mjs
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { A as
|
|
2
|
-
import { z } from "zod/v4";
|
|
1
|
+
import { A as Registry, C as withResolutionContext, D as DIError, E as isUsingNativeAsyncLocalStorage, F as InjectableTokenMeta, I as InjectableType, L as InjectableScope, M as BoundInjectionToken, N as FactoryInjectionToken, O as DIErrorCode, P as InjectionToken, S as getCurrentResolutionContext, T as createAsyncLocalStorage, _ as ScopeTracker, a as UnifiedStorage, b as CircularDetector, c as asyncInject, d as optional, f as provideFactoryContext, g as ServiceInitializer, h as ServiceInvalidator, i as LifecycleEventBus, j as globalRegistry, k as Injectable, l as defaultInjectors, m as getInjectors, n as ScopedContainer, o as TokenResolver, p as wrapSyncInit, r as StubFactoryClass, s as getInjectableToken, t as _Container, u as inject, v as NameResolver, w as withoutResolutionContext, x as InstanceStatus, y as InstanceResolver } from "./container-8-z89TyQ.mjs";
|
|
3
2
|
|
|
4
3
|
//#region src/decorators/factory.decorator.mts
|
|
5
|
-
function Factory({ scope = InjectableScope.Singleton, token, registry = globalRegistry } = {}) {
|
|
4
|
+
function Factory({ scope = InjectableScope.Singleton, token, registry = globalRegistry, priority = 0 } = {}) {
|
|
6
5
|
return (target, context) => {
|
|
7
|
-
if (context && context.kind !== "class" || target instanceof Function && !context) throw new Error("[
|
|
6
|
+
if (context && context.kind !== "class" || target instanceof Function && !context) throw new Error("[DI] @Factory decorator can only be used on classes.");
|
|
8
7
|
let injectableToken = token ?? InjectionToken.create(target);
|
|
9
|
-
registry.set(injectableToken, scope, target, InjectableType.Factory);
|
|
8
|
+
registry.set(injectableToken, scope, target, InjectableType.Factory, priority);
|
|
10
9
|
target[InjectableTokenMeta] = injectableToken;
|
|
11
10
|
return target;
|
|
12
11
|
};
|
|
@@ -328,5 +327,5 @@ var EventEmitter = class {
|
|
|
328
327
|
};
|
|
329
328
|
|
|
330
329
|
//#endregion
|
|
331
|
-
export {
|
|
330
|
+
export { BoundInjectionToken, CircularDetector, _Container as Container, DIError, DIErrorCode, _EventEmitter as EventEmitter, Factory, FactoryInjectionToken, Injectable, InjectableScope, InjectableTokenMeta, InjectableType, InjectionToken, InstanceResolver, InstanceStatus, LifecycleEventBus, NameResolver, Registry, ScopeTracker, ScopedContainer, ServiceInitializer, ServiceInvalidator, StubFactoryClass, TokenResolver, UnifiedStorage, asyncInject, createAsyncLocalStorage, defaultInjectors, getCurrentResolutionContext, getInjectableToken, getInjectors, globalRegistry, inject, isUsingNativeAsyncLocalStorage, optional, provideFactoryContext, withResolutionContext, withoutResolutionContext, wrapSyncInit };
|
|
332
331
|
//# sourceMappingURL=index.mjs.map
|
package/lib/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["InjectableScope","InjectableType","
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["InjectableScope","InjectableType","InjectableTokenMeta","InjectionToken","globalRegistry","Factory","scope","Singleton","token","registry","priority","target","context","kind","Function","Error","injectableToken","create","set","Injectable","InjectableScope","scope","Transient","EventEmitter","listeners","Map","on","event","listener","has","set","Set","get","add","off","delete","size","once","args","emit","Promise","all","Array","from","map"],"sources":["../src/decorators/factory.decorator.mts","../src/event-emitter.mts"],"sourcesContent":["import type { Factorable, FactorableWithArgs } from '../interfaces/index.mjs'\nimport type {\n ClassTypeWithInstance,\n InjectionTokenSchemaType,\n} from '../token/injection-token.mjs'\nimport type { Registry } from '../token/registry.mjs'\n\nimport { InjectableScope, InjectableType } from '../enums/index.mjs'\nimport { InjectableTokenMeta } from '../symbols/index.mjs'\nimport { InjectionToken } from '../token/injection-token.mjs'\nimport { globalRegistry } from '../token/registry.mjs'\n\nexport interface FactoryOptions {\n scope?: InjectableScope\n token?: InjectionToken<any, any>\n registry?: Registry\n priority?: number\n}\n\n// #1 Factory without arguments\nexport function Factory<R>(options?: {\n scope?: InjectableScope\n registry?: Registry\n priority?: number\n}): <T extends ClassTypeWithInstance<Factorable<R>>>(\n target: T,\n context?: ClassDecoratorContext,\n) => T\n\n// #2 Factory with typed token\nexport function Factory<R, S>(options: {\n scope?: InjectableScope\n token: InjectionToken<R, S>\n registry?: Registry\n priority?: number\n}): R extends undefined\n ? never\n : S extends InjectionTokenSchemaType\n ? <T extends ClassTypeWithInstance<FactorableWithArgs<R, S>>>(\n target: T,\n context?: ClassDecoratorContext,\n ) => T\n : S extends undefined\n ? <T extends ClassTypeWithInstance<Factorable<R>>>(\n target: T,\n context?: ClassDecoratorContext,\n ) => T\n : never\n\nexport function Factory({\n scope = InjectableScope.Singleton,\n token,\n registry = globalRegistry,\n priority = 0,\n}: FactoryOptions = {}) {\n return <\n T extends ClassTypeWithInstance<\n Factorable<any> | FactorableWithArgs<any, any>\n >,\n >(\n target: T,\n context?: ClassDecoratorContext,\n ): T => {\n if (\n (context && context.kind !== 'class') ||\n (target instanceof Function && !context)\n ) {\n throw new Error(\n '[DI] @Factory decorator can only be used on classes.',\n )\n }\n\n let injectableToken: InjectionToken<any, any> =\n token ?? InjectionToken.create(target)\n\n registry.set(injectableToken, scope, target, InjectableType.Factory, priority)\n\n // @ts-expect-error\n target[InjectableTokenMeta] = injectableToken\n\n return target\n }\n}\n\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable @typescript-eslint/no-empty-object-type */\n/* eslint-disable @typescript-eslint/no-unsafe-function-type */\n\nimport { Injectable } from './decorators/index.mjs'\nimport { InjectableScope } from './enums/index.mjs'\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport type EventsConfig = {\n [event: string]: any[]\n}\nexport type EventsNames<Events extends EventsConfig> = Exclude<\n keyof Events,\n symbol | number\n>\nexport type EventsArgs<\n Events extends EventsConfig,\n Name extends EventsNames<Events>,\n> = Events[Name] extends any[] ? Events[Name] : []\n\n@Injectable({ scope: InjectableScope.Transient })\nexport class EventEmitter<Events extends EventsConfig = {}> {\n private listeners: Map<EventsNames<Events>, Set<Function>> = new Map()\n\n on<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(\n event: E,\n listener: (...args: Args) => void | Promise<void>,\n ) {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set())\n }\n\n this.listeners.get(event)!.add(listener)\n\n return () => {\n this.off(event, listener)\n }\n }\n\n off<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(\n event: E,\n listener: (...args: Args) => void | Promise<void>,\n ) {\n if (!this.listeners.has(event)) {\n return\n }\n\n this.listeners.get(event)!.delete(listener)\n if (this.listeners.get(event)!.size === 0) {\n this.listeners.delete(event)\n }\n }\n\n once<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(\n event: E,\n listener: (...args: Args) => void | Promise<void>,\n ) {\n const off = this.on(event, (...args) => {\n off()\n // @ts-expect-error - This is a valid call\n listener(...args)\n })\n\n return off\n }\n\n async emit<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(\n event: E,\n ...args: Args\n ): Promise<any> {\n if (!this.listeners.has(event)) {\n return\n }\n\n return Promise.all(\n Array.from(this.listeners.get(event)!).map((listener) =>\n listener(...args),\n ),\n )\n }\n}\n"],"mappings":";;;AAiDA,SAAgBK,QAAQ,EACtBC,QAAQN,gBAAgBO,WACxBC,OACAC,WAAWL,gBACXM,WAAW,MACO,EAAE,EAAA;AACpB,SAKEC,QACAC,YAAAA;AAEA,MACE,WAAYA,QAAQC,SAAS,WAC5BF,kBAAkBG,YAAY,CAACF,QAEhC,OAAM,IAAIG,MACR,uDAAA;EAIJ,IAAIC,kBACFR,SAASL,eAAec,OAAON,OAAAA;AAEjCF,WAASS,IAAIF,iBAAiBV,OAAOK,QAAQV,eAAeI,SAASK,SAAAA;AAGrEC,SAAOT,uBAAuBc;AAE9B,SAAOL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OC5DVQ,WAAW,EAAEE,OAAOD,gBAAgBE,WAAU,CAAA;AACxC,IAAMC,eAAN,MAAMA;;;;CACHC,4BAAqD,IAAIC,KAAAA;CAEjEC,GACEC,OACAC,UACA;AACA,MAAI,CAAC,KAAKJ,UAAUK,IAAIF,MAAAA,CACtB,MAAKH,UAAUM,IAAIH,uBAAO,IAAII,KAAAA,CAAAA;AAGhC,OAAKP,UAAUQ,IAAIL,MAAAA,CAAQM,IAAIL,SAAAA;AAE/B,eAAO;AACL,QAAKM,IAAIP,OAAOC,SAAAA;;;CAIpBM,IACEP,OACAC,UACA;AACA,MAAI,CAAC,KAAKJ,UAAUK,IAAIF,MAAAA,CACtB;AAGF,OAAKH,UAAUQ,IAAIL,MAAAA,CAAQQ,OAAOP,SAAAA;AAClC,MAAI,KAAKJ,UAAUQ,IAAIL,MAAAA,CAAQS,SAAS,EACtC,MAAKZ,UAAUW,OAAOR,MAAAA;;CAI1BU,KACEV,OACAC,UACA;EACA,MAAMM,MAAM,KAAKR,GAAGC,QAAQ,GAAGW,SAAAA;AAC7BJ,QAAAA;AAEAN,YAAAA,GAAYU,KAAAA;IACd;AAEA,SAAOJ;;CAGT,MAAMK,KACJZ,OACA,GAAGW,MACW;AACd,MAAI,CAAC,KAAKd,UAAUK,IAAIF,MAAAA,CACtB;AAGF,SAAOa,QAAQC,IACbC,MAAMC,KAAK,KAAKnB,UAAUQ,IAAIL,MAAAA,CAAAA,CAASiB,KAAKhB,aAC1CA,SAAAA,GAAYU,KAAAA,CAAAA,CAAAA"}
|