ts-ioc-container 69.2.0 → 70.1.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 +2 -1
- package/cjm/provider/Provider.js +2 -1
- package/cjm/token/ClassToken.js +14 -4
- package/cjm/token/ConstantToken.js +6 -3
- package/cjm/token/FunctionToken.js +13 -3
- package/cjm/token/GroupAliasToken.js +14 -4
- package/cjm/token/GroupInstanceToken.js +8 -4
- package/cjm/token/InjectionToken.js +17 -1
- package/cjm/token/SingleAliasToken.js +14 -4
- package/cjm/token/SingleToken.js +14 -4
- package/cjm/utils/basic.js +7 -1
- package/esm/index.js +1 -1
- package/esm/provider/Provider.js +2 -1
- package/esm/token/ClassToken.js +14 -4
- package/esm/token/ConstantToken.js +6 -3
- package/esm/token/FunctionToken.js +13 -3
- package/esm/token/GroupAliasToken.js +14 -4
- package/esm/token/GroupInstanceToken.js +8 -4
- package/esm/token/InjectionToken.js +17 -1
- package/esm/token/SingleAliasToken.js +14 -4
- package/esm/token/SingleToken.js +14 -4
- package/esm/utils/basic.js +4 -0
- package/package.json +1 -1
- package/typings/index.d.ts +1 -1
- package/typings/provider/IProvider.d.ts +2 -1
- package/typings/token/ClassToken.d.ts +6 -4
- package/typings/token/ConstantToken.d.ts +8 -5
- package/typings/token/FunctionToken.d.ts +7 -5
- package/typings/token/GroupAliasToken.d.ts +6 -3
- package/typings/token/GroupInstanceToken.d.ts +9 -5
- package/typings/token/InjectionToken.d.ts +6 -3
- package/typings/token/SingleAliasToken.d.ts +6 -3
- package/typings/token/SingleToken.d.ts +6 -3
- package/typings/utils/basic.d.ts +5 -0
package/cjm/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.injectProp = exports.createHookExecutionContext = exports.createHookContextFactory = exports.HookContext = exports.toHookFn = exports.hasHooks = exports.hook = exports.getHooks = exports.ArgumentNotFoundError = exports.TypedEventDisposedError = exports.UnsupportedTokenTypeError = exports.CannonSingletonApplyTwiceError = exports.ProviderDisposedError = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyMissingKeyError = exports.ContainerNotFoundError = exports.DependencyNotFoundError = exports.ContainerError = exports.Registration = exports.onResolve = 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
4
|
exports.TypedEvent = exports.getConstructorChain = exports.memoize = exports.once = exports.shallowCache = exports.debounce = exports.throttle = exports.runAtOnce = exports.runInOrder = 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.resolveConstructor = 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.forwardArgs = exports.isInjectionToken = exports.InjectionToken = exports.toTask = exports.HookCollector = exports.oncePerInstance = exports.parallel = exports.sequential = void 0;
|
|
5
|
-
exports.Is = exports.unwrapProxy = exports.ProxyRegistry = exports.findOrFail = exports.pipe = exports.select = void 0;
|
|
5
|
+
exports.isSerializable = exports.Is = exports.unwrapProxy = exports.ProxyRegistry = exports.findOrFail = exports.pipe = exports.select = void 0;
|
|
6
6
|
var IContainer_1 = require("./container/IContainer");
|
|
7
7
|
Object.defineProperty(exports, "isDependencyKey", { enumerable: true, get: function () { return IContainer_1.isDependencyKey; } });
|
|
8
8
|
var Container_1 = require("./container/Container");
|
|
@@ -163,3 +163,4 @@ Object.defineProperty(exports, "ProxyRegistry", { enumerable: true, get: functio
|
|
|
163
163
|
Object.defineProperty(exports, "unwrapProxy", { enumerable: true, get: function () { return ProxyRegistry_1.unwrapProxy; } });
|
|
164
164
|
var basic_1 = require("./utils/basic");
|
|
165
165
|
Object.defineProperty(exports, "Is", { enumerable: true, get: function () { return basic_1.Is; } });
|
|
166
|
+
Object.defineProperty(exports, "isSerializable", { enumerable: true, get: function () { return basic_1.isSerializable; } });
|
package/cjm/provider/Provider.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Provider = void 0;
|
|
4
|
+
const basic_1 = require("../utils/basic");
|
|
4
5
|
const CannonSingletonApplyTwiceError_1 = require("../errors/CannonSingletonApplyTwiceError");
|
|
5
6
|
const ProviderDisposedError_1 = require("../errors/ProviderDisposedError");
|
|
6
7
|
class Provider {
|
|
@@ -31,7 +32,7 @@ class Provider {
|
|
|
31
32
|
if (!this.getKey) {
|
|
32
33
|
return this.resolveDep(scope, options);
|
|
33
34
|
}
|
|
34
|
-
const key = this.getKey(...(options.args ?? []));
|
|
35
|
+
const key = (0, basic_1.toString)(this.getKey(...(options.args ?? [])));
|
|
35
36
|
if (!this.cache.has(key)) {
|
|
36
37
|
this.cache.set(key, this.resolveDep(scope, options));
|
|
37
38
|
}
|
package/cjm/token/ClassToken.js
CHANGED
|
@@ -6,8 +6,8 @@ class ClassToken extends InjectionToken_1.InjectionToken {
|
|
|
6
6
|
target;
|
|
7
7
|
_getArgsFn;
|
|
8
8
|
_isLazy;
|
|
9
|
-
constructor(target, { getArgsFn = InjectionToken_1.forwardArgs, isLazy = false } = {}) {
|
|
10
|
-
super();
|
|
9
|
+
constructor(target, { getArgsFn = InjectionToken_1.forwardArgs, isLazy = false, tags = [], } = {}) {
|
|
10
|
+
super(tags);
|
|
11
11
|
this.target = target;
|
|
12
12
|
this._getArgsFn = getArgsFn;
|
|
13
13
|
this._isLazy = isLazy;
|
|
@@ -26,6 +26,7 @@ class ClassToken extends InjectionToken_1.InjectionToken {
|
|
|
26
26
|
return new ClassToken(this.target, {
|
|
27
27
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...newArgs],
|
|
28
28
|
isLazy: this._isLazy,
|
|
29
|
+
tags: this.getTags(),
|
|
29
30
|
});
|
|
30
31
|
}
|
|
31
32
|
argsFn(fn) {
|
|
@@ -33,16 +34,25 @@ class ClassToken extends InjectionToken_1.InjectionToken {
|
|
|
33
34
|
return new ClassToken(this.target, {
|
|
34
35
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...fn(s)],
|
|
35
36
|
isLazy: this._isLazy,
|
|
37
|
+
tags: this.getTags(),
|
|
36
38
|
});
|
|
37
39
|
}
|
|
38
40
|
lazy() {
|
|
39
41
|
return new ClassToken(this.target, {
|
|
40
42
|
getArgsFn: this._getArgsFn,
|
|
41
43
|
isLazy: true,
|
|
44
|
+
tags: this.getTags(),
|
|
42
45
|
});
|
|
43
46
|
}
|
|
44
|
-
|
|
45
|
-
return this.target
|
|
47
|
+
addTags(...tags) {
|
|
48
|
+
return new ClassToken(this.target, {
|
|
49
|
+
getArgsFn: this._getArgsFn,
|
|
50
|
+
isLazy: this._isLazy,
|
|
51
|
+
tags: [...this.getTags(), ...tags],
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
toString() {
|
|
55
|
+
return this.target.name;
|
|
46
56
|
}
|
|
47
57
|
}
|
|
48
58
|
exports.ClassToken = ClassToken;
|
|
@@ -5,8 +5,8 @@ const InjectionToken_1 = require("./InjectionToken");
|
|
|
5
5
|
const MethodNotImplementedError_1 = require("../errors/MethodNotImplementedError");
|
|
6
6
|
class ConstantToken extends InjectionToken_1.InjectionToken {
|
|
7
7
|
token;
|
|
8
|
-
constructor(token) {
|
|
9
|
-
super();
|
|
8
|
+
constructor(token, { tags = [] } = {}) {
|
|
9
|
+
super(tags);
|
|
10
10
|
this.token = token;
|
|
11
11
|
}
|
|
12
12
|
resolve(s) {
|
|
@@ -21,7 +21,10 @@ class ConstantToken extends InjectionToken_1.InjectionToken {
|
|
|
21
21
|
lazy() {
|
|
22
22
|
throw new MethodNotImplementedError_1.MethodNotImplementedError('not implemented');
|
|
23
23
|
}
|
|
24
|
-
|
|
24
|
+
addTags(...tags) {
|
|
25
|
+
return new ConstantToken(this.token, { tags: [...this.getTags(), ...tags] });
|
|
26
|
+
}
|
|
27
|
+
toString() {
|
|
25
28
|
throw new MethodNotImplementedError_1.MethodNotImplementedError('not implemented');
|
|
26
29
|
}
|
|
27
30
|
}
|
|
@@ -7,8 +7,8 @@ class FunctionToken extends InjectionToken_1.InjectionToken {
|
|
|
7
7
|
fn;
|
|
8
8
|
_getArgsFn;
|
|
9
9
|
_isLazy;
|
|
10
|
-
constructor(fn, { getArgsFn = InjectionToken_1.forwardArgs, isLazy = false } = {}) {
|
|
11
|
-
super();
|
|
10
|
+
constructor(fn, { getArgsFn = InjectionToken_1.forwardArgs, isLazy = false, tags = [], } = {}) {
|
|
11
|
+
super(tags);
|
|
12
12
|
this.fn = fn;
|
|
13
13
|
this._getArgsFn = getArgsFn;
|
|
14
14
|
this._isLazy = isLazy;
|
|
@@ -24,6 +24,7 @@ class FunctionToken extends InjectionToken_1.InjectionToken {
|
|
|
24
24
|
return new FunctionToken(this.fn, {
|
|
25
25
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...newArgs],
|
|
26
26
|
isLazy: this._isLazy,
|
|
27
|
+
tags: this.getTags(),
|
|
27
28
|
});
|
|
28
29
|
}
|
|
29
30
|
argsFn(fn) {
|
|
@@ -31,15 +32,24 @@ class FunctionToken extends InjectionToken_1.InjectionToken {
|
|
|
31
32
|
return new FunctionToken(this.fn, {
|
|
32
33
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...fn(s)],
|
|
33
34
|
isLazy: this._isLazy,
|
|
35
|
+
tags: this.getTags(),
|
|
34
36
|
});
|
|
35
37
|
}
|
|
36
38
|
lazy() {
|
|
37
39
|
return new FunctionToken(this.fn, {
|
|
38
40
|
getArgsFn: this._getArgsFn,
|
|
39
41
|
isLazy: true,
|
|
42
|
+
tags: this.getTags(),
|
|
40
43
|
});
|
|
41
44
|
}
|
|
42
|
-
|
|
45
|
+
addTags(...tags) {
|
|
46
|
+
return new FunctionToken(this.fn, {
|
|
47
|
+
getArgsFn: this._getArgsFn,
|
|
48
|
+
isLazy: this._isLazy,
|
|
49
|
+
tags: [...this.getTags(), ...tags],
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
toString() {
|
|
43
53
|
throw new MethodNotImplementedError_1.MethodNotImplementedError('not implemented');
|
|
44
54
|
}
|
|
45
55
|
}
|
|
@@ -6,8 +6,8 @@ class GroupAliasToken extends InjectionToken_1.InjectionToken {
|
|
|
6
6
|
token;
|
|
7
7
|
_getArgsFn;
|
|
8
8
|
_isLazy;
|
|
9
|
-
constructor(token, { getArgsFn = InjectionToken_1.forwardArgs, isLazy = false } = {}) {
|
|
10
|
-
super();
|
|
9
|
+
constructor(token, { getArgsFn = InjectionToken_1.forwardArgs, isLazy = false, tags = [], } = {}) {
|
|
10
|
+
super(tags);
|
|
11
11
|
this.token = token;
|
|
12
12
|
this._getArgsFn = getArgsFn;
|
|
13
13
|
this._isLazy = isLazy;
|
|
@@ -29,6 +29,7 @@ class GroupAliasToken extends InjectionToken_1.InjectionToken {
|
|
|
29
29
|
return new GroupAliasToken(this.token, {
|
|
30
30
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...newArgs],
|
|
31
31
|
isLazy: this._isLazy,
|
|
32
|
+
tags: this.getTags(),
|
|
32
33
|
});
|
|
33
34
|
}
|
|
34
35
|
argsFn(fn) {
|
|
@@ -36,16 +37,25 @@ class GroupAliasToken extends InjectionToken_1.InjectionToken {
|
|
|
36
37
|
return new GroupAliasToken(this.token, {
|
|
37
38
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...fn(s)],
|
|
38
39
|
isLazy: this._isLazy,
|
|
40
|
+
tags: this.getTags(),
|
|
39
41
|
});
|
|
40
42
|
}
|
|
41
43
|
lazy() {
|
|
42
44
|
return new GroupAliasToken(this.token, {
|
|
43
45
|
getArgsFn: this._getArgsFn,
|
|
44
46
|
isLazy: true,
|
|
47
|
+
tags: this.getTags(),
|
|
45
48
|
});
|
|
46
49
|
}
|
|
47
|
-
|
|
48
|
-
return this.token
|
|
50
|
+
addTags(...tags) {
|
|
51
|
+
return new GroupAliasToken(this.token, {
|
|
52
|
+
getArgsFn: this._getArgsFn,
|
|
53
|
+
isLazy: this._isLazy,
|
|
54
|
+
tags: [...this.getTags(), ...tags],
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
toString() {
|
|
58
|
+
return this.token.toString();
|
|
49
59
|
}
|
|
50
60
|
}
|
|
51
61
|
exports.GroupAliasToken = GroupAliasToken;
|
|
@@ -5,10 +5,11 @@ const InjectionToken_1 = require("./InjectionToken");
|
|
|
5
5
|
const MethodNotImplementedError_1 = require("../errors/MethodNotImplementedError");
|
|
6
6
|
class GroupInstanceToken extends InjectionToken_1.InjectionToken {
|
|
7
7
|
predicate;
|
|
8
|
-
isCascade
|
|
9
|
-
constructor(predicate) {
|
|
10
|
-
super();
|
|
8
|
+
isCascade;
|
|
9
|
+
constructor(predicate, { tags = [], isCascade = true } = {}) {
|
|
10
|
+
super(tags);
|
|
11
11
|
this.predicate = predicate;
|
|
12
|
+
this.isCascade = isCascade;
|
|
12
13
|
}
|
|
13
14
|
select(fn) {
|
|
14
15
|
return (s) => this.resolve(s).map(fn);
|
|
@@ -29,7 +30,10 @@ class GroupInstanceToken extends InjectionToken_1.InjectionToken {
|
|
|
29
30
|
resolve(c) {
|
|
30
31
|
return c.getInstances(this.isCascade).filter(this.predicate);
|
|
31
32
|
}
|
|
32
|
-
|
|
33
|
+
addTags(...tags) {
|
|
34
|
+
return new GroupInstanceToken(this.predicate, { tags: [...this.getTags(), ...tags], isCascade: this.isCascade });
|
|
35
|
+
}
|
|
36
|
+
toString() {
|
|
33
37
|
throw new MethodNotImplementedError_1.MethodNotImplementedError('not implemented');
|
|
34
38
|
}
|
|
35
39
|
}
|
|
@@ -6,8 +6,24 @@ const basic_1 = require("../utils/basic");
|
|
|
6
6
|
const forwardArgs = (_, { args = [] } = {}) => args;
|
|
7
7
|
exports.forwardArgs = forwardArgs;
|
|
8
8
|
class InjectionToken {
|
|
9
|
+
tags;
|
|
10
|
+
constructor(tags = []) {
|
|
11
|
+
this.tags = new Set(tags);
|
|
12
|
+
}
|
|
13
|
+
hasTag(tag) {
|
|
14
|
+
return this.tags.has(tag);
|
|
15
|
+
}
|
|
16
|
+
getTags() {
|
|
17
|
+
return [...this.tags];
|
|
18
|
+
}
|
|
9
19
|
}
|
|
10
20
|
exports.InjectionToken = InjectionToken;
|
|
11
21
|
function isInjectionToken(target) {
|
|
12
|
-
return basic_1.Is.object(target) &&
|
|
22
|
+
return (basic_1.Is.object(target) &&
|
|
23
|
+
'resolve' in target &&
|
|
24
|
+
'args' in target &&
|
|
25
|
+
'argsFn' in target &&
|
|
26
|
+
'lazy' in target &&
|
|
27
|
+
'hasTag' in target &&
|
|
28
|
+
'addTags' in target);
|
|
13
29
|
}
|
|
@@ -6,8 +6,8 @@ class SingleAliasToken extends InjectionToken_1.InjectionToken {
|
|
|
6
6
|
token;
|
|
7
7
|
_getArgsFn;
|
|
8
8
|
_isLazy;
|
|
9
|
-
constructor(token, { getArgsFn = InjectionToken_1.forwardArgs, isLazy = false } = {}) {
|
|
10
|
-
super();
|
|
9
|
+
constructor(token, { getArgsFn = InjectionToken_1.forwardArgs, isLazy = false, tags = [], } = {}) {
|
|
10
|
+
super(tags);
|
|
11
11
|
this.token = token;
|
|
12
12
|
this._getArgsFn = getArgsFn;
|
|
13
13
|
this._isLazy = isLazy;
|
|
@@ -29,6 +29,7 @@ class SingleAliasToken extends InjectionToken_1.InjectionToken {
|
|
|
29
29
|
return new SingleAliasToken(this.token, {
|
|
30
30
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...newArgs],
|
|
31
31
|
isLazy: this._isLazy,
|
|
32
|
+
tags: this.getTags(),
|
|
32
33
|
});
|
|
33
34
|
}
|
|
34
35
|
argsFn(fn) {
|
|
@@ -36,16 +37,25 @@ class SingleAliasToken extends InjectionToken_1.InjectionToken {
|
|
|
36
37
|
return new SingleAliasToken(this.token, {
|
|
37
38
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...fn(s)],
|
|
38
39
|
isLazy: this._isLazy,
|
|
40
|
+
tags: this.getTags(),
|
|
39
41
|
});
|
|
40
42
|
}
|
|
41
43
|
lazy() {
|
|
42
44
|
return new SingleAliasToken(this.token, {
|
|
43
45
|
getArgsFn: this._getArgsFn,
|
|
44
46
|
isLazy: true,
|
|
47
|
+
tags: this.getTags(),
|
|
45
48
|
});
|
|
46
49
|
}
|
|
47
|
-
|
|
48
|
-
return this.token
|
|
50
|
+
addTags(...tags) {
|
|
51
|
+
return new SingleAliasToken(this.token, {
|
|
52
|
+
getArgsFn: this._getArgsFn,
|
|
53
|
+
isLazy: this._isLazy,
|
|
54
|
+
tags: [...this.getTags(), ...tags],
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
toString() {
|
|
58
|
+
return this.token.toString();
|
|
49
59
|
}
|
|
50
60
|
}
|
|
51
61
|
exports.SingleAliasToken = SingleAliasToken;
|
package/cjm/token/SingleToken.js
CHANGED
|
@@ -6,8 +6,8 @@ class SingleToken extends InjectionToken_1.InjectionToken {
|
|
|
6
6
|
token;
|
|
7
7
|
_getArgsFn;
|
|
8
8
|
_isLazy;
|
|
9
|
-
constructor(token, { getArgsFn = InjectionToken_1.forwardArgs, isLazy = false } = {}) {
|
|
10
|
-
super();
|
|
9
|
+
constructor(token, { getArgsFn = InjectionToken_1.forwardArgs, isLazy = false, tags = [], } = {}) {
|
|
10
|
+
super(tags);
|
|
11
11
|
this.token = token;
|
|
12
12
|
this._getArgsFn = getArgsFn;
|
|
13
13
|
this._isLazy = isLazy;
|
|
@@ -29,6 +29,7 @@ class SingleToken extends InjectionToken_1.InjectionToken {
|
|
|
29
29
|
return new SingleToken(this.token, {
|
|
30
30
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...newArgs],
|
|
31
31
|
isLazy: this._isLazy,
|
|
32
|
+
tags: this.getTags(),
|
|
32
33
|
});
|
|
33
34
|
}
|
|
34
35
|
argsFn(fn) {
|
|
@@ -36,16 +37,25 @@ class SingleToken extends InjectionToken_1.InjectionToken {
|
|
|
36
37
|
return new SingleToken(this.token, {
|
|
37
38
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...fn(s)],
|
|
38
39
|
isLazy: this._isLazy,
|
|
40
|
+
tags: this.getTags(),
|
|
39
41
|
});
|
|
40
42
|
}
|
|
41
43
|
lazy() {
|
|
42
44
|
return new SingleToken(this.token, {
|
|
43
45
|
getArgsFn: this._getArgsFn,
|
|
44
46
|
isLazy: true,
|
|
47
|
+
tags: this.getTags(),
|
|
45
48
|
});
|
|
46
49
|
}
|
|
47
|
-
|
|
48
|
-
return this.token
|
|
50
|
+
addTags(...tags) {
|
|
51
|
+
return new SingleToken(this.token, {
|
|
52
|
+
getArgsFn: this._getArgsFn,
|
|
53
|
+
isLazy: this._isLazy,
|
|
54
|
+
tags: [...this.getTags(), ...tags],
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
toString() {
|
|
58
|
+
return this.token.toString();
|
|
49
59
|
}
|
|
50
60
|
}
|
|
51
61
|
exports.SingleToken = SingleToken;
|
package/cjm/utils/basic.js
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Is = void 0;
|
|
3
|
+
exports.toString = exports.Is = void 0;
|
|
4
|
+
exports.isSerializable = isSerializable;
|
|
4
5
|
exports.Is = {
|
|
5
6
|
nullish: (value) => value === undefined || value === null,
|
|
6
7
|
object: (target) => target !== null && typeof target === 'object',
|
|
7
8
|
instance: (target) => Object.prototype.hasOwnProperty.call(target, 'constructor'),
|
|
8
9
|
constructor: (target) => typeof target === 'function' && !!target.prototype,
|
|
9
10
|
};
|
|
11
|
+
function isSerializable(target) {
|
|
12
|
+
return exports.Is.object(target) && typeof target.toString === 'function' && target.toString !== Object.prototype.toString;
|
|
13
|
+
}
|
|
14
|
+
const toString = (target) => (isSerializable(target) ? target.toString() : String(target));
|
|
15
|
+
exports.toString = toString;
|
package/esm/index.js
CHANGED
|
@@ -51,4 +51,4 @@ export { select } from './select.js';
|
|
|
51
51
|
export { pipe } from './utils/fp.js';
|
|
52
52
|
export { findOrFail } from './utils/array.js';
|
|
53
53
|
export { ProxyRegistry, unwrapProxy } from './utils/ProxyRegistry.js';
|
|
54
|
-
export { Is } from './utils/basic.js';
|
|
54
|
+
export { Is, isSerializable } from './utils/basic.js';
|
package/esm/provider/Provider.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { toString } from '../utils/basic.js';
|
|
1
2
|
import { CannonSingletonApplyTwiceError } from '../errors/CannonSingletonApplyTwiceError.js';
|
|
2
3
|
import { ProviderDisposedError } from '../errors/ProviderDisposedError.js';
|
|
3
4
|
export class Provider {
|
|
@@ -28,7 +29,7 @@ export class Provider {
|
|
|
28
29
|
if (!this.getKey) {
|
|
29
30
|
return this.resolveDep(scope, options);
|
|
30
31
|
}
|
|
31
|
-
const key = this.getKey(...(options.args ?? []));
|
|
32
|
+
const key = toString(this.getKey(...(options.args ?? [])));
|
|
32
33
|
if (!this.cache.has(key)) {
|
|
33
34
|
this.cache.set(key, this.resolveDep(scope, options));
|
|
34
35
|
}
|
package/esm/token/ClassToken.js
CHANGED
|
@@ -3,8 +3,8 @@ export class ClassToken extends InjectionToken {
|
|
|
3
3
|
target;
|
|
4
4
|
_getArgsFn;
|
|
5
5
|
_isLazy;
|
|
6
|
-
constructor(target, { getArgsFn = forwardArgs, isLazy = false } = {}) {
|
|
7
|
-
super();
|
|
6
|
+
constructor(target, { getArgsFn = forwardArgs, isLazy = false, tags = [], } = {}) {
|
|
7
|
+
super(tags);
|
|
8
8
|
this.target = target;
|
|
9
9
|
this._getArgsFn = getArgsFn;
|
|
10
10
|
this._isLazy = isLazy;
|
|
@@ -23,6 +23,7 @@ export class ClassToken extends InjectionToken {
|
|
|
23
23
|
return new ClassToken(this.target, {
|
|
24
24
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...newArgs],
|
|
25
25
|
isLazy: this._isLazy,
|
|
26
|
+
tags: this.getTags(),
|
|
26
27
|
});
|
|
27
28
|
}
|
|
28
29
|
argsFn(fn) {
|
|
@@ -30,15 +31,24 @@ export class ClassToken extends InjectionToken {
|
|
|
30
31
|
return new ClassToken(this.target, {
|
|
31
32
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...fn(s)],
|
|
32
33
|
isLazy: this._isLazy,
|
|
34
|
+
tags: this.getTags(),
|
|
33
35
|
});
|
|
34
36
|
}
|
|
35
37
|
lazy() {
|
|
36
38
|
return new ClassToken(this.target, {
|
|
37
39
|
getArgsFn: this._getArgsFn,
|
|
38
40
|
isLazy: true,
|
|
41
|
+
tags: this.getTags(),
|
|
39
42
|
});
|
|
40
43
|
}
|
|
41
|
-
|
|
42
|
-
return this.target
|
|
44
|
+
addTags(...tags) {
|
|
45
|
+
return new ClassToken(this.target, {
|
|
46
|
+
getArgsFn: this._getArgsFn,
|
|
47
|
+
isLazy: this._isLazy,
|
|
48
|
+
tags: [...this.getTags(), ...tags],
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
toString() {
|
|
52
|
+
return this.target.name;
|
|
43
53
|
}
|
|
44
54
|
}
|
|
@@ -2,8 +2,8 @@ import { InjectionToken } from './InjectionToken.js';
|
|
|
2
2
|
import { MethodNotImplementedError } from '../errors/MethodNotImplementedError.js';
|
|
3
3
|
export class ConstantToken extends InjectionToken {
|
|
4
4
|
token;
|
|
5
|
-
constructor(token) {
|
|
6
|
-
super();
|
|
5
|
+
constructor(token, { tags = [] } = {}) {
|
|
6
|
+
super(tags);
|
|
7
7
|
this.token = token;
|
|
8
8
|
}
|
|
9
9
|
resolve(s) {
|
|
@@ -18,7 +18,10 @@ export class ConstantToken extends InjectionToken {
|
|
|
18
18
|
lazy() {
|
|
19
19
|
throw new MethodNotImplementedError('not implemented');
|
|
20
20
|
}
|
|
21
|
-
|
|
21
|
+
addTags(...tags) {
|
|
22
|
+
return new ConstantToken(this.token, { tags: [...this.getTags(), ...tags] });
|
|
23
|
+
}
|
|
24
|
+
toString() {
|
|
22
25
|
throw new MethodNotImplementedError('not implemented');
|
|
23
26
|
}
|
|
24
27
|
}
|
|
@@ -4,8 +4,8 @@ export class FunctionToken extends InjectionToken {
|
|
|
4
4
|
fn;
|
|
5
5
|
_getArgsFn;
|
|
6
6
|
_isLazy;
|
|
7
|
-
constructor(fn, { getArgsFn = forwardArgs, isLazy = false } = {}) {
|
|
8
|
-
super();
|
|
7
|
+
constructor(fn, { getArgsFn = forwardArgs, isLazy = false, tags = [], } = {}) {
|
|
8
|
+
super(tags);
|
|
9
9
|
this.fn = fn;
|
|
10
10
|
this._getArgsFn = getArgsFn;
|
|
11
11
|
this._isLazy = isLazy;
|
|
@@ -21,6 +21,7 @@ export class FunctionToken extends InjectionToken {
|
|
|
21
21
|
return new FunctionToken(this.fn, {
|
|
22
22
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...newArgs],
|
|
23
23
|
isLazy: this._isLazy,
|
|
24
|
+
tags: this.getTags(),
|
|
24
25
|
});
|
|
25
26
|
}
|
|
26
27
|
argsFn(fn) {
|
|
@@ -28,15 +29,24 @@ export class FunctionToken extends InjectionToken {
|
|
|
28
29
|
return new FunctionToken(this.fn, {
|
|
29
30
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...fn(s)],
|
|
30
31
|
isLazy: this._isLazy,
|
|
32
|
+
tags: this.getTags(),
|
|
31
33
|
});
|
|
32
34
|
}
|
|
33
35
|
lazy() {
|
|
34
36
|
return new FunctionToken(this.fn, {
|
|
35
37
|
getArgsFn: this._getArgsFn,
|
|
36
38
|
isLazy: true,
|
|
39
|
+
tags: this.getTags(),
|
|
37
40
|
});
|
|
38
41
|
}
|
|
39
|
-
|
|
42
|
+
addTags(...tags) {
|
|
43
|
+
return new FunctionToken(this.fn, {
|
|
44
|
+
getArgsFn: this._getArgsFn,
|
|
45
|
+
isLazy: this._isLazy,
|
|
46
|
+
tags: [...this.getTags(), ...tags],
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
toString() {
|
|
40
50
|
throw new MethodNotImplementedError('not implemented');
|
|
41
51
|
}
|
|
42
52
|
}
|
|
@@ -3,8 +3,8 @@ export class GroupAliasToken extends InjectionToken {
|
|
|
3
3
|
token;
|
|
4
4
|
_getArgsFn;
|
|
5
5
|
_isLazy;
|
|
6
|
-
constructor(token, { getArgsFn = forwardArgs, isLazy = false } = {}) {
|
|
7
|
-
super();
|
|
6
|
+
constructor(token, { getArgsFn = forwardArgs, isLazy = false, tags = [], } = {}) {
|
|
7
|
+
super(tags);
|
|
8
8
|
this.token = token;
|
|
9
9
|
this._getArgsFn = getArgsFn;
|
|
10
10
|
this._isLazy = isLazy;
|
|
@@ -26,6 +26,7 @@ export class GroupAliasToken extends InjectionToken {
|
|
|
26
26
|
return new GroupAliasToken(this.token, {
|
|
27
27
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...newArgs],
|
|
28
28
|
isLazy: this._isLazy,
|
|
29
|
+
tags: this.getTags(),
|
|
29
30
|
});
|
|
30
31
|
}
|
|
31
32
|
argsFn(fn) {
|
|
@@ -33,16 +34,25 @@ export class GroupAliasToken extends InjectionToken {
|
|
|
33
34
|
return new GroupAliasToken(this.token, {
|
|
34
35
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...fn(s)],
|
|
35
36
|
isLazy: this._isLazy,
|
|
37
|
+
tags: this.getTags(),
|
|
36
38
|
});
|
|
37
39
|
}
|
|
38
40
|
lazy() {
|
|
39
41
|
return new GroupAliasToken(this.token, {
|
|
40
42
|
getArgsFn: this._getArgsFn,
|
|
41
43
|
isLazy: true,
|
|
44
|
+
tags: this.getTags(),
|
|
42
45
|
});
|
|
43
46
|
}
|
|
44
|
-
|
|
45
|
-
return this.token
|
|
47
|
+
addTags(...tags) {
|
|
48
|
+
return new GroupAliasToken(this.token, {
|
|
49
|
+
getArgsFn: this._getArgsFn,
|
|
50
|
+
isLazy: this._isLazy,
|
|
51
|
+
tags: [...this.getTags(), ...tags],
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
toString() {
|
|
55
|
+
return this.token.toString();
|
|
46
56
|
}
|
|
47
57
|
}
|
|
48
58
|
export const toGroupAlias = (token) => new GroupAliasToken(token);
|
|
@@ -2,10 +2,11 @@ import { InjectionToken } from './InjectionToken.js';
|
|
|
2
2
|
import { MethodNotImplementedError } from '../errors/MethodNotImplementedError.js';
|
|
3
3
|
export class GroupInstanceToken extends InjectionToken {
|
|
4
4
|
predicate;
|
|
5
|
-
isCascade
|
|
6
|
-
constructor(predicate) {
|
|
7
|
-
super();
|
|
5
|
+
isCascade;
|
|
6
|
+
constructor(predicate, { tags = [], isCascade = true } = {}) {
|
|
7
|
+
super(tags);
|
|
8
8
|
this.predicate = predicate;
|
|
9
|
+
this.isCascade = isCascade;
|
|
9
10
|
}
|
|
10
11
|
select(fn) {
|
|
11
12
|
return (s) => this.resolve(s).map(fn);
|
|
@@ -26,7 +27,10 @@ export class GroupInstanceToken extends InjectionToken {
|
|
|
26
27
|
resolve(c) {
|
|
27
28
|
return c.getInstances(this.isCascade).filter(this.predicate);
|
|
28
29
|
}
|
|
29
|
-
|
|
30
|
+
addTags(...tags) {
|
|
31
|
+
return new GroupInstanceToken(this.predicate, { tags: [...this.getTags(), ...tags], isCascade: this.isCascade });
|
|
32
|
+
}
|
|
33
|
+
toString() {
|
|
30
34
|
throw new MethodNotImplementedError('not implemented');
|
|
31
35
|
}
|
|
32
36
|
}
|
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
import { Is } from '../utils/basic.js';
|
|
2
2
|
export const forwardArgs = (_, { args = [] } = {}) => args;
|
|
3
3
|
export class InjectionToken {
|
|
4
|
+
tags;
|
|
5
|
+
constructor(tags = []) {
|
|
6
|
+
this.tags = new Set(tags);
|
|
7
|
+
}
|
|
8
|
+
hasTag(tag) {
|
|
9
|
+
return this.tags.has(tag);
|
|
10
|
+
}
|
|
11
|
+
getTags() {
|
|
12
|
+
return [...this.tags];
|
|
13
|
+
}
|
|
4
14
|
}
|
|
5
15
|
export function isInjectionToken(target) {
|
|
6
|
-
return Is.object(target) &&
|
|
16
|
+
return (Is.object(target) &&
|
|
17
|
+
'resolve' in target &&
|
|
18
|
+
'args' in target &&
|
|
19
|
+
'argsFn' in target &&
|
|
20
|
+
'lazy' in target &&
|
|
21
|
+
'hasTag' in target &&
|
|
22
|
+
'addTags' in target);
|
|
7
23
|
}
|
|
@@ -3,8 +3,8 @@ export class SingleAliasToken extends InjectionToken {
|
|
|
3
3
|
token;
|
|
4
4
|
_getArgsFn;
|
|
5
5
|
_isLazy;
|
|
6
|
-
constructor(token, { getArgsFn = forwardArgs, isLazy = false } = {}) {
|
|
7
|
-
super();
|
|
6
|
+
constructor(token, { getArgsFn = forwardArgs, isLazy = false, tags = [], } = {}) {
|
|
7
|
+
super(tags);
|
|
8
8
|
this.token = token;
|
|
9
9
|
this._getArgsFn = getArgsFn;
|
|
10
10
|
this._isLazy = isLazy;
|
|
@@ -26,6 +26,7 @@ export class SingleAliasToken extends InjectionToken {
|
|
|
26
26
|
return new SingleAliasToken(this.token, {
|
|
27
27
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...newArgs],
|
|
28
28
|
isLazy: this._isLazy,
|
|
29
|
+
tags: this.getTags(),
|
|
29
30
|
});
|
|
30
31
|
}
|
|
31
32
|
argsFn(fn) {
|
|
@@ -33,16 +34,25 @@ export class SingleAliasToken extends InjectionToken {
|
|
|
33
34
|
return new SingleAliasToken(this.token, {
|
|
34
35
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...fn(s)],
|
|
35
36
|
isLazy: this._isLazy,
|
|
37
|
+
tags: this.getTags(),
|
|
36
38
|
});
|
|
37
39
|
}
|
|
38
40
|
lazy() {
|
|
39
41
|
return new SingleAliasToken(this.token, {
|
|
40
42
|
getArgsFn: this._getArgsFn,
|
|
41
43
|
isLazy: true,
|
|
44
|
+
tags: this.getTags(),
|
|
42
45
|
});
|
|
43
46
|
}
|
|
44
|
-
|
|
45
|
-
return this.token
|
|
47
|
+
addTags(...tags) {
|
|
48
|
+
return new SingleAliasToken(this.token, {
|
|
49
|
+
getArgsFn: this._getArgsFn,
|
|
50
|
+
isLazy: this._isLazy,
|
|
51
|
+
tags: [...this.getTags(), ...tags],
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
toString() {
|
|
55
|
+
return this.token.toString();
|
|
46
56
|
}
|
|
47
57
|
}
|
|
48
58
|
export const toSingleAlias = (token) => new SingleAliasToken(token);
|
package/esm/token/SingleToken.js
CHANGED
|
@@ -3,8 +3,8 @@ export class SingleToken extends InjectionToken {
|
|
|
3
3
|
token;
|
|
4
4
|
_getArgsFn;
|
|
5
5
|
_isLazy;
|
|
6
|
-
constructor(token, { getArgsFn = forwardArgs, isLazy = false } = {}) {
|
|
7
|
-
super();
|
|
6
|
+
constructor(token, { getArgsFn = forwardArgs, isLazy = false, tags = [], } = {}) {
|
|
7
|
+
super(tags);
|
|
8
8
|
this.token = token;
|
|
9
9
|
this._getArgsFn = getArgsFn;
|
|
10
10
|
this._isLazy = isLazy;
|
|
@@ -26,6 +26,7 @@ export class SingleToken extends InjectionToken {
|
|
|
26
26
|
return new SingleToken(this.token, {
|
|
27
27
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...newArgs],
|
|
28
28
|
isLazy: this._isLazy,
|
|
29
|
+
tags: this.getTags(),
|
|
29
30
|
});
|
|
30
31
|
}
|
|
31
32
|
argsFn(fn) {
|
|
@@ -33,15 +34,24 @@ export class SingleToken extends InjectionToken {
|
|
|
33
34
|
return new SingleToken(this.token, {
|
|
34
35
|
getArgsFn: (s, opts) => [...parentFn(s, opts), ...fn(s)],
|
|
35
36
|
isLazy: this._isLazy,
|
|
37
|
+
tags: this.getTags(),
|
|
36
38
|
});
|
|
37
39
|
}
|
|
38
40
|
lazy() {
|
|
39
41
|
return new SingleToken(this.token, {
|
|
40
42
|
getArgsFn: this._getArgsFn,
|
|
41
43
|
isLazy: true,
|
|
44
|
+
tags: this.getTags(),
|
|
42
45
|
});
|
|
43
46
|
}
|
|
44
|
-
|
|
45
|
-
return this.token
|
|
47
|
+
addTags(...tags) {
|
|
48
|
+
return new SingleToken(this.token, {
|
|
49
|
+
getArgsFn: this._getArgsFn,
|
|
50
|
+
isLazy: this._isLazy,
|
|
51
|
+
tags: [...this.getTags(), ...tags],
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
toString() {
|
|
55
|
+
return this.token.toString();
|
|
46
56
|
}
|
|
47
57
|
}
|
package/esm/utils/basic.js
CHANGED
|
@@ -4,3 +4,7 @@ export const Is = {
|
|
|
4
4
|
instance: (target) => Object.prototype.hasOwnProperty.call(target, 'constructor'),
|
|
5
5
|
constructor: (target) => typeof target === 'function' && !!target.prototype,
|
|
6
6
|
};
|
|
7
|
+
export function isSerializable(target) {
|
|
8
|
+
return Is.object(target) && typeof target.toString === 'function' && target.toString !== Object.prototype.toString;
|
|
9
|
+
}
|
|
10
|
+
export const toString = (target) => (isSerializable(target) ? target.toString() : String(target));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-ioc-container",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "70.1.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",
|
package/typings/index.d.ts
CHANGED
|
@@ -53,4 +53,4 @@ export { select } from './select.js';
|
|
|
53
53
|
export { pipe, type MapFn } from './utils/fp.js';
|
|
54
54
|
export { findOrFail, type Predicate } from './utils/array.js';
|
|
55
55
|
export { ProxyRegistry, unwrapProxy, type IProxyRegistry } from './utils/ProxyRegistry.js';
|
|
56
|
-
export { type Branded, type constructor, type Instance, Is } from './utils/basic.js';
|
|
56
|
+
export { type Branded, type constructor, type Instance, type Serializable, Is, isSerializable } from './utils/basic.js';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { IContainer, Tagged } from '../container/IContainer.js';
|
|
2
2
|
import { InjectOptions } from '../injector/IInjector.js';
|
|
3
|
+
import { Serializable } from '../utils/basic.js';
|
|
3
4
|
export type WithLazy = {
|
|
4
5
|
lazy: boolean;
|
|
5
6
|
};
|
|
@@ -12,7 +13,7 @@ export type ScopeAccessOptions = {
|
|
|
12
13
|
};
|
|
13
14
|
export type ScopeAccessRule = (options: ScopeAccessOptions, prev: boolean) => boolean;
|
|
14
15
|
export type ArgsFn = (l: IContainer, options?: InjectOptions) => unknown[];
|
|
15
|
-
export type GetCacheKey = (...args: unknown[]) => string |
|
|
16
|
+
export type GetCacheKey = (...args: unknown[]) => string | Serializable;
|
|
16
17
|
export type DecorateFn<Instance = any> = (dep: Instance, scope: IContainer) => Instance;
|
|
17
18
|
export type ProviderHook = (dependency: unknown, scope: IContainer) => void;
|
|
18
19
|
export interface IProvider<T = any> {
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
import { IContainer } from '../container/IContainer.js';
|
|
2
2
|
import { InjectionToken } from './InjectionToken.js';
|
|
3
|
-
import { type constructor } from '../utils/basic.js';
|
|
3
|
+
import { type constructor, Serializable } from '../utils/basic.js';
|
|
4
4
|
import { ArgsFn, ProviderOptions } from '../provider/IProvider.js';
|
|
5
|
-
export declare class ClassToken<T = any> extends InjectionToken<T> {
|
|
5
|
+
export declare class ClassToken<T = any> extends InjectionToken<T> implements Serializable {
|
|
6
6
|
private readonly target;
|
|
7
7
|
private readonly _getArgsFn;
|
|
8
8
|
private readonly _isLazy;
|
|
9
|
-
constructor(target: constructor<T>, { getArgsFn, isLazy }?: {
|
|
9
|
+
constructor(target: constructor<T>, { getArgsFn, isLazy, tags, }?: {
|
|
10
10
|
getArgsFn?: ArgsFn;
|
|
11
11
|
isLazy?: boolean;
|
|
12
|
+
tags?: string[];
|
|
12
13
|
});
|
|
13
14
|
select<R>(fn: (target: T) => R): (s: IContainer) => R;
|
|
14
15
|
resolve(s: IContainer, { args, lazy }?: ProviderOptions): T;
|
|
15
16
|
args(...newArgs: unknown[]): ClassToken<T>;
|
|
16
17
|
argsFn(fn: (s: IContainer) => unknown[]): ClassToken<T>;
|
|
17
18
|
lazy(): ClassToken<T>;
|
|
18
|
-
|
|
19
|
+
addTags(...tags: string[]): ClassToken<T>;
|
|
20
|
+
toString(): string;
|
|
19
21
|
}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { IContainer } from '../container/IContainer.js';
|
|
2
2
|
import { InjectionToken } from './InjectionToken.js';
|
|
3
|
-
import {
|
|
4
|
-
export declare class ConstantToken<T = any> extends InjectionToken<T> {
|
|
3
|
+
import { Serializable } from '../utils/basic.js';
|
|
4
|
+
export declare class ConstantToken<T = any> extends InjectionToken<T> implements Serializable {
|
|
5
5
|
private readonly token;
|
|
6
|
-
constructor(token: T
|
|
6
|
+
constructor(token: T, { tags }?: {
|
|
7
|
+
tags?: string[];
|
|
8
|
+
});
|
|
7
9
|
resolve(s: IContainer): T;
|
|
8
10
|
args(...deps: unknown[]): InjectionToken<T>;
|
|
9
11
|
argsFn(getArgsFn: (s: IContainer) => unknown[]): InjectionToken<T>;
|
|
10
12
|
lazy(): InjectionToken<T>;
|
|
11
|
-
|
|
13
|
+
addTags(...tags: string[]): ConstantToken<T>;
|
|
14
|
+
toString(): string;
|
|
12
15
|
}
|
|
@@ -1,19 +1,21 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { IContainer } from '../container/IContainer.js';
|
|
2
2
|
import { InjectionToken } from './InjectionToken.js';
|
|
3
3
|
import { InjectFn } from '../hooks/hook.js';
|
|
4
4
|
import { ArgsFn, ProviderOptions } from '../provider/IProvider.js';
|
|
5
|
-
import {
|
|
6
|
-
export declare class FunctionToken<T = any> extends InjectionToken<T> {
|
|
5
|
+
import { Serializable } from '../utils/basic.js';
|
|
6
|
+
export declare class FunctionToken<T = any> extends InjectionToken<T> implements Serializable {
|
|
7
7
|
private readonly fn;
|
|
8
8
|
private readonly _getArgsFn;
|
|
9
9
|
private readonly _isLazy;
|
|
10
|
-
constructor(fn: InjectFn<T>, { getArgsFn, isLazy }?: {
|
|
10
|
+
constructor(fn: InjectFn<T>, { getArgsFn, isLazy, tags, }?: {
|
|
11
11
|
getArgsFn?: ArgsFn;
|
|
12
12
|
isLazy?: boolean;
|
|
13
|
+
tags?: string[];
|
|
13
14
|
});
|
|
14
15
|
resolve(s: IContainer, { args, lazy }?: ProviderOptions): T;
|
|
15
16
|
args(...newArgs: unknown[]): InjectionToken<T>;
|
|
16
17
|
argsFn(fn: (s: IContainer) => unknown[]): InjectionToken<T>;
|
|
17
18
|
lazy(): InjectionToken<T>;
|
|
18
|
-
|
|
19
|
+
addTags(...tags: string[]): FunctionToken<T>;
|
|
20
|
+
toString(): string;
|
|
19
21
|
}
|
|
@@ -3,13 +3,15 @@ import { InjectionToken } from './InjectionToken.js';
|
|
|
3
3
|
import { IRegistration } from '../registration/IRegistration.js';
|
|
4
4
|
import { BindToken } from './BindToken.js';
|
|
5
5
|
import { ArgsFn, ProviderOptions } from '../provider/IProvider.js';
|
|
6
|
-
|
|
6
|
+
import { Serializable } from '../utils/basic.js';
|
|
7
|
+
export declare class GroupAliasToken<T = any> extends InjectionToken<T[]> implements BindToken<T>, Serializable {
|
|
7
8
|
readonly token: DependencyKey;
|
|
8
9
|
private readonly _getArgsFn;
|
|
9
10
|
private readonly _isLazy;
|
|
10
|
-
constructor(token: DependencyKey, { getArgsFn, isLazy }?: {
|
|
11
|
+
constructor(token: DependencyKey, { getArgsFn, isLazy, tags, }?: {
|
|
11
12
|
getArgsFn?: ArgsFn;
|
|
12
13
|
isLazy?: boolean;
|
|
14
|
+
tags?: string[];
|
|
13
15
|
});
|
|
14
16
|
select<R>(fn: (target: T[]) => R[]): (s: IContainer) => R[];
|
|
15
17
|
resolve(s: IContainer, { args, lazy }?: ProviderOptions): T[];
|
|
@@ -17,6 +19,7 @@ export declare class GroupAliasToken<T = any> extends InjectionToken<T[]> implem
|
|
|
17
19
|
args(...newArgs: unknown[]): GroupAliasToken<T>;
|
|
18
20
|
argsFn(fn: (s: IContainer) => unknown[]): GroupAliasToken<T>;
|
|
19
21
|
lazy(): GroupAliasToken<T>;
|
|
20
|
-
|
|
22
|
+
addTags(...tags: string[]): GroupAliasToken<T>;
|
|
23
|
+
toString(): string;
|
|
21
24
|
}
|
|
22
25
|
export declare const toGroupAlias: <T>(token: DependencyKey) => GroupAliasToken<T>;
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import { InjectionToken } from './InjectionToken.js';
|
|
2
|
-
import type {
|
|
3
|
-
import {
|
|
2
|
+
import type { IContainer } from '../container/IContainer.js';
|
|
3
|
+
import { Instance, Serializable } from '../utils/basic.js';
|
|
4
4
|
export type InstancePredicate = (dep: unknown) => boolean;
|
|
5
|
-
export declare class GroupInstanceToken extends InjectionToken<Instance[]> {
|
|
5
|
+
export declare class GroupInstanceToken extends InjectionToken<Instance[]> implements Serializable {
|
|
6
6
|
private predicate;
|
|
7
7
|
private isCascade;
|
|
8
|
-
constructor(predicate: InstancePredicate
|
|
8
|
+
constructor(predicate: InstancePredicate, { tags, isCascade }?: {
|
|
9
|
+
tags?: string[];
|
|
10
|
+
isCascade?: boolean;
|
|
11
|
+
});
|
|
9
12
|
select<R>(fn: (target: Instance) => R): (s: IContainer) => R[];
|
|
10
13
|
args(...deps: unknown[]): this;
|
|
11
14
|
argsFn(getArgsFn: (s: IContainer) => unknown[]): InjectionToken<Instance[]>;
|
|
12
15
|
lazy(): InjectionToken<Instance[]>;
|
|
13
16
|
cascade(isTrue: boolean): this;
|
|
14
17
|
resolve(c: IContainer): Instance[];
|
|
15
|
-
|
|
18
|
+
addTags(...tags: string[]): GroupInstanceToken;
|
|
19
|
+
toString(): string;
|
|
16
20
|
}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type IContainer, type Tag } from '../container/IContainer.js';
|
|
2
2
|
import { ArgsFn, ProviderOptions } from '../provider/IProvider.js';
|
|
3
|
-
import { type constructor } from '../utils/basic.js';
|
|
4
3
|
export declare const forwardArgs: ArgsFn;
|
|
5
4
|
export declare abstract class InjectionToken<T = any> {
|
|
5
|
+
private readonly tags;
|
|
6
|
+
protected constructor(tags?: Tag[]);
|
|
6
7
|
abstract resolve(s: IContainer, options?: ProviderOptions): T;
|
|
7
8
|
abstract args(...deps: unknown[]): InjectionToken<T>;
|
|
8
9
|
abstract argsFn(getArgsFn: (s: IContainer) => unknown[]): InjectionToken<T>;
|
|
9
10
|
abstract lazy(): InjectionToken<T>;
|
|
10
|
-
abstract
|
|
11
|
+
abstract addTags(...tags: Tag[]): InjectionToken<T>;
|
|
12
|
+
hasTag(tag: Tag): boolean;
|
|
13
|
+
protected getTags(): Tag[];
|
|
11
14
|
}
|
|
12
15
|
export declare function isInjectionToken(target: unknown): target is InjectionToken;
|
|
@@ -3,13 +3,15 @@ import { InjectionToken } from './InjectionToken.js';
|
|
|
3
3
|
import { IRegistration } from '../registration/IRegistration.js';
|
|
4
4
|
import { BindToken } from './BindToken.js';
|
|
5
5
|
import { ArgsFn } from '../provider/IProvider.js';
|
|
6
|
-
|
|
6
|
+
import { Serializable } from '../utils/basic.js';
|
|
7
|
+
export declare class SingleAliasToken<T = any> extends InjectionToken<T> implements BindToken<T>, Serializable {
|
|
7
8
|
readonly token: DependencyKey;
|
|
8
9
|
private readonly _getArgsFn;
|
|
9
10
|
private readonly _isLazy;
|
|
10
|
-
constructor(token: DependencyKey, { getArgsFn, isLazy }?: {
|
|
11
|
+
constructor(token: DependencyKey, { getArgsFn, isLazy, tags, }?: {
|
|
11
12
|
getArgsFn?: ArgsFn;
|
|
12
13
|
isLazy?: boolean;
|
|
14
|
+
tags?: string[];
|
|
13
15
|
});
|
|
14
16
|
select<R>(fn: (target: T) => R): (s: IContainer) => R;
|
|
15
17
|
resolve(s: IContainer, { args, lazy }?: ResolveOneOptions): T;
|
|
@@ -17,6 +19,7 @@ export declare class SingleAliasToken<T = any> extends InjectionToken<T> impleme
|
|
|
17
19
|
args(...newArgs: unknown[]): SingleAliasToken<T>;
|
|
18
20
|
argsFn(fn: (s: IContainer) => unknown[]): SingleAliasToken<T>;
|
|
19
21
|
lazy(): SingleAliasToken<T>;
|
|
20
|
-
|
|
22
|
+
addTags(...tags: string[]): SingleAliasToken<T>;
|
|
23
|
+
toString(): string;
|
|
21
24
|
}
|
|
22
25
|
export declare const toSingleAlias: <T>(token: DependencyKey) => SingleAliasToken<T>;
|
|
@@ -2,13 +2,15 @@ import { DependencyKey, IContainer } from '../container/IContainer.js';
|
|
|
2
2
|
import { InjectionToken } from './InjectionToken.js';
|
|
3
3
|
import { IRegistration } from '../registration/IRegistration.js';
|
|
4
4
|
import { ArgsFn, ProviderOptions } from '../provider/IProvider.js';
|
|
5
|
-
|
|
5
|
+
import { Serializable } from '../utils/basic.js';
|
|
6
|
+
export declare class SingleToken<T = any> extends InjectionToken<T> implements Serializable {
|
|
6
7
|
token: DependencyKey;
|
|
7
8
|
private readonly _getArgsFn;
|
|
8
9
|
private readonly _isLazy;
|
|
9
|
-
constructor(token: DependencyKey, { getArgsFn, isLazy }?: {
|
|
10
|
+
constructor(token: DependencyKey, { getArgsFn, isLazy, tags, }?: {
|
|
10
11
|
getArgsFn?: ArgsFn;
|
|
11
12
|
isLazy?: boolean;
|
|
13
|
+
tags?: string[];
|
|
12
14
|
});
|
|
13
15
|
select<R>(fn: (target: T) => R): (s: IContainer) => R;
|
|
14
16
|
resolve(s: IContainer, { args, lazy }?: ProviderOptions): T;
|
|
@@ -16,5 +18,6 @@ export declare class SingleToken<T = any> extends InjectionToken<T> {
|
|
|
16
18
|
args(...newArgs: unknown[]): SingleToken<T>;
|
|
17
19
|
argsFn(fn: (s: IContainer) => unknown[]): SingleToken<T>;
|
|
18
20
|
lazy(): SingleToken<T>;
|
|
19
|
-
|
|
21
|
+
addTags(...tags: string[]): SingleToken<T>;
|
|
22
|
+
toString(): string;
|
|
20
23
|
}
|
package/typings/utils/basic.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export type constructor<T> = new (...args: any[]) => T;
|
|
2
|
+
export interface Serializable {
|
|
3
|
+
toString(): string;
|
|
4
|
+
}
|
|
2
5
|
export type Branded<TBrand extends string, T> = T & {
|
|
3
6
|
readonly __brand?: TBrand;
|
|
4
7
|
};
|
|
@@ -9,3 +12,5 @@ export declare const Is: {
|
|
|
9
12
|
instance: (target: unknown) => target is Instance;
|
|
10
13
|
constructor: (target: unknown) => target is constructor<unknown>;
|
|
11
14
|
};
|
|
15
|
+
export declare function isSerializable(target: unknown): target is Serializable;
|
|
16
|
+
export declare const toString: (target: unknown) => string;
|