ts-ioc-container 32.16.0 → 32.18.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/by.js +31 -1
- package/cjm/container/IContainer.js +1 -5
- package/cjm/index.js +2 -1
- package/cjm/utils.js +9 -1
- package/esm/by.js +29 -0
- package/esm/container/IContainer.js +0 -2
- package/esm/index.js +1 -1
- package/esm/utils.js +7 -0
- package/package.json +2 -2
- package/typings/by.d.ts +10 -1
- package/typings/container/IContainer.d.ts +0 -2
- package/typings/index.d.ts +2 -2
- package/typings/registration/IRegistration.d.ts +1 -0
- package/typings/utils.d.ts +1 -0
package/cjm/by.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.by = exports.byAlias = exports.byAliases = exports.IMemoKey = exports.all = void 0;
|
|
3
|
+
exports.useRegistrationBuilder = exports.by = exports.byAlias = exports.byAliases = exports.IMemoKey = exports.all = void 0;
|
|
4
|
+
const Registration_1 = require("./registration/Registration");
|
|
5
|
+
const Provider_1 = require("./provider/Provider");
|
|
6
|
+
const utils_1 = require("./utils");
|
|
4
7
|
const all = () => true;
|
|
5
8
|
exports.all = all;
|
|
6
9
|
exports.IMemoKey = Symbol('IMemo');
|
|
@@ -45,3 +48,30 @@ exports.by = {
|
|
|
45
48
|
create: (...tags) => (l) => l.createScope(...tags),
|
|
46
49
|
},
|
|
47
50
|
};
|
|
51
|
+
const useRegistrationBuilder = (key = (0, utils_1.generateUUID)()) => {
|
|
52
|
+
let isValidWhen;
|
|
53
|
+
const mappers = [];
|
|
54
|
+
return {
|
|
55
|
+
register: (fn) => {
|
|
56
|
+
const registration = new Registration_1.Registration(() => new Provider_1.Provider(fn), key).pipe(...mappers);
|
|
57
|
+
if (isValidWhen) {
|
|
58
|
+
registration.when(isValidWhen);
|
|
59
|
+
}
|
|
60
|
+
return registration;
|
|
61
|
+
},
|
|
62
|
+
resolve: (s, ...args) => exports.by.key(key)(s, ...args),
|
|
63
|
+
pipe(...values) {
|
|
64
|
+
mappers.push(...values);
|
|
65
|
+
return this;
|
|
66
|
+
},
|
|
67
|
+
to(target) {
|
|
68
|
+
key = target;
|
|
69
|
+
return this;
|
|
70
|
+
},
|
|
71
|
+
when(value) {
|
|
72
|
+
isValidWhen = value;
|
|
73
|
+
return this;
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
exports.useRegistrationBuilder = useRegistrationBuilder;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.isConstructor = exports.isDependencyKey = void 0;
|
|
4
4
|
function isDependencyKey(token) {
|
|
5
5
|
return ['string', 'symbol'].includes(typeof token);
|
|
6
6
|
}
|
|
@@ -9,7 +9,3 @@ function isConstructor(token) {
|
|
|
9
9
|
return typeof token === 'function';
|
|
10
10
|
}
|
|
11
11
|
exports.isConstructor = isConstructor;
|
|
12
|
-
const serializeTagsPath = (path) => path.map((tags) => tags.join(',')).join('/');
|
|
13
|
-
exports.serializeTagsPath = serializeTagsPath;
|
|
14
|
-
const parseTagsPath = (path) => path.split('/').map((tags) => tags.split(','));
|
|
15
|
-
exports.parseTagsPath = parseTagsPath;
|
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.HookContext = exports.injectProp = exports.runHooksAsync = exports.runHooks = 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.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.useRegistrationBuilder = 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.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; } });
|
|
@@ -68,6 +68,7 @@ Object.defineProperty(exports, "by", { enumerable: true, get: function () { retu
|
|
|
68
68
|
Object.defineProperty(exports, "IMemoKey", { enumerable: true, get: function () { return by_1.IMemoKey; } });
|
|
69
69
|
Object.defineProperty(exports, "byAlias", { enumerable: true, get: function () { return by_1.byAlias; } });
|
|
70
70
|
Object.defineProperty(exports, "byAliases", { enumerable: true, get: function () { return by_1.byAliases; } });
|
|
71
|
+
Object.defineProperty(exports, "useRegistrationBuilder", { enumerable: true, get: function () { return by_1.useRegistrationBuilder; } });
|
|
71
72
|
var metadata_1 = require("./metadata");
|
|
72
73
|
Object.defineProperty(exports, "setMetadata", { enumerable: true, get: function () { return metadata_1.setMetadata; } });
|
|
73
74
|
Object.defineProperty(exports, "getMetadata", { enumerable: true, get: function () { return metadata_1.getMetadata; } });
|
package/cjm/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isInstance = exports.promisify = exports.lazyProxy = exports.isConstructor = exports.constant = exports.fillEmptyIndexes = exports.pipe = void 0;
|
|
3
|
+
exports.generateUUID = exports.isInstance = exports.promisify = exports.lazyProxy = exports.isConstructor = exports.constant = exports.fillEmptyIndexes = exports.pipe = void 0;
|
|
4
4
|
const pipe = (...mappers) => (value) => mappers.reduce((acc, current) => current(acc), value);
|
|
5
5
|
exports.pipe = pipe;
|
|
6
6
|
function fillEmptyIndexes(baseArr, insertArr) {
|
|
@@ -35,3 +35,11 @@ function isInstance(target) {
|
|
|
35
35
|
return Object.prototype.hasOwnProperty.call(target, 'constructor');
|
|
36
36
|
}
|
|
37
37
|
exports.isInstance = isInstance;
|
|
38
|
+
const generateUUID = () => {
|
|
39
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
|
40
|
+
const r = (Math.random() * 16) | 0;
|
|
41
|
+
const v = c === 'x' ? r : (r & 0x3) | 0x8;
|
|
42
|
+
return v.toString(16);
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
exports.generateUUID = generateUUID;
|
package/esm/by.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { Registration } from './registration/Registration';
|
|
2
|
+
import { Provider } from './provider/Provider';
|
|
3
|
+
import { generateUUID } from './utils';
|
|
1
4
|
export const all = () => true;
|
|
2
5
|
export const IMemoKey = Symbol('IMemo');
|
|
3
6
|
export const byAliases = (predicate, { memoize, lazy } = {}) => (c) => {
|
|
@@ -39,3 +42,29 @@ export const by = {
|
|
|
39
42
|
create: (...tags) => (l) => l.createScope(...tags),
|
|
40
43
|
},
|
|
41
44
|
};
|
|
45
|
+
export const useRegistrationBuilder = (key = generateUUID()) => {
|
|
46
|
+
let isValidWhen;
|
|
47
|
+
const mappers = [];
|
|
48
|
+
return {
|
|
49
|
+
register: (fn) => {
|
|
50
|
+
const registration = new Registration(() => new Provider(fn), key).pipe(...mappers);
|
|
51
|
+
if (isValidWhen) {
|
|
52
|
+
registration.when(isValidWhen);
|
|
53
|
+
}
|
|
54
|
+
return registration;
|
|
55
|
+
},
|
|
56
|
+
resolve: (s, ...args) => by.key(key)(s, ...args),
|
|
57
|
+
pipe(...values) {
|
|
58
|
+
mappers.push(...values);
|
|
59
|
+
return this;
|
|
60
|
+
},
|
|
61
|
+
to(target) {
|
|
62
|
+
key = target;
|
|
63
|
+
return this;
|
|
64
|
+
},
|
|
65
|
+
when(value) {
|
|
66
|
+
isValidWhen = value;
|
|
67
|
+
return this;
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
};
|
|
@@ -4,5 +4,3 @@ export function isDependencyKey(token) {
|
|
|
4
4
|
export function isConstructor(token) {
|
|
5
5
|
return typeof token === 'function';
|
|
6
6
|
}
|
|
7
|
-
export const serializeTagsPath = (path) => path.map((tags) => tags.join(',')).join('/');
|
|
8
|
-
export const parseTagsPath = (path) => path.split('/').map((tags) => tags.split(','));
|
package/esm/index.js
CHANGED
|
@@ -25,5 +25,5 @@ export { ContainerDisposedError } from './errors/ContainerDisposedError';
|
|
|
25
25
|
export { getHooks, hook, hasHooks, runHooks, runHooksAsync, injectProp } from './hooks/hook';
|
|
26
26
|
export { HookContext } from './hooks/HookContext';
|
|
27
27
|
// Others
|
|
28
|
-
export { by, IMemoKey, byAlias, byAliases } from './by';
|
|
28
|
+
export { by, IMemoKey, byAlias, byAliases, useRegistrationBuilder } from './by';
|
|
29
29
|
export { setMetadata, getMetadata, setParameterMetadata, setMethodMetadata, getMethodMetadata, getParameterMetadata, } from './metadata';
|
package/esm/utils.js
CHANGED
|
@@ -25,3 +25,10 @@ export const promisify = (arg) => (arg instanceof Promise ? arg : Promise.resolv
|
|
|
25
25
|
export function isInstance(target) {
|
|
26
26
|
return Object.prototype.hasOwnProperty.call(target, 'constructor');
|
|
27
27
|
}
|
|
28
|
+
export const generateUUID = () => {
|
|
29
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
|
30
|
+
const r = (Math.random() * 16) | 0;
|
|
31
|
+
const v = c === 'x' ? r : (r & 0x3) | 0x8;
|
|
32
|
+
return v.toString(16);
|
|
33
|
+
});
|
|
34
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-ioc-container",
|
|
3
|
-
"version": "32.
|
|
3
|
+
"version": "32.18.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": "c4c7829f56deebf20327698c4541940902af68d9"
|
|
63
63
|
}
|
package/typings/by.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { DependencyKey, IContainer, InjectionToken } from './container/IContainer';
|
|
2
|
-
import { ProviderResolveOptions } from './provider/IProvider';
|
|
2
|
+
import { IProvider, ProviderResolveOptions } from './provider/IProvider';
|
|
3
3
|
import { InjectFn } from './hooks/HookContext';
|
|
4
|
+
import { IRegistration, ScopePredicate } from './registration/IRegistration';
|
|
5
|
+
import { MapFn } from './utils';
|
|
4
6
|
export type InstancePredicate = (dep: unknown) => boolean;
|
|
5
7
|
export declare const all: InstancePredicate;
|
|
6
8
|
export type IMemo = Map<string, DependencyKey[]>;
|
|
@@ -24,4 +26,11 @@ export declare const by: {
|
|
|
24
26
|
create: (...tags: string[]) => (l: IContainer) => IContainer;
|
|
25
27
|
};
|
|
26
28
|
};
|
|
29
|
+
export declare const useRegistrationBuilder: <T>(key?: DependencyKey) => {
|
|
30
|
+
register: (fn: (s: IContainer, ...args: unknown[]) => T) => IRegistration<T>;
|
|
31
|
+
resolve: (s: IContainer, ...args: unknown[]) => T;
|
|
32
|
+
pipe(...values: MapFn<IProvider<T>>[]): any;
|
|
33
|
+
to(target: DependencyKey): any;
|
|
34
|
+
when(value: ScopePredicate): any;
|
|
35
|
+
};
|
|
27
36
|
export {};
|
|
@@ -24,8 +24,6 @@ export interface Tagged {
|
|
|
24
24
|
}
|
|
25
25
|
export type TagPath = Array<Tag[]>;
|
|
26
26
|
export type MatchTags = (scope: IContainer, tags: Tag[]) => boolean;
|
|
27
|
-
export declare const serializeTagsPath: (path: TagPath) => string;
|
|
28
|
-
export declare const parseTagsPath: (path: string) => TagPath;
|
|
29
27
|
export type Alias = string;
|
|
30
28
|
export type AliasPredicate = (aliases: Set<Alias>) => boolean;
|
|
31
29
|
export interface IContainer extends Resolvable, Tagged {
|
package/typings/index.d.ts
CHANGED
|
@@ -13,13 +13,13 @@ export { singleton, SingletonProvider } from './provider/singleton/SingletonProv
|
|
|
13
13
|
export { MultiCache, multiCache } from './provider/singleton/MultiCache';
|
|
14
14
|
export { Cache } from './provider/singleton/Cache';
|
|
15
15
|
export { decorate, DecorateFn } from './provider/DecoratorProvider';
|
|
16
|
-
export { key, IRegistration, scope, register } from './registration/IRegistration';
|
|
16
|
+
export { key, IRegistration, ReturnTypeOfRegistration, scope, register } from './registration/IRegistration';
|
|
17
17
|
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
21
|
export { getHooks, hook, hasHooks, Hook, runHooks, runHooksAsync, injectProp } from './hooks/hook';
|
|
22
22
|
export { HookContext, InjectFn, IHookContext } from './hooks/HookContext';
|
|
23
|
-
export { by, InstancePredicate, IMemo, IMemoKey, byAlias, byAliases } from './by';
|
|
23
|
+
export { by, InstancePredicate, IMemo, IMemoKey, byAlias, byAliases, useRegistrationBuilder } from './by';
|
|
24
24
|
export { constructor } from './utils';
|
|
25
25
|
export { setMetadata, getMetadata, setParameterMetadata, setMethodMetadata, getMethodMetadata, getParameterMetadata, } from './metadata';
|
|
@@ -7,6 +7,7 @@ export interface IRegistration<T = unknown> extends IContainerModule {
|
|
|
7
7
|
to(key: DependencyKey): this;
|
|
8
8
|
pipe(...mappers: MapFn<IProvider<T>>[]): this;
|
|
9
9
|
}
|
|
10
|
+
export type ReturnTypeOfRegistration<T> = T extends IRegistration<infer R> ? R : never;
|
|
10
11
|
export declare const key: (key: DependencyKey) => MapFn<IRegistration>;
|
|
11
12
|
export declare const scope: (predicate: ScopePredicate) => MapFn<IRegistration>;
|
|
12
13
|
export declare const getTransformers: (Target: constructor<unknown>) => MapFn<IRegistration<unknown>>[];
|
package/typings/utils.d.ts
CHANGED