ts-ioc-container 30.1.0 → 30.2.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/README.md +2 -2
- package/cjm/container/AutoMockedContainer.js +4 -3
- package/cjm/container/Container.js +7 -5
- package/cjm/container/EmptyContainer.js +1 -1
- package/cjm/index.js +2 -2
- package/cjm/provider/Provider.js +13 -10
- package/cjm/provider/ProviderDecorator.js +7 -4
- package/cjm/provider/ScopeProvider.js +5 -2
- package/esm/container/AutoMockedContainer.js +2 -1
- package/esm/container/Container.js +7 -5
- package/esm/container/EmptyContainer.js +1 -1
- package/esm/index.js +1 -1
- package/esm/provider/Provider.js +11 -8
- package/esm/provider/ProviderDecorator.js +7 -4
- package/esm/provider/ScopeProvider.js +5 -2
- package/package.json +2 -2
- package/typings/container/AutoMockedContainer.d.ts +3 -3
- package/typings/container/Container.d.ts +2 -2
- package/typings/container/EmptyContainer.d.ts +2 -2
- package/typings/container/IContainer.d.ts +1 -1
- package/typings/index.d.ts +1 -1
- package/typings/provider/IProvider.d.ts +5 -3
- package/typings/provider/Provider.d.ts +7 -6
- package/typings/provider/ProviderDecorator.d.ts +5 -4
- package/typings/provider/ScopeProvider.d.ts +2 -1
package/README.md
CHANGED
|
@@ -849,13 +849,13 @@ describe('onDispose', function () {
|
|
|
849
849
|
Sometimes you need to automatically mock all dependencies in container. This is what `AutoMockedContainer` is for.
|
|
850
850
|
|
|
851
851
|
```typescript
|
|
852
|
-
import { AutoMockedContainer, Container, DependencyKey, MetadataInjector } from 'ts-ioc-container';
|
|
852
|
+
import { AutoMockedContainer, Container, DependencyKey, MetadataInjector, Tagged } from 'ts-ioc-container';
|
|
853
853
|
import { IMock, Mock } from 'moq.ts';
|
|
854
854
|
|
|
855
855
|
export class MoqContainer extends AutoMockedContainer {
|
|
856
856
|
private mocks = new Map<DependencyKey, IMock<any>>();
|
|
857
857
|
|
|
858
|
-
resolveFromChild<T>(key: DependencyKey): T {
|
|
858
|
+
resolveFromChild<T>(child: Tagged, key: DependencyKey): T {
|
|
859
859
|
return this.resolveMock<T>(key).object();
|
|
860
860
|
}
|
|
861
861
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AutoMockedContainer = void 0;
|
|
4
|
-
const
|
|
4
|
+
const MethodNotImplementedError_1 = require("../errors/MethodNotImplementedError");
|
|
5
|
+
const DependencyNotFoundError_1 = require("../errors/DependencyNotFoundError");
|
|
5
6
|
class AutoMockedContainer {
|
|
6
7
|
getKeysByAlias(alias) {
|
|
7
8
|
return [];
|
|
@@ -10,10 +11,10 @@ class AutoMockedContainer {
|
|
|
10
11
|
return false;
|
|
11
12
|
}
|
|
12
13
|
createScope() {
|
|
13
|
-
throw new
|
|
14
|
+
throw new MethodNotImplementedError_1.MethodNotImplementedError();
|
|
14
15
|
}
|
|
15
16
|
resolve(key, ...args) {
|
|
16
|
-
throw new
|
|
17
|
+
throw new DependencyNotFoundError_1.DependencyNotFoundError(`Cannot find ${key.toString()}`);
|
|
17
18
|
}
|
|
18
19
|
dispose() { }
|
|
19
20
|
register() {
|
|
@@ -29,17 +29,19 @@ class Container {
|
|
|
29
29
|
return this.resolveByConstructor(token, ...args);
|
|
30
30
|
}
|
|
31
31
|
const provider = this.providers.get(token);
|
|
32
|
-
return provider?.
|
|
32
|
+
return provider?.isVisible(this, this)
|
|
33
|
+
? provider.resolve(this, ...args)
|
|
34
|
+
: this.parent.resolveFromChild(this, token, ...args);
|
|
33
35
|
}
|
|
34
|
-
resolveFromChild(token, ...args) {
|
|
36
|
+
resolveFromChild(child, token, ...args) {
|
|
35
37
|
this.validateContainer();
|
|
36
38
|
if ((0, IContainer_1.isConstructor)(token)) {
|
|
37
39
|
return this.resolveByConstructor(token, ...args);
|
|
38
40
|
}
|
|
39
41
|
const provider = this.providers.get(token);
|
|
40
|
-
return provider?.
|
|
42
|
+
return provider?.isVisible(this, child)
|
|
41
43
|
? provider.resolve(this, ...args)
|
|
42
|
-
: this.parent.resolveFromChild(token, ...args);
|
|
44
|
+
: this.parent.resolveFromChild(child, token, ...args);
|
|
43
45
|
}
|
|
44
46
|
resolveByConstructor(token, ...args) {
|
|
45
47
|
const instance = this.injector.resolve(this, token, ...args);
|
|
@@ -97,7 +99,7 @@ class Container {
|
|
|
97
99
|
*/
|
|
98
100
|
cloneValidProvidersFrom(source) {
|
|
99
101
|
for (const [key, provider] of source.getAllProviders()) {
|
|
100
|
-
if (provider.
|
|
102
|
+
if (provider.isValidToClone(this)) {
|
|
101
103
|
this.providers.set(key, provider.clone());
|
|
102
104
|
}
|
|
103
105
|
}
|
|
@@ -25,7 +25,7 @@ class EmptyContainer {
|
|
|
25
25
|
resolve(key) {
|
|
26
26
|
throw new DependencyNotFoundError_1.DependencyNotFoundError(`Cannot find ${key.toString()}`);
|
|
27
27
|
}
|
|
28
|
-
resolveFromChild(key, ...args) {
|
|
28
|
+
resolveFromChild(child, key, ...args) {
|
|
29
29
|
throw new DependencyNotFoundError_1.DependencyNotFoundError(`Cannot find ${key.toString()}`);
|
|
30
30
|
}
|
|
31
31
|
getAllProviders() {
|
package/cjm/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setParameterMetadata = exports.getMetadata = exports.setMetadata = exports.by = exports.hook = exports.getHooks = exports.ProxyInjector = exports.SimpleInjector = exports.inject = exports.MetadataInjector = exports.alias = exports.register = exports.Registration = exports.key = exports.AutoMockedContainer = exports.ScopeProvider = exports.scope = exports.SingletonProvider = exports.singleton = exports.ArgsProvider = exports.args = exports.argsFn = exports.
|
|
3
|
+
exports.setParameterMetadata = exports.getMetadata = exports.setMetadata = exports.by = exports.hook = exports.getHooks = exports.ProxyInjector = exports.SimpleInjector = exports.inject = exports.MetadataInjector = exports.alias = exports.register = exports.Registration = exports.key = exports.AutoMockedContainer = exports.ScopeProvider = exports.scope = exports.SingletonProvider = exports.singleton = exports.ArgsProvider = exports.args = exports.argsFn = exports.setVisibility = exports.provider = exports.Provider = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyNotFoundError = exports.EmptyContainer = exports.Container = exports.isDependencyKey = void 0;
|
|
4
4
|
var IContainer_1 = require("./container/IContainer");
|
|
5
5
|
Object.defineProperty(exports, "isDependencyKey", { enumerable: true, get: function () { return IContainer_1.isDependencyKey; } });
|
|
6
6
|
var Container_1 = require("./container/Container");
|
|
@@ -16,7 +16,7 @@ Object.defineProperty(exports, "ContainerDisposedError", { enumerable: true, get
|
|
|
16
16
|
var Provider_1 = require("./provider/Provider");
|
|
17
17
|
Object.defineProperty(exports, "Provider", { enumerable: true, get: function () { return Provider_1.Provider; } });
|
|
18
18
|
Object.defineProperty(exports, "provider", { enumerable: true, get: function () { return Provider_1.provider; } });
|
|
19
|
-
Object.defineProperty(exports, "
|
|
19
|
+
Object.defineProperty(exports, "setVisibility", { enumerable: true, get: function () { return Provider_1.setVisibility; } });
|
|
20
20
|
var ArgsProvider_1 = require("./provider/ArgsProvider");
|
|
21
21
|
Object.defineProperty(exports, "argsFn", { enumerable: true, get: function () { return ArgsProvider_1.argsFn; } });
|
|
22
22
|
Object.defineProperty(exports, "args", { enumerable: true, get: function () { return ArgsProvider_1.args; } });
|
package/cjm/provider/Provider.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Provider = exports.
|
|
3
|
+
exports.Provider = exports.setVisibility = exports.provider = void 0;
|
|
4
4
|
const utils_1 = require("../utils");
|
|
5
5
|
const metadata_1 = require("../metadata");
|
|
6
6
|
const PROVIDER_KEY = 'provider';
|
|
7
7
|
const provider = (...mappers) => (0, metadata_1.setMetadata)(PROVIDER_KEY, mappers);
|
|
8
8
|
exports.provider = provider;
|
|
9
|
-
const
|
|
10
|
-
exports.
|
|
9
|
+
const setVisibility = (isVisibleWhen) => (p) => p.setVisibility(isVisibleWhen);
|
|
10
|
+
exports.setVisibility = setVisibility;
|
|
11
11
|
class Provider {
|
|
12
12
|
static fromClass(Target) {
|
|
13
13
|
const mappers = (0, metadata_1.getMetadata)(Target, PROVIDER_KEY) ?? [];
|
|
@@ -16,25 +16,28 @@ class Provider {
|
|
|
16
16
|
static fromValue(value) {
|
|
17
17
|
return new Provider(() => value);
|
|
18
18
|
}
|
|
19
|
-
constructor(resolveDependency) {
|
|
19
|
+
constructor(resolveDependency, isVisibleWhen = () => true) {
|
|
20
20
|
this.resolveDependency = resolveDependency;
|
|
21
|
-
this.
|
|
21
|
+
this.isVisibleWhen = isVisibleWhen;
|
|
22
22
|
}
|
|
23
23
|
pipe(...mappers) {
|
|
24
24
|
return (0, utils_1.pipe)(...mappers)(this);
|
|
25
25
|
}
|
|
26
26
|
clone() {
|
|
27
|
-
return new Provider(this.resolveDependency);
|
|
27
|
+
return new Provider(this.resolveDependency, this.isVisibleWhen);
|
|
28
28
|
}
|
|
29
29
|
resolve(container, ...args) {
|
|
30
30
|
return this.resolveDependency(container, ...args);
|
|
31
31
|
}
|
|
32
|
-
|
|
33
|
-
this.
|
|
32
|
+
setVisibility(isVisibleWhen) {
|
|
33
|
+
this.isVisibleWhen = isVisibleWhen;
|
|
34
34
|
return this;
|
|
35
35
|
}
|
|
36
|
-
|
|
37
|
-
return
|
|
36
|
+
isVisible(parent, child) {
|
|
37
|
+
return this.isVisibleWhen(parent, child);
|
|
38
|
+
}
|
|
39
|
+
isValidToClone() {
|
|
40
|
+
return true;
|
|
38
41
|
}
|
|
39
42
|
}
|
|
40
43
|
exports.Provider = Provider;
|
|
@@ -6,12 +6,15 @@ class ProviderDecorator {
|
|
|
6
6
|
constructor(decorated) {
|
|
7
7
|
this.decorated = decorated;
|
|
8
8
|
}
|
|
9
|
-
|
|
10
|
-
this.decorated.
|
|
9
|
+
setVisibility(predicate) {
|
|
10
|
+
this.decorated.setVisibility(predicate);
|
|
11
11
|
return this;
|
|
12
12
|
}
|
|
13
|
-
|
|
14
|
-
return this.decorated.
|
|
13
|
+
isValidToClone(container) {
|
|
14
|
+
return this.decorated.isValidToClone(container);
|
|
15
|
+
}
|
|
16
|
+
isVisible(parent, child) {
|
|
17
|
+
return this.decorated.isVisible(parent, child);
|
|
15
18
|
}
|
|
16
19
|
resolve(container, ...args) {
|
|
17
20
|
return this.decorated.resolve(container, ...args);
|
|
@@ -15,8 +15,11 @@ class ScopeProvider extends ProviderDecorator_1.ProviderDecorator {
|
|
|
15
15
|
clone() {
|
|
16
16
|
return new ScopeProvider(this.provider.clone(), this.predicate);
|
|
17
17
|
}
|
|
18
|
-
|
|
19
|
-
return this.predicate(container) && this.provider.
|
|
18
|
+
isValidToClone(container) {
|
|
19
|
+
return this.predicate(container) && this.provider.isValidToClone(container);
|
|
20
|
+
}
|
|
21
|
+
isVisible(container, child) {
|
|
22
|
+
return this.predicate(container) && this.provider.isVisible(container, child);
|
|
20
23
|
}
|
|
21
24
|
}
|
|
22
25
|
exports.ScopeProvider = ScopeProvider;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { MethodNotImplementedError
|
|
1
|
+
import { MethodNotImplementedError } from '../errors/MethodNotImplementedError';
|
|
2
|
+
import { DependencyNotFoundError } from '../errors/DependencyNotFoundError';
|
|
2
3
|
export class AutoMockedContainer {
|
|
3
4
|
getKeysByAlias(alias) {
|
|
4
5
|
return [];
|
|
@@ -26,17 +26,19 @@ export class Container {
|
|
|
26
26
|
return this.resolveByConstructor(token, ...args);
|
|
27
27
|
}
|
|
28
28
|
const provider = this.providers.get(token);
|
|
29
|
-
return provider?.
|
|
29
|
+
return provider?.isVisible(this, this)
|
|
30
|
+
? provider.resolve(this, ...args)
|
|
31
|
+
: this.parent.resolveFromChild(this, token, ...args);
|
|
30
32
|
}
|
|
31
|
-
resolveFromChild(token, ...args) {
|
|
33
|
+
resolveFromChild(child, token, ...args) {
|
|
32
34
|
this.validateContainer();
|
|
33
35
|
if (isConstructor(token)) {
|
|
34
36
|
return this.resolveByConstructor(token, ...args);
|
|
35
37
|
}
|
|
36
38
|
const provider = this.providers.get(token);
|
|
37
|
-
return provider?.
|
|
39
|
+
return provider?.isVisible(this, child)
|
|
38
40
|
? provider.resolve(this, ...args)
|
|
39
|
-
: this.parent.resolveFromChild(token, ...args);
|
|
41
|
+
: this.parent.resolveFromChild(child, token, ...args);
|
|
40
42
|
}
|
|
41
43
|
resolveByConstructor(token, ...args) {
|
|
42
44
|
const instance = this.injector.resolve(this, token, ...args);
|
|
@@ -94,7 +96,7 @@ export class Container {
|
|
|
94
96
|
*/
|
|
95
97
|
cloneValidProvidersFrom(source) {
|
|
96
98
|
for (const [key, provider] of source.getAllProviders()) {
|
|
97
|
-
if (provider.
|
|
99
|
+
if (provider.isValidToClone(this)) {
|
|
98
100
|
this.providers.set(key, provider.clone());
|
|
99
101
|
}
|
|
100
102
|
}
|
|
@@ -22,7 +22,7 @@ export class EmptyContainer {
|
|
|
22
22
|
resolve(key) {
|
|
23
23
|
throw new DependencyNotFoundError(`Cannot find ${key.toString()}`);
|
|
24
24
|
}
|
|
25
|
-
resolveFromChild(key, ...args) {
|
|
25
|
+
resolveFromChild(child, key, ...args) {
|
|
26
26
|
throw new DependencyNotFoundError(`Cannot find ${key.toString()}`);
|
|
27
27
|
}
|
|
28
28
|
getAllProviders() {
|
package/esm/index.js
CHANGED
|
@@ -4,7 +4,7 @@ export { EmptyContainer } from './container/EmptyContainer';
|
|
|
4
4
|
export { DependencyNotFoundError } from './errors/DependencyNotFoundError';
|
|
5
5
|
export { MethodNotImplementedError } from './errors/MethodNotImplementedError';
|
|
6
6
|
export { ContainerDisposedError } from './errors/ContainerDisposedError';
|
|
7
|
-
export { Provider, provider,
|
|
7
|
+
export { Provider, provider, setVisibility } from './provider/Provider';
|
|
8
8
|
export { argsFn, args, ArgsProvider } from './provider/ArgsProvider';
|
|
9
9
|
export { singleton, SingletonProvider } from './provider/SingletonProvider';
|
|
10
10
|
export { scope, ScopeProvider } from './provider/ScopeProvider';
|
package/esm/provider/Provider.js
CHANGED
|
@@ -2,7 +2,7 @@ import { pipe } from '../utils';
|
|
|
2
2
|
import { getMetadata, setMetadata } from '../metadata';
|
|
3
3
|
const PROVIDER_KEY = 'provider';
|
|
4
4
|
export const provider = (...mappers) => setMetadata(PROVIDER_KEY, mappers);
|
|
5
|
-
export const
|
|
5
|
+
export const setVisibility = (isVisibleWhen) => (p) => p.setVisibility(isVisibleWhen);
|
|
6
6
|
export class Provider {
|
|
7
7
|
static fromClass(Target) {
|
|
8
8
|
const mappers = getMetadata(Target, PROVIDER_KEY) ?? [];
|
|
@@ -11,24 +11,27 @@ export class Provider {
|
|
|
11
11
|
static fromValue(value) {
|
|
12
12
|
return new Provider(() => value);
|
|
13
13
|
}
|
|
14
|
-
constructor(resolveDependency) {
|
|
14
|
+
constructor(resolveDependency, isVisibleWhen = () => true) {
|
|
15
15
|
this.resolveDependency = resolveDependency;
|
|
16
|
-
this.
|
|
16
|
+
this.isVisibleWhen = isVisibleWhen;
|
|
17
17
|
}
|
|
18
18
|
pipe(...mappers) {
|
|
19
19
|
return pipe(...mappers)(this);
|
|
20
20
|
}
|
|
21
21
|
clone() {
|
|
22
|
-
return new Provider(this.resolveDependency);
|
|
22
|
+
return new Provider(this.resolveDependency, this.isVisibleWhen);
|
|
23
23
|
}
|
|
24
24
|
resolve(container, ...args) {
|
|
25
25
|
return this.resolveDependency(container, ...args);
|
|
26
26
|
}
|
|
27
|
-
|
|
28
|
-
this.
|
|
27
|
+
setVisibility(isVisibleWhen) {
|
|
28
|
+
this.isVisibleWhen = isVisibleWhen;
|
|
29
29
|
return this;
|
|
30
30
|
}
|
|
31
|
-
|
|
32
|
-
return
|
|
31
|
+
isVisible(parent, child) {
|
|
32
|
+
return this.isVisibleWhen(parent, child);
|
|
33
|
+
}
|
|
34
|
+
isValidToClone() {
|
|
35
|
+
return true;
|
|
33
36
|
}
|
|
34
37
|
}
|
|
@@ -3,12 +3,15 @@ export class ProviderDecorator {
|
|
|
3
3
|
constructor(decorated) {
|
|
4
4
|
this.decorated = decorated;
|
|
5
5
|
}
|
|
6
|
-
|
|
7
|
-
this.decorated.
|
|
6
|
+
setVisibility(predicate) {
|
|
7
|
+
this.decorated.setVisibility(predicate);
|
|
8
8
|
return this;
|
|
9
9
|
}
|
|
10
|
-
|
|
11
|
-
return this.decorated.
|
|
10
|
+
isValidToClone(container) {
|
|
11
|
+
return this.decorated.isValidToClone(container);
|
|
12
|
+
}
|
|
13
|
+
isVisible(parent, child) {
|
|
14
|
+
return this.decorated.isVisible(parent, child);
|
|
12
15
|
}
|
|
13
16
|
resolve(container, ...args) {
|
|
14
17
|
return this.decorated.resolve(container, ...args);
|
|
@@ -11,7 +11,10 @@ export class ScopeProvider extends ProviderDecorator {
|
|
|
11
11
|
clone() {
|
|
12
12
|
return new ScopeProvider(this.provider.clone(), this.predicate);
|
|
13
13
|
}
|
|
14
|
-
|
|
15
|
-
return this.predicate(container) && this.provider.
|
|
14
|
+
isValidToClone(container) {
|
|
15
|
+
return this.predicate(container) && this.provider.isValidToClone(container);
|
|
16
|
+
}
|
|
17
|
+
isVisible(container, child) {
|
|
18
|
+
return this.predicate(container) && this.provider.isVisible(container, child);
|
|
16
19
|
}
|
|
17
20
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-ioc-container",
|
|
3
|
-
"version": "30.
|
|
3
|
+
"version": "30.2.0",
|
|
4
4
|
"description": "Typescript IoC container",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public",
|
|
@@ -59,5 +59,5 @@
|
|
|
59
59
|
"ts-node": "^10.9.1",
|
|
60
60
|
"typescript": "5.4.3"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "fff52c43fd598f708261a295a5eb85c2385c32be"
|
|
63
63
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { IContainer, InjectionToken,
|
|
2
|
-
import {
|
|
1
|
+
import { AliasPredicate, DependencyKey, IContainer, InjectionToken, Tagged } from './IContainer';
|
|
2
|
+
import { IProvider } from '../provider/IProvider';
|
|
3
3
|
export declare abstract class AutoMockedContainer implements IContainer {
|
|
4
4
|
getKeysByAlias(alias: AliasPredicate): DependencyKey[];
|
|
5
5
|
hasDependency(key: string): boolean;
|
|
6
6
|
createScope(): IContainer;
|
|
7
7
|
resolve<T>(key: InjectionToken<T>, ...args: unknown[]): T;
|
|
8
|
-
abstract resolveFromChild<T>(key: InjectionToken<T>, ...args: unknown[]): T;
|
|
8
|
+
abstract resolveFromChild<T>(child: Tagged, key: InjectionToken<T>, ...args: unknown[]): T;
|
|
9
9
|
dispose(): void;
|
|
10
10
|
register(): this;
|
|
11
11
|
getInstances(): unknown[];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Alias, AliasPredicate, DependencyKey, IContainer, IContainerModule, InjectionToken, Tag } from './IContainer';
|
|
1
|
+
import { Alias, AliasPredicate, DependencyKey, IContainer, IContainerModule, InjectionToken, Tag, Tagged } from './IContainer';
|
|
2
2
|
import { IInjector } from '../injector/IInjector';
|
|
3
3
|
import { IProvider } from '../provider/IProvider';
|
|
4
4
|
export declare class Container implements IContainer {
|
|
@@ -16,7 +16,7 @@ export declare class Container implements IContainer {
|
|
|
16
16
|
});
|
|
17
17
|
register(key: DependencyKey, provider: IProvider, aliases?: Alias[]): this;
|
|
18
18
|
resolve<T>(token: InjectionToken<T>, ...args: unknown[]): T;
|
|
19
|
-
resolveFromChild<T>(token: InjectionToken<T>, ...args: unknown[]): T;
|
|
19
|
+
resolveFromChild<T>(child: Tagged, token: InjectionToken<T>, ...args: unknown[]): T;
|
|
20
20
|
private resolveByConstructor;
|
|
21
21
|
createScope(...tags: Tag[]): Container;
|
|
22
22
|
dispose(): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AliasPredicate, DependencyKey, IContainer, IContainerModule, InjectionToken } from './IContainer';
|
|
1
|
+
import { AliasPredicate, DependencyKey, IContainer, IContainerModule, InjectionToken, Tagged } from './IContainer';
|
|
2
2
|
import { IProvider } from '../provider/IProvider';
|
|
3
3
|
export declare class EmptyContainer implements IContainer {
|
|
4
4
|
getKeysByAlias(alias: AliasPredicate): DependencyKey[];
|
|
@@ -8,7 +8,7 @@ export declare class EmptyContainer implements IContainer {
|
|
|
8
8
|
dispose(): void;
|
|
9
9
|
register(key: DependencyKey, value: IProvider): this;
|
|
10
10
|
resolve<T>(key: InjectionToken<T>): T;
|
|
11
|
-
resolveFromChild<T>(key: InjectionToken<T>, ...args: unknown[]): T;
|
|
11
|
+
resolveFromChild<T>(child: Tagged, key: InjectionToken<T>, ...args: unknown[]): T;
|
|
12
12
|
getAllProviders(): Map<DependencyKey, IProvider>;
|
|
13
13
|
getInstances(): unknown[];
|
|
14
14
|
removeScope(): void;
|
|
@@ -7,7 +7,7 @@ export declare function isConstructor<T>(token: InjectionToken<T>): token is con
|
|
|
7
7
|
export type InjectionToken<T = unknown> = constructor<T> | DependencyKey;
|
|
8
8
|
export interface Resolvable {
|
|
9
9
|
resolve<T>(key: InjectionToken<T>, ...args: unknown[]): T;
|
|
10
|
-
resolveFromChild<T>(key: InjectionToken<T>, ...args: unknown[]): T;
|
|
10
|
+
resolveFromChild<T>(child: Tagged, key: InjectionToken<T>, ...args: unknown[]): T;
|
|
11
11
|
}
|
|
12
12
|
export interface IContainerModule {
|
|
13
13
|
applyTo(container: IContainer): void;
|
package/typings/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export { IInjector } from './injector/IInjector';
|
|
|
7
7
|
export { DependencyNotFoundError } from './errors/DependencyNotFoundError';
|
|
8
8
|
export { MethodNotImplementedError } from './errors/MethodNotImplementedError';
|
|
9
9
|
export { ContainerDisposedError } from './errors/ContainerDisposedError';
|
|
10
|
-
export { Provider, provider,
|
|
10
|
+
export { Provider, provider, setVisibility } from './provider/Provider';
|
|
11
11
|
export { ArgsFn, argsFn, args, ArgsProvider } from './provider/ArgsProvider';
|
|
12
12
|
export { singleton, SingletonProvider } from './provider/SingletonProvider';
|
|
13
13
|
export { scope, ScopeProvider } from './provider/ScopeProvider';
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { Resolvable, Tagged } from '../container/IContainer';
|
|
1
|
+
import { IContainer, Resolvable, Tagged } from '../container/IContainer';
|
|
2
2
|
import { MapFn } from '../utils';
|
|
3
3
|
export type ResolveDependency<T = unknown> = (container: Resolvable, ...args: unknown[]) => T;
|
|
4
|
+
export type VisibilityPredicate = (parent: Tagged, child: Tagged) => boolean;
|
|
4
5
|
export interface IProvider<T = unknown> {
|
|
5
6
|
clone(): IProvider<T>;
|
|
6
7
|
resolve(container: Resolvable, ...args: unknown[]): T;
|
|
7
|
-
|
|
8
|
+
isValidToClone(container: Tagged): boolean;
|
|
9
|
+
isVisible(parent: IContainer, child: Tagged): boolean;
|
|
8
10
|
pipe(...mappers: MapFn<IProvider<T>>[]): IProvider<T>;
|
|
9
|
-
|
|
11
|
+
setVisibility(isVisibleWhen: VisibilityPredicate): this;
|
|
10
12
|
}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import { IProvider, ResolveDependency } from './IProvider';
|
|
1
|
+
import { VisibilityPredicate, IProvider, ResolveDependency } from './IProvider';
|
|
2
2
|
import { Resolvable, Tagged } from '../container/IContainer';
|
|
3
3
|
import { constructor, MapFn } from '../utils';
|
|
4
4
|
export declare const provider: (...mappers: MapFn<IProvider>[]) => ClassDecorator;
|
|
5
|
-
export declare const
|
|
5
|
+
export declare const setVisibility: (isVisibleWhen: VisibilityPredicate) => MapFn<IProvider>;
|
|
6
6
|
export declare class Provider<T> implements IProvider<T> {
|
|
7
7
|
private readonly resolveDependency;
|
|
8
|
+
private isVisibleWhen;
|
|
8
9
|
static fromClass<T>(Target: constructor<T>): IProvider<T>;
|
|
9
10
|
static fromValue<T>(value: T): Provider<T>;
|
|
10
|
-
|
|
11
|
-
constructor(resolveDependency: ResolveDependency<T>);
|
|
11
|
+
constructor(resolveDependency: ResolveDependency<T>, isVisibleWhen?: VisibilityPredicate);
|
|
12
12
|
pipe(...mappers: MapFn<IProvider<T>>[]): IProvider<T>;
|
|
13
13
|
clone(): Provider<T>;
|
|
14
14
|
resolve(container: Resolvable, ...args: unknown[]): T;
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
setVisibility(isVisibleWhen: VisibilityPredicate): this;
|
|
16
|
+
isVisible(parent: Tagged, child: Tagged): boolean;
|
|
17
|
+
isValidToClone(): boolean;
|
|
17
18
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { Resolvable, Tagged } from '../container/IContainer';
|
|
2
|
-
import { IProvider } from './IProvider';
|
|
1
|
+
import { IContainer, Resolvable, Tagged } from '../container/IContainer';
|
|
2
|
+
import { VisibilityPredicate, IProvider } from './IProvider';
|
|
3
3
|
import { MapFn } from '../utils';
|
|
4
4
|
export declare abstract class ProviderDecorator<T> implements IProvider<T> {
|
|
5
5
|
private decorated;
|
|
6
6
|
protected constructor(decorated: IProvider<T>);
|
|
7
|
-
|
|
7
|
+
setVisibility(predicate: VisibilityPredicate): this;
|
|
8
8
|
abstract clone(): IProvider<T>;
|
|
9
|
-
|
|
9
|
+
isValidToClone(container: Tagged): boolean;
|
|
10
|
+
isVisible(parent: IContainer, child: Tagged): boolean;
|
|
10
11
|
resolve(container: Resolvable, ...args: any[]): T;
|
|
11
12
|
pipe(...mappers: MapFn<IProvider<T>>[]): IProvider<T>;
|
|
12
13
|
}
|
|
@@ -9,6 +9,7 @@ export declare class ScopeProvider<T> extends ProviderDecorator<T> {
|
|
|
9
9
|
private predicate;
|
|
10
10
|
constructor(provider: IProvider<T>, predicate: ContainerPredicate);
|
|
11
11
|
clone(): ScopeProvider<T>;
|
|
12
|
-
|
|
12
|
+
isValidToClone(container: IContainer): boolean;
|
|
13
|
+
isVisible(container: IContainer, child: Tagged): boolean;
|
|
13
14
|
}
|
|
14
15
|
export {};
|