@spinajs/di 1.0.19 → 1.2.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/container.js CHANGED
@@ -2,22 +2,25 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Container = void 0;
4
4
  const exceptions_1 = require("@spinajs/exceptions");
5
- const _ = require("lodash");
6
5
  require("reflect-metadata");
7
6
  const array_1 = require("./array");
8
7
  const decorators_1 = require("./decorators");
9
8
  const enums_1 = require("./enums");
10
9
  const helpers_1 = require("./helpers");
11
10
  const interfaces_1 = require("./interfaces");
11
+ const events_1 = require("events");
12
+ const binder_1 = require("./binder");
13
+ const registry_1 = require("./registry");
14
+ const container_cache_1 = require("./container-cache");
12
15
  /**
13
16
  * Dependency injection container implementation
14
17
  */
15
- class Container {
18
+ class Container extends events_1.EventEmitter {
16
19
  constructor(parent) {
17
- this.registry = new Map();
18
- this.cache = new Map();
20
+ super();
21
+ this.registry = new registry_1.Registry(this);
22
+ this.cache = new container_cache_1.ContainerCache(this);
19
23
  this.parent = parent || undefined;
20
- this.registerSelf();
21
24
  }
22
25
  /**
23
26
  * Returns container cache - map object with resolved classes as singletons
@@ -28,54 +31,37 @@ class Container {
28
31
  get Registry() {
29
32
  return this.registry;
30
33
  }
34
+ get Parent() {
35
+ return this.parent;
36
+ }
31
37
  /**
32
- * Clears container registry and cache.
38
+ * Clears container registry and cache. shorthand for container.clearCache() && container.clearRegistry()
33
39
  */
34
40
  clear() {
41
+ this.clearCache();
42
+ }
43
+ /**
44
+ * clears container registered types information
45
+ */
46
+ clearCache() {
35
47
  this.cache.clear();
36
- this.cache = new Map();
37
- this.registry.clear();
38
- this.registerSelf();
48
+ }
49
+ /**
50
+ * Clears container resolved types
51
+ */
52
+ clearRegistry() {
53
+ this.Registry.clear();
39
54
  }
40
55
  /**
41
56
  * Register class/interface to DI.
42
57
  * @param type - interface object to register
43
- * @throws { InvalidArgument } if type is null or undefined
58
+ * @throws {@link InvalidArgument} if type is null or undefined
44
59
  */
45
60
  register(implementation) {
46
- if (_.isNil(implementation)) {
61
+ if (!implementation) {
47
62
  throw new exceptions_1.InvalidArgument('argument `type` cannot be null or undefined');
48
63
  }
49
- const self = this;
50
- return {
51
- _impl: null,
52
- as(type) {
53
- this._impl = implementation;
54
- const tname = typeof type === 'string' ? type : type.name;
55
- if (!self._hasRegisteredType(tname, implementation)) {
56
- if (self.registry.has(tname)) {
57
- self.registry.get(tname).push(implementation);
58
- }
59
- else {
60
- self.registry.set(tname, [implementation]);
61
- }
62
- }
63
- return this;
64
- },
65
- asSelf() {
66
- this._impl = implementation;
67
- self.registry.set(implementation.name, [implementation]);
68
- return this;
69
- },
70
- singleInstance() {
71
- const descriptor = {
72
- inject: [],
73
- resolver: enums_1.ResolveType.Singleton,
74
- };
75
- this._impl[decorators_1.DI_DESCRIPTION_SYMBOL] = descriptor;
76
- return this;
77
- },
78
- };
64
+ return new binder_1.Binder(implementation, this);
79
65
  }
80
66
  /**
81
67
  * Creates child DI container.
@@ -85,269 +71,265 @@ class Container {
85
71
  return new Container(this);
86
72
  }
87
73
  get(service, parent = true) {
88
- const self = this;
89
- const identifier = typeof service === 'string'
90
- ? this.Registry.get(service) || service
91
- : service instanceof array_1.TypedArray
92
- ? this.Registry.get(service.Type.name)
93
- : this.Registry.get(service.name) || service.name;
94
- if (!identifier) {
95
- return null;
96
- }
97
- if (typeof identifier === 'string') {
98
- return _get(identifier);
99
- }
74
+ // get value registered as TypedArray ( mean to return all created instances )
100
75
  if (service instanceof array_1.TypedArray) {
101
- return identifier.map(t => _get(t.name));
102
- }
103
- const isFactory = !helpers_1.isConstructor(identifier[0]) && _.isFunction(identifier[0]);
104
- return _get(isFactory ? (typeof service === 'string' ? service : service.name) : identifier[0].name);
105
- function _get(i) {
106
- if (self.cache.has(i)) {
107
- return self.cache.get(i);
108
- }
109
- else if (self.parent && parent) {
110
- return self.parent.get(i, parent);
111
- }
112
- return null;
76
+ return this.cache.get((0, helpers_1.getTypeName)(service.Type));
113
77
  }
114
- }
115
- getRegistered(service, parent = true) {
116
- if (!service) {
117
- throw new exceptions_1.InvalidArgument('argument "service" cannot be null or empty');
118
- }
119
- const name = typeof service === 'string' ? service : service.constructor.name;
120
- if (this.registry.has(name)) {
121
- return this.registry.get(name);
122
- }
123
- if (this.parent && parent) {
124
- return this.parent.getRegistered(service, parent);
125
- }
126
- return null;
78
+ const r = this.cache.get(service, parent);
79
+ return r[r.length - 1];
127
80
  }
128
81
  hasRegistered(service, parent = true) {
129
- if (this.registry.has(typeof service === 'string' ? service : service.name)) {
130
- return true;
131
- }
132
- else if (this.parent && parent) {
133
- return this.parent.hasRegistered(service);
134
- }
135
- return false;
82
+ return this.Registry.hasRegistered(service, parent);
136
83
  }
137
84
  /**
138
85
  * Checks if service is already resolved and exists in container cache.
139
86
  * NOTE: check is only valid for classes that are singletons.
140
87
  *
141
88
  * @param service - service name or class to check
142
- * @returns { boolean } - true if service instance already exists, otherwise false.
143
- * @throws { InvalidArgument } when service is null or empty
89
+ * @returns true if service instance already exists, otherwise false.
90
+ * @throws {@link InvalidArgument} when service is null or empty
144
91
  */
145
- has(service, parent = true) {
146
- if (!service) {
147
- throw new exceptions_1.InvalidArgument('argument cannot be null or empty');
148
- }
149
- const name = typeof service === 'string' ? service : service.name;
150
- if (this.cache.has(name)) {
151
- return true;
152
- }
153
- if (this.parent && parent) {
154
- return this.parent.has(name);
155
- }
156
- return false;
92
+ isResolved(service, parent = true) {
93
+ return this.Cache.has(service, parent);
157
94
  }
158
95
  /**
159
96
  *
160
- * @param type type to resolve
161
- * @param options options passed to constructor / factory
162
- * @param check strict check if serivice is registered in container before resolving. Default behavior is to not check and resolve
97
+ * @param type - type to resolve
98
+ * @param options - options passed to constructor / factory
99
+ * @param check - strict check if serivice is registered in container before resolving. Default behavior is to not check and resolve
163
100
  */
164
101
  resolve(type, options, check) {
165
- const sourceType = type instanceof array_1.TypedArray ? type.Type : type;
166
- if (_.isNil(type)) {
102
+ if (!type) {
167
103
  throw new exceptions_1.InvalidArgument('argument `type` cannot be null or undefined');
168
104
  }
169
- if ((typeof options === 'boolean' && options === true) || check === true) {
170
- if (!this.hasRegistered(typeof sourceType === 'string' ? sourceType : sourceType.name)) {
171
- throw new Error(`Type ${sourceType} is not registered at container`);
172
- }
173
- }
105
+ const sourceType = type instanceof array_1.TypedArray ? type.Type : type;
106
+ const sourceName = (0, helpers_1.getTypeName)(type);
174
107
  const opt = typeof options === 'boolean' ? null : options;
175
- const isArray = type.constructor.name === 'TypedArray';
176
- const targetType = isArray
177
- ? this.getRegistered(type.Type.name) || [type.Type]
178
- : typeof type === 'string'
179
- ? this.getRegistered(type)
180
- : this.getRegistered(type.name) || [type];
181
- if (!targetType) {
182
- throw new Error(`cannot resolve type ${type} becouse is not registered in container`);
183
- }
184
- if (typeof sourceType === 'string') {
185
- return this.resolveType(sourceType, targetType[targetType.length - 1], opt);
108
+ const setCache = (r) => {
109
+ this.Cache.add(type, r);
110
+ return r;
111
+ };
112
+ if (options === true || check === true) {
113
+ if (!this.hasRegistered(sourceType)) {
114
+ throw new Error(`Type ${sourceName} is not registered at container`);
115
+ }
186
116
  }
187
- if (isArray) {
188
- const resolved = targetType.map(r => this.resolveType(sourceType, r, opt));
189
- if (resolved.some(r => r instanceof Promise)) {
190
- return Promise.all(resolved);
117
+ if ((0, helpers_1.isTypedArray)(type)) {
118
+ // special case for arrays
119
+ // if we have in cache, retunr all we got
120
+ // TODO: fix this and every time check if theres is any
121
+ // new registerd type
122
+ if (this.Cache.has(type)) {
123
+ return this.Cache.get(type);
191
124
  }
125
+ // if its array type, resolve all registered types or throw exception
126
+ const targetType = this.getRegisteredTypes(type);
127
+ if (!targetType) {
128
+ return [];
129
+ }
130
+ const resolved = targetType.map((r) => this.resolveType(type, r, opt));
131
+ if (resolved.some((r) => r instanceof Promise)) {
132
+ return Promise.all(resolved).then((value) => {
133
+ value.forEach((v) => setCache(v));
134
+ return value;
135
+ });
136
+ }
137
+ // special case, we dont want to cache multiple times
138
+ resolved.forEach((v) => setCache(v));
192
139
  return resolved;
193
140
  }
194
- return this.resolveType(sourceType, targetType[targetType.length - 1], opt);
141
+ else {
142
+ // finaly resolve single type:
143
+ // 1. last registered type OR
144
+ // 2. if non is registered - type itself
145
+ let targetType = this.getRegisteredTypes(type);
146
+ if (!targetType) {
147
+ // if nothing is register under string identifier, then return null
148
+ if (typeof type === 'string') {
149
+ return null;
150
+ }
151
+ else {
152
+ targetType = [type];
153
+ }
154
+ }
155
+ // resolve last registered type ( newest )
156
+ const rValue = this.resolveType(sourceType, targetType[targetType.length - 1], opt);
157
+ if ((0, helpers_1.isPromise)(rValue)) {
158
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
159
+ return rValue.then((v) => {
160
+ setCache(v);
161
+ return v;
162
+ });
163
+ }
164
+ setCache(rValue);
165
+ return rValue;
166
+ }
167
+ }
168
+ getRegisteredTypes(service, parent) {
169
+ return this.Registry.getTypes(service, parent);
195
170
  }
196
171
  resolveType(sourceType, targetType, options) {
197
- const self = this;
198
- const descriptor = _extractDescriptor(targetType);
199
- const isFactory = !helpers_1.isConstructor(targetType) && _.isFunction(targetType);
172
+ /**
173
+ * If its a factory func, always resolve as new instance
174
+ */
175
+ if ((0, helpers_1.isFactory)(targetType)) {
176
+ return this.getNewInstance(targetType, null, options);
177
+ }
178
+ // we now know its not factory func
179
+ // but typescript complains about this
180
+ // becouse isFactory is custom type check
181
+ const tType = targetType;
182
+ const sName = (0, helpers_1.getTypeName)(sourceType);
183
+ const descriptor = this.extractDescriptor(tType);
184
+ // check if is singleton,
185
+ // resolving strategy per container is treatead as singleton
186
+ // in this particular container
187
+ const isSingletonInChild = descriptor.resolver === enums_1.ResolveType.PerChildContainer;
188
+ const isSingleton = descriptor.resolver === enums_1.ResolveType.Singleton;
189
+ const getCachedInstance = (e, parent) => {
190
+ if (this.isResolved(e, parent)) {
191
+ return this.get(e, parent);
192
+ }
193
+ return null;
194
+ };
195
+ const resolve = (d, t, i) => {
196
+ if (d.resolver === enums_1.ResolveType.NewInstance) {
197
+ return this.getNewInstance(t, i, options);
198
+ }
199
+ this.Registry.register(sName, t);
200
+ return getCachedInstance(tType, d.resolver === enums_1.ResolveType.Singleton ? true : false) || this.getNewInstance(t, i, options);
201
+ };
200
202
  // check cache if needed
201
- if (descriptor.resolver === enums_1.ResolveType.Singleton || descriptor.resolver === enums_1.ResolveType.PerChildContainer) {
202
- if (this.has(isFactory ? sourceType : targetType, descriptor.resolver === enums_1.ResolveType.Singleton)) {
203
- return this.get(isFactory ? sourceType : targetType);
203
+ if (isSingletonInChild || isSingleton) {
204
+ // if its singleton ( not per child container )
205
+ // check also in parent containers
206
+ // ------- IMPORTANT ------------
207
+ // TODO: in future allow to check in runtime if target type is cashed,
208
+ // now, if for example we resolve array of some type,
209
+ // when we later register another type of base class used in typed array
210
+ // we will not resolve it, becaouse contaienr will not check
211
+ // if in cache this new type exists ( only check if type in array exists )
212
+ const cached = getCachedInstance(sourceType, isSingleton);
213
+ if (cached) {
214
+ return cached;
204
215
  }
205
216
  }
206
- const deps = _resolveDeps(descriptor.inject);
217
+ const deps = this.resolveDependencies(descriptor.inject);
207
218
  if (deps instanceof Promise) {
208
- return deps
209
- .then(resolvedDependencies => {
210
- return _resolve(descriptor, targetType, resolvedDependencies);
211
- })
212
- .then(_setCache);
219
+ return deps.then((resolvedDependencies) => {
220
+ return resolve(descriptor, tType, resolvedDependencies);
221
+ });
213
222
  }
214
223
  else {
215
- const resInstance = _resolve(descriptor, targetType, deps);
224
+ const resInstance = resolve(descriptor, tType, deps);
216
225
  if (resInstance instanceof Promise) {
217
- return resInstance.then(_setCache);
226
+ return resInstance;
218
227
  }
219
- _setCache(resInstance);
220
228
  return resInstance;
221
229
  }
222
- function _setCache(r) {
223
- const isFactory = !helpers_1.isConstructor(targetType) && _.isFunction(targetType);
224
- const checkParent = descriptor.resolver === enums_1.ResolveType.Singleton;
225
- const toCheck = isFactory
226
- ? typeof sourceType === 'string'
227
- ? sourceType
228
- : sourceType.name
229
- : targetType.name;
230
- if (!self.has(toCheck, checkParent)) {
231
- self.Cache.set(toCheck, r);
232
- }
233
- return r;
230
+ }
231
+ getNewInstance(typeToCreate, a, options) {
232
+ let args = [null];
233
+ let newInstance = null;
234
+ /**
235
+ * If type is not Constructable, we assume its factory function,
236
+ * just call it with `this` container.
237
+ */
238
+ if ((0, helpers_1.isFactory)(typeToCreate)) {
239
+ newInstance = typeToCreate(this, ...(options !== null && options !== void 0 ? options : []));
234
240
  }
235
- function _resolve(d, t, i) {
236
- const tname = typeof sourceType === 'string' ? sourceType : sourceType.name;
237
- if (d.resolver === enums_1.ResolveType.NewInstance) {
238
- return _getNewInstance(t, i);
241
+ else {
242
+ if (a.constructor.name === 'Array') {
243
+ args = args.concat(a.filter((i) => !i.autoinject).map((i) => i.instance));
239
244
  }
240
- if (!self.Registry.has(tname)) {
241
- self.Registry.set(tname, [t]);
245
+ if (options && options.length !== 0) {
246
+ args = args.concat(options);
242
247
  }
243
- else {
244
- if (!self._hasRegisteredType(sourceType, t)) {
245
- self.Registry.set(tname, self.Registry.get(tname).concat(t));
246
- }
248
+ /* eslint-disable */
249
+ newInstance = new (Function.prototype.bind.apply(typeToCreate, args))();
250
+ for (const ai of a.filter((i) => i.autoinject)) {
251
+ // TYPE HACK to tell typescript we dont care type
252
+ /* eslint-disable */
253
+ newInstance[`${ai.autoinjectKey}`] = ai.instance;
247
254
  }
248
- return (_getCachedInstance(targetType, d.resolver === enums_1.ResolveType.Singleton ? true : false) || _getNewInstance(t, i));
249
- }
250
- function _extractDescriptor(type) {
251
- const descriptor = {
252
- inject: [],
253
- resolver: enums_1.ResolveType.Singleton,
254
- };
255
- reduce(type);
256
- descriptor.inject = _.uniqWith(descriptor.inject, (a, b) => {
257
- return a.inject.name === b.inject.name;
258
- });
259
- return descriptor;
260
- function reduce(t) {
261
- if (!t) {
262
- return;
263
- }
264
- if (t[decorators_1.DI_DESCRIPTION_SYMBOL]) {
265
- descriptor.inject = descriptor.inject.concat(t[decorators_1.DI_DESCRIPTION_SYMBOL].inject);
266
- descriptor.resolver = t[decorators_1.DI_DESCRIPTION_SYMBOL].resolver;
267
- }
268
- reduce(t.prototype);
269
- reduce(t.__proto__);
255
+ if ((0, helpers_1.isAsyncModule)(newInstance)) {
256
+ return new Promise((res, rej) => {
257
+ newInstance
258
+ .resolveAsync()
259
+ .then(() => {
260
+ this.emit(`di.resolved.${typeToCreate.name}`, this, newInstance);
261
+ })
262
+ .then(() => {
263
+ res(newInstance);
264
+ })
265
+ .catch((err) => rej(err));
266
+ });
270
267
  }
271
- }
272
- function _resolveDeps(toInject) {
273
- const dependencies = toInject.map(t => {
274
- const promiseOrVal = self.resolve(t.inject);
275
- if (promiseOrVal instanceof Promise) {
276
- return new Promise((res, _) => {
277
- res(promiseOrVal);
278
- }).then((val) => {
279
- return {
280
- autoinject: t.autoinject,
281
- autoinjectKey: t.autoinjectKey,
282
- instance: val,
283
- };
284
- });
268
+ else {
269
+ if (newInstance instanceof interfaces_1.SyncModule) {
270
+ newInstance.resolve();
285
271
  }
286
- return {
287
- autoinject: t.autoinject,
288
- autoinjectKey: t.autoinjectKey,
289
- instance: promiseOrVal,
290
- };
291
- });
292
- if (dependencies.some(p => p instanceof Promise)) {
293
- return Promise.all(dependencies);
272
+ this.emit(`di.resolved.${typeToCreate.name}`, this, newInstance);
294
273
  }
295
- return dependencies;
296
274
  }
297
- function _getCachedInstance(e, parent) {
298
- if (self.has(e, parent)) {
299
- return self.get(e, parent);
275
+ return newInstance;
276
+ }
277
+ hasRegisteredType(source, type, parent) {
278
+ return this.Registry.hasRegisteredType(source, type, parent);
279
+ }
280
+ resolveDependencies(toInject) {
281
+ const dependencies = toInject.map((t) => {
282
+ const promiseOrVal = this.resolve(t.inject);
283
+ if (promiseOrVal instanceof Promise) {
284
+ return new Promise((res, _) => {
285
+ res(promiseOrVal);
286
+ }).then((val) => {
287
+ return {
288
+ autoinject: t.autoinject,
289
+ autoinjectKey: t.autoinjectKey,
290
+ instance: val,
291
+ };
292
+ });
300
293
  }
301
- return null;
294
+ return {
295
+ autoinject: t.autoinject,
296
+ autoinjectKey: t.autoinjectKey,
297
+ instance: promiseOrVal,
298
+ };
299
+ });
300
+ if (dependencies.some((p) => p instanceof Promise)) {
301
+ return Promise.all(dependencies);
302
302
  }
303
- function _getNewInstance(typeToCreate, a) {
304
- let args = [null];
305
- let newInstance = null;
306
- /**
307
- * If type is not Constructable, we assume its factory function,
308
- * just call it with `this` container.
309
- */
310
- if (!helpers_1.isConstructor(typeToCreate) && _.isFunction(typeToCreate)) {
311
- newInstance = typeToCreate(self, ...[].concat(options));
303
+ return dependencies;
304
+ }
305
+ extractDescriptor(type) {
306
+ const descriptor = {
307
+ inject: [],
308
+ resolver: enums_1.ResolveType.Singleton,
309
+ };
310
+ reduce(type);
311
+ descriptor.inject = (0, helpers_1.uniqBy)(descriptor.inject, (a, b) => {
312
+ if (a.inject instanceof array_1.TypedArray && b.inject instanceof array_1.TypedArray) {
313
+ return (0, helpers_1.getTypeName)(a.inject.Type) === (0, helpers_1.getTypeName)(b.inject.Type);
312
314
  }
313
315
  else {
314
- if (_.isArray(a)) {
315
- args = args.concat(a.filter(i => !i.autoinject).map(i => i.instance));
316
- }
317
- if (!_.isEmpty(options)) {
318
- args = args.concat(options);
319
- }
320
- newInstance = new (Function.prototype.bind.apply(typeToCreate, args))();
321
- for (const ai of a.filter(i => i.autoinject)) {
322
- newInstance[ai.autoinjectKey] = ai.instance;
323
- }
324
- if (newInstance instanceof interfaces_1.AsyncModule) {
325
- return new Promise(res => {
326
- newInstance.resolveAsync(self).then(() => {
327
- res(newInstance);
328
- });
329
- });
330
- }
331
- if (newInstance instanceof interfaces_1.SyncModule) {
332
- newInstance.resolve(self);
316
+ return a.inject.name === b.inject.name;
317
+ }
318
+ });
319
+ return descriptor;
320
+ function reduce(t) {
321
+ if (t) {
322
+ // for descriptors defined on class declarations
323
+ reduce(t.prototype);
324
+ // for descriptors defined on class properties eg. @Autoinject()
325
+ reduce(t.__proto__);
326
+ if (t[`${decorators_1.DI_DESCRIPTION_SYMBOL}`]) {
327
+ descriptor.inject = descriptor.inject.concat(t[`${decorators_1.DI_DESCRIPTION_SYMBOL}`].inject);
328
+ descriptor.resolver = t[`${decorators_1.DI_DESCRIPTION_SYMBOL}`].resolver;
333
329
  }
334
330
  }
335
- return newInstance;
336
331
  }
337
332
  }
338
- _hasRegisteredType(source, type) {
339
- const sourceName = typeof source === 'string' ? source : source.name;
340
- const targetName = typeof type === 'string' ? type : type.name;
341
- if (this.registry.has(sourceName)) {
342
- return this.registry.get(sourceName).find(s => s.name === targetName) !== undefined;
343
- }
344
- return false;
345
- }
346
- //
347
- // allows container instance to be resolved
348
- registerSelf() {
349
- this.cache.set('Container', this);
350
- }
351
333
  }
352
334
  exports.Container = Container;
353
335
  //# sourceMappingURL=container.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"container.js","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"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"}