ts-ioc-container 52.0.0 → 52.0.1
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 -0
- package/cjm/errors/ProviderDisposedError.js +17 -0
- package/cjm/index.js +4 -2
- package/cjm/provider/Provider.js +12 -0
- package/esm/container/Container.js +3 -0
- package/esm/errors/ProviderDisposedError.js +13 -0
- package/esm/index.js +1 -0
- package/esm/provider/Provider.js +12 -0
- package/package.json +1 -1
- package/typings/errors/ProviderDisposedError.d.ts +6 -0
- package/typings/index.d.ts +1 -0
- package/typings/provider/IProvider.d.ts +1 -0
- package/typings/provider/Provider.d.ts +3 -1
|
@@ -92,6 +92,9 @@ class Container {
|
|
|
92
92
|
this.parent.removeScope(this);
|
|
93
93
|
this.parent = new EmptyContainer_1.EmptyContainer();
|
|
94
94
|
// Reset the state
|
|
95
|
+
for (const [_, provider] of this.providers) {
|
|
96
|
+
provider.dispose();
|
|
97
|
+
}
|
|
95
98
|
this.providers.clear();
|
|
96
99
|
this.aliases.destroy();
|
|
97
100
|
this.instances = [];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProviderDisposedError = void 0;
|
|
4
|
+
const ContainerError_1 = require("./ContainerError");
|
|
5
|
+
class ProviderDisposedError extends ContainerError_1.ContainerError {
|
|
6
|
+
name = 'ProviderDisposedError';
|
|
7
|
+
static assert(isTrue, failMessage) {
|
|
8
|
+
if (!isTrue) {
|
|
9
|
+
throw new ProviderDisposedError(failMessage);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
constructor(message) {
|
|
13
|
+
super(message);
|
|
14
|
+
Object.setPrototypeOf(this, ProviderDisposedError.prototype);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.ProviderDisposedError = ProviderDisposedError;
|
package/cjm/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.resolveConstructor = exports.Is = exports.pipe = exports.select = exports.once = exports.shallowCache = exports.debounce = exports.throttle = exports.handleAsyncError = exports.handleError = exports.getMethodTags = exports.methodTag = exports.getMethodLabels = exports.methodLabel = exports.getMethodMeta = exports.methodMeta = exports.getParamTags = exports.paramTag = exports.getParamLabels = exports.paramLabel = exports.getParamMeta = exports.paramMeta = exports.getClassTags = exports.classTag = exports.getClassLabels = exports.classLabel = exports.getClassMeta = exports.classMeta = exports.GroupInstanceToken = exports.ConstantToken = void 0;
|
|
3
|
+
exports.SingleToken = exports.ClassToken = exports.toSingleAlias = exports.SingleAliasToken = exports.toGroupAlias = exports.GroupAliasToken = exports.InjectionToken = exports.HooksRunner = exports.AddOnDisposeHookModule = exports.onDispose = exports.onDisposeHooksRunner = exports.AddOnConstructHookModule = exports.onConstruct = exports.onConstructHooksRunner = exports.injectProp = exports.createHookContext = exports.createHookContextFactory = exports.HookContext = exports.hasHooks = exports.hook = exports.getHooks = exports.CannonSingletonApplyError = exports.UnexpectedHookResultError = exports.ProviderDisposedError = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyMissingKeyError = exports.DependencyNotFoundError = exports.Registration = exports.appendArgsFn = exports.appendArgs = exports.decorate = exports.singleton = exports.lazy = exports.scopeAccess = exports.scope = exports.bindTo = exports.register = exports.Provider = exports.ProxyInjector = exports.SimpleInjector = exports.resolveArgs = exports.argsFn = exports.args = exports.inject = exports.MetadataInjector = exports.Injector = exports.EmptyContainer = exports.Container = exports.isDependencyKey = void 0;
|
|
4
|
+
exports.resolveConstructor = exports.Is = exports.pipe = exports.select = exports.once = exports.shallowCache = exports.debounce = exports.throttle = exports.handleAsyncError = exports.handleError = exports.getMethodTags = exports.methodTag = exports.getMethodLabels = exports.methodLabel = exports.getMethodMeta = exports.methodMeta = exports.getParamTags = exports.paramTag = exports.getParamLabels = exports.paramLabel = exports.getParamMeta = exports.paramMeta = exports.getClassTags = exports.classTag = exports.getClassLabels = exports.classLabel = exports.getClassMeta = exports.classMeta = exports.GroupInstanceToken = exports.ConstantToken = exports.FunctionToken = void 0;
|
|
5
5
|
// Containers
|
|
6
6
|
var IContainer_1 = require("./container/IContainer");
|
|
7
7
|
Object.defineProperty(exports, "isDependencyKey", { enumerable: true, get: function () { return IContainer_1.isDependencyKey; } });
|
|
@@ -46,6 +46,8 @@ var MethodNotImplementedError_1 = require("./errors/MethodNotImplementedError");
|
|
|
46
46
|
Object.defineProperty(exports, "MethodNotImplementedError", { enumerable: true, get: function () { return MethodNotImplementedError_1.MethodNotImplementedError; } });
|
|
47
47
|
var ContainerDisposedError_1 = require("./errors/ContainerDisposedError");
|
|
48
48
|
Object.defineProperty(exports, "ContainerDisposedError", { enumerable: true, get: function () { return ContainerDisposedError_1.ContainerDisposedError; } });
|
|
49
|
+
var ProviderDisposedError_1 = require("./errors/ProviderDisposedError");
|
|
50
|
+
Object.defineProperty(exports, "ProviderDisposedError", { enumerable: true, get: function () { return ProviderDisposedError_1.ProviderDisposedError; } });
|
|
49
51
|
var UnexpectedHookResultError_1 = require("./errors/UnexpectedHookResultError");
|
|
50
52
|
Object.defineProperty(exports, "UnexpectedHookResultError", { enumerable: true, get: function () { return UnexpectedHookResultError_1.UnexpectedHookResultError; } });
|
|
51
53
|
var CannonSingletonApplyError_1 = require("./errors/CannonSingletonApplyError");
|
package/cjm/provider/Provider.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Provider = void 0;
|
|
4
4
|
const CannonSingletonApplyError_1 = require("../errors/CannonSingletonApplyError");
|
|
5
|
+
const ProviderDisposedError_1 = require("../errors/ProviderDisposedError");
|
|
5
6
|
class Provider {
|
|
6
7
|
resolveDependency;
|
|
7
8
|
static fromClass(Target) {
|
|
@@ -19,10 +20,12 @@ class Provider {
|
|
|
19
20
|
isLazy = false;
|
|
20
21
|
cache = new Map();
|
|
21
22
|
getKey;
|
|
23
|
+
isDisposed = false;
|
|
22
24
|
constructor(resolveDependency) {
|
|
23
25
|
this.resolveDependency = resolveDependency;
|
|
24
26
|
}
|
|
25
27
|
resolve(scope, options) {
|
|
28
|
+
ProviderDisposedError_1.ProviderDisposedError.assert(!this.isDisposed, 'Provider is already disposed');
|
|
26
29
|
if (!this.getKey) {
|
|
27
30
|
return this.resolveDep(scope, options);
|
|
28
31
|
}
|
|
@@ -56,6 +59,7 @@ class Provider {
|
|
|
56
59
|
return this;
|
|
57
60
|
}
|
|
58
61
|
hasAccess(options) {
|
|
62
|
+
ProviderDisposedError_1.ProviderDisposedError.assert(!this.isDisposed, 'Provider is already disposed');
|
|
59
63
|
return this.accessRules.reduce((acc, rule) => rule(options, acc), true);
|
|
60
64
|
}
|
|
61
65
|
singleton(getCacheKey = () => '1') {
|
|
@@ -65,5 +69,13 @@ class Provider {
|
|
|
65
69
|
this.getKey = getCacheKey;
|
|
66
70
|
return this;
|
|
67
71
|
}
|
|
72
|
+
dispose() {
|
|
73
|
+
this.isDisposed = true;
|
|
74
|
+
this.getKey = undefined;
|
|
75
|
+
this.cache.clear();
|
|
76
|
+
this.accessRules.splice(0, this.accessRules.length);
|
|
77
|
+
this.mappers.splice(0, this.mappers.length);
|
|
78
|
+
this.argsFnList.splice(0, this.argsFnList.length);
|
|
79
|
+
}
|
|
68
80
|
}
|
|
69
81
|
exports.Provider = Provider;
|
|
@@ -89,6 +89,9 @@ export class Container {
|
|
|
89
89
|
this.parent.removeScope(this);
|
|
90
90
|
this.parent = new EmptyContainer();
|
|
91
91
|
// Reset the state
|
|
92
|
+
for (const [_, provider] of this.providers) {
|
|
93
|
+
provider.dispose();
|
|
94
|
+
}
|
|
92
95
|
this.providers.clear();
|
|
93
96
|
this.aliases.destroy();
|
|
94
97
|
this.instances = [];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ContainerError } from './ContainerError';
|
|
2
|
+
export class ProviderDisposedError extends ContainerError {
|
|
3
|
+
name = 'ProviderDisposedError';
|
|
4
|
+
static assert(isTrue, failMessage) {
|
|
5
|
+
if (!isTrue) {
|
|
6
|
+
throw new ProviderDisposedError(failMessage);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
constructor(message) {
|
|
10
|
+
super(message);
|
|
11
|
+
Object.setPrototypeOf(this, ProviderDisposedError.prototype);
|
|
12
|
+
}
|
|
13
|
+
}
|
package/esm/index.js
CHANGED
|
@@ -16,6 +16,7 @@ export { DependencyNotFoundError } from './errors/DependencyNotFoundError';
|
|
|
16
16
|
export { DependencyMissingKeyError } from './errors/DependencyMissingKeyError';
|
|
17
17
|
export { MethodNotImplementedError } from './errors/MethodNotImplementedError';
|
|
18
18
|
export { ContainerDisposedError } from './errors/ContainerDisposedError';
|
|
19
|
+
export { ProviderDisposedError } from './errors/ProviderDisposedError';
|
|
19
20
|
export { UnexpectedHookResultError } from './errors/UnexpectedHookResultError';
|
|
20
21
|
export { CannonSingletonApplyError } from './errors/CannonSingletonApplyError';
|
|
21
22
|
// Hooks
|
package/esm/provider/Provider.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CannonSingletonApplyError } from '../errors/CannonSingletonApplyError';
|
|
2
|
+
import { ProviderDisposedError } from '../errors/ProviderDisposedError';
|
|
2
3
|
export class Provider {
|
|
3
4
|
resolveDependency;
|
|
4
5
|
static fromClass(Target) {
|
|
@@ -16,10 +17,12 @@ export class Provider {
|
|
|
16
17
|
isLazy = false;
|
|
17
18
|
cache = new Map();
|
|
18
19
|
getKey;
|
|
20
|
+
isDisposed = false;
|
|
19
21
|
constructor(resolveDependency) {
|
|
20
22
|
this.resolveDependency = resolveDependency;
|
|
21
23
|
}
|
|
22
24
|
resolve(scope, options) {
|
|
25
|
+
ProviderDisposedError.assert(!this.isDisposed, 'Provider is already disposed');
|
|
23
26
|
if (!this.getKey) {
|
|
24
27
|
return this.resolveDep(scope, options);
|
|
25
28
|
}
|
|
@@ -53,6 +56,7 @@ export class Provider {
|
|
|
53
56
|
return this;
|
|
54
57
|
}
|
|
55
58
|
hasAccess(options) {
|
|
59
|
+
ProviderDisposedError.assert(!this.isDisposed, 'Provider is already disposed');
|
|
56
60
|
return this.accessRules.reduce((acc, rule) => rule(options, acc), true);
|
|
57
61
|
}
|
|
58
62
|
singleton(getCacheKey = () => '1') {
|
|
@@ -62,4 +66,12 @@ export class Provider {
|
|
|
62
66
|
this.getKey = getCacheKey;
|
|
63
67
|
return this;
|
|
64
68
|
}
|
|
69
|
+
dispose() {
|
|
70
|
+
this.isDisposed = true;
|
|
71
|
+
this.getKey = undefined;
|
|
72
|
+
this.cache.clear();
|
|
73
|
+
this.accessRules.splice(0, this.accessRules.length);
|
|
74
|
+
this.mappers.splice(0, this.mappers.length);
|
|
75
|
+
this.argsFnList.splice(0, this.argsFnList.length);
|
|
76
|
+
}
|
|
65
77
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-ioc-container",
|
|
3
|
-
"version": "52.0.
|
|
3
|
+
"version": "52.0.1",
|
|
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
|
"workspaces": [
|
|
6
6
|
"docs"
|
package/typings/index.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export { DependencyNotFoundError } from './errors/DependencyNotFoundError';
|
|
|
13
13
|
export { DependencyMissingKeyError } from './errors/DependencyMissingKeyError';
|
|
14
14
|
export { MethodNotImplementedError } from './errors/MethodNotImplementedError';
|
|
15
15
|
export { ContainerDisposedError } from './errors/ContainerDisposedError';
|
|
16
|
+
export { ProviderDisposedError } from './errors/ProviderDisposedError';
|
|
16
17
|
export { UnexpectedHookResultError } from './errors/UnexpectedHookResultError';
|
|
17
18
|
export { CannonSingletonApplyError } from './errors/CannonSingletonApplyError';
|
|
18
19
|
export { getHooks, hook, hasHooks, type HookFn, type HookClass, type InjectFn, type HooksOfClass } from './hooks/hook';
|
|
@@ -6,12 +6,13 @@ export declare class Provider<T = any> implements IProvider<T> {
|
|
|
6
6
|
static fromClass<T>(Target: constructor<T>): IProvider<T>;
|
|
7
7
|
static fromValue<T>(value: T): IProvider<T>;
|
|
8
8
|
static fromKey<T>(key: DependencyKey): Provider<T>;
|
|
9
|
-
private argsFnList;
|
|
9
|
+
private readonly argsFnList;
|
|
10
10
|
private readonly accessRules;
|
|
11
11
|
private readonly mappers;
|
|
12
12
|
private isLazy;
|
|
13
13
|
private cache;
|
|
14
14
|
private getKey;
|
|
15
|
+
private isDisposed;
|
|
15
16
|
constructor(resolveDependency: ResolveDependency<T>);
|
|
16
17
|
resolve(scope: IContainer, options: ProviderOptions): T;
|
|
17
18
|
private resolveDep;
|
|
@@ -21,4 +22,5 @@ export declare class Provider<T = any> implements IProvider<T> {
|
|
|
21
22
|
addArgsFn(...fns: ArgsFn[]): this;
|
|
22
23
|
hasAccess(options: ScopeAccessOptions): boolean;
|
|
23
24
|
singleton(getCacheKey?: GetCacheKey): this;
|
|
25
|
+
dispose(): void;
|
|
24
26
|
}
|