@spinajs/di 2.0.86 → 2.0.88

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 (133) hide show
  1. package/lib/{array.d.ts → cjs/array.d.ts} +0 -0
  2. package/lib/cjs/array.d.ts.map +1 -0
  3. package/lib/cjs/array.js +14 -0
  4. package/lib/cjs/array.js.map +1 -0
  5. package/lib/{binder.d.ts → cjs/binder.d.ts} +0 -0
  6. package/lib/cjs/binder.d.ts.map +1 -0
  7. package/lib/cjs/binder.js +97 -0
  8. package/lib/cjs/binder.js.map +1 -0
  9. package/lib/{container-cache.d.ts → cjs/container-cache.d.ts} +0 -0
  10. package/lib/cjs/container-cache.d.ts.map +1 -0
  11. package/lib/cjs/container-cache.js +64 -0
  12. package/lib/cjs/container-cache.js.map +1 -0
  13. package/lib/cjs/container.d.ts +134 -0
  14. package/lib/cjs/container.d.ts.map +1 -0
  15. package/lib/cjs/container.js +466 -0
  16. package/lib/cjs/container.js.map +1 -0
  17. package/lib/{decorators.d.ts → cjs/decorators.d.ts} +0 -0
  18. package/lib/cjs/decorators.d.ts.map +1 -0
  19. package/lib/cjs/decorators.js +304 -0
  20. package/lib/cjs/decorators.js.map +1 -0
  21. package/lib/{enums.d.ts → cjs/enums.d.ts} +0 -0
  22. package/lib/cjs/enums.d.ts.map +1 -0
  23. package/lib/cjs/enums.js +36 -0
  24. package/lib/cjs/enums.js.map +1 -0
  25. package/lib/{exceptions.d.ts → cjs/exceptions.d.ts} +0 -0
  26. package/lib/cjs/exceptions.d.ts.map +1 -0
  27. package/lib/cjs/exceptions.js +26 -0
  28. package/lib/cjs/exceptions.js.map +1 -0
  29. package/lib/{helpers.d.ts → cjs/helpers.d.ts} +0 -0
  30. package/lib/cjs/helpers.d.ts.map +1 -0
  31. package/lib/cjs/helpers.js +69 -0
  32. package/lib/cjs/helpers.js.map +1 -0
  33. package/lib/{index.d.ts → cjs/index.d.ts} +0 -0
  34. package/lib/cjs/index.d.ts.map +1 -0
  35. package/lib/cjs/index.js +42 -0
  36. package/lib/cjs/index.js.map +1 -0
  37. package/lib/cjs/interfaces.d.ts +152 -0
  38. package/lib/cjs/interfaces.d.ts.map +1 -0
  39. package/lib/cjs/interfaces.js +48 -0
  40. package/lib/cjs/interfaces.js.map +1 -0
  41. package/lib/{registry.d.ts → cjs/registry.d.ts} +0 -0
  42. package/lib/cjs/registry.d.ts.map +1 -0
  43. package/lib/cjs/registry.js +81 -0
  44. package/lib/cjs/registry.js.map +1 -0
  45. package/lib/{root.d.ts → cjs/root.d.ts} +0 -0
  46. package/lib/cjs/root.d.ts.map +1 -0
  47. package/lib/cjs/root.js +177 -0
  48. package/lib/cjs/root.js.map +1 -0
  49. package/lib/{types.d.ts → cjs/types.d.ts} +0 -0
  50. package/lib/cjs/types.d.ts.map +1 -0
  51. package/lib/cjs/types.js +3 -0
  52. package/lib/cjs/types.js.map +1 -0
  53. package/lib/mjs/array.d.ts +11 -0
  54. package/lib/mjs/array.d.ts.map +1 -0
  55. package/lib/{array.js → mjs/array.js} +0 -0
  56. package/lib/mjs/array.js.map +1 -0
  57. package/lib/mjs/binder.d.ts +40 -0
  58. package/lib/mjs/binder.d.ts.map +1 -0
  59. package/lib/{binder.js → mjs/binder.js} +0 -0
  60. package/lib/mjs/binder.js.map +1 -0
  61. package/lib/mjs/container-cache.d.ts +18 -0
  62. package/lib/mjs/container-cache.d.ts.map +1 -0
  63. package/lib/{container-cache.js → mjs/container-cache.js} +0 -0
  64. package/lib/mjs/container-cache.js.map +1 -0
  65. package/lib/{container.d.ts → mjs/container.d.ts} +0 -0
  66. package/lib/mjs/container.d.ts.map +1 -0
  67. package/lib/{container.js → mjs/container.js} +0 -0
  68. package/lib/mjs/container.js.map +1 -0
  69. package/lib/mjs/decorators.d.ts +142 -0
  70. package/lib/mjs/decorators.d.ts.map +1 -0
  71. package/lib/{decorators.js → mjs/decorators.js} +0 -0
  72. package/lib/mjs/decorators.js.map +1 -0
  73. package/lib/mjs/enums.d.ts +32 -0
  74. package/lib/mjs/enums.d.ts.map +1 -0
  75. package/lib/{enums.js → mjs/enums.js} +1 -1
  76. package/lib/mjs/enums.js.map +1 -0
  77. package/lib/mjs/exceptions.d.ts +18 -0
  78. package/lib/mjs/exceptions.d.ts.map +1 -0
  79. package/lib/{exceptions.js → mjs/exceptions.js} +0 -0
  80. package/lib/mjs/exceptions.js.map +1 -0
  81. package/lib/mjs/helpers.d.ts +26 -0
  82. package/lib/mjs/helpers.d.ts.map +1 -0
  83. package/lib/{helpers.js → mjs/helpers.js} +0 -0
  84. package/lib/mjs/helpers.js.map +1 -0
  85. package/lib/mjs/index.d.ts +13 -0
  86. package/lib/mjs/index.d.ts.map +1 -0
  87. package/lib/{index.js → mjs/index.js} +0 -0
  88. package/lib/mjs/index.js.map +1 -0
  89. package/lib/{interfaces.d.ts → mjs/interfaces.d.ts} +0 -0
  90. package/lib/mjs/interfaces.d.ts.map +1 -0
  91. package/lib/{interfaces.js → mjs/interfaces.js} +0 -0
  92. package/lib/mjs/interfaces.js.map +1 -0
  93. package/lib/mjs/registry.d.ts +15 -0
  94. package/lib/mjs/registry.d.ts.map +1 -0
  95. package/lib/{registry.js → mjs/registry.js} +0 -0
  96. package/lib/mjs/registry.js.map +1 -0
  97. package/lib/mjs/root.d.ts +107 -0
  98. package/lib/mjs/root.d.ts.map +1 -0
  99. package/lib/{root.js → mjs/root.js} +0 -0
  100. package/lib/mjs/root.js.map +1 -0
  101. package/lib/mjs/types.d.ts +14 -0
  102. package/lib/mjs/types.d.ts.map +1 -0
  103. package/lib/{types.js → mjs/types.js} +0 -0
  104. package/lib/mjs/types.js.map +1 -0
  105. package/lib/tsconfig.cjs.tsbuildinfo +1 -0
  106. package/lib/tsconfig.tsbuildinfo +1 -0
  107. package/package.json +11 -4
  108. package/lib/array.d.ts.map +0 -1
  109. package/lib/array.js.map +0 -1
  110. package/lib/binder.d.ts.map +0 -1
  111. package/lib/binder.js.map +0 -1
  112. package/lib/container-cache.d.ts.map +0 -1
  113. package/lib/container-cache.js.map +0 -1
  114. package/lib/container.d.ts.map +0 -1
  115. package/lib/container.js.map +0 -1
  116. package/lib/decorators.d.ts.map +0 -1
  117. package/lib/decorators.js.map +0 -1
  118. package/lib/enums.d.ts.map +0 -1
  119. package/lib/enums.js.map +0 -1
  120. package/lib/exceptions.d.ts.map +0 -1
  121. package/lib/exceptions.js.map +0 -1
  122. package/lib/helpers.d.ts.map +0 -1
  123. package/lib/helpers.js.map +0 -1
  124. package/lib/index.d.ts.map +0 -1
  125. package/lib/index.js.map +0 -1
  126. package/lib/interfaces.d.ts.map +0 -1
  127. package/lib/interfaces.js.map +0 -1
  128. package/lib/registry.d.ts.map +0 -1
  129. package/lib/registry.js.map +0 -1
  130. package/lib/root.d.ts.map +0 -1
  131. package/lib/root.js.map +0 -1
  132. package/lib/types.d.ts.map +0 -1
  133. package/lib/types.js.map +0 -1
@@ -0,0 +1,304 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.Singleton = exports.PerInstanceCheck = exports.PerInstance = exports.NewInstance = exports.PerChildInstance = exports.LazyInject = exports.Autoinject = exports.Inject = exports.Injectable = exports.AddDependency = exports.AddDependencyForProperty = exports.DI_DESCRIPTION_SYMBOL = void 0;
27
+ const enums_js_1 = require("./enums.js");
28
+ const DI = __importStar(require("./root.js"));
29
+ const helpers_js_1 = require("./helpers.js");
30
+ exports.DI_DESCRIPTION_SYMBOL = '__DI_INJECTION_DESCRIPTOR__';
31
+ function AddDependencyForProperty(callback) {
32
+ return (target, propertyKey, indexOrDescriptor) => {
33
+ let descriptor = Reflect.getOwnMetadata(exports.DI_DESCRIPTION_SYMBOL, target.constructor);
34
+ if (!descriptor) {
35
+ descriptor = {
36
+ inject: [],
37
+ resolver: enums_js_1.ResolveType.Singleton,
38
+ };
39
+ Reflect.defineMetadata(exports.DI_DESCRIPTION_SYMBOL, descriptor, target.constructor);
40
+ }
41
+ if (callback) {
42
+ callback(descriptor, target, propertyKey, indexOrDescriptor);
43
+ }
44
+ };
45
+ }
46
+ exports.AddDependencyForProperty = AddDependencyForProperty;
47
+ function AddDependency(callback) {
48
+ return (target, propertyKey, indexOrDescriptor) => {
49
+ let descriptor = Reflect.getOwnMetadata(exports.DI_DESCRIPTION_SYMBOL, target);
50
+ if (!descriptor) {
51
+ descriptor = {
52
+ inject: [],
53
+ resolver: enums_js_1.ResolveType.Singleton,
54
+ };
55
+ Reflect.defineMetadata(exports.DI_DESCRIPTION_SYMBOL, descriptor, target);
56
+ }
57
+ if (callback) {
58
+ callback(descriptor, target, propertyKey, indexOrDescriptor);
59
+ }
60
+ };
61
+ }
62
+ exports.AddDependency = AddDependency;
63
+ /**
64
+ *
65
+ * Class with this decorator is automatically registered in DI container an can be resolved.
66
+ * NOTE: we dont need to register class before resolving. Injectable decorator is mainly used in extensions & plugins
67
+ * to register implementation that can be resolved by framework or other parts without knowing about specific implementations eg.
68
+ * avaible database drivers.
69
+ *
70
+ * @param as - register class in DI container as something else.
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ *
75
+ * @Injectable(OrmDriver)
76
+ * class MysqlOrmDriver{
77
+ *
78
+ * // implementation ...
79
+ * }
80
+ *
81
+ *
82
+ * // somewhere else in code
83
+ * const avaibleDrivers = DI.resolve(Array.of(OrmDriver));
84
+ *
85
+ *
86
+ * ```
87
+ *
88
+ */
89
+ function Injectable(as) {
90
+ return (target) => {
91
+ if (as) {
92
+ DI.register(target).as(as);
93
+ }
94
+ else {
95
+ DI.register(target).asSelf();
96
+ }
97
+ };
98
+ }
99
+ exports.Injectable = Injectable;
100
+ /**
101
+ * Sets dependency injection guidelines - what to inject for specified class. If multiple instances are registered at specified type,
102
+ * only first one is resolved and injected
103
+ * @param args - what to inject - class definitions
104
+ * @example
105
+ * ```javascript
106
+ *
107
+ * @Inject(Bar)
108
+ * class Foo{
109
+ *
110
+ * @Inject(Bar)
111
+ * barInstance : Bar;
112
+ *
113
+ * constructor(bar : Bar){
114
+ * // bar is injected when Foo is created via DI container
115
+ * this.barInstance = bar;
116
+ * }
117
+ *
118
+ * someFunc(){
119
+ *
120
+ * this._barInstance.doSmth();
121
+ * }
122
+ * }
123
+ *
124
+ * ```
125
+ */
126
+ function Inject(...args) {
127
+ return AddDependency((descriptor) => {
128
+ for (const a of args) {
129
+ // avoid injecting duplicates
130
+ if (!descriptor.inject.find((i) => {
131
+ if ((0, helpers_js_1.isTypedArray)(i)) {
132
+ if ((0, helpers_js_1.isTypedArray)(a)) {
133
+ return i.Type === a.Type;
134
+ }
135
+ else {
136
+ return i.Type === a;
137
+ }
138
+ }
139
+ else {
140
+ return i.inject === a;
141
+ }
142
+ })) {
143
+ descriptor.inject.push({
144
+ autoinject: false,
145
+ autoinjectKey: '',
146
+ inject: a,
147
+ mapFunc: null,
148
+ });
149
+ }
150
+ }
151
+ });
152
+ }
153
+ exports.Inject = Inject;
154
+ /**
155
+ * Automatically injects dependency based on reflected property type. Uses experimental typescript reflection api
156
+ * If decorator is applied to array property all registered type instances are injected, otherwise only first / only that exists
157
+ *
158
+ * @param injectType - when injecting array of some type, type must be explicitly provided. Typescript reflection cant reflect declared array types
159
+ * @param mapFunc - when injecting array we sometimes need services mapped by some kind of key, so later we dont need to search o(n) elements for specific service, but reference by key/name
160
+ * @example
161
+ * ```javascript
162
+ * class Foo{
163
+ *
164
+ * @Autoinject
165
+ * barInstance : Bar;
166
+ *
167
+ * constructor(){
168
+ * // ....
169
+ * }
170
+ *
171
+ * someFunc(){
172
+ *
173
+ * // automatically injected dependency is avaible now
174
+ * this.barInstance.doSmth();
175
+ * }
176
+ * }
177
+ *
178
+ * ```
179
+ */
180
+ function Autoinject(typeOrOptions, options) {
181
+ return AddDependencyForProperty((descriptor, target, propertyKey) => {
182
+ let type = Reflect.getMetadata('design:type', target, propertyKey);
183
+ const isArray = type.name === 'Array' || type.name === 'Map';
184
+ let opt = options;
185
+ if ((0, helpers_js_1.isConstructor)(typeOrOptions)) {
186
+ if (isArray && !typeOrOptions) {
187
+ throw new Error('you must provide inject type when injecting array');
188
+ }
189
+ type = typeOrOptions;
190
+ }
191
+ else {
192
+ opt = typeOrOptions;
193
+ }
194
+ descriptor.inject.push({
195
+ autoinject: true,
196
+ autoinjectKey: propertyKey,
197
+ inject: isArray ? Array.ofType(typeOrOptions) : type,
198
+ mapFunc: opt?.mapFunc,
199
+ options: opt?.options,
200
+ });
201
+ });
202
+ }
203
+ exports.Autoinject = Autoinject;
204
+ /**
205
+ * Lazy injects service to object. Use only with class properties
206
+ *
207
+ * @param service - class or name of service to inject
208
+ *
209
+ * @example
210
+ * ```javascript
211
+ *
212
+ * class Foo{
213
+ * ...
214
+ *
215
+ * @LazyInject(Bar)
216
+ * _barInstance : Bar; // _barInstance is not yet resolved
217
+ *
218
+ * someFunc(){
219
+ * // barInstance is resolved only when first accessed
220
+ * this._barInstance.doSmth();
221
+ * }
222
+ * }
223
+ *
224
+ * ```
225
+ */
226
+ function LazyInject(service) {
227
+ return (target, key) => {
228
+ const type = Reflect.getMetadata('design:type', target, key);
229
+ // property getter
230
+ const getter = () => {
231
+ if (!service) {
232
+ return DI.resolve(type);
233
+ }
234
+ else {
235
+ if (typeof service === 'string') {
236
+ return DI.get(service);
237
+ }
238
+ else {
239
+ return DI.resolve(service);
240
+ }
241
+ }
242
+ };
243
+ // Create new property with getter and setter
244
+ Object.defineProperty(target, key, {
245
+ get: getter,
246
+ });
247
+ };
248
+ }
249
+ exports.LazyInject = LazyInject;
250
+ /**
251
+ * Per child instance injection decorator - object is resolved once per container - child containers have own instances.
252
+ */
253
+ function PerChildInstance() {
254
+ return AddDependency((descriptor) => {
255
+ descriptor.resolver = enums_js_1.ResolveType.PerChildContainer;
256
+ });
257
+ }
258
+ exports.PerChildInstance = PerChildInstance;
259
+ /**
260
+ * NewInstance injection decorator - every time class is injected - its created from scratch
261
+ */
262
+ function NewInstance() {
263
+ return AddDependency((descriptor) => {
264
+ descriptor.resolver = enums_js_1.ResolveType.NewInstance;
265
+ });
266
+ }
267
+ exports.NewInstance = NewInstance;
268
+ /**
269
+ * If we have multiple registered types at one base type
270
+ * we can resolve only one by default. Per instance means, that
271
+ * we can resolve all types registered at base type once. Limitaiton is
272
+ * that, you should call resolve not on base type, but on target type.
273
+ *
274
+ * In comparison, Singleton flag means that only one instance can be resolved
275
+ * for base class
276
+ */
277
+ function PerInstance() {
278
+ return AddDependency((descriptor) => {
279
+ descriptor.resolver = enums_js_1.ResolveType.PerInstance;
280
+ });
281
+ }
282
+ exports.PerInstance = PerInstance;
283
+ /**
284
+ *
285
+ * Before resolve, check function on all resolved instances of given type is called with creation options
286
+ * It is used for ensuring that for eg. only one instance of service with provided
287
+ * options is resolved, but allow to create with other option set
288
+ *
289
+ * @returns
290
+ */
291
+ function PerInstanceCheck() {
292
+ return AddDependency((descriptor) => {
293
+ descriptor.resolver = enums_js_1.ResolveType.PerInstanceCheck;
294
+ });
295
+ }
296
+ exports.PerInstanceCheck = PerInstanceCheck;
297
+ /**
298
+ * Singleton injection decorator - every time class is resolved - its created only once globally ( even in child DI containers )
299
+ */
300
+ function Singleton() {
301
+ return AddDependency();
302
+ }
303
+ exports.Singleton = Singleton;
304
+ //# sourceMappingURL=decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"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"}
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../../src/enums.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,WAAW;IACrB;;OAEG;IACH,SAAS,IAAA;IAET;;OAEG;IACH,WAAW,IAAA;IAEX;;OAEG;IACH,iBAAiB,IAAA;IAEjB;;;;;;;;OAQG;IACH,WAAW,IAAA;IAEX;;OAEG;IACH,gBAAgB,IAAA;CACjB"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResolveType = void 0;
4
+ /**
5
+ * How to resolve class
6
+ */
7
+ var ResolveType;
8
+ (function (ResolveType) {
9
+ /**
10
+ * Application wise single instance. Default behaviour
11
+ */
12
+ ResolveType[ResolveType["Singleton"] = 0] = "Singleton";
13
+ /**
14
+ * New instance every time is requested
15
+ */
16
+ ResolveType[ResolveType["NewInstance"] = 1] = "NewInstance";
17
+ /**
18
+ * New instance per child DI container.
19
+ */
20
+ ResolveType[ResolveType["PerChildContainer"] = 2] = "PerChildContainer";
21
+ /**
22
+ * Singleton per target type
23
+ *
24
+ * eg. if we have multiple registered types at one base type
25
+ * we can resolve any of it once
26
+ *
27
+ * In comparison, Singleton flag means that only one instance can be resolved
28
+ * for base class
29
+ */
30
+ ResolveType[ResolveType["PerInstance"] = 3] = "PerInstance";
31
+ /**
32
+ * Only one instance with given name can exists of the same service
33
+ */
34
+ ResolveType[ResolveType["PerInstanceCheck"] = 4] = "PerInstanceCheck";
35
+ })(ResolveType = exports.ResolveType || (exports.ResolveType = {}));
36
+ //# sourceMappingURL=enums.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/enums.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,IAAY,WA+BX;AA/BD,WAAY,WAAW;IACrB;;OAEG;IACH,uDAAS,CAAA;IAET;;OAEG;IACH,2DAAW,CAAA;IAEX;;OAEG;IACH,uEAAiB,CAAA;IAEjB;;;;;;;;OAQG;IACH,2DAAW,CAAA;IAEX;;OAEG;IACH,qEAAgB,CAAA;AAClB,CAAC,EA/BW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QA+BtB"}
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exceptions.d.ts","sourceRoot":"","sources":["../../src/exceptions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC;;;OAGG;gBACS,OAAO,CAAC,EAAE,MAAM;CAG7B;AAED,qBAAa,aAAc,SAAQ,KAAK;CAAG;AAE3C;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;CAAG"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ServiceNotFound = exports.BindException = exports.ResolveException = void 0;
4
+ /**
5
+ * Exception thrown when cannot resolve type
6
+ */
7
+ class ResolveException extends Error {
8
+ /**
9
+ * Constructs new exception with message
10
+ * @param message - error message
11
+ */
12
+ constructor(message) {
13
+ super(message);
14
+ }
15
+ }
16
+ exports.ResolveException = ResolveException;
17
+ class BindException extends Error {
18
+ }
19
+ exports.BindException = BindException;
20
+ /**
21
+ * Service is not registered in DI container
22
+ */
23
+ class ServiceNotFound extends Error {
24
+ }
25
+ exports.ServiceNotFound = ServiceNotFound;
26
+ //# sourceMappingURL=exceptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exceptions.js","sourceRoot":"","sources":["../../src/exceptions.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,gBAAiB,SAAQ,KAAK;IACzC;;;OAGG;IACH,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AARD,4CAQC;AAED,MAAa,aAAc,SAAQ,KAAK;CAAG;AAA3C,sCAA2C;AAE3C;;GAEG;AACH,MAAa,eAAgB,SAAQ,KAAK;CAAG;AAA7C,0CAA6C"}
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAQjE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,CAE3D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,MAAM,CAEpD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,YAAY,CAEhE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,CAE3D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,WAAW,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,CAEjE;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAE3D;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,OAQtE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAExF"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTypeName = exports.uniqBy = exports.isMap = exports.isTypedArray = exports.isSyncService = exports.isPromise = exports.isAsyncService = exports.isObject = exports.isFactory = exports.isConstructor = void 0;
4
+ const interfaces_js_1 = require("./interfaces.js");
5
+ /**
6
+ * Checks if value is constructable type.
7
+ * Checks for [[Construct]] internal function in object.
8
+ *
9
+ * @param value - value to test
10
+ */
11
+ function isConstructor(value) {
12
+ try {
13
+ Reflect.construct(String, [], value);
14
+ }
15
+ catch (e) {
16
+ return false;
17
+ }
18
+ return true;
19
+ }
20
+ exports.isConstructor = isConstructor;
21
+ function isFactory(value) {
22
+ return !isConstructor(value) && typeof value === 'function';
23
+ }
24
+ exports.isFactory = isFactory;
25
+ function isObject(value) {
26
+ return typeof value === 'object';
27
+ }
28
+ exports.isObject = isObject;
29
+ function isAsyncService(value) {
30
+ return value instanceof interfaces_js_1.AsyncService;
31
+ }
32
+ exports.isAsyncService = isAsyncService;
33
+ function isPromise(value) {
34
+ return value instanceof Promise;
35
+ }
36
+ exports.isPromise = isPromise;
37
+ function isSyncService(value) {
38
+ return value instanceof interfaces_js_1.SyncService;
39
+ }
40
+ exports.isSyncService = isSyncService;
41
+ /**
42
+ * For DI purpose we treat Map as array to inject. Difference is, that we fill map by some key
43
+ * provided by mapFunc in \@Autoinject
44
+ * @param value - value to check type
45
+ * @returns
46
+ */
47
+ function isTypedArray(value) {
48
+ return (value instanceof Array && value.constructor.name === 'TypedArray') || isMap(value);
49
+ }
50
+ exports.isTypedArray = isTypedArray;
51
+ function isMap(value) {
52
+ return value instanceof Map && value.constructor.name === 'Map';
53
+ }
54
+ exports.isMap = isMap;
55
+ function uniqBy(arr, comparator) {
56
+ const uniques = [];
57
+ for (const a of arr) {
58
+ if (uniques.findIndex((u) => comparator(a, u)) === -1) {
59
+ uniques.push(a);
60
+ }
61
+ }
62
+ return uniques;
63
+ }
64
+ exports.uniqBy = uniqBy;
65
+ function getTypeName(type) {
66
+ return typeof type === 'string' ? type : isTypedArray(type) ? getTypeName(type.Type) : isConstructor(type) ? type.name : type.constructor.name;
67
+ }
68
+ exports.getTypeName = getTypeName;
69
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":";;;AACA,mDAA4D;AAG5D;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,KAAU;IACtC,IAAI;QACF,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;KACtC;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AARD,sCAQC;AAED,SAAgB,SAAS,CAAC,KAAU;IAClC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,UAAU,CAAC;AAC9D,CAAC;AAFD,8BAEC;AAED,SAAgB,QAAQ,CAAC,KAAU;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;AACnC,CAAC;AAFD,4BAEC;AAED,SAAgB,cAAc,CAAC,KAAU;IACvC,OAAO,KAAK,YAAY,4BAAY,CAAC;AACvC,CAAC;AAFD,wCAEC;AAED,SAAgB,SAAS,CAAC,KAAU;IAClC,OAAO,KAAK,YAAY,OAAO,CAAC;AAClC,CAAC;AAFD,8BAEC;AAED,SAAgB,aAAa,CAAC,KAAU;IACtC,OAAO,KAAK,YAAY,2BAAW,CAAC;AACtC,CAAC;AAFD,sCAEC;AAED;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,KAAU;IACrC,OAAO,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7F,CAAC;AAFD,oCAEC;AAED,SAAgB,KAAK,CAAC,KAAU;IAC9B,OAAO,KAAK,YAAY,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,KAAK,CAAC;AAClE,CAAC;AAFD,sBAEC;AAED,SAAgB,MAAM,CAAI,GAAQ,EAAE,UAAmC;IACrE,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;QACnB,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;KACF;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AARD,wBAQC;AAED,SAAgB,WAAW,CAAC,IAAoD;IAC9E,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACjJ,CAAC;AAFD,kCAEC"}
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,WAAW,CAAC;AAChC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
+ };
21
+ var __importStar = (this && this.__importStar) || function (mod) {
22
+ if (mod && mod.__esModule) return mod;
23
+ var result = {};
24
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
25
+ __setModuleDefault(result, mod);
26
+ return result;
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.DI = void 0;
30
+ __exportStar(require("./interfaces.js"), exports);
31
+ __exportStar(require("./array.js"), exports);
32
+ __exportStar(require("./decorators.js"), exports);
33
+ __exportStar(require("./enums.js"), exports);
34
+ __exportStar(require("./types.js"), exports);
35
+ __exportStar(require("./helpers.js"), exports);
36
+ __exportStar(require("./container-cache.js"), exports);
37
+ __exportStar(require("./binder.js"), exports);
38
+ __exportStar(require("./registry.js"), exports);
39
+ __exportStar(require("./container.js"), exports);
40
+ exports.DI = __importStar(require("./root.js"));
41
+ __exportStar(require("./exceptions.js"), exports);
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,6CAA2B;AAC3B,kDAAgC;AAChC,6CAA2B;AAC3B,6CAA2B;AAC3B,+CAA6B;AAC7B,uDAAqC;AACrC,8CAA4B;AAC5B,gDAA8B;AAC9B,iDAA+B;AAC/B,gDAAgC;AAChC,kDAAgC"}