@vielzeug/conduit 26.10.14 → 26.10.16

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.
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","names":[],"sources":["../src/errors.ts"],"sourcesContent":["import type { Token } from './types.js';\n\nfunction 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: 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 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 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: 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,SAAS,UAAU,EAA+B,CAChD,OAAO,EAAM,aAAe,WAC9B,CAEA,IAAa,aAAb,cAAkC,KAAM,CACtC,YAAY,EAAiB,EAAwB,CACnD,MAAM,EAAS,CAAO,EACtB,KAAK,KAAO,WAAW,KACvB,OAAO,eAAe,KAAM,WAAW,SAAS,CAClD,CACF,EAEa,+BAAb,cAAoD,YAAa,CAC/D,MAEA,YAAY,EAAkC,CAC5C,MAAM,iCAAiC,EAAM,IAAI,SAAS,CAAC,CAAC,KAAK,MAAM,GAAG,EAC1E,KAAK,MAAQ,OAAO,OAAO,CAAC,GAAG,CAAK,CAAC,CACvC,CACF,EAEa,6BAAb,cAAkD,YAAa,CAC7D,cACA,MAEA,YAAY,EAAuB,EAAuB,CACxD,MAAM,qCAAqC,UAAU,CAAK,EAAE,kBAAkB,EAAc,GAAG,EAC/F,KAAK,cAAgB,EACrB,KAAK,MAAQ,CACf,CACF,EAEa,kCAAb,cAAuD,YAAa,CAClE,MAEA,YAAY,EAAuB,CACjC,MAAM,UAAU,UAAU,CAAK,EAAE,yBAAyB,EAC1D,KAAK,MAAQ,CACf,CACF,EAEa,qBAAb,cAA0C,YAAa,CACrD,cAEA,YAAY,EAAuB,CACjC,MAAM,kCAAkC,EAAc,GAAG,EACzD,KAAK,cAAgB,CACvB,CACF,EAEa,oBAAb,cAAyC,YAAa,CACpD,OAEA,YAAY,EAA4B,CACtC,MAAM,kCAAkC,EAAO,OAAO,gBAAgB,EAAO,SAAW,EAAI,GAAK,IAAI,EAAE,EACvG,KAAK,OAAS,OAAO,OAAO,CAAC,GAAG,CAAM,CAAC,CACzC,CACF"}
1
+ {"version":3,"file":"errors.js","names":["token","message","options","cycle","containerName","errors"],"sources":["../src/errors.ts"],"sourcesContent":["import type { Token } from './types.js';\n\nfunction 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: 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 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 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: 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,SAAS,UAAU,GAA+B;CAChD,OAAOA,EAAM,eAAe;AAC9B;AAEA,IAAa,eAAb,cAAkC,MAAM;CACtC,YAAY,GAAiB,GAAwB;EAGnD,AAFA,MAAMC,GAASC,CAAO,GACtB,KAAK,OAAO,WAAW,MACvB,OAAO,eAAe,MAAM,WAAW,SAAS;CAClD;AACF,GAEa,iCAAb,cAAoD,aAAa;CAC/D;CAEA,YAAY,GAAkC;EAE5C,AADA,MAAM,iCAAiCC,EAAM,IAAI,SAAS,CAAC,CAAC,KAAK,MAAM,GAAG,GAC1E,KAAK,QAAQ,OAAO,OAAO,CAAC,GAAGA,CAAK,CAAC;CACvC;AACF,GAEa,+BAAb,cAAkD,aAAa;CAC7D;CACA;CAEA,YAAY,GAAuB,GAAuB;EAGxD,AAFA,MAAM,qCAAqC,UAAUH,CAAK,EAAE,kBAAkBI,EAAc,GAAG,GAC/F,KAAK,gBAAgBA,GACrB,KAAK,QAAQJ;CACf;AACF,GAEa,oCAAb,cAAuD,aAAa;CAClE;CAEA,YAAY,GAAuB;EAEjC,AADA,MAAM,UAAU,UAAUA,CAAK,EAAE,yBAAyB,GAC1D,KAAK,QAAQA;CACf;AACF,GAEa,uBAAb,cAA0C,aAAa;CACrD;CAEA,YAAY,GAAuB;EAEjC,AADA,MAAM,kCAAkCI,EAAc,GAAG,GACzD,KAAK,gBAAgBA;CACvB;AACF,GAEa,sBAAb,cAAyC,aAAa;CACpD;CAEA,YAAY,GAA4B;EAEtC,AADA,MAAM,kCAAkCC,EAAO,OAAO,gBAAgBA,EAAO,WAAW,IAAI,KAAK,IAAI,EAAE,GACvG,KAAK,SAAS,OAAO,OAAO,CAAC,GAAGA,CAAM,CAAC;CACzC;AACF"}
package/dist/index.js CHANGED
@@ -1 +1,4 @@
1
- import{ConduitCircularDependencyError as e,ConduitDisposeError as t,ConduitDisposedError as n,ConduitDuplicateRegistrationError as r,ConduitError as i,ConduitProviderNotFoundError as a}from"./errors.js";import{disposalSignalToken as o,factoryProvider as s,token as c,valueProvider as l}from"./types.js";import{createContainer as u}from"./container.js";export{e as ConduitCircularDependencyError,t as ConduitDisposeError,n as ConduitDisposedError,r as ConduitDuplicateRegistrationError,i as ConduitError,a as ConduitProviderNotFoundError,u as createContainer,o as disposalSignalToken,s as factoryProvider,c as token,l as valueProvider};
1
+ import { ConduitCircularDependencyError as e, ConduitDisposeError as t, ConduitDisposedError as n, ConduitDuplicateRegistrationError as r, ConduitError as i, ConduitProviderNotFoundError as a } from "./errors.js";
2
+ import { disposalSignalToken as o, factoryProvider as s, token as c, valueProvider as l } from "./types.js";
3
+ import { createContainer as u } from "./container.js";
4
+ export { e as ConduitCircularDependencyError, t as ConduitDisposeError, n as ConduitDisposedError, r as ConduitDuplicateRegistrationError, i as ConduitError, a as ConduitProviderNotFoundError, u as createContainer, o as disposalSignalToken, s as factoryProvider, c as token, l as valueProvider };
@@ -1 +1 @@
1
- {"version":3,"file":"types.cjs","names":[],"sources":["../src/types.ts"],"sourcesContent":["declare const tokenBrand: unique symbol;\n\nexport type Token<T = unknown> = symbol & { readonly [tokenBrand]: T };\n\nexport function token<T>(description: string): Token<T> {\n return Symbol(description) as Token<T>;\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. */\nexport type Lifetime = 'singleton' | 'transient';\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\n/**\n * Type-erased provider for the heterogeneous lists accepted by\n * `createContainer()` and `createScope()`. Providers are invariant in their\n * value type, so erasure needs `any` at this one boundary; registration\n * re-validates every provider at runtime.\n */\nexport type AnyProvider = Provider<any, any>;\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 type CreateScopeOptions = Readonly<{\n name?: string;\n providers?: readonly AnyProvider[];\n}>;\n\nexport interface Container {\n /**\n * Create a child container that inherits parent registrations. Providers\n * registered on the child are local to it, which is how request-scoped\n * values are spelled: one child per request.\n */\n createScope(options?: CreateScopeOptions): 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":"AAIA,SAAgB,MAAS,EAA+B,CACtD,OAAO,OAAO,CAAW,CAC3B,CAEA,IAAa,EAAsB,MAAmB,yBAAyB,EA4C/E,SAAgB,cAAiB,EAAiB,EAAmB,EAA2B,CAAC,EAAqB,CACpH,OAAO,OAAO,OAAO,CAAE,GAAG,EAAS,QAAO,OAAM,CAAC,CACnD,CAEA,SAAgB,gBACd,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"}
1
+ {"version":3,"file":"types.cjs","names":["description","disposalSignalToken","options","dependencies"],"sources":["../src/types.ts"],"sourcesContent":["declare const tokenBrand: unique symbol;\n\nexport type Token<T = unknown> = symbol & { readonly [tokenBrand]: T };\n\nexport function token<T>(description: string): Token<T> {\n return Symbol(description) as Token<T>;\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. */\nexport type Lifetime = 'singleton' | 'transient';\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\n/**\n * Type-erased provider for the heterogeneous lists accepted by\n * `createContainer()` and `createScope()`. Providers are invariant in their\n * value type, so erasure needs `any` at this one boundary; registration\n * re-validates every provider at runtime.\n */\nexport type AnyProvider = Provider<any, any>;\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 type CreateScopeOptions = Readonly<{\n name?: string;\n providers?: readonly AnyProvider[];\n}>;\n\nexport interface Container {\n /**\n * Create a child container that inherits parent registrations. Providers\n * registered on the child are local to it, which is how request-scoped\n * values are spelled: one child per request.\n */\n createScope(options?: CreateScopeOptions): 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":"AAIA,SAAgB,MAAS,EAA+B,CACtD,OAAO,OAAOA,CAAW,CAC3B,CAEA,IAAaC,EAAsB,MAAmB,yBAAyB,EA4C/E,SAAgB,cAAiB,EAAiB,EAAmB,EAA2B,CAAC,EAAqB,CACpH,OAAO,OAAO,OAAO,CAAE,GAAGC,EAAS,QAAO,OAAM,CAAC,CACnD,CAEA,SAAgB,gBACd,EACA,EACA,EACA,EAA6B,CAAC,EACI,CAClC,OAAO,OAAO,OAAO,CACnB,GAAGA,EACH,aAAc,OAAO,OAAO,CAAC,GAAGC,CAAY,CAAC,EAC7C,UACA,OACF,CAAC,CACH,C"}
package/dist/types.js CHANGED
@@ -1,2 +1,24 @@
1
- function token(e){return Symbol(e)}var e=token(`Conduit disposal signal`);function valueProvider(e,t,n={}){return Object.freeze({...n,token:e,value:t})}function factoryProvider(e,t,n,r={}){return Object.freeze({...r,dependencies:Object.freeze([...t]),factory:n,token:e})}export{e as disposalSignalToken,factoryProvider,token,valueProvider};
1
+ //#region src/types.ts
2
+ function token(e) {
3
+ return Symbol(e);
4
+ }
5
+ var e = token("Conduit disposal signal");
6
+ function valueProvider(e, t, n = {}) {
7
+ return Object.freeze({
8
+ ...n,
9
+ token: e,
10
+ value: t
11
+ });
12
+ }
13
+ function factoryProvider(e, t, n, r = {}) {
14
+ return Object.freeze({
15
+ ...r,
16
+ dependencies: Object.freeze([...t]),
17
+ factory: n,
18
+ token: e
19
+ });
20
+ }
21
+ //#endregion
22
+ export { e as disposalSignalToken, factoryProvider, token, valueProvider };
23
+
2
24
  //# 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;\n\nexport type Token<T = unknown> = symbol & { readonly [tokenBrand]: T };\n\nexport function token<T>(description: string): Token<T> {\n return Symbol(description) as Token<T>;\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. */\nexport type Lifetime = 'singleton' | 'transient';\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\n/**\n * Type-erased provider for the heterogeneous lists accepted by\n * `createContainer()` and `createScope()`. Providers are invariant in their\n * value type, so erasure needs `any` at this one boundary; registration\n * re-validates every provider at runtime.\n */\nexport type AnyProvider = Provider<any, any>;\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 type CreateScopeOptions = Readonly<{\n name?: string;\n providers?: readonly AnyProvider[];\n}>;\n\nexport interface Container {\n /**\n * Create a child container that inherits parent registrations. Providers\n * registered on the child are local to it, which is how request-scoped\n * values are spelled: one child per request.\n */\n createScope(options?: CreateScopeOptions): 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":"AAIA,SAAgB,MAAS,EAA+B,CACtD,OAAO,OAAO,CAAW,CAC3B,CAEA,IAAa,EAAsB,MAAmB,yBAAyB,EA4C/E,SAAgB,cAAiB,EAAiB,EAAmB,EAA2B,CAAC,EAAqB,CACpH,OAAO,OAAO,OAAO,CAAE,GAAG,EAAS,QAAO,OAAM,CAAC,CACnD,CAEA,SAAgB,gBACd,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"}
1
+ {"version":3,"file":"types.js","names":["description","disposalSignalToken","options","dependencies"],"sources":["../src/types.ts"],"sourcesContent":["declare const tokenBrand: unique symbol;\n\nexport type Token<T = unknown> = symbol & { readonly [tokenBrand]: T };\n\nexport function token<T>(description: string): Token<T> {\n return Symbol(description) as Token<T>;\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. */\nexport type Lifetime = 'singleton' | 'transient';\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\n/**\n * Type-erased provider for the heterogeneous lists accepted by\n * `createContainer()` and `createScope()`. Providers are invariant in their\n * value type, so erasure needs `any` at this one boundary; registration\n * re-validates every provider at runtime.\n */\nexport type AnyProvider = Provider<any, any>;\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 type CreateScopeOptions = Readonly<{\n name?: string;\n providers?: readonly AnyProvider[];\n}>;\n\nexport interface Container {\n /**\n * Create a child container that inherits parent registrations. Providers\n * registered on the child are local to it, which is how request-scoped\n * values are spelled: one child per request.\n */\n createScope(options?: CreateScopeOptions): 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":";AAIA,SAAgB,MAAS,GAA+B;CACtD,OAAO,OAAOA,CAAW;AAC3B;AAEA,IAAaC,IAAsB,MAAmB,yBAAyB;AA4C/E,SAAgB,cAAiB,GAAiB,GAAmB,IAA2B,CAAC,GAAqB;CACpH,OAAO,OAAO,OAAO;EAAE,GAAGC;EAAS;EAAO;CAAM,CAAC;AACnD;AAEA,SAAgB,gBACd,GACA,GACA,GACA,IAA6B,CAAC,GACI;CAClC,OAAO,OAAO,OAAO;EACnB,GAAGA;EACH,cAAc,OAAO,OAAO,CAAC,GAAGC,CAAY,CAAC;EAC7C;EACA;CACF,CAAC;AACH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vielzeug/conduit",
3
- "version": "26.10.14",
3
+ "version": "26.10.16",
4
4
  "description": "Typed dependency injection container",
5
5
  "repository": {
6
6
  "type": "git",
@@ -42,9 +42,9 @@
42
42
  "verify:exports": "node verify-exports.mjs"
43
43
  },
44
44
  "devDependencies": {
45
- "@types/node": "^26.6.2",
45
+ "@types/node": "^26.6.5",
46
46
  "typescript": "^6.0.3",
47
- "vite": "^8.3.0",
48
- "vitest": "^5.0.1"
47
+ "vite": "^8.3.4",
48
+ "vitest": "^5.0.5"
49
49
  }
50
50
  }