ts-ioc-container 52.0.1 → 54.0.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.
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CannonSingletonApplyTwiceError = void 0;
4
+ const ContainerError_1 = require("./ContainerError");
5
+ class CannonSingletonApplyTwiceError extends ContainerError_1.ContainerError {
6
+ name = 'CannonSingletonApplyTwiceError';
7
+ constructor(message) {
8
+ super(message);
9
+ Object.setPrototypeOf(this, CannonSingletonApplyTwiceError.prototype);
10
+ }
11
+ static assert(isTrue, failMessage) {
12
+ if (!isTrue) {
13
+ throw new CannonSingletonApplyTwiceError(failMessage);
14
+ }
15
+ }
16
+ }
17
+ exports.CannonSingletonApplyTwiceError = CannonSingletonApplyTwiceError;
package/cjm/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SingleToken = exports.ClassToken = exports.toSingleAlias = exports.SingleAliasToken = exports.toGroupAlias = exports.GroupAliasToken = exports.InjectionToken = exports.HooksRunner = exports.AddOnDisposeHookModule = exports.onDispose = exports.onDisposeHooksRunner = exports.AddOnConstructHookModule = exports.onConstruct = exports.onConstructHooksRunner = exports.injectProp = exports.createHookContext = exports.createHookContextFactory = exports.HookContext = exports.hasHooks = exports.hook = exports.getHooks = exports.CannonSingletonApplyError = exports.UnexpectedHookResultError = exports.ProviderDisposedError = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyMissingKeyError = exports.DependencyNotFoundError = exports.Registration = exports.appendArgsFn = exports.appendArgs = exports.decorate = exports.singleton = exports.lazy = exports.scopeAccess = exports.scope = exports.bindTo = exports.register = exports.Provider = exports.ProxyInjector = exports.SimpleInjector = exports.resolveArgs = exports.argsFn = exports.args = exports.inject = exports.MetadataInjector = exports.Injector = exports.EmptyContainer = exports.Container = exports.isDependencyKey = void 0;
3
+ exports.SingleToken = exports.ClassToken = exports.toSingleAlias = exports.SingleAliasToken = exports.toGroupAlias = exports.GroupAliasToken = exports.InjectionToken = exports.HooksRunner = exports.AddOnDisposeHookModule = exports.onDispose = exports.onDisposeHooksRunner = exports.AddOnConstructHookModule = exports.onConstruct = exports.onConstructHooksRunner = exports.injectProp = exports.createHookContext = exports.createHookContextFactory = exports.HookContext = exports.hasHooks = exports.hook = exports.getHooks = exports.CannonSingletonApplyTwiceError = exports.UnexpectedHookResultError = exports.ProviderDisposedError = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyMissingKeyError = exports.DependencyNotFoundError = exports.Registration = exports.appendArgsFn = exports.appendArgs = exports.decorate = exports.singleton = exports.lazy = exports.scopeAccess = exports.scope = exports.bindTo = exports.register = exports.Provider = exports.ProxyInjector = exports.SimpleInjector = exports.resolveArgs = exports.argsFn = exports.args = exports.inject = exports.MetadataInjector = exports.Injector = exports.EmptyContainer = exports.Container = exports.isDependencyKey = void 0;
4
4
  exports.resolveConstructor = exports.Is = exports.pipe = exports.select = exports.once = exports.shallowCache = exports.debounce = exports.throttle = exports.handleAsyncError = exports.handleError = exports.getMethodTags = exports.methodTag = exports.getMethodLabels = exports.methodLabel = exports.getMethodMeta = exports.methodMeta = exports.getParamTags = exports.paramTag = exports.getParamLabels = exports.paramLabel = exports.getParamMeta = exports.paramMeta = exports.getClassTags = exports.classTag = exports.getClassLabels = exports.classLabel = exports.getClassMeta = exports.classMeta = exports.GroupInstanceToken = exports.ConstantToken = exports.FunctionToken = void 0;
5
5
  // Containers
6
6
  var IContainer_1 = require("./container/IContainer");
@@ -50,8 +50,8 @@ var ProviderDisposedError_1 = require("./errors/ProviderDisposedError");
50
50
  Object.defineProperty(exports, "ProviderDisposedError", { enumerable: true, get: function () { return ProviderDisposedError_1.ProviderDisposedError; } });
51
51
  var UnexpectedHookResultError_1 = require("./errors/UnexpectedHookResultError");
52
52
  Object.defineProperty(exports, "UnexpectedHookResultError", { enumerable: true, get: function () { return UnexpectedHookResultError_1.UnexpectedHookResultError; } });
53
- var CannonSingletonApplyError_1 = require("./errors/CannonSingletonApplyError");
54
- Object.defineProperty(exports, "CannonSingletonApplyError", { enumerable: true, get: function () { return CannonSingletonApplyError_1.CannonSingletonApplyError; } });
53
+ var CannonSingletonApplyTwiceError_1 = require("./errors/CannonSingletonApplyTwiceError");
54
+ Object.defineProperty(exports, "CannonSingletonApplyTwiceError", { enumerable: true, get: function () { return CannonSingletonApplyTwiceError_1.CannonSingletonApplyTwiceError; } });
55
55
  // Hooks
56
56
  var hook_1 = require("./hooks/hook");
57
57
  Object.defineProperty(exports, "getHooks", { enumerable: true, get: function () { return hook_1.getHooks; } });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Provider = void 0;
4
- const CannonSingletonApplyError_1 = require("../errors/CannonSingletonApplyError");
4
+ const CannonSingletonApplyTwiceError_1 = require("../errors/CannonSingletonApplyTwiceError");
5
5
  const ProviderDisposedError_1 = require("../errors/ProviderDisposedError");
6
6
  class Provider {
7
7
  resolveDependency;
@@ -63,13 +63,12 @@ class Provider {
63
63
  return this.accessRules.reduce((acc, rule) => rule(options, acc), true);
64
64
  }
65
65
  singleton(getCacheKey = () => '1') {
66
- if (this.getKey) {
67
- throw new CannonSingletonApplyError_1.CannonSingletonApplyError('Provider is already singleton');
68
- }
66
+ CannonSingletonApplyTwiceError_1.CannonSingletonApplyTwiceError.assert(!this.getKey, 'Provider is already singleton');
69
67
  this.getKey = getCacheKey;
70
68
  return this;
71
69
  }
72
70
  dispose() {
71
+ ProviderDisposedError_1.ProviderDisposedError.assert(!this.isDisposed, 'Provider is already disposed');
73
72
  this.isDisposed = true;
74
73
  this.getKey = undefined;
75
74
  this.cache.clear();
package/cjm/utils/once.js CHANGED
@@ -1,11 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.once = void 0;
4
- const once = (target, propertyKey, descriptor) => {
4
+ const once = ({ onRepeat } = {}) => (target, propertyKey, descriptor) => {
5
5
  const originalMethod = descriptor.value;
6
6
  const cacheMap = new WeakMap();
7
+ let index = 0;
7
8
  descriptor.value = function (...args) {
9
+ index++;
8
10
  if (cacheMap.has(this)) {
11
+ onRepeat?.({ index: index - 1, args });
9
12
  return cacheMap.get(this);
10
13
  }
11
14
  const result = originalMethod.apply(this, args);
@@ -0,0 +1,13 @@
1
+ import { ContainerError } from './ContainerError';
2
+ export class CannonSingletonApplyTwiceError extends ContainerError {
3
+ name = 'CannonSingletonApplyTwiceError';
4
+ constructor(message) {
5
+ super(message);
6
+ Object.setPrototypeOf(this, CannonSingletonApplyTwiceError.prototype);
7
+ }
8
+ static assert(isTrue, failMessage) {
9
+ if (!isTrue) {
10
+ throw new CannonSingletonApplyTwiceError(failMessage);
11
+ }
12
+ }
13
+ }
package/esm/index.js CHANGED
@@ -18,7 +18,7 @@ export { MethodNotImplementedError } from './errors/MethodNotImplementedError';
18
18
  export { ContainerDisposedError } from './errors/ContainerDisposedError';
19
19
  export { ProviderDisposedError } from './errors/ProviderDisposedError';
20
20
  export { UnexpectedHookResultError } from './errors/UnexpectedHookResultError';
21
- export { CannonSingletonApplyError } from './errors/CannonSingletonApplyError';
21
+ export { CannonSingletonApplyTwiceError } from './errors/CannonSingletonApplyTwiceError';
22
22
  // Hooks
23
23
  export { getHooks, hook, hasHooks } from './hooks/hook';
24
24
  export { HookContext, createHookContextFactory, createHookContext } from './hooks/HookContext';
@@ -1,4 +1,4 @@
1
- import { CannonSingletonApplyError } from '../errors/CannonSingletonApplyError';
1
+ import { CannonSingletonApplyTwiceError } from '../errors/CannonSingletonApplyTwiceError';
2
2
  import { ProviderDisposedError } from '../errors/ProviderDisposedError';
3
3
  export class Provider {
4
4
  resolveDependency;
@@ -60,13 +60,12 @@ export class Provider {
60
60
  return this.accessRules.reduce((acc, rule) => rule(options, acc), true);
61
61
  }
62
62
  singleton(getCacheKey = () => '1') {
63
- if (this.getKey) {
64
- throw new CannonSingletonApplyError('Provider is already singleton');
65
- }
63
+ CannonSingletonApplyTwiceError.assert(!this.getKey, 'Provider is already singleton');
66
64
  this.getKey = getCacheKey;
67
65
  return this;
68
66
  }
69
67
  dispose() {
68
+ ProviderDisposedError.assert(!this.isDisposed, 'Provider is already disposed');
70
69
  this.isDisposed = true;
71
70
  this.getKey = undefined;
72
71
  this.cache.clear();
package/esm/utils/once.js CHANGED
@@ -1,8 +1,11 @@
1
- export const once = (target, propertyKey, descriptor) => {
1
+ export const once = ({ onRepeat } = {}) => (target, propertyKey, descriptor) => {
2
2
  const originalMethod = descriptor.value;
3
3
  const cacheMap = new WeakMap();
4
+ let index = 0;
4
5
  descriptor.value = function (...args) {
6
+ index++;
5
7
  if (cacheMap.has(this)) {
8
+ onRepeat?.({ index: index - 1, args });
6
9
  return cacheMap.get(this);
7
10
  }
8
11
  const result = originalMethod.apply(this, args);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-ioc-container",
3
- "version": "52.0.1",
3
+ "version": "54.0.0",
4
4
  "description": "Fast, lightweight TypeScript dependency injection container with a clean API, scoped lifecycles, decorators, tokens, hooks, lazy injection, customizable providers, and no global container objects.",
5
5
  "workspaces": [
6
6
  "docs"
@@ -0,0 +1,6 @@
1
+ import { ContainerError } from './ContainerError';
2
+ export declare class CannonSingletonApplyTwiceError extends ContainerError {
3
+ name: string;
4
+ constructor(message?: string);
5
+ static assert(isTrue: boolean, failMessage: string): void;
6
+ }
@@ -15,7 +15,7 @@ export { MethodNotImplementedError } from './errors/MethodNotImplementedError';
15
15
  export { ContainerDisposedError } from './errors/ContainerDisposedError';
16
16
  export { ProviderDisposedError } from './errors/ProviderDisposedError';
17
17
  export { UnexpectedHookResultError } from './errors/UnexpectedHookResultError';
18
- export { CannonSingletonApplyError } from './errors/CannonSingletonApplyError';
18
+ export { CannonSingletonApplyTwiceError } from './errors/CannonSingletonApplyTwiceError';
19
19
  export { getHooks, hook, hasHooks, type HookFn, type HookClass, type InjectFn, type HooksOfClass } from './hooks/hook';
20
20
  export { HookContext, createHookContextFactory, createHookContext, type IHookContext } from './hooks/HookContext';
21
21
  export { injectProp } from './hooks/injectProp';
@@ -1,4 +1,4 @@
1
- import { ArgsFn, DecorateFn, GetCacheKey, IProvider, ProviderOptions, ResolveDependency, ScopeAccessOptions, ScopeAccessRule } from './IProvider';
1
+ import { type ArgsFn, type DecorateFn, type GetCacheKey, type IProvider, type ProviderOptions, type ResolveDependency, type ScopeAccessOptions, type ScopeAccessRule } from './IProvider';
2
2
  import type { DependencyKey, IContainer } from '../container/IContainer';
3
3
  import { type constructor } from '../utils/basic';
4
4
  export declare class Provider<T = any> implements IProvider<T> {
@@ -1 +1,8 @@
1
- export declare const once: MethodDecorator;
1
+ type RepeatOptions = {
2
+ index: number;
3
+ args: unknown[];
4
+ };
5
+ export declare const once: ({ onRepeat }?: {
6
+ onRepeat?: (options: RepeatOptions) => void;
7
+ }) => MethodDecorator;
8
+ export {};
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CannonSingletonApplyError = void 0;
4
- const ContainerError_1 = require("./ContainerError");
5
- class CannonSingletonApplyError extends ContainerError_1.ContainerError {
6
- name = 'CannonSingletonApplyError';
7
- constructor(message) {
8
- super(message);
9
- Object.setPrototypeOf(this, CannonSingletonApplyError.prototype);
10
- }
11
- }
12
- exports.CannonSingletonApplyError = CannonSingletonApplyError;
@@ -1,8 +0,0 @@
1
- import { ContainerError } from './ContainerError';
2
- export class CannonSingletonApplyError extends ContainerError {
3
- name = 'CannonSingletonApplyError';
4
- constructor(message) {
5
- super(message);
6
- Object.setPrototypeOf(this, CannonSingletonApplyError.prototype);
7
- }
8
- }
@@ -1,5 +0,0 @@
1
- import { ContainerError } from './ContainerError';
2
- export declare class CannonSingletonApplyError extends ContainerError {
3
- name: string;
4
- constructor(message?: string);
5
- }