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 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.parseTagsPath = exports.serializeTagsPath = exports.isConstructor = exports.isDependencyKey = void 0;
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.16.0",
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": "35d35987c4c2a08c30a650e4e973083d0019dc51"
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 {
@@ -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>>[];
@@ -10,3 +10,4 @@ export interface InstanceOfClass<T = unknown> {
10
10
  new (...args: unknown[]): T;
11
11
  }
12
12
  export declare function isInstance(target: object): target is InstanceOfClass<unknown>;
13
+ export declare const generateUUID: () => string;