ts-ioc-container 32.0.5 → 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 CHANGED
@@ -25,17 +25,17 @@
25
25
  - [Scope](#scope) `tags`
26
26
  - [Instances](#instances)
27
27
  - [Dispose](#dispose)
28
- - [Lazy](#lazy)
28
+ - [Lazy](#lazy) `lazy`
29
29
  - [Injector](#injector)
30
30
  - [Metadata](#metadata) `@inject`
31
31
  - [Simple](#simple)
32
32
  - [Proxy](#proxy)
33
33
  - [Provider](#provider) `@provider`
34
34
  - [Singleton](#singleton) `singleton`
35
- - [Arguments](#arguments) `args`
35
+ - [Arguments](#arguments) `args` `argsFn`
36
36
  - [Visibility](#visibility) `visible`
37
37
  - [Alias](#alias) `alias`
38
- - [Decorator](#decorator)
38
+ - [Decorator](#decorator) `decorate`
39
39
  - [Registration](#registration) `@register`
40
40
  - [Key](#key) `key`
41
41
  - [Scope](#scope) `scope`
@@ -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>, ...deps: unknown[]): T {
1157
- const instance = this.injector.resolve(container, value, ...deps);
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.5",
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
- "watch": "nodemon --watch ./lib --exec npm run build",
48
- "test": "jest --coverage"
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": "28d8b339e45225487d5d1f1479bb216c6e299ac5"
62
+ "gitHead": "b8a57d6ba85affdbb5e743ac4653dbc6e65b3bc4"
63
63
  }
@@ -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 {};