@vielzeug/conduit 2.1.0 → 3.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/dist/errors.js CHANGED
@@ -3,40 +3,47 @@ function e(e) {
3
3
  return e.description ?? "anonymous";
4
4
  }
5
5
  var t = class extends Error {
6
+ static errorName = "ConduitError";
6
7
  constructor(e, t) {
7
- super(e, t), this.name = new.target.name, Object.setPrototypeOf(this, new.target.prototype);
8
+ super(e, t), this.name = new.target.errorName, Object.setPrototypeOf(this, new.target.prototype);
8
9
  }
9
10
  }, n = class extends t {
11
+ static errorName = "ConduitCircularDependencyError";
10
12
  cycle;
11
13
  constructor(t) {
12
- super(`Circular dependency detected: ${t.map(e).join(" -> ")}`), this.cycle = t;
14
+ super(`Circular dependency detected: ${t.map(e).join(" -> ")}`), this.cycle = Object.freeze([...t]);
13
15
  }
14
16
  }, r = class extends t {
17
+ static errorName = "ConduitProviderNotFoundError";
15
18
  containerName;
16
19
  token;
17
20
  constructor(t, n) {
18
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 {
24
+ static errorName = "ConduitDuplicateRegistrationError";
21
25
  token;
22
26
  constructor(t) {
23
27
  super(`Token "${e(t)}" is already registered.`), this.token = t;
24
28
  }
25
29
  }, a = class extends t {
30
+ static errorName = "ConduitScopedResolutionError";
26
31
  requiredScope;
27
32
  token;
28
33
  constructor(t, n) {
29
34
  super(`Token "${e(t)}" requires scope "${n.description ?? "anonymous"}".`), this.requiredScope = n, this.token = t;
30
35
  }
31
36
  }, o = class extends t {
37
+ static errorName = "ConduitDisposedError";
32
38
  containerName;
33
39
  constructor(e) {
34
40
  super(`Cannot use disposed container '${e}'.`), this.containerName = e;
35
41
  }
36
42
  }, s = class extends t {
43
+ static errorName = "ConduitDisposeError";
37
44
  errors;
38
45
  constructor(e) {
39
- super(`Container disposal failed with ${e.length} cleanup error${e.length === 1 ? "" : "s"}.`), this.errors = e;
46
+ super(`Container disposal failed with ${e.length} cleanup error${e.length === 1 ? "" : "s"}.`), this.errors = Object.freeze([...e]);
40
47
  }
41
48
  };
42
49
  //#endregion
@@ -1 +1 @@
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 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,cAAkC,MAAM;CACtC,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"}
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 protected static readonly errorName: string = 'ConduitError';\n\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = (new.target as typeof ConduitError).errorName;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class ConduitCircularDependencyError extends ConduitError {\n protected static override readonly errorName = 'ConduitCircularDependencyError';\n readonly cycle: readonly Token<unknown>[];\n\n constructor(cycle: readonly Token<unknown>[]) {\n super(`Circular dependency detected: ${cycle.map(tokenName).join(' -> ')}`);\n this.cycle = Object.freeze([...cycle]);\n }\n}\n\nexport class ConduitProviderNotFoundError extends ConduitError {\n protected static override readonly errorName = 'ConduitProviderNotFoundError';\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 protected static override readonly errorName = 'ConduitDuplicateRegistrationError';\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 protected static override readonly errorName = 'ConduitScopedResolutionError';\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 protected static override readonly errorName = 'ConduitDisposedError';\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 protected static override readonly errorName = 'ConduitDisposeError';\n readonly errors: readonly unknown[];\n\n constructor(errors: readonly unknown[]) {\n super(`Container disposal failed with ${errors.length} cleanup error${errors.length === 1 ? '' : 's'}.`);\n this.errors = Object.freeze([...errors]);\n }\n}\n"],"mappings":";AAEA,SAAgB,EAAU,GAA+B;CACvD,OAAO,EAAM,eAAe;AAC9B;AAEA,IAAa,IAAb,cAAkC,MAAM;CACtC,OAA0B,YAAoB;CAE9C,YAAY,GAAiB,GAAwB;EAGnD,AAFA,MAAM,GAAS,CAAO,GACtB,KAAK,OAAQ,WAAmC,WAChD,OAAO,eAAe,MAAM,WAAW,SAAS;CAClD;AACF,GAEa,IAAb,cAAoD,EAAa;CAC/D,OAAmC,YAAY;CAC/C;CAEA,YAAY,GAAkC;EAE5C,AADA,MAAM,iCAAiC,EAAM,IAAI,CAAS,CAAC,CAAC,KAAK,MAAM,GAAG,GAC1E,KAAK,QAAQ,OAAO,OAAO,CAAC,GAAG,CAAK,CAAC;CACvC;AACF,GAEa,IAAb,cAAkD,EAAa;CAC7D,OAAmC,YAAY;CAC/C;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,OAAmC,YAAY;CAC/C;CAEA,YAAY,GAAuB;EAEjC,AADA,MAAM,UAAU,EAAU,CAAK,EAAE,yBAAyB,GAC1D,KAAK,QAAQ;CACf;AACF,GAEa,IAAb,cAAkD,EAAa;CAC7D,OAAmC,YAAY;CAC/C;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,OAAmC,YAAY;CAC/C;CAEA,YAAY,GAAuB;EAEjC,AADA,MAAM,kCAAkC,EAAc,GAAG,GACzD,KAAK,gBAAgB;CACvB;AACF,GAEa,IAAb,cAAyC,EAAa;CACpD,OAAmC,YAAY;CAC/C;CAEA,YAAY,GAA4B;EAEtC,AADA,MAAM,kCAAkC,EAAO,OAAO,gBAAgB,EAAO,WAAW,IAAI,KAAK,IAAI,EAAE,GACvG,KAAK,SAAS,OAAO,OAAO,CAAC,GAAG,CAAM,CAAC;CACzC;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");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;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./errors.cjs"),t=require("./types.cjs"),n=require("./container.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=n.createContainer,exports.disposalSignalToken=t.disposalSignalToken,exports.factoryProvider=t.factoryProvider,exports.scope=t.scope,exports.token=t.token,exports.valueProvider=t.valueProvider;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export { createContainer } from './container';
2
- export { ConduitCircularDependencyError, ConduitDisposedError, ConduitDisposeError, ConduitDuplicateRegistrationError, ConduitError, ConduitProviderNotFoundError, ConduitScopedResolutionError, } from './errors';
3
- export type { Container, FactoryOptions, InferTokens, Lifetime, ScopeToken, Token, ValueOptions } from './types';
4
- export { scope, token } from './types';
1
+ export { createContainer } from './container.js';
2
+ export { ConduitCircularDependencyError, ConduitDisposedError, ConduitDisposeError, ConduitDuplicateRegistrationError, ConduitError, ConduitProviderNotFoundError, ConduitScopedResolutionError, } from './errors.js';
3
+ export type { Container, FactoryOptions, FactoryProvider, InferServices, InferTokens, Lifetime, Provider, ScopeToken, ServiceMap, Token, ValueOptions, ValueProvider, } from './types.js';
4
+ export { disposalSignalToken, factoryProvider, scope, token, valueProvider } from './types.js';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -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,mBAAmB,EACnB,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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,8BAA8B,EAC9B,oBAAoB,EACpB,mBAAmB,EACnB,iCAAiC,EACjC,YAAY,EACZ,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,SAAS,EACT,cAAc,EACd,eAAe,EACf,aAAa,EACb,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,UAAU,EACV,KAAK,EACL,YAAY,EACZ,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
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 };
2
+ import { disposalSignalToken as s, factoryProvider as c, scope as l, token as u, valueProvider as d } from "./types.js";
3
+ import { createContainer as f } from "./container.js";
4
+ export { e as ConduitCircularDependencyError, t as ConduitDisposeError, n as ConduitDisposedError, r as ConduitDuplicateRegistrationError, i as ConduitError, a as ConduitProviderNotFoundError, o as ConduitScopedResolutionError, f as createContainer, s as disposalSignalToken, c as factoryProvider, l as scope, u as token, d as valueProvider };
package/dist/types.cjs CHANGED
@@ -1,2 +1,2 @@
1
- function e(e){return Symbol(e)}function t(e){return Symbol(e)}exports.scope=t,exports.token=e;
1
+ function e(e){return Symbol(e)}function t(e){return Symbol(e)}var n=e(`Conduit disposal signal`);function r(e,t,n={}){return Object.freeze({...n,token:e,value:t})}function i(e,t,n,r={}){return Object.freeze({...r,dependencies:Object.freeze([...t]),factory:n,token:e})}exports.disposalSignalToken=n,exports.factoryProvider=i,exports.scope=t,exports.token=e,exports.valueProvider=r;
2
2
  //# sourceMappingURL=types.cjs.map
@@ -1 +1 @@
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 createScope(scope?: ScopeToken, options?: { name?: string }): Container;\n readonly disposalSignal: AbortSignal;\n dispose(): Promise<void>;\n readonly disposed: boolean;\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 readonly name: string;\n resolve<T>(token: Token<T>): Promise<T>;\n validate(): this;\n\n value<T>(token: Token<T>, value: T, options?: ValueOptions<T>): this;\n [Symbol.asyncDispose](): Promise<void>;\n}\n"],"mappings":"AAMA,SAAgB,EAAS,EAA+B,CACtD,OAAO,OAAO,CAAW,CAC3B,CAEA,SAAgB,EAAM,EAA0B,CAC9C,OAAO,OAAO,CAAI,CACpB"}
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 const disposalSignalToken = token<AbortSignal>('Conduit disposal signal');\n\n/** Singleton results are cached on the registering container; transient results belong to the requesting container; a `ScopeToken` caches on the matching child scope. */\nexport type Lifetime = 'singleton' | 'transient' | ScopeToken;\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 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 interface ValueProvider<T> {\n readonly dispose?: (value: T) => Promise<void> | void;\n readonly token: Token<T>;\n readonly value: T;\n}\n\nexport interface FactoryProvider<T, Dependencies extends readonly Token<unknown>[] = readonly Token<unknown>[]> {\n readonly dependencies: Dependencies;\n readonly dispose?: (value: T) => Promise<void> | void;\n readonly factory: (...values: InferTokens<Dependencies>) => Promise<T> | T;\n readonly lifetime?: Lifetime;\n readonly token: Token<T>;\n}\n\nexport type Provider<T = unknown, Dependencies extends readonly Token<unknown>[] = readonly Token<unknown>[]> =\n | ValueProvider<T>\n | FactoryProvider<T, Dependencies>;\n\nexport function valueProvider<T>(token: Token<T>, value: NoInfer<T>, options: ValueOptions<T> = {}): ValueProvider<T> {\n return Object.freeze({ ...options, token, value });\n}\n\nexport function factoryProvider<T, const Dependencies extends readonly Token<unknown>[]>(\n token: Token<T>,\n dependencies: Dependencies,\n factory: (...values: InferTokens<Dependencies>) => Promise<T> | T,\n options: FactoryOptions<T> = {},\n): FactoryProvider<T, Dependencies> {\n return Object.freeze({\n ...options,\n dependencies: Object.freeze([...dependencies]) as unknown as Dependencies,\n factory,\n token,\n });\n}\n\n/** Map of service name to dependency token, passed to `container.resolve()` at a composition root. */\nexport type ServiceMap = { readonly [key: string]: Token<unknown> };\n\nexport type InferServices<M extends ServiceMap> = {\n readonly [K in keyof M]: M[K] extends Token<infer Value> ? Value : never;\n};\n\nexport interface Container {\n createScope(\n scope?: ScopeToken,\n options?: { readonly name?: string; readonly providers?: readonly Provider<any, any>[] },\n ): Container;\n readonly disposalSignal: AbortSignal;\n dispose(): Promise<void>;\n readonly disposed: boolean;\n has<T>(token: Token<T>): boolean;\n readonly name: string;\n resolve<T>(token: Token<T>): Promise<T>;\n resolve<M extends ServiceMap>(map: M): Promise<InferServices<M>>;\n [Symbol.asyncDispose](): Promise<void>;\n}\n"],"mappings":"AAMA,SAAgB,EAAS,EAA+B,CACtD,OAAO,OAAO,CAAW,CAC3B,CAEA,SAAgB,EAAM,EAA0B,CAC9C,OAAO,OAAO,CAAI,CACpB,CAEA,IAAa,EAAsB,EAAmB,yBAAyB,EAoC/E,SAAgB,EAAiB,EAAiB,EAAmB,EAA2B,CAAC,EAAqB,CACpH,OAAO,OAAO,OAAO,CAAE,GAAG,EAAS,QAAO,OAAM,CAAC,CACnD,CAEA,SAAgB,EACd,EACA,EACA,EACA,EAA6B,CAAC,EACI,CAClC,OAAO,OAAO,OAAO,CACnB,GAAG,EACH,aAAc,OAAO,OAAO,CAAC,GAAG,CAAY,CAAC,EAC7C,UACA,OACF,CAAC,CACH"}
package/dist/types.d.ts CHANGED
@@ -8,7 +8,12 @@ export type ScopeToken = symbol & {
8
8
  };
9
9
  export declare function token<T>(description: string): Token<T>;
10
10
  export declare function scope(name: string): ScopeToken;
11
+ export declare const disposalSignalToken: Token<AbortSignal>;
12
+ /** Singleton results are cached on the registering container; transient results belong to the requesting container; a `ScopeToken` caches on the matching child scope. */
11
13
  export type Lifetime = 'singleton' | 'transient' | ScopeToken;
14
+ export type InferTokens<T extends readonly Token<unknown>[]> = {
15
+ [K in keyof T]: T[K] extends Token<infer Value> ? Value : never;
16
+ };
12
17
  export type ValueOptions<T> = Readonly<{
13
18
  dispose?: (value: T) => Promise<void> | void;
14
19
  }>;
@@ -16,22 +21,40 @@ export type FactoryOptions<T> = Readonly<{
16
21
  dispose?: (value: T) => Promise<void> | void;
17
22
  lifetime?: Lifetime;
18
23
  }>;
19
- export type InferTokens<T extends readonly Token<unknown>[]> = {
20
- [K in keyof T]: T[K] extends Token<infer Value> ? Value : never;
24
+ export interface ValueProvider<T> {
25
+ readonly dispose?: (value: T) => Promise<void> | void;
26
+ readonly token: Token<T>;
27
+ readonly value: T;
28
+ }
29
+ export interface FactoryProvider<T, Dependencies extends readonly Token<unknown>[] = readonly Token<unknown>[]> {
30
+ readonly dependencies: Dependencies;
31
+ readonly dispose?: (value: T) => Promise<void> | void;
32
+ readonly factory: (...values: InferTokens<Dependencies>) => Promise<T> | T;
33
+ readonly lifetime?: Lifetime;
34
+ readonly token: Token<T>;
35
+ }
36
+ export type Provider<T = unknown, Dependencies extends readonly Token<unknown>[] = readonly Token<unknown>[]> = ValueProvider<T> | FactoryProvider<T, Dependencies>;
37
+ export declare function valueProvider<T>(token: Token<T>, value: NoInfer<T>, options?: ValueOptions<T>): ValueProvider<T>;
38
+ export declare function factoryProvider<T, const Dependencies extends readonly Token<unknown>[]>(token: Token<T>, dependencies: Dependencies, factory: (...values: InferTokens<Dependencies>) => Promise<T> | T, options?: FactoryOptions<T>): FactoryProvider<T, Dependencies>;
39
+ /** Map of service name to dependency token, passed to `container.resolve()` at a composition root. */
40
+ export type ServiceMap = {
41
+ readonly [key: string]: Token<unknown>;
42
+ };
43
+ export type InferServices<M extends ServiceMap> = {
44
+ readonly [K in keyof M]: M[K] extends Token<infer Value> ? Value : never;
21
45
  };
22
46
  export interface Container {
23
47
  createScope(scope?: ScopeToken, options?: {
24
- name?: string;
48
+ readonly name?: string;
49
+ readonly providers?: readonly Provider<any, any>[];
25
50
  }): Container;
26
51
  readonly disposalSignal: AbortSignal;
27
52
  dispose(): Promise<void>;
28
53
  readonly disposed: boolean;
29
- factory<T, Dependencies extends readonly Token<unknown>[]>(token: Token<T>, dependencies: Dependencies, create: (...values: InferTokens<Dependencies>) => Promise<T> | T, options?: FactoryOptions<T>): this;
30
54
  has<T>(token: Token<T>): boolean;
31
55
  readonly name: string;
32
56
  resolve<T>(token: Token<T>): Promise<T>;
33
- validate(): this;
34
- value<T>(token: Token<T>, value: T, options?: ValueOptions<T>): this;
57
+ resolve<M extends ServiceMap>(map: M): Promise<InferServices<M>>;
35
58
  [Symbol.asyncDispose](): Promise<void>;
36
59
  }
37
60
  export {};
@@ -1 +1 @@
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,WAAW,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACxE,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IACrC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B,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,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACxC,QAAQ,IAAI,IAAI,CAAC;IAEjB,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;IACrE,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -5,7 +5,23 @@ function e(e) {
5
5
  function t(e) {
6
6
  return Symbol(e);
7
7
  }
8
+ var n = e("Conduit disposal signal");
9
+ function r(e, t, n = {}) {
10
+ return Object.freeze({
11
+ ...n,
12
+ token: e,
13
+ value: t
14
+ });
15
+ }
16
+ function i(e, t, n, r = {}) {
17
+ return Object.freeze({
18
+ ...r,
19
+ dependencies: Object.freeze([...t]),
20
+ factory: n,
21
+ token: e
22
+ });
23
+ }
8
24
  //#endregion
9
- export { t as scope, e as token };
25
+ export { n as disposalSignalToken, i as factoryProvider, t as scope, e as token, r as valueProvider };
10
26
 
11
27
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
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 createScope(scope?: ScopeToken, options?: { name?: string }): Container;\n readonly disposalSignal: AbortSignal;\n dispose(): Promise<void>;\n readonly disposed: boolean;\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 readonly name: string;\n resolve<T>(token: Token<T>): Promise<T>;\n validate(): this;\n\n value<T>(token: Token<T>, value: T, options?: ValueOptions<T>): this;\n [Symbol.asyncDispose](): Promise<void>;\n}\n"],"mappings":";AAMA,SAAgB,EAAS,GAA+B;CACtD,OAAO,OAAO,CAAW;AAC3B;AAEA,SAAgB,EAAM,GAA0B;CAC9C,OAAO,OAAO,CAAI;AACpB"}
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 const disposalSignalToken = token<AbortSignal>('Conduit disposal signal');\n\n/** Singleton results are cached on the registering container; transient results belong to the requesting container; a `ScopeToken` caches on the matching child scope. */\nexport type Lifetime = 'singleton' | 'transient' | ScopeToken;\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 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 interface ValueProvider<T> {\n readonly dispose?: (value: T) => Promise<void> | void;\n readonly token: Token<T>;\n readonly value: T;\n}\n\nexport interface FactoryProvider<T, Dependencies extends readonly Token<unknown>[] = readonly Token<unknown>[]> {\n readonly dependencies: Dependencies;\n readonly dispose?: (value: T) => Promise<void> | void;\n readonly factory: (...values: InferTokens<Dependencies>) => Promise<T> | T;\n readonly lifetime?: Lifetime;\n readonly token: Token<T>;\n}\n\nexport type Provider<T = unknown, Dependencies extends readonly Token<unknown>[] = readonly Token<unknown>[]> =\n | ValueProvider<T>\n | FactoryProvider<T, Dependencies>;\n\nexport function valueProvider<T>(token: Token<T>, value: NoInfer<T>, options: ValueOptions<T> = {}): ValueProvider<T> {\n return Object.freeze({ ...options, token, value });\n}\n\nexport function factoryProvider<T, const Dependencies extends readonly Token<unknown>[]>(\n token: Token<T>,\n dependencies: Dependencies,\n factory: (...values: InferTokens<Dependencies>) => Promise<T> | T,\n options: FactoryOptions<T> = {},\n): FactoryProvider<T, Dependencies> {\n return Object.freeze({\n ...options,\n dependencies: Object.freeze([...dependencies]) as unknown as Dependencies,\n factory,\n token,\n });\n}\n\n/** Map of service name to dependency token, passed to `container.resolve()` at a composition root. */\nexport type ServiceMap = { readonly [key: string]: Token<unknown> };\n\nexport type InferServices<M extends ServiceMap> = {\n readonly [K in keyof M]: M[K] extends Token<infer Value> ? Value : never;\n};\n\nexport interface Container {\n createScope(\n scope?: ScopeToken,\n options?: { readonly name?: string; readonly providers?: readonly Provider<any, any>[] },\n ): Container;\n readonly disposalSignal: AbortSignal;\n dispose(): Promise<void>;\n readonly disposed: boolean;\n has<T>(token: Token<T>): boolean;\n readonly name: string;\n resolve<T>(token: Token<T>): Promise<T>;\n resolve<M extends ServiceMap>(map: M): Promise<InferServices<M>>;\n [Symbol.asyncDispose](): Promise<void>;\n}\n"],"mappings":";AAMA,SAAgB,EAAS,GAA+B;CACtD,OAAO,OAAO,CAAW;AAC3B;AAEA,SAAgB,EAAM,GAA0B;CAC9C,OAAO,OAAO,CAAI;AACpB;AAEA,IAAa,IAAsB,EAAmB,yBAAyB;AAoC/E,SAAgB,EAAiB,GAAiB,GAAmB,IAA2B,CAAC,GAAqB;CACpH,OAAO,OAAO,OAAO;EAAE,GAAG;EAAS;EAAO;CAAM,CAAC;AACnD;AAEA,SAAgB,EACd,GACA,GACA,GACA,IAA6B,CAAC,GACI;CAClC,OAAO,OAAO,OAAO;EACnB,GAAG;EACH,cAAc,OAAO,OAAO,CAAC,GAAG,CAAY,CAAC;EAC7C;EACA;CACF,CAAC;AACH"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vielzeug/conduit",
3
- "version": "2.1.0",
4
- "description": "Lightweight dependency injection container — singletons, transient instances, factories, and named scopes",
3
+ "version": "3.0.0",
4
+ "description": "Typed dependency injection with immutable providers, singleton, transient, and named-scope lifetimes, overrides, and deterministic disposal",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/helmuthdu/vielzeug",
@@ -30,19 +30,21 @@
30
30
  "registry": "https://registry.npmjs.org/"
31
31
  },
32
32
  "scripts": {
33
- "build": "vite build && pnpm run build:bundle && pnpm run build:types",
33
+ "build": "vite build && pnpm --silent run build:bundle && pnpm --silent run build:types && pnpm --silent run test:types && pnpm --silent run verify:exports",
34
34
  "build:bundle": "vite build --config vite.bundle.config.ts",
35
35
  "build:types": "tsc -p tsconfig.declarations.json",
36
36
  "fix": "biome check --write src",
37
37
  "lint": "biome ci src",
38
- "prepublishOnly": "pnpm run build",
38
+ "prepublishOnly": "pnpm --silent run build",
39
39
  "preview": "vite preview",
40
- "test": "vitest"
40
+ "test": "vitest",
41
+ "test:types": "tsc -p tsconfig.type-tests.json",
42
+ "verify:exports": "node verify-exports.mjs"
41
43
  },
42
44
  "devDependencies": {
43
- "@types/node": "^26.2.0",
45
+ "@types/node": "^26.4.1",
44
46
  "typescript": "^6.0.3",
45
- "vite": "^8.2.1",
46
- "vitest": "^4.1.10"
47
+ "vite": "^8.2.2",
48
+ "vitest": "^5.0.0"
47
49
  }
48
50
  }