ts-ioc-container 14.0.0 → 14.0.2

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
@@ -19,26 +19,13 @@
19
19
 
20
20
  ## Install
21
21
  ```shell script
22
- npm install ts-ioc-container
22
+ npm install ts-ioc-container reflect-metadata
23
23
  ```
24
24
  ```shell script
25
- yarn add ts-ioc-container
25
+ yarn add ts-ioc-container reflect-metadata
26
26
  ```
27
- Add `reflect-metadata` for IoC
28
- ```shell script
29
- npm install reflect-metadata
30
- ```
31
- ```shell script
32
- yarn add reflect-metadata
33
- ```
34
-
35
- ## Bundled size
36
- Full-featured IoC bundle (decorators `@inject`, hooks `@onDispose` `@onConstruct`)
37
- - Stat size: **13.34 KB**
38
- - Parsed size: **5.44 KB**
39
- - Gzipped size: **1.63 KB**
40
27
 
41
- ## Configuration
28
+ ## tsconfig.json
42
29
  ```json
43
30
  {
44
31
  "compilerOptions": {
@@ -48,186 +35,98 @@ Full-featured IoC bundle (decorators `@inject`, hooks `@onDispose` `@onConstruct
48
35
  }
49
36
  ```
50
37
 
51
- ## Recipes
52
38
 
53
- ### ServiceLocator
54
- How to create new simple locator
39
+ ## Container
40
+ How to create new container
55
41
 
56
42
  ```typescript
57
- import { SimpleLocatorBuilder, ProviderBuilder } from 'ts-ioc-container';
43
+ import { Container, fromClass, IInjector } from "ts-ioc-container";
44
+ import { resolve } from 'ts-constructor-injector';
58
45
 
59
- const locator = new SimpleLocatorBuilder().build();
60
- locator.register('ILogger', ProviderBuilder.fromConstructor(Logger).build());
61
- const logger = locator.resolve<ILogger>('ILogger');
46
+ const injector: IInjector = {
47
+ resolve<T>(locator: Resolveable, value: constructor<T>, ...deps: unknown[]): T {
48
+ return resolve(locator)(value, ...deps);
49
+ },
50
+ };
51
+ const container = new Container(injector);
52
+ container.register('ILogger', fromClass(Logger).build());
53
+ const logger = container.resolve<ILogger>('ILogger');
62
54
  ```
63
- ### Injectors
64
- Simple injector
65
-
66
- ```typescript
67
- import {ProviderBuilder, SimpleLocatorBuilder} from "ts-ioc-container";
68
55
 
69
- class Car {
70
- constructor(locator: IServiceLocator) {
71
- const engine = locator.resolve<IEngine>('IEngine')
72
- }
73
- }
74
-
75
- const locator = new SimpleLocatorBuilder().build();
76
- locator.register('IEngine', ProviderBuilder.fromConstructor(Engine).build());
77
- const car = locator.resolve(Car);
78
- ```
79
- IoC injector. Compose `@inject` decorator as you need. Or use default `createInjectDecorator`;
56
+ ## ProviderBuilder
80
57
 
81
58
  ```typescript
82
- import 'reflect-metadata';
83
- import {
84
- metadataCollector,
85
- InjectFnDecorator,
86
- InjectMetadataCollector,
87
- ProviderBuilder,
88
- InjectionToken,
89
- IocLocatorBuilder
90
- } from 'ts-ioc-container';
91
- import { InjectFn } from "./InjectFn";
92
- import { IServiceLocator } from "./IServiceLocator";
93
- import { IocLocatorBuilder } from "./IocLocatorBuilder";
94
-
95
- export const constructorMetadataCollector = new InjectMetadataCollector(Symbol.for('CONSTRUCTOR_METADATA_KEY'));
96
- export const inject: InjectFnDecorator = (injectionFn) => (target, propertyKey, parameterIndex) => {
97
- constructorMetadataCollector.addMetadata(target, parameterIndex, injectionFn);
98
- };
99
- export const Factory = <T>(key: InjectionToken<T>, ...args1) => l => (...args2: any[]) => l.resolve(key, ...args1, ...args2);
100
- export const Item = <T>(key: InjectionToken<T>, ...args: any[]) => l => l.resolve(key, ...args);
101
- export const Collection = <T>(...injections: InjectFn<T>[]) => l => injections.map(fn => fn(l));
102
-
103
- /**
104
- * OR
105
- * export const inject = createInjectDecorator(constructorMetadataCollector);
106
- * export const inject = createInjectFnDecorator(constructorMetadataCollector);
107
- */
108
-
109
- const locator = new IocLocatorBuilder(constructorMetadataCollector).build();
110
- locator.register<IEngine>('IEngine', ProviderBuilder.fromConstructor(Engine).asRequested().build());
111
-
112
- class Car {
113
- constructor(
114
- @inject(l => l.resolve('IEngine', 'V1')) private engine1: IEngine,
115
- @inject(l => l) private locator: IServiceLocator,
116
- /**
117
- * OR
118
- * @inject('IEngine', 'V8') private engine8: IEngine, // by using createInjectDecorator
119
- */
120
- @inject(Item('IEngine', 'V8')) private engine8: IEngine,
121
- @inject(Collection(Item('IEngine', 'V2'), Item('IEngine', 'V4'), Item('IEngine', 'V6'))) private engines: IEngine[],
122
- @inject(Factory('IEngine', 'V12')) private engineFactory: (model: string) => IEngine,
123
- ) {
124
- const newEngine = engineFactory('SuperCharger');
125
- }
126
- }
59
+ import { fromClass } from "ts-ioc-container";
127
60
 
128
- const car = locator.resolve(Car);
61
+ container.register('ILogger', new ProviderBuilder((container, ...args) => new Logger(...args)).build());
62
+ container.register('ILogger1', fromClass(Logger).forKey('ILogger').asSingleton().forLevel(0).build()); // global singleton
63
+ container.register('ILogger2', fromClass(Logger).asSingleton().forLevel(1).build()); // first scope singleton
64
+ container.register('ILogger3', fromClass(Logger).asSingleton().forTags(['tag1', 'tag2']).build()); // singleton for scope with tag1 or tag2
65
+ container.register('ILogger4', fromClass(Logger).withArgs('dev').asSingleton().build()); // singleton in every scope
129
66
  ```
130
67
 
131
- ## ProviderBuilder
68
+ ## Decorators
132
69
 
133
70
  ```typescript
134
- import {ProviderBuilder} from "ts-ioc-container";
71
+ import { asSingleton, perTags, forKey, by } from "ts-ioc-container";
72
+ import { inject } from "ts-constructor-injector";
135
73
 
136
- locator.register('ILogger', new ProviderBuilder((l, ...args) => new Logger(...args)).asRequested());
137
- locator.register('ILogger1', ProviderBuilder.fromConstructor(Logger).asSingleton().forLevel(0).build()); // global singleton
138
- locator.register('ILogger2', ProviderBuilder.fromConstructor(Logger).asSingleton().forLevel(1).build()); // first scope singleton
139
- locator.register('ILogger3', ProviderBuilder.fromConstructor(Logger).asSingleton().forTags(['tag1', 'tag2']).build()); // singleton for scope with tag1 or tag2
140
- locator.register('ILogger4', ProviderBuilder.fromConstructor(Logger).withArgs('dev').asSingleton().build()); // singleton in every scope
74
+ @asSingleton
75
+ @forKey('IEngine')
76
+ @perTags('tag1', 'tag2')
77
+ class Engine {
78
+ constructor(@inject(by('ILogger')) private logger: ILogger) {
79
+ }
80
+ }
141
81
  ```
142
82
 
143
83
  ## Hooks
144
84
 
145
85
  ```typescript
146
86
  import {
147
- IocLocatorBuilder,
148
- ProviderKey,
149
- InjectMetadataCollector,
150
87
  MethodsMetadataCollector,
151
- HookedProvider,
152
- IInstanceHook
88
+ createMethodHookDecorator,
89
+ Container,
90
+ IInjector,
91
+ ContainerHook,
153
92
  } from "ts-ioc-container";
154
- import { Mock } from "moq.ts";
155
- import { ProviderBuilder } from "./ProviderBuilder";
156
- import { IocLocatorBuilder } from "./IocLocatorBuilder";
157
-
158
- export const constructorMetadataCollector = new InjectMetadataCollector(Symbol.for('CONSTRUCTOR_METADATA_KEY'));
159
- export const onConstructMetadataCollector = new MethodsMetadataCollector(Symbol.for('OnConstructHook'));
160
- export const onConstruct: MethodDecorator = (target, propertyKey) => {
161
- // eslint-disable-next-line @typescript-eslint/ban-types
162
- onConstructMetadataCollector.addHook(target, propertyKey);
163
- };
164
93
 
165
- export const onDisposeMetadataCollector = new MethodsMetadataCollector(Symbol.for('OnDisposeHook'));
166
- export const onDispose: MethodDecorator = (target, propertyKey) => {
167
- // eslint-disable-next-line @typescript-eslint/ban-types
168
- onDisposeMetadataCollector.addHook(target, propertyKey);
169
- };
94
+ export const onConstructMetadataCollector = new MethodsMetadataCollector('OnConstructHook');
95
+ export const onConstruct = createMethodHookDecorator(onConstructMetadataCollector);
170
96
 
171
- /**
172
- * OR
173
- * export const onConstruct = createHookDecorator(onConstructMetadataCollector)
174
- * export const onDispose = createHookDecorator(onDisposeMetadataCollector)
175
- */
176
-
177
- const hook: IInstanceHook = {
178
- onConstruct<GInstance>(instance: GInstance): void {
179
- onConstructMetadataCollector.invokeHooksOf(instance);
180
- },
181
- onDispose<GInstance>(instance: GInstance): void {
182
- onDisposeMetadataCollector.invokeHooksOf(instance);
183
- }
184
- }
185
-
186
- const locator = new IocLocatorBuilder(constructorMetadataCollector).withInjectorHook(hook).build();
187
-
188
- class Car {
189
- constructor() {
190
- }
97
+ export const onDisposeMetadataCollector = new MethodsMetadataCollector('OnDisposeHook');
98
+ export const onDispose = createMethodHookDecorator(onDisposeMetadataCollector);
191
99
 
100
+ class Logger {
192
101
  @onConstruct
193
- public initialize() {
194
- console('initialized!');
102
+ initialize() {
195
103
  }
196
104
 
197
105
  @onDispose
198
- public dispose() {
199
- console('disposed!');
200
- }
106
+ dispose() {}
201
107
  }
202
108
 
203
- const car = locator.resolve(Car); // output: initialized!
204
- locator.dispose(); // output: disposed!
205
-
206
- class Engine {
207
- constructor() {
208
- }
209
-
210
- @onConstruct
211
- public initialize() {
212
- console('initialized!');
213
- }
214
-
215
- @onDispose
216
- public dispose() {
217
- console('disposed!');
218
- }
219
- }
220
-
221
- // in the case if you don't want to use locator.resolve to instanciate Engine you should use .withHook
222
- locator.register('IEngine', new ProviderBuilder(() => new Engine()).withHook(hook).build())
223
- const engine = locator.resolve(Engine); // output: initialized!
224
- locator.dispose(); // output: disposed!
109
+ const injector: IInjector = {
110
+ resolve<T>(locator: Resolveable, value: constructor<T>, ...deps: unknown[]): T {
111
+ const instance = resolve(locator)(value, ...deps);
112
+ onConstructMetadataCollector.invokeHooksOf(instance)
113
+ return instance;
114
+ },
115
+ };
116
+ const container = new Container(injector).setHook(new ContainerHook((instance) => {
117
+ onDisposeMetadataCollector.invokeHooksOf(instance);
118
+ }));
119
+ container.register('ILogger', fromClass(Logger).build());
120
+ const logger = container.resolve<ILogger>('ILogger');
225
121
  ```
226
122
 
227
123
  ## Scoped locators
228
124
 
125
+ - levels - every scope has level (0, 1, 2, 3). 0 is root. And register provider per level.
126
+ - tags - you can add tag to scope and root container. And register provider per tag.
127
+
229
128
  ```typescript
230
- const scope = locator.createLocator(['tag1', 'tag2']);
129
+ const scope = container.createScope(['tag1', 'tag2']);
231
130
  const logger = scope.resolve('ILogger');
232
131
  scope.dispose();
233
132
  ```
@@ -235,60 +134,49 @@ scope.dispose();
235
134
  ## Mocking / Tests
236
135
 
237
136
  ```typescript
238
- import { MoqRepository } from "./MoqRepository";
239
137
  import {
240
- SimpleLocatorBuilder,
241
- MockProviderStorage
138
+ IMockRepository,
139
+ Container,
140
+ SimpleInjector,
242
141
  } from "ts-ioc-container";
243
- import { MoqProviderStorage } from "./MoqProviderStorage";
244
- import { IEngine } from "./IEngine";
245
- import { SimpleLocatorBuilder } from "./SimpleLocatorBuilder";
246
-
247
- describe('test', () => {
248
- const mockProviderStorage = new MoqProviderStorage(new MockProviderStorage(() => new MoqProvider()));
249
- const locator = new SimpleLocatorBuilder().withMockedRepository(mockProviderStorage).build();
250
-
251
- const engineMock = mockProviderStorage.findMock<IEngine>('IEngine');
252
- engineMock.setup(i => i.getRegistrationNumber()).return('123');
142
+ import { Mock } from "moq.ts";
253
143
 
254
- const engine = locator.resolve<IEngine>('IEngine');
144
+ export class MoqRepository implements IMockRepository {
145
+ private mocks = new Map<ProviderKey, IMock<any>>();
255
146
 
256
- expect(engine.getRegistrationNumber()).toBe('123');
257
- })
258
- ```
259
- MoqStorage
260
- ```typescript
261
- import { VendorMockProviderStorage, ProviderKey } from 'ts-ioc-container';
262
- import { MoqProvider } from './MoqProvider';
263
- import { IMock } from 'moq.ts';
147
+ resolve<T>(key: ProviderKey): T {
148
+ return this.resolveMock<T>(key).object();
149
+ }
264
150
 
265
- export class MoqProviderStorage extends VendorMockProviderStorage {
266
- findOrCreate<T>(key: ProviderKey): MoqProvider<T> {
267
- return this.storage.findOrCreate(key) as MoqProvider<T>;
151
+ dispose(): void {
152
+ this.mocks.clear();
268
153
  }
269
154
 
270
- findMock<T>(key: ProviderKey): IMock<T> {
271
- return (this.storage.findOrCreate(key) as MoqProvider<T>).mock;
155
+ resolveMock<T>(key: ProviderKey): IMock<T> {
156
+ if (!this.mocks.has(key)) {
157
+ this.mocks.set(key, new Mock());
158
+ }
159
+ return this.mocks.get(key) as IMock<T>;
272
160
  }
273
161
  }
274
- ```
275
162
 
276
- MoqProvider
277
- ```typescript
278
- import { MockProvider, IServiceLocator } from 'ts-ioc-container';
279
- import { Mock } from 'moq.ts';
163
+ describe('test', () => {
164
+ const mockRepository = new MoqRepository();
165
+ const container = new Container(new SimpleInjector()).map((l) => new AutoMockedContainer(l, mockRepository));
280
166
 
281
- export class MoqProvider<T> extends MockProvider<T> {
282
- mock = new Mock<T>();
167
+ const engineMock = mockRepository.resolveMock<IEngine>('IEngine');
168
+ engineMock.setup(i => i.getRegistrationNumber()).return('123');
283
169
 
284
- resolve(locator: IServiceLocator, ...args: any[]): T {
285
- return this.mock.object();
286
- }
287
- }
170
+ const engine = container.resolve<IEngine>('IEngine');
171
+
172
+ expect(engine.getRegistrationNumber()).toBe('123');
173
+ })
288
174
  ```
289
175
 
290
176
 
291
177
  ## Errors
292
178
 
293
179
  - ProviderNotFoundError
180
+ - ProviderHasNoKeyError
294
181
  - MethodNotImplementedError
182
+ - ContainerDisposedError
@@ -4,7 +4,6 @@ export declare class ContainerHook implements IContainerHook {
4
4
  private onDisposeFn;
5
5
  private instances;
6
6
  constructor(onDisposeFn?: OnDisposeHook);
7
- onDispose(hook: OnDisposeHook): void;
8
7
  resolve<T>(instance: T): T;
9
8
  dispose(): void;
10
9
  clone(): IContainerHook;
@@ -19,9 +19,6 @@ var ContainerHook = /** @class */ (function () {
19
19
  this.onDisposeFn = onDisposeFn;
20
20
  this.instances = new Set();
21
21
  }
22
- ContainerHook.prototype.onDispose = function (hook) {
23
- this.onDisposeFn = hook;
24
- };
25
22
  ContainerHook.prototype.resolve = function (instance) {
26
23
  this.instances.add(instance);
27
24
  return instance;
@@ -1 +1 @@
1
- {"version":3,"file":"ContainerHook.js","sourceRoot":"","sources":["../../lib/hooks/ContainerHook.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,+CAA4C;AAI5C;IAGI,uBAAoB,WAAiC;QAAjC,4BAAA,EAAA,cAA6B,aAAI;QAAjC,gBAAW,GAAX,WAAW,CAAsB;QAF7C,cAAS,GAAG,IAAI,GAAG,EAAE,CAAC;IAE0B,CAAC;IAEzD,iCAAS,GAAT,UAAU,IAAmB;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,+BAAO,GAAP,UAAW,QAAW;QAClB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,+BAAO,GAAP;;;YACI,KAAiB,IAAA,KAAA,SAAA,IAAI,CAAC,SAAS,CAAA,gBAAA,4BAAE;gBAA5B,IAAM,IAAE,WAAA;gBACT,IAAI,CAAC,WAAW,CAAC,IAAE,CAAC,CAAC;aACxB;;;;;;;;;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,6BAAK,GAAL;QACI,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;IACL,oBAAC;AAAD,CAAC,AAxBD,IAwBC;AAxBY,sCAAa"}
1
+ {"version":3,"file":"ContainerHook.js","sourceRoot":"","sources":["../../lib/hooks/ContainerHook.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,+CAA4C;AAI5C;IAGI,uBAAoB,WAAiC;QAAjC,4BAAA,EAAA,cAA6B,aAAI;QAAjC,gBAAW,GAAX,WAAW,CAAsB;QAF7C,cAAS,GAAG,IAAI,GAAG,EAAE,CAAC;IAE0B,CAAC;IAEzD,+BAAO,GAAP,UAAW,QAAW;QAClB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,+BAAO,GAAP;;;YACI,KAAiB,IAAA,KAAA,SAAA,IAAI,CAAC,SAAS,CAAA,gBAAA,4BAAE;gBAA5B,IAAM,IAAE,WAAA;gBACT,IAAI,CAAC,WAAW,CAAC,IAAE,CAAC,CAAC;aACxB;;;;;;;;;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,6BAAK,GAAL;QACI,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;IACL,oBAAC;AAAD,CAAC,AApBD,IAoBC;AApBY,sCAAa"}
package/cjm/index.d.ts CHANGED
@@ -2,6 +2,7 @@ import { constructor } from './core/utils/types';
2
2
  import { ProviderBuilder } from './providers/ProviderBuilder';
3
3
  import { ResolveDependency } from './core/provider/IProvider';
4
4
  import { IContainer, InjectionToken } from './core/container/IContainer';
5
+ export { ContainerHook } from './hooks/ContainerHook';
5
6
  export { ProviderReducer } from './core/provider/IProvidersMetadataCollector';
6
7
  export { IContainer, Resolveable } from './core/container/IContainer';
7
8
  export { constructor } from './core/utils/types';
package/cjm/index.js CHANGED
@@ -25,12 +25,14 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
25
25
  return to.concat(ar || Array.prototype.slice.call(from));
26
26
  };
27
27
  Object.defineProperty(exports, "__esModule", { value: true });
28
- exports.by = exports.createMethodHookDecorator = exports.fromFn = exports.fromValue = exports.fromClass = exports.perTags = exports.asSingleton = exports.forKey = exports.createAddKeyDecorator = exports.createSingletonDecorator = exports.createTagsDecorator = exports.isProviderKey = exports.ProvidersMetadataCollector = exports.ProviderBuilder = exports.SingletonProvider = exports.AutoMockedContainer = exports.createLevelDecorator = exports.LevelProvider = exports.ProxyInjector = exports.TaggedProvider = exports.createArgsFnDecorator = exports.ArgsProvider = exports.Provider = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.ProviderNotFoundError = exports.MethodsMetadataCollector = exports.SimpleInjector = exports.Container = void 0;
28
+ exports.by = exports.createMethodHookDecorator = exports.fromFn = exports.fromValue = exports.fromClass = exports.perTags = exports.asSingleton = exports.forKey = exports.createAddKeyDecorator = exports.createSingletonDecorator = exports.createTagsDecorator = exports.isProviderKey = exports.ProvidersMetadataCollector = exports.ProviderBuilder = exports.SingletonProvider = exports.AutoMockedContainer = exports.createLevelDecorator = exports.LevelProvider = exports.ProxyInjector = exports.TaggedProvider = exports.createArgsFnDecorator = exports.ArgsProvider = exports.Provider = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.ProviderNotFoundError = exports.MethodsMetadataCollector = exports.SimpleInjector = exports.Container = exports.ContainerHook = void 0;
29
29
  var Provider_1 = require("./core/provider/Provider");
30
30
  var ProvidersMetadataCollector_1 = require("./core/provider/ProvidersMetadataCollector");
31
31
  var SingletonProvider_1 = require("./providers/SingletonProvider");
32
32
  var TaggedProvider_1 = require("./providers/TaggedProvider");
33
33
  var ProviderBuilder_1 = require("./providers/ProviderBuilder");
34
+ var ContainerHook_1 = require("./hooks/ContainerHook");
35
+ Object.defineProperty(exports, "ContainerHook", { enumerable: true, get: function () { return ContainerHook_1.ContainerHook; } });
34
36
  var Container_1 = require("./core/container/Container");
35
37
  Object.defineProperty(exports, "Container", { enumerable: true, get: function () { return Container_1.Container; } });
36
38
  var SimpleInjector_1 = require("./injectors/SimpleInjector");
package/cjm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAA2E;AAC3E,yFAAwF;AACxF,mEAAyE;AACzE,6DAAiE;AAEjE,+DAA8D;AAO9D,wDAAuD;AAA9C,sGAAA,SAAS,OAAA;AAGlB,6DAA4D;AAAnD,gHAAA,cAAc,OAAA;AAEvB,6EAA4E;AAAnE,oIAAA,wBAAwB,OAAA;AAEjC,+EAA8E;AAArE,8HAAA,qBAAqB,OAAA;AAC9B,oFAAmF;AAA1E,sIAAA,yBAAyB,OAAA;AAClC,kFAAiF;AAAxE,gIAAA,sBAAsB,OAAA;AAC/B,qDAAoD;AAA3C,oGAAA,QAAQ,OAAA;AACjB,yDAAuF;AAA9E,4GAAA,YAAY,OAAA;AAAU,qHAAA,qBAAqB,OAAA;AAEpD,6DAA4D;AAAnD,gHAAA,cAAc,OAAA;AACvB,2DAA0D;AAAjD,8GAAA,aAAa,OAAA;AACtB,2DAAgF;AAAvE,8GAAA,aAAa,OAAA;AAAE,qHAAA,oBAAoB,OAAA;AAE5C,sEAAqE;AAA5D,0HAAA,mBAAmB,OAAA;AAC5B,mEAAkE;AAAzD,sHAAA,iBAAiB,OAAA;AAC1B,+DAA8D;AAArD,kHAAA,eAAe,OAAA;AAExB,yFAAwF;AAA/E,wIAAA,0BAA0B,OAAA;AAGnC,uDAA0D;AAAjD,0GAAA,aAAa,OAAA;AACtB,6DAAiE;AAAxD,qHAAA,mBAAmB,OAAA;AAC5B,mEAAyE;AAAhE,6HAAA,wBAAwB,OAAA;AACjC,qDAAiE;AAAxD,iHAAA,qBAAqB,OAAA;AAE9B,IAAM,yBAAyB,GAAG,uDAA0B,CAAC,MAAM,EAAE,CAAC;AACzD,QAAA,MAAM,GAAG,IAAA,gCAAqB,EAAC,yBAAyB,CAAC,CAAC;AAE1D,QAAA,WAAW,GAAG,IAAA,4CAAwB,EAAC,yBAAyB,CAAC,CAAC;AAClE,QAAA,OAAO,GAAG,IAAA,oCAAmB,EAAC,yBAAyB,CAAC,CAAC;AAEtE,SAAgB,SAAS,CAAI,KAAqB;IAC9C,OAAO,IAAI,iCAAe,CAAC,mBAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;AACpH,CAAC;AAFD,8BAEC;AAED,SAAgB,SAAS,CAAI,KAAQ;IACjC,OAAO,IAAI,iCAAe,CAAC,mBAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1D,CAAC;AAFD,8BAEC;AAED,SAAgB,MAAM,CAAI,EAAwB;IAC9C,OAAO,IAAI,iCAAe,CAAC,IAAI,mBAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AACjD,CAAC;AAFD,wBAEC;AAED,+EAA8E;AAArE,sIAAA,yBAAyB,OAAA;AAE3B,IAAM,EAAE,GACX,UAAI,GAAsB;IAAE,cAAkB;SAAlB,UAAkB,EAAlB,qBAAkB,EAAlB,IAAkB;QAAlB,6BAAkB;;IAC9C,OAAA,UAAC,CAAa;QACV,OAAA,CAAC,CAAC,OAAO,OAAT,CAAC,iBAAY,GAAG,UAAK,IAAI;IAAzB,CAA0B;AAD9B,CAC8B,CAAC;AAHtB,QAAA,EAAE,MAGoB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAA2E;AAC3E,yFAAwF;AACxF,mEAAyE;AACzE,6DAAiE;AAEjE,+DAA8D;AAI9D,uDAAsD;AAA7C,8GAAA,aAAa,OAAA;AAItB,wDAAuD;AAA9C,sGAAA,SAAS,OAAA;AAGlB,6DAA4D;AAAnD,gHAAA,cAAc,OAAA;AAEvB,6EAA4E;AAAnE,oIAAA,wBAAwB,OAAA;AAEjC,+EAA8E;AAArE,8HAAA,qBAAqB,OAAA;AAC9B,oFAAmF;AAA1E,sIAAA,yBAAyB,OAAA;AAClC,kFAAiF;AAAxE,gIAAA,sBAAsB,OAAA;AAC/B,qDAAoD;AAA3C,oGAAA,QAAQ,OAAA;AACjB,yDAAuF;AAA9E,4GAAA,YAAY,OAAA;AAAU,qHAAA,qBAAqB,OAAA;AAEpD,6DAA4D;AAAnD,gHAAA,cAAc,OAAA;AACvB,2DAA0D;AAAjD,8GAAA,aAAa,OAAA;AACtB,2DAAgF;AAAvE,8GAAA,aAAa,OAAA;AAAE,qHAAA,oBAAoB,OAAA;AAE5C,sEAAqE;AAA5D,0HAAA,mBAAmB,OAAA;AAC5B,mEAAkE;AAAzD,sHAAA,iBAAiB,OAAA;AAC1B,+DAA8D;AAArD,kHAAA,eAAe,OAAA;AAExB,yFAAwF;AAA/E,wIAAA,0BAA0B,OAAA;AAGnC,uDAA0D;AAAjD,0GAAA,aAAa,OAAA;AACtB,6DAAiE;AAAxD,qHAAA,mBAAmB,OAAA;AAC5B,mEAAyE;AAAhE,6HAAA,wBAAwB,OAAA;AACjC,qDAAiE;AAAxD,iHAAA,qBAAqB,OAAA;AAE9B,IAAM,yBAAyB,GAAG,uDAA0B,CAAC,MAAM,EAAE,CAAC;AACzD,QAAA,MAAM,GAAG,IAAA,gCAAqB,EAAC,yBAAyB,CAAC,CAAC;AAE1D,QAAA,WAAW,GAAG,IAAA,4CAAwB,EAAC,yBAAyB,CAAC,CAAC;AAClE,QAAA,OAAO,GAAG,IAAA,oCAAmB,EAAC,yBAAyB,CAAC,CAAC;AAEtE,SAAgB,SAAS,CAAI,KAAqB;IAC9C,OAAO,IAAI,iCAAe,CAAC,mBAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;AACpH,CAAC;AAFD,8BAEC;AAED,SAAgB,SAAS,CAAI,KAAQ;IACjC,OAAO,IAAI,iCAAe,CAAC,mBAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1D,CAAC;AAFD,8BAEC;AAED,SAAgB,MAAM,CAAI,EAAwB;IAC9C,OAAO,IAAI,iCAAe,CAAC,IAAI,mBAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AACjD,CAAC;AAFD,wBAEC;AAED,+EAA8E;AAArE,sIAAA,yBAAyB,OAAA;AAE3B,IAAM,EAAE,GACX,UAAI,GAAsB;IAAE,cAAkB;SAAlB,UAAkB,EAAlB,qBAAkB,EAAlB,IAAkB;QAAlB,6BAAkB;;IAC9C,OAAA,UAAC,CAAa;QACV,OAAA,CAAC,CAAC,OAAO,OAAT,CAAC,iBAAY,GAAG,UAAK,IAAI;IAAzB,CAA0B;AAD9B,CAC8B,CAAC;AAHtB,QAAA,EAAE,MAGoB"}
@@ -4,7 +4,6 @@ export declare class ContainerHook implements IContainerHook {
4
4
  private onDisposeFn;
5
5
  private instances;
6
6
  constructor(onDisposeFn?: OnDisposeHook);
7
- onDispose(hook: OnDisposeHook): void;
8
7
  resolve<T>(instance: T): T;
9
8
  dispose(): void;
10
9
  clone(): IContainerHook;
@@ -4,9 +4,6 @@ export class ContainerHook {
4
4
  this.onDisposeFn = onDisposeFn;
5
5
  this.instances = new Set();
6
6
  }
7
- onDispose(hook) {
8
- this.onDisposeFn = hook;
9
- }
10
7
  resolve(instance) {
11
8
  this.instances.add(instance);
12
9
  return instance;
@@ -1 +1 @@
1
- {"version":3,"file":"ContainerHook.js","sourceRoot":"","sources":["../../lib/hooks/ContainerHook.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAI5C,MAAM,OAAO,aAAa;IAGtB,YAAoB,cAA6B,IAAI;QAAjC,gBAAW,GAAX,WAAW,CAAsB;QAF7C,cAAS,GAAG,IAAI,GAAG,EAAE,CAAC;IAE0B,CAAC;IAEzD,SAAS,CAAC,IAAmB;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,OAAO,CAAI,QAAW;QAClB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO;QACH,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE;YAC7B,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;SACxB;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK;QACD,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;CACJ"}
1
+ {"version":3,"file":"ContainerHook.js","sourceRoot":"","sources":["../../lib/hooks/ContainerHook.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAI5C,MAAM,OAAO,aAAa;IAGtB,YAAoB,cAA6B,IAAI;QAAjC,gBAAW,GAAX,WAAW,CAAsB;QAF7C,cAAS,GAAG,IAAI,GAAG,EAAE,CAAC;IAE0B,CAAC;IAEzD,OAAO,CAAI,QAAW;QAClB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO;QACH,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE;YAC7B,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;SACxB;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK;QACD,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;CACJ"}
package/esm/index.d.ts CHANGED
@@ -2,6 +2,7 @@ import { constructor } from './core/utils/types';
2
2
  import { ProviderBuilder } from './providers/ProviderBuilder';
3
3
  import { ResolveDependency } from './core/provider/IProvider';
4
4
  import { IContainer, InjectionToken } from './core/container/IContainer';
5
+ export { ContainerHook } from './hooks/ContainerHook';
5
6
  export { ProviderReducer } from './core/provider/IProvidersMetadataCollector';
6
7
  export { IContainer, Resolveable } from './core/container/IContainer';
7
8
  export { constructor } from './core/utils/types';
package/esm/index.js CHANGED
@@ -3,6 +3,7 @@ import { ProvidersMetadataCollector } from './core/provider/ProvidersMetadataCol
3
3
  import { createSingletonDecorator } from './providers/SingletonProvider';
4
4
  import { createTagsDecorator } from './providers/TaggedProvider';
5
5
  import { ProviderBuilder } from './providers/ProviderBuilder';
6
+ export { ContainerHook } from './hooks/ContainerHook';
6
7
  export { Container } from './core/container/Container';
7
8
  export { SimpleInjector } from './injectors/SimpleInjector';
8
9
  export { MethodsMetadataCollector } from './hooks/MethodsMetadataCollector';
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAO9D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAGvD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAU,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEvF,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AAGxF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,yBAAyB,GAAG,0BAA0B,CAAC,MAAM,EAAE,CAAC;AACtE,MAAM,CAAC,MAAM,MAAM,GAAG,qBAAqB,CAAC,yBAAyB,CAAC,CAAC;AAEvE,MAAM,CAAC,MAAM,WAAW,GAAG,wBAAwB,CAAC,yBAAyB,CAAC,CAAC;AAC/E,MAAM,CAAC,MAAM,OAAO,GAAG,mBAAmB,CAAC,yBAAyB,CAAC,CAAC;AAEtE,MAAM,UAAU,SAAS,CAAI,KAAqB;IAC9C,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;AACpH,CAAC;AAED,MAAM,UAAU,SAAS,CAAI,KAAQ;IACjC,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,MAAM,CAAI,EAAwB;IAC9C,OAAO,IAAI,eAAe,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,MAAM,CAAC,MAAM,EAAE,GACX,CAAI,GAAsB,EAAE,GAAG,IAAe,EAAE,EAAE,CAClD,CAAC,CAAa,EAAE,EAAE,CACd,CAAC,CAAC,OAAO,CAAI,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAI9D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAItD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAGvD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAU,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEvF,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AAGxF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,yBAAyB,GAAG,0BAA0B,CAAC,MAAM,EAAE,CAAC;AACtE,MAAM,CAAC,MAAM,MAAM,GAAG,qBAAqB,CAAC,yBAAyB,CAAC,CAAC;AAEvE,MAAM,CAAC,MAAM,WAAW,GAAG,wBAAwB,CAAC,yBAAyB,CAAC,CAAC;AAC/E,MAAM,CAAC,MAAM,OAAO,GAAG,mBAAmB,CAAC,yBAAyB,CAAC,CAAC;AAEtE,MAAM,UAAU,SAAS,CAAI,KAAqB;IAC9C,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;AACpH,CAAC;AAED,MAAM,UAAU,SAAS,CAAI,KAAQ;IACjC,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,MAAM,CAAI,EAAwB;IAC9C,OAAO,IAAI,eAAe,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,MAAM,CAAC,MAAM,EAAE,GACX,CAAI,GAAsB,EAAE,GAAG,IAAe,EAAE,EAAE,CAClD,CAAC,CAAa,EAAE,EAAE,CACd,CAAC,CAAC,OAAO,CAAI,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-ioc-container",
3
- "version": "14.0.0",
3
+ "version": "14.0.2",
4
4
  "description": "Typescript IoC container",
5
5
  "author": "ibabkin <igba14@gmail.com>",
6
6
  "homepage": "https://github.com/IgorBabkin/service-locator/tree/master/packages/ts-ioc-container",
@@ -45,9 +45,9 @@
45
45
  "npm-run-all": "4.1.5",
46
46
  "reflect-metadata": "^0.1.13",
47
47
  "rimraf": "3.0.2",
48
- "ts-constructor-injector": "^3.0.0",
48
+ "ts-constructor-injector": "^3.0.1",
49
49
  "ts-jest": "27.0.5",
50
50
  "typescript": "4.4.3"
51
51
  },
52
- "gitHead": "c5930c206ad888f5676fb09b3e6f9f97fed80016"
52
+ "gitHead": "7896510f0b09f17a8cb1f5f2023b7810cabc36e0"
53
53
  }