ts-ioc-container 30.3.0 → 30.4.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 +3 -6
- package/cjm/index.js +3 -5
- package/cjm/provider/Provider.js +19 -10
- package/cjm/provider/ProviderDecorator.js +4 -0
- package/esm/container/Container.js +3 -6
- package/esm/index.js +1 -2
- package/esm/provider/Provider.js +16 -8
- package/esm/provider/ProviderDecorator.js +4 -0
- package/package.json +2 -2
- package/typings/container/Container.d.ts +0 -1
- package/typings/index.d.ts +1 -2
- package/typings/provider/IProvider.d.ts +9 -4
- package/typings/provider/Provider.d.ts +8 -5
- package/typings/provider/ProviderDecorator.d.ts +3 -2
- package/cjm/provider/ScopeProvider.js +0 -25
- package/esm/provider/ScopeProvider.js +0 -20
- package/typings/provider/ScopeProvider.d.ts +0 -15
|
@@ -26,18 +26,15 @@ class Container {
|
|
|
26
26
|
resolve(token, { args = [], child = this } = {}) {
|
|
27
27
|
this.validateContainer();
|
|
28
28
|
if ((0, IContainer_1.isConstructor)(token)) {
|
|
29
|
-
|
|
29
|
+
const instance = this.injector.resolve(this, token, ...args);
|
|
30
|
+
this.instances.add(instance);
|
|
31
|
+
return instance;
|
|
30
32
|
}
|
|
31
33
|
const provider = this.providers.get(token);
|
|
32
34
|
return provider?.isVisible(this, child)
|
|
33
35
|
? provider.resolve(this, ...args)
|
|
34
36
|
: this.parent.resolve(token, { args, child });
|
|
35
37
|
}
|
|
36
|
-
resolveByConstructor(token, ...args) {
|
|
37
|
-
const instance = this.injector.resolve(this, token, ...args);
|
|
38
|
-
this.instances.add(instance);
|
|
39
|
-
return instance;
|
|
40
|
-
}
|
|
41
38
|
createScope(...tags) {
|
|
42
39
|
this.validateContainer();
|
|
43
40
|
const scope = new Container(this.injector, { parent: this, tags });
|
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.
|
|
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.SingletonProvider = exports.singleton = exports.ArgsProvider = exports.args = exports.argsFn = exports.scope = exports.visible = 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,8 @@ 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, "visible", { enumerable: true, get: function () { return Provider_1.visible; } });
|
|
20
|
+
Object.defineProperty(exports, "scope", { enumerable: true, get: function () { return Provider_1.scope; } });
|
|
20
21
|
var ArgsProvider_1 = require("./provider/ArgsProvider");
|
|
21
22
|
Object.defineProperty(exports, "argsFn", { enumerable: true, get: function () { return ArgsProvider_1.argsFn; } });
|
|
22
23
|
Object.defineProperty(exports, "args", { enumerable: true, get: function () { return ArgsProvider_1.args; } });
|
|
@@ -24,9 +25,6 @@ Object.defineProperty(exports, "ArgsProvider", { enumerable: true, get: function
|
|
|
24
25
|
var SingletonProvider_1 = require("./provider/SingletonProvider");
|
|
25
26
|
Object.defineProperty(exports, "singleton", { enumerable: true, get: function () { return SingletonProvider_1.singleton; } });
|
|
26
27
|
Object.defineProperty(exports, "SingletonProvider", { enumerable: true, get: function () { return SingletonProvider_1.SingletonProvider; } });
|
|
27
|
-
var ScopeProvider_1 = require("./provider/ScopeProvider");
|
|
28
|
-
Object.defineProperty(exports, "scope", { enumerable: true, get: function () { return ScopeProvider_1.scope; } });
|
|
29
|
-
Object.defineProperty(exports, "ScopeProvider", { enumerable: true, get: function () { return ScopeProvider_1.ScopeProvider; } });
|
|
30
28
|
var AutoMockedContainer_1 = require("./container/AutoMockedContainer");
|
|
31
29
|
Object.defineProperty(exports, "AutoMockedContainer", { enumerable: true, get: function () { return AutoMockedContainer_1.AutoMockedContainer; } });
|
|
32
30
|
var Registration_1 = require("./provider/Registration");
|
package/cjm/provider/Provider.js
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Provider = exports.
|
|
3
|
+
exports.Provider = exports.scope = exports.visible = 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 visible = (isVisibleWhen) => (p) => p.setVisibility(isVisibleWhen);
|
|
10
|
+
exports.visible = visible;
|
|
11
|
+
function scope(predicate) {
|
|
12
|
+
return (provider) => provider.setScopePredicate(predicate);
|
|
13
|
+
}
|
|
14
|
+
exports.scope = scope;
|
|
11
15
|
class Provider {
|
|
12
16
|
static fromClass(Target) {
|
|
13
17
|
const mappers = (0, metadata_1.getMetadata)(Target, PROVIDER_KEY) ?? [];
|
|
@@ -16,28 +20,33 @@ class Provider {
|
|
|
16
20
|
static fromValue(value) {
|
|
17
21
|
return new Provider(() => value);
|
|
18
22
|
}
|
|
19
|
-
constructor(resolveDependency, isVisibleWhen = () => true) {
|
|
23
|
+
constructor(resolveDependency, isVisibleWhen = () => true, isValidWhen = () => true) {
|
|
20
24
|
this.resolveDependency = resolveDependency;
|
|
21
25
|
this.isVisibleWhen = isVisibleWhen;
|
|
26
|
+
this.isValidWhen = isValidWhen;
|
|
22
27
|
}
|
|
23
28
|
pipe(...mappers) {
|
|
24
29
|
return (0, utils_1.pipe)(...mappers)(this);
|
|
25
30
|
}
|
|
26
31
|
clone() {
|
|
27
|
-
return new Provider(this.resolveDependency, this.isVisibleWhen);
|
|
32
|
+
return new Provider(this.resolveDependency, this.isVisibleWhen, this.isValidWhen);
|
|
28
33
|
}
|
|
29
34
|
resolve(container, ...args) {
|
|
30
35
|
return this.resolveDependency(container, ...args);
|
|
31
36
|
}
|
|
32
|
-
setVisibility(
|
|
33
|
-
this.isVisibleWhen =
|
|
37
|
+
setVisibility(predicate) {
|
|
38
|
+
this.isVisibleWhen = predicate;
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
setScopePredicate(isValidWhen) {
|
|
42
|
+
this.isValidWhen = isValidWhen;
|
|
34
43
|
return this;
|
|
35
44
|
}
|
|
36
45
|
isVisible(parent, child) {
|
|
37
|
-
return this.isVisibleWhen(
|
|
46
|
+
return this.isValidWhen(parent) && this.isVisibleWhen({ child, isParent: child === parent });
|
|
38
47
|
}
|
|
39
|
-
isValidToClone() {
|
|
40
|
-
return
|
|
48
|
+
isValidToClone(container) {
|
|
49
|
+
return this.isValidWhen(container);
|
|
41
50
|
}
|
|
42
51
|
}
|
|
43
52
|
exports.Provider = Provider;
|
|
@@ -6,6 +6,10 @@ class ProviderDecorator {
|
|
|
6
6
|
constructor(decorated) {
|
|
7
7
|
this.decorated = decorated;
|
|
8
8
|
}
|
|
9
|
+
setScopePredicate(isValidWhen) {
|
|
10
|
+
this.decorated.setScopePredicate(isValidWhen);
|
|
11
|
+
return this;
|
|
12
|
+
}
|
|
9
13
|
setVisibility(predicate) {
|
|
10
14
|
this.decorated.setVisibility(predicate);
|
|
11
15
|
return this;
|
|
@@ -23,18 +23,15 @@ export class Container {
|
|
|
23
23
|
resolve(token, { args = [], child = this } = {}) {
|
|
24
24
|
this.validateContainer();
|
|
25
25
|
if (isConstructor(token)) {
|
|
26
|
-
|
|
26
|
+
const instance = this.injector.resolve(this, token, ...args);
|
|
27
|
+
this.instances.add(instance);
|
|
28
|
+
return instance;
|
|
27
29
|
}
|
|
28
30
|
const provider = this.providers.get(token);
|
|
29
31
|
return provider?.isVisible(this, child)
|
|
30
32
|
? provider.resolve(this, ...args)
|
|
31
33
|
: this.parent.resolve(token, { args, child });
|
|
32
34
|
}
|
|
33
|
-
resolveByConstructor(token, ...args) {
|
|
34
|
-
const instance = this.injector.resolve(this, token, ...args);
|
|
35
|
-
this.instances.add(instance);
|
|
36
|
-
return instance;
|
|
37
|
-
}
|
|
38
35
|
createScope(...tags) {
|
|
39
36
|
this.validateContainer();
|
|
40
37
|
const scope = new Container(this.injector, { parent: this, tags });
|
package/esm/index.js
CHANGED
|
@@ -4,10 +4,9 @@ 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, visible, scope } from './provider/Provider';
|
|
8
8
|
export { argsFn, args, ArgsProvider } from './provider/ArgsProvider';
|
|
9
9
|
export { singleton, SingletonProvider } from './provider/SingletonProvider';
|
|
10
|
-
export { scope, ScopeProvider } from './provider/ScopeProvider';
|
|
11
10
|
export { AutoMockedContainer } from './container/AutoMockedContainer';
|
|
12
11
|
export { key, Registration, register, alias } from './provider/Registration';
|
|
13
12
|
export { MetadataInjector, inject } from './injector/MetadataInjector';
|
package/esm/provider/Provider.js
CHANGED
|
@@ -2,7 +2,10 @@ 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 visible = (isVisibleWhen) => (p) => p.setVisibility(isVisibleWhen);
|
|
6
|
+
export function scope(predicate) {
|
|
7
|
+
return (provider) => provider.setScopePredicate(predicate);
|
|
8
|
+
}
|
|
6
9
|
export class Provider {
|
|
7
10
|
static fromClass(Target) {
|
|
8
11
|
const mappers = getMetadata(Target, PROVIDER_KEY) ?? [];
|
|
@@ -11,27 +14,32 @@ export class Provider {
|
|
|
11
14
|
static fromValue(value) {
|
|
12
15
|
return new Provider(() => value);
|
|
13
16
|
}
|
|
14
|
-
constructor(resolveDependency, isVisibleWhen = () => true) {
|
|
17
|
+
constructor(resolveDependency, isVisibleWhen = () => true, isValidWhen = () => true) {
|
|
15
18
|
this.resolveDependency = resolveDependency;
|
|
16
19
|
this.isVisibleWhen = isVisibleWhen;
|
|
20
|
+
this.isValidWhen = isValidWhen;
|
|
17
21
|
}
|
|
18
22
|
pipe(...mappers) {
|
|
19
23
|
return pipe(...mappers)(this);
|
|
20
24
|
}
|
|
21
25
|
clone() {
|
|
22
|
-
return new Provider(this.resolveDependency, this.isVisibleWhen);
|
|
26
|
+
return new Provider(this.resolveDependency, this.isVisibleWhen, this.isValidWhen);
|
|
23
27
|
}
|
|
24
28
|
resolve(container, ...args) {
|
|
25
29
|
return this.resolveDependency(container, ...args);
|
|
26
30
|
}
|
|
27
|
-
setVisibility(
|
|
28
|
-
this.isVisibleWhen =
|
|
31
|
+
setVisibility(predicate) {
|
|
32
|
+
this.isVisibleWhen = predicate;
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
setScopePredicate(isValidWhen) {
|
|
36
|
+
this.isValidWhen = isValidWhen;
|
|
29
37
|
return this;
|
|
30
38
|
}
|
|
31
39
|
isVisible(parent, child) {
|
|
32
|
-
return this.isVisibleWhen(
|
|
40
|
+
return this.isValidWhen(parent) && this.isVisibleWhen({ child, isParent: child === parent });
|
|
33
41
|
}
|
|
34
|
-
isValidToClone() {
|
|
35
|
-
return
|
|
42
|
+
isValidToClone(container) {
|
|
43
|
+
return this.isValidWhen(container);
|
|
36
44
|
}
|
|
37
45
|
}
|
|
@@ -3,6 +3,10 @@ export class ProviderDecorator {
|
|
|
3
3
|
constructor(decorated) {
|
|
4
4
|
this.decorated = decorated;
|
|
5
5
|
}
|
|
6
|
+
setScopePredicate(isValidWhen) {
|
|
7
|
+
this.decorated.setScopePredicate(isValidWhen);
|
|
8
|
+
return this;
|
|
9
|
+
}
|
|
6
10
|
setVisibility(predicate) {
|
|
7
11
|
this.decorated.setVisibility(predicate);
|
|
8
12
|
return this;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-ioc-container",
|
|
3
|
-
"version": "30.
|
|
3
|
+
"version": "30.4.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": "acde3768bd7287f5b3530e2695904aab14b40305"
|
|
63
63
|
}
|
|
@@ -16,7 +16,6 @@ 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, child }?: ResolveOptions): T;
|
|
19
|
-
private resolveByConstructor;
|
|
20
19
|
createScope(...tags: Tag[]): Container;
|
|
21
20
|
dispose(): void;
|
|
22
21
|
getInstances(): unknown[];
|
package/typings/index.d.ts
CHANGED
|
@@ -7,10 +7,9 @@ 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, visible, scope } from './provider/Provider';
|
|
11
11
|
export { ArgsFn, argsFn, args, ArgsProvider } from './provider/ArgsProvider';
|
|
12
12
|
export { singleton, SingletonProvider } from './provider/SingletonProvider';
|
|
13
|
-
export { scope, ScopeProvider } from './provider/ScopeProvider';
|
|
14
13
|
export { AutoMockedContainer } from './container/AutoMockedContainer';
|
|
15
14
|
export { key, Registration, register, alias } from './provider/Registration';
|
|
16
15
|
export { MetadataInjector, inject } from './injector/MetadataInjector';
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { 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
|
|
4
|
+
export type ChildrenVisibilityPredicate = (options: {
|
|
5
|
+
child: Tagged;
|
|
6
|
+
isParent: boolean;
|
|
7
|
+
}) => boolean;
|
|
8
|
+
export type ScopePredicate = (c: Tagged) => boolean;
|
|
5
9
|
export interface IProvider<T = unknown> {
|
|
6
10
|
clone(): IProvider<T>;
|
|
7
11
|
resolve(container: Resolvable, ...args: unknown[]): T;
|
|
8
12
|
isValidToClone(container: Tagged): boolean;
|
|
9
|
-
isVisible(parent:
|
|
13
|
+
isVisible(parent: Tagged, child: Tagged): boolean;
|
|
10
14
|
pipe(...mappers: MapFn<IProvider<T>>[]): IProvider<T>;
|
|
11
|
-
setVisibility(isVisibleWhen:
|
|
15
|
+
setVisibility(isVisibleWhen: ChildrenVisibilityPredicate): this;
|
|
16
|
+
setScopePredicate(isValidWhen: ScopePredicate): this;
|
|
12
17
|
}
|
|
@@ -1,18 +1,21 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ChildrenVisibilityPredicate, IProvider, ResolveDependency, ScopePredicate } 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 visible: (isVisibleWhen: ChildrenVisibilityPredicate) => MapFn<IProvider>;
|
|
6
|
+
export declare function scope<T = unknown>(predicate: ScopePredicate): MapFn<IProvider<T>>;
|
|
6
7
|
export declare class Provider<T> implements IProvider<T> {
|
|
7
8
|
private readonly resolveDependency;
|
|
8
9
|
private isVisibleWhen;
|
|
10
|
+
private isValidWhen;
|
|
9
11
|
static fromClass<T>(Target: constructor<T>): IProvider<T>;
|
|
10
12
|
static fromValue<T>(value: T): Provider<T>;
|
|
11
|
-
constructor(resolveDependency: ResolveDependency<T>, isVisibleWhen?:
|
|
13
|
+
constructor(resolveDependency: ResolveDependency<T>, isVisibleWhen?: ChildrenVisibilityPredicate, isValidWhen?: ScopePredicate);
|
|
12
14
|
pipe(...mappers: MapFn<IProvider<T>>[]): IProvider<T>;
|
|
13
15
|
clone(): Provider<T>;
|
|
14
16
|
resolve(container: Resolvable, ...args: unknown[]): T;
|
|
15
|
-
setVisibility(
|
|
17
|
+
setVisibility(predicate: ChildrenVisibilityPredicate): this;
|
|
18
|
+
setScopePredicate(isValidWhen: ScopePredicate): this;
|
|
16
19
|
isVisible(parent: Tagged, child: Tagged): boolean;
|
|
17
|
-
isValidToClone(): boolean;
|
|
20
|
+
isValidToClone(container: Tagged): boolean;
|
|
18
21
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { IContainer, Resolvable, Tagged } from '../container/IContainer';
|
|
2
|
-
import {
|
|
2
|
+
import { ChildrenVisibilityPredicate, IProvider, ScopePredicate } 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
|
+
setScopePredicate(isValidWhen: ScopePredicate): this;
|
|
8
|
+
setVisibility(predicate: ChildrenVisibilityPredicate): this;
|
|
8
9
|
abstract clone(): IProvider<T>;
|
|
9
10
|
isValidToClone(container: Tagged): boolean;
|
|
10
11
|
isVisible(parent: IContainer, child: Tagged): boolean;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ScopeProvider = exports.scope = void 0;
|
|
4
|
-
const ProviderDecorator_1 = require("./ProviderDecorator");
|
|
5
|
-
function scope(predicate) {
|
|
6
|
-
return (provider) => new ScopeProvider(provider, predicate);
|
|
7
|
-
}
|
|
8
|
-
exports.scope = scope;
|
|
9
|
-
class ScopeProvider extends ProviderDecorator_1.ProviderDecorator {
|
|
10
|
-
constructor(provider, predicate) {
|
|
11
|
-
super(provider);
|
|
12
|
-
this.provider = provider;
|
|
13
|
-
this.predicate = predicate;
|
|
14
|
-
}
|
|
15
|
-
clone() {
|
|
16
|
-
return new ScopeProvider(this.provider.clone(), this.predicate);
|
|
17
|
-
}
|
|
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);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
exports.ScopeProvider = ScopeProvider;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { ProviderDecorator } from './ProviderDecorator';
|
|
2
|
-
export function scope(predicate) {
|
|
3
|
-
return (provider) => new ScopeProvider(provider, predicate);
|
|
4
|
-
}
|
|
5
|
-
export class ScopeProvider extends ProviderDecorator {
|
|
6
|
-
constructor(provider, predicate) {
|
|
7
|
-
super(provider);
|
|
8
|
-
this.provider = provider;
|
|
9
|
-
this.predicate = predicate;
|
|
10
|
-
}
|
|
11
|
-
clone() {
|
|
12
|
-
return new ScopeProvider(this.provider.clone(), this.predicate);
|
|
13
|
-
}
|
|
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);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { IProvider } from './IProvider';
|
|
2
|
-
import { ProviderDecorator } from './ProviderDecorator';
|
|
3
|
-
import { IContainer, Tagged } from '../container/IContainer';
|
|
4
|
-
import { MapFn } from '../utils';
|
|
5
|
-
type ContainerPredicate = (c: IContainer) => boolean;
|
|
6
|
-
export declare function scope<T = unknown>(predicate: (c: Tagged) => boolean): MapFn<IProvider<T>>;
|
|
7
|
-
export declare class ScopeProvider<T> extends ProviderDecorator<T> {
|
|
8
|
-
private provider;
|
|
9
|
-
private predicate;
|
|
10
|
-
constructor(provider: IProvider<T>, predicate: ContainerPredicate);
|
|
11
|
-
clone(): ScopeProvider<T>;
|
|
12
|
-
isValidToClone(container: IContainer): boolean;
|
|
13
|
-
isVisible(container: IContainer, child: Tagged): boolean;
|
|
14
|
-
}
|
|
15
|
-
export {};
|