ts-ioc-container 47.0.2 → 47.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/hooks/HookContext.js +1 -3
- package/cjm/hooks/HookContextBuilder.js +25 -0
- package/cjm/hooks/HooksRunner.js +7 -5
- package/cjm/index.js +3 -1
- package/esm/hooks/HookContext.js +0 -1
- package/esm/hooks/HookContextBuilder.js +21 -0
- package/esm/hooks/HooksRunner.js +7 -5
- package/esm/index.js +1 -0
- package/package.json +1 -1
- package/typings/hooks/HookContext.d.ts +0 -2
- package/typings/hooks/HookContextBuilder.d.ts +19 -0
- package/typings/hooks/HooksRunner.d.ts +4 -8
- package/typings/index.d.ts +1 -0
package/cjm/hooks/HookContext.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.HookContext = void 0;
|
|
4
4
|
const inject_1 = require("../injector/inject");
|
|
5
5
|
const proxy_1 = require("../utils/proxy");
|
|
6
6
|
class HookContext {
|
|
@@ -30,5 +30,3 @@ class HookContext {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
exports.HookContext = HookContext;
|
|
33
|
-
const createHookContext = (Target, scope, methodName = 'constructor') => new HookContext(Target, scope, methodName);
|
|
34
|
-
exports.createHookContext = createHookContext;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DefaultHookContextBuilder = void 0;
|
|
4
|
+
const HookContext_1 = require("./HookContext");
|
|
5
|
+
class DefaultHookContextBuilder {
|
|
6
|
+
options = {};
|
|
7
|
+
initialArgs = [];
|
|
8
|
+
build(context) {
|
|
9
|
+
const target = context.target ?? this.options.target;
|
|
10
|
+
const scope = context.scope ?? this.options.scope;
|
|
11
|
+
const methodName = context.methodName ?? context.methodName;
|
|
12
|
+
return new HookContext_1.HookContext(target, scope, methodName).setInitialArgs(...this.initialArgs);
|
|
13
|
+
}
|
|
14
|
+
mergeOptions(context) {
|
|
15
|
+
this.options = {
|
|
16
|
+
...this.options,
|
|
17
|
+
...context,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
appendArgs(...args) {
|
|
21
|
+
this.initialArgs.push(...args);
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.DefaultHookContextBuilder = DefaultHookContextBuilder;
|
package/cjm/hooks/HooksRunner.js
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HooksRunner = void 0;
|
|
4
|
-
const HookContext_1 = require("./HookContext");
|
|
5
4
|
const hook_1 = require("./hook");
|
|
6
5
|
const UnexpectedHookResultError_1 = require("../errors/UnexpectedHookResultError");
|
|
7
6
|
const promise_1 = require("../utils/promise");
|
|
7
|
+
const HookContextBuilder_1 = require("./HookContextBuilder");
|
|
8
8
|
class HooksRunner {
|
|
9
9
|
key;
|
|
10
10
|
constructor(key) {
|
|
11
11
|
this.key = key;
|
|
12
12
|
}
|
|
13
|
-
execute(target, { scope,
|
|
13
|
+
execute(target, { scope, contextBuilder = new HookContextBuilder_1.DefaultHookContextBuilder(), predicate = () => true }) {
|
|
14
14
|
const hooks = Array.from((0, hook_1.getHooks)(target, this.key).entries()).filter(([methodName]) => predicate(methodName));
|
|
15
|
+
contextBuilder.mergeOptions({ target, scope });
|
|
15
16
|
const runMethodHooks = (methodName, executions) => {
|
|
16
|
-
const context =
|
|
17
|
+
const context = contextBuilder.build({ methodName });
|
|
17
18
|
for (const execute of executions) {
|
|
18
19
|
const result = execute(context);
|
|
19
20
|
if (result instanceof Promise) {
|
|
@@ -25,10 +26,11 @@ class HooksRunner {
|
|
|
25
26
|
runMethodHooks(methodName, executions.map(hook_1.toHookFn));
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
|
-
async executeAsync(target, { scope,
|
|
29
|
+
async executeAsync(target, { scope, contextBuilder = new HookContextBuilder_1.DefaultHookContextBuilder(), predicate = () => true }) {
|
|
29
30
|
const hooks = Array.from((0, hook_1.getHooks)(target, this.key).entries()).filter(([methodName]) => predicate(methodName));
|
|
31
|
+
contextBuilder.mergeOptions({ target, scope });
|
|
30
32
|
const runMethodHooks = async (methodName, executions) => {
|
|
31
|
-
const context =
|
|
33
|
+
const context = contextBuilder.build({ methodName });
|
|
32
34
|
for (const execute of executions) {
|
|
33
35
|
await (0, promise_1.promisify)(execute(context));
|
|
34
36
|
}
|
package/cjm/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FunctionToken = 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.HookContext = exports.hasHooks = exports.hook = exports.getHooks = exports.UnexpectedHookResultError = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyMissingKeyError = exports.DependencyNotFoundError = exports.Registration = exports.bindTo = exports.register = exports.scope = exports.decorate = exports.MultiCache = exports.multiCache = exports.SingletonProvider = exports.singleton = exports.Provider = exports.resolveByArgs = exports.ProviderDecorator = exports.args = exports.argsFn = exports.lazy = exports.scopeAccess = exports.ProxyInjector = exports.SimpleInjector = exports.MetadataInjector = exports.Injector = exports.resolveArgs = exports.inject = exports.EmptyContainer = exports.Container = exports.isDependencyKey = void 0;
|
|
4
|
-
exports.resolveConstructor = exports.Is = exports.pipe = exports.select = 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.handleAsyncError = exports.handleError = exports.GroupInstanceToken = exports.ConstantToken = void 0;
|
|
4
|
+
exports.DefaultHookContextBuilder = exports.resolveConstructor = exports.Is = exports.pipe = exports.select = 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.handleAsyncError = exports.handleError = exports.GroupInstanceToken = exports.ConstantToken = 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; } });
|
|
@@ -128,3 +128,5 @@ Object.defineProperty(exports, "pipe", { enumerable: true, get: function () { re
|
|
|
128
128
|
var basic_1 = require("./utils/basic");
|
|
129
129
|
Object.defineProperty(exports, "Is", { enumerable: true, get: function () { return basic_1.Is; } });
|
|
130
130
|
Object.defineProperty(exports, "resolveConstructor", { enumerable: true, get: function () { return basic_1.resolveConstructor; } });
|
|
131
|
+
var HookContextBuilder_1 = require("./hooks/HookContextBuilder");
|
|
132
|
+
Object.defineProperty(exports, "DefaultHookContextBuilder", { enumerable: true, get: function () { return HookContextBuilder_1.DefaultHookContextBuilder; } });
|
package/esm/hooks/HookContext.js
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { HookContext } from './HookContext';
|
|
2
|
+
export class DefaultHookContextBuilder {
|
|
3
|
+
options = {};
|
|
4
|
+
initialArgs = [];
|
|
5
|
+
build(context) {
|
|
6
|
+
const target = context.target ?? this.options.target;
|
|
7
|
+
const scope = context.scope ?? this.options.scope;
|
|
8
|
+
const methodName = context.methodName ?? context.methodName;
|
|
9
|
+
return new HookContext(target, scope, methodName).setInitialArgs(...this.initialArgs);
|
|
10
|
+
}
|
|
11
|
+
mergeOptions(context) {
|
|
12
|
+
this.options = {
|
|
13
|
+
...this.options,
|
|
14
|
+
...context,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
appendArgs(...args) {
|
|
18
|
+
this.initialArgs.push(...args);
|
|
19
|
+
return this;
|
|
20
|
+
}
|
|
21
|
+
}
|
package/esm/hooks/HooksRunner.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import { createHookContext } from './HookContext';
|
|
2
1
|
import { getHooks, toHookFn } from './hook';
|
|
3
2
|
import { UnexpectedHookResultError } from '../errors/UnexpectedHookResultError';
|
|
4
3
|
import { promisify } from '../utils/promise';
|
|
4
|
+
import { DefaultHookContextBuilder } from './HookContextBuilder';
|
|
5
5
|
export class HooksRunner {
|
|
6
6
|
key;
|
|
7
7
|
constructor(key) {
|
|
8
8
|
this.key = key;
|
|
9
9
|
}
|
|
10
|
-
execute(target, { scope,
|
|
10
|
+
execute(target, { scope, contextBuilder = new DefaultHookContextBuilder(), predicate = () => true }) {
|
|
11
11
|
const hooks = Array.from(getHooks(target, this.key).entries()).filter(([methodName]) => predicate(methodName));
|
|
12
|
+
contextBuilder.mergeOptions({ target, scope });
|
|
12
13
|
const runMethodHooks = (methodName, executions) => {
|
|
13
|
-
const context =
|
|
14
|
+
const context = contextBuilder.build({ methodName });
|
|
14
15
|
for (const execute of executions) {
|
|
15
16
|
const result = execute(context);
|
|
16
17
|
if (result instanceof Promise) {
|
|
@@ -22,10 +23,11 @@ export class HooksRunner {
|
|
|
22
23
|
runMethodHooks(methodName, executions.map(toHookFn));
|
|
23
24
|
}
|
|
24
25
|
}
|
|
25
|
-
async executeAsync(target, { scope,
|
|
26
|
+
async executeAsync(target, { scope, contextBuilder = new DefaultHookContextBuilder(), predicate = () => true }) {
|
|
26
27
|
const hooks = Array.from(getHooks(target, this.key).entries()).filter(([methodName]) => predicate(methodName));
|
|
28
|
+
contextBuilder.mergeOptions({ target, scope });
|
|
27
29
|
const runMethodHooks = async (methodName, executions) => {
|
|
28
|
-
const context =
|
|
30
|
+
const context = contextBuilder.build({ methodName });
|
|
29
31
|
for (const execute of executions) {
|
|
30
32
|
await promisify(execute(context));
|
|
31
33
|
}
|
package/esm/index.js
CHANGED
|
@@ -48,3 +48,4 @@ export { methodMeta, getMethodMeta, methodLabel, getMethodLabels, methodTag, get
|
|
|
48
48
|
export { select } from './select';
|
|
49
49
|
export { pipe } from './utils/fp';
|
|
50
50
|
export { Is, resolveConstructor } from './utils/basic';
|
|
51
|
+
export { DefaultHookContextBuilder } from './hooks/HookContextBuilder';
|
package/package.json
CHANGED
|
@@ -24,5 +24,3 @@ export declare class HookContext implements IHookContext {
|
|
|
24
24
|
setProperty(fn: InjectionToken): void;
|
|
25
25
|
setInitialArgs(...args: unknown[]): this;
|
|
26
26
|
}
|
|
27
|
-
export type CreateHookContext = (Target: object, scope: IContainer, methodName?: string) => IHookContext;
|
|
28
|
-
export declare const createHookContext: CreateHookContext;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { IContainer } from '../container/IContainer';
|
|
2
|
+
import { IHookContext } from './HookContext';
|
|
3
|
+
export type HookContextBuilderOptions = {
|
|
4
|
+
target: object;
|
|
5
|
+
scope: IContainer;
|
|
6
|
+
methodName: string;
|
|
7
|
+
};
|
|
8
|
+
export interface IHookContextBuilder {
|
|
9
|
+
mergeOptions(context: Partial<HookContextBuilderOptions>): void;
|
|
10
|
+
build(context: Partial<HookContextBuilderOptions>): IHookContext;
|
|
11
|
+
appendArgs(...args: unknown[]): this;
|
|
12
|
+
}
|
|
13
|
+
export declare class DefaultHookContextBuilder implements IHookContextBuilder {
|
|
14
|
+
private options;
|
|
15
|
+
private initialArgs;
|
|
16
|
+
build(context: Partial<HookContextBuilderOptions>): IHookContext;
|
|
17
|
+
mergeOptions(context: Partial<HookContextBuilderOptions>): void;
|
|
18
|
+
appendArgs(...args: unknown[]): this;
|
|
19
|
+
}
|
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
import { createHookContext, type CreateHookContext } from './HookContext';
|
|
2
1
|
import type { IContainer } from '../container/IContainer';
|
|
2
|
+
import { IHookContextBuilder } from './HookContextBuilder';
|
|
3
3
|
export type HooksRunnerContext = {
|
|
4
4
|
scope: IContainer;
|
|
5
|
-
|
|
5
|
+
contextBuilder?: IHookContextBuilder;
|
|
6
6
|
predicate?: (methodName: string) => boolean;
|
|
7
7
|
};
|
|
8
8
|
export declare class HooksRunner {
|
|
9
9
|
private readonly key;
|
|
10
10
|
constructor(key: string | symbol);
|
|
11
|
-
execute(target: object, { scope,
|
|
12
|
-
executeAsync(target: object, { scope,
|
|
13
|
-
scope: IContainer;
|
|
14
|
-
createContext?: typeof createHookContext;
|
|
15
|
-
predicate?: (methodName: string) => boolean;
|
|
16
|
-
}): Promise<void[]>;
|
|
11
|
+
execute(target: object, { scope, contextBuilder, predicate }: HooksRunnerContext): void;
|
|
12
|
+
executeAsync(target: object, { scope, contextBuilder, predicate }: HooksRunnerContext): Promise<void[]>;
|
|
17
13
|
}
|
package/typings/index.d.ts
CHANGED
|
@@ -40,3 +40,4 @@ export { methodMeta, getMethodMeta, methodLabel, getMethodLabels, methodTag, get
|
|
|
40
40
|
export { select } from './select';
|
|
41
41
|
export { pipe, type MapFn } from './utils/fp';
|
|
42
42
|
export { type constructor, type Instance, Is, resolveConstructor } from './utils/basic';
|
|
43
|
+
export { type IHookContextBuilder, DefaultHookContextBuilder } from './hooks/HookContextBuilder';
|