ts-ioc-container 57.1.0 → 57.3.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/cjm/index.js CHANGED
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.onConstructAsyncHooksRunner = exports.AddOnConstructHookModule = exports.onConstruct = exports.onConstructHooksRunner = exports.injectProp = exports.createHookContext = exports.createHookContextFactory = exports.HookContext = exports.prepend = exports.append = exports.prependHooks = exports.appendHooks = exports.hasHooks = exports.hook = exports.getHooks = exports.UnsupportedTokenTypeError = exports.CannonSingletonApplyTwiceError = exports.UnexpectedHookResultError = exports.ProviderDisposedError = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyMissingKeyError = exports.ContainerNotFoundError = exports.DependencyNotFoundError = exports.ContainerError = exports.Registration = exports.appendArgsFn = exports.appendArgs = exports.decorate = exports.singleton = exports.autoResolve = exports.lazy = exports.scopeAccess = exports.scope = exports.bindTo = exports.register = exports.Provider = exports.ProxyInjector = exports.SimpleInjector = exports.resolveArgs = exports.argsFn = exports.args = exports.arg = exports.inject = exports.MetadataInjector = exports.Injector = exports.EmptyContainer = exports.AutoResolveModule = exports.Container = exports.isDependencyKey = void 0;
4
- exports.resolveConstructor = exports.Is = exports.pipe = exports.select = exports.once = exports.shallowCache = exports.debounce = exports.throttle = exports.handleAsyncError = exports.handleError = exports.getMethodTags = exports.addMethodTag = exports.getMethodLabels = exports.addMethodLabel = exports.getMethodMeta = exports.addMethodMeta = exports.getParamTags = exports.addParamTag = exports.getParamLabels = exports.addParamLabel = exports.getParamMeta = exports.addParamMeta = exports.getClassTags = exports.addClassTag = exports.getClassLabels = exports.addClassLabel = exports.getClassMeta = exports.addClassMeta = exports.GroupInstanceToken = exports.ConstantToken = exports.FunctionToken = exports.SingleToken = exports.ClassToken = exports.toSingleAlias = exports.SingleAliasToken = exports.toGroupAlias = exports.GroupAliasToken = exports.argToToken = exports.toMappedToken = exports.toToken = exports.InjectionToken = exports.HooksRunner = exports.AddOnDisposeHookModule = exports.onContainerDisposed = exports.onContainerDisposedHooksRunner = exports.AddOnConstructAsyncHookModule = exports.onConstructAsync = void 0;
3
+ exports.createHookContext = exports.createHookContextFactory = exports.HookContext = exports.prepend = exports.append = exports.prependHooks = exports.appendHooks = exports.hasHooks = exports.hook = exports.getHooks = exports.UnsupportedTokenTypeError = exports.CannonSingletonApplyTwiceError = exports.UnexpectedHookResultError = exports.ProviderDisposedError = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyMissingKeyError = exports.ContainerNotFoundError = exports.DependencyNotFoundError = exports.ContainerError = exports.Registration = exports.appendArgsFn = exports.appendArgs = exports.decorate = exports.singleton = exports.autoResolve = exports.lazy = exports.scopeAccess = exports.scope = exports.bindTo = exports.register = exports.toRegistrationFn = exports.toProviderFn = exports.toBindToken = exports.registerPipe = exports.isProviderPipe = exports.Provider = exports.ProxyInjector = exports.SimpleInjector = exports.resolveArgs = exports.argsFn = exports.args = exports.arg = exports.inject = exports.MetadataInjector = exports.Injector = exports.EmptyContainer = exports.AutoResolveModule = exports.Container = exports.isDependencyKey = void 0;
4
+ exports.pipe = exports.select = exports.once = exports.shallowCache = exports.debounce = exports.throttle = exports.handleAsyncError = exports.handleError = exports.getMethodTags = exports.addMethodTag = exports.getMethodLabels = exports.addMethodLabel = exports.getMethodMeta = exports.addMethodMeta = exports.getParamTags = exports.addParamTag = exports.getParamLabels = exports.addParamLabel = exports.getParamMeta = exports.addParamMeta = exports.getClassTags = exports.addClassTag = exports.getClassLabels = exports.addClassLabel = exports.getClassMeta = exports.addClassMeta = exports.GroupInstanceToken = exports.ConstantToken = exports.FunctionToken = exports.SingleToken = exports.ClassToken = exports.toSingleAlias = exports.SingleAliasToken = exports.toGroupAlias = exports.GroupAliasToken = exports.argToToken = exports.toMappedToken = exports.toToken = exports.InjectionToken = exports.HooksRunner = exports.AddOnDisposeHookModule = exports.onContainerDisposed = exports.onContainerDisposedHooksRunner = exports.AddOnConstructAsyncHookModule = exports.onConstructAsync = exports.onConstructAsyncHooksRunner = exports.AddOnConstructHookModule = exports.onConstruct = exports.onConstructHooksRunner = exports.injectProp = void 0;
5
+ exports.resolveConstructor = exports.Is = void 0;
5
6
  var IContainer_1 = require("./container/IContainer");
6
7
  Object.defineProperty(exports, "isDependencyKey", { enumerable: true, get: function () { return IContainer_1.isDependencyKey; } });
7
8
  var Container_1 = require("./container/Container");
@@ -26,6 +27,11 @@ Object.defineProperty(exports, "ProxyInjector", { enumerable: true, get: functio
26
27
  var Provider_1 = require("./provider/Provider");
27
28
  Object.defineProperty(exports, "Provider", { enumerable: true, get: function () { return Provider_1.Provider; } });
28
29
  var IRegistration_1 = require("./registration/IRegistration");
30
+ Object.defineProperty(exports, "isProviderPipe", { enumerable: true, get: function () { return IRegistration_1.isProviderPipe; } });
31
+ Object.defineProperty(exports, "registerPipe", { enumerable: true, get: function () { return IRegistration_1.registerPipe; } });
32
+ Object.defineProperty(exports, "toBindToken", { enumerable: true, get: function () { return IRegistration_1.toBindToken; } });
33
+ Object.defineProperty(exports, "toProviderFn", { enumerable: true, get: function () { return IRegistration_1.toProviderFn; } });
34
+ Object.defineProperty(exports, "toRegistrationFn", { enumerable: true, get: function () { return IRegistration_1.toRegistrationFn; } });
29
35
  Object.defineProperty(exports, "register", { enumerable: true, get: function () { return IRegistration_1.register; } });
30
36
  Object.defineProperty(exports, "bindTo", { enumerable: true, get: function () { return IRegistration_1.bindTo; } });
31
37
  Object.defineProperty(exports, "scope", { enumerable: true, get: function () { return IRegistration_1.scope; } });
@@ -1,9 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.singleton = exports.decorate = exports.autoResolve = exports.lazy = exports.scopeAccess = exports.appendArgsFn = exports.appendArgs = exports.scope = exports.bindTo = exports.register = exports.getTransformers = exports.registerPipe = exports.isProviderPipe = void 0;
3
+ exports.singleton = exports.decorate = exports.autoResolve = exports.lazy = exports.scopeAccess = exports.appendArgsFn = exports.appendArgs = exports.scope = exports.bindTo = exports.register = exports.getTransformers = exports.toRegistrationFn = exports.toProviderFn = exports.toBindToken = exports.registerPipe = exports.isProviderPipe = void 0;
4
4
  const IContainer_1 = require("../container/IContainer");
5
5
  const SingleToken_1 = require("../token/SingleToken");
6
- const BindToken_1 = require("../token/BindToken");
7
6
  const class_1 = require("../metadata/class");
8
7
  const isProviderPipe = (obj) => obj !== null && typeof obj === 'object' && 'mapProvider' in obj;
9
8
  exports.isProviderPipe = isProviderPipe;
@@ -12,24 +11,29 @@ const registerPipe = (mapProvider) => ({
12
11
  mapRegistration: (r) => r.pipe(mapProvider),
13
12
  });
14
13
  exports.registerPipe = registerPipe;
14
+ const toBindToken = (target) => (0, IContainer_1.isDependencyKey)(target) ? new SingleToken_1.SingleToken(target) : target;
15
+ exports.toBindToken = toBindToken;
16
+ const toProviderFn = (mapper) => (0, exports.isProviderPipe)(mapper) ? mapper.mapProvider.bind(mapper) : mapper;
17
+ exports.toProviderFn = toProviderFn;
18
+ const toRegistrationFn = (mapper) => {
19
+ if (typeof mapper === 'function')
20
+ return mapper;
21
+ if ((0, exports.isProviderPipe)(mapper))
22
+ return (r) => mapper.mapRegistration(r);
23
+ return (0, exports.bindTo)(mapper);
24
+ };
25
+ exports.toRegistrationFn = toRegistrationFn;
15
26
  const METADATA_KEY = 'registration';
16
27
  const getTransformers = (Target) => (0, class_1.getClassMeta)(Target, METADATA_KEY) ?? [];
17
28
  exports.getTransformers = getTransformers;
18
29
  const register = (...mappers) => (0, class_1.addClassMeta)(METADATA_KEY, (acc) => {
19
- const result = mappers.map((m) => {
20
- if ((0, exports.isProviderPipe)(m))
21
- return (r) => m.mapRegistration(r);
22
- if ((0, BindToken_1.isBindToken)(m) || (0, IContainer_1.isDependencyKey)(m))
23
- return (0, exports.bindTo)(m);
24
- return m;
25
- });
30
+ const result = mappers.map((m) => (0, exports.toRegistrationFn)(m));
26
31
  return acc ? [...result, ...acc] : result;
27
32
  });
28
33
  exports.register = register;
29
34
  const bindTo = (...tokens) => (r) => {
30
35
  for (const token of tokens) {
31
- const targetToken = (0, BindToken_1.isBindToken)(token) ? token : new SingleToken_1.SingleToken(token);
32
- targetToken.bindTo(r);
36
+ (0, exports.toBindToken)(token).bindTo(r);
33
37
  }
34
38
  return r;
35
39
  };
@@ -1,12 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Registration = void 0;
4
- const IContainer_1 = require("../container/IContainer");
5
4
  const Provider_1 = require("../provider/Provider");
6
5
  const DependencyMissingKeyError_1 = require("../errors/DependencyMissingKeyError");
7
6
  const IRegistration_1 = require("./IRegistration");
8
- const IRegistration_2 = require("./IRegistration");
9
- const SingleToken_1 = require("../token/SingleToken");
10
7
  const fp_1 = require("../utils/fp");
11
8
  const basic_1 = require("../utils/basic");
12
9
  class Registration {
@@ -14,12 +11,12 @@ class Registration {
14
11
  key;
15
12
  scopeRules;
16
13
  static fromClass(Target, { name } = {}) {
17
- const transform = (0, fp_1.pipe)(...(0, IRegistration_2.getTransformers)(Target));
14
+ const transform = (0, fp_1.pipe)(...(0, IRegistration_1.getTransformers)(Target));
18
15
  return transform(new Registration(() => Provider_1.Provider.fromClass(Target), name ?? Target.name));
19
16
  }
20
17
  static fromValue(value) {
21
18
  if (basic_1.Is.constructor(value)) {
22
- const transform = (0, fp_1.pipe)(...(0, IRegistration_2.getTransformers)(value));
19
+ const transform = (0, fp_1.pipe)(...(0, IRegistration_1.getTransformers)(value));
23
20
  return transform(new Registration(() => Provider_1.Provider.fromValue(value), value.name));
24
21
  }
25
22
  return new Registration(() => Provider_1.Provider.fromValue(value));
@@ -46,8 +43,7 @@ class Registration {
46
43
  return this;
47
44
  }
48
45
  pipe(...mappers) {
49
- const fns = mappers.map((m) => ((0, IRegistration_1.isProviderPipe)(m) ? m.mapProvider.bind(m) : m));
50
- this.mappers.push(...fns);
46
+ this.mappers.push(...mappers.map(IRegistration_1.toProviderFn));
51
47
  return this;
52
48
  }
53
49
  when(...predicates) {
@@ -55,11 +51,7 @@ class Registration {
55
51
  return this;
56
52
  }
57
53
  bindTo(key) {
58
- if ((0, IContainer_1.isDependencyKey)(key)) {
59
- new SingleToken_1.SingleToken(key).bindTo(this);
60
- return this;
61
- }
62
- key.bindTo(this);
54
+ (0, IRegistration_1.toBindToken)(key).bindTo(this);
63
55
  return this;
64
56
  }
65
57
  matchScope(container) {
package/esm/index.js CHANGED
@@ -7,7 +7,7 @@ export { MetadataInjector, inject, arg, args, argsFn, resolveArgs } from './inje
7
7
  export { SimpleInjector } from './injector/SimpleInjector.js';
8
8
  export { ProxyInjector } from './injector/ProxyInjector.js';
9
9
  export { Provider } from './provider/Provider.js';
10
- export { register, bindTo, scope, scopeAccess, lazy, autoResolve, singleton, decorate, appendArgs, appendArgsFn, } from './registration/IRegistration.js';
10
+ export { isProviderPipe, registerPipe, toBindToken, toProviderFn, toRegistrationFn, register, bindTo, scope, scopeAccess, lazy, autoResolve, singleton, decorate, appendArgs, appendArgsFn, } from './registration/IRegistration.js';
11
11
  export { Registration } from './registration/Registration.js';
12
12
  export { ContainerError } from './errors/ContainerError.js';
13
13
  export { DependencyNotFoundError } from './errors/DependencyNotFoundError.js';
@@ -1,28 +1,29 @@
1
1
  import { isDependencyKey } from '../container/IContainer.js';
2
2
  import { SingleToken } from '../token/SingleToken.js';
3
- import { isBindToken } from '../token/BindToken.js';
4
3
  import { addClassMeta, getClassMeta } from '../metadata/class.js';
5
4
  export const isProviderPipe = (obj) => obj !== null && typeof obj === 'object' && 'mapProvider' in obj;
6
5
  export const registerPipe = (mapProvider) => ({
7
6
  mapProvider,
8
7
  mapRegistration: (r) => r.pipe(mapProvider),
9
8
  });
9
+ export const toBindToken = (target) => isDependencyKey(target) ? new SingleToken(target) : target;
10
+ export const toProviderFn = (mapper) => isProviderPipe(mapper) ? mapper.mapProvider.bind(mapper) : mapper;
11
+ export const toRegistrationFn = (mapper) => {
12
+ if (typeof mapper === 'function')
13
+ return mapper;
14
+ if (isProviderPipe(mapper))
15
+ return (r) => mapper.mapRegistration(r);
16
+ return bindTo(mapper);
17
+ };
10
18
  const METADATA_KEY = 'registration';
11
19
  export const getTransformers = (Target) => getClassMeta(Target, METADATA_KEY) ?? [];
12
20
  export const register = (...mappers) => addClassMeta(METADATA_KEY, (acc) => {
13
- const result = mappers.map((m) => {
14
- if (isProviderPipe(m))
15
- return (r) => m.mapRegistration(r);
16
- if (isBindToken(m) || isDependencyKey(m))
17
- return bindTo(m);
18
- return m;
19
- });
21
+ const result = mappers.map((m) => toRegistrationFn(m));
20
22
  return acc ? [...result, ...acc] : result;
21
23
  });
22
24
  export const bindTo = (...tokens) => (r) => {
23
25
  for (const token of tokens) {
24
- const targetToken = isBindToken(token) ? token : new SingleToken(token);
25
- targetToken.bindTo(r);
26
+ toBindToken(token).bindTo(r);
26
27
  }
27
28
  return r;
28
29
  };
@@ -1,9 +1,6 @@
1
- import { isDependencyKey } from '../container/IContainer.js';
2
1
  import { Provider } from '../provider/Provider.js';
3
2
  import { DependencyMissingKeyError } from '../errors/DependencyMissingKeyError.js';
4
- import { isProviderPipe } from './IRegistration.js';
5
- import { getTransformers } from './IRegistration.js';
6
- import { SingleToken } from '../token/SingleToken.js';
3
+ import { getTransformers, toBindToken, toProviderFn, } from './IRegistration.js';
7
4
  import { pipe } from '../utils/fp.js';
8
5
  import { Is } from '../utils/basic.js';
9
6
  export class Registration {
@@ -43,8 +40,7 @@ export class Registration {
43
40
  return this;
44
41
  }
45
42
  pipe(...mappers) {
46
- const fns = mappers.map((m) => (isProviderPipe(m) ? m.mapProvider.bind(m) : m));
47
- this.mappers.push(...fns);
43
+ this.mappers.push(...mappers.map(toProviderFn));
48
44
  return this;
49
45
  }
50
46
  when(...predicates) {
@@ -52,11 +48,7 @@ export class Registration {
52
48
  return this;
53
49
  }
54
50
  bindTo(key) {
55
- if (isDependencyKey(key)) {
56
- new SingleToken(key).bindTo(this);
57
- return this;
58
- }
59
- key.bindTo(this);
51
+ toBindToken(key).bindTo(this);
60
52
  return this;
61
53
  }
62
54
  matchScope(container) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-ioc-container",
3
- "version": "57.1.0",
3
+ "version": "57.3.0",
4
4
  "description": "Fast, lightweight TypeScript dependency injection container with a clean API, scoped lifecycles, decorators, tokens, hooks, lazy injection, customizable providers, and no global container objects.",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -8,7 +8,7 @@ export { SimpleInjector } from './injector/SimpleInjector.js';
8
8
  export { ProxyInjector } from './injector/ProxyInjector.js';
9
9
  export { type ResolveDependency, type IProvider, type DecorateFn, type ArgsFn, type ProviderOptions, type GetCacheKey, type ScopeAccessOptions, type ScopeAccessRule, } from './provider/IProvider.js';
10
10
  export { Provider } from './provider/Provider.js';
11
- export { type IRegistration, type ReturnTypeOfRegistration, type ScopeMatchRule, type ProviderPipe, register, bindTo, scope, scopeAccess, lazy, autoResolve, singleton, decorate, appendArgs, appendArgsFn, } from './registration/IRegistration.js';
11
+ export { type IRegistration, type ReturnTypeOfRegistration, type ScopeMatchRule, type ProviderPipe, type Bindable, type ProviderMapper, type RegistrationMapper, isProviderPipe, registerPipe, toBindToken, toProviderFn, toRegistrationFn, register, bindTo, scope, scopeAccess, lazy, autoResolve, singleton, decorate, appendArgs, appendArgsFn, } from './registration/IRegistration.js';
12
12
  export { Registration } from './registration/Registration.js';
13
13
  export { ContainerError } from './errors/ContainerError.js';
14
14
  export { DependencyNotFoundError } from './errors/DependencyNotFoundError.js';
@@ -10,18 +10,24 @@ export interface ProviderPipe<T = unknown> {
10
10
  }
11
11
  export declare const isProviderPipe: <T>(obj: unknown) => obj is ProviderPipe<T>;
12
12
  export declare const registerPipe: <T>(mapProvider: (p: IProvider<T>) => IProvider<T>) => ProviderPipe<T>;
13
+ export type Bindable<T = any> = DependencyKey | BindToken<T>;
14
+ export declare const toBindToken: <T>(target: Bindable<T>) => BindToken<T>;
15
+ export type ProviderMapper<T = any> = MapFn<IProvider<T>> | ProviderPipe<T>;
16
+ export declare const toProviderFn: <T>(mapper: ProviderMapper<T>) => MapFn<IProvider<T>>;
17
+ export type RegistrationMapper<T = any> = MapFn<IRegistration<T>> | ProviderPipe<T> | Bindable<T>;
18
+ export declare const toRegistrationFn: <T>(mapper: RegistrationMapper<T>) => MapFn<IRegistration<T>>;
13
19
  export interface IRegistration<T = any> extends IContainerModule {
14
20
  getKeyOrFail(): DependencyKey;
15
21
  when(...predicates: ScopeMatchRule[]): this;
16
22
  bindToKey(key: DependencyKey): this;
17
- bindTo(key: DependencyKey | BindToken): this;
18
- pipe(...mappers: (MapFn<IProvider<T>> | ProviderPipe<T>)[]): this;
23
+ bindTo(key: Bindable): this;
24
+ pipe(...mappers: ProviderMapper<T>[]): this;
19
25
  bindToAlias(alias: DependencyKey): this;
20
26
  }
21
27
  export type ReturnTypeOfRegistration<T> = T extends IRegistration<infer R> ? R : never;
22
28
  export declare const getTransformers: (Target: constructor<unknown>) => MapFn<IRegistration<any>>[];
23
- export declare const register: (...mappers: Array<MapFn<IRegistration> | ProviderPipe | BindToken | DependencyKey>) => ClassDecorator;
24
- export declare const bindTo: (...tokens: (DependencyKey | BindToken)[]) => MapFn<IRegistration>;
29
+ export declare const register: (...mappers: RegistrationMapper[]) => ClassDecorator;
30
+ export declare const bindTo: (...tokens: Bindable[]) => MapFn<IRegistration>;
25
31
  export declare const scope: (...rules: ScopeMatchRule[]) => MapFn<IRegistration>;
26
32
  export declare const appendArgs: <T>(...extraArgs: unknown[]) => ProviderPipe<T>;
27
33
  export declare const appendArgsFn: <T>(fn: ArgsFn) => ProviderPipe<T>;
@@ -1,8 +1,6 @@
1
1
  import { DependencyKey, IContainer } from '../container/IContainer.js';
2
2
  import type { IProvider, ResolveDependency } from '../provider/IProvider.js';
3
- import { IRegistration, ProviderPipe, ScopeMatchRule } from './IRegistration.js';
4
- import { BindToken } from '../token/BindToken.js';
5
- import { type MapFn } from '../utils/fp.js';
3
+ import { type Bindable, type IRegistration, type ProviderMapper, type ScopeMatchRule } from './IRegistration.js';
6
4
  import { type constructor } from '../utils/basic.js';
7
5
  export declare class Registration<T = any> implements IRegistration<T> {
8
6
  private createProvider;
@@ -19,9 +17,9 @@ export declare class Registration<T = any> implements IRegistration<T> {
19
17
  constructor(createProvider: () => IProvider<T>, key?: DependencyKey | undefined, scopeRules?: ScopeMatchRule[]);
20
18
  bindToKey(key: DependencyKey): this;
21
19
  bindToAlias(alias: DependencyKey): this;
22
- pipe(...mappers: (MapFn<IProvider<T>> | ProviderPipe<T>)[]): this;
20
+ pipe(...mappers: ProviderMapper<T>[]): this;
23
21
  when(...predicates: ScopeMatchRule[]): this;
24
- bindTo(key: DependencyKey | BindToken): this;
22
+ bindTo(key: Bindable): this;
25
23
  private matchScope;
26
24
  applyTo(container: IContainer): void;
27
25
  getKeyOrFail(): DependencyKey;