ts-ioc-container 32.0.6 → 32.0.7
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 +3 -2
- package/cjm/index.js +4 -1
- package/cjm/registration/Registration.js +4 -4
- package/cjm/utils/autorun.js +25 -0
- package/esm/index.js +1 -0
- package/esm/registration/Registration.js +4 -4
- package/esm/utils/autorun.js +19 -0
- package/package.json +5 -5
- package/typings/index.d.ts +1 -0
- package/typings/registration/Registration.d.ts +1 -1
- package/typings/utils/autorun.d.ts +12 -0
package/README.md
CHANGED
|
@@ -1149,12 +1149,13 @@ import {
|
|
|
1149
1149
|
Registration as R,
|
|
1150
1150
|
register,
|
|
1151
1151
|
} from 'ts-ioc-container';
|
|
1152
|
+
import { InjectOptions } from '../lib/injector/IInjector.ts';
|
|
1152
1153
|
|
|
1153
1154
|
class MyInjector implements IInjector {
|
|
1154
1155
|
private injector = new MetadataInjector();
|
|
1155
1156
|
|
|
1156
|
-
resolve<T>(container: IContainer, value: constructor<T>,
|
|
1157
|
-
const instance = this.injector.resolve(container, value,
|
|
1157
|
+
resolve<T>(container: IContainer, value: constructor<T>, options: InjectOptions): T {
|
|
1158
|
+
const instance = this.injector.resolve(container, value, options);
|
|
1158
1159
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
1159
1160
|
for (const [h] of getHooks(instance as object, 'onConstruct')) {
|
|
1160
1161
|
// @ts-ignore
|
package/cjm/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getParameterMetadata = exports.getMethodMetadata = exports.setMethodMetadata = exports.setParameterMetadata = exports.getMetadata = exports.setMetadata = exports.byAliases = exports.byAlias = exports.IMemoKey = exports.by = exports.hasHooks = exports.hook = exports.getHooks = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyNotFoundError = exports.Registration = exports.register = exports.scope = exports.key = exports.decorate = exports.multiCache = exports.MultiCache = exports.SingletonProvider = exports.singleton = exports.Provider = exports.ProviderDecorator = exports.args = exports.argsFn = exports.alias = exports.visible = exports.provider = exports.ProxyInjector = exports.SimpleInjector = exports.inject = exports.MetadataInjector = exports.AutoMockedContainer = exports.EmptyContainer = exports.Container = exports.isDependencyKey = void 0;
|
|
3
|
+
exports.getParameterMetadata = exports.getMethodMetadata = exports.setMethodMetadata = exports.setParameterMetadata = exports.getMetadata = exports.setMetadata = exports.startAutorun = exports.autorun = exports.byAliases = exports.byAlias = exports.IMemoKey = exports.by = exports.hasHooks = exports.hook = exports.getHooks = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyNotFoundError = exports.Registration = exports.register = exports.scope = exports.key = exports.decorate = exports.multiCache = exports.MultiCache = exports.SingletonProvider = exports.singleton = exports.Provider = exports.ProviderDecorator = exports.args = exports.argsFn = exports.alias = exports.visible = exports.provider = exports.ProxyInjector = exports.SimpleInjector = exports.inject = exports.MetadataInjector = exports.AutoMockedContainer = exports.EmptyContainer = exports.Container = exports.isDependencyKey = void 0;
|
|
4
4
|
// Containers
|
|
5
5
|
var IContainer_1 = require("./container/IContainer");
|
|
6
6
|
Object.defineProperty(exports, "isDependencyKey", { enumerable: true, get: function () { return IContainer_1.isDependencyKey; } });
|
|
@@ -59,6 +59,9 @@ Object.defineProperty(exports, "by", { enumerable: true, get: function () { retu
|
|
|
59
59
|
Object.defineProperty(exports, "IMemoKey", { enumerable: true, get: function () { return by_1.IMemoKey; } });
|
|
60
60
|
Object.defineProperty(exports, "byAlias", { enumerable: true, get: function () { return by_1.byAlias; } });
|
|
61
61
|
Object.defineProperty(exports, "byAliases", { enumerable: true, get: function () { return by_1.byAliases; } });
|
|
62
|
+
var autorun_1 = require("./utils/autorun");
|
|
63
|
+
Object.defineProperty(exports, "autorun", { enumerable: true, get: function () { return autorun_1.autorun; } });
|
|
64
|
+
Object.defineProperty(exports, "startAutorun", { enumerable: true, get: function () { return autorun_1.startAutorun; } });
|
|
62
65
|
var metadata_1 = require("./metadata");
|
|
63
66
|
Object.defineProperty(exports, "setMetadata", { enumerable: true, get: function () { return metadata_1.setMetadata; } });
|
|
64
67
|
Object.defineProperty(exports, "getMetadata", { enumerable: true, get: function () { return metadata_1.getMetadata; } });
|
|
@@ -34,6 +34,10 @@ class Registration {
|
|
|
34
34
|
this.mappers.push(...mappers);
|
|
35
35
|
return this;
|
|
36
36
|
}
|
|
37
|
+
when(isValidWhen) {
|
|
38
|
+
this.matchScope = isValidWhen;
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
37
41
|
applyTo(container) {
|
|
38
42
|
if (!this.matchScope(container)) {
|
|
39
43
|
return;
|
|
@@ -43,9 +47,5 @@ class Registration {
|
|
|
43
47
|
}
|
|
44
48
|
container.register(this.key, this.createProvider().pipe(...this.mappers));
|
|
45
49
|
}
|
|
46
|
-
when(isValidWhen) {
|
|
47
|
-
this.matchScope = isValidWhen;
|
|
48
|
-
return this;
|
|
49
|
-
}
|
|
50
50
|
}
|
|
51
51
|
exports.Registration = Registration;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.startAutorun = exports.getAutorunHooks = exports.autorun = void 0;
|
|
4
|
+
const METADATA_KEY = 'autorun';
|
|
5
|
+
const createStore = () => new Map();
|
|
6
|
+
const autorun = (execute) => (target, propertyKey) => {
|
|
7
|
+
const hooks = Reflect.hasMetadata(METADATA_KEY, target.constructor)
|
|
8
|
+
? Reflect.getMetadata(METADATA_KEY, target.constructor)
|
|
9
|
+
: createStore();
|
|
10
|
+
hooks.set(propertyKey, execute);
|
|
11
|
+
Reflect.defineMetadata(METADATA_KEY, hooks, target.constructor);
|
|
12
|
+
};
|
|
13
|
+
exports.autorun = autorun;
|
|
14
|
+
const getAutorunHooks = (target) => {
|
|
15
|
+
return Reflect.hasMetadata(METADATA_KEY, target.constructor)
|
|
16
|
+
? Reflect.getMetadata(METADATA_KEY, target.constructor)
|
|
17
|
+
: new Map();
|
|
18
|
+
};
|
|
19
|
+
exports.getAutorunHooks = getAutorunHooks;
|
|
20
|
+
const startAutorun = (target, createContext = (c) => c) => {
|
|
21
|
+
for (const [methodName, execute] of (0, exports.getAutorunHooks)(target)) {
|
|
22
|
+
execute(createContext({ instance: target, methodName }));
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
exports.startAutorun = startAutorun;
|
package/esm/index.js
CHANGED
|
@@ -22,4 +22,5 @@ export { ContainerDisposedError } from './errors/ContainerDisposedError';
|
|
|
22
22
|
// Others
|
|
23
23
|
export { getHooks, hook, hasHooks } from './hook';
|
|
24
24
|
export { by, IMemoKey, byAlias, byAliases } from './by';
|
|
25
|
+
export { autorun, startAutorun } from './utils/autorun';
|
|
25
26
|
export { setMetadata, getMetadata, setParameterMetadata, setMethodMetadata, getMethodMetadata, getParameterMetadata, } from './metadata';
|
|
@@ -31,6 +31,10 @@ export class Registration {
|
|
|
31
31
|
this.mappers.push(...mappers);
|
|
32
32
|
return this;
|
|
33
33
|
}
|
|
34
|
+
when(isValidWhen) {
|
|
35
|
+
this.matchScope = isValidWhen;
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
34
38
|
applyTo(container) {
|
|
35
39
|
if (!this.matchScope(container)) {
|
|
36
40
|
return;
|
|
@@ -40,8 +44,4 @@ export class Registration {
|
|
|
40
44
|
}
|
|
41
45
|
container.register(this.key, this.createProvider().pipe(...this.mappers));
|
|
42
46
|
}
|
|
43
|
-
when(isValidWhen) {
|
|
44
|
-
this.matchScope = isValidWhen;
|
|
45
|
-
return this;
|
|
46
|
-
}
|
|
47
47
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const METADATA_KEY = 'autorun';
|
|
2
|
+
const createStore = () => new Map();
|
|
3
|
+
export const autorun = (execute) => (target, propertyKey) => {
|
|
4
|
+
const hooks = Reflect.hasMetadata(METADATA_KEY, target.constructor)
|
|
5
|
+
? Reflect.getMetadata(METADATA_KEY, target.constructor)
|
|
6
|
+
: createStore();
|
|
7
|
+
hooks.set(propertyKey, execute);
|
|
8
|
+
Reflect.defineMetadata(METADATA_KEY, hooks, target.constructor);
|
|
9
|
+
};
|
|
10
|
+
export const getAutorunHooks = (target) => {
|
|
11
|
+
return Reflect.hasMetadata(METADATA_KEY, target.constructor)
|
|
12
|
+
? Reflect.getMetadata(METADATA_KEY, target.constructor)
|
|
13
|
+
: new Map();
|
|
14
|
+
};
|
|
15
|
+
export const startAutorun = (target, createContext = (c) => c) => {
|
|
16
|
+
for (const [methodName, execute] of getAutorunHooks(target)) {
|
|
17
|
+
execute(createContext({ instance: target, methodName }));
|
|
18
|
+
}
|
|
19
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-ioc-container",
|
|
3
|
-
"version": "32.0.
|
|
3
|
+
"version": "32.0.7",
|
|
4
4
|
"description": "Typescript IoC container",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public",
|
|
@@ -44,20 +44,20 @@
|
|
|
44
44
|
"generate:docs": "ts-node scripts/generateReadme/generateReadme.ts && git add README.md",
|
|
45
45
|
"build": "npm run build:cjm && npm run build:esm && npm run build:types",
|
|
46
46
|
"coverage": "coveralls",
|
|
47
|
-
"
|
|
48
|
-
"
|
|
47
|
+
"test": "jest --coverage",
|
|
48
|
+
"type-check": "tsc --noEmit",
|
|
49
|
+
"type-check:watch": "tsc --noEmit --watch"
|
|
49
50
|
},
|
|
50
51
|
"devDependencies": {
|
|
51
52
|
"@types/jest": "27.0.2",
|
|
52
53
|
"handlebars": "^4.7.7",
|
|
53
54
|
"jest": "27.2.3",
|
|
54
55
|
"moq.ts": "^7.3.4",
|
|
55
|
-
"nodemon": "^2.0.13",
|
|
56
56
|
"reflect-metadata": "^0.2.2",
|
|
57
57
|
"rimraf": "3.0.2",
|
|
58
58
|
"ts-jest": "27.0.5",
|
|
59
59
|
"ts-node": "^10.9.1",
|
|
60
60
|
"typescript": "5.4.3"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "b8a57d6ba85affdbb5e743ac4653dbc6e65b3bc4"
|
|
63
63
|
}
|
package/typings/index.d.ts
CHANGED
|
@@ -20,4 +20,5 @@ export { ContainerDisposedError } from './errors/ContainerDisposedError';
|
|
|
20
20
|
export { getHooks, hook, hasHooks } from './hook';
|
|
21
21
|
export { by, InstancePredicate, IMemo, IMemoKey, byAlias, byAliases } from './by';
|
|
22
22
|
export { constructor } from './utils';
|
|
23
|
+
export { autorun, startAutorun } from './utils/autorun';
|
|
23
24
|
export { setMetadata, getMetadata, setParameterMetadata, setMethodMetadata, getMethodMetadata, getParameterMetadata, } from './metadata';
|
|
@@ -13,6 +13,6 @@ export declare class Registration<T = unknown> implements IRegistration<T> {
|
|
|
13
13
|
constructor(createProvider: () => IProvider<T>, key?: DependencyKey | undefined, matchScope?: ScopePredicate);
|
|
14
14
|
to(key: DependencyKey): this;
|
|
15
15
|
pipe(...mappers: MapFn<IProvider<T>>[]): this;
|
|
16
|
-
applyTo(container: IContainer): void;
|
|
17
16
|
when(isValidWhen: ScopePredicate): this;
|
|
17
|
+
applyTo(container: IContainer): void;
|
|
18
18
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface AutorunContext {
|
|
2
|
+
instance: object;
|
|
3
|
+
methodName: string;
|
|
4
|
+
}
|
|
5
|
+
type AutorunHandler = <T extends AutorunContext>(context: T) => void;
|
|
6
|
+
export declare const autorun: (execute: AutorunHandler) => MethodDecorator;
|
|
7
|
+
export declare const getAutorunHooks: (target: object) => Map<string, AutorunHandler>;
|
|
8
|
+
export declare const startAutorun: <Context extends AutorunContext>(target: object, createContext?: (props: {
|
|
9
|
+
instance: object;
|
|
10
|
+
methodName: string;
|
|
11
|
+
}) => Context) => void;
|
|
12
|
+
export {};
|