ts-ioc-container 44.0.4 → 45.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.
@@ -30,7 +30,7 @@ class Container {
30
30
  this.aliases.setAliasesByKey(key, aliases);
31
31
  return this;
32
32
  }
33
- resolve(target, { args = [], child = this, lazy } = {}) {
33
+ resolve(target, { args, child = this, lazy } = {}) {
34
34
  this.validateContainer();
35
35
  if (utils_1.Is.constructor(target)) {
36
36
  return this.injector.resolve(this, target, { args, lazy });
@@ -40,7 +40,7 @@ class Container {
40
40
  ? provider.resolve(this, { args, lazy })
41
41
  : this.parent.resolve(target, { args, child, lazy });
42
42
  }
43
- resolveByAlias(alias, { args = [], child = this, lazy, excludedKeys = [] } = {}) {
43
+ resolveByAlias(alias, { args, child = this, lazy, excludedKeys = [] } = {}) {
44
44
  this.validateContainer();
45
45
  const keys = [];
46
46
  const deps = [];
@@ -60,7 +60,7 @@ class Container {
60
60
  });
61
61
  return [...deps, ...parentDeps];
62
62
  }
63
- resolveOneByAlias(alias, { args = [], child = this, lazy } = {}) {
63
+ resolveOneByAlias(alias, { args, child = this, lazy } = {}) {
64
64
  this.validateContainer();
65
65
  const [key, ..._] = this.aliases.getKeysByAlias(alias);
66
66
  const provider = key ? this.findProviderByKeyOrFail(key) : undefined;
@@ -68,12 +68,12 @@ class Container {
68
68
  ? provider.resolve(this, { args, lazy })
69
69
  : this.parent.resolveOneByAlias(key, { args, child, lazy });
70
70
  }
71
- createScope({ tags = [] } = {}) {
71
+ createScope({ tags } = {}) {
72
72
  this.validateContainer();
73
73
  const scope = new Container({ injector: this.injector, parent: this, tags })
74
74
  .addOnConstructHook(...this.onConstructHookList)
75
75
  .addOnDisposeHook(...this.onDisposeHookList);
76
- for (const registration of this.getRegistrations()) {
76
+ for (const registration of [...this.parent.getRegistrations(), ...this.registrations]) {
77
77
  registration.applyTo(scope);
78
78
  }
79
79
  this.scopes.push(scope);
package/cjm/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ClassToken = exports.toAliasUniq = exports.AliasUniqToken = exports.AliasToken = exports.InjectionToken = exports.getParameterMetadata = exports.getMethodMetadata = exports.setMethodMetadata = exports.setParameterMetadata = exports.getMetadata = exports.setMetadata = exports.HooksRunner = exports.onDispose = exports.onDisposeHooksRunner = exports.onConstruct = exports.onConstructHooksRunner = exports.injectProp = exports.HookContext = exports.hasHooks = exports.hook = exports.getHooks = exports.UnexpectedHookResultError = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyMissingKeyError = exports.DependencyNotFoundError = exports.Registration = exports.bindTo = exports.register = exports.scope = exports.decorate = exports.MultiCache = exports.multiCache = exports.SingletonProvider = exports.singleton = exports.Provider = exports.resolveByArgs = exports.ProviderDecorator = exports.args = exports.argsFn = exports.lazy = exports.scopeAccess = exports.ProxyInjector = exports.SimpleInjector = exports.MetadataInjector = exports.resolveArgs = exports.inject = exports.EmptyContainer = exports.Container = exports.isDependencyKey = void 0;
3
+ exports.ClassToken = exports.toAliasUniq = exports.AliasUniqToken = exports.AliasToken = exports.InjectionToken = exports.getParameterMetadata = exports.getMethodMetadata = exports.setMethodMetadata = exports.setParameterMetadata = exports.getClassMetadata = exports.setClassMetadata = exports.HooksRunner = exports.onDispose = exports.onDisposeHooksRunner = exports.onConstruct = exports.onConstructHooksRunner = exports.injectProp = exports.HookContext = exports.hasHooks = exports.hook = exports.getHooks = exports.UnexpectedHookResultError = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyMissingKeyError = exports.DependencyNotFoundError = exports.Registration = exports.bindTo = exports.register = exports.scope = exports.decorate = exports.MultiCache = exports.multiCache = exports.SingletonProvider = exports.singleton = exports.Provider = exports.resolveByArgs = exports.ProviderDecorator = exports.args = exports.argsFn = exports.lazy = exports.scopeAccess = exports.ProxyInjector = exports.SimpleInjector = exports.MetadataInjector = exports.resolveArgs = exports.inject = exports.EmptyContainer = exports.Container = exports.isDependencyKey = void 0;
4
4
  exports.Is = exports.select = exports.InstanceListToken = exports.ConstantToken = exports.FunctionToken = exports.IDToken = void 0;
5
5
  // Containers
6
6
  var IContainer_1 = require("./container/IContainer");
@@ -75,8 +75,8 @@ var HooksRunner_1 = require("./hooks/HooksRunner");
75
75
  Object.defineProperty(exports, "HooksRunner", { enumerable: true, get: function () { return HooksRunner_1.HooksRunner; } });
76
76
  // Metadata
77
77
  var metadata_1 = require("./metadata");
78
- Object.defineProperty(exports, "setMetadata", { enumerable: true, get: function () { return metadata_1.setMetadata; } });
79
- Object.defineProperty(exports, "getMetadata", { enumerable: true, get: function () { return metadata_1.getMetadata; } });
78
+ Object.defineProperty(exports, "setClassMetadata", { enumerable: true, get: function () { return metadata_1.setClassMetadata; } });
79
+ Object.defineProperty(exports, "getClassMetadata", { enumerable: true, get: function () { return metadata_1.getClassMetadata; } });
80
80
  Object.defineProperty(exports, "setParameterMetadata", { enumerable: true, get: function () { return metadata_1.setParameterMetadata; } });
81
81
  Object.defineProperty(exports, "setMethodMetadata", { enumerable: true, get: function () { return metadata_1.setMethodMetadata; } });
82
82
  Object.defineProperty(exports, "getMethodMetadata", { enumerable: true, get: function () { return metadata_1.getMethodMetadata; } });
@@ -7,7 +7,7 @@ const ConstantToken_1 = require("../token/ConstantToken");
7
7
  const toToken_1 = require("../token/toToken");
8
8
  const hookMetaKey = (methodName = 'constructor') => `inject:${methodName}`;
9
9
  const inject = (fn) => (target, propertyKey, parameterIndex) => {
10
- (0, metadata_1.setParameterMetadata)(hookMetaKey(propertyKey), (0, toToken_1.toToken)(fn))(utils_1.Is.instance(target) ? target.constructor : target, propertyKey, parameterIndex);
10
+ (0, metadata_1.setParameterMetadata)(hookMetaKey(propertyKey), () => (0, toToken_1.toToken)(fn))(utils_1.Is.instance(target) ? target.constructor : target, propertyKey, parameterIndex);
11
11
  };
12
12
  exports.inject = inject;
13
13
  const resolveArgs = (Target, methodName) => {
package/cjm/metadata.js CHANGED
@@ -1,17 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getMethodMetadata = exports.setMethodMetadata = exports.getParameterMetadata = exports.setParameterMetadata = exports.setMetadata = void 0;
4
- exports.getMetadata = getMetadata;
5
- const setMetadata = (key, value) => (target) => {
6
- Reflect.defineMetadata(key, value, target);
3
+ exports.getMethodMetadata = exports.setMethodMetadata = exports.getParameterMetadata = exports.setParameterMetadata = exports.setClassMetadata = void 0;
4
+ exports.getClassMetadata = getClassMetadata;
5
+ const setClassMetadata = (key, mapFn) => (target) => {
6
+ const value = Reflect.getOwnMetadata(key, target);
7
+ Reflect.defineMetadata(key, mapFn(value), target);
7
8
  };
8
- exports.setMetadata = setMetadata;
9
- function getMetadata(target, key) {
9
+ exports.setClassMetadata = setClassMetadata;
10
+ function getClassMetadata(target, key) {
10
11
  return Reflect.getOwnMetadata(key, target);
11
12
  }
12
- const setParameterMetadata = (key, value) => (target, propertyKey, parameterIndex) => {
13
+ const setParameterMetadata = (key, mapFn) => (target, propertyKey, parameterIndex) => {
13
14
  const metadata = Reflect.getOwnMetadata(key, target) ?? [];
14
- metadata[parameterIndex] = value;
15
+ metadata[parameterIndex] = mapFn(metadata[parameterIndex]);
15
16
  Reflect.defineMetadata(key, metadata, target);
16
17
  };
17
18
  exports.setParameterMetadata = setParameterMetadata;
@@ -19,8 +20,9 @@ const getParameterMetadata = (key, target) => {
19
20
  return Reflect.getOwnMetadata(key, target) ?? [];
20
21
  };
21
22
  exports.getParameterMetadata = getParameterMetadata;
22
- const setMethodMetadata = (key, value) => (target, propertyKey) => {
23
- Reflect.defineMetadata(key, value, target.constructor, propertyKey);
23
+ const setMethodMetadata = (key, mapFn) => (target, propertyKey) => {
24
+ const metadata = Reflect.getMetadata(key, target.constructor, propertyKey);
25
+ Reflect.defineMetadata(key, mapFn(metadata), target.constructor, propertyKey);
24
26
  };
25
27
  exports.setMethodMetadata = setMethodMetadata;
26
28
  const getMethodMetadata = (key, target, propertyKey) => Reflect.getMetadata(key, target.constructor, propertyKey);
@@ -8,9 +8,9 @@ const BindToken_1 = require("../token/BindToken");
8
8
  const scope = (...predicates) => (r) => r.when(...predicates);
9
9
  exports.scope = scope;
10
10
  const METADATA_KEY = 'registration';
11
- const getTransformers = (Target) => (0, metadata_1.getMetadata)(Target, METADATA_KEY) ?? [];
11
+ const getTransformers = (Target) => (0, metadata_1.getClassMetadata)(Target, METADATA_KEY) ?? [];
12
12
  exports.getTransformers = getTransformers;
13
- const register = (...mappers) => (0, metadata_1.setMetadata)(METADATA_KEY, mappers.map((m) => ((0, ProviderPipe_1.isProviderPipe)(m) ? (r) => m.mapRegistration(r) : m)));
13
+ const register = (...mappers) => (0, metadata_1.setClassMetadata)(METADATA_KEY, () => mappers.map((m) => ((0, ProviderPipe_1.isProviderPipe)(m) ? (r) => m.mapRegistration(r) : m)));
14
14
  exports.register = register;
15
15
  const bindTo = (...tokens) => (r) => {
16
16
  for (const token of tokens) {
@@ -27,7 +27,7 @@ export class Container {
27
27
  this.aliases.setAliasesByKey(key, aliases);
28
28
  return this;
29
29
  }
30
- resolve(target, { args = [], child = this, lazy } = {}) {
30
+ resolve(target, { args, child = this, lazy } = {}) {
31
31
  this.validateContainer();
32
32
  if (Is.constructor(target)) {
33
33
  return this.injector.resolve(this, target, { args, lazy });
@@ -37,7 +37,7 @@ export class Container {
37
37
  ? provider.resolve(this, { args, lazy })
38
38
  : this.parent.resolve(target, { args, child, lazy });
39
39
  }
40
- resolveByAlias(alias, { args = [], child = this, lazy, excludedKeys = [] } = {}) {
40
+ resolveByAlias(alias, { args, child = this, lazy, excludedKeys = [] } = {}) {
41
41
  this.validateContainer();
42
42
  const keys = [];
43
43
  const deps = [];
@@ -57,7 +57,7 @@ export class Container {
57
57
  });
58
58
  return [...deps, ...parentDeps];
59
59
  }
60
- resolveOneByAlias(alias, { args = [], child = this, lazy } = {}) {
60
+ resolveOneByAlias(alias, { args, child = this, lazy } = {}) {
61
61
  this.validateContainer();
62
62
  const [key, ..._] = this.aliases.getKeysByAlias(alias);
63
63
  const provider = key ? this.findProviderByKeyOrFail(key) : undefined;
@@ -65,12 +65,12 @@ export class Container {
65
65
  ? provider.resolve(this, { args, lazy })
66
66
  : this.parent.resolveOneByAlias(key, { args, child, lazy });
67
67
  }
68
- createScope({ tags = [] } = {}) {
68
+ createScope({ tags } = {}) {
69
69
  this.validateContainer();
70
70
  const scope = new Container({ injector: this.injector, parent: this, tags })
71
71
  .addOnConstructHook(...this.onConstructHookList)
72
72
  .addOnDisposeHook(...this.onDisposeHookList);
73
- for (const registration of this.getRegistrations()) {
73
+ for (const registration of [...this.parent.getRegistrations(), ...this.registrations]) {
74
74
  registration.applyTo(scope);
75
75
  }
76
76
  this.scopes.push(scope);
package/esm/index.js CHANGED
@@ -31,7 +31,7 @@ export { onDisposeHooksRunner, onDispose } from './hooks/onDispose';
31
31
  // Hooks runner
32
32
  export { HooksRunner } from './hooks/HooksRunner';
33
33
  // Metadata
34
- export { setMetadata, getMetadata, setParameterMetadata, setMethodMetadata, getMethodMetadata, getParameterMetadata, } from './metadata';
34
+ export { setClassMetadata, getClassMetadata, setParameterMetadata, setMethodMetadata, getMethodMetadata, getParameterMetadata, } from './metadata';
35
35
  // InjectionToken
36
36
  export { InjectionToken } from './token/InjectionToken';
37
37
  export { AliasToken } from './token/AliasToken';
@@ -4,7 +4,7 @@ import { ConstantToken } from '../token/ConstantToken';
4
4
  import { toToken } from '../token/toToken';
5
5
  const hookMetaKey = (methodName = 'constructor') => `inject:${methodName}`;
6
6
  export const inject = (fn) => (target, propertyKey, parameterIndex) => {
7
- setParameterMetadata(hookMetaKey(propertyKey), toToken(fn))(Is.instance(target) ? target.constructor : target, propertyKey, parameterIndex);
7
+ setParameterMetadata(hookMetaKey(propertyKey), () => toToken(fn))(Is.instance(target) ? target.constructor : target, propertyKey, parameterIndex);
8
8
  };
9
9
  export const resolveArgs = (Target, methodName) => {
10
10
  const argsTokens = getParameterMetadata(hookMetaKey(methodName), Target);
package/esm/metadata.js CHANGED
@@ -1,18 +1,20 @@
1
- export const setMetadata = (key, value) => (target) => {
2
- Reflect.defineMetadata(key, value, target);
1
+ export const setClassMetadata = (key, mapFn) => (target) => {
2
+ const value = Reflect.getOwnMetadata(key, target);
3
+ Reflect.defineMetadata(key, mapFn(value), target);
3
4
  };
4
- export function getMetadata(target, key) {
5
+ export function getClassMetadata(target, key) {
5
6
  return Reflect.getOwnMetadata(key, target);
6
7
  }
7
- export const setParameterMetadata = (key, value) => (target, propertyKey, parameterIndex) => {
8
+ export const setParameterMetadata = (key, mapFn) => (target, propertyKey, parameterIndex) => {
8
9
  const metadata = Reflect.getOwnMetadata(key, target) ?? [];
9
- metadata[parameterIndex] = value;
10
+ metadata[parameterIndex] = mapFn(metadata[parameterIndex]);
10
11
  Reflect.defineMetadata(key, metadata, target);
11
12
  };
12
13
  export const getParameterMetadata = (key, target) => {
13
14
  return Reflect.getOwnMetadata(key, target) ?? [];
14
15
  };
15
- export const setMethodMetadata = (key, value) => (target, propertyKey) => {
16
- Reflect.defineMetadata(key, value, target.constructor, propertyKey);
16
+ export const setMethodMetadata = (key, mapFn) => (target, propertyKey) => {
17
+ const metadata = Reflect.getMetadata(key, target.constructor, propertyKey);
18
+ Reflect.defineMetadata(key, mapFn(metadata), target.constructor, propertyKey);
17
19
  };
18
20
  export const getMethodMetadata = (key, target, propertyKey) => Reflect.getMetadata(key, target.constructor, propertyKey);
@@ -1,11 +1,11 @@
1
- import { getMetadata, setMetadata } from '../metadata';
1
+ import { getClassMetadata, setClassMetadata } from '../metadata';
2
2
  import { isProviderPipe } from '../provider/ProviderPipe';
3
3
  import { IDToken } from '../token/IDToken';
4
4
  import { isBindToken } from '../token/BindToken';
5
5
  export const scope = (...predicates) => (r) => r.when(...predicates);
6
6
  const METADATA_KEY = 'registration';
7
- export const getTransformers = (Target) => getMetadata(Target, METADATA_KEY) ?? [];
8
- export const register = (...mappers) => setMetadata(METADATA_KEY, mappers.map((m) => (isProviderPipe(m) ? (r) => m.mapRegistration(r) : m)));
7
+ export const getTransformers = (Target) => getClassMetadata(Target, METADATA_KEY) ?? [];
8
+ export const register = (...mappers) => setClassMetadata(METADATA_KEY, () => mappers.map((m) => (isProviderPipe(m) ? (r) => m.mapRegistration(r) : m)));
9
9
  export const bindTo = (...tokens) => (r) => {
10
10
  for (const token of tokens) {
11
11
  const targetToken = isBindToken(token) ? token : new IDToken(token);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-ioc-container",
3
- "version": "44.0.4",
3
+ "version": "45.0.0",
4
4
  "description": "Typescript IoC container",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -25,7 +25,7 @@ export { injectProp } from './hooks/injectProp';
25
25
  export { onConstructHooksRunner, onConstruct } from './hooks/onConstruct';
26
26
  export { onDisposeHooksRunner, onDispose } from './hooks/onDispose';
27
27
  export { HooksRunnerContext, HooksRunner } from './hooks/HooksRunner';
28
- export { setMetadata, getMetadata, setParameterMetadata, setMethodMetadata, getMethodMetadata, getParameterMetadata, } from './metadata';
28
+ export { setClassMetadata, getClassMetadata, setParameterMetadata, setMethodMetadata, getMethodMetadata, getParameterMetadata, } from './metadata';
29
29
  export { InjectionToken } from './token/InjectionToken';
30
30
  export { AliasToken } from './token/AliasToken';
31
31
  export { AliasUniqToken, toAliasUniq } from './token/AliasUniqToken';
@@ -1,7 +1,7 @@
1
1
  import { constructor } from './types';
2
- export declare const setMetadata: <T>(key: string | symbol, value: T) => ClassDecorator;
3
- export declare function getMetadata<T>(target: object, key: string | symbol): T | undefined;
4
- export declare const setParameterMetadata: (key: string | symbol, value: unknown) => ParameterDecorator;
2
+ export declare const setClassMetadata: <T>(key: string | symbol, mapFn: (prev: T | undefined) => T) => ClassDecorator;
3
+ export declare function getClassMetadata<T>(target: object, key: string | symbol): T | undefined;
4
+ export declare const setParameterMetadata: (key: string | symbol, mapFn: (prev: unknown) => unknown) => ParameterDecorator;
5
5
  export declare const getParameterMetadata: (key: string | symbol, target: constructor<unknown>) => unknown[];
6
- export declare const setMethodMetadata: (key: string, value: unknown) => MethodDecorator;
6
+ export declare const setMethodMetadata: <T>(key: string, mapFn: (prev: T | undefined) => T) => MethodDecorator;
7
7
  export declare const getMethodMetadata: (key: string, target: object, propertyKey: string) => unknown;