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.
- package/cjm/container/Container.js +5 -5
- package/cjm/index.js +3 -3
- package/cjm/injector/inject.js +1 -1
- package/cjm/metadata.js +12 -10
- package/cjm/registration/IRegistration.js +2 -2
- package/esm/container/Container.js +5 -5
- package/esm/index.js +1 -1
- package/esm/injector/inject.js +1 -1
- package/esm/metadata.js +9 -7
- package/esm/registration/IRegistration.js +3 -3
- package/package.json +1 -1
- package/typings/index.d.ts +1 -1
- package/typings/metadata.d.ts +4 -4
|
@@ -30,7 +30,7 @@ class Container {
|
|
|
30
30
|
this.aliases.setAliasesByKey(key, aliases);
|
|
31
31
|
return this;
|
|
32
32
|
}
|
|
33
|
-
resolve(target, { args
|
|
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
|
|
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
|
|
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.
|
|
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, "
|
|
79
|
-
Object.defineProperty(exports, "
|
|
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; } });
|
package/cjm/injector/inject.js
CHANGED
|
@@ -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.
|
|
4
|
-
exports.
|
|
5
|
-
const
|
|
6
|
-
Reflect.
|
|
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.
|
|
9
|
-
function
|
|
9
|
+
exports.setClassMetadata = setClassMetadata;
|
|
10
|
+
function getClassMetadata(target, key) {
|
|
10
11
|
return Reflect.getOwnMetadata(key, target);
|
|
11
12
|
}
|
|
12
|
-
const setParameterMetadata = (key,
|
|
13
|
+
const setParameterMetadata = (key, mapFn) => (target, propertyKey, parameterIndex) => {
|
|
13
14
|
const metadata = Reflect.getOwnMetadata(key, target) ?? [];
|
|
14
|
-
metadata[parameterIndex] =
|
|
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,
|
|
23
|
-
Reflect.
|
|
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.
|
|
11
|
+
const getTransformers = (Target) => (0, metadata_1.getClassMetadata)(Target, METADATA_KEY) ?? [];
|
|
12
12
|
exports.getTransformers = getTransformers;
|
|
13
|
-
const register = (...mappers) => (0, metadata_1.
|
|
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
|
|
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
|
|
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
|
|
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 {
|
|
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';
|
package/esm/injector/inject.js
CHANGED
|
@@ -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
|
|
2
|
-
Reflect.
|
|
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
|
|
5
|
+
export function getClassMetadata(target, key) {
|
|
5
6
|
return Reflect.getOwnMetadata(key, target);
|
|
6
7
|
}
|
|
7
|
-
export const setParameterMetadata = (key,
|
|
8
|
+
export const setParameterMetadata = (key, mapFn) => (target, propertyKey, parameterIndex) => {
|
|
8
9
|
const metadata = Reflect.getOwnMetadata(key, target) ?? [];
|
|
9
|
-
metadata[parameterIndex] =
|
|
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,
|
|
16
|
-
Reflect.
|
|
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 {
|
|
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) =>
|
|
8
|
-
export const register = (...mappers) =>
|
|
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
package/typings/index.d.ts
CHANGED
|
@@ -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 {
|
|
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';
|
package/typings/metadata.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { constructor } from './types';
|
|
2
|
-
export declare const
|
|
3
|
-
export declare function
|
|
4
|
-
export declare const setParameterMetadata: (key: string | symbol,
|
|
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,
|
|
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;
|