ts-ioc-container 35.2.1 → 35.2.3
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/IContainer.js +3 -3
- package/cjm/errors/UnexpectedHookResultError.js +11 -0
- package/cjm/hooks/hook.js +4 -5
- package/cjm/index.js +3 -1
- package/cjm/registration/IRegistration.js +4 -0
- package/esm/container/IContainer.js +3 -3
- package/esm/errors/UnexpectedHookResultError.js +7 -0
- package/esm/hooks/hook.js +4 -5
- package/esm/index.js +1 -0
- package/esm/registration/IRegistration.js +4 -0
- package/package.json +2 -2
- package/typings/container/IContainer.d.ts +3 -3
- package/typings/errors/UnexpectedHookResultError.d.ts +4 -0
- package/typings/index.d.ts +1 -0
- package/typings/registration/IRegistration.d.ts +1 -1
|
@@ -5,7 +5,7 @@ function isDependencyKey(token) {
|
|
|
5
5
|
return ['string', 'symbol'].includes(typeof token);
|
|
6
6
|
}
|
|
7
7
|
exports.isDependencyKey = isDependencyKey;
|
|
8
|
-
|
|
9
|
-
return typeof
|
|
10
|
-
}
|
|
8
|
+
const isConstructor = (T) => {
|
|
9
|
+
return typeof T === 'function' && !!T.prototype && !!T.prototype.constructor;
|
|
10
|
+
};
|
|
11
11
|
exports.isConstructor = isConstructor;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UnexpectedHookResultError = void 0;
|
|
4
|
+
class UnexpectedHookResultError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = 'UnexpectedHookResultError';
|
|
8
|
+
Object.setPrototypeOf(this, UnexpectedHookResultError.prototype);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.UnexpectedHookResultError = UnexpectedHookResultError;
|
package/cjm/hooks/hook.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.injectProp = exports.runHooksAsync = exports.runHooks = exports.hasHooks = exports.getHooks = exports.hook = void 0;
|
|
4
4
|
const HookContext_1 = require("./HookContext");
|
|
5
5
|
const utils_1 = require("../utils");
|
|
6
|
+
const UnexpectedHookResultError_1 = require("../errors/UnexpectedHookResultError");
|
|
6
7
|
const isHookClassConstructor = (execute) => {
|
|
7
8
|
return (0, utils_1.isConstructor)(execute) && execute.prototype.execute;
|
|
8
9
|
};
|
|
@@ -27,11 +28,9 @@ const runHooks = (target, key, { scope, createContext = HookContext_1.createHook
|
|
|
27
28
|
for (const [methodName, executions] of hooks) {
|
|
28
29
|
for (const execute of executions) {
|
|
29
30
|
const context = createContext(target, scope, methodName);
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
else {
|
|
34
|
-
execute(context);
|
|
31
|
+
const result = isHookClassConstructor(execute) ? scope.resolve(execute).execute(context) : execute(context);
|
|
32
|
+
if (result instanceof Promise) {
|
|
33
|
+
throw new UnexpectedHookResultError_1.UnexpectedHookResultError(`Hook ${methodName} returned a promise, use runHooksAsync instead`);
|
|
35
34
|
}
|
|
36
35
|
}
|
|
37
36
|
}
|
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.depKey = exports.byAliases = exports.byAlias = exports.IMemoKey = exports.by = exports.HookContext = exports.injectProp = exports.runHooksAsync = exports.runHooks = exports.hasHooks = exports.hook = exports.getHooks = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyNotFoundError = exports.Registration = exports.redirectFrom = 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.MetadataInjector = exports.resolveArgs = exports.inject = exports.AutoMockedContainer = exports.EmptyContainer = exports.Container = exports.isDependencyKey = void 0;
|
|
3
|
+
exports.getParameterMetadata = exports.getMethodMetadata = exports.setMethodMetadata = exports.setParameterMetadata = exports.getMetadata = exports.setMetadata = exports.depKey = exports.byAliases = exports.byAlias = exports.IMemoKey = exports.by = exports.HookContext = exports.injectProp = exports.runHooksAsync = exports.runHooks = exports.hasHooks = exports.hook = exports.getHooks = exports.UnexpectedHookResultError = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyNotFoundError = exports.Registration = exports.redirectFrom = 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.MetadataInjector = exports.resolveArgs = exports.inject = 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; } });
|
|
@@ -53,6 +53,8 @@ var MethodNotImplementedError_1 = require("./errors/MethodNotImplementedError");
|
|
|
53
53
|
Object.defineProperty(exports, "MethodNotImplementedError", { enumerable: true, get: function () { return MethodNotImplementedError_1.MethodNotImplementedError; } });
|
|
54
54
|
var ContainerDisposedError_1 = require("./errors/ContainerDisposedError");
|
|
55
55
|
Object.defineProperty(exports, "ContainerDisposedError", { enumerable: true, get: function () { return ContainerDisposedError_1.ContainerDisposedError; } });
|
|
56
|
+
var UnexpectedHookResultError_1 = require("./errors/UnexpectedHookResultError");
|
|
57
|
+
Object.defineProperty(exports, "UnexpectedHookResultError", { enumerable: true, get: function () { return UnexpectedHookResultError_1.UnexpectedHookResultError; } });
|
|
56
58
|
// Hooks
|
|
57
59
|
var hook_1 = require("./hooks/hook");
|
|
58
60
|
Object.defineProperty(exports, "getHooks", { enumerable: true, get: function () { return hook_1.getHooks; } });
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.register = exports.getTransformers = exports.scope = exports.redirectFrom = exports.key = void 0;
|
|
4
|
+
const IContainer_1 = require("../container/IContainer");
|
|
4
5
|
const metadata_1 = require("../metadata");
|
|
5
6
|
const by_1 = require("../by");
|
|
6
7
|
const key = (...keys) => (r) => {
|
|
@@ -19,6 +20,9 @@ const register = (...mappers) => (0, metadata_1.setMetadata)(METADATA_KEY, mappe
|
|
|
19
20
|
if ((0, by_1.isDepKey)(m)) {
|
|
20
21
|
return index === 0 ? m.register : m.redirectFrom;
|
|
21
22
|
}
|
|
23
|
+
if ((0, IContainer_1.isDependencyKey)(m)) {
|
|
24
|
+
return (r) => (index === 0 ? r.fromKey(m) : r.redirectFrom(m));
|
|
25
|
+
}
|
|
22
26
|
return m;
|
|
23
27
|
}));
|
|
24
28
|
exports.register = register;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export function isDependencyKey(token) {
|
|
2
2
|
return ['string', 'symbol'].includes(typeof token);
|
|
3
3
|
}
|
|
4
|
-
export
|
|
5
|
-
return typeof
|
|
6
|
-
}
|
|
4
|
+
export const isConstructor = (T) => {
|
|
5
|
+
return typeof T === 'function' && !!T.prototype && !!T.prototype.constructor;
|
|
6
|
+
};
|
package/esm/hooks/hook.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createHookContext } from './HookContext';
|
|
2
2
|
import { isConstructor, promisify } from '../utils';
|
|
3
|
+
import { UnexpectedHookResultError } from '../errors/UnexpectedHookResultError';
|
|
3
4
|
const isHookClassConstructor = (execute) => {
|
|
4
5
|
return isConstructor(execute) && execute.prototype.execute;
|
|
5
6
|
};
|
|
@@ -21,11 +22,9 @@ export const runHooks = (target, key, { scope, createContext = createHookContext
|
|
|
21
22
|
for (const [methodName, executions] of hooks) {
|
|
22
23
|
for (const execute of executions) {
|
|
23
24
|
const context = createContext(target, scope, methodName);
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
else {
|
|
28
|
-
execute(context);
|
|
25
|
+
const result = isHookClassConstructor(execute) ? scope.resolve(execute).execute(context) : execute(context);
|
|
26
|
+
if (result instanceof Promise) {
|
|
27
|
+
throw new UnexpectedHookResultError(`Hook ${methodName} returned a promise, use runHooksAsync instead`);
|
|
29
28
|
}
|
|
30
29
|
}
|
|
31
30
|
}
|
package/esm/index.js
CHANGED
|
@@ -21,6 +21,7 @@ export { Registration } from './registration/Registration';
|
|
|
21
21
|
export { DependencyNotFoundError } from './errors/DependencyNotFoundError';
|
|
22
22
|
export { MethodNotImplementedError } from './errors/MethodNotImplementedError';
|
|
23
23
|
export { ContainerDisposedError } from './errors/ContainerDisposedError';
|
|
24
|
+
export { UnexpectedHookResultError } from './errors/UnexpectedHookResultError';
|
|
24
25
|
// Hooks
|
|
25
26
|
export { getHooks, hook, hasHooks, runHooks, runHooksAsync, injectProp } from './hooks/hook';
|
|
26
27
|
export { HookContext } from './hooks/HookContext';
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isDependencyKey } from '../container/IContainer';
|
|
1
2
|
import { getMetadata, setMetadata } from '../metadata';
|
|
2
3
|
import { isDepKey } from '../by';
|
|
3
4
|
export const key = (...keys) => (r) => {
|
|
@@ -12,5 +13,8 @@ export const register = (...mappers) => setMetadata(METADATA_KEY, mappers.map((m
|
|
|
12
13
|
if (isDepKey(m)) {
|
|
13
14
|
return index === 0 ? m.register : m.redirectFrom;
|
|
14
15
|
}
|
|
16
|
+
if (isDependencyKey(m)) {
|
|
17
|
+
return (r) => (index === 0 ? r.fromKey(m) : r.redirectFrom(m));
|
|
18
|
+
}
|
|
15
19
|
return m;
|
|
16
20
|
}));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-ioc-container",
|
|
3
|
-
"version": "35.2.
|
|
3
|
+
"version": "35.2.3",
|
|
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": "5c2d64e52655c92bbceb219595b882cadc44b2f6"
|
|
63
63
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { IProvider } from '../provider/IProvider';
|
|
2
|
-
import { constructor } from '../utils';
|
|
2
|
+
import { constructor, MapFn } from '../utils';
|
|
3
3
|
import { IRegistration } from '../registration/IRegistration';
|
|
4
4
|
export type Tag = string;
|
|
5
5
|
export type DependencyKey = string | symbol;
|
|
6
|
-
export declare function isDependencyKey
|
|
7
|
-
export declare
|
|
6
|
+
export declare function isDependencyKey(token: constructor<any> | DependencyKey | MapFn<any>): token is DependencyKey;
|
|
7
|
+
export declare const isConstructor: <T>(T: unknown) => T is constructor<T>;
|
|
8
8
|
export type InjectionToken<T = unknown> = constructor<T> | DependencyKey;
|
|
9
9
|
export type ResolveOptions = {
|
|
10
10
|
args?: unknown[];
|
package/typings/index.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export { Registration } from './registration/Registration';
|
|
|
18
18
|
export { DependencyNotFoundError } from './errors/DependencyNotFoundError';
|
|
19
19
|
export { MethodNotImplementedError } from './errors/MethodNotImplementedError';
|
|
20
20
|
export { ContainerDisposedError } from './errors/ContainerDisposedError';
|
|
21
|
+
export { UnexpectedHookResultError } from './errors/UnexpectedHookResultError';
|
|
21
22
|
export { getHooks, hook, hasHooks, HookFn, HookClass, runHooks, runHooksAsync, injectProp } from './hooks/hook';
|
|
22
23
|
export { HookContext, InjectFn, IHookContext } from './hooks/HookContext';
|
|
23
24
|
export { by, InstancePredicate, IMemo, IMemoKey, byAlias, byAliases, depKey, DepKey } from './by';
|
|
@@ -14,4 +14,4 @@ export declare const key: (...keys: DependencyKey[]) => MapFn<IRegistration>;
|
|
|
14
14
|
export declare const redirectFrom: (...keys: DependencyKey[]) => MapFn<IRegistration>;
|
|
15
15
|
export declare const scope: (predicate: ScopePredicate) => MapFn<IRegistration>;
|
|
16
16
|
export declare const getTransformers: (Target: constructor<unknown>) => MapFn<IRegistration<any>>[];
|
|
17
|
-
export declare const register: (...mappers: (MapFn<IRegistration> | DepKey<any>)[]) => ClassDecorator;
|
|
17
|
+
export declare const register: (...mappers: (MapFn<IRegistration> | DepKey<any> | DependencyKey)[]) => ClassDecorator;
|