@vielzeug/conduit 1.0.4 → 2.0.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/README.md +50 -64
- package/dist/conduit.cjs +1 -1
- package/dist/conduit.cjs.map +1 -1
- package/dist/conduit.iife.js +1 -1
- package/dist/conduit.iife.js.map +1 -1
- package/dist/conduit.js +1 -1
- package/dist/conduit.js.map +1 -1
- package/dist/container.cjs +1 -1
- package/dist/container.cjs.map +1 -1
- package/dist/container.d.ts +1 -1
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +119 -216
- package/dist/container.js.map +1 -1
- package/dist/errors.cjs +1 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.ts +17 -33
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +18 -23
- package/dist/errors.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -5
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.ts +20 -151
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
- package/dist/_dev.cjs +0 -2
- package/dist/_dev.cjs.map +0 -1
- package/dist/_dev.d.ts +0 -2
- package/dist/_dev.d.ts.map +0 -1
- package/dist/_dev.js +0 -9
- package/dist/_dev.js.map +0 -1
- package/dist/conduit.d.ts +0 -5
- package/dist/conduit.d.ts.map +0 -1
- package/dist/utils.cjs +0 -2
- package/dist/utils.cjs.map +0 -1
- package/dist/utils.d.ts +0 -41
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -62
- package/dist/utils.js.map +0 -1
package/dist/errors.js
CHANGED
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
//#region src/errors.ts
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
function e(e) {
|
|
3
|
+
return e.description ?? "anonymous";
|
|
4
|
+
}
|
|
5
|
+
var t = class e extends Error {
|
|
6
6
|
static is(t) {
|
|
7
7
|
return t instanceof e;
|
|
8
8
|
}
|
|
9
|
+
constructor(e, t) {
|
|
10
|
+
super(e, t), this.name = new.target.name, Object.setPrototypeOf(this, new.target.prototype);
|
|
11
|
+
}
|
|
9
12
|
}, n = class extends t {
|
|
10
13
|
cycle;
|
|
11
14
|
constructor(t) {
|
|
12
15
|
super(`Circular dependency detected: ${t.map(e).join(" -> ")}`), this.cycle = t;
|
|
13
16
|
}
|
|
14
17
|
}, r = class extends t {
|
|
15
|
-
token;
|
|
16
18
|
containerName;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
token;
|
|
20
|
+
constructor(t, n) {
|
|
21
|
+
super(`No provider registered for token: ${e(t)} (in container '${n}')`), this.containerName = n, this.token = t;
|
|
19
22
|
}
|
|
20
23
|
}, i = class extends t {
|
|
21
24
|
token;
|
|
@@ -23,31 +26,23 @@ var e = (e) => e.description ?? "anonymous", t = class e extends Error {
|
|
|
23
26
|
super(`Token "${e(t)}" is already registered.`), this.token = t;
|
|
24
27
|
}
|
|
25
28
|
}, a = class extends t {
|
|
29
|
+
requiredScope;
|
|
26
30
|
token;
|
|
27
|
-
lifetime;
|
|
28
31
|
constructor(t, n) {
|
|
29
|
-
|
|
30
|
-
super(`Token "${e(t)}" cannot be resolved synchronously: ${r}.`), this.token = t, this.lifetime = n;
|
|
32
|
+
super(`Token "${e(t)}" requires scope "${n.description ?? "anonymous"}".`), this.requiredScope = n, this.token = t;
|
|
31
33
|
}
|
|
32
34
|
}, o = class extends t {
|
|
33
|
-
token;
|
|
34
|
-
requiredScope;
|
|
35
|
-
constructor(t, n) {
|
|
36
|
-
let r = n?.description ?? "anonymous";
|
|
37
|
-
super(n ? `Token "${e(t)}" requires scope "${r}" but no matching scope container was found in the hierarchy.` : `Token "${e(t)}" requires a scope container but was resolved from the root.`), this.token = t, this.requiredScope = n;
|
|
38
|
-
}
|
|
39
|
-
}, s = class extends t {
|
|
40
35
|
containerName;
|
|
41
|
-
constructor(e
|
|
42
|
-
super(`Cannot use
|
|
36
|
+
constructor(e) {
|
|
37
|
+
super(`Cannot use disposed container '${e}'.`), this.containerName = e;
|
|
43
38
|
}
|
|
44
|
-
},
|
|
45
|
-
|
|
39
|
+
}, s = class extends t {
|
|
40
|
+
errors;
|
|
46
41
|
constructor(e) {
|
|
47
|
-
super(`Container
|
|
42
|
+
super(`Container disposal failed with ${e.length} cleanup error${e.length === 1 ? "" : "s"}.`), this.errors = e;
|
|
48
43
|
}
|
|
49
44
|
};
|
|
50
45
|
//#endregion
|
|
51
|
-
export { n as ConduitCircularDependencyError, s as ConduitDisposedError, i as ConduitDuplicateRegistrationError, t as ConduitError,
|
|
46
|
+
export { n as ConduitCircularDependencyError, s as ConduitDisposeError, o as ConduitDisposedError, i as ConduitDuplicateRegistrationError, t as ConduitError, r as ConduitProviderNotFoundError, a as ConduitScopedResolutionError, e as tokenName };
|
|
52
47
|
|
|
53
48
|
//# sourceMappingURL=errors.js.map
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","names":[],"sources":["../src/errors.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"errors.js","names":[],"sources":["../src/errors.ts"],"sourcesContent":["import type { ScopeToken, Token } from './types.js';\n\nexport function tokenName(token: Token<unknown>): string {\n return token.description ?? 'anonymous';\n}\n\nexport class ConduitError extends Error {\n static is(error: unknown): error is ConduitError {\n return error instanceof ConduitError;\n }\n\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class ConduitCircularDependencyError extends ConduitError {\n readonly cycle: Token<unknown>[];\n\n constructor(cycle: Token<unknown>[]) {\n super(`Circular dependency detected: ${cycle.map(tokenName).join(' -> ')}`);\n this.cycle = cycle;\n }\n}\n\nexport class ConduitProviderNotFoundError extends ConduitError {\n readonly containerName: string;\n readonly token: Token<unknown>;\n\n constructor(token: Token<unknown>, containerName: string) {\n super(`No provider registered for token: ${tokenName(token)} (in container '${containerName}')`);\n this.containerName = containerName;\n this.token = token;\n }\n}\n\nexport class ConduitDuplicateRegistrationError extends ConduitError {\n readonly token: Token<unknown>;\n\n constructor(token: Token<unknown>) {\n super(`Token \"${tokenName(token)}\" is already registered.`);\n this.token = token;\n }\n}\n\nexport class ConduitScopedResolutionError extends ConduitError {\n readonly requiredScope: ScopeToken;\n readonly token: Token<unknown>;\n\n constructor(token: Token<unknown>, requiredScope: ScopeToken) {\n super(`Token \"${tokenName(token)}\" requires scope \"${requiredScope.description ?? 'anonymous'}\".`);\n this.requiredScope = requiredScope;\n this.token = token;\n }\n}\n\nexport class ConduitDisposedError extends ConduitError {\n readonly containerName: string;\n\n constructor(containerName: string) {\n super(`Cannot use disposed container '${containerName}'.`);\n this.containerName = containerName;\n }\n}\n\nexport class ConduitDisposeError extends ConduitError {\n readonly errors: unknown[];\n\n constructor(errors: unknown[]) {\n super(`Container disposal failed with ${errors.length} cleanup error${errors.length === 1 ? '' : 's'}.`);\n this.errors = errors;\n }\n}\n"],"mappings":";AAEA,SAAgB,EAAU,GAA+B;CACvD,OAAO,EAAM,eAAe;AAC9B;AAEA,IAAa,IAAb,MAAa,UAAqB,MAAM;CACtC,OAAO,GAAG,GAAuC;EAC/C,OAAO,aAAiB;CAC1B;CAEA,YAAY,GAAiB,GAAwB;EAGnD,AAFA,MAAM,GAAS,CAAO,GACtB,KAAK,OAAO,WAAW,MACvB,OAAO,eAAe,MAAM,WAAW,SAAS;CAClD;AACF,GAEa,IAAb,cAAoD,EAAa;CAC/D;CAEA,YAAY,GAAyB;EAEnC,AADA,MAAM,iCAAiC,EAAM,IAAI,CAAS,CAAC,CAAC,KAAK,MAAM,GAAG,GAC1E,KAAK,QAAQ;CACf;AACF,GAEa,IAAb,cAAkD,EAAa;CAC7D;CACA;CAEA,YAAY,GAAuB,GAAuB;EAGxD,AAFA,MAAM,qCAAqC,EAAU,CAAK,EAAE,kBAAkB,EAAc,GAAG,GAC/F,KAAK,gBAAgB,GACrB,KAAK,QAAQ;CACf;AACF,GAEa,IAAb,cAAuD,EAAa;CAClE;CAEA,YAAY,GAAuB;EAEjC,AADA,MAAM,UAAU,EAAU,CAAK,EAAE,yBAAyB,GAC1D,KAAK,QAAQ;CACf;AACF,GAEa,IAAb,cAAkD,EAAa;CAC7D;CACA;CAEA,YAAY,GAAuB,GAA2B;EAG5D,AAFA,MAAM,UAAU,EAAU,CAAK,EAAE,oBAAoB,EAAc,eAAe,YAAY,GAAG,GACjG,KAAK,gBAAgB,GACrB,KAAK,QAAQ;CACf;AACF,GAEa,IAAb,cAA0C,EAAa;CACrD;CAEA,YAAY,GAAuB;EAEjC,AADA,MAAM,kCAAkC,EAAc,GAAG,GACzD,KAAK,gBAAgB;CACvB;AACF,GAEa,IAAb,cAAyC,EAAa;CACpD;CAEA,YAAY,GAAmB;EAE7B,AADA,MAAM,kCAAkC,EAAO,OAAO,gBAAgB,EAAO,WAAW,IAAI,KAAK,IAAI,EAAE,GACvG,KAAK,SAAS;CAChB;AACF"}
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./errors.cjs"),t=require("./container.cjs"),n=require("./types.cjs")
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./errors.cjs"),t=require("./container.cjs"),n=require("./types.cjs");exports.ConduitCircularDependencyError=e.ConduitCircularDependencyError,exports.ConduitDisposeError=e.ConduitDisposeError,exports.ConduitDisposedError=e.ConduitDisposedError,exports.ConduitDuplicateRegistrationError=e.ConduitDuplicateRegistrationError,exports.ConduitError=e.ConduitError,exports.ConduitProviderNotFoundError=e.ConduitProviderNotFoundError,exports.ConduitScopedResolutionError=e.ConduitScopedResolutionError,exports.createContainer=t.createContainer,exports.scope=n.scope,exports.token=n.token;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export { createContainer } from './container';
|
|
2
|
-
export { ConduitCircularDependencyError,
|
|
3
|
-
export type { Container,
|
|
2
|
+
export { ConduitCircularDependencyError, ConduitDisposeError, ConduitDisposedError, ConduitDuplicateRegistrationError, ConduitError, ConduitProviderNotFoundError, ConduitScopedResolutionError, } from './errors';
|
|
3
|
+
export type { Container, FactoryOptions, InferTokens, Lifetime, ScopeToken, Token, ValueOptions } from './types';
|
|
4
4
|
export { scope, token } from './types';
|
|
5
|
-
export { loadModules, resolveSyncOptional, resolveSyncOrDefault, resolveOptional, resolveOrDefault, tryResolve, trySyncResolve, } from './utils';
|
|
6
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,8BAA8B,EAC9B,oBAAoB,EACpB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,8BAA8B,EAC9B,mBAAmB,EACnB,oBAAoB,EACpB,iCAAiC,EACjC,YAAY,EACZ,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACjH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { ConduitCircularDependencyError as e,
|
|
2
|
-
import { createContainer as
|
|
3
|
-
import { scope as
|
|
4
|
-
|
|
5
|
-
export { e as ConduitCircularDependencyError, t as ConduitDisposedError, n as ConduitDuplicateRegistrationError, r as ConduitError, i as ConduitFrozenError, a as ConduitProviderNotFoundError, o as ConduitScopedResolutionError, s as ConduitSyncResolutionError, c as createContainer, d as loadModules, f as resolveOptional, p as resolveOrDefault, m as resolveSyncOptional, h as resolveSyncOrDefault, l as scope, u as token, g as tryResolve, _ as trySyncResolve };
|
|
1
|
+
import { ConduitCircularDependencyError as e, ConduitDisposeError as t, ConduitDisposedError as n, ConduitDuplicateRegistrationError as r, ConduitError as i, ConduitProviderNotFoundError as a, ConduitScopedResolutionError as o } from "./errors.js";
|
|
2
|
+
import { createContainer as s } from "./container.js";
|
|
3
|
+
import { scope as c, token as l } from "./types.js";
|
|
4
|
+
export { e as ConduitCircularDependencyError, t as ConduitDisposeError, n as ConduitDisposedError, r as ConduitDuplicateRegistrationError, i as ConduitError, a as ConduitProviderNotFoundError, o as ConduitScopedResolutionError, s as createContainer, c as scope, l as token };
|
package/dist/types.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.cjs","names":[],"sources":["../src/types.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"types.cjs","names":[],"sources":["../src/types.ts"],"sourcesContent":["declare const tokenBrand: unique symbol;\ndeclare const scopeBrand: unique symbol;\n\nexport type Token<T = unknown> = symbol & { readonly [tokenBrand]: T };\nexport type ScopeToken = symbol & { readonly [scopeBrand]: true };\n\nexport function token<T>(description: string): Token<T> {\n return Symbol(description) as Token<T>;\n}\n\nexport function scope(name: string): ScopeToken {\n return Symbol(name) as ScopeToken;\n}\n\nexport type Lifetime = 'singleton' | 'transient' | ScopeToken;\n\nexport type ValueOptions<T> = Readonly<{\n dispose?: (value: T) => Promise<void> | void;\n}>;\n\nexport type FactoryOptions<T> = Readonly<{\n dispose?: (value: T) => Promise<void> | void;\n lifetime?: Lifetime;\n}>;\n\nexport type InferTokens<T extends readonly Token<unknown>[]> = {\n [K in keyof T]: T[K] extends Token<infer Value> ? Value : never;\n};\n\nexport interface Container {\n [Symbol.asyncDispose](): Promise<void>;\n readonly disposalSignal: AbortSignal;\n readonly disposed: boolean;\n readonly name: string;\n\n value<T>(token: Token<T>, value: T, options?: ValueOptions<T>): this;\n\n factory<T, Dependencies extends readonly Token<unknown>[]>(\n token: Token<T>,\n dependencies: Dependencies,\n create: (...values: InferTokens<Dependencies>) => Promise<T> | T,\n options?: FactoryOptions<T>,\n ): this;\n\n has<T>(token: Token<T>): boolean;\n resolve<T>(token: Token<T>): Promise<T>;\n validate(): this;\n createScope(scope?: ScopeToken, options?: { name?: string }): Container;\n dispose(): Promise<void>;\n}\n"],"mappings":"AAMA,SAAgB,EAAS,EAA+B,CACtD,OAAO,OAAO,CAAW,CAC3B,CAEA,SAAgB,EAAM,EAA0B,CAC9C,OAAO,OAAO,CAAI,CACpB"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,169 +1,38 @@
|
|
|
1
|
+
declare const tokenBrand: unique symbol;
|
|
2
|
+
declare const scopeBrand: unique symbol;
|
|
1
3
|
export type Token<T = unknown> = symbol & {
|
|
2
|
-
|
|
4
|
+
readonly [tokenBrand]: T;
|
|
3
5
|
};
|
|
4
|
-
export declare function token<T>(description: string): Token<T>;
|
|
5
6
|
export type ScopeToken = symbol & {
|
|
6
|
-
|
|
7
|
+
readonly [scopeBrand]: true;
|
|
7
8
|
};
|
|
8
|
-
|
|
9
|
-
* Creates a named scope token. Factories registered with a ScopeToken lifetime
|
|
10
|
-
* are only resolvable from a container created with createScope(scopeToken).
|
|
11
|
-
*/
|
|
9
|
+
export declare function token<T>(description: string): Token<T>;
|
|
12
10
|
export declare function scope(name: string): ScopeToken;
|
|
13
|
-
/** Caching strategy for factory registrations. Named scopes use a ScopeToken. */
|
|
14
11
|
export type Lifetime = 'singleton' | 'transient' | ScopeToken;
|
|
15
|
-
export type ValueOptions<T> = {
|
|
16
|
-
dispose?: (
|
|
17
|
-
}
|
|
18
|
-
export type FactoryOptions<T> = {
|
|
19
|
-
|
|
20
|
-
deps?: readonly Token<any>[];
|
|
21
|
-
dispose?: (instance: T) => Promise<void> | void;
|
|
12
|
+
export type ValueOptions<T> = Readonly<{
|
|
13
|
+
dispose?: (value: T) => Promise<void> | void;
|
|
14
|
+
}>;
|
|
15
|
+
export type FactoryOptions<T> = Readonly<{
|
|
16
|
+
dispose?: (value: T) => Promise<void> | void;
|
|
22
17
|
lifetime?: Lifetime;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
resolve<T>(tok: Token<T>): Promise<T>;
|
|
27
|
-
/**
|
|
28
|
-
* Resolve synchronously. Works for value providers and already-resolved
|
|
29
|
-
* singleton/scoped instances. Throws `ConduitSyncResolutionError` if the instance
|
|
30
|
-
* has not been resolved yet.
|
|
31
|
-
*/
|
|
32
|
-
resolveSync<T>(tok: Token<T>): T;
|
|
33
|
-
}
|
|
34
|
-
export type ContainerModule = (container: Container) => Promise<void> | void;
|
|
35
|
-
export type ContainerEvent = {
|
|
36
|
-
description: string;
|
|
37
|
-
kind: 'factory' | 'value';
|
|
38
|
-
source: string;
|
|
39
|
-
type: 'register';
|
|
40
|
-
} | {
|
|
41
|
-
description: string;
|
|
42
|
-
source: string;
|
|
43
|
-
type: 'resolve';
|
|
44
|
-
} | {
|
|
45
|
-
source: string;
|
|
46
|
-
type: 'dispose';
|
|
47
|
-
};
|
|
48
|
-
export type ContainerEventListener = (event: ContainerEvent) => void;
|
|
49
|
-
export type ResolveResult<T> = {
|
|
50
|
-
ok: true;
|
|
51
|
-
value: T;
|
|
52
|
-
} | {
|
|
53
|
-
error: unknown;
|
|
54
|
-
ok: false;
|
|
55
|
-
};
|
|
56
|
-
/**
|
|
57
|
-
* Infer the resolved-value tuple type from a `readonly` array of tokens.
|
|
58
|
-
* Mirrors the return type of `resolveMany`.
|
|
59
|
-
*
|
|
60
|
-
* @example
|
|
61
|
-
* const TOKENS = [AuthToken, LoggerToken] as const;
|
|
62
|
-
* type Services = InferTokenTypes<typeof TOKENS>;
|
|
63
|
-
* // → [AuthService, Logger]
|
|
64
|
-
*/
|
|
65
|
-
export type InferTokenTypes<T extends readonly Token<any>[]> = {
|
|
66
|
-
[K in keyof T]: T[K] extends Token<infer U> ? U : never;
|
|
67
|
-
};
|
|
68
|
-
/** Interceptor called after every successful resolution. Receives the token and resolved value. */
|
|
69
|
-
export type ResolveInterceptor = <T>(tok: Token<T>, value: T) => void;
|
|
70
|
-
export type ContainerNode = {
|
|
71
|
-
/** Statically-declared dependency token descriptions (from `deps:` option). */
|
|
72
|
-
deps?: string[];
|
|
73
|
-
description: string;
|
|
74
|
-
kind: 'factory' | 'value';
|
|
75
|
-
/** 'singleton', 'transient', or 'scope:<name>' for named scopes. */
|
|
76
|
-
lifetime?: 'singleton' | 'transient' | `scope:${string}`;
|
|
77
|
-
};
|
|
78
|
-
export type ContainerGraph = {
|
|
79
|
-
nodes: ContainerNode[];
|
|
18
|
+
}>;
|
|
19
|
+
export type InferTokens<T extends readonly Token<unknown>[]> = {
|
|
20
|
+
[K in keyof T]: T[K] extends Token<infer Value> ? Value : never;
|
|
80
21
|
};
|
|
81
22
|
export interface Container {
|
|
82
|
-
/** Delegates to `dispose()`. Enables `await using` declarations. */
|
|
83
23
|
[Symbol.asyncDispose](): Promise<void>;
|
|
84
|
-
/** Human-readable identifier for this container. Set via createContainer({ name }). */
|
|
85
|
-
readonly name: string;
|
|
86
|
-
/** `AbortSignal` aborted when the container is disposed. Use to tie external lifecycles to this container. */
|
|
87
24
|
readonly disposalSignal: AbortSignal;
|
|
88
|
-
/** Whether the container has been disposed. */
|
|
89
25
|
readonly disposed: boolean;
|
|
90
|
-
|
|
91
|
-
value<T>(
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
*/
|
|
96
|
-
factory<T>(tok: Token<T>, fn: (resolver: FactoryResolver) => Promise<T> | T, opts?: FactoryOptions<T>): this;
|
|
97
|
-
/** Check whether a token is registered (walks parent chain). */
|
|
98
|
-
has<T>(tok: Token<T>): boolean;
|
|
99
|
-
/** Resolve a single registered provider. */
|
|
100
|
-
resolve<T>(tok: Token<T>): Promise<T>;
|
|
101
|
-
/**
|
|
102
|
-
* Resolve a token synchronously.
|
|
103
|
-
* Works for value registrations and already-resolved singleton/scope instances.
|
|
104
|
-
* Throws `ConduitSyncResolutionError` for transient factories or unresolved singletons.
|
|
105
|
-
* Rethrows the cached rejection if the factory previously failed.
|
|
106
|
-
*/
|
|
107
|
-
resolveSync<T>(tok: Token<T>): T;
|
|
108
|
-
/**
|
|
109
|
-
* Resolve multiple tokens in parallel, returning a typed tuple.
|
|
110
|
-
*/
|
|
111
|
-
resolveMany<const D extends Token<any>[]>(toks: D): Promise<{
|
|
112
|
-
[K in keyof D]: D[K] extends Token<infer U> ? U : never;
|
|
113
|
-
}>;
|
|
114
|
-
/**
|
|
115
|
-
* Eagerly resolve all registered singleton factories across the entire
|
|
116
|
-
* container hierarchy. Useful for startup validation and pre-warming
|
|
117
|
-
* `resolveSync()` hot paths.
|
|
118
|
-
*
|
|
119
|
-
* Pass `{ includeScoped: true }` to also pre-warm named-scope factories
|
|
120
|
-
* registered on the current scope container.
|
|
121
|
-
*/
|
|
122
|
-
resolveAll(opts?: {
|
|
123
|
-
includeScoped?: boolean;
|
|
124
|
-
}): Promise<void>;
|
|
125
|
-
/**
|
|
126
|
-
* Return a serializable graph of every registered token.
|
|
127
|
-
* By default traverses the full parent chain (deep: true).
|
|
128
|
-
*/
|
|
129
|
-
inspect(opts?: {
|
|
130
|
-
deep?: boolean;
|
|
131
|
-
}): ContainerGraph;
|
|
132
|
-
/**
|
|
133
|
-
* Validate the registration graph without freezing it.
|
|
134
|
-
* Checks statically-declared `deps`: throws `ConduitProviderNotFoundError` if a
|
|
135
|
-
* declared dep is missing, or `ConduitCircularDependencyError` if they form a cycle.
|
|
136
|
-
* Throws `ConduitDisposedError` if the container is already disposed.
|
|
137
|
-
*/
|
|
26
|
+
readonly name: string;
|
|
27
|
+
value<T>(token: Token<T>, value: T, options?: ValueOptions<T>): this;
|
|
28
|
+
factory<T, Dependencies extends readonly Token<unknown>[]>(token: Token<T>, dependencies: Dependencies, create: (...values: InferTokens<Dependencies>) => Promise<T> | T, options?: FactoryOptions<T>): this;
|
|
29
|
+
has<T>(token: Token<T>): boolean;
|
|
30
|
+
resolve<T>(token: Token<T>): Promise<T>;
|
|
138
31
|
validate(): this;
|
|
139
|
-
|
|
140
|
-
* Freeze the container, locking it against further registrations.
|
|
141
|
-
* After `freeze()`, `value()` and `factory()` throw `ConduitFrozenError`.
|
|
142
|
-
* Validates statically-declared `deps`: throws `ConduitProviderNotFoundError` if a
|
|
143
|
-
* declared dep is missing, or `ConduitCircularDependencyError` if they form a cycle.
|
|
144
|
-
* Idempotent — calling `freeze()` again on an already-frozen container is a no-op.
|
|
145
|
-
* Note: cycle detection for lazy (undeclared) deps happens at resolve time.
|
|
146
|
-
*/
|
|
147
|
-
freeze(): this;
|
|
148
|
-
/**
|
|
149
|
-
* Create a child scope container. If `scopeToken` is provided, factories
|
|
150
|
-
* registered with that token as their lifetime are resolved and cached here.
|
|
151
|
-
* Omit `scopeToken` for a plain child container with no named scope.
|
|
152
|
-
*/
|
|
153
|
-
createScope(scopeToken?: ScopeToken, opts?: {
|
|
32
|
+
createScope(scope?: ScopeToken, options?: {
|
|
154
33
|
name?: string;
|
|
155
34
|
}): Container;
|
|
156
|
-
/**
|
|
157
|
-
* Subscribe to container events (register, resolve, dispose).
|
|
158
|
-
* Events propagate up to parent containers. Returns an unsubscribe function.
|
|
159
|
-
*/
|
|
160
|
-
on(listener: ContainerEventListener): () => void;
|
|
161
|
-
/**
|
|
162
|
-
* Register an interceptor called after every successful resolution.
|
|
163
|
-
* Returns an unsubscribe function. Interceptor errors are swallowed.
|
|
164
|
-
*/
|
|
165
|
-
onResolve(interceptor: ResolveInterceptor): () => void;
|
|
166
|
-
/** Dispose the container, running all registered cleanup hooks in parallel. */
|
|
167
35
|
dispose(): Promise<void>;
|
|
168
36
|
}
|
|
37
|
+
export {};
|
|
169
38
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,UAAU,EAAE,OAAO,MAAM,CAAC;AACxC,OAAO,CAAC,MAAM,UAAU,EAAE,OAAO,MAAM,CAAC;AAExC,MAAM,MAAM,KAAK,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,GAAG;IAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;CAAE,CAAC;AACvE,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAElE,wBAAgB,KAAK,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAEtD;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAE9C;AAED,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC;AAE9D,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,QAAQ,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC9C,CAAC,CAAC;AAEH,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,QAAQ,CAAC;IACvC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC,CAAC;AAEH,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,SAAS,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI;KAC5D,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK;CAChE,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAErE,OAAO,CAAC,CAAC,EAAE,YAAY,SAAS,SAAS,KAAK,CAAC,OAAO,CAAC,EAAE,EACvD,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAChE,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAC1B,IAAI,CAAC;IAER,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IACjC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACxC,QAAQ,IAAI,IAAI,CAAC;IACjB,WAAW,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACxE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../src/types.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../src/types.ts"],"sourcesContent":["declare const tokenBrand: unique symbol;\ndeclare const scopeBrand: unique symbol;\n\nexport type Token<T = unknown> = symbol & { readonly [tokenBrand]: T };\nexport type ScopeToken = symbol & { readonly [scopeBrand]: true };\n\nexport function token<T>(description: string): Token<T> {\n return Symbol(description) as Token<T>;\n}\n\nexport function scope(name: string): ScopeToken {\n return Symbol(name) as ScopeToken;\n}\n\nexport type Lifetime = 'singleton' | 'transient' | ScopeToken;\n\nexport type ValueOptions<T> = Readonly<{\n dispose?: (value: T) => Promise<void> | void;\n}>;\n\nexport type FactoryOptions<T> = Readonly<{\n dispose?: (value: T) => Promise<void> | void;\n lifetime?: Lifetime;\n}>;\n\nexport type InferTokens<T extends readonly Token<unknown>[]> = {\n [K in keyof T]: T[K] extends Token<infer Value> ? Value : never;\n};\n\nexport interface Container {\n [Symbol.asyncDispose](): Promise<void>;\n readonly disposalSignal: AbortSignal;\n readonly disposed: boolean;\n readonly name: string;\n\n value<T>(token: Token<T>, value: T, options?: ValueOptions<T>): this;\n\n factory<T, Dependencies extends readonly Token<unknown>[]>(\n token: Token<T>,\n dependencies: Dependencies,\n create: (...values: InferTokens<Dependencies>) => Promise<T> | T,\n options?: FactoryOptions<T>,\n ): this;\n\n has<T>(token: Token<T>): boolean;\n resolve<T>(token: Token<T>): Promise<T>;\n validate(): this;\n createScope(scope?: ScopeToken, options?: { name?: string }): Container;\n dispose(): Promise<void>;\n}\n"],"mappings":";AAMA,SAAgB,EAAS,GAA+B;CACtD,OAAO,OAAO,CAAW;AAC3B;AAEA,SAAgB,EAAM,GAA0B;CAC9C,OAAO,OAAO,CAAI;AACpB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vielzeug/conduit",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Lightweight dependency injection container — singletons, transient instances, factories, and named scopes",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -35,9 +35,9 @@
|
|
|
35
35
|
"node": ">=22"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@types/node": "^26.1.
|
|
38
|
+
"@types/node": "^26.1.2",
|
|
39
39
|
"typescript": "^6.0.3",
|
|
40
|
-
"vite": "^8.
|
|
40
|
+
"vite": "^8.2.0",
|
|
41
41
|
"vitest": "^4.1.10"
|
|
42
42
|
}
|
|
43
43
|
}
|
package/dist/_dev.cjs
DELETED
package/dist/_dev.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_dev.cjs","names":[],"sources":["../src/_dev.ts"],"sourcesContent":["const isDev = !(globalThis as { __CONDUIT_PROD__?: boolean }).__CONDUIT_PROD__;\n\n/** @internal */\nexport function error(msg: string, ...args: unknown[]): void {\n if (isDev) console.error(`[@vielzeug/conduit] ${msg}`, ...args);\n}\n"],"mappings":"AAAA,IAAM,EAAQ,CAAE,WAA8C,iBAG9D,SAAgB,EAAM,EAAa,GAAG,EAAuB,CACvD,GAAO,QAAQ,MAAM,uBAAuB,IAAO,GAAG,CAAI,CAChE"}
|
package/dist/_dev.d.ts
DELETED
package/dist/_dev.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_dev.d.ts","sourceRoot":"","sources":["../src/_dev.ts"],"names":[],"mappings":""}
|
package/dist/_dev.js
DELETED
package/dist/_dev.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_dev.js","names":[],"sources":["../src/_dev.ts"],"sourcesContent":["const isDev = !(globalThis as { __CONDUIT_PROD__?: boolean }).__CONDUIT_PROD__;\n\n/** @internal */\nexport function error(msg: string, ...args: unknown[]): void {\n if (isDev) console.error(`[@vielzeug/conduit] ${msg}`, ...args);\n}\n"],"mappings":";AAAA,IAAM,IAAQ,CAAE,WAA8C;AAG9D,SAAgB,EAAM,GAAa,GAAG,GAAuB;CAC3D,AAAI,KAAO,QAAQ,MAAM,uBAAuB,KAAO,GAAG,CAAI;AAChE"}
|
package/dist/conduit.d.ts
DELETED
package/dist/conduit.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"conduit.d.ts","sourceRoot":"","sources":["../src/conduit.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
package/dist/utils.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const e=require("./errors.cjs");async function t(t,n){try{return await t.resolve(n)}catch(t){if(t instanceof e.ConduitProviderNotFoundError)return;throw t}}async function n(e,n,r){let i=await t(e,n);return i===void 0?r:i}async function r(t,n){try{return{ok:!0,value:await t.resolve(n)}}catch(t){if(t instanceof e.ConduitProviderNotFoundError)return{error:t,ok:!1};throw t}}function i(t,n){try{return t.resolveSync(n)}catch(t){if(t instanceof e.ConduitProviderNotFoundError)return;throw t}}function a(e,t,n){let r=i(e,t);return r===void 0?n:r}function o(t,n){try{return{ok:!0,value:t.resolveSync(n)}}catch(t){if(t instanceof e.ConduitProviderNotFoundError)return{error:t,ok:!1};throw t}}async function s(e,...t){for(let n of t)await n(e);return e}exports.loadModules=s,exports.resolveOptional=t,exports.resolveOrDefault=n,exports.resolveSyncOptional=i,exports.resolveSyncOrDefault=a,exports.tryResolve=r,exports.trySyncResolve=o;
|
|
2
|
-
//# sourceMappingURL=utils.cjs.map
|
package/dist/utils.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.cjs","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import type { Container, ContainerModule, ResolveResult, Token } from './types.js';\n\nimport { ConduitProviderNotFoundError } from './errors.js';\n\n/**\n * Resolve a token, returning `undefined` when not registered.\n * Re-throws any error other than `ConduitProviderNotFoundError`.\n */\nexport async function resolveOptional<T>(container: Container, tok: Token<T>): Promise<T | undefined> {\n try {\n return await container.resolve(tok);\n } catch (error) {\n if (error instanceof ConduitProviderNotFoundError) return undefined;\n\n throw error;\n }\n}\n\n/**\n * Resolve a token, returning `defaultValue` when not registered.\n * Re-throws any error other than `ConduitProviderNotFoundError`.\n */\nexport async function resolveOrDefault<T>(container: Container, tok: Token<T>, defaultValue: T): Promise<T> {\n const result = await resolveOptional(container, tok);\n\n return result === undefined ? defaultValue : result;\n}\n\n/**\n * Resolve a token, returning a result object instead of throwing.\n * Returns `{ ok: true, value }` on success or `{ ok: false, error }` when the\n * token is not registered. Re-throws all other errors — including\n * `ConduitDisposedError` and `ConduitCircularDependencyError`.\n */\nexport async function tryResolve<T>(container: Container, tok: Token<T>): Promise<ResolveResult<T>> {\n try {\n const value = await container.resolve(tok);\n\n return { ok: true, value };\n } catch (error) {\n if (error instanceof ConduitProviderNotFoundError) return { error, ok: false };\n\n throw error;\n }\n}\n\n/**\n * Resolve a token synchronously, returning `undefined` when not registered.\n * Re-throws `ConduitSyncResolutionError`, `ConduitScopedResolutionError`, and `ConduitDisposedError`.\n */\nexport function resolveSyncOptional<T>(container: Container, tok: Token<T>): T | undefined {\n try {\n return container.resolveSync(tok);\n } catch (error) {\n if (error instanceof ConduitProviderNotFoundError) return undefined;\n\n throw error;\n }\n}\n\n/**\n * Resolve a token synchronously, returning `defaultValue` when not registered.\n * Re-throws `ConduitSyncResolutionError`, `ConduitScopedResolutionError`, and `ConduitDisposedError`.\n */\nexport function resolveSyncOrDefault<T>(container: Container, tok: Token<T>, defaultValue: T): T {\n const result = resolveSyncOptional(container, tok);\n\n return result === undefined ? defaultValue : result;\n}\n\n/**\n * Resolve a token synchronously, returning a result object instead of throwing.\n * Returns `{ ok: true, value }` on success or `{ ok: false, error }` when the\n * token is not registered. Re-throws all other errors — including\n * `ConduitSyncResolutionError`, `ConduitDisposedError`, and `ConduitScopedResolutionError`.\n */\nexport function trySyncResolve<T>(container: Container, tok: Token<T>): ResolveResult<T> {\n try {\n const value = container.resolveSync(tok);\n\n return { ok: true, value };\n } catch (error) {\n if (error instanceof ConduitProviderNotFoundError) return { error, ok: false };\n\n throw error;\n }\n}\n\n/**\n * Apply container modules sequentially (each module may be async).\n * Returns the container for chaining.\n */\nexport async function loadModules(container: Container, ...modules: ContainerModule[]): Promise<Container> {\n for (const mod of modules) await mod(container);\n\n return container;\n}\n"],"mappings":"gCAQA,eAAsB,EAAmB,EAAsB,EAAuC,CACpG,GAAI,CACF,OAAO,MAAM,EAAU,QAAQ,CAAG,CACpC,OAAS,EAAO,CACd,GAAI,aAAiB,EAAA,6BAA8B,OAEnD,MAAM,CACR,CACF,CAMA,eAAsB,EAAoB,EAAsB,EAAe,EAA6B,CAC1G,IAAM,EAAS,MAAM,EAAgB,EAAW,CAAG,EAEnD,OAAO,IAAW,IAAA,GAAY,EAAe,CAC/C,CAQA,eAAsB,EAAc,EAAsB,EAA0C,CAClG,GAAI,CAGF,MAAO,CAAE,GAAI,GAAM,MAAA,MAFC,EAAU,QAAQ,CAAG,CAEhB,CAC3B,OAAS,EAAO,CACd,GAAI,aAAiB,EAAA,6BAA8B,MAAO,CAAE,QAAO,GAAI,EAAM,EAE7E,MAAM,CACR,CACF,CAMA,SAAgB,EAAuB,EAAsB,EAA8B,CACzF,GAAI,CACF,OAAO,EAAU,YAAY,CAAG,CAClC,OAAS,EAAO,CACd,GAAI,aAAiB,EAAA,6BAA8B,OAEnD,MAAM,CACR,CACF,CAMA,SAAgB,EAAwB,EAAsB,EAAe,EAAoB,CAC/F,IAAM,EAAS,EAAoB,EAAW,CAAG,EAEjD,OAAO,IAAW,IAAA,GAAY,EAAe,CAC/C,CAQA,SAAgB,EAAkB,EAAsB,EAAiC,CACvF,GAAI,CAGF,MAAO,CAAE,GAAI,GAAM,MAFL,EAAU,YAAY,CAEjB,CAAM,CAC3B,OAAS,EAAO,CACd,GAAI,aAAiB,EAAA,6BAA8B,MAAO,CAAE,QAAO,GAAI,EAAM,EAE7E,MAAM,CACR,CACF,CAMA,eAAsB,EAAY,EAAsB,GAAG,EAAgD,CACzG,IAAK,IAAM,KAAO,EAAS,MAAM,EAAI,CAAS,EAE9C,OAAO,CACT"}
|
package/dist/utils.d.ts
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import type { Container, ContainerModule, ResolveResult, Token } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Resolve a token, returning `undefined` when not registered.
|
|
4
|
-
* Re-throws any error other than `ConduitProviderNotFoundError`.
|
|
5
|
-
*/
|
|
6
|
-
export declare function resolveOptional<T>(container: Container, tok: Token<T>): Promise<T | undefined>;
|
|
7
|
-
/**
|
|
8
|
-
* Resolve a token, returning `defaultValue` when not registered.
|
|
9
|
-
* Re-throws any error other than `ConduitProviderNotFoundError`.
|
|
10
|
-
*/
|
|
11
|
-
export declare function resolveOrDefault<T>(container: Container, tok: Token<T>, defaultValue: T): Promise<T>;
|
|
12
|
-
/**
|
|
13
|
-
* Resolve a token, returning a result object instead of throwing.
|
|
14
|
-
* Returns `{ ok: true, value }` on success or `{ ok: false, error }` when the
|
|
15
|
-
* token is not registered. Re-throws all other errors — including
|
|
16
|
-
* `ConduitDisposedError` and `ConduitCircularDependencyError`.
|
|
17
|
-
*/
|
|
18
|
-
export declare function tryResolve<T>(container: Container, tok: Token<T>): Promise<ResolveResult<T>>;
|
|
19
|
-
/**
|
|
20
|
-
* Resolve a token synchronously, returning `undefined` when not registered.
|
|
21
|
-
* Re-throws `ConduitSyncResolutionError`, `ConduitScopedResolutionError`, and `ConduitDisposedError`.
|
|
22
|
-
*/
|
|
23
|
-
export declare function resolveSyncOptional<T>(container: Container, tok: Token<T>): T | undefined;
|
|
24
|
-
/**
|
|
25
|
-
* Resolve a token synchronously, returning `defaultValue` when not registered.
|
|
26
|
-
* Re-throws `ConduitSyncResolutionError`, `ConduitScopedResolutionError`, and `ConduitDisposedError`.
|
|
27
|
-
*/
|
|
28
|
-
export declare function resolveSyncOrDefault<T>(container: Container, tok: Token<T>, defaultValue: T): T;
|
|
29
|
-
/**
|
|
30
|
-
* Resolve a token synchronously, returning a result object instead of throwing.
|
|
31
|
-
* Returns `{ ok: true, value }` on success or `{ ok: false, error }` when the
|
|
32
|
-
* token is not registered. Re-throws all other errors — including
|
|
33
|
-
* `ConduitSyncResolutionError`, `ConduitDisposedError`, and `ConduitScopedResolutionError`.
|
|
34
|
-
*/
|
|
35
|
-
export declare function trySyncResolve<T>(container: Container, tok: Token<T>): ResolveResult<T>;
|
|
36
|
-
/**
|
|
37
|
-
* Apply container modules sequentially (each module may be async).
|
|
38
|
-
* Returns the container for chaining.
|
|
39
|
-
*/
|
|
40
|
-
export declare function loadModules(container: Container, ...modules: ContainerModule[]): Promise<Container>;
|
|
41
|
-
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAInF;;;GAGG;AACH,wBAAsB,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAQpG;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAI1G;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAUlG;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAQzF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAI/F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAUvF;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAIzG"}
|
package/dist/utils.js
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { ConduitProviderNotFoundError as e } from "./errors.js";
|
|
2
|
-
//#region src/utils.ts
|
|
3
|
-
async function t(t, n) {
|
|
4
|
-
try {
|
|
5
|
-
return await t.resolve(n);
|
|
6
|
-
} catch (t) {
|
|
7
|
-
if (t instanceof e) return;
|
|
8
|
-
throw t;
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
async function n(e, n, r) {
|
|
12
|
-
let i = await t(e, n);
|
|
13
|
-
return i === void 0 ? r : i;
|
|
14
|
-
}
|
|
15
|
-
async function r(t, n) {
|
|
16
|
-
try {
|
|
17
|
-
return {
|
|
18
|
-
ok: !0,
|
|
19
|
-
value: await t.resolve(n)
|
|
20
|
-
};
|
|
21
|
-
} catch (t) {
|
|
22
|
-
if (t instanceof e) return {
|
|
23
|
-
error: t,
|
|
24
|
-
ok: !1
|
|
25
|
-
};
|
|
26
|
-
throw t;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
function i(t, n) {
|
|
30
|
-
try {
|
|
31
|
-
return t.resolveSync(n);
|
|
32
|
-
} catch (t) {
|
|
33
|
-
if (t instanceof e) return;
|
|
34
|
-
throw t;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
function a(e, t, n) {
|
|
38
|
-
let r = i(e, t);
|
|
39
|
-
return r === void 0 ? n : r;
|
|
40
|
-
}
|
|
41
|
-
function o(t, n) {
|
|
42
|
-
try {
|
|
43
|
-
return {
|
|
44
|
-
ok: !0,
|
|
45
|
-
value: t.resolveSync(n)
|
|
46
|
-
};
|
|
47
|
-
} catch (t) {
|
|
48
|
-
if (t instanceof e) return {
|
|
49
|
-
error: t,
|
|
50
|
-
ok: !1
|
|
51
|
-
};
|
|
52
|
-
throw t;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
async function s(e, ...t) {
|
|
56
|
-
for (let n of t) await n(e);
|
|
57
|
-
return e;
|
|
58
|
-
}
|
|
59
|
-
//#endregion
|
|
60
|
-
export { s as loadModules, t as resolveOptional, n as resolveOrDefault, i as resolveSyncOptional, a as resolveSyncOrDefault, r as tryResolve, o as trySyncResolve };
|
|
61
|
-
|
|
62
|
-
//# sourceMappingURL=utils.js.map
|