ts-ioc-container 22.4.7 → 23.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 (52) hide show
  1. package/README.md +19 -24
  2. package/cjm/index.d.ts +5 -3
  3. package/cjm/index.js +13 -5
  4. package/cjm/index.js.map +1 -1
  5. package/cjm/provider/ArgsProvider.d.ts +3 -0
  6. package/cjm/provider/ArgsProvider.js +13 -1
  7. package/cjm/provider/ArgsProvider.js.map +1 -1
  8. package/cjm/provider/IProvider.d.ts +2 -0
  9. package/cjm/provider/Provider.d.ts +4 -2
  10. package/cjm/provider/Provider.js +22 -3
  11. package/cjm/provider/Provider.js.map +1 -1
  12. package/cjm/provider/ProviderDecorator.d.ts +2 -0
  13. package/cjm/provider/ProviderDecorator.js +7 -0
  14. package/cjm/provider/ProviderDecorator.js.map +1 -1
  15. package/cjm/provider/SingletonProvider.d.ts +2 -0
  16. package/cjm/provider/SingletonProvider.js +5 -1
  17. package/cjm/provider/SingletonProvider.js.map +1 -1
  18. package/cjm/provider/TaggedProvider.d.ts +2 -0
  19. package/cjm/provider/TaggedProvider.js +9 -1
  20. package/cjm/provider/TaggedProvider.js.map +1 -1
  21. package/cjm/registration/Registration.d.ts +7 -11
  22. package/cjm/registration/Registration.js +9 -31
  23. package/cjm/registration/Registration.js.map +1 -1
  24. package/esm/index.d.ts +5 -3
  25. package/esm/index.js +5 -2
  26. package/esm/index.js.map +1 -1
  27. package/esm/provider/ArgsProvider.d.ts +3 -0
  28. package/esm/provider/ArgsProvider.js +6 -0
  29. package/esm/provider/ArgsProvider.js.map +1 -1
  30. package/esm/provider/IProvider.d.ts +2 -0
  31. package/esm/provider/Provider.d.ts +4 -2
  32. package/esm/provider/Provider.js +8 -1
  33. package/esm/provider/Provider.js.map +1 -1
  34. package/esm/provider/ProviderDecorator.d.ts +2 -0
  35. package/esm/provider/ProviderDecorator.js +3 -0
  36. package/esm/provider/ProviderDecorator.js.map +1 -1
  37. package/esm/provider/SingletonProvider.d.ts +2 -0
  38. package/esm/provider/SingletonProvider.js +3 -0
  39. package/esm/provider/SingletonProvider.js.map +1 -1
  40. package/esm/provider/TaggedProvider.d.ts +2 -0
  41. package/esm/provider/TaggedProvider.js +3 -0
  42. package/esm/provider/TaggedProvider.js.map +1 -1
  43. package/esm/registration/Registration.d.ts +7 -11
  44. package/esm/registration/Registration.js +7 -19
  45. package/esm/registration/Registration.js.map +1 -1
  46. package/package.json +2 -2
  47. package/cjm/provider/ProviderBuilder.d.ts +0 -18
  48. package/cjm/provider/ProviderBuilder.js +0 -108
  49. package/cjm/provider/ProviderBuilder.js.map +0 -1
  50. package/esm/provider/ProviderBuilder.d.ts +0 -18
  51. package/esm/provider/ProviderBuilder.js +0 -46
  52. package/esm/provider/ProviderBuilder.js.map +0 -1
package/README.md CHANGED
@@ -39,7 +39,7 @@ yarn add ts-ioc-container ts-constructor-injector reflect-metadata
39
39
  How to create new container
40
40
 
41
41
  ```typescript
42
- import { Container, IContainer, IInjector, ProviderBuilder } from "ts-ioc-container";
42
+ import { Container, IContainer, IInjector, Provider } from "ts-ioc-container";
43
43
  import { resolve } from 'ts-constructor-injector';
44
44
 
45
45
  class Logger {
@@ -55,46 +55,44 @@ const injector: IInjector = {
55
55
  };
56
56
 
57
57
  const container = new Container(injector)
58
- .register('ILogger', ProviderBuilder.fromClass(Logger).build());
58
+ .register('ILogger', Provider.fromClass(Logger));
59
59
  const logger = container.resolve<ILogger>('ILogger');
60
60
  logger.info('Hello world');
61
61
  ```
62
62
 
63
- ## Provider builder
63
+ ## Provider
64
64
 
65
65
  ```typescript
66
- import { ProviderBuilder } from "ts-ioc-container";
66
+ import { Provider, asSingleton, perTags, withArgs, withArgsFn } from "ts-ioc-container";
67
67
 
68
68
  const container = new Container(injector, { tags: ['root'] });
69
- container.register('ILogger', ProviderBuilder.fromFn((container, ...args) => new Logger(...args)).build());
69
+ container.register('ILogger', new Provider((container, ...args) => new Logger(...args)));
70
70
 
71
71
  // Available only in root scope and all his children
72
- container.register('ILogger', ProviderBuilder.fromClass(Logger).perTags('root').build());
72
+ container.register('ILogger', Provider.fromClass(Logger).pipe(perTags('root')));
73
73
 
74
74
  // Singleton per root tag and all his children
75
- container.register('ILogger', ProviderBuilder.fromClass(Logger).asSingleton().perTags('root').build());
76
- // OR
77
- container.register('ILogger', ProviderBuilder.fromClass(Logger).asSingleton('root').build());
75
+ container.register('ILogger', Provider.fromClass(Logger).pipe(asSingleton(), perTags('root')));
78
76
 
79
77
  // singleton for scope with tag1 or tag2
80
- container.register('ILogger', ProviderBuilder.fromClass(Logger).asSingleton('tag1', 'tag2').build());
78
+ container.register('ILogger', Provider.fromClass(Logger).pipe(asSingleton(), perTags('tag1', 'tag2')));
81
79
 
82
80
  // singleton in every scope
83
- container.register('ILogger', ProviderBuilder.fromClass(Logger).withArgs('dev').asSingleton().build());
81
+ container.register('ILogger', Provider.fromClass(Logger).pipe(withArgs('dev'), asSingleton()));
84
82
 
85
83
  // singleton in every scope
86
- container.register('ILogger', ProviderBuilder.fromClass(Logger).withArgsFn((scope) => [scope.resolve('isTestEnv') ? 'dev' : 'prod']).asSingleton().build());
84
+ container.register('ILogger', Provider.fromClass(Logger).pipe(withArgsFn((scope) => [scope.resolve('isTestEnv') ? 'dev' : 'prod']), asSingleton()));
87
85
 
88
- container.register('ILogger', ProviderBuilder.fromValue(new Logger()).build());
86
+ container.register('ILogger', Provider.fromValue(new Logger()));
89
87
  ```
90
88
 
91
89
  ## Registration module (Provider + DependencyKey)
92
90
 
93
91
  ```typescript
94
- import { asSingleton, forKey, Registration } from "ts-ioc-container";
92
+ import { asSingleton, perTags, forKey, Registration } from "ts-ioc-container";
95
93
 
96
94
  @forKey('ILogger')
97
- @asSingleton('root')
95
+ @provider(asSingleton(), perTags('root'))
98
96
  class Logger {
99
97
  info(message: string) {
100
98
  console.log(message);
@@ -111,10 +109,10 @@ logger.info('Hello world');
111
109
 
112
110
  ```typescript
113
111
  import { asSingleton, perTags, forKey, by, Registration } from "ts-ioc-container";
114
- import { composeDecorators, inject } from "ts-constructor-injector";
112
+ import { inject } from "ts-constructor-injector";
115
113
 
116
114
  @forKey('IEngine')
117
- @asSingleton('root')
115
+ @provider(asSingleton(), perTags('root'))
118
116
  class Engine {
119
117
  constructor(@inject(by('ILogger')) private logger: ILogger) {
120
118
  }
@@ -122,10 +120,7 @@ class Engine {
122
120
 
123
121
  // OR
124
122
 
125
- const perRoot = composeDecorators(
126
- asSingleton(),
127
- perTags('root'),
128
- );
123
+ const perRoot = provider(asSingleton(), perTags('root'))
129
124
 
130
125
  @perRoot
131
126
  @forKey('IEngine')
@@ -191,15 +186,15 @@ for (const instance of container.getInstances()) {
191
186
 
192
187
  ```typescript
193
188
  import { composeDecorators } from "ts-constructor-injector";
194
- import { forKey, Registration } from "ts-ioc-container";
189
+ import { forKey, provider, Registration, asSingleton, perTags } from "ts-ioc-container";
195
190
 
196
- @asSingleton('root')
197
191
  @forKey('IEngine')
192
+ @provider(perTags('root'), asSingleton())
198
193
  class Logger {
199
194
  }
200
195
 
201
- @asSingleton('home')
202
196
  @forKey('IEngine')
197
+ @provider(perTags('home'), asSingleton())
203
198
  class Engine {
204
199
  constructor(@inject(by('ILogger')) private logger: ILogger) {
205
200
  }
package/cjm/index.d.ts CHANGED
@@ -8,9 +8,11 @@ export { IInjector } from './IInjector';
8
8
  export { DependencyNotFoundError } from './container/DependencyNotFoundError';
9
9
  export { MethodNotImplementedError } from './container/MethodNotImplementedError';
10
10
  export { ContainerDisposedError } from './container/ContainerDisposedError';
11
- export { Provider } from './provider/Provider';
12
- export { ArgsFn } from './provider/ArgsProvider';
11
+ export { Provider, provider } from './provider/Provider';
12
+ export { ArgsFn, withArgsFn, withArgs } from './provider/ArgsProvider';
13
+ export { SingletonProvider, asSingleton } from './provider/SingletonProvider';
14
+ export { TaggedProvider, perTags } from './provider/TaggedProvider';
13
15
  export { AutoMockedContainer } from './container/AutoMockedContainer';
14
- export { ProviderBuilder, perTags, asSingleton } from './provider/ProviderBuilder';
15
16
  export { forKey, Registration } from './registration/Registration';
17
+ export { DependencyMissingKeyError } from './registration/DependencyMissingKeyError';
16
18
  export declare const by: <T>(key: InjectionToken<T>, ...args: unknown[]) => (l: IContainer) => T;
package/cjm/index.js CHANGED
@@ -25,7 +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.by = exports.Registration = exports.forKey = exports.asSingleton = exports.perTags = exports.ProviderBuilder = exports.AutoMockedContainer = exports.Provider = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyNotFoundError = exports.Container = exports.EmptyContainer = exports.isDependencyKey = void 0;
28
+ exports.by = exports.DependencyMissingKeyError = exports.Registration = exports.forKey = exports.AutoMockedContainer = exports.perTags = exports.TaggedProvider = exports.asSingleton = exports.SingletonProvider = exports.withArgs = exports.withArgsFn = exports.provider = exports.Provider = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyNotFoundError = exports.Container = exports.EmptyContainer = exports.isDependencyKey = void 0;
29
29
  var IContainer_1 = require("./container/IContainer");
30
30
  Object.defineProperty(exports, "isDependencyKey", { enumerable: true, get: function () { return IContainer_1.isDependencyKey; } });
31
31
  var EmptyContainer_1 = require("./container/EmptyContainer");
@@ -40,15 +40,23 @@ var ContainerDisposedError_1 = require("./container/ContainerDisposedError");
40
40
  Object.defineProperty(exports, "ContainerDisposedError", { enumerable: true, get: function () { return ContainerDisposedError_1.ContainerDisposedError; } });
41
41
  var Provider_1 = require("./provider/Provider");
42
42
  Object.defineProperty(exports, "Provider", { enumerable: true, get: function () { return Provider_1.Provider; } });
43
+ Object.defineProperty(exports, "provider", { enumerable: true, get: function () { return Provider_1.provider; } });
44
+ var ArgsProvider_1 = require("./provider/ArgsProvider");
45
+ Object.defineProperty(exports, "withArgsFn", { enumerable: true, get: function () { return ArgsProvider_1.withArgsFn; } });
46
+ Object.defineProperty(exports, "withArgs", { enumerable: true, get: function () { return ArgsProvider_1.withArgs; } });
47
+ var SingletonProvider_1 = require("./provider/SingletonProvider");
48
+ Object.defineProperty(exports, "SingletonProvider", { enumerable: true, get: function () { return SingletonProvider_1.SingletonProvider; } });
49
+ Object.defineProperty(exports, "asSingleton", { enumerable: true, get: function () { return SingletonProvider_1.asSingleton; } });
50
+ var TaggedProvider_1 = require("./provider/TaggedProvider");
51
+ Object.defineProperty(exports, "TaggedProvider", { enumerable: true, get: function () { return TaggedProvider_1.TaggedProvider; } });
52
+ Object.defineProperty(exports, "perTags", { enumerable: true, get: function () { return TaggedProvider_1.perTags; } });
43
53
  var AutoMockedContainer_1 = require("./container/AutoMockedContainer");
44
54
  Object.defineProperty(exports, "AutoMockedContainer", { enumerable: true, get: function () { return AutoMockedContainer_1.AutoMockedContainer; } });
45
- var ProviderBuilder_1 = require("./provider/ProviderBuilder");
46
- Object.defineProperty(exports, "ProviderBuilder", { enumerable: true, get: function () { return ProviderBuilder_1.ProviderBuilder; } });
47
- Object.defineProperty(exports, "perTags", { enumerable: true, get: function () { return ProviderBuilder_1.perTags; } });
48
- Object.defineProperty(exports, "asSingleton", { enumerable: true, get: function () { return ProviderBuilder_1.asSingleton; } });
49
55
  var Registration_1 = require("./registration/Registration");
50
56
  Object.defineProperty(exports, "forKey", { enumerable: true, get: function () { return Registration_1.forKey; } });
51
57
  Object.defineProperty(exports, "Registration", { enumerable: true, get: function () { return Registration_1.Registration; } });
58
+ var DependencyMissingKeyError_1 = require("./registration/DependencyMissingKeyError");
59
+ Object.defineProperty(exports, "DependencyMissingKeyError", { enumerable: true, get: function () { return DependencyMissingKeyError_1.DependencyMissingKeyError; } });
52
60
  var by = function (key) {
53
61
  var args = [];
54
62
  for (var _i = 1; _i < arguments.length; _i++) {
package/cjm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,qDASgC;AAL5B,6GAAA,eAAe,OAAA;AAMnB,6DAA4D;AAAnD,gHAAA,cAAc,OAAA;AAEvB,mDAAkD;AAAzC,sGAAA,SAAS,OAAA;AAGlB,+EAA8E;AAArE,kIAAA,uBAAuB,OAAA;AAChC,mFAAkF;AAAzE,sIAAA,yBAAyB,OAAA;AAClC,6EAA4E;AAAnE,gIAAA,sBAAsB,OAAA;AAC/B,gDAA+C;AAAtC,oGAAA,QAAQ,OAAA;AAEjB,uEAAsE;AAA7D,0HAAA,mBAAmB,OAAA;AAC5B,8DAAmF;AAA1E,kHAAA,eAAe,OAAA;AAAE,0GAAA,OAAO,OAAA;AAAE,8GAAA,WAAW,OAAA;AAC9C,4DAAmE;AAA1D,sGAAA,MAAM,OAAA;AAAE,4GAAA,YAAY,OAAA;AAEtB,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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,qDASgC;AAL5B,6GAAA,eAAe,OAAA;AAMnB,6DAA4D;AAAnD,gHAAA,cAAc,OAAA;AAEvB,mDAAkD;AAAzC,sGAAA,SAAS,OAAA;AAGlB,+EAA8E;AAArE,kIAAA,uBAAuB,OAAA;AAChC,mFAAkF;AAAzE,sIAAA,yBAAyB,OAAA;AAClC,6EAA4E;AAAnE,gIAAA,sBAAsB,OAAA;AAC/B,gDAAyD;AAAhD,oGAAA,QAAQ,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAC3B,wDAAuE;AAAtD,0GAAA,UAAU,OAAA;AAAE,wGAAA,QAAQ,OAAA;AACrC,kEAA8E;AAArE,sHAAA,iBAAiB,OAAA;AAAE,gHAAA,WAAW,OAAA;AACvC,4DAAoE;AAA3D,gHAAA,cAAc,OAAA;AAAE,yGAAA,OAAO,OAAA;AAChC,uEAAsE;AAA7D,0HAAA,mBAAmB,OAAA;AAC5B,4DAAmE;AAA1D,sGAAA,MAAM,OAAA;AAAE,4GAAA,YAAY,OAAA;AAC7B,sFAAqF;AAA5E,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,7 +1,10 @@
1
1
  import { ProviderDecorator } from './ProviderDecorator';
2
2
  import { Resolvable } from '../container/IContainer';
3
3
  import { IProvider } from './IProvider';
4
+ import { MapFn } from '../utils';
4
5
  export declare type ArgsFn = (l: Resolvable) => unknown[];
6
+ export declare function withArgs(...extraArgs: unknown[]): MapFn<IProvider>;
7
+ export declare function withArgsFn(value: ArgsFn): MapFn<IProvider>;
5
8
  export declare class ArgsProvider<T> extends ProviderDecorator<T> {
6
9
  private provider;
7
10
  private argsFn;
@@ -40,8 +40,20 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
40
40
  return to.concat(ar || Array.prototype.slice.call(from));
41
41
  };
42
42
  Object.defineProperty(exports, "__esModule", { value: true });
43
- exports.ArgsProvider = void 0;
43
+ exports.ArgsProvider = exports.withArgsFn = exports.withArgs = void 0;
44
44
  var ProviderDecorator_1 = require("./ProviderDecorator");
45
+ function withArgs() {
46
+ var extraArgs = [];
47
+ for (var _i = 0; _i < arguments.length; _i++) {
48
+ extraArgs[_i] = arguments[_i];
49
+ }
50
+ return function (provider) { return new ArgsProvider(provider, function () { return extraArgs; }); };
51
+ }
52
+ exports.withArgs = withArgs;
53
+ function withArgsFn(value) {
54
+ return function (provider) { return new ArgsProvider(provider, value); };
55
+ }
56
+ exports.withArgsFn = withArgsFn;
45
57
  var ArgsProvider = /** @class */ (function (_super) {
46
58
  __extends(ArgsProvider, _super);
47
59
  function ArgsProvider(provider, argsFn) {
@@ -1 +1 @@
1
- {"version":3,"file":"ArgsProvider.js","sourceRoot":"","sources":["../../lib/provider/ArgsProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAAwD;AAMxD;IAAqC,gCAAoB;IACrD,sBAAoB,QAAsB,EAAU,MAAc;QAAlE,YACI,kBAAM,QAAQ,CAAC,SAClB;QAFmB,cAAQ,GAAR,QAAQ,CAAc;QAAU,YAAM,GAAN,MAAM,CAAQ;;IAElE,CAAC;IAED,8BAAO,GAAP,UAAQ,SAAqB;;QAAE,cAAkB;aAAlB,UAAkB,EAAlB,qBAAkB,EAAlB,IAAkB;YAAlB,6BAAkB;;QAC7C,OAAO,CAAA,KAAA,IAAI,CAAC,QAAQ,CAAA,CAAC,OAAO,wCAAC,SAAS,UAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,kBAAK,IAAI,WAAE;IAChF,CAAC;IAED,4BAAK,GAAL;QACI,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAChE,CAAC;IACL,mBAAC;AAAD,CAAC,AAZD,CAAqC,qCAAiB,GAYrD;AAZY,oCAAY"}
1
+ {"version":3,"file":"ArgsProvider.js","sourceRoot":"","sources":["../../lib/provider/ArgsProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAAwD;AAOxD,SAAgB,QAAQ;IAAC,mBAAuB;SAAvB,UAAuB,EAAvB,qBAAuB,EAAvB,IAAuB;QAAvB,8BAAuB;;IAC5C,OAAO,UAAC,QAAQ,IAAK,OAAA,IAAI,YAAY,CAAC,QAAQ,EAAE,cAAM,OAAA,SAAS,EAAT,CAAS,CAAC,EAA3C,CAA2C,CAAC;AACrE,CAAC;AAFD,4BAEC;AAED,SAAgB,UAAU,CAAC,KAAa;IACpC,OAAO,UAAC,QAAQ,IAAK,OAAA,IAAI,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAjC,CAAiC,CAAC;AAC3D,CAAC;AAFD,gCAEC;AAED;IAAqC,gCAAoB;IACrD,sBAAoB,QAAsB,EAAU,MAAc;QAAlE,YACI,kBAAM,QAAQ,CAAC,SAClB;QAFmB,cAAQ,GAAR,QAAQ,CAAc;QAAU,YAAM,GAAN,MAAM,CAAQ;;IAElE,CAAC;IAED,8BAAO,GAAP,UAAQ,SAAqB;;QAAE,cAAkB;aAAlB,UAAkB,EAAlB,qBAAkB,EAAlB,IAAkB;YAAlB,6BAAkB;;QAC7C,OAAO,CAAA,KAAA,IAAI,CAAC,QAAQ,CAAA,CAAC,OAAO,wCAAC,SAAS,UAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,kBAAK,IAAI,WAAE;IAChF,CAAC;IAED,4BAAK,GAAL;QACI,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAChE,CAAC;IACL,mBAAC;AAAD,CAAC,AAZD,CAAqC,qCAAiB,GAYrD;AAZY,oCAAY"}
@@ -1,7 +1,9 @@
1
1
  import { Resolvable, Tagged } from '../container/IContainer';
2
+ import { MapFn } from '../utils';
2
3
  export declare type ResolveDependency<T = unknown> = (container: Resolvable, ...args: unknown[]) => T;
3
4
  export interface IProvider<T = unknown> {
4
5
  clone(): IProvider<T>;
5
6
  resolve(container: Resolvable, ...args: unknown[]): T;
6
7
  isValid(filters: Tagged): boolean;
8
+ pipe(...mappers: MapFn<IProvider<T>>[]): IProvider<T>;
7
9
  }
@@ -1,11 +1,13 @@
1
1
  import { IProvider, ResolveDependency } from './IProvider';
2
2
  import { Resolvable } from '../container/IContainer';
3
- import { constructor } from '../utils';
3
+ import { constructor, MapFn } from '../utils';
4
+ export declare const provider: (...mappers: MapFn<IProvider>[]) => ClassDecorator;
4
5
  export declare class Provider<T> implements IProvider<T> {
5
6
  private readonly resolveDependency;
6
- static fromClass<T>(Target: constructor<T>): Provider<T>;
7
+ static fromClass<T>(Target: constructor<T>): IProvider<T>;
7
8
  static fromValue<T>(value: T): Provider<T>;
8
9
  constructor(resolveDependency: ResolveDependency<T>);
10
+ pipe(...mappers: MapFn<IProvider<T>>[]): IProvider<T>;
9
11
  clone(): Provider<T>;
10
12
  resolve(container: Resolvable, ...args: unknown[]): T;
11
13
  isValid(): boolean;
@@ -25,23 +25,42 @@ 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.Provider = void 0;
28
+ exports.Provider = exports.provider = void 0;
29
+ var reflection_1 = require("../reflection");
30
+ var provider = function () {
31
+ var mappers = [];
32
+ for (var _i = 0; _i < arguments.length; _i++) {
33
+ mappers[_i] = arguments[_i];
34
+ }
35
+ return (0, reflection_1.setProp)('provider', mappers);
36
+ };
37
+ exports.provider = provider;
29
38
  var Provider = /** @class */ (function () {
30
39
  function Provider(resolveDependency) {
31
40
  this.resolveDependency = resolveDependency;
32
41
  }
33
42
  Provider.fromClass = function (Target) {
34
- return new Provider(function (container) {
43
+ var _a;
44
+ var _b;
45
+ var mappers = (_b = (0, reflection_1.getProp)(Target, 'provider')) !== null && _b !== void 0 ? _b : [];
46
+ return (_a = new Provider(function (container) {
35
47
  var args = [];
36
48
  for (var _i = 1; _i < arguments.length; _i++) {
37
49
  args[_i - 1] = arguments[_i];
38
50
  }
39
51
  return container.resolve.apply(container, __spreadArray([Target], __read(args), false));
40
- });
52
+ })).pipe.apply(_a, __spreadArray([], __read(mappers), false));
41
53
  };
42
54
  Provider.fromValue = function (value) {
43
55
  return new Provider(function () { return value; });
44
56
  };
57
+ Provider.prototype.pipe = function () {
58
+ var mappers = [];
59
+ for (var _i = 0; _i < arguments.length; _i++) {
60
+ mappers[_i] = arguments[_i];
61
+ }
62
+ return mappers.reduce(function (acc, current) { return current(acc); }, this);
63
+ };
45
64
  Provider.prototype.clone = function () {
46
65
  return new Provider(this.resolveDependency);
47
66
  };
@@ -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,MAAsB;QACtC,OAAO,IAAI,QAAQ,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;IACpF,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;QACI,OAAO,IAAI,CAAC;IAChB,CAAC;IACL,eAAC;AAAD,CAAC,AAtBD,IAsBC;AAtBY,4BAAQ"}
1
+ {"version":3,"file":"Provider.js","sourceRoot":"","sources":["../../lib/provider/Provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,4CAAiD;AAE1C,IAAM,QAAQ,GAAG;IAAC,iBAA8B;SAA9B,UAA8B,EAA9B,qBAA8B,EAA9B,IAA8B;QAA9B,4BAA8B;;IAAqB,OAAA,IAAA,oBAAO,EAAC,UAAU,EAAE,OAAO,CAAC;AAA5B,CAA4B,CAAC;AAA5F,QAAA,QAAQ,YAAoF;AAEzG;IAUI,kBAA6B,iBAAuC;QAAvC,sBAAiB,GAAjB,iBAAiB,CAAsB;IAAG,CAAC;IATjE,kBAAS,GAAhB,UAAoB,MAAsB;;;QACtC,IAAM,OAAO,GAAG,MAAA,IAAA,oBAAO,EAAwB,MAAM,EAAE,UAAU,CAAC,mCAAI,EAAE,CAAC;QACzE,OAAO,CAAA,KAAA,IAAI,QAAQ,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,CAAA,CAAC,IAAI,oCAAI,OAAO,WAAE;IACrG,CAAC;IAEM,kBAAS,GAAhB,UAAoB,KAAQ;QACxB,OAAO,IAAI,QAAQ,CAAC,cAAM,OAAA,KAAK,EAAL,CAAK,CAAC,CAAC;IACrC,CAAC;IAID,uBAAI,GAAJ;QAAK,iBAAiC;aAAjC,UAAiC,EAAjC,qBAAiC,EAAjC,IAAiC;YAAjC,4BAAiC;;QAClC,OAAO,OAAO,CAAC,MAAM,CAAe,UAAC,GAAG,EAAE,OAAO,IAAK,OAAA,OAAO,CAAC,GAAG,CAAC,EAAZ,CAAY,EAAE,IAAI,CAAC,CAAC;IAC9E,CAAC;IAED,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;QACI,OAAO,IAAI,CAAC;IAChB,CAAC;IACL,eAAC;AAAD,CAAC,AA3BD,IA2BC;AA3BY,4BAAQ"}
@@ -1,9 +1,11 @@
1
1
  import { Resolvable, Tagged } from '../container/IContainer';
2
2
  import { IProvider } from './IProvider';
3
+ import { MapFn } from '../utils';
3
4
  export declare abstract class ProviderDecorator<T> implements IProvider<T> {
4
5
  private decorated;
5
6
  protected constructor(decorated: IProvider<T>);
6
7
  clone(): IProvider<T>;
7
8
  isValid(filters: Tagged): boolean;
8
9
  resolve(container: Resolvable, ...args: any[]): T;
10
+ pipe(...mappers: MapFn<IProvider<T>>[]): IProvider<T>;
9
11
  }
@@ -44,6 +44,13 @@ var ProviderDecorator = /** @class */ (function () {
44
44
  }
45
45
  return (_a = this.decorated).resolve.apply(_a, __spreadArray([container], __read(args), false));
46
46
  };
47
+ ProviderDecorator.prototype.pipe = function () {
48
+ var mappers = [];
49
+ for (var _i = 0; _i < arguments.length; _i++) {
50
+ mappers[_i] = arguments[_i];
51
+ }
52
+ return mappers.reduce(function (acc, current) { return current(acc); }, this);
53
+ };
47
54
  return ProviderDecorator;
48
55
  }());
49
56
  exports.ProviderDecorator = ProviderDecorator;
@@ -1 +1 @@
1
- {"version":3,"file":"ProviderDecorator.js","sourceRoot":"","sources":["../../lib/provider/ProviderDecorator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;IACI,2BAA8B,SAAuB;QAAvB,cAAS,GAAT,SAAS,CAAc;IAAG,CAAC;IAEzD,iCAAK,GAAL;QACI,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IAED,mCAAO,GAAP,UAAQ,OAAe;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,mCAAO,GAAP,UAAQ,SAAqB;;QAAE,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,6BAAc;;QACzC,OAAO,CAAA,KAAA,IAAI,CAAC,SAAS,CAAA,CAAC,OAAO,0BAAC,SAAS,UAAK,IAAI,WAAE;IACtD,CAAC;IACL,wBAAC;AAAD,CAAC,AAdD,IAcC;AAdqB,8CAAiB"}
1
+ {"version":3,"file":"ProviderDecorator.js","sourceRoot":"","sources":["../../lib/provider/ProviderDecorator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;IACI,2BAA8B,SAAuB;QAAvB,cAAS,GAAT,SAAS,CAAc;IAAG,CAAC;IAEzD,iCAAK,GAAL;QACI,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IAED,mCAAO,GAAP,UAAQ,OAAe;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,mCAAO,GAAP,UAAQ,SAAqB;;QAAE,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,6BAAc;;QACzC,OAAO,CAAA,KAAA,IAAI,CAAC,SAAS,CAAA,CAAC,OAAO,0BAAC,SAAS,UAAK,IAAI,WAAE;IACtD,CAAC;IAED,gCAAI,GAAJ;QAAK,iBAAiC;aAAjC,UAAiC,EAAjC,qBAAiC,EAAjC,IAAiC;YAAjC,4BAAiC;;QAClC,OAAO,OAAO,CAAC,MAAM,CAAe,UAAC,GAAG,EAAE,OAAO,IAAK,OAAA,OAAO,CAAC,GAAG,CAAC,EAAZ,CAAY,EAAE,IAAI,CAAC,CAAC;IAC9E,CAAC;IACL,wBAAC;AAAD,CAAC,AAlBD,IAkBC;AAlBqB,8CAAiB"}
@@ -1,6 +1,8 @@
1
1
  import { Resolvable } from '../container/IContainer';
2
2
  import { ProviderDecorator } from './ProviderDecorator';
3
3
  import { IProvider } from './IProvider';
4
+ import { MapFn } from '../utils';
5
+ export declare function asSingleton(): MapFn<IProvider>;
4
6
  export declare class SingletonProvider<T> extends ProviderDecorator<T> {
5
7
  private readonly provider;
6
8
  private instance;
@@ -40,8 +40,12 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
40
40
  return to.concat(ar || Array.prototype.slice.call(from));
41
41
  };
42
42
  Object.defineProperty(exports, "__esModule", { value: true });
43
- exports.SingletonProvider = void 0;
43
+ exports.SingletonProvider = exports.asSingleton = void 0;
44
44
  var ProviderDecorator_1 = require("./ProviderDecorator");
45
+ function asSingleton() {
46
+ return function (provider) { return new SingletonProvider(provider); };
47
+ }
48
+ exports.asSingleton = asSingleton;
45
49
  var SingletonProvider = /** @class */ (function (_super) {
46
50
  __extends(SingletonProvider, _super);
47
51
  function SingletonProvider(provider) {
@@ -1 +1 @@
1
- {"version":3,"file":"SingletonProvider.js","sourceRoot":"","sources":["../../lib/provider/SingletonProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,yDAAwD;AAKxD;IAA0C,qCAAoB;IAG1D,2BAA6B,QAAsB;QAAnD,YACI,kBAAM,QAAQ,CAAC,SAClB;QAF4B,cAAQ,GAAR,QAAQ,CAAc;QAF3C,cAAQ,GAAoB,IAAI,CAAC;;IAIzC,CAAC;IAED,iCAAK,GAAL;QACI,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,mCAAO,GAAP,UAAQ,SAAqB;;;QAAE,cAAkB;aAAlB,UAAkB,EAAlB,qBAAkB,EAAlB,IAAkB;YAAlB,6BAAkB;;QAC7C,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;YACxB,IAAM,QAAQ,GAAG,CAAA,KAAA,IAAI,CAAC,QAAQ,CAAA,CAAC,OAAO,0BAAC,SAAS,UAAK,IAAI,UAAC,CAAC;YAC3D,IAAI,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;SACvC;QAED,OAAO,MAAA,IAAI,CAAC,QAAQ,0CAAE,KAAU,CAAC;IACrC,CAAC;IACL,wBAAC;AAAD,CAAC,AAnBD,CAA0C,qCAAiB,GAmB1D;AAnBY,8CAAiB"}
1
+ {"version":3,"file":"SingletonProvider.js","sourceRoot":"","sources":["../../lib/provider/SingletonProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,yDAAwD;AAMxD,SAAgB,WAAW;IACvB,OAAO,UAAC,QAAQ,IAAK,OAAA,IAAI,iBAAiB,CAAC,QAAQ,CAAC,EAA/B,CAA+B,CAAC;AACzD,CAAC;AAFD,kCAEC;AAED;IAA0C,qCAAoB;IAG1D,2BAA6B,QAAsB;QAAnD,YACI,kBAAM,QAAQ,CAAC,SAClB;QAF4B,cAAQ,GAAR,QAAQ,CAAc;QAF3C,cAAQ,GAAoB,IAAI,CAAC;;IAIzC,CAAC;IAED,iCAAK,GAAL;QACI,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,mCAAO,GAAP,UAAQ,SAAqB;;;QAAE,cAAkB;aAAlB,UAAkB,EAAlB,qBAAkB,EAAlB,IAAkB;YAAlB,6BAAkB;;QAC7C,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;YACxB,IAAM,QAAQ,GAAG,CAAA,KAAA,IAAI,CAAC,QAAQ,CAAA,CAAC,OAAO,0BAAC,SAAS,UAAK,IAAI,UAAC,CAAC;YAC3D,IAAI,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;SACvC;QAED,OAAO,MAAA,IAAI,CAAC,QAAQ,0CAAE,KAAU,CAAC;IACrC,CAAC;IACL,wBAAC;AAAD,CAAC,AAnBD,CAA0C,qCAAiB,GAmB1D;AAnBY,8CAAiB"}
@@ -1,6 +1,8 @@
1
1
  import { IProvider } from './IProvider';
2
2
  import { ProviderDecorator } from './ProviderDecorator';
3
3
  import { Tag, Tagged } from '../container/IContainer';
4
+ import { MapFn } from '../utils';
5
+ export declare function perTags(...tags: Tag[]): MapFn<IProvider>;
4
6
  export declare class TaggedProvider<T> extends ProviderDecorator<T> {
5
7
  private provider;
6
8
  private readonly tags;
@@ -15,8 +15,16 @@ var __extends = (this && this.__extends) || (function () {
15
15
  };
16
16
  })();
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.TaggedProvider = void 0;
18
+ exports.TaggedProvider = exports.perTags = void 0;
19
19
  var ProviderDecorator_1 = require("./ProviderDecorator");
20
+ function perTags() {
21
+ var tags = [];
22
+ for (var _i = 0; _i < arguments.length; _i++) {
23
+ tags[_i] = arguments[_i];
24
+ }
25
+ return function (provider) { return new TaggedProvider(provider, tags); };
26
+ }
27
+ exports.perTags = perTags;
20
28
  var TaggedProvider = /** @class */ (function (_super) {
21
29
  __extends(TaggedProvider, _super);
22
30
  function TaggedProvider(provider, tags) {
@@ -1 +1 @@
1
- {"version":3,"file":"TaggedProvider.js","sourceRoot":"","sources":["../../lib/provider/TaggedProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AACA,yDAAwD;AAGxD;IAAuC,kCAAoB;IACvD,wBAAoB,QAAsB,EAAmB,IAAW;QAAxE,YACI,kBAAM,QAAQ,CAAC,SAClB;QAFmB,cAAQ,GAAR,QAAQ,CAAc;QAAmB,UAAI,GAAJ,IAAI,CAAO;;IAExE,CAAC;IAED,8BAAK,GAAL;QACI,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,gCAAO,GAAP,UAAQ,OAAe;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAjB,CAAiB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtF,CAAC;IACL,qBAAC;AAAD,CAAC,AAZD,CAAuC,qCAAiB,GAYvD;AAZY,wCAAc"}
1
+ {"version":3,"file":"TaggedProvider.js","sourceRoot":"","sources":["../../lib/provider/TaggedProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AACA,yDAAwD;AAIxD,SAAgB,OAAO;IAAC,cAAc;SAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;QAAd,yBAAc;;IAClC,OAAO,UAAC,QAAQ,IAAK,OAAA,IAAI,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAlC,CAAkC,CAAC;AAC5D,CAAC;AAFD,0BAEC;AAED;IAAuC,kCAAoB;IACvD,wBAAoB,QAAsB,EAAmB,IAAW;QAAxE,YACI,kBAAM,QAAQ,CAAC,SAClB;QAFmB,cAAQ,GAAR,QAAQ,CAAc;QAAmB,UAAI,GAAJ,IAAI,CAAO;;IAExE,CAAC;IAED,8BAAK,GAAL;QACI,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,gCAAO,GAAP,UAAQ,OAAe;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAjB,CAAiB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtF,CAAC;IACL,qBAAC;AAAD,CAAC,AAZD,CAAuC,qCAAiB,GAYvD;AAZY,wCAAc"}
@@ -1,16 +1,12 @@
1
- import { ArgsFn } from '../provider/ArgsProvider';
2
- import { DependencyKey, IContainer, IContainerModule, Tag } from '../container/IContainer';
3
- import { ProviderBuilder } from '../provider/ProviderBuilder';
4
- import { constructor } from '../utils';
1
+ import { DependencyKey, IContainer, IContainerModule } from '../container/IContainer';
2
+ import { constructor, MapFn } from '../utils';
3
+ import { IProvider } from '../provider/IProvider';
5
4
  export declare const forKey: (key: DependencyKey) => ClassDecorator;
6
5
  export declare class Registration implements IContainerModule {
7
6
  private key;
8
- private providerBuilder;
9
- static fromClass<T>(Target: constructor<T>): Registration;
10
- constructor(key: DependencyKey, providerBuilder: ProviderBuilder);
11
- withArgs(...extraArgs: unknown[]): this;
12
- withArgsFn(argsFn: ArgsFn): this;
13
- perTags(...tags: Tag[]): this;
14
- asSingleton(...tags: Tag[]): this;
7
+ private provider;
8
+ static fromClass(Target: constructor<unknown>): Registration;
9
+ constructor(key: DependencyKey, provider: IProvider);
10
+ map(...mappers: MapFn<IProvider>[]): this;
15
11
  applyTo(container: IContainer): void;
16
12
  }
@@ -27,55 +27,33 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
27
27
  Object.defineProperty(exports, "__esModule", { value: true });
28
28
  exports.Registration = exports.forKey = void 0;
29
29
  var DependencyMissingKeyError_1 = require("./DependencyMissingKeyError");
30
- var ProviderBuilder_1 = require("../provider/ProviderBuilder");
31
30
  var reflection_1 = require("../reflection");
31
+ var Provider_1 = require("../provider/Provider");
32
32
  var forKey = function (key) { return (0, reflection_1.setProp)('DependencyKey', key); };
33
33
  exports.forKey = forKey;
34
34
  var Registration = /** @class */ (function () {
35
- function Registration(key, providerBuilder) {
35
+ function Registration(key, provider) {
36
36
  this.key = key;
37
- this.providerBuilder = providerBuilder;
37
+ this.provider = provider;
38
38
  }
39
39
  Registration.fromClass = function (Target) {
40
40
  var dependencyKey = (0, reflection_1.getProp)(Target, 'DependencyKey');
41
41
  if (dependencyKey === undefined) {
42
42
  throw new DependencyMissingKeyError_1.DependencyMissingKeyError("Pls provide dependency key for " + Target.name);
43
43
  }
44
- return new Registration(dependencyKey, ProviderBuilder_1.ProviderBuilder.fromClass(Target));
44
+ return new Registration(dependencyKey, Provider_1.Provider.fromClass(Target));
45
45
  };
46
- Registration.prototype.withArgs = function () {
46
+ Registration.prototype.map = function () {
47
47
  var _a;
48
- var extraArgs = [];
48
+ var mappers = [];
49
49
  for (var _i = 0; _i < arguments.length; _i++) {
50
- extraArgs[_i] = arguments[_i];
50
+ mappers[_i] = arguments[_i];
51
51
  }
52
- this.providerBuilder = (_a = this.providerBuilder).withArgs.apply(_a, __spreadArray([], __read(extraArgs), false));
53
- return this;
54
- };
55
- Registration.prototype.withArgsFn = function (argsFn) {
56
- this.providerBuilder = this.providerBuilder.withArgsFn(argsFn);
57
- return this;
58
- };
59
- Registration.prototype.perTags = function () {
60
- var _a;
61
- var tags = [];
62
- for (var _i = 0; _i < arguments.length; _i++) {
63
- tags[_i] = arguments[_i];
64
- }
65
- this.providerBuilder = (_a = this.providerBuilder).perTags.apply(_a, __spreadArray([], __read(tags), false));
66
- return this;
67
- };
68
- Registration.prototype.asSingleton = function () {
69
- var _a;
70
- var tags = [];
71
- for (var _i = 0; _i < arguments.length; _i++) {
72
- tags[_i] = arguments[_i];
73
- }
74
- this.providerBuilder = (_a = this.providerBuilder).asSingleton.apply(_a, __spreadArray([], __read(tags), false));
52
+ this.provider = (_a = this.provider).pipe.apply(_a, __spreadArray([], __read(mappers), false));
75
53
  return this;
76
54
  };
77
55
  Registration.prototype.applyTo = function (container) {
78
- container.register(this.key, this.providerBuilder.build());
56
+ container.register(this.key, this.provider);
79
57
  };
80
58
  return Registration;
81
59
  }());
@@ -1 +1 @@
1
- {"version":3,"file":"Registration.js","sourceRoot":"","sources":["../../lib/registration/Registration.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,yEAAwE;AAExE,+DAA8D;AAE9D,4CAAiD;AAE1C,IAAM,MAAM,GAAG,UAAC,GAAkB,IAAqB,OAAA,IAAA,oBAAO,EAAC,eAAe,EAAE,GAAG,CAAC,EAA7B,CAA6B,CAAC;AAA/E,QAAA,MAAM,UAAyE;AAE5F;IASI,sBAAoB,GAAkB,EAAU,eAAgC;QAA5D,QAAG,GAAH,GAAG,CAAe;QAAU,oBAAe,GAAf,eAAe,CAAiB;IAAG,CAAC;IAR7E,sBAAS,GAAhB,UAAoB,MAAsB;QACtC,IAAM,aAAa,GAAG,IAAA,oBAAO,EAAgB,MAAM,EAAE,eAAe,CAAC,CAAC;QACtE,IAAI,aAAa,KAAK,SAAS,EAAE;YAC7B,MAAM,IAAI,qDAAyB,CAAC,oCAAkC,MAAM,CAAC,IAAM,CAAC,CAAC;SACxF;QACD,OAAO,IAAI,YAAY,CAAC,aAAa,EAAE,iCAAe,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9E,CAAC;IAID,+BAAQ,GAAR;;QAAS,mBAAuB;aAAvB,UAAuB,EAAvB,qBAAuB,EAAvB,IAAuB;YAAvB,8BAAuB;;QAC5B,IAAI,CAAC,eAAe,GAAG,CAAA,KAAA,IAAI,CAAC,eAAe,CAAA,CAAC,QAAQ,oCAAI,SAAS,UAAC,CAAC;QACnE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,iCAAU,GAAV,UAAW,MAAc;QACrB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,8BAAO,GAAP;;QAAQ,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,yBAAc;;QAClB,IAAI,CAAC,eAAe,GAAG,CAAA,KAAA,IAAI,CAAC,eAAe,CAAA,CAAC,OAAO,oCAAI,IAAI,UAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,kCAAW,GAAX;;QAAY,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,yBAAc;;QACtB,IAAI,CAAC,eAAe,GAAG,CAAA,KAAA,IAAI,CAAC,eAAe,CAAA,CAAC,WAAW,oCAAI,IAAI,UAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,8BAAO,GAAP,UAAQ,SAAqB;QACzB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IACL,mBAAC;AAAD,CAAC,AAlCD,IAkCC;AAlCY,oCAAY"}
1
+ {"version":3,"file":"Registration.js","sourceRoot":"","sources":["../../lib/registration/Registration.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yEAAwE;AAGxE,4CAAiD;AACjD,iDAAgD;AAGzC,IAAM,MAAM,GAAG,UAAC,GAAkB,IAAqB,OAAA,IAAA,oBAAO,EAAC,eAAe,EAAE,GAAG,CAAC,EAA7B,CAA6B,CAAC;AAA/E,QAAA,MAAM,UAAyE;AAE5F;IASI,sBAAoB,GAAkB,EAAU,QAAmB;QAA/C,QAAG,GAAH,GAAG,CAAe;QAAU,aAAQ,GAAR,QAAQ,CAAW;IAAG,CAAC;IARhE,sBAAS,GAAhB,UAAiB,MAA4B;QACzC,IAAM,aAAa,GAAG,IAAA,oBAAO,EAAgB,MAAM,EAAE,eAAe,CAAC,CAAC;QACtE,IAAI,aAAa,KAAK,SAAS,EAAE;YAC7B,MAAM,IAAI,qDAAyB,CAAC,oCAAkC,MAAM,CAAC,IAAM,CAAC,CAAC;SACxF;QACD,OAAO,IAAI,YAAY,CAAC,aAAa,EAAE,mBAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,CAAC;IAID,0BAAG,GAAH;;QAAI,iBAA8B;aAA9B,UAA8B,EAA9B,qBAA8B,EAA9B,IAA8B;YAA9B,4BAA8B;;QAC9B,IAAI,CAAC,QAAQ,GAAG,CAAA,KAAA,IAAI,CAAC,QAAQ,CAAA,CAAC,IAAI,oCAAI,OAAO,UAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,8BAAO,GAAP,UAAQ,SAAqB;QACzB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IACL,mBAAC;AAAD,CAAC,AAnBD,IAmBC;AAnBY,oCAAY"}
package/esm/index.d.ts CHANGED
@@ -8,9 +8,11 @@ export { IInjector } from './IInjector';
8
8
  export { DependencyNotFoundError } from './container/DependencyNotFoundError';
9
9
  export { MethodNotImplementedError } from './container/MethodNotImplementedError';
10
10
  export { ContainerDisposedError } from './container/ContainerDisposedError';
11
- export { Provider } from './provider/Provider';
12
- export { ArgsFn } from './provider/ArgsProvider';
11
+ export { Provider, provider } from './provider/Provider';
12
+ export { ArgsFn, withArgsFn, withArgs } from './provider/ArgsProvider';
13
+ export { SingletonProvider, asSingleton } from './provider/SingletonProvider';
14
+ export { TaggedProvider, perTags } from './provider/TaggedProvider';
13
15
  export { AutoMockedContainer } from './container/AutoMockedContainer';
14
- export { ProviderBuilder, perTags, asSingleton } from './provider/ProviderBuilder';
15
16
  export { forKey, Registration } from './registration/Registration';
17
+ export { DependencyMissingKeyError } from './registration/DependencyMissingKeyError';
16
18
  export declare const by: <T>(key: InjectionToken<T>, ...args: unknown[]) => (l: IContainer) => T;
package/esm/index.js CHANGED
@@ -4,9 +4,12 @@ export { Container } from './container/Container';
4
4
  export { DependencyNotFoundError } from './container/DependencyNotFoundError';
5
5
  export { MethodNotImplementedError } from './container/MethodNotImplementedError';
6
6
  export { ContainerDisposedError } from './container/ContainerDisposedError';
7
- export { Provider } from './provider/Provider';
7
+ export { Provider, provider } from './provider/Provider';
8
+ export { withArgsFn, withArgs } from './provider/ArgsProvider';
9
+ export { SingletonProvider, asSingleton } from './provider/SingletonProvider';
10
+ export { TaggedProvider, perTags } from './provider/TaggedProvider';
8
11
  export { AutoMockedContainer } from './container/AutoMockedContainer';
9
- export { ProviderBuilder, perTags, asSingleton } from './provider/ProviderBuilder';
10
12
  export { forKey, Registration } from './registration/Registration';
13
+ export { DependencyMissingKeyError } from './registration/DependencyMissingKeyError';
11
14
  export const by = (key, ...args) => (l) => l.resolve(key, ...args);
12
15
  //# sourceMappingURL=index.js.map
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAIH,eAAe,GAKlB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEnE,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":"AAEA,OAAO,EAIH,eAAe,GAKlB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAU,UAAU,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AAErF,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,7 +1,10 @@
1
1
  import { ProviderDecorator } from './ProviderDecorator';
2
2
  import { Resolvable } from '../container/IContainer';
3
3
  import { IProvider } from './IProvider';
4
+ import { MapFn } from '../utils';
4
5
  export declare type ArgsFn = (l: Resolvable) => unknown[];
6
+ export declare function withArgs(...extraArgs: unknown[]): MapFn<IProvider>;
7
+ export declare function withArgsFn(value: ArgsFn): MapFn<IProvider>;
5
8
  export declare class ArgsProvider<T> extends ProviderDecorator<T> {
6
9
  private provider;
7
10
  private argsFn;
@@ -1,4 +1,10 @@
1
1
  import { ProviderDecorator } from './ProviderDecorator';
2
+ export function withArgs(...extraArgs) {
3
+ return (provider) => new ArgsProvider(provider, () => extraArgs);
4
+ }
5
+ export function withArgsFn(value) {
6
+ return (provider) => new ArgsProvider(provider, value);
7
+ }
2
8
  export class ArgsProvider extends ProviderDecorator {
3
9
  constructor(provider, argsFn) {
4
10
  super(provider);
@@ -1 +1 @@
1
- {"version":3,"file":"ArgsProvider.js","sourceRoot":"","sources":["../../lib/provider/ArgsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAMxD,MAAM,OAAO,YAAgB,SAAQ,iBAAoB;IACrD,YAAoB,QAAsB,EAAU,MAAc;QAC9D,KAAK,CAAC,QAAQ,CAAC,CAAC;QADA,aAAQ,GAAR,QAAQ,CAAc;QAAU,WAAM,GAAN,MAAM,CAAQ;IAElE,CAAC;IAED,OAAO,CAAC,SAAqB,EAAE,GAAG,IAAe;QAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAChF,CAAC;IAED,KAAK;QACD,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAChE,CAAC;CACJ"}
1
+ {"version":3,"file":"ArgsProvider.js","sourceRoot":"","sources":["../../lib/provider/ArgsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAOxD,MAAM,UAAU,QAAQ,CAAC,GAAG,SAAoB;IAC5C,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACpC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,OAAO,YAAgB,SAAQ,iBAAoB;IACrD,YAAoB,QAAsB,EAAU,MAAc;QAC9D,KAAK,CAAC,QAAQ,CAAC,CAAC;QADA,aAAQ,GAAR,QAAQ,CAAc;QAAU,WAAM,GAAN,MAAM,CAAQ;IAElE,CAAC;IAED,OAAO,CAAC,SAAqB,EAAE,GAAG,IAAe;QAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAChF,CAAC;IAED,KAAK;QACD,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAChE,CAAC;CACJ"}
@@ -1,7 +1,9 @@
1
1
  import { Resolvable, Tagged } from '../container/IContainer';
2
+ import { MapFn } from '../utils';
2
3
  export declare type ResolveDependency<T = unknown> = (container: Resolvable, ...args: unknown[]) => T;
3
4
  export interface IProvider<T = unknown> {
4
5
  clone(): IProvider<T>;
5
6
  resolve(container: Resolvable, ...args: unknown[]): T;
6
7
  isValid(filters: Tagged): boolean;
8
+ pipe(...mappers: MapFn<IProvider<T>>[]): IProvider<T>;
7
9
  }
@@ -1,11 +1,13 @@
1
1
  import { IProvider, ResolveDependency } from './IProvider';
2
2
  import { Resolvable } from '../container/IContainer';
3
- import { constructor } from '../utils';
3
+ import { constructor, MapFn } from '../utils';
4
+ export declare const provider: (...mappers: MapFn<IProvider>[]) => ClassDecorator;
4
5
  export declare class Provider<T> implements IProvider<T> {
5
6
  private readonly resolveDependency;
6
- static fromClass<T>(Target: constructor<T>): Provider<T>;
7
+ static fromClass<T>(Target: constructor<T>): IProvider<T>;
7
8
  static fromValue<T>(value: T): Provider<T>;
8
9
  constructor(resolveDependency: ResolveDependency<T>);
10
+ pipe(...mappers: MapFn<IProvider<T>>[]): IProvider<T>;
9
11
  clone(): Provider<T>;
10
12
  resolve(container: Resolvable, ...args: unknown[]): T;
11
13
  isValid(): boolean;
@@ -1,13 +1,20 @@
1
+ import { getProp, setProp } from '../reflection';
2
+ export const provider = (...mappers) => setProp('provider', mappers);
1
3
  export class Provider {
2
4
  constructor(resolveDependency) {
3
5
  this.resolveDependency = resolveDependency;
4
6
  }
5
7
  static fromClass(Target) {
6
- return new Provider((container, ...args) => container.resolve(Target, ...args));
8
+ var _a;
9
+ const mappers = (_a = getProp(Target, 'provider')) !== null && _a !== void 0 ? _a : [];
10
+ return new Provider((container, ...args) => container.resolve(Target, ...args)).pipe(...mappers);
7
11
  }
8
12
  static fromValue(value) {
9
13
  return new Provider(() => value);
10
14
  }
15
+ pipe(...mappers) {
16
+ return mappers.reduce((acc, current) => current(acc), this);
17
+ }
11
18
  clone() {
12
19
  return new Provider(this.resolveDependency);
13
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Provider.js","sourceRoot":"","sources":["../../lib/provider/Provider.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,QAAQ;IASjB,YAA6B,iBAAuC;QAAvC,sBAAiB,GAAjB,iBAAiB,CAAsB;IAAG,CAAC;IARxE,MAAM,CAAC,SAAS,CAAI,MAAsB;QACtC,OAAO,IAAI,QAAQ,CAAC,CAAC,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,CAAC,SAAS,CAAI,KAAQ;QACxB,OAAO,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAID,KAAK;QACD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,CAAC,SAAqB,EAAE,GAAG,IAAe;QAC7C,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,OAAO;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
1
+ {"version":3,"file":"Provider.js","sourceRoot":"","sources":["../../lib/provider/Provider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAG,OAA2B,EAAkB,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAEzG,MAAM,OAAO,QAAQ;IAUjB,YAA6B,iBAAuC;QAAvC,sBAAiB,GAAjB,iBAAiB,CAAsB;IAAG,CAAC;IATxE,MAAM,CAAC,SAAS,CAAI,MAAsB;;QACtC,MAAM,OAAO,GAAG,MAAA,OAAO,CAAwB,MAAM,EAAE,UAAU,CAAC,mCAAI,EAAE,CAAC;QACzE,OAAO,IAAI,QAAQ,CAAC,CAAC,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IACrG,CAAC;IAED,MAAM,CAAC,SAAS,CAAI,KAAQ;QACxB,OAAO,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAID,IAAI,CAAC,GAAG,OAA8B;QAClC,OAAO,OAAO,CAAC,MAAM,CAAe,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK;QACD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,CAAC,SAAqB,EAAE,GAAG,IAAe;QAC7C,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,OAAO;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
@@ -1,9 +1,11 @@
1
1
  import { Resolvable, Tagged } from '../container/IContainer';
2
2
  import { IProvider } from './IProvider';
3
+ import { MapFn } from '../utils';
3
4
  export declare abstract class ProviderDecorator<T> implements IProvider<T> {
4
5
  private decorated;
5
6
  protected constructor(decorated: IProvider<T>);
6
7
  clone(): IProvider<T>;
7
8
  isValid(filters: Tagged): boolean;
8
9
  resolve(container: Resolvable, ...args: any[]): T;
10
+ pipe(...mappers: MapFn<IProvider<T>>[]): IProvider<T>;
9
11
  }
@@ -11,5 +11,8 @@ export class ProviderDecorator {
11
11
  resolve(container, ...args) {
12
12
  return this.decorated.resolve(container, ...args);
13
13
  }
14
+ pipe(...mappers) {
15
+ return mappers.reduce((acc, current) => current(acc), this);
16
+ }
14
17
  }
15
18
  //# sourceMappingURL=ProviderDecorator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProviderDecorator.js","sourceRoot":"","sources":["../../lib/provider/ProviderDecorator.ts"],"names":[],"mappings":"AAGA,MAAM,OAAgB,iBAAiB;IACnC,YAA8B,SAAuB;QAAvB,cAAS,GAAT,SAAS,CAAc;IAAG,CAAC;IAEzD,KAAK;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IAED,OAAO,CAAC,OAAe;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,SAAqB,EAAE,GAAG,IAAW;QACzC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;IACtD,CAAC;CACJ"}
1
+ {"version":3,"file":"ProviderDecorator.js","sourceRoot":"","sources":["../../lib/provider/ProviderDecorator.ts"],"names":[],"mappings":"AAIA,MAAM,OAAgB,iBAAiB;IACnC,YAA8B,SAAuB;QAAvB,cAAS,GAAT,SAAS,CAAc;IAAG,CAAC;IAEzD,KAAK;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IAED,OAAO,CAAC,OAAe;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,SAAqB,EAAE,GAAG,IAAW;QACzC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,CAAC,GAAG,OAA8B;QAClC,OAAO,OAAO,CAAC,MAAM,CAAe,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9E,CAAC;CACJ"}
@@ -1,6 +1,8 @@
1
1
  import { Resolvable } from '../container/IContainer';
2
2
  import { ProviderDecorator } from './ProviderDecorator';
3
3
  import { IProvider } from './IProvider';
4
+ import { MapFn } from '../utils';
5
+ export declare function asSingleton(): MapFn<IProvider>;
4
6
  export declare class SingletonProvider<T> extends ProviderDecorator<T> {
5
7
  private readonly provider;
6
8
  private instance;
@@ -1,4 +1,7 @@
1
1
  import { ProviderDecorator } from './ProviderDecorator';
2
+ export function asSingleton() {
3
+ return (provider) => new SingletonProvider(provider);
4
+ }
2
5
  export class SingletonProvider extends ProviderDecorator {
3
6
  constructor(provider) {
4
7
  super(provider);
@@ -1 +1 @@
1
- {"version":3,"file":"SingletonProvider.js","sourceRoot":"","sources":["../../lib/provider/SingletonProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAKxD,MAAM,OAAO,iBAAqB,SAAQ,iBAAoB;IAG1D,YAA6B,QAAsB;QAC/C,KAAK,CAAC,QAAQ,CAAC,CAAC;QADS,aAAQ,GAAR,QAAQ,CAAc;QAF3C,aAAQ,GAAoB,IAAI,CAAC;IAIzC,CAAC;IAED,KAAK;QACD,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,CAAC,SAAqB,EAAE,GAAG,IAAe;;QAC7C,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;YAC3D,IAAI,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;SACvC;QAED,OAAO,MAAA,IAAI,CAAC,QAAQ,0CAAE,KAAU,CAAC;IACrC,CAAC;CACJ"}
1
+ {"version":3,"file":"SingletonProvider.js","sourceRoot":"","sources":["../../lib/provider/SingletonProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAMxD,MAAM,UAAU,WAAW;IACvB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,OAAO,iBAAqB,SAAQ,iBAAoB;IAG1D,YAA6B,QAAsB;QAC/C,KAAK,CAAC,QAAQ,CAAC,CAAC;QADS,aAAQ,GAAR,QAAQ,CAAc;QAF3C,aAAQ,GAAoB,IAAI,CAAC;IAIzC,CAAC;IAED,KAAK;QACD,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,CAAC,SAAqB,EAAE,GAAG,IAAe;;QAC7C,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;YAC3D,IAAI,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;SACvC;QAED,OAAO,MAAA,IAAI,CAAC,QAAQ,0CAAE,KAAU,CAAC;IACrC,CAAC;CACJ"}
@@ -1,6 +1,8 @@
1
1
  import { IProvider } from './IProvider';
2
2
  import { ProviderDecorator } from './ProviderDecorator';
3
3
  import { Tag, Tagged } from '../container/IContainer';
4
+ import { MapFn } from '../utils';
5
+ export declare function perTags(...tags: Tag[]): MapFn<IProvider>;
4
6
  export declare class TaggedProvider<T> extends ProviderDecorator<T> {
5
7
  private provider;
6
8
  private readonly tags;
@@ -1,4 +1,7 @@
1
1
  import { ProviderDecorator } from './ProviderDecorator';
2
+ export function perTags(...tags) {
3
+ return (provider) => new TaggedProvider(provider, tags);
4
+ }
2
5
  export class TaggedProvider extends ProviderDecorator {
3
6
  constructor(provider, tags) {
4
7
  super(provider);
@@ -1 +1 @@
1
- {"version":3,"file":"TaggedProvider.js","sourceRoot":"","sources":["../../lib/provider/TaggedProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,OAAO,cAAkB,SAAQ,iBAAoB;IACvD,YAAoB,QAAsB,EAAmB,IAAW;QACpE,KAAK,CAAC,QAAQ,CAAC,CAAC;QADA,aAAQ,GAAR,QAAQ,CAAc;QAAmB,SAAI,GAAJ,IAAI,CAAO;IAExE,CAAC;IAED,KAAK;QACD,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,CAAC,OAAe;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtF,CAAC;CACJ"}
1
+ {"version":3,"file":"TaggedProvider.js","sourceRoot":"","sources":["../../lib/provider/TaggedProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAIxD,MAAM,UAAU,OAAO,CAAC,GAAG,IAAW;IAClC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,OAAO,cAAkB,SAAQ,iBAAoB;IACvD,YAAoB,QAAsB,EAAmB,IAAW;QACpE,KAAK,CAAC,QAAQ,CAAC,CAAC;QADA,aAAQ,GAAR,QAAQ,CAAc;QAAmB,SAAI,GAAJ,IAAI,CAAO;IAExE,CAAC;IAED,KAAK;QACD,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,CAAC,OAAe;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtF,CAAC;CACJ"}
@@ -1,16 +1,12 @@
1
- import { ArgsFn } from '../provider/ArgsProvider';
2
- import { DependencyKey, IContainer, IContainerModule, Tag } from '../container/IContainer';
3
- import { ProviderBuilder } from '../provider/ProviderBuilder';
4
- import { constructor } from '../utils';
1
+ import { DependencyKey, IContainer, IContainerModule } from '../container/IContainer';
2
+ import { constructor, MapFn } from '../utils';
3
+ import { IProvider } from '../provider/IProvider';
5
4
  export declare const forKey: (key: DependencyKey) => ClassDecorator;
6
5
  export declare class Registration implements IContainerModule {
7
6
  private key;
8
- private providerBuilder;
9
- static fromClass<T>(Target: constructor<T>): Registration;
10
- constructor(key: DependencyKey, providerBuilder: ProviderBuilder);
11
- withArgs(...extraArgs: unknown[]): this;
12
- withArgsFn(argsFn: ArgsFn): this;
13
- perTags(...tags: Tag[]): this;
14
- asSingleton(...tags: Tag[]): this;
7
+ private provider;
8
+ static fromClass(Target: constructor<unknown>): Registration;
9
+ constructor(key: DependencyKey, provider: IProvider);
10
+ map(...mappers: MapFn<IProvider>[]): this;
15
11
  applyTo(container: IContainer): void;
16
12
  }
@@ -1,37 +1,25 @@
1
1
  import { DependencyMissingKeyError } from './DependencyMissingKeyError';
2
- import { ProviderBuilder } from '../provider/ProviderBuilder';
3
2
  import { getProp, setProp } from '../reflection';
3
+ import { Provider } from '../provider/Provider';
4
4
  export const forKey = (key) => setProp('DependencyKey', key);
5
5
  export class Registration {
6
- constructor(key, providerBuilder) {
6
+ constructor(key, provider) {
7
7
  this.key = key;
8
- this.providerBuilder = providerBuilder;
8
+ this.provider = provider;
9
9
  }
10
10
  static fromClass(Target) {
11
11
  const dependencyKey = getProp(Target, 'DependencyKey');
12
12
  if (dependencyKey === undefined) {
13
13
  throw new DependencyMissingKeyError(`Pls provide dependency key for ${Target.name}`);
14
14
  }
15
- return new Registration(dependencyKey, ProviderBuilder.fromClass(Target));
15
+ return new Registration(dependencyKey, Provider.fromClass(Target));
16
16
  }
17
- withArgs(...extraArgs) {
18
- this.providerBuilder = this.providerBuilder.withArgs(...extraArgs);
19
- return this;
20
- }
21
- withArgsFn(argsFn) {
22
- this.providerBuilder = this.providerBuilder.withArgsFn(argsFn);
23
- return this;
24
- }
25
- perTags(...tags) {
26
- this.providerBuilder = this.providerBuilder.perTags(...tags);
27
- return this;
28
- }
29
- asSingleton(...tags) {
30
- this.providerBuilder = this.providerBuilder.asSingleton(...tags);
17
+ map(...mappers) {
18
+ this.provider = this.provider.pipe(...mappers);
31
19
  return this;
32
20
  }
33
21
  applyTo(container) {
34
- container.register(this.key, this.providerBuilder.build());
22
+ container.register(this.key, this.provider);
35
23
  }
36
24
  }
37
25
  //# sourceMappingURL=Registration.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Registration.js","sourceRoot":"","sources":["../../lib/registration/Registration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAkB,EAAkB,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;AAE5F,MAAM,OAAO,YAAY;IASrB,YAAoB,GAAkB,EAAU,eAAgC;QAA5D,QAAG,GAAH,GAAG,CAAe;QAAU,oBAAe,GAAf,eAAe,CAAiB;IAAG,CAAC;IARpF,MAAM,CAAC,SAAS,CAAI,MAAsB;QACtC,MAAM,aAAa,GAAG,OAAO,CAAgB,MAAM,EAAE,eAAe,CAAC,CAAC;QACtE,IAAI,aAAa,KAAK,SAAS,EAAE;YAC7B,MAAM,IAAI,yBAAyB,CAAC,kCAAkC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;SACxF;QACD,OAAO,IAAI,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9E,CAAC;IAID,QAAQ,CAAC,GAAG,SAAoB;QAC5B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,MAAc;QACrB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,GAAG,IAAW;QAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,WAAW,CAAC,GAAG,IAAW;QACtB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,SAAqB;QACzB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;CACJ"}
1
+ {"version":3,"file":"Registration.js","sourceRoot":"","sources":["../../lib/registration/Registration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAGxE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAkB,EAAkB,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;AAE5F,MAAM,OAAO,YAAY;IASrB,YAAoB,GAAkB,EAAU,QAAmB;QAA/C,QAAG,GAAH,GAAG,CAAe;QAAU,aAAQ,GAAR,QAAQ,CAAW;IAAG,CAAC;IARvE,MAAM,CAAC,SAAS,CAAC,MAA4B;QACzC,MAAM,aAAa,GAAG,OAAO,CAAgB,MAAM,EAAE,eAAe,CAAC,CAAC;QACtE,IAAI,aAAa,KAAK,SAAS,EAAE;YAC7B,MAAM,IAAI,yBAAyB,CAAC,kCAAkC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;SACxF;QACD,OAAO,IAAI,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,CAAC;IAID,GAAG,CAAC,GAAG,OAA2B;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,SAAqB;QACzB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;CACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-ioc-container",
3
- "version": "22.4.7",
3
+ "version": "23.0.0",
4
4
  "description": "Typescript IoC container",
5
5
  "author": "ibabkin <igba14@gmail.com>",
6
6
  "homepage": "https://github.com/IgorBabkin/ts-ioc-container/tree/master/packages/ts-ioc-container",
@@ -48,5 +48,5 @@
48
48
  "ts-jest": "27.0.5",
49
49
  "typescript": "4.4.3"
50
50
  },
51
- "gitHead": "448a4885e2e6fb499a4fd7f52c55553b8e4eec8c"
51
+ "gitHead": "3d62b186cb55577ad74aabc5330d00fd20ea7610"
52
52
  }
@@ -1,18 +0,0 @@
1
- import { IProvider, ResolveDependency } from './IProvider';
2
- import { ArgsFn } from './ArgsProvider';
3
- import { constructor } from '../utils';
4
- import { Tag } from '../container/IContainer';
5
- export declare const perTags: (...tags: Tag[]) => ClassDecorator;
6
- export declare const asSingleton: (...tags: Tag[]) => ClassDecorator;
7
- export declare class ProviderBuilder {
8
- private provider;
9
- static fromClass(Target: constructor<unknown>): ProviderBuilder;
10
- static fromValue(value: unknown): ProviderBuilder;
11
- static fromFn(fn: ResolveDependency): ProviderBuilder;
12
- constructor(provider: IProvider);
13
- withArgs(...extraArgs: unknown[]): this;
14
- withArgsFn(argsFn: ArgsFn): this;
15
- perTags(...tags: Tag[]): this;
16
- asSingleton(...tags: Tag[]): this;
17
- build(): IProvider<unknown>;
18
- }
@@ -1,108 +0,0 @@
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 = exports.asSingleton = exports.perTags = 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 reflection_1 = require("../reflection");
34
- var perTags = function () {
35
- var tags = [];
36
- for (var _i = 0; _i < arguments.length; _i++) {
37
- tags[_i] = arguments[_i];
38
- }
39
- return (0, reflection_1.reduceProp)('provider', function (prev) { return function (builder) {
40
- var _a;
41
- return (_a = prev(builder)).perTags.apply(_a, __spreadArray([], __read(tags), false));
42
- }; }, function (x) { return x; });
43
- };
44
- exports.perTags = perTags;
45
- var asSingleton = function () {
46
- var tags = [];
47
- for (var _i = 0; _i < arguments.length; _i++) {
48
- tags[_i] = arguments[_i];
49
- }
50
- return (0, reflection_1.reduceProp)('provider', function (prev) { return function (builder) {
51
- var _a;
52
- return (_a = prev(builder)).asSingleton.apply(_a, __spreadArray([], __read(tags), false));
53
- }; }, function (x) { return x; });
54
- };
55
- exports.asSingleton = asSingleton;
56
- var ProviderBuilder = /** @class */ (function () {
57
- function ProviderBuilder(provider) {
58
- this.provider = provider;
59
- }
60
- ProviderBuilder.fromClass = function (Target) {
61
- var _a;
62
- var map = (_a = (0, reflection_1.getProp)(Target, 'provider')) !== null && _a !== void 0 ? _a : (function (x) { return x; });
63
- return map(new ProviderBuilder(Provider_1.Provider.fromClass(Target)));
64
- };
65
- ProviderBuilder.fromValue = function (value) {
66
- return new ProviderBuilder(Provider_1.Provider.fromValue(value));
67
- };
68
- ProviderBuilder.fromFn = function (fn) {
69
- return new ProviderBuilder(new Provider_1.Provider(fn));
70
- };
71
- ProviderBuilder.prototype.withArgs = function () {
72
- var extraArgs = [];
73
- for (var _i = 0; _i < arguments.length; _i++) {
74
- extraArgs[_i] = arguments[_i];
75
- }
76
- this.provider = new ArgsProvider_1.ArgsProvider(this.provider, function () { return extraArgs; });
77
- return this;
78
- };
79
- ProviderBuilder.prototype.withArgsFn = function (argsFn) {
80
- this.provider = new ArgsProvider_1.ArgsProvider(this.provider, argsFn);
81
- return this;
82
- };
83
- ProviderBuilder.prototype.perTags = function () {
84
- var tags = [];
85
- for (var _i = 0; _i < arguments.length; _i++) {
86
- tags[_i] = arguments[_i];
87
- }
88
- this.provider = new TaggedProvider_1.TaggedProvider(this.provider, tags);
89
- return this;
90
- };
91
- ProviderBuilder.prototype.asSingleton = function () {
92
- var tags = [];
93
- for (var _i = 0; _i < arguments.length; _i++) {
94
- tags[_i] = arguments[_i];
95
- }
96
- this.provider = new SingletonProvider_1.SingletonProvider(this.provider);
97
- if (tags.length > 0) {
98
- this.provider = new TaggedProvider_1.TaggedProvider(this.provider, tags);
99
- }
100
- return this;
101
- };
102
- ProviderBuilder.prototype.build = function () {
103
- return this.provider;
104
- };
105
- return ProviderBuilder;
106
- }());
107
- exports.ProviderBuilder = ProviderBuilder;
108
- //# sourceMappingURL=ProviderBuilder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProviderBuilder.js","sourceRoot":"","sources":["../../lib/provider/ProviderBuilder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+CAAsD;AACtD,mDAAkD;AAClD,yDAAwD;AAExD,uCAAsC;AACtC,4CAAoD;AAG7C,IAAM,OAAO,GAAG;IAAC,cAAc;SAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;QAAd,yBAAc;;IAClC,OAAA,IAAA,uBAAU,EACN,UAAU,EACV,UAAC,IAAI,IAAK,OAAA,UAAC,OAAO;;QAAK,OAAA,CAAA,KAAA,IAAI,CAAC,OAAO,CAAC,CAAA,CAAC,OAAO,oCAAI,IAAI;IAA7B,CAA8B,EAA3C,CAA2C,EACrD,UAAC,CAAC,IAAK,OAAA,CAAC,EAAD,CAAC,CACX;AAJD,CAIC,CAAC;AALO,QAAA,OAAO,WAKd;AAEC,IAAM,WAAW,GAAG;IAAC,cAAc;SAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;QAAd,yBAAc;;IACtC,OAAA,IAAA,uBAAU,EACN,UAAU,EACV,UAAC,IAAI,IAAK,OAAA,UAAC,OAAO;;QAAK,OAAA,CAAA,KAAA,IAAI,CAAC,OAAO,CAAC,CAAA,CAAC,WAAW,oCAAI,IAAI;IAAjC,CAAkC,EAA/C,CAA+C,EACzD,UAAC,CAAC,IAAK,OAAA,CAAC,EAAD,CAAC,CACX;AAJD,CAIC,CAAC;AALO,QAAA,WAAW,eAKlB;AAEN;IAcI,yBAAoB,QAAmB;QAAnB,aAAQ,GAAR,QAAQ,CAAW;IAAG,CAAC;IAbpC,yBAAS,GAAhB,UAAiB,MAA4B;;QACzC,IAAM,GAAG,GAA2B,MAAA,IAAA,oBAAO,EAAC,MAAM,EAAE,UAAU,CAAC,mCAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,EAAD,CAAC,CAAC,CAAC;QAC9E,OAAO,GAAG,CAAC,IAAI,eAAe,CAAC,mBAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IAEM,yBAAS,GAAhB,UAAiB,KAAc;QAC3B,OAAO,IAAI,eAAe,CAAC,mBAAQ,CAAC,SAAS,CAAC,KAAK,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,AA1CD,IA0CC;AA1CY,0CAAe"}
@@ -1,18 +0,0 @@
1
- import { IProvider, ResolveDependency } from './IProvider';
2
- import { ArgsFn } from './ArgsProvider';
3
- import { constructor } from '../utils';
4
- import { Tag } from '../container/IContainer';
5
- export declare const perTags: (...tags: Tag[]) => ClassDecorator;
6
- export declare const asSingleton: (...tags: Tag[]) => ClassDecorator;
7
- export declare class ProviderBuilder {
8
- private provider;
9
- static fromClass(Target: constructor<unknown>): ProviderBuilder;
10
- static fromValue(value: unknown): ProviderBuilder;
11
- static fromFn(fn: ResolveDependency): ProviderBuilder;
12
- constructor(provider: IProvider);
13
- withArgs(...extraArgs: unknown[]): this;
14
- withArgsFn(argsFn: ArgsFn): this;
15
- perTags(...tags: Tag[]): this;
16
- asSingleton(...tags: Tag[]): this;
17
- build(): IProvider<unknown>;
18
- }
@@ -1,46 +0,0 @@
1
- import { ArgsProvider } from './ArgsProvider';
2
- import { TaggedProvider } from './TaggedProvider';
3
- import { SingletonProvider } from './SingletonProvider';
4
- import { Provider } from './Provider';
5
- import { reduceProp, getProp } from '../reflection';
6
- export const perTags = (...tags) => reduceProp('provider', (prev) => (builder) => prev(builder).perTags(...tags), (x) => x);
7
- export const asSingleton = (...tags) => reduceProp('provider', (prev) => (builder) => prev(builder).asSingleton(...tags), (x) => x);
8
- export class ProviderBuilder {
9
- constructor(provider) {
10
- this.provider = provider;
11
- }
12
- static fromClass(Target) {
13
- var _a;
14
- const map = (_a = getProp(Target, 'provider')) !== null && _a !== void 0 ? _a : ((x) => x);
15
- return map(new ProviderBuilder(Provider.fromClass(Target)));
16
- }
17
- static fromValue(value) {
18
- return new ProviderBuilder(Provider.fromValue(value));
19
- }
20
- static fromFn(fn) {
21
- return new ProviderBuilder(new Provider(fn));
22
- }
23
- withArgs(...extraArgs) {
24
- this.provider = new ArgsProvider(this.provider, () => extraArgs);
25
- return this;
26
- }
27
- withArgsFn(argsFn) {
28
- this.provider = new ArgsProvider(this.provider, argsFn);
29
- return this;
30
- }
31
- perTags(...tags) {
32
- this.provider = new TaggedProvider(this.provider, tags);
33
- return this;
34
- }
35
- asSingleton(...tags) {
36
- this.provider = new SingletonProvider(this.provider);
37
- if (tags.length > 0) {
38
- this.provider = new TaggedProvider(this.provider, tags);
39
- }
40
- return this;
41
- }
42
- build() {
43
- return this.provider;
44
- }
45
- }
46
- //# sourceMappingURL=ProviderBuilder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProviderBuilder.js","sourceRoot":"","sources":["../../lib/provider/ProviderBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGpD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAW,EAAkB,EAAE,CACtD,UAAU,CACN,UAAU,EACV,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,EACrD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CACX,CAAC;AAEN,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAG,IAAW,EAAkB,EAAE,CAC1D,UAAU,CACN,UAAU,EACV,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,EACzD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CACX,CAAC;AAEN,MAAM,OAAO,eAAe;IAcxB,YAAoB,QAAmB;QAAnB,aAAQ,GAAR,QAAQ,CAAW;IAAG,CAAC;IAb3C,MAAM,CAAC,SAAS,CAAC,MAA4B;;QACzC,MAAM,GAAG,GAA2B,MAAA,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,mCAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9E,OAAO,GAAG,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAc;QAC3B,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,EAAqB;QAC/B,OAAO,IAAI,eAAe,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAID,QAAQ,CAAC,GAAG,SAAoB;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,MAAc;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,GAAG,IAAW;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,WAAW,CAAC,GAAG,IAAW;QACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SAC3D;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;CACJ"}