ts-ioc-container 21.0.13 → 22.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.
Files changed (65) hide show
  1. package/README.md +40 -20
  2. package/cjm/container/AutoMockedContainer.d.ts +1 -0
  3. package/cjm/container/AutoMockedContainer.js +3 -0
  4. package/cjm/container/AutoMockedContainer.js.map +1 -1
  5. package/cjm/container/Container.d.ts +3 -3
  6. package/cjm/container/Container.js +6 -3
  7. package/cjm/container/Container.js.map +1 -1
  8. package/cjm/container/EmptyContainer.d.ts +1 -0
  9. package/cjm/container/EmptyContainer.js +3 -0
  10. package/cjm/container/EmptyContainer.js.map +1 -1
  11. package/cjm/container/IContainer.d.ts +5 -2
  12. package/cjm/index.d.ts +2 -9
  13. package/cjm/index.js +10 -48
  14. package/cjm/index.js.map +1 -1
  15. package/cjm/provider/IProvider.d.ts +1 -1
  16. package/cjm/provider/Provider.d.ts +0 -3
  17. package/cjm/provider/Provider.js +0 -12
  18. package/cjm/provider/Provider.js.map +1 -1
  19. package/cjm/provider/ProviderBuilder.d.ts +15 -0
  20. package/cjm/provider/ProviderBuilder.js +89 -0
  21. package/cjm/provider/ProviderBuilder.js.map +1 -0
  22. package/cjm/registration/Registration.d.ts +21 -4
  23. package/cjm/registration/Registration.js +116 -0
  24. package/cjm/registration/Registration.js.map +1 -1
  25. package/cjm/registration/RegistrationReflector.d.ts +3 -3
  26. package/cjm/registration/RegistrationReflector.js +2 -2
  27. package/cjm/registration/RegistrationReflector.js.map +1 -1
  28. package/cjm/utils.d.ts +3 -0
  29. package/cjm/utils.js +5 -1
  30. package/cjm/utils.js.map +1 -1
  31. package/esm/container/AutoMockedContainer.d.ts +1 -0
  32. package/esm/container/AutoMockedContainer.js +3 -0
  33. package/esm/container/AutoMockedContainer.js.map +1 -1
  34. package/esm/container/Container.d.ts +3 -3
  35. package/esm/container/Container.js +6 -2
  36. package/esm/container/Container.js.map +1 -1
  37. package/esm/container/EmptyContainer.d.ts +1 -0
  38. package/esm/container/EmptyContainer.js +3 -0
  39. package/esm/container/EmptyContainer.js.map +1 -1
  40. package/esm/container/IContainer.d.ts +5 -2
  41. package/esm/index.d.ts +2 -9
  42. package/esm/index.js +2 -25
  43. package/esm/index.js.map +1 -1
  44. package/esm/provider/IProvider.d.ts +1 -1
  45. package/esm/provider/Provider.d.ts +0 -3
  46. package/esm/provider/Provider.js +0 -6
  47. package/esm/provider/Provider.js.map +1 -1
  48. package/esm/provider/ProviderBuilder.d.ts +15 -0
  49. package/esm/{registration/RegistrationBuilder.js → provider/ProviderBuilder.js} +16 -14
  50. package/esm/provider/ProviderBuilder.js.map +1 -0
  51. package/esm/registration/Registration.d.ts +21 -4
  52. package/esm/registration/Registration.js +56 -1
  53. package/esm/registration/Registration.js.map +1 -1
  54. package/esm/registration/RegistrationReflector.d.ts +3 -3
  55. package/esm/registration/RegistrationReflector.js +3 -3
  56. package/esm/registration/RegistrationReflector.js.map +1 -1
  57. package/esm/utils.d.ts +3 -0
  58. package/esm/utils.js +3 -0
  59. package/esm/utils.js.map +1 -1
  60. package/package.json +2 -2
  61. package/cjm/registration/RegistrationBuilder.d.ts +0 -14
  62. package/cjm/registration/RegistrationBuilder.js +0 -56
  63. package/cjm/registration/RegistrationBuilder.js.map +0 -1
  64. package/esm/registration/RegistrationBuilder.d.ts +0 -14
  65. package/esm/registration/RegistrationBuilder.js.map +0 -1
package/README.md CHANGED
@@ -38,8 +38,9 @@ yarn add ts-ioc-container ts-constructor-injector reflect-metadata
38
38
  How to create new container
39
39
 
40
40
  ```typescript
41
- import { Container, IContainer, IInjector, fromClass } from "ts-ioc-container";
41
+ import { Container, IContainer, IInjector } from "ts-ioc-container";
42
42
  import { resolve } from 'ts-constructor-injector';
43
+ import { ProviderBuilder } from "ts-ioc-container/lib";
43
44
 
44
45
  class Logger {
45
46
  info(message: string) {
@@ -53,44 +54,63 @@ const injector: IInjector = {
53
54
  },
54
55
  };
55
56
 
56
- const container = new Container(injector);
57
- container.register(fromClass(Logger).forKey('ILogger').build());
57
+ const container = new Container(injector)
58
+ .register('ILogger', ProviderBuilder.fromClass(Logger).build());
58
59
  const logger = container.resolve<ILogger>('ILogger');
59
60
  logger.info('Hello world');
60
61
  ```
61
62
 
62
- ## Registration builder
63
+ ## Provider builder
63
64
 
64
65
  ```typescript
65
- import { fromClass, fromFn, fromValue } from "ts-ioc-container";
66
+ import { ProviderBuilder } from "ts-ioc-container";
66
67
 
67
68
  const container = new Container(injector, { tags: ['root'] });
68
- container.register(fromFn((container, ...args) => new Logger(...args)).forKey('ILogger').build());
69
+ container.register('ILogger', ProviderBuilder.fromFn((container, ...args) => new Logger(...args)).build());
69
70
 
70
71
  // Available only in root scope and all his children
71
- container.register(fromClass(Logger).forKey('ILogger').perTags('root').build());
72
+ container.register('ILogger', ProviderBuilder.fromClass(Logger).perTags('root').build());
72
73
 
73
74
  // Singleton per root tag and all his children
74
- container.register(fromClass(Logger).forKey('ILogger').asSingleton().perTags('root').build());
75
+ container.register('ILogger', ProviderBuilder.fromClass(Logger).asSingleton().perTags('root').build());
75
76
  // OR
76
- container.register(fromClass(Logger).forKey('ILogger').asSingleton('root').build());
77
+ container.register('ILogger', ProviderBuilder.fromClass(Logger).asSingleton('root').build());
77
78
 
78
79
  // singleton for scope with tag1 or tag2
79
- container.register(fromClass(Logger).forKey('ILogger').asSingleton('tag1', 'tag2').build());
80
+ container.register('ILogger', ProviderBuilder.fromClass(Logger).asSingleton('tag1', 'tag2').build());
80
81
 
81
82
  // singleton in every scope
82
- container.register(fromClass(Logger).forKey('ILogger').withArgs('dev').asSingleton().build());
83
+ container.register('ILogger', ProviderBuilder.fromClass(Logger).withArgs('dev').asSingleton().build());
83
84
 
84
85
  // singleton in every scope
85
- container.register(fromClass(Logger).forKey('ILogger').withArgsFn((container) => [container.resolve('isTestEnv') ? 'dev' : 'prod']).asSingleton().build());
86
+ container.register('ILogger', ProviderBuilder.fromClass(Logger).withArgsFn((container) => [container.resolve('isTestEnv') ? 'dev' : 'prod']).asSingleton().build());
87
+
88
+ container.register('ILogger', ProviderBuilder.fromValue(new Logger()).build());
89
+ ```
86
90
 
87
- container.register(fromValue(new Logger()).forKey('ILogger').build());
91
+ ## Registration module (Provider + ProviderKey)
92
+
93
+ ```typescript
94
+ import { asSingleton, forKey, Registration } from "ts-ioc-container";
95
+
96
+ @forKey('ILogger')
97
+ @asSingleton('root')
98
+ class Logger {
99
+ info(message: string) {
100
+ console.log(message);
101
+ }
102
+ }
103
+
104
+ const container = new Container(injector, { tags: ['root'] })
105
+ .add(Registration.fromClass(Logger));
106
+ const logger = container.resolve<ILogger>('ILogger');
107
+ logger.info('Hello world');
88
108
  ```
89
109
 
90
110
  ## Decorators
91
111
 
92
112
  ```typescript
93
- import { asSingleton, perTags, forKey, by } from "ts-ioc-container";
113
+ import { asSingleton, perTags, forKey, by, Registration } from "ts-ioc-container";
94
114
  import { composeDecorators, inject } from "ts-constructor-injector";
95
115
 
96
116
  @forKey('IEngine')
@@ -115,7 +135,7 @@ class Engine {
115
135
  }
116
136
 
117
137
  const container = new Container(injector, { tags: ['root'] })
118
- .register(fromClass(Engine).build());
138
+ .add(Registration.fromClass(Engine));
119
139
  ```
120
140
 
121
141
  ## Hooks
@@ -126,7 +146,7 @@ import {
126
146
  IInjector,
127
147
  ContainerHook,
128
148
  Injector,
129
- fromClass
149
+ Registration,
130
150
  } from "ts-ioc-container";
131
151
  import { MethodReflector } from "ts-constructor-injector";
132
152
 
@@ -158,7 +178,7 @@ const injector: IInjector = {
158
178
  }
159
179
 
160
180
  const container = new Container(injector)
161
- .register(fromClass(Logger).build());
181
+ .add(Registration.fromClass(Logger));
162
182
  const logger = container.resolve<ILogger>('ILogger'); // initialized
163
183
  for (const instance of container.getInstances()) {
164
184
  onDisposeReflector.invokeHooksOf(instance); // disposed
@@ -171,7 +191,7 @@ for (const instance of container.getInstances()) {
171
191
 
172
192
  ```typescript
173
193
  import { composeDecorators } from "ts-constructor-injector";
174
- import { forKey } from "ts-ioc-container";
194
+ import { forKey, Registration } from "ts-ioc-container";
175
195
 
176
196
  @asSingleton('root')
177
197
  @forKey('IEngine')
@@ -186,8 +206,8 @@ class Engine {
186
206
  }
187
207
 
188
208
  const container = new Container(injector, { tags: ['root'] })
189
- .register(fromClass(Logger).build())
190
- .register(fromClass(Engine).build());
209
+ .add(Registration.fromClass(Logger))
210
+ .add(Registration.fromClass(Engine));
191
211
 
192
212
  const scope = container.createScope(['home', 'child']);
193
213
  const logger = scope.resolve('ILogger');
@@ -7,4 +7,5 @@ export declare abstract class AutoMockedContainer implements IContainer {
7
7
  register(): this;
8
8
  getInstances(): unknown[];
9
9
  removeScope(): void;
10
+ add(): this;
10
11
  }
@@ -18,6 +18,9 @@ var AutoMockedContainer = /** @class */ (function () {
18
18
  return [];
19
19
  };
20
20
  AutoMockedContainer.prototype.removeScope = function () { };
21
+ AutoMockedContainer.prototype.add = function () {
22
+ throw new index_1.MethodNotImplementedError();
23
+ };
21
24
  return AutoMockedContainer;
22
25
  }());
23
26
  exports.AutoMockedContainer = AutoMockedContainer;
@@ -1 +1 @@
1
- {"version":3,"file":"AutoMockedContainer.js","sourceRoot":"","sources":["../../lib/container/AutoMockedContainer.ts"],"names":[],"mappings":";;;AAAA,kCAAyG;AAEzG;IAAA;IAsBA,CAAC;IArBG,yCAAW,GAAX;QACI,MAAM,IAAI,iCAAyB,EAAE,CAAC;IAC1C,CAAC;IAMD,0CAAY,GAAZ;QACI,OAAO,IAAI,GAAG,EAAE,CAAC;IACrB,CAAC;IAED,sCAAQ,GAAR;QACI,MAAM,IAAI,iCAAyB,EAAE,CAAC;IAC1C,CAAC;IAED,0CAAY,GAAZ;QACI,OAAO,EAAE,CAAC;IACd,CAAC;IAED,yCAAW,GAAX,cAAqB,CAAC;IAC1B,0BAAC;AAAD,CAAC,AAtBD,IAsBC;AAtBqB,kDAAmB"}
1
+ {"version":3,"file":"AutoMockedContainer.js","sourceRoot":"","sources":["../../lib/container/AutoMockedContainer.ts"],"names":[],"mappings":";;;AAAA,kCAAyG;AAEzG;IAAA;IA0BA,CAAC;IAzBG,yCAAW,GAAX;QACI,MAAM,IAAI,iCAAyB,EAAE,CAAC;IAC1C,CAAC;IAMD,0CAAY,GAAZ;QACI,OAAO,IAAI,GAAG,EAAE,CAAC;IACrB,CAAC;IAED,sCAAQ,GAAR;QACI,MAAM,IAAI,iCAAyB,EAAE,CAAC;IAC1C,CAAC;IAED,0CAAY,GAAZ;QACI,OAAO,EAAE,CAAC;IACd,CAAC;IAED,yCAAW,GAAX,cAAqB,CAAC;IAEtB,iCAAG,GAAH;QACI,MAAM,IAAI,iCAAyB,EAAE,CAAC;IAC1C,CAAC;IACL,0BAAC;AAAD,CAAC,AA1BD,IA0BC;AA1BqB,kDAAmB"}
@@ -1,7 +1,6 @@
1
- import { IContainer, InjectionToken } from './IContainer';
1
+ import { IContainer, IModule, InjectionToken } from './IContainer';
2
2
  import { IInjector } from '../IInjector';
3
3
  import { IProvider, ProviderKey, Tag, Tagged } from '../provider/IProvider';
4
- import { Registration } from '../registration/Registration';
5
4
  export declare class Container implements IContainer, Tagged {
6
5
  private readonly injector;
7
6
  private readonly providers;
@@ -14,7 +13,7 @@ export declare class Container implements IContainer, Tagged {
14
13
  parent?: IContainer;
15
14
  tags?: Tag[];
16
15
  });
17
- register({ key, provider }: Registration): this;
16
+ register(key: ProviderKey, provider: IProvider): this;
18
17
  resolve<T>(key: InjectionToken<T>, ...args: unknown[]): T;
19
18
  private resolveByProvider;
20
19
  private resolveByInjector;
@@ -24,5 +23,6 @@ export declare class Container implements IContainer, Tagged {
24
23
  getInstances(): unknown[];
25
24
  removeScope(child: IContainer): void;
26
25
  hasTag(tag: Tag): boolean;
26
+ add(module: IModule): this;
27
27
  private validateContainer;
28
28
  }
@@ -53,8 +53,7 @@ var Container = /** @class */ (function () {
53
53
  this.parent = (_a = options.parent) !== null && _a !== void 0 ? _a : new EmptyContainer_1.EmptyContainer();
54
54
  this.tags = (_b = options.tags) !== null && _b !== void 0 ? _b : [];
55
55
  }
56
- Container.prototype.register = function (_a) {
57
- var key = _a.key, provider = _a.provider;
56
+ Container.prototype.register = function (key, provider) {
58
57
  this.validateContainer();
59
58
  this.providers.add(key, provider);
60
59
  return this;
@@ -95,7 +94,7 @@ var Container = /** @class */ (function () {
95
94
  for (var _b = __values(this.getProviders().entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
96
95
  var _d = __read(_c.value, 2), key = _d[0], provider = _d[1];
97
96
  if (provider.isValid(scope)) {
98
- scope.register({ key: key, provider: provider.clone() });
97
+ scope.register(key, provider.clone());
99
98
  }
100
99
  }
101
100
  }
@@ -158,6 +157,10 @@ var Container = /** @class */ (function () {
158
157
  Container.prototype.hasTag = function (tag) {
159
158
  return this.tags.includes(tag);
160
159
  };
160
+ Container.prototype.add = function (module) {
161
+ module.applyTo(this);
162
+ return this;
163
+ };
161
164
  Container.prototype.validateContainer = function () {
162
165
  ContainerDisposedError_1.ContainerDisposedError.assert(!this.isDisposed, 'Container is already disposed');
163
166
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Container.js","sourceRoot":"","sources":["../../lib/container/Container.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Container.js","sourceRoot":"","sources":["../../lib/container/Container.ts"],"names":[],"mappings":"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"}
@@ -8,4 +8,5 @@ export declare class EmptyContainer implements IContainer {
8
8
  getProviders(): Map<ProviderKey, IProvider>;
9
9
  getInstances(): unknown[];
10
10
  removeScope(): void;
11
+ add(): this;
11
12
  }
@@ -25,6 +25,9 @@ var EmptyContainer = /** @class */ (function () {
25
25
  return [];
26
26
  };
27
27
  EmptyContainer.prototype.removeScope = function () { };
28
+ EmptyContainer.prototype.add = function () {
29
+ throw new MethodNotImplementedError_1.MethodNotImplementedError();
30
+ };
28
31
  return EmptyContainer;
29
32
  }());
30
33
  exports.EmptyContainer = EmptyContainer;
@@ -1 +1 @@
1
- {"version":3,"file":"EmptyContainer.js","sourceRoot":"","sources":["../../lib/container/EmptyContainer.ts"],"names":[],"mappings":";;;AACA,0EAAyE;AACzE,2EAA0E;AAG1E;IAAA;IA0BA,CAAC;IAzBG,oCAAW,GAAX;QACI,MAAM,IAAI,qDAAyB,EAAE,CAAC;IAC1C,CAAC;IAED,gCAAO,GAAP;QACI,MAAM,IAAI,qDAAyB,EAAE,CAAC;IAC1C,CAAC;IAED,iCAAQ,GAAR;QACI,MAAM,IAAI,qDAAyB,EAAE,CAAC;IAC1C,CAAC;IAED,gCAAO,GAAP,UAAW,GAAsB;QAC7B,MAAM,IAAI,6CAAqB,CAAC,iBAAe,GAAG,CAAC,QAAQ,EAAI,CAAC,CAAC;IACrE,CAAC;IAED,qCAAY,GAAZ;QACI,OAAO,IAAI,GAAG,EAAE,CAAC;IACrB,CAAC;IAED,qCAAY,GAAZ;QACI,OAAO,EAAE,CAAC;IACd,CAAC;IAED,oCAAW,GAAX,cAAqB,CAAC;IAC1B,qBAAC;AAAD,CAAC,AA1BD,IA0BC;AA1BY,wCAAc"}
1
+ {"version":3,"file":"EmptyContainer.js","sourceRoot":"","sources":["../../lib/container/EmptyContainer.ts"],"names":[],"mappings":";;;AACA,0EAAyE;AACzE,2EAA0E;AAG1E;IAAA;IA8BA,CAAC;IA7BG,oCAAW,GAAX;QACI,MAAM,IAAI,qDAAyB,EAAE,CAAC;IAC1C,CAAC;IAED,gCAAO,GAAP;QACI,MAAM,IAAI,qDAAyB,EAAE,CAAC;IAC1C,CAAC;IAED,iCAAQ,GAAR;QACI,MAAM,IAAI,qDAAyB,EAAE,CAAC;IAC1C,CAAC;IAED,gCAAO,GAAP,UAAW,GAAsB;QAC7B,MAAM,IAAI,6CAAqB,CAAC,iBAAe,GAAG,CAAC,QAAQ,EAAI,CAAC,CAAC;IACrE,CAAC;IAED,qCAAY,GAAZ;QACI,OAAO,IAAI,GAAG,EAAE,CAAC;IACrB,CAAC;IAED,qCAAY,GAAZ;QACI,OAAO,EAAE,CAAC;IACd,CAAC;IAED,oCAAW,GAAX,cAAqB,CAAC;IAEtB,4BAAG,GAAH;QACI,MAAM,IAAI,qDAAyB,EAAE,CAAC;IAC1C,CAAC;IACL,qBAAC;AAAD,CAAC,AA9BD,IA8BC;AA9BY,wCAAc"}
@@ -1,15 +1,18 @@
1
1
  import { IProvider, ProviderKey, Tag } from '../provider/IProvider';
2
2
  import { constructor } from '../utils';
3
- import { Registration } from '../registration/Registration';
4
3
  export declare type InjectionToken<T = unknown> = constructor<T> | ProviderKey;
5
4
  export interface Resolvable {
6
5
  resolve<T>(key: InjectionToken<T>, ...args: unknown[]): T;
7
6
  }
7
+ export interface IModule {
8
+ applyTo(container: IContainer): void;
9
+ }
8
10
  export interface IContainer extends Resolvable {
9
11
  createScope(tags?: Tag[]): IContainer;
10
- register(value: Registration): this;
12
+ register(key: ProviderKey, value: IProvider): this;
11
13
  getProviders(): Map<ProviderKey, IProvider>;
12
14
  removeScope(child: IContainer): void;
13
15
  getInstances(): unknown[];
14
16
  dispose(): void;
17
+ add(module: IModule): this;
15
18
  }
package/cjm/index.d.ts CHANGED
@@ -1,7 +1,4 @@
1
1
  import { IContainer, InjectionToken } from './container/IContainer';
2
- import { ProviderKey, ResolveDependency, Tag } from './provider/IProvider';
3
- import { constructor } from './utils';
4
- import { RegistrationBuilder } from './registration/RegistrationBuilder';
5
2
  export { IContainer, Resolvable } from './container/IContainer';
6
3
  export { EmptyContainer } from './container/EmptyContainer';
7
4
  export { constructor } from './utils';
@@ -16,11 +13,7 @@ export { Provider } from './provider/Provider';
16
13
  export { ArgsFn } from './provider/ArgsProvider';
17
14
  export { AutoMockedContainer } from './container/AutoMockedContainer';
18
15
  export { ProviderKey } from './provider/IProvider';
16
+ export { ProviderBuilder } from './provider/ProviderBuilder';
19
17
  export { isProviderKey } from './provider/IProvider';
18
+ export { perTags, forKey, asSingleton, Registration } from './registration/Registration';
20
19
  export declare const by: <T>(key: InjectionToken<T>, ...args: unknown[]) => (l: IContainer) => T;
21
- export declare function fromClass<T>(Target: constructor<T>): RegistrationBuilder<T>;
22
- export declare function fromValue<T>(value: T): RegistrationBuilder<T>;
23
- export declare function fromFn<T>(fn: ResolveDependency<T>): RegistrationBuilder<T>;
24
- export declare const perTags: (...tags: Tag[]) => ClassDecorator;
25
- export declare const asSingleton: (...tags: Tag[]) => ClassDecorator;
26
- export declare const forKey: (key: ProviderKey) => ClassDecorator;
package/cjm/index.js CHANGED
@@ -25,11 +25,7 @@ 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.forKey = exports.asSingleton = exports.perTags = exports.fromFn = exports.fromValue = exports.fromClass = exports.by = exports.isProviderKey = exports.AutoMockedContainer = exports.Provider = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.ProviderNotFoundError = exports.Container = exports.EmptyContainer = void 0;
29
- var Provider_1 = require("./provider/Provider");
30
- var RegistrationReflector_1 = require("./registration/RegistrationReflector");
31
- var utils_1 = require("./utils");
32
- var RegistrationBuilder_1 = require("./registration/RegistrationBuilder");
28
+ exports.by = exports.Registration = exports.asSingleton = exports.forKey = exports.perTags = exports.isProviderKey = exports.ProviderBuilder = exports.AutoMockedContainer = exports.Provider = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.ProviderNotFoundError = exports.Container = exports.EmptyContainer = void 0;
33
29
  var EmptyContainer_1 = require("./container/EmptyContainer");
34
30
  Object.defineProperty(exports, "EmptyContainer", { enumerable: true, get: function () { return EmptyContainer_1.EmptyContainer; } });
35
31
  var Container_1 = require("./container/Container");
@@ -40,13 +36,19 @@ var MethodNotImplementedError_1 = require("./MethodNotImplementedError");
40
36
  Object.defineProperty(exports, "MethodNotImplementedError", { enumerable: true, get: function () { return MethodNotImplementedError_1.MethodNotImplementedError; } });
41
37
  var ContainerDisposedError_1 = require("./container/ContainerDisposedError");
42
38
  Object.defineProperty(exports, "ContainerDisposedError", { enumerable: true, get: function () { return ContainerDisposedError_1.ContainerDisposedError; } });
43
- var Provider_2 = require("./provider/Provider");
44
- Object.defineProperty(exports, "Provider", { enumerable: true, get: function () { return Provider_2.Provider; } });
39
+ var Provider_1 = require("./provider/Provider");
40
+ Object.defineProperty(exports, "Provider", { enumerable: true, get: function () { return Provider_1.Provider; } });
45
41
  var AutoMockedContainer_1 = require("./container/AutoMockedContainer");
46
42
  Object.defineProperty(exports, "AutoMockedContainer", { enumerable: true, get: function () { return AutoMockedContainer_1.AutoMockedContainer; } });
43
+ var ProviderBuilder_1 = require("./provider/ProviderBuilder");
44
+ Object.defineProperty(exports, "ProviderBuilder", { enumerable: true, get: function () { return ProviderBuilder_1.ProviderBuilder; } });
47
45
  var IProvider_1 = require("./provider/IProvider");
48
46
  Object.defineProperty(exports, "isProviderKey", { enumerable: true, get: function () { return IProvider_1.isProviderKey; } });
49
- var providerReflector = new RegistrationReflector_1.RegistrationReflector();
47
+ var Registration_1 = require("./registration/Registration");
48
+ Object.defineProperty(exports, "perTags", { enumerable: true, get: function () { return Registration_1.perTags; } });
49
+ Object.defineProperty(exports, "forKey", { enumerable: true, get: function () { return Registration_1.forKey; } });
50
+ Object.defineProperty(exports, "asSingleton", { enumerable: true, get: function () { return Registration_1.asSingleton; } });
51
+ Object.defineProperty(exports, "Registration", { enumerable: true, get: function () { return Registration_1.Registration; } });
50
52
  var by = function (key) {
51
53
  var args = [];
52
54
  for (var _i = 1; _i < arguments.length; _i++) {
@@ -57,44 +59,4 @@ var by = function (key) {
57
59
  };
58
60
  };
59
61
  exports.by = by;
60
- function fromClass(Target) {
61
- var _a;
62
- var map = (_a = providerReflector.getMapper(Target)) !== null && _a !== void 0 ? _a : utils_1.identity;
63
- return map(new RegistrationBuilder_1.RegistrationBuilder(Provider_1.Provider.fromClass(Target)));
64
- }
65
- exports.fromClass = fromClass;
66
- function fromValue(value) {
67
- return new RegistrationBuilder_1.RegistrationBuilder(Provider_1.Provider.fromValue(value));
68
- }
69
- exports.fromValue = fromValue;
70
- function fromFn(fn) {
71
- return new RegistrationBuilder_1.RegistrationBuilder(new Provider_1.Provider(fn));
72
- }
73
- exports.fromFn = fromFn;
74
- var perTags = function () {
75
- var tags = [];
76
- for (var _i = 0; _i < arguments.length; _i++) {
77
- tags[_i] = arguments[_i];
78
- }
79
- return function (target) {
80
- providerReflector.appendMapper(target, function (builder) { return builder.perTags.apply(builder, __spreadArray([], __read(tags), false)); });
81
- };
82
- };
83
- exports.perTags = perTags;
84
- var asSingleton = function () {
85
- var tags = [];
86
- for (var _i = 0; _i < arguments.length; _i++) {
87
- tags[_i] = arguments[_i];
88
- }
89
- return function (target) {
90
- providerReflector.appendMapper(target, function (builder) { return builder.asSingleton.apply(builder, __spreadArray([], __read(tags), false)); });
91
- };
92
- };
93
- exports.asSingleton = asSingleton;
94
- var forKey = function (key) {
95
- return function (target) {
96
- providerReflector.appendMapper(target, function (builder) { return builder.forKey(key); });
97
- };
98
- };
99
- exports.forKey = forKey;
100
62
  //# sourceMappingURL=index.js.map
package/cjm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,gDAA+C;AAC/C,8EAA6E;AAC7E,iCAAgD;AAChD,0EAAyE;AAGzE,6DAA4D;AAAnD,gHAAA,cAAc,OAAA;AAEvB,mDAAkD;AAAzC,sGAAA,SAAS,OAAA;AAIlB,0EAAyE;AAAhE,8HAAA,qBAAqB,OAAA;AAC9B,yEAAwE;AAA/D,sIAAA,yBAAyB,OAAA;AAClC,6EAA4E;AAAnE,gIAAA,sBAAsB,OAAA;AAC/B,gDAA+C;AAAtC,oGAAA,QAAQ,OAAA;AAEjB,uEAAsE;AAA7D,0HAAA,mBAAmB,OAAA;AAE5B,kDAAqD;AAA5C,0GAAA,aAAa,OAAA;AAEtB,IAAM,iBAAiB,GAAG,IAAI,6CAAqB,EAAE,CAAC;AAE/C,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;AAEnC,SAAgB,SAAS,CAAI,MAAsB;;IAC/C,IAAM,GAAG,GAAG,MAAA,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,mCAAI,gBAAQ,CAAC;IAC5D,OAAO,GAAG,CAAC,IAAI,yCAAmB,CAAC,mBAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAHD,8BAGC;AAED,SAAgB,SAAS,CAAI,KAAQ;IACjC,OAAO,IAAI,yCAAmB,CAAC,mBAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9D,CAAC;AAFD,8BAEC;AAED,SAAgB,MAAM,CAAI,EAAwB;IAC9C,OAAO,IAAI,yCAAmB,CAAC,IAAI,mBAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AACrD,CAAC;AAFD,wBAEC;AAEM,IAAM,OAAO,GAChB;IAAC,cAAc;SAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;QAAd,yBAAc;;IACf,OAAA,UAAC,MAAW;QACR,iBAAiB,CAAC,YAAY,CAAC,MAAM,EAAE,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,OAAO,OAAf,OAAO,2BAAY,IAAI,YAAvB,CAAwB,CAAC,CAAC;IAClF,CAAC;AAFD,CAEC,CAAC;AAJO,QAAA,OAAO,WAId;AAEC,IAAM,WAAW,GACpB;IAAC,cAAc;SAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;QAAd,yBAAc;;IACf,OAAA,UAAC,MAAW;QACR,iBAAiB,CAAC,YAAY,CAAC,MAAM,EAAE,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,WAAW,OAAnB,OAAO,2BAAgB,IAAI,YAA3B,CAA4B,CAAC,CAAC;IACtF,CAAC;AAFD,CAEC,CAAC;AAJO,QAAA,WAAW,eAIlB;AAEC,IAAM,MAAM,GACf,UAAC,GAAgB;IACjB,OAAA,UAAC,MAAW;QACR,iBAAiB,CAAC,YAAY,CAAC,MAAM,EAAE,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAnB,CAAmB,CAAC,CAAC;IAC7E,CAAC;AAFD,CAEC,CAAC;AAJO,QAAA,MAAM,UAIb"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,6DAA4D;AAAnD,gHAAA,cAAc,OAAA;AAEvB,mDAAkD;AAAzC,sGAAA,SAAS,OAAA;AAIlB,0EAAyE;AAAhE,8HAAA,qBAAqB,OAAA;AAC9B,yEAAwE;AAA/D,sIAAA,yBAAyB,OAAA;AAClC,6EAA4E;AAAnE,gIAAA,sBAAsB,OAAA;AAC/B,gDAA+C;AAAtC,oGAAA,QAAQ,OAAA;AAEjB,uEAAsE;AAA7D,0HAAA,mBAAmB,OAAA;AAE5B,8DAA6D;AAApD,kHAAA,eAAe,OAAA;AACxB,kDAAqD;AAA5C,0GAAA,aAAa,OAAA;AACtB,4DAAyF;AAAhF,uGAAA,OAAO,OAAA;AAAE,sGAAA,MAAM,OAAA;AAAE,2GAAA,WAAW,OAAA;AAAE,4GAAA,YAAY,OAAA;AAE5C,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,5 +1,5 @@
1
1
  import { InjectionToken, Resolvable } from '../container/IContainer';
2
- export declare type ResolveDependency<T> = (container: Resolvable, ...args: unknown[]) => T;
2
+ export declare type ResolveDependency<T = unknown> = (container: Resolvable, ...args: unknown[]) => T;
3
3
  export declare type Tag = string;
4
4
  export interface Tagged {
5
5
  hasTag(tag: Tag): boolean;
@@ -1,10 +1,7 @@
1
- import { constructor } from '../utils';
2
1
  import { IProvider, ResolveDependency } from './IProvider';
3
2
  import { Resolvable } from '../container/IContainer';
4
3
  export declare class Provider<T> implements IProvider<T> {
5
4
  private readonly resolveDependency;
6
- static fromClass<T>(value: constructor<T>): Provider<T>;
7
- static fromValue<T>(value: T): Provider<T>;
8
5
  constructor(resolveDependency: ResolveDependency<T>);
9
6
  clone(): Provider<T>;
10
7
  resolve(container: Resolvable, ...args: unknown[]): T;
@@ -30,18 +30,6 @@ var Provider = /** @class */ (function () {
30
30
  function Provider(resolveDependency) {
31
31
  this.resolveDependency = resolveDependency;
32
32
  }
33
- Provider.fromClass = function (value) {
34
- return new Provider(function (container) {
35
- var args = [];
36
- for (var _i = 1; _i < arguments.length; _i++) {
37
- args[_i - 1] = arguments[_i];
38
- }
39
- return container.resolve.apply(container, __spreadArray([value], __read(args), false));
40
- });
41
- };
42
- Provider.fromValue = function (value) {
43
- return new Provider(function () { return value; });
44
- };
45
33
  Provider.prototype.clone = function () {
46
34
  return new Provider(this.resolveDependency);
47
35
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Provider.js","sourceRoot":"","sources":["../../lib/provider/Provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;IASI,kBAA6B,iBAAuC;QAAvC,sBAAiB,GAAjB,iBAAiB,CAAsB;IAAG,CAAC;IARjE,kBAAS,GAAhB,UAAoB,KAAqB;QACrC,OAAO,IAAI,QAAQ,CAAC,UAAC,SAAS;YAAE,cAAO;iBAAP,UAAO,EAAP,qBAAO,EAAP,IAAO;gBAAP,6BAAO;;YAAK,OAAA,SAAS,CAAC,OAAO,OAAjB,SAAS,iBAAS,KAAK,UAAK,IAAI;QAAhC,CAAiC,CAAC,CAAC;IACnF,CAAC;IAEM,kBAAS,GAAhB,UAAoB,KAAQ;QACxB,OAAO,IAAI,QAAQ,CAAC,cAAM,OAAA,KAAK,EAAL,CAAK,CAAC,CAAC;IACrC,CAAC;IAID,wBAAK,GAAL;QACI,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC;IAED,0BAAO,GAAP,UAAQ,SAAqB;QAAE,cAAkB;aAAlB,UAAkB,EAAlB,qBAAkB,EAAlB,IAAkB;YAAlB,6BAAkB;;QAC7C,OAAO,IAAI,CAAC,iBAAiB,OAAtB,IAAI,iBAAmB,SAAS,UAAK,IAAI,WAAE;IACtD,CAAC;IAED,0BAAO,GAAP,cAAiB,CAAC;IAElB,0BAAO,GAAP;QACI,OAAO,IAAI,CAAC;IAChB,CAAC;IACL,eAAC;AAAD,CAAC,AAxBD,IAwBC;AAxBY,4BAAQ"}
1
+ {"version":3,"file":"Provider.js","sourceRoot":"","sources":["../../lib/provider/Provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;IACI,kBAA6B,iBAAuC;QAAvC,sBAAiB,GAAjB,iBAAiB,CAAsB;IAAG,CAAC;IAExE,wBAAK,GAAL;QACI,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC;IAED,0BAAO,GAAP,UAAQ,SAAqB;QAAE,cAAkB;aAAlB,UAAkB,EAAlB,qBAAkB,EAAlB,IAAkB;YAAlB,6BAAkB;;QAC7C,OAAO,IAAI,CAAC,iBAAiB,OAAtB,IAAI,iBAAmB,SAAS,UAAK,IAAI,WAAE;IACtD,CAAC;IAED,0BAAO,GAAP,cAAiB,CAAC;IAElB,0BAAO,GAAP;QACI,OAAO,IAAI,CAAC;IAChB,CAAC;IACL,eAAC;AAAD,CAAC,AAhBD,IAgBC;AAhBY,4BAAQ"}
@@ -0,0 +1,15 @@
1
+ import { IProvider, ResolveDependency, Tag } from './IProvider';
2
+ import { ArgsFn } from './ArgsProvider';
3
+ import { constructor } from '../utils';
4
+ export declare class ProviderBuilder {
5
+ private provider;
6
+ static fromClass(Target: constructor<unknown>): ProviderBuilder;
7
+ static fromValue(value: unknown): ProviderBuilder;
8
+ static fromFn(fn: ResolveDependency): ProviderBuilder;
9
+ constructor(provider: IProvider);
10
+ withArgs(...extraArgs: unknown[]): this;
11
+ withArgsFn(argsFn: ArgsFn): this;
12
+ perTags(...tags: Tag[]): this;
13
+ asSingleton(...tags: Tag[]): this;
14
+ build(): IProvider<unknown>;
15
+ }
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __read = (this && this.__read) || function (o, n) {
3
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
4
+ if (!m) return o;
5
+ var i = m.call(o), r, ar = [], e;
6
+ try {
7
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
+ }
9
+ catch (error) { e = { error: error }; }
10
+ finally {
11
+ try {
12
+ if (r && !r.done && (m = i["return"])) m.call(i);
13
+ }
14
+ finally { if (e) throw e.error; }
15
+ }
16
+ return ar;
17
+ };
18
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
19
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
20
+ if (ar || !(i in from)) {
21
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
22
+ ar[i] = from[i];
23
+ }
24
+ }
25
+ return to.concat(ar || Array.prototype.slice.call(from));
26
+ };
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.ProviderBuilder = void 0;
29
+ var ArgsProvider_1 = require("./ArgsProvider");
30
+ var TaggedProvider_1 = require("./TaggedProvider");
31
+ var SingletonProvider_1 = require("./SingletonProvider");
32
+ var Provider_1 = require("./Provider");
33
+ var ProviderBuilder = /** @class */ (function () {
34
+ function ProviderBuilder(provider) {
35
+ this.provider = provider;
36
+ }
37
+ ProviderBuilder.fromClass = function (Target) {
38
+ return new ProviderBuilder(new Provider_1.Provider(function (container) {
39
+ var args = [];
40
+ for (var _i = 1; _i < arguments.length; _i++) {
41
+ args[_i - 1] = arguments[_i];
42
+ }
43
+ return container.resolve.apply(container, __spreadArray([Target], __read(args), false));
44
+ }));
45
+ };
46
+ ProviderBuilder.fromValue = function (value) {
47
+ return new ProviderBuilder(new Provider_1.Provider(function () { return value; }));
48
+ };
49
+ ProviderBuilder.fromFn = function (fn) {
50
+ return new ProviderBuilder(new Provider_1.Provider(fn));
51
+ };
52
+ ProviderBuilder.prototype.withArgs = function () {
53
+ var extraArgs = [];
54
+ for (var _i = 0; _i < arguments.length; _i++) {
55
+ extraArgs[_i] = arguments[_i];
56
+ }
57
+ this.provider = new ArgsProvider_1.ArgsProvider(this.provider, function () { return extraArgs; });
58
+ return this;
59
+ };
60
+ ProviderBuilder.prototype.withArgsFn = function (argsFn) {
61
+ this.provider = new ArgsProvider_1.ArgsProvider(this.provider, argsFn);
62
+ return this;
63
+ };
64
+ ProviderBuilder.prototype.perTags = function () {
65
+ var tags = [];
66
+ for (var _i = 0; _i < arguments.length; _i++) {
67
+ tags[_i] = arguments[_i];
68
+ }
69
+ this.provider = new TaggedProvider_1.TaggedProvider(this.provider, tags);
70
+ return this;
71
+ };
72
+ ProviderBuilder.prototype.asSingleton = function () {
73
+ var tags = [];
74
+ for (var _i = 0; _i < arguments.length; _i++) {
75
+ tags[_i] = arguments[_i];
76
+ }
77
+ this.provider = new SingletonProvider_1.SingletonProvider(this.provider);
78
+ if (tags.length > 0) {
79
+ this.provider = new TaggedProvider_1.TaggedProvider(this.provider, tags);
80
+ }
81
+ return this;
82
+ };
83
+ ProviderBuilder.prototype.build = function () {
84
+ return this.provider;
85
+ };
86
+ return ProviderBuilder;
87
+ }());
88
+ exports.ProviderBuilder = ProviderBuilder;
89
+ //# sourceMappingURL=ProviderBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProviderBuilder.js","sourceRoot":"","sources":["../../lib/provider/ProviderBuilder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+CAAsD;AACtD,mDAAkD;AAClD,yDAAwD;AAExD,uCAAsC;AAEtC;IAaI,yBAAoB,QAAmB;QAAnB,aAAQ,GAAR,QAAQ,CAAW;IAAG,CAAC;IAZpC,yBAAS,GAAhB,UAAiB,MAA4B;QACzC,OAAO,IAAI,eAAe,CAAC,IAAI,mBAAQ,CAAC,UAAC,SAAS;YAAE,cAAO;iBAAP,UAAO,EAAP,qBAAO,EAAP,IAAO;gBAAP,6BAAO;;YAAK,OAAA,SAAS,CAAC,OAAO,OAAjB,SAAS,iBAAS,MAAM,UAAK,IAAI;QAAjC,CAAkC,CAAC,CAAC,CAAC;IACzG,CAAC;IAEM,yBAAS,GAAhB,UAAiB,KAAc;QAC3B,OAAO,IAAI,eAAe,CAAC,IAAI,mBAAQ,CAAC,cAAM,OAAA,KAAK,EAAL,CAAK,CAAC,CAAC,CAAC;IAC1D,CAAC;IAEM,sBAAM,GAAb,UAAc,EAAqB;QAC/B,OAAO,IAAI,eAAe,CAAC,IAAI,mBAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAID,kCAAQ,GAAR;QAAS,mBAAuB;aAAvB,UAAuB,EAAvB,qBAAuB,EAAvB,IAAuB;YAAvB,8BAAuB;;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,2BAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAM,OAAA,SAAS,EAAT,CAAS,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,oCAAU,GAAV,UAAW,MAAc;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,2BAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,iCAAO,GAAP;QAAQ,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,yBAAc;;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,+BAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,qCAAW,GAAX;QAAY,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,yBAAc;;QACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,qCAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,+BAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SAC3D;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,+BAAK,GAAL;QACI,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IACL,sBAAC;AAAD,CAAC,AAzCD,IAyCC;AAzCY,0CAAe"}
@@ -1,5 +1,22 @@
1
- import { IProvider, ProviderKey } from '../provider/IProvider';
2
- export interface Registration<T = unknown> {
3
- key: ProviderKey;
4
- provider: IProvider<T>;
1
+ import { ProviderKey, ResolveDependency, Tag } from '../provider/IProvider';
2
+ import { ArgsFn } from '../provider/ArgsProvider';
3
+ import { IContainer, IModule } from '../container/IContainer';
4
+ import { ProviderBuilder } from '../provider/ProviderBuilder';
5
+ import { constructor } from '../utils';
6
+ export declare class Registration implements IModule {
7
+ private providerBuilder;
8
+ private key?;
9
+ static fromClass<T>(Target: constructor<T>): Registration;
10
+ static fromValue<T>(value: T): Registration;
11
+ static fromFn<T>(fn: ResolveDependency<T>): Registration;
12
+ constructor(providerBuilder: ProviderBuilder);
13
+ withArgs(...extraArgs: unknown[]): this;
14
+ withArgsFn(argsFn: ArgsFn): this;
15
+ perTags(...tags: Tag[]): this;
16
+ asSingleton(...tags: Tag[]): this;
17
+ forKey(key: ProviderKey): this;
18
+ applyTo(container: IContainer): void;
5
19
  }
20
+ export declare const perTags: (...tags: Tag[]) => ClassDecorator;
21
+ export declare const asSingleton: (...tags: Tag[]) => ClassDecorator;
22
+ export declare const forKey: (key: ProviderKey) => ClassDecorator;