ts-ioc-container 35.2.3 → 35.3.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,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TypedEvent = void 0;
4
+ class TypedEvent {
5
+ constructor() {
6
+ this.observerStorage = [];
7
+ }
8
+ static fromPromise(promise) {
9
+ const event = new TypedEvent();
10
+ promise.then((value) => {
11
+ event.emit(value);
12
+ event.dispose();
13
+ });
14
+ return event;
15
+ }
16
+ on(observer) {
17
+ this.observerStorage.push(observer);
18
+ return () => this.off(observer);
19
+ }
20
+ once(observer) {
21
+ const onceObserver = (data) => {
22
+ observer(data);
23
+ this.off(onceObserver);
24
+ };
25
+ this.observerStorage.push(onceObserver);
26
+ return () => this.off(onceObserver);
27
+ }
28
+ off(observer) {
29
+ this.observerStorage = this.observerStorage.filter((o) => o !== observer);
30
+ }
31
+ emit(data) {
32
+ this.observerStorage.forEach((o) => o(data));
33
+ }
34
+ toPromise() {
35
+ return new Promise((resolve) => this.once(resolve));
36
+ }
37
+ dispose() {
38
+ this.observerStorage = [];
39
+ }
40
+ }
41
+ exports.TypedEvent = TypedEvent;
@@ -3,12 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AutoMockedContainer = void 0;
4
4
  const MethodNotImplementedError_1 = require("../errors/MethodNotImplementedError");
5
5
  const DependencyNotFoundError_1 = require("../errors/DependencyNotFoundError");
6
+ const TypedEvent_1 = require("../TypedEvent");
6
7
  class AutoMockedContainer {
7
8
  constructor() {
8
9
  this.id = '0';
9
10
  this.level = 0;
10
11
  this.tags = new Set();
11
12
  this.isDisposed = false;
13
+ this.onConstruct = new TypedEvent_1.TypedEvent();
14
+ this.onDispose = new TypedEvent_1.TypedEvent();
12
15
  }
13
16
  findChild(matchFn) {
14
17
  return undefined;
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Container = void 0;
4
4
  const IContainer_1 = require("./IContainer");
5
5
  const EmptyContainer_1 = require("./EmptyContainer");
6
- const ContainerDisposedError_1 = require("../errors/ContainerDisposedError");
7
6
  const Counter_1 = require("./Counter");
7
+ const ContainerDisposedError_1 = require("../errors/ContainerDisposedError");
8
8
  class Container {
9
9
  constructor(injector, { parent = new EmptyContainer_1.EmptyContainer(), tags = [], counter = new Counter_1.Counter(), } = {}) {
10
10
  this.injector = injector;
@@ -19,6 +19,12 @@ class Container {
19
19
  this.id = counter.next();
20
20
  this.level = this.parent.level + 1;
21
21
  }
22
+ get onConstruct() {
23
+ return this.parent.onConstruct;
24
+ }
25
+ get onDispose() {
26
+ return this.parent.onDispose;
27
+ }
22
28
  add(registration) {
23
29
  this.registrations.push(registration);
24
30
  registration.applyTo(this);
@@ -34,6 +40,7 @@ class Container {
34
40
  if ((0, IContainer_1.isConstructor)(token)) {
35
41
  const instance = this.injector.resolve(this, token, { args });
36
42
  this.instances.add(instance);
43
+ this.onConstruct.emit(instance);
37
44
  return instance;
38
45
  }
39
46
  const provider = this.providers.get(token);
@@ -60,6 +67,7 @@ class Container {
60
67
  }
61
68
  dispose() {
62
69
  this.validateContainer();
70
+ this.onDispose.emit(this);
63
71
  this.isDisposed = true;
64
72
  this.parent.removeScope(this);
65
73
  this.parent = new EmptyContainer_1.EmptyContainer();
@@ -3,12 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EmptyContainer = void 0;
4
4
  const MethodNotImplementedError_1 = require("../errors/MethodNotImplementedError");
5
5
  const DependencyNotFoundError_1 = require("../errors/DependencyNotFoundError");
6
+ const TypedEvent_1 = require("../TypedEvent");
6
7
  class EmptyContainer {
7
8
  constructor() {
8
9
  this.level = -1;
9
10
  this.id = 'empty';
10
11
  this.tags = new Set();
11
12
  this.isDisposed = false;
13
+ this.onConstruct = new TypedEvent_1.TypedEvent();
14
+ this.onDispose = new TypedEvent_1.TypedEvent();
12
15
  }
13
16
  hasInstance(value) {
14
17
  throw new MethodNotImplementedError_1.MethodNotImplementedError();
package/cjm/hooks/hook.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.injectProp = exports.runHooksAsync = exports.runHooks = exports.hasHooks = exports.getHooks = exports.hook = void 0;
3
+ exports.onDispose = exports.onConstruct = exports.injectProp = exports.runHooksAsync = exports.runHooks = exports.hasHooks = exports.getHooks = exports.hook = void 0;
4
4
  const HookContext_1 = require("./HookContext");
5
5
  const utils_1 = require("../utils");
6
6
  const UnexpectedHookResultError_1 = require("../errors/UnexpectedHookResultError");
@@ -49,3 +49,8 @@ const runHooksAsync = (target, key, { scope, createContext = HookContext_1.creat
49
49
  exports.runHooksAsync = runHooksAsync;
50
50
  const injectProp = (fn) => (context) => context.setProperty(fn);
51
51
  exports.injectProp = injectProp;
52
+ const onConstruct = (fn) => (0, exports.hook)('onConstruct', fn);
53
+ exports.onConstruct = onConstruct;
54
+ exports.onDispose = (0, exports.hook)('onDispose', (context) => {
55
+ context.invokeMethod({});
56
+ });
package/cjm/index.js CHANGED
@@ -1,6 +1,7 @@
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.depKey = exports.byAliases = exports.byAlias = exports.IMemoKey = exports.by = exports.HookContext = exports.injectProp = exports.runHooksAsync = exports.runHooks = exports.hasHooks = exports.hook = exports.getHooks = exports.UnexpectedHookResultError = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyNotFoundError = exports.Registration = exports.redirectFrom = 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.depKey = exports.byAliases = exports.byAlias = exports.IMemoKey = exports.by = exports.HookContext = exports.onConstruct = exports.onDispose = exports.injectProp = exports.runHooksAsync = exports.runHooks = exports.hasHooks = exports.hook = exports.getHooks = exports.UnexpectedHookResultError = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyNotFoundError = exports.Registration = exports.redirectFrom = 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
+ exports.TypedEvent = void 0;
4
5
  // Containers
5
6
  var IContainer_1 = require("./container/IContainer");
6
7
  Object.defineProperty(exports, "isDependencyKey", { enumerable: true, get: function () { return IContainer_1.isDependencyKey; } });
@@ -63,6 +64,8 @@ Object.defineProperty(exports, "hasHooks", { enumerable: true, get: function ()
63
64
  Object.defineProperty(exports, "runHooks", { enumerable: true, get: function () { return hook_1.runHooks; } });
64
65
  Object.defineProperty(exports, "runHooksAsync", { enumerable: true, get: function () { return hook_1.runHooksAsync; } });
65
66
  Object.defineProperty(exports, "injectProp", { enumerable: true, get: function () { return hook_1.injectProp; } });
67
+ Object.defineProperty(exports, "onDispose", { enumerable: true, get: function () { return hook_1.onDispose; } });
68
+ Object.defineProperty(exports, "onConstruct", { enumerable: true, get: function () { return hook_1.onConstruct; } });
66
69
  var HookContext_1 = require("./hooks/HookContext");
67
70
  Object.defineProperty(exports, "HookContext", { enumerable: true, get: function () { return HookContext_1.HookContext; } });
68
71
  // Others
@@ -79,3 +82,5 @@ Object.defineProperty(exports, "setParameterMetadata", { enumerable: true, get:
79
82
  Object.defineProperty(exports, "setMethodMetadata", { enumerable: true, get: function () { return metadata_1.setMethodMetadata; } });
80
83
  Object.defineProperty(exports, "getMethodMetadata", { enumerable: true, get: function () { return metadata_1.getMethodMetadata; } });
81
84
  Object.defineProperty(exports, "getParameterMetadata", { enumerable: true, get: function () { return metadata_1.getParameterMetadata; } });
85
+ var TypedEvent_1 = require("./TypedEvent");
86
+ Object.defineProperty(exports, "TypedEvent", { enumerable: true, get: function () { return TypedEvent_1.TypedEvent; } });
@@ -0,0 +1,37 @@
1
+ export class TypedEvent {
2
+ constructor() {
3
+ this.observerStorage = [];
4
+ }
5
+ static fromPromise(promise) {
6
+ const event = new TypedEvent();
7
+ promise.then((value) => {
8
+ event.emit(value);
9
+ event.dispose();
10
+ });
11
+ return event;
12
+ }
13
+ on(observer) {
14
+ this.observerStorage.push(observer);
15
+ return () => this.off(observer);
16
+ }
17
+ once(observer) {
18
+ const onceObserver = (data) => {
19
+ observer(data);
20
+ this.off(onceObserver);
21
+ };
22
+ this.observerStorage.push(onceObserver);
23
+ return () => this.off(onceObserver);
24
+ }
25
+ off(observer) {
26
+ this.observerStorage = this.observerStorage.filter((o) => o !== observer);
27
+ }
28
+ emit(data) {
29
+ this.observerStorage.forEach((o) => o(data));
30
+ }
31
+ toPromise() {
32
+ return new Promise((resolve) => this.once(resolve));
33
+ }
34
+ dispose() {
35
+ this.observerStorage = [];
36
+ }
37
+ }
@@ -1,11 +1,14 @@
1
1
  import { MethodNotImplementedError } from '../errors/MethodNotImplementedError';
2
2
  import { DependencyNotFoundError } from '../errors/DependencyNotFoundError';
3
+ import { TypedEvent } from '../TypedEvent';
3
4
  export class AutoMockedContainer {
4
5
  constructor() {
5
6
  this.id = '0';
6
7
  this.level = 0;
7
8
  this.tags = new Set();
8
9
  this.isDisposed = false;
10
+ this.onConstruct = new TypedEvent();
11
+ this.onDispose = new TypedEvent();
9
12
  }
10
13
  findChild(matchFn) {
11
14
  return undefined;
@@ -1,7 +1,7 @@
1
1
  import { isConstructor, } from './IContainer';
2
2
  import { EmptyContainer } from './EmptyContainer';
3
- import { ContainerDisposedError } from '../errors/ContainerDisposedError';
4
3
  import { Counter } from './Counter';
4
+ import { ContainerDisposedError } from '../errors/ContainerDisposedError';
5
5
  export class Container {
6
6
  constructor(injector, { parent = new EmptyContainer(), tags = [], counter = new Counter(), } = {}) {
7
7
  this.injector = injector;
@@ -16,6 +16,12 @@ export class Container {
16
16
  this.id = counter.next();
17
17
  this.level = this.parent.level + 1;
18
18
  }
19
+ get onConstruct() {
20
+ return this.parent.onConstruct;
21
+ }
22
+ get onDispose() {
23
+ return this.parent.onDispose;
24
+ }
19
25
  add(registration) {
20
26
  this.registrations.push(registration);
21
27
  registration.applyTo(this);
@@ -31,6 +37,7 @@ export class Container {
31
37
  if (isConstructor(token)) {
32
38
  const instance = this.injector.resolve(this, token, { args });
33
39
  this.instances.add(instance);
40
+ this.onConstruct.emit(instance);
34
41
  return instance;
35
42
  }
36
43
  const provider = this.providers.get(token);
@@ -57,6 +64,7 @@ export class Container {
57
64
  }
58
65
  dispose() {
59
66
  this.validateContainer();
67
+ this.onDispose.emit(this);
60
68
  this.isDisposed = true;
61
69
  this.parent.removeScope(this);
62
70
  this.parent = new EmptyContainer();
@@ -1,11 +1,14 @@
1
1
  import { MethodNotImplementedError } from '../errors/MethodNotImplementedError';
2
2
  import { DependencyNotFoundError } from '../errors/DependencyNotFoundError';
3
+ import { TypedEvent } from '../TypedEvent';
3
4
  export class EmptyContainer {
4
5
  constructor() {
5
6
  this.level = -1;
6
7
  this.id = 'empty';
7
8
  this.tags = new Set();
8
9
  this.isDisposed = false;
10
+ this.onConstruct = new TypedEvent();
11
+ this.onDispose = new TypedEvent();
9
12
  }
10
13
  hasInstance(value) {
11
14
  throw new MethodNotImplementedError();
package/esm/hooks/hook.js CHANGED
@@ -40,3 +40,7 @@ export const runHooksAsync = (target, key, { scope, createContext = createHookCo
40
40
  }));
41
41
  };
42
42
  export const injectProp = (fn) => (context) => context.setProperty(fn);
43
+ export const onConstruct = (fn) => hook('onConstruct', fn);
44
+ export const onDispose = hook('onDispose', (context) => {
45
+ context.invokeMethod({});
46
+ });
package/esm/index.js CHANGED
@@ -23,8 +23,9 @@ export { MethodNotImplementedError } from './errors/MethodNotImplementedError';
23
23
  export { ContainerDisposedError } from './errors/ContainerDisposedError';
24
24
  export { UnexpectedHookResultError } from './errors/UnexpectedHookResultError';
25
25
  // Hooks
26
- export { getHooks, hook, hasHooks, runHooks, runHooksAsync, injectProp } from './hooks/hook';
26
+ export { getHooks, hook, hasHooks, runHooks, runHooksAsync, injectProp, onDispose, onConstruct, } from './hooks/hook';
27
27
  export { HookContext } from './hooks/HookContext';
28
28
  // Others
29
29
  export { by, IMemoKey, byAlias, byAliases, depKey } from './by';
30
30
  export { setMetadata, getMetadata, setParameterMetadata, setMethodMetadata, getMethodMetadata, getParameterMetadata, } from './metadata';
31
+ export { TypedEvent } from './TypedEvent';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-ioc-container",
3
- "version": "35.2.3",
3
+ "version": "35.3.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": "5c2d64e52655c92bbceb219595b882cadc44b2f6"
62
+ "gitHead": "f46b9c8b1501b9e74679fd0464c76a3ad1e3fb74"
63
63
  }
@@ -0,0 +1,12 @@
1
+ export type IObserver<T> = (data: T) => void;
2
+ export type IUnsubscribe = () => void;
3
+ export declare class TypedEvent<T> {
4
+ static fromPromise<T>(promise: Promise<T>): TypedEvent<unknown>;
5
+ private observerStorage;
6
+ on(observer: IObserver<T>): IUnsubscribe;
7
+ once(observer: IObserver<T>): IUnsubscribe;
8
+ off(observer: IObserver<T>): void;
9
+ emit(data: T): void;
10
+ toPromise(): Promise<T>;
11
+ dispose(): void;
12
+ }
@@ -1,10 +1,13 @@
1
- import { AliasPredicate, DependencyKey, IContainer, InjectionToken, ReduceScope, ResolveOptions, Tag } from './IContainer';
1
+ import { AliasPredicate, DependencyKey, IContainer, InjectionToken, Instance, ReduceScope, ResolveOptions, Tag } from './IContainer';
2
2
  import { IRegistration } from '../registration/IRegistration';
3
+ import { TypedEvent } from '../TypedEvent';
3
4
  export declare abstract class AutoMockedContainer implements IContainer {
4
5
  id: string;
5
6
  level: number;
6
7
  tags: Set<string>;
7
8
  isDisposed: boolean;
9
+ onConstruct: TypedEvent<Instance>;
10
+ onDispose: TypedEvent<IContainer>;
8
11
  findChild(matchFn: (s: IContainer) => boolean): IContainer | undefined;
9
12
  findParent(matchFn: (s: IContainer) => boolean): IContainer | undefined;
10
13
  hasDependency(key: string): boolean;
@@ -1,8 +1,9 @@
1
- import { AliasPredicate, CreateScopeOptions, DependencyKey, IContainer, IContainerModule, InjectionToken, ReduceScope, ResolveOptions, Tag } from './IContainer';
1
+ import { AliasPredicate, CreateScopeOptions, DependencyKey, IContainer, IContainerModule, InjectionToken, Instance, ReduceScope, ResolveOptions, Tag } from './IContainer';
2
2
  import { IInjector } from '../injector/IInjector';
3
3
  import { IProvider } from '../provider/IProvider';
4
4
  import { IRegistration } from '../registration/IRegistration';
5
5
  import { Counter } from './Counter';
6
+ import { TypedEvent } from '../TypedEvent';
6
7
  export declare class Container implements IContainer {
7
8
  private readonly injector;
8
9
  isDisposed: boolean;
@@ -20,6 +21,8 @@ export declare class Container implements IContainer {
20
21
  tags?: Tag[];
21
22
  counter?: Counter;
22
23
  });
24
+ get onConstruct(): TypedEvent<Instance>;
25
+ get onDispose(): TypedEvent<IContainer>;
23
26
  add(registration: IRegistration): this;
24
27
  register(key: DependencyKey, provider: IProvider): this;
25
28
  resolve<T>(token: InjectionToken<T>, { args, child, lazy }?: ResolveOptions): T;
@@ -36,7 +39,7 @@ export declare class Container implements IContainer {
36
39
  reduceToRoot<TResult>(fn: ReduceScope<TResult>, initial: TResult): TResult;
37
40
  findChild(matchFn: (s: IContainer) => boolean): IContainer | undefined;
38
41
  findParent(matchFn: (s: IContainer) => boolean): IContainer | undefined;
39
- hasInstance(value: object, direction: 'parent' | 'child'): boolean;
42
+ hasInstance(value: Instance, direction: 'parent' | 'child'): boolean;
40
43
  /**
41
44
  * @private
42
45
  */
@@ -1,11 +1,14 @@
1
- import { AliasPredicate, DependencyKey, IContainer, IContainerModule, InjectionToken, ReduceScope, ResolveOptions, Tag } from './IContainer';
1
+ import { AliasPredicate, DependencyKey, IContainer, IContainerModule, InjectionToken, Instance, ReduceScope, ResolveOptions, Tag } from './IContainer';
2
2
  import { IProvider } from '../provider/IProvider';
3
3
  import { IRegistration } from '../registration/IRegistration';
4
+ import { TypedEvent } from '../TypedEvent';
4
5
  export declare class EmptyContainer implements IContainer {
5
6
  level: number;
6
7
  id: string;
7
8
  tags: Set<string>;
8
9
  isDisposed: boolean;
10
+ onConstruct: TypedEvent<Instance>;
11
+ onDispose: TypedEvent<IContainer>;
9
12
  hasInstance(value: object): boolean;
10
13
  reduceToRoot<TResult>(fn: ReduceScope<TResult>, initial: TResult): TResult;
11
14
  findChild(matchFn: (s: IContainer) => boolean): IContainer | undefined;
@@ -1,6 +1,7 @@
1
1
  import { IProvider } from '../provider/IProvider';
2
2
  import { constructor, MapFn } from '../utils';
3
3
  import { IRegistration } from '../registration/IRegistration';
4
+ import { TypedEvent } from '../TypedEvent';
4
5
  export type Tag = string;
5
6
  export type DependencyKey = string | symbol;
6
7
  export declare function isDependencyKey(token: constructor<any> | DependencyKey | MapFn<any>): token is DependencyKey;
@@ -29,9 +30,15 @@ export type CreateScopeOptions = {
29
30
  tags?: Tag[];
30
31
  idempotent?: boolean;
31
32
  };
33
+ export type Branded<T, Brand> = T & {
34
+ _brand: Brand;
35
+ };
36
+ export type Instance = Branded<object, 'Instance'>;
32
37
  export interface IContainer extends Resolvable, Tagged {
33
38
  readonly tags: Set<Tag>;
34
39
  readonly isDisposed: boolean;
40
+ onDispose: TypedEvent<IContainer>;
41
+ onConstruct: TypedEvent<Instance>;
35
42
  createScope(options?: CreateScopeOptions): IContainer;
36
43
  register(key: DependencyKey, value: IProvider): this;
37
44
  add(registration: IRegistration): this;
@@ -20,4 +20,6 @@ export declare const runHooksAsync: (target: object, key: string | symbol, { sco
20
20
  predicate?: ((methodName: string) => boolean) | undefined;
21
21
  }) => Promise<void[]>;
22
22
  export declare const injectProp: (fn: InjectFn) => HookFn;
23
+ export declare const onConstruct: (fn: HookFn) => (target: object, propertyKey: string | symbol) => void;
24
+ export declare const onDispose: (target: object, propertyKey: string | symbol) => void;
23
25
  export {};
@@ -1,4 +1,4 @@
1
- export { IContainer, Resolvable, IContainerModule, isDependencyKey, DependencyKey, InjectionToken, Tag, Tagged, } from './container/IContainer';
1
+ export { IContainer, Resolvable, IContainerModule, isDependencyKey, DependencyKey, InjectionToken, Tag, Tagged, Instance, } from './container/IContainer';
2
2
  export { Container } from './container/Container';
3
3
  export { EmptyContainer } from './container/EmptyContainer';
4
4
  export { AutoMockedContainer } from './container/AutoMockedContainer';
@@ -19,8 +19,9 @@ export { DependencyNotFoundError } from './errors/DependencyNotFoundError';
19
19
  export { MethodNotImplementedError } from './errors/MethodNotImplementedError';
20
20
  export { ContainerDisposedError } from './errors/ContainerDisposedError';
21
21
  export { UnexpectedHookResultError } from './errors/UnexpectedHookResultError';
22
- export { getHooks, hook, hasHooks, HookFn, HookClass, runHooks, runHooksAsync, injectProp } from './hooks/hook';
22
+ export { getHooks, hook, hasHooks, HookFn, HookClass, runHooks, runHooksAsync, injectProp, onDispose, onConstruct, } from './hooks/hook';
23
23
  export { HookContext, InjectFn, IHookContext } from './hooks/HookContext';
24
24
  export { by, InstancePredicate, IMemo, IMemoKey, byAlias, byAliases, depKey, DepKey } from './by';
25
- export { constructor } from './utils';
25
+ export { constructor, Branded } from './utils';
26
26
  export { setMetadata, getMetadata, setParameterMetadata, setMethodMetadata, getMethodMetadata, getParameterMetadata, } from './metadata';
27
+ export { TypedEvent } from './TypedEvent';
@@ -1,5 +1,8 @@
1
1
  export type constructor<T> = new (...args: any[]) => T;
2
2
  export type MapFn<T> = (value: T) => T;
3
+ export type Branded<T, Brand> = T & {
4
+ _brand: Brand;
5
+ };
3
6
  export declare const pipe: <T>(...mappers: MapFn<T>[]) => MapFn<T>;
4
7
  export declare function fillEmptyIndexes<T>(baseArr: (T | undefined)[], insertArr: T[]): T[];
5
8
  export declare const constant: <T>(value: T) => () => T;