ts-ioc-container 37.0.3 → 37.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.
@@ -47,7 +47,7 @@ class Container {
47
47
  this.scopes.add(scope);
48
48
  return scope;
49
49
  }
50
- dispose() {
50
+ dispose({ cascade = true } = {}) {
51
51
  this.validateContainer();
52
52
  this.isDisposed = true;
53
53
  // Detach from parent
@@ -58,9 +58,11 @@ class Container {
58
58
  this.instances.clear();
59
59
  this.registrations.clear();
60
60
  this.onDispose(this);
61
- // Dispose all scopes
62
- for (const scope of this.scopes) {
63
- scope.dispose();
61
+ if (cascade) {
62
+ // Dispose all scopes
63
+ for (const scope of this.scopes) {
64
+ scope.dispose({ cascade });
65
+ }
64
66
  }
65
67
  }
66
68
  use(module) {
package/cjm/index.js CHANGED
@@ -80,8 +80,8 @@ Object.defineProperty(exports, "setParameterMetadata", { enumerable: true, get:
80
80
  Object.defineProperty(exports, "setMethodMetadata", { enumerable: true, get: function () { return metadata_1.setMethodMetadata; } });
81
81
  Object.defineProperty(exports, "getMethodMetadata", { enumerable: true, get: function () { return metadata_1.getMethodMetadata; } });
82
82
  Object.defineProperty(exports, "getParameterMetadata", { enumerable: true, get: function () { return metadata_1.getParameterMetadata; } });
83
- var isDepKey_1 = require("./isDepKey");
84
- Object.defineProperty(exports, "depKey", { enumerable: true, get: function () { return isDepKey_1.depKey; } });
83
+ var DepKey_1 = require("./DepKey");
84
+ Object.defineProperty(exports, "depKey", { enumerable: true, get: function () { return DepKey_1.depKey; } });
85
85
  var Cache_1 = require("./provider/Cache");
86
86
  Object.defineProperty(exports, "multiCache", { enumerable: true, get: function () { return Cache_1.multiCache; } });
87
87
  var Cache_2 = require("./provider/Cache");
@@ -4,9 +4,9 @@ exports.resolveArgs = exports.inject = void 0;
4
4
  const metadata_1 = require("../metadata");
5
5
  const utils_1 = require("../utils");
6
6
  const HookContext_1 = require("../hooks/HookContext");
7
- const isDepKey_1 = require("../isDepKey");
7
+ const DepKey_1 = require("../DepKey");
8
8
  const inject = (fn) => (target, propertyKey, parameterIndex) => {
9
- (0, metadata_1.setParameterMetadata)((0, HookContext_1.hookMetaKey)(propertyKey), (0, isDepKey_1.isDepKey)(fn) ? fn.resolve : fn)((0, utils_1.isInstance)(target) ? target.constructor : target, propertyKey, parameterIndex);
9
+ (0, metadata_1.setParameterMetadata)((0, HookContext_1.hookMetaKey)(propertyKey), (0, DepKey_1.isDepKey)(fn) ? fn.resolve : fn)((0, utils_1.isInstance)(target) ? target.constructor : target, propertyKey, parameterIndex);
10
10
  };
11
11
  exports.inject = inject;
12
12
  const resolveArgs = (Target, methodName) => {
@@ -24,12 +24,6 @@ class ProviderDecorator {
24
24
  constructor(decorated) {
25
25
  this.decorated = decorated;
26
26
  }
27
- get key() {
28
- return this.decorated.key;
29
- }
30
- set key(value) {
31
- this.decorated.key = value;
32
- }
33
27
  setVisibility(predicate) {
34
28
  this.decorated.setVisibility(predicate);
35
29
  return this;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.register = exports.getTransformers = exports.scope = exports.redirectFrom = exports.key = void 0;
4
4
  const IContainer_1 = require("../container/IContainer");
5
5
  const metadata_1 = require("../metadata");
6
- const isDepKey_1 = require("../isDepKey");
6
+ const DepKey_1 = require("../DepKey");
7
7
  const key = (...keys) => (r) => {
8
8
  const [originalKey, ...redirectKeys] = keys;
9
9
  return r.fromKey(originalKey).redirectFrom(...redirectKeys);
@@ -17,7 +17,7 @@ const METADATA_KEY = 'registration';
17
17
  const getTransformers = (Target) => (0, metadata_1.getMetadata)(Target, METADATA_KEY) ?? [];
18
18
  exports.getTransformers = getTransformers;
19
19
  const register = (...mappers) => (0, metadata_1.setMetadata)(METADATA_KEY, mappers.map((m, index) => {
20
- if ((0, isDepKey_1.isDepKey)(m)) {
20
+ if ((0, DepKey_1.isDepKey)(m)) {
21
21
  return index === 0 ? m.assignTo.bind(m) : m.redirectFrom.bind(m);
22
22
  }
23
23
  if ((0, IContainer_1.isDependencyKey)(m)) {
@@ -63,7 +63,7 @@ class Registration {
63
63
  throw new DependencyMissingKeyError_1.DependencyMissingKeyError('No key provided for registration');
64
64
  }
65
65
  const key = this.key;
66
- container.register(key, this.createProvider(key).pipe(...this.mappers));
66
+ container.register(key, this.createProvider().pipe(...this.mappers));
67
67
  for (const redirectKey of this.redirectKeys) {
68
68
  container.register(redirectKey, new Provider_1.Provider((s) => s.resolve(key)));
69
69
  }
@@ -44,7 +44,7 @@ export class Container {
44
44
  this.scopes.add(scope);
45
45
  return scope;
46
46
  }
47
- dispose() {
47
+ dispose({ cascade = true } = {}) {
48
48
  this.validateContainer();
49
49
  this.isDisposed = true;
50
50
  // Detach from parent
@@ -55,9 +55,11 @@ export class Container {
55
55
  this.instances.clear();
56
56
  this.registrations.clear();
57
57
  this.onDispose(this);
58
- // Dispose all scopes
59
- for (const scope of this.scopes) {
60
- scope.dispose();
58
+ if (cascade) {
59
+ // Dispose all scopes
60
+ for (const scope of this.scopes) {
61
+ scope.dispose({ cascade });
62
+ }
61
63
  }
62
64
  }
63
65
  use(module) {
package/esm/index.js CHANGED
@@ -27,6 +27,6 @@ export { HookContext } from './hooks/HookContext';
27
27
  // Others
28
28
  export { by, IMemoKey, byAlias, byAliases } from './by';
29
29
  export { setMetadata, getMetadata, setParameterMetadata, setMethodMetadata, getMethodMetadata, getParameterMetadata, } from './metadata';
30
- export { depKey } from './isDepKey';
30
+ export { depKey } from './DepKey';
31
31
  export { multiCache } from './provider/Cache';
32
32
  export { MultiCache } from './provider/Cache';
@@ -1,7 +1,7 @@
1
1
  import { getParameterMetadata, setParameterMetadata } from '../metadata';
2
2
  import { constant, fillEmptyIndexes, isInstance } from '../utils';
3
3
  import { hookMetaKey } from '../hooks/HookContext';
4
- import { isDepKey } from '../isDepKey';
4
+ import { isDepKey } from '../DepKey';
5
5
  export const inject = (fn) => (target, propertyKey, parameterIndex) => {
6
6
  setParameterMetadata(hookMetaKey(propertyKey), isDepKey(fn) ? fn.resolve : fn)(isInstance(target) ? target.constructor : target, propertyKey, parameterIndex);
7
7
  };
@@ -15,12 +15,6 @@ export class ProviderDecorator {
15
15
  constructor(decorated) {
16
16
  this.decorated = decorated;
17
17
  }
18
- get key() {
19
- return this.decorated.key;
20
- }
21
- set key(value) {
22
- this.decorated.key = value;
23
- }
24
18
  setVisibility(predicate) {
25
19
  this.decorated.setVisibility(predicate);
26
20
  return this;
@@ -1,6 +1,6 @@
1
1
  import { isDependencyKey } from '../container/IContainer';
2
2
  import { getMetadata, setMetadata } from '../metadata';
3
- import { isDepKey } from '../isDepKey';
3
+ import { isDepKey } from '../DepKey';
4
4
  export const key = (...keys) => (r) => {
5
5
  const [originalKey, ...redirectKeys] = keys;
6
6
  return r.fromKey(originalKey).redirectFrom(...redirectKeys);
@@ -60,7 +60,7 @@ export class Registration {
60
60
  throw new DependencyMissingKeyError('No key provided for registration');
61
61
  }
62
62
  const key = this.key;
63
- container.register(key, this.createProvider(key).pipe(...this.mappers));
63
+ container.register(key, this.createProvider().pipe(...this.mappers));
64
64
  for (const redirectKey of this.redirectKeys) {
65
65
  container.register(redirectKey, new Provider((s) => s.resolve(key)));
66
66
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-ioc-container",
3
- "version": "37.0.3",
3
+ "version": "37.1.0",
4
4
  "description": "Typescript IoC container",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -23,7 +23,9 @@ export declare class Container implements IContainer {
23
23
  register(key: DependencyKey, provider: IProvider): this;
24
24
  resolve<T>(token: InjectionToken<T>, { args, child, lazy }?: ResolveOptions): T;
25
25
  createScope({ tags }?: CreateScopeOptions): IContainer;
26
- dispose(): void;
26
+ dispose({ cascade }?: {
27
+ cascade?: boolean;
28
+ }): void;
27
29
  use(module: IContainerModule): this;
28
30
  hasProvider(key: DependencyKey): boolean;
29
31
  resolveManyByAlias(predicate: AliasPredicate, { args, child, lazy }?: ResolveOptions, result?: Map<DependencyKey, unknown>): Map<DependencyKey, unknown>;
@@ -35,7 +35,9 @@ export interface IContainer extends Resolvable, Tagged {
35
35
  register(key: DependencyKey, value: IProvider): this;
36
36
  add(registration: IRegistration): this;
37
37
  removeScope(child: IContainer): void;
38
- dispose(): void;
38
+ dispose(options?: {
39
+ cascade?: boolean;
40
+ }): void;
39
41
  use(module: IContainerModule): this;
40
42
  getRegistrations(): IRegistration[];
41
43
  hasProvider(key: DependencyKey): boolean;
@@ -23,7 +23,6 @@ export { HookContext, InjectFn, IHookContext } from './hooks/HookContext';
23
23
  export { by, InstancePredicate, IMemo, IMemoKey, byAlias, byAliases } from './by';
24
24
  export { constructor, Branded } from './utils';
25
25
  export { setMetadata, getMetadata, setParameterMetadata, setMethodMetadata, getMethodMetadata, getParameterMetadata, } from './metadata';
26
- export { depKey } from './isDepKey';
27
- export { DepKey } from './isDepKey';
26
+ export { depKey, DepKey } from './DepKey';
28
27
  export { multiCache } from './provider/Cache';
29
28
  export { MultiCache } from './provider/Cache';
@@ -1,6 +1,6 @@
1
1
  import { constructor } from '../utils';
2
2
  import { IContainer } from '../container/IContainer';
3
3
  import { InjectFn } from '../hooks/HookContext';
4
- import { DepKey } from '../isDepKey';
4
+ import { DepKey } from '../DepKey';
5
5
  export declare const inject: <T>(fn: InjectFn | DepKey<T>) => ParameterDecorator;
6
6
  export declare const resolveArgs: (Target: constructor<unknown>, methodName?: string) => (scope: IContainer, ...deps: unknown[]) => unknown[];
@@ -1,4 +1,4 @@
1
- import { Alias, AliasPredicate, DependencyKey, IContainer, Tagged } from '../container/IContainer';
1
+ import { Alias, AliasPredicate, IContainer, Tagged } from '../container/IContainer';
2
2
  import { constructor, MapFn } from '../utils';
3
3
  export type ProviderResolveOptions = {
4
4
  args: unknown[];
@@ -13,7 +13,6 @@ export type ArgsFn = (l: IContainer, ...args: unknown[]) => unknown[];
13
13
  export declare function args<T = unknown>(...extraArgs: unknown[]): MapFn<IProvider<T>>;
14
14
  export declare function argsFn<T = unknown>(fn: ArgsFn): MapFn<IProvider<T>>;
15
15
  export interface IProvider<T = any> {
16
- key?: DependencyKey;
17
16
  resolve(container: IContainer, options: ProviderResolveOptions): T;
18
17
  isVisible(parent: Tagged, child: Tagged): boolean;
19
18
  pipe(...mappers: MapFn<IProvider<T>>[]): IProvider<T>;
@@ -29,8 +28,6 @@ export declare const visible: (isVisibleWhen: ChildrenVisibilityPredicate) => Ma
29
28
  export declare abstract class ProviderDecorator<T> implements IProvider<T> {
30
29
  private decorated;
31
30
  protected constructor(decorated: IProvider<T>);
32
- get key(): DependencyKey | undefined;
33
- set key(value: DependencyKey | undefined);
34
31
  setVisibility(predicate: ChildrenVisibilityPredicate): this;
35
32
  isVisible(parent: IContainer, child: Tagged): boolean;
36
33
  resolve(container: IContainer, options: ProviderResolveOptions): T;
@@ -6,7 +6,6 @@ export declare class Provider<T = any> implements IProvider<T> {
6
6
  static fromClass<T>(Target: constructor<T>): IProvider<T>;
7
7
  static fromValue<T>(value: T): IProvider<T>;
8
8
  static fromKey<T>(key: DependencyKey): Provider<T>;
9
- key?: DependencyKey;
10
9
  private readonly aliases;
11
10
  private argsFn;
12
11
  private isVisibleWhen;
@@ -1,7 +1,7 @@
1
1
  import { DependencyKey, IContainer, IContainerModule } from '../container/IContainer';
2
2
  import { constructor, MapFn } from '../utils';
3
3
  import { IProvider } from '../provider/IProvider';
4
- import { DepKey } from '../isDepKey';
4
+ import { DepKey } from '../DepKey';
5
5
  export type ScopePredicate = (s: IContainer, prev?: boolean) => boolean;
6
6
  export interface IRegistration<T = any> extends IContainerModule {
7
7
  when(...predicates: ScopePredicate[]): this;
@@ -12,7 +12,7 @@ export declare class Registration<T = any> implements IRegistration<T> {
12
12
  static toFn<T>(fn: ResolveDependency<T>): Registration<T>;
13
13
  static toKey<T>(key: DependencyKey): Registration<T>;
14
14
  private mappers;
15
- constructor(createProvider: (key: DependencyKey) => IProvider<T>, key?: DependencyKey | undefined, scopePredicates?: ScopePredicate[]);
15
+ constructor(createProvider: () => IProvider<T>, key?: DependencyKey | undefined, scopePredicates?: ScopePredicate[]);
16
16
  fromKey(key: DependencyKey): this;
17
17
  redirectFrom(...keys: DependencyKey[]): this;
18
18
  pipe(...mappers: MapFn<IProvider<T>>[]): this;
File without changes
File without changes
File without changes