@navios/di 0.5.1 → 0.6.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 +146 -0
- package/README.md +196 -219
- package/docs/README.md +69 -11
- package/docs/api-reference.md +281 -117
- package/docs/container.md +220 -56
- package/docs/examples/request-scope-example.mts +2 -2
- package/docs/factory.md +3 -8
- package/docs/getting-started.md +37 -8
- package/docs/migration.md +318 -37
- package/docs/request-contexts.md +263 -175
- package/docs/scopes.md +79 -42
- package/lib/browser/index.d.mts +1577 -0
- package/lib/browser/index.d.mts.map +1 -0
- package/lib/browser/index.mjs +3012 -0
- package/lib/browser/index.mjs.map +1 -0
- package/lib/index-S_qX2VLI.d.mts +1211 -0
- package/lib/index-S_qX2VLI.d.mts.map +1 -0
- package/lib/index-fKPuT65j.d.cts +1206 -0
- package/lib/index-fKPuT65j.d.cts.map +1 -0
- package/lib/index.cjs +389 -0
- package/lib/index.cjs.map +1 -0
- package/lib/index.d.cts +376 -0
- package/lib/index.d.cts.map +1 -0
- package/lib/index.d.mts +371 -78
- package/lib/index.d.mts.map +1 -0
- package/lib/index.mjs +325 -63
- package/lib/index.mjs.map +1 -1
- package/lib/testing/index.cjs +9 -0
- package/lib/testing/index.d.cts +2 -0
- package/lib/testing/index.d.mts +2 -2
- package/lib/testing/index.mjs +2 -72
- package/lib/testing-BMGmmxH7.cjs +2895 -0
- package/lib/testing-BMGmmxH7.cjs.map +1 -0
- package/lib/testing-DCXz8AJD.mjs +2655 -0
- package/lib/testing-DCXz8AJD.mjs.map +1 -0
- package/package.json +23 -1
- package/project.json +2 -2
- package/src/__tests__/async-local-storage.browser.spec.mts +240 -0
- package/src/__tests__/async-local-storage.spec.mts +333 -0
- package/src/__tests__/container.spec.mts +30 -25
- package/src/__tests__/e2e.browser.spec.mts +790 -0
- package/src/__tests__/e2e.spec.mts +1222 -0
- package/src/__tests__/errors.spec.mts +6 -6
- package/src/__tests__/factory.spec.mts +1 -1
- package/src/__tests__/get-injectors.spec.mts +1 -1
- package/src/__tests__/injectable.spec.mts +1 -1
- package/src/__tests__/injection-token.spec.mts +1 -1
- package/src/__tests__/library-findings.spec.mts +563 -0
- package/src/__tests__/registry.spec.mts +2 -2
- package/src/__tests__/request-scope.spec.mts +266 -274
- package/src/__tests__/service-instantiator.spec.mts +18 -17
- package/src/__tests__/service-locator-event-bus.spec.mts +9 -9
- package/src/__tests__/service-locator-manager.spec.mts +15 -15
- package/src/__tests__/service-locator.spec.mts +167 -244
- package/src/__tests__/unified-api.spec.mts +27 -27
- package/src/__type-tests__/factory.spec-d.mts +2 -2
- package/src/__type-tests__/inject.spec-d.mts +2 -2
- package/src/__type-tests__/injectable.spec-d.mts +1 -1
- package/src/browser.mts +16 -0
- package/src/container/container.mts +319 -0
- package/src/container/index.mts +2 -0
- package/src/container/scoped-container.mts +350 -0
- package/src/decorators/factory.decorator.mts +4 -4
- package/src/decorators/injectable.decorator.mts +5 -5
- package/src/errors/di-error.mts +13 -7
- package/src/errors/index.mts +0 -8
- package/src/index.mts +156 -15
- package/src/interfaces/container.interface.mts +82 -0
- package/src/interfaces/factory.interface.mts +2 -2
- package/src/interfaces/index.mts +1 -0
- package/src/internal/context/async-local-storage.mts +120 -0
- package/src/internal/context/factory-context.mts +18 -0
- package/src/internal/context/index.mts +3 -0
- package/src/{request-context-holder.mts → internal/context/request-context.mts} +40 -27
- package/src/internal/context/resolution-context.mts +63 -0
- package/src/internal/context/sync-local-storage.mts +51 -0
- package/src/internal/core/index.mts +5 -0
- package/src/internal/core/instance-resolver.mts +641 -0
- package/src/{service-instantiator.mts → internal/core/instantiator.mts} +31 -27
- package/src/internal/core/invalidator.mts +437 -0
- package/src/internal/core/service-locator.mts +202 -0
- package/src/{token-processor.mts → internal/core/token-processor.mts} +79 -60
- package/src/{base-instance-holder-manager.mts → internal/holder/base-holder-manager.mts} +91 -21
- package/src/internal/holder/holder-manager.mts +85 -0
- package/src/internal/holder/holder-storage.interface.mts +116 -0
- package/src/internal/holder/index.mts +6 -0
- package/src/internal/holder/instance-holder.mts +109 -0
- package/src/internal/holder/request-storage.mts +134 -0
- package/src/internal/holder/singleton-storage.mts +105 -0
- package/src/internal/index.mts +4 -0
- package/src/internal/lifecycle/circular-detector.mts +77 -0
- package/src/internal/lifecycle/index.mts +2 -0
- package/src/{service-locator-event-bus.mts → internal/lifecycle/lifecycle-event-bus.mts} +11 -4
- package/src/testing/__tests__/test-container.spec.mts +2 -2
- package/src/testing/test-container.mts +4 -4
- package/src/token/index.mts +2 -0
- package/src/{injection-token.mts → token/injection-token.mts} +1 -1
- package/src/{registry.mts → token/registry.mts} +1 -1
- package/src/utils/get-injectable-token.mts +1 -1
- package/src/utils/get-injectors.mts +32 -15
- package/src/utils/types.mts +1 -1
- package/tsdown.config.mts +67 -0
- package/lib/_tsup-dts-rollup.d.mts +0 -1283
- package/lib/_tsup-dts-rollup.d.ts +0 -1283
- package/lib/chunk-2M576LCC.mjs +0 -2043
- package/lib/chunk-2M576LCC.mjs.map +0 -1
- package/lib/index.d.ts +0 -78
- package/lib/index.js +0 -2127
- package/lib/index.js.map +0 -1
- package/lib/testing/index.d.ts +0 -2
- package/lib/testing/index.js +0 -2060
- package/lib/testing/index.js.map +0 -1
- package/lib/testing/index.mjs.map +0 -1
- package/src/container.mts +0 -227
- package/src/factory-context.mts +0 -8
- package/src/instance-resolver.mts +0 -559
- package/src/request-context-manager.mts +0 -149
- package/src/service-invalidator.mts +0 -429
- package/src/service-locator-instance-holder.mts +0 -70
- package/src/service-locator-manager.mts +0 -85
- package/src/service-locator.mts +0 -246
- package/tsup.config.mts +0 -12
- /package/src/{injector.mts → injectors.mts} +0 -0
package/lib/index.d.cts
ADDED
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
import { $ as FactorableWithArgs, A as globalRegistry, B as ClassTypeWithInstanceAndOptionalArgument, C as InstanceHolderDestroying, D as DIErrorCode, E as DIError, F as BoundInjectionToken, G as InjectionTokenSchemaType, H as ClassTypeWithoutArguments, I as ClassType, J as FactoryContext, K as InjectionTokenType, L as ClassTypeWithArgument, M as InjectableScope, N as AnyInjectableType, O as FactoryRecord, P as BaseInjectionTokenSchemaType, Q as Factorable, R as ClassTypeWithInstance, S as InstanceHolderCreating, T as InstanceStatus, U as FactoryInjectionToken, V as ClassTypeWithOptionalArgument, W as InjectionToken, X as getInjectors, Y as Injectors, Z as IContainer, _ as IHolderStorage, a as TokenProcessor, at as UnionToArray, b as InstanceHolder, c as LifecycleEventBus, d as RequestContext, et as InjectRequest, f as RequestContextHolder, g as HolderGetResult, h as HolderReadyResult, i as ServiceLocator, it as PopUnion, j as InjectableType, k as Registry, l as ScopedContainer, m as BaseHolderManager, n as TestContainer, nt as IsUnion, o as Invalidator, ot as UnionToIntersection, p as createRequestContext, q as OptionalInjectionTokenSchemaType, r as Container, rt as Join, s as HolderManager, st as UnionToOvlds, t as TestBindingBuilder, tt as InjectState, u as DefaultRequestContext, v as InstanceDestroyListener, w as InstanceHolderError, x as InstanceHolderCreated, y as InstanceEffect, z as ClassTypeWithInstanceAndArgument } from "./index-fKPuT65j.cjs";
|
|
2
|
+
import { ZodObject, ZodOptional, z } from "zod/v4";
|
|
3
|
+
|
|
4
|
+
//#region src/utils/get-injectable-token.d.mts
|
|
5
|
+
declare function getInjectableToken<R>(target: ClassType): R extends {
|
|
6
|
+
create(...args: any[]): infer V;
|
|
7
|
+
} ? InjectionToken<V> : InjectionToken<R>;
|
|
8
|
+
//#endregion
|
|
9
|
+
//#region src/interfaces/on-service-init.interface.d.mts
|
|
10
|
+
interface OnServiceInit {
|
|
11
|
+
onServiceInit(): Promise<void> | void;
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
//#region src/interfaces/on-service-destroy.interface.d.mts
|
|
15
|
+
interface OnServiceDestroy {
|
|
16
|
+
onServiceDestroy(): Promise<void> | void;
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/decorators/factory.decorator.d.mts
|
|
20
|
+
interface FactoryOptions {
|
|
21
|
+
scope?: InjectableScope;
|
|
22
|
+
token?: InjectionToken<any, any>;
|
|
23
|
+
registry?: Registry;
|
|
24
|
+
}
|
|
25
|
+
declare function Factory<R>(options?: {
|
|
26
|
+
scope?: InjectableScope;
|
|
27
|
+
registry?: Registry;
|
|
28
|
+
}): <T extends ClassTypeWithInstance<Factorable<R>>>(target: T, context?: ClassDecoratorContext) => T;
|
|
29
|
+
declare function Factory<R, S>(options: {
|
|
30
|
+
scope?: InjectableScope;
|
|
31
|
+
token: InjectionToken<R, S>;
|
|
32
|
+
registry?: Registry;
|
|
33
|
+
}): R extends undefined ? never : S extends InjectionTokenSchemaType ? <T extends ClassTypeWithInstance<FactorableWithArgs<R, S>>>(
|
|
34
|
+
// #2.2.1 Token have a schema
|
|
35
|
+
target: T, context?: ClassDecoratorContext) => T : S extends undefined ? <T extends ClassTypeWithInstance<Factorable<R>>>(
|
|
36
|
+
// #2.3.1 Token without a schema
|
|
37
|
+
target: T, context?: ClassDecoratorContext) => T : never;
|
|
38
|
+
//#endregion
|
|
39
|
+
//#region src/decorators/injectable.decorator.d.mts
|
|
40
|
+
interface InjectableOptions {
|
|
41
|
+
scope?: InjectableScope;
|
|
42
|
+
token?: InjectionToken<any, any>;
|
|
43
|
+
schema?: InjectionTokenSchemaType;
|
|
44
|
+
registry?: Registry;
|
|
45
|
+
}
|
|
46
|
+
declare function Injectable(): <T extends ClassTypeWithoutArguments>(target: T, context?: ClassDecoratorContext) => T;
|
|
47
|
+
declare function Injectable(options: {
|
|
48
|
+
scope?: InjectableScope;
|
|
49
|
+
registry: Registry;
|
|
50
|
+
}): <T extends ClassTypeWithoutArguments>(target: T, context?: ClassDecoratorContext) => T;
|
|
51
|
+
declare function Injectable(options: {
|
|
52
|
+
scope: InjectableScope;
|
|
53
|
+
}): <T extends ClassTypeWithoutArguments>(target: T, context?: ClassDecoratorContext) => T;
|
|
54
|
+
declare function Injectable<Schema extends InjectionTokenSchemaType>(options: {
|
|
55
|
+
scope?: InjectableScope;
|
|
56
|
+
schema: Schema;
|
|
57
|
+
registry?: Registry;
|
|
58
|
+
}): <T extends ClassTypeWithArgument<z.output<Schema>>>(target: T, context?: ClassDecoratorContext) => T;
|
|
59
|
+
declare function Injectable<Type, Schema>(options: {
|
|
60
|
+
scope?: InjectableScope;
|
|
61
|
+
token: InjectionToken<Type, Schema>;
|
|
62
|
+
registry?: Registry;
|
|
63
|
+
}): Schema extends BaseInjectionTokenSchemaType ? Type extends undefined ? <T extends ClassTypeWithArgument<z.output<Schema>>>(
|
|
64
|
+
// #3.1.1 Typeless token
|
|
65
|
+
target: T, context?: ClassDecoratorContext) => T : <T extends ClassTypeWithInstanceAndArgument<Type, z.output<Schema>>>(
|
|
66
|
+
// #3.1.2 Typed token
|
|
67
|
+
target: T, context?: ClassDecoratorContext) => T : Schema extends OptionalInjectionTokenSchemaType ? Type extends undefined ? <T extends ClassTypeWithOptionalArgument<z.output<Schema>>>(
|
|
68
|
+
// #3.2.1 Typeless token
|
|
69
|
+
target: T, context?: ClassDecoratorContext) => T : <T extends ClassTypeWithInstanceAndOptionalArgument<Type, z.output<Schema>>>(target: T, context?: ClassDecoratorContext) => T : Schema extends undefined ? <R extends ClassTypeWithInstance<Type>>(
|
|
70
|
+
// #3.3.1 Token must have a type
|
|
71
|
+
target: R, context?: ClassDecoratorContext) => R : never;
|
|
72
|
+
//#endregion
|
|
73
|
+
//#region src/symbols/injectable-token.d.mts
|
|
74
|
+
declare const InjectableTokenMeta: unique symbol;
|
|
75
|
+
//#endregion
|
|
76
|
+
//#region src/event-emitter.d.mts
|
|
77
|
+
type EventsConfig = {
|
|
78
|
+
[event: string]: any[];
|
|
79
|
+
};
|
|
80
|
+
type EventsNames<Events extends EventsConfig> = Exclude<keyof Events, symbol | number>;
|
|
81
|
+
type EventsArgs<Events extends EventsConfig, Name extends EventsNames<Events>> = Events[Name] extends any[] ? Events[Name] : [];
|
|
82
|
+
interface EventEmitterInterface<Events extends EventsConfig> {
|
|
83
|
+
on<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): () => void;
|
|
84
|
+
emit<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, ...args: Args): void | Promise<void>;
|
|
85
|
+
}
|
|
86
|
+
declare class EventEmitter<Events extends EventsConfig = {}> implements EventEmitterInterface<Events> {
|
|
87
|
+
private listeners;
|
|
88
|
+
on<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): () => void;
|
|
89
|
+
off<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): void;
|
|
90
|
+
once<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): () => void;
|
|
91
|
+
emit<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, ...args: Args): Promise<any>;
|
|
92
|
+
}
|
|
93
|
+
//#endregion
|
|
94
|
+
//#region src/injectors.d.mts
|
|
95
|
+
declare const defaultInjectors: Injectors;
|
|
96
|
+
declare const asyncInject: Injectors['asyncInject'];
|
|
97
|
+
declare const inject: Injectors['inject'];
|
|
98
|
+
declare const optional: Injectors['optional'];
|
|
99
|
+
declare const wrapSyncInit: Injectors['wrapSyncInit'];
|
|
100
|
+
declare const provideFactoryContext: Injectors['provideFactoryContext'];
|
|
101
|
+
//#endregion
|
|
102
|
+
//#region src/internal/context/async-local-storage.d.mts
|
|
103
|
+
/**
|
|
104
|
+
* Cross-platform AsyncLocalStorage wrapper.
|
|
105
|
+
*
|
|
106
|
+
* Provides AsyncLocalStorage on Node.js/Bun and falls back to
|
|
107
|
+
* a synchronous-only polyfill in browser environments.
|
|
108
|
+
*/
|
|
109
|
+
/**
|
|
110
|
+
* Interface matching the subset of AsyncLocalStorage API we use.
|
|
111
|
+
*/
|
|
112
|
+
interface IAsyncLocalStorage<T> {
|
|
113
|
+
run<R>(store: T, fn: () => R): R;
|
|
114
|
+
getStore(): T | undefined;
|
|
115
|
+
}
|
|
116
|
+
//#endregion
|
|
117
|
+
//#region src/internal/context/resolution-context.d.mts
|
|
118
|
+
/**
|
|
119
|
+
* Data stored in the resolution context during service instantiation.
|
|
120
|
+
*/
|
|
121
|
+
interface ResolutionContextData {
|
|
122
|
+
/** The holder that is currently being instantiated */
|
|
123
|
+
waiterHolder: InstanceHolder;
|
|
124
|
+
/** Function to get a holder by name (for cycle detection) */
|
|
125
|
+
getHolder: (name: string) => InstanceHolder | undefined;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* AsyncLocalStorage for tracking the current resolution context.
|
|
129
|
+
*
|
|
130
|
+
* This allows tracking which service is being instantiated even across
|
|
131
|
+
* async boundaries (like when inject() is called inside a constructor).
|
|
132
|
+
* Essential for circular dependency detection.
|
|
133
|
+
*/
|
|
134
|
+
declare const resolutionContext: IAsyncLocalStorage<ResolutionContextData>;
|
|
135
|
+
/**
|
|
136
|
+
* Runs a function within a resolution context.
|
|
137
|
+
*
|
|
138
|
+
* The context tracks which holder is currently being instantiated,
|
|
139
|
+
* allowing circular dependency detection to work correctly.
|
|
140
|
+
*
|
|
141
|
+
* @param waiterHolder The holder being instantiated
|
|
142
|
+
* @param getHolder Function to retrieve holders by name
|
|
143
|
+
* @param fn The function to run within the context
|
|
144
|
+
*/
|
|
145
|
+
declare function withResolutionContext<T>(waiterHolder: InstanceHolder, getHolder: (name: string) => InstanceHolder | undefined, fn: () => T): T;
|
|
146
|
+
/**
|
|
147
|
+
* Gets the current resolution context, if any.
|
|
148
|
+
*
|
|
149
|
+
* Returns undefined if we're not inside a resolution context
|
|
150
|
+
* (e.g., when resolving a top-level service that has no parent).
|
|
151
|
+
*/
|
|
152
|
+
declare function getCurrentResolutionContext(): ResolutionContextData | undefined;
|
|
153
|
+
/**
|
|
154
|
+
* Runs a function outside any resolution context.
|
|
155
|
+
*
|
|
156
|
+
* This is useful for async injections that should not participate
|
|
157
|
+
* in circular dependency detection since they don't block.
|
|
158
|
+
*
|
|
159
|
+
* @param fn The function to run without resolution context
|
|
160
|
+
*/
|
|
161
|
+
declare function withoutResolutionContext<T>(fn: () => T): T;
|
|
162
|
+
//#endregion
|
|
163
|
+
//#region src/internal/holder/singleton-storage.d.mts
|
|
164
|
+
/**
|
|
165
|
+
* Storage implementation for Singleton-scoped services.
|
|
166
|
+
*
|
|
167
|
+
* Wraps a HolderManager instance and provides the IHolderStorage interface.
|
|
168
|
+
* This allows the InstanceResolver to work with singleton storage
|
|
169
|
+
* using the same interface as request-scoped storage.
|
|
170
|
+
*/
|
|
171
|
+
declare class SingletonStorage implements IHolderStorage {
|
|
172
|
+
private readonly manager;
|
|
173
|
+
readonly scope = InjectableScope.Singleton;
|
|
174
|
+
constructor(manager: HolderManager);
|
|
175
|
+
get<T = unknown>(instanceName: string): HolderGetResult<T>;
|
|
176
|
+
set(instanceName: string, holder: InstanceHolder): void;
|
|
177
|
+
delete(instanceName: string): boolean;
|
|
178
|
+
createHolder<T>(instanceName: string, type: InjectableType, deps: Set<string>): [ReturnType<typeof Promise.withResolvers<[undefined, T]>>, InstanceHolder<T>];
|
|
179
|
+
handles(scope: InjectableScope): boolean;
|
|
180
|
+
getAllNames(): string[];
|
|
181
|
+
forEach(callback: (name: string, holder: InstanceHolder) => void): void;
|
|
182
|
+
findByInstance(instance: unknown): InstanceHolder | null;
|
|
183
|
+
findDependents(instanceName: string): string[];
|
|
184
|
+
}
|
|
185
|
+
//#endregion
|
|
186
|
+
//#region src/internal/holder/request-storage.d.mts
|
|
187
|
+
/**
|
|
188
|
+
* Storage implementation for Request-scoped services.
|
|
189
|
+
*
|
|
190
|
+
* Wraps a RequestContext instance from a ScopedContainer and provides
|
|
191
|
+
* the IHolderStorage interface. This allows the InstanceResolver to work
|
|
192
|
+
* with request-scoped storage using the same interface as singleton storage.
|
|
193
|
+
*/
|
|
194
|
+
declare class RequestStorage implements IHolderStorage {
|
|
195
|
+
private readonly contextHolder;
|
|
196
|
+
private readonly holderManager;
|
|
197
|
+
readonly scope = InjectableScope.Request;
|
|
198
|
+
constructor(contextHolder: RequestContext, holderManager: BaseHolderManager);
|
|
199
|
+
get<T = unknown>(instanceName: string): HolderGetResult<T>;
|
|
200
|
+
set(instanceName: string, holder: InstanceHolder): void;
|
|
201
|
+
delete(instanceName: string): boolean;
|
|
202
|
+
createHolder<T>(instanceName: string, type: InjectableType, deps: Set<string>): [ReturnType<typeof Promise.withResolvers<[undefined, T]>>, InstanceHolder<T>];
|
|
203
|
+
handles(scope: InjectableScope): boolean;
|
|
204
|
+
getAllNames(): string[];
|
|
205
|
+
forEach(callback: (name: string, holder: InstanceHolder) => void): void;
|
|
206
|
+
findByInstance(instance: unknown): InstanceHolder | null;
|
|
207
|
+
findDependents(instanceName: string): string[];
|
|
208
|
+
}
|
|
209
|
+
//#endregion
|
|
210
|
+
//#region src/internal/lifecycle/circular-detector.d.mts
|
|
211
|
+
/**
|
|
212
|
+
* Detects circular dependencies by analyzing the waitingFor relationships
|
|
213
|
+
* between service holders.
|
|
214
|
+
*
|
|
215
|
+
* Uses BFS to traverse the waitingFor graph starting from a target holder
|
|
216
|
+
* and checks if following the chain leads back to the waiter, indicating a circular dependency.
|
|
217
|
+
*/
|
|
218
|
+
declare class CircularDetector {
|
|
219
|
+
/**
|
|
220
|
+
* Detects if waiting for `targetName` from `waiterName` would create a cycle.
|
|
221
|
+
*
|
|
222
|
+
* This works by checking if `targetName` (or any holder in its waitingFor chain)
|
|
223
|
+
* is currently waiting for `waiterName`. If so, waiting would create a deadlock.
|
|
224
|
+
*
|
|
225
|
+
* @param waiterName The name of the holder that wants to wait
|
|
226
|
+
* @param targetName The name of the holder being waited on
|
|
227
|
+
* @param getHolder Function to retrieve a holder by name
|
|
228
|
+
* @returns The cycle path if a cycle is detected, null otherwise
|
|
229
|
+
*/
|
|
230
|
+
static detectCycle(waiterName: string, targetName: string, getHolder: (name: string) => InstanceHolder | undefined): string[] | null;
|
|
231
|
+
/**
|
|
232
|
+
* Formats a cycle path into a human-readable string.
|
|
233
|
+
*
|
|
234
|
+
* @param cycle The cycle path (array of service names)
|
|
235
|
+
* @returns Formatted string like "ServiceA -> ServiceB -> ServiceA"
|
|
236
|
+
*/
|
|
237
|
+
static formatCycle(cycle: string[]): string;
|
|
238
|
+
}
|
|
239
|
+
//#endregion
|
|
240
|
+
//#region src/internal/core/instantiator.d.mts
|
|
241
|
+
/**
|
|
242
|
+
* Creates service instances from registry records.
|
|
243
|
+
*
|
|
244
|
+
* Handles both class-based (@Injectable) and factory-based (@Factory) services,
|
|
245
|
+
* managing the instantiation lifecycle including sync initialization retries
|
|
246
|
+
* and lifecycle hook invocation (onServiceInit, onServiceDestroy).
|
|
247
|
+
*/
|
|
248
|
+
declare class Instantiator {
|
|
249
|
+
private readonly injectors;
|
|
250
|
+
constructor(injectors: Injectors);
|
|
251
|
+
/**
|
|
252
|
+
* Instantiates a service based on its registry record.
|
|
253
|
+
* @param ctx The factory context for dependency injection
|
|
254
|
+
* @param record The factory record from the registry
|
|
255
|
+
* @param args Optional arguments for the service
|
|
256
|
+
* @returns Promise resolving to [undefined, instance] or [error]
|
|
257
|
+
*/
|
|
258
|
+
instantiateService<T>(ctx: FactoryContext, record: FactoryRecord<T, any>, args?: any): Promise<[undefined, T] | [DIError]>;
|
|
259
|
+
/**
|
|
260
|
+
* Instantiates a class-based service (Injectable decorator).
|
|
261
|
+
* @param ctx The factory context for dependency injection
|
|
262
|
+
* @param record The factory record from the registry
|
|
263
|
+
* @param args Optional arguments for the service constructor
|
|
264
|
+
* @returns Promise resolving to [undefined, instance] or [error]
|
|
265
|
+
*/
|
|
266
|
+
private instantiateClass;
|
|
267
|
+
/**
|
|
268
|
+
* Instantiates a factory-based service (Factory decorator).
|
|
269
|
+
* @param ctx The factory context for dependency injection
|
|
270
|
+
* @param record The factory record from the registry
|
|
271
|
+
* @param args Optional arguments for the factory
|
|
272
|
+
* @returns Promise resolving to [undefined, instance] or [error]
|
|
273
|
+
*/
|
|
274
|
+
private instantiateFactory;
|
|
275
|
+
}
|
|
276
|
+
//#endregion
|
|
277
|
+
//#region src/internal/core/instance-resolver.d.mts
|
|
278
|
+
/**
|
|
279
|
+
* Resolves instances from tokens, handling caching, creation, and scope rules.
|
|
280
|
+
*
|
|
281
|
+
* Uses the Storage Strategy pattern for unified singleton/request-scoped handling.
|
|
282
|
+
* Coordinates with Instantiator for actual service creation.
|
|
283
|
+
*/
|
|
284
|
+
declare class InstanceResolver {
|
|
285
|
+
private readonly registry;
|
|
286
|
+
private readonly manager;
|
|
287
|
+
private readonly instantiator;
|
|
288
|
+
private readonly tokenProcessor;
|
|
289
|
+
private readonly logger;
|
|
290
|
+
private readonly serviceLocator;
|
|
291
|
+
private readonly singletonStorage;
|
|
292
|
+
constructor(registry: Registry, manager: HolderManager, instantiator: Instantiator, tokenProcessor: TokenProcessor, logger: (Console | null) | undefined, serviceLocator: ServiceLocator);
|
|
293
|
+
/**
|
|
294
|
+
* Resolves an instance for the given token and arguments.
|
|
295
|
+
* This method is used for singleton and transient services.
|
|
296
|
+
*
|
|
297
|
+
* @param token The injection token
|
|
298
|
+
* @param args Optional arguments
|
|
299
|
+
* @param contextContainer The container to use for creating FactoryContext
|
|
300
|
+
*/
|
|
301
|
+
resolveInstance(token: AnyInjectableType, args: any, contextContainer: IContainer): Promise<[undefined, any] | [DIError]>;
|
|
302
|
+
/**
|
|
303
|
+
* Resolves a request-scoped instance for a ScopedContainer.
|
|
304
|
+
* The service will be stored in the ScopedContainer's request context.
|
|
305
|
+
*
|
|
306
|
+
* @param token The injection token
|
|
307
|
+
* @param args Optional arguments
|
|
308
|
+
* @param scopedContainer The ScopedContainer that owns the request context
|
|
309
|
+
*/
|
|
310
|
+
resolveRequestScopedInstance(token: AnyInjectableType, args: any, scopedContainer: ScopedContainer): Promise<[undefined, any] | [DIError]>;
|
|
311
|
+
/**
|
|
312
|
+
* Unified resolution method that works with any IHolderStorage.
|
|
313
|
+
* This eliminates duplication between singleton and request-scoped resolution.
|
|
314
|
+
*
|
|
315
|
+
* IMPORTANT: The check-and-store logic is carefully designed to avoid race conditions.
|
|
316
|
+
* The storage check and holder creation must happen synchronously (no awaits between).
|
|
317
|
+
*
|
|
318
|
+
* @param token The injection token
|
|
319
|
+
* @param args Optional arguments
|
|
320
|
+
* @param contextContainer The container for FactoryContext
|
|
321
|
+
* @param storage The storage strategy to use
|
|
322
|
+
* @param scopedContainer Optional scoped container for request-scoped services
|
|
323
|
+
*/
|
|
324
|
+
private resolveWithStorage;
|
|
325
|
+
/**
|
|
326
|
+
* Handles storage error states (destroying, error, etc.).
|
|
327
|
+
* Returns a result if handled, null if should proceed with creation.
|
|
328
|
+
*/
|
|
329
|
+
private handleStorageError;
|
|
330
|
+
/**
|
|
331
|
+
* Creates a new instance and stores it using the provided storage strategy.
|
|
332
|
+
* This unified method replaces instantiateServiceFromRegistry and createRequestScopedInstance.
|
|
333
|
+
*
|
|
334
|
+
* For transient services, the instance is created but not stored (no caching).
|
|
335
|
+
*/
|
|
336
|
+
private createAndStoreInstance;
|
|
337
|
+
/**
|
|
338
|
+
* Creates a transient instance without storage or locking.
|
|
339
|
+
* Each call creates a new instance.
|
|
340
|
+
*/
|
|
341
|
+
private createTransientInstance;
|
|
342
|
+
/**
|
|
343
|
+
* Gets a synchronous instance (for sync operations).
|
|
344
|
+
*/
|
|
345
|
+
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;
|
|
346
|
+
/**
|
|
347
|
+
* Internal method to resolve token args and create instance name.
|
|
348
|
+
* Handles factory token resolution and validation.
|
|
349
|
+
*/
|
|
350
|
+
private resolveTokenAndPrepareInstanceName;
|
|
351
|
+
/**
|
|
352
|
+
* Waits for an instance holder to be ready and returns the appropriate result.
|
|
353
|
+
* Uses the shared utility from BaseHolderManager.
|
|
354
|
+
* Passes the current resolution context for circular dependency detection.
|
|
355
|
+
*/
|
|
356
|
+
private waitForInstanceReady;
|
|
357
|
+
/**
|
|
358
|
+
* Handles the result of service instantiation.
|
|
359
|
+
*/
|
|
360
|
+
private handleInstantiationResult;
|
|
361
|
+
/**
|
|
362
|
+
* Handles successful service instantiation.
|
|
363
|
+
*/
|
|
364
|
+
private handleInstantiationSuccess;
|
|
365
|
+
/**
|
|
366
|
+
* Handles service instantiation errors.
|
|
367
|
+
*/
|
|
368
|
+
private handleInstantiationError;
|
|
369
|
+
/**
|
|
370
|
+
* Creates a factory context for dependency injection during service instantiation.
|
|
371
|
+
*/
|
|
372
|
+
private createFactoryContext;
|
|
373
|
+
}
|
|
374
|
+
//#endregion
|
|
375
|
+
export { type AnyInjectableType, BaseHolderManager, BoundInjectionToken, CircularDetector, type ClassType, type ClassTypeWithArgument, type ClassTypeWithInstance, type ClassTypeWithInstanceAndArgument, type ClassTypeWithInstanceAndOptionalArgument, type ClassTypeWithOptionalArgument, type ClassTypeWithoutArguments, Container, DIError, DIErrorCode, DefaultRequestContext, EventEmitter, Factorable, FactorableWithArgs, Factory, type FactoryContext, FactoryInjectionToken, FactoryOptions, type FactoryRecord, type HolderGetResult, HolderManager, type HolderReadyResult, IContainer, type IHolderStorage, InjectRequest, InjectState, Injectable, InjectableOptions, InjectableScope, InjectableTokenMeta, InjectableType, InjectionToken, type InjectionTokenSchemaType, type InjectionTokenType, Injectors, type InstanceDestroyListener, type InstanceEffect, type InstanceHolder, type InstanceHolderCreated, type InstanceHolderCreating, type InstanceHolderDestroying, type InstanceHolderError, InstanceResolver, InstanceStatus, Instantiator, Invalidator, IsUnion, Join, LifecycleEventBus, OnServiceDestroy, OnServiceInit, PopUnion, Registry, type RequestContext, type RequestContextHolder, RequestStorage, type ResolutionContextData, ScopedContainer, ServiceLocator, SingletonStorage, TestBindingBuilder, TestContainer, TokenProcessor, UnionToArray, UnionToIntersection, UnionToOvlds, asyncInject, createRequestContext, defaultInjectors, getCurrentResolutionContext, getInjectableToken, getInjectors, globalRegistry, inject, optional, provideFactoryContext, resolutionContext, withResolutionContext, withoutResolutionContext, wrapSyncInit };
|
|
376
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/utils/get-injectable-token.mts","../src/interfaces/on-service-init.interface.mts","../src/interfaces/on-service-destroy.interface.mts","../src/decorators/factory.decorator.mts","../src/decorators/injectable.decorator.mts","../src/symbols/injectable-token.mts","../src/event-emitter.mts","../src/injectors.mts","../src/internal/context/async-local-storage.mts","../src/internal/context/resolution-context.mts","../src/internal/holder/singleton-storage.mts","../src/internal/holder/request-storage.mts","../src/internal/lifecycle/circular-detector.mts","../src/internal/core/instantiator.mts","../src/internal/core/instance-resolver.mts"],"sourcesContent":[],"mappings":"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"}
|