@shrub/core 0.5.26 → 0.5.30
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/dist/esm/service-collection.js +110 -101
- package/dist/service-collection.d.ts +44 -23
- package/dist/service-collection.js +110 -101
- package/package.json +2 -2
|
@@ -110,13 +110,18 @@ export class SingletonServiceFactory {
|
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
export class ServiceMap {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
this
|
|
118
|
-
|
|
119
|
-
|
|
113
|
+
/** Creates a new ServiceMap instance; note: the services parameter is for internal purposes and should not be used. */
|
|
114
|
+
constructor(services = new Map()) {
|
|
115
|
+
this.services = services;
|
|
116
|
+
this.instances = new Map();
|
|
117
|
+
// assume this is a scoped service if the provided map already has entries
|
|
118
|
+
if (!services.size) {
|
|
119
|
+
// the thisFactory is used to return the appropriate ServiceMap instance since the IInstantiationService and IServiceCollection services need to be scoped
|
|
120
|
+
const thisFactory = { create: service => service };
|
|
121
|
+
this.registerService(IInstantiationService, "scoped" /* scoped */, thisFactory, { sealed: true });
|
|
122
|
+
this.registerService(IServiceCollection, "scoped" /* scoped */, thisFactory, { sealed: true });
|
|
123
|
+
this.registerSingleton(IOptionsService, OptionsService, { sealed: true });
|
|
124
|
+
}
|
|
120
125
|
}
|
|
121
126
|
addOptionsProvider(provider) {
|
|
122
127
|
return this.get(IOptionsService).addOptionsProvider(provider);
|
|
@@ -129,97 +134,76 @@ export class ServiceMap {
|
|
|
129
134
|
}
|
|
130
135
|
createScope() {
|
|
131
136
|
const parent = this;
|
|
137
|
+
const getOrCreateServiceInstanceFromParent = this.getOrCreateServiceInstance.bind(this);
|
|
132
138
|
return new class extends ServiceMap {
|
|
133
139
|
constructor() {
|
|
134
|
-
super();
|
|
135
|
-
// The service map registers a few built-in services that need to be handled a little differently
|
|
136
|
-
// -- if the service is singleton/instance it gets copied from the parent
|
|
137
|
-
// -- if the service is scoped/transient do not overwrite the entry from the parent
|
|
138
|
-
for (const entry of parent.services.values()) {
|
|
139
|
-
if (entry.scope === "singleton" /* singleton */ || entry.scope === "instance" /* instance */) {
|
|
140
|
-
// copy the singleton entry directly to the scoped collection - it's possible the instance has not yet been created so the entire entry gets copied down
|
|
141
|
-
this.registerEntry(entry);
|
|
142
|
-
}
|
|
143
|
-
else if (!this.services.has(entry.service.key)) {
|
|
144
|
-
// create a new entry for scoped/transient services
|
|
145
|
-
this.registerEntry({ ...entry, instance: undefined });
|
|
146
|
-
}
|
|
147
|
-
}
|
|
140
|
+
super(parent.services);
|
|
148
141
|
this.freeze();
|
|
149
142
|
}
|
|
150
143
|
dispose() {
|
|
151
|
-
for (const
|
|
152
|
-
//
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
service.instance.dispose();
|
|
144
|
+
for (const instance of this.instances.values()) {
|
|
145
|
+
// dispose instances created and referenced by the scope; this will be scoped and transient instances
|
|
146
|
+
// also make sure we don't dispose the current instance as that will cause a stack overflow
|
|
147
|
+
if (instance !== this && isDisposable(instance)) {
|
|
148
|
+
instance.dispose();
|
|
157
149
|
}
|
|
158
150
|
}
|
|
159
|
-
this.
|
|
151
|
+
this.instances.clear();
|
|
152
|
+
}
|
|
153
|
+
getOrCreateServiceInstance(key, rootScope, ancestors) {
|
|
154
|
+
const entry = this.services.get(key);
|
|
155
|
+
if (entry !== undefined && (entry.scope === "singleton" /* singleton */ || entry.scope === "instance" /* instance */)) {
|
|
156
|
+
// if the service is an instance or singleton call up the parent chain and get the instance from the root
|
|
157
|
+
return getOrCreateServiceInstanceFromParent(key, rootScope, ancestors);
|
|
158
|
+
}
|
|
159
|
+
return super.getOrCreateServiceInstance(key, rootScope, ancestors);
|
|
160
160
|
}
|
|
161
161
|
};
|
|
162
162
|
}
|
|
163
163
|
getOptions(options) {
|
|
164
164
|
return this.get(IOptionsService).getOptions(options);
|
|
165
165
|
}
|
|
166
|
-
register(service, ctor) {
|
|
167
|
-
this.registerService(service, getServiceScope(ctor), ctor);
|
|
166
|
+
register(service, ctor, options) {
|
|
167
|
+
this.registerService(service, getServiceScope(ctor), ctor, options);
|
|
168
168
|
}
|
|
169
|
-
registerInstance(service, instance) {
|
|
169
|
+
registerInstance(service, instance, options) {
|
|
170
170
|
if (instance === undefined) {
|
|
171
171
|
throw new Error("instance undefined");
|
|
172
172
|
}
|
|
173
173
|
// TODO: check if the instance constructor has a required scope - if so, verify its a singleton
|
|
174
|
-
this.
|
|
175
|
-
|
|
176
|
-
scope: "instance" /* instance */,
|
|
177
|
-
instance
|
|
178
|
-
});
|
|
174
|
+
this.instances.set(service.key, instance);
|
|
175
|
+
this.services.set(service.key, { service, scope: "instance" /* instance */, sealed: options && options.sealed });
|
|
179
176
|
}
|
|
180
|
-
registerScoped(service, ctorOrFactory) {
|
|
181
|
-
this.registerService(service, "scoped" /* scoped */, ctorOrFactory);
|
|
177
|
+
registerScoped(service, ctorOrFactory, options) {
|
|
178
|
+
this.registerService(service, "scoped" /* scoped */, ctorOrFactory, options);
|
|
182
179
|
}
|
|
183
|
-
registerSingleton(service, ctorOrFactory) {
|
|
184
|
-
this.registerService(service, "singleton" /* singleton */, ctorOrFactory);
|
|
180
|
+
registerSingleton(service, ctorOrFactory, options) {
|
|
181
|
+
this.registerService(service, "singleton" /* singleton */, ctorOrFactory, options);
|
|
185
182
|
}
|
|
186
|
-
registerTransient(service, ctorOrFactory) {
|
|
187
|
-
this.registerService(service, "transient" /* transient */, ctorOrFactory);
|
|
183
|
+
registerTransient(service, ctorOrFactory, options) {
|
|
184
|
+
this.registerService(service, "transient" /* transient */, ctorOrFactory, options);
|
|
188
185
|
}
|
|
189
|
-
tryRegister(service, ctor) {
|
|
190
|
-
|
|
191
|
-
this.register(service, ctor);
|
|
192
|
-
return true;
|
|
193
|
-
}
|
|
194
|
-
return false;
|
|
186
|
+
tryRegister(service, ctor, options) {
|
|
187
|
+
return this.tryRegisterService(service, getServiceScope(ctor), ctor, options) === "success";
|
|
195
188
|
}
|
|
196
|
-
tryRegisterInstance(service, instance) {
|
|
197
|
-
|
|
198
|
-
|
|
189
|
+
tryRegisterInstance(service, instance, options) {
|
|
190
|
+
try {
|
|
191
|
+
// TODO: refactor -- need to invoke registerInstance because it registers the instance
|
|
192
|
+
this.registerInstance(service, instance, options);
|
|
199
193
|
return true;
|
|
200
194
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
tryRegisterScoped(service, ctorOrFactory) {
|
|
204
|
-
if (!this.services.has(service.key)) {
|
|
205
|
-
this.registerScoped(service, ctorOrFactory);
|
|
206
|
-
return true;
|
|
195
|
+
catch {
|
|
196
|
+
return false;
|
|
207
197
|
}
|
|
208
|
-
return false;
|
|
209
198
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
this.registerSingleton(service, ctorOrFactory);
|
|
213
|
-
return true;
|
|
214
|
-
}
|
|
215
|
-
return false;
|
|
199
|
+
tryRegisterScoped(service, ctorOrFactory, options) {
|
|
200
|
+
return this.tryRegisterService(service, "scoped" /* scoped */, ctorOrFactory, options) === "success";
|
|
216
201
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
return false;
|
|
202
|
+
tryRegisterSingleton(service, ctorOrFactory, options) {
|
|
203
|
+
return this.tryRegisterService(service, "singleton" /* singleton */, ctorOrFactory, options) === "success";
|
|
204
|
+
}
|
|
205
|
+
tryRegisterTransient(service, ctorOrFactory, options) {
|
|
206
|
+
return this.tryRegisterService(service, "transient" /* transient */, ctorOrFactory, options) === "success";
|
|
223
207
|
}
|
|
224
208
|
get(serviceOrKey) {
|
|
225
209
|
const key = typeof serviceOrKey === "string" ? serviceOrKey : serviceOrKey.key;
|
|
@@ -239,22 +223,46 @@ export class ServiceMap {
|
|
|
239
223
|
freeze() {
|
|
240
224
|
this.isFrozen = true;
|
|
241
225
|
}
|
|
242
|
-
|
|
243
|
-
this.
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
226
|
+
getOrCreateServiceInstance(key, rootScope, ancestors) {
|
|
227
|
+
const entry = this.services.get(key);
|
|
228
|
+
if (!entry) {
|
|
229
|
+
throw new Error(`Service not registered for key '${key}'.`);
|
|
230
|
+
}
|
|
231
|
+
let current = this.instances.get(key);
|
|
232
|
+
if (current) {
|
|
233
|
+
return current;
|
|
234
|
+
}
|
|
235
|
+
const instance = this.createServiceInstance(entry, rootScope, ancestors);
|
|
236
|
+
if (entry.scope === "scoped" /* scoped */ || entry.scope === "singleton" /* singleton */) {
|
|
237
|
+
this.instances.set(key, instance);
|
|
238
|
+
}
|
|
239
|
+
return instance;
|
|
249
240
|
}
|
|
250
|
-
|
|
251
|
-
|
|
241
|
+
registerService(service, scope, ctorOrFactory, options) {
|
|
242
|
+
const result = this.tryRegisterService(service, scope, ctorOrFactory, options);
|
|
243
|
+
if (result === "frozen") {
|
|
252
244
|
throw new Error("Service collection is frozen");
|
|
253
245
|
}
|
|
254
|
-
if (
|
|
255
|
-
|
|
246
|
+
if (result === "sealed") {
|
|
247
|
+
throw new Error(`Service with key (${service.key}) cannot be overridden.`);
|
|
256
248
|
}
|
|
257
|
-
|
|
249
|
+
}
|
|
250
|
+
tryRegisterService(service, scope, ctorOrFactory, options) {
|
|
251
|
+
if (this.isFrozen === true) {
|
|
252
|
+
return "frozen";
|
|
253
|
+
}
|
|
254
|
+
const current = this.services.get(service.key);
|
|
255
|
+
if (current && current.sealed) {
|
|
256
|
+
return "sealed";
|
|
257
|
+
}
|
|
258
|
+
const ctor = isConstructor(ctorOrFactory) ? ctorOrFactory : undefined;
|
|
259
|
+
const factory = isServiceFactory(ctorOrFactory) ? ctorOrFactory : undefined;
|
|
260
|
+
const sealed = options && options.sealed;
|
|
261
|
+
if (ctor) {
|
|
262
|
+
this.checkInstanceScope(ctor, scope);
|
|
263
|
+
}
|
|
264
|
+
this.services.set(service.key, { service, scope, ctor, factory, sealed });
|
|
265
|
+
return "success";
|
|
258
266
|
}
|
|
259
267
|
checkFactoryInstance(instance, scope) {
|
|
260
268
|
if (typeof instance !== "object" && typeof instance !== "function") {
|
|
@@ -270,30 +278,23 @@ export class ServiceMap {
|
|
|
270
278
|
throw new Error("Registered service scope is different than the instance required scope");
|
|
271
279
|
}
|
|
272
280
|
}
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
if (entry.instance) {
|
|
279
|
-
return entry.instance;
|
|
280
|
-
}
|
|
281
|
-
const instance = this.createServiceInstance(entry, ancestors);
|
|
282
|
-
if (entry.scope === "scoped" /* scoped */ || entry.scope === "singleton" /* singleton */) {
|
|
283
|
-
entry.instance = instance;
|
|
281
|
+
checkParentChildScopes(parentScope, childScope) {
|
|
282
|
+
if (!parentScope || parentScope === "instance" /* instance */ || parentScope === "singleton" /* singleton */) {
|
|
283
|
+
if (childScope === "scoped" /* scoped */) {
|
|
284
|
+
throw new Error("Scoped services should only be referenced by Transient or other Scoped services.");
|
|
285
|
+
}
|
|
284
286
|
}
|
|
285
|
-
return instance;
|
|
286
287
|
}
|
|
287
|
-
getOrCreateInjectable(injectable, ancestors) {
|
|
288
|
+
getOrCreateInjectable(injectable, rootScope, ancestors) {
|
|
288
289
|
if (this.services.has(injectable.key)) {
|
|
289
|
-
return this.getOrCreateServiceInstance(injectable.key, ancestors);
|
|
290
|
+
return this.getOrCreateServiceInstance(injectable.key, rootScope, ancestors);
|
|
290
291
|
}
|
|
291
292
|
if (injectable.factory) {
|
|
292
293
|
return injectable.factory(this);
|
|
293
294
|
}
|
|
294
295
|
throw new Error(`Invalid injectable (${injectable.key}), either a service has not been registered or the injectable does not define a factory.`);
|
|
295
296
|
}
|
|
296
|
-
createServiceInstance(entry, ancestors) {
|
|
297
|
+
createServiceInstance(entry, rootScope, ancestors) {
|
|
297
298
|
if (entry.factory) {
|
|
298
299
|
const instance = entry.factory.create(this);
|
|
299
300
|
// even though the scope cannot be verified until now it is still a good idea to check that the service instance is being properly scoped
|
|
@@ -301,11 +302,11 @@ export class ServiceMap {
|
|
|
301
302
|
return instance;
|
|
302
303
|
}
|
|
303
304
|
if (entry.ctor) {
|
|
304
|
-
return this.createObjectInstance(entry.ctor, ancestors);
|
|
305
|
+
return this.createObjectInstance(entry.ctor, rootScope, ancestors);
|
|
305
306
|
}
|
|
306
307
|
throw new Error("Invalid service entry.");
|
|
307
308
|
}
|
|
308
|
-
createObjectInstance(ctor, ancestors) {
|
|
309
|
+
createObjectInstance(ctor, rootScope, ancestors) {
|
|
309
310
|
if (ancestors && ancestors.includes(ctor)) {
|
|
310
311
|
const path = [...ancestors.map(ctor => ctor.name), ctor.name].join(" -> ");
|
|
311
312
|
throw new Error("Circular dependency detected: " + path);
|
|
@@ -316,10 +317,18 @@ export class ServiceMap {
|
|
|
316
317
|
throw new Error(`Invalid constructor (${ctor.name}), all parameters must be injectable.`);
|
|
317
318
|
}
|
|
318
319
|
try {
|
|
320
|
+
// root scope is used to ensure service dependecies are properly scoped -- mainly, singleton services should not reference scoped services
|
|
321
|
+
rootScope = rootScope || ctor[scope];
|
|
322
|
+
// ancestors is used to track circular dependencies
|
|
319
323
|
ancestors = ancestors || [];
|
|
320
324
|
ancestors.push(ctor);
|
|
321
325
|
// create/get instances for all the object's constructor parameters
|
|
322
|
-
const args = keys.map(key =>
|
|
326
|
+
const args = keys.map(key => {
|
|
327
|
+
const injectable = dependencies[key];
|
|
328
|
+
const entry = this.services.get(injectable.key);
|
|
329
|
+
this.checkParentChildScopes(rootScope, entry && entry.scope);
|
|
330
|
+
return this.getOrCreateInjectable(injectable, rootScope, ancestors);
|
|
331
|
+
});
|
|
323
332
|
ancestors.splice(ancestors.indexOf(ctor), 1);
|
|
324
333
|
return new ctor(...args);
|
|
325
334
|
}
|
|
@@ -379,4 +388,4 @@ class OptionsService {
|
|
|
379
388
|
return options;
|
|
380
389
|
}
|
|
381
390
|
}
|
|
382
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1jb2xsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2UtY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzR0EsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsYUFBYSxDQUF3Qix1QkFBdUIsQ0FBQyxDQUFDO0FBQ25HLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQWtCLGlCQUFpQixDQUFDLENBQUM7QUFDakYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFxQixvQkFBb0IsQ0FBQyxDQUFDO0FBRTFGLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDO0FBQ3RDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQztBQVN4QixnRkFBZ0Y7QUFDaEYsTUFBTSxVQUFVLE1BQU0sQ0FBQyxJQUFTO0lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsd0JBQXNCLENBQUM7QUFDdEMsQ0FBQztBQUVELG1GQUFtRjtBQUNuRixNQUFNLFVBQVUsU0FBUyxDQUFDLElBQVM7SUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyw4QkFBeUIsQ0FBQztBQUN6QyxDQUFDO0FBRUQsbUZBQW1GO0FBQ25GLE1BQU0sVUFBVSxTQUFTLENBQUMsSUFBUztJQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLDhCQUF5QixDQUFDO0FBQ3pDLENBQUM7QUFJRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUksWUFBNEM7SUFDNUUsTUFBTSxPQUFPLEdBQUcsT0FBTyxZQUFZLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQ3hGLE1BQU0sVUFBVSxHQUFRLFVBQVUsTUFBVyxFQUFFLFdBQW1CLEVBQUUsY0FBc0I7UUFDdEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN4QixNQUFNLElBQUks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
|
|
391
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1jb2xsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2UtY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE2R0EsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsYUFBYSxDQUF3Qix1QkFBdUIsQ0FBQyxDQUFDO0FBQ25HLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQWtCLGlCQUFpQixDQUFDLENBQUM7QUFDakYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFxQixvQkFBb0IsQ0FBQyxDQUFDO0FBRTFGLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDO0FBQ3RDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQztBQVN4QixnRkFBZ0Y7QUFDaEYsTUFBTSxVQUFVLE1BQU0sQ0FBQyxJQUFTO0lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsd0JBQXNCLENBQUM7QUFDdEMsQ0FBQztBQUVELG1GQUFtRjtBQUNuRixNQUFNLFVBQVUsU0FBUyxDQUFDLElBQVM7SUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyw4QkFBeUIsQ0FBQztBQUN6QyxDQUFDO0FBRUQsbUZBQW1GO0FBQ25GLE1BQU0sVUFBVSxTQUFTLENBQUMsSUFBUztJQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLDhCQUF5QixDQUFDO0FBQ3pDLENBQUM7QUFJRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUksWUFBNEM7SUFDNUUsTUFBTSxPQUFPLEdBQUcsT0FBTyxZQUFZLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQ3hGLE1BQU0sVUFBVSxHQUFRLFVBQVUsTUFBVyxFQUFFLFdBQW1CLEVBQUUsY0FBc0I7UUFDdEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN4QixNQUFNLElBQUks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
|
|
@@ -41,27 +41,32 @@ export interface IOptionsService {
|
|
|
41
41
|
export interface IOptionsProvider {
|
|
42
42
|
tryGet<T>(id: IOptions<T>): T | undefined;
|
|
43
43
|
}
|
|
44
|
+
/** Defines options when registering a service. */
|
|
45
|
+
export interface IServiceRegistrationOptions {
|
|
46
|
+
/** True if the service entry cannot be overriden; the default is false. */
|
|
47
|
+
readonly sealed?: boolean;
|
|
48
|
+
}
|
|
44
49
|
export interface IServiceRegistration {
|
|
45
50
|
/** Registers a service using its required scope. Note: a service class must define a required scope decorator. */
|
|
46
|
-
register<T, TInstance extends T>(service: IService<T>, ctor: Constructor<TInstance
|
|
51
|
+
register<T, TInstance extends T>(service: IService<T>, ctor: Constructor<TInstance>, options?: IServiceRegistrationOptions): void;
|
|
47
52
|
/** Registers a singleton instance that lives within the collection and is available to all child scopes. Note: if the instance implements IDisposable it will not be disposed automatically. */
|
|
48
|
-
registerInstance<T, TInstance extends T>(service: IService<T>, instance: TInstance): void;
|
|
53
|
+
registerInstance<T, TInstance extends T>(service: IService<T>, instance: TInstance, options?: IServiceRegistrationOptions): void;
|
|
49
54
|
/** Registers a service that gets created once per service collection scope. */
|
|
50
|
-
registerScoped<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance
|
|
55
|
+
registerScoped<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance>, options?: IServiceRegistrationOptions): void;
|
|
51
56
|
/** Registers a service that gets created once and is available to all child scopes. */
|
|
52
|
-
registerSingleton<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance
|
|
57
|
+
registerSingleton<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance>, options?: IServiceRegistrationOptions): void;
|
|
53
58
|
/** Registers a service that gets created each time the service is requested from a collection. */
|
|
54
|
-
registerTransient<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance
|
|
59
|
+
registerTransient<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance>, options?: IServiceRegistrationOptions): void;
|
|
55
60
|
/** Attempts to register a service using its required scope but only if a service has not already been registered. Note: a service class must define a required scope decorator. */
|
|
56
|
-
tryRegister<T, TInstance extends T>(service: IService<T>, ctor: Constructor<TInstance
|
|
61
|
+
tryRegister<T, TInstance extends T>(service: IService<T>, ctor: Constructor<TInstance>, options?: IServiceRegistrationOptions): boolean;
|
|
57
62
|
/** Attempts to register a singleton instance that lives within the collection and is available to all child scopes. Note: if the instance implements IDisposable it will not be disposed automatically. */
|
|
58
|
-
tryRegisterInstance<T, TInstance extends T>(service: IService<T>, instance: TInstance): boolean;
|
|
63
|
+
tryRegisterInstance<T, TInstance extends T>(service: IService<T>, instance: TInstance, options?: IServiceRegistrationOptions): boolean;
|
|
59
64
|
/** Attempts to register a service that gets created once per service collection scope. */
|
|
60
|
-
tryRegisterScoped<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance
|
|
65
|
+
tryRegisterScoped<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance>, options?: IServiceRegistrationOptions): boolean;
|
|
61
66
|
/** Attempts to register a service that gets created once and is available to all child scopes. */
|
|
62
|
-
tryRegisterSingleton<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance
|
|
67
|
+
tryRegisterSingleton<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance>, options?: IServiceRegistrationOptions): boolean;
|
|
63
68
|
/** Attempts to register a service that gets created each time the service is requested from a collection. */
|
|
64
|
-
tryRegisterTransient<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance
|
|
69
|
+
tryRegisterTransient<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance>, options?: IServiceRegistrationOptions): boolean;
|
|
65
70
|
}
|
|
66
71
|
export interface IServiceCollection {
|
|
67
72
|
/** Creates a scoped collection. */
|
|
@@ -78,9 +83,22 @@ export interface IServiceFactory<T> {
|
|
|
78
83
|
}
|
|
79
84
|
export interface IScopedServiceCollection extends IServiceCollection, IDisposable {
|
|
80
85
|
}
|
|
86
|
+
interface IServiceEntry<T = any> {
|
|
87
|
+
readonly service: IService<T>;
|
|
88
|
+
readonly scope: ServiceScope;
|
|
89
|
+
readonly ctor?: Constructor<T>;
|
|
90
|
+
readonly factory?: IServiceFactory<T>;
|
|
91
|
+
readonly sealed?: boolean;
|
|
92
|
+
}
|
|
81
93
|
export declare const IInstantiationService: IService<IInstantiationService>;
|
|
82
94
|
export declare const IOptionsService: IService<IOptionsService>;
|
|
83
95
|
export declare const IServiceCollection: IService<IServiceCollection>;
|
|
96
|
+
declare const enum ServiceScope {
|
|
97
|
+
instance = "instance",
|
|
98
|
+
scoped = "scoped",
|
|
99
|
+
singleton = "singleton",
|
|
100
|
+
transient = "transient"
|
|
101
|
+
}
|
|
84
102
|
/** Class decorator identifying the required scope for a service as 'scoped'. */
|
|
85
103
|
export declare function Scoped(ctor: any): void;
|
|
86
104
|
/** Class decorator identifying the required scope for a service as 'singleton'. */
|
|
@@ -108,33 +126,36 @@ export declare class SingletonServiceFactory<T> implements IServiceFactory<T> {
|
|
|
108
126
|
}
|
|
109
127
|
export declare class ServiceMap implements IServiceRegistration, IServiceCollection, IOptionsService, IInstantiationService {
|
|
110
128
|
private readonly services;
|
|
129
|
+
private readonly instances;
|
|
111
130
|
private isFrozen?;
|
|
112
|
-
|
|
131
|
+
/** Creates a new ServiceMap instance; note: the services parameter is for internal purposes and should not be used. */
|
|
132
|
+
constructor(services?: Map<string, IServiceEntry<any>>);
|
|
113
133
|
addOptionsProvider(provider: IOptionsProvider): void;
|
|
114
134
|
configureOptions<T>(options: IOptions<T>, callback: (options: T) => T): void;
|
|
115
135
|
createInstance<T>(ctor: Constructor<T>): T;
|
|
116
136
|
createScope(): IScopedServiceCollection;
|
|
117
137
|
getOptions<T>(options: IOptions<T>): T;
|
|
118
|
-
register<T, TInstance extends T>(service: IService<T>, ctor: Constructor<TInstance
|
|
119
|
-
registerInstance<T, TInstance extends T>(service: IService<T>, instance: TInstance): void;
|
|
120
|
-
registerScoped<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance
|
|
121
|
-
registerSingleton<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance
|
|
122
|
-
registerTransient<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance
|
|
123
|
-
tryRegister<T, TInstance extends T>(service: IService<T>, ctor: Constructor<TInstance
|
|
124
|
-
tryRegisterInstance<T, TInstance extends T>(service: IService<T>, instance: TInstance): boolean;
|
|
125
|
-
tryRegisterScoped<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance
|
|
126
|
-
tryRegisterSingleton<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance
|
|
127
|
-
tryRegisterTransient<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance
|
|
138
|
+
register<T, TInstance extends T>(service: IService<T>, ctor: Constructor<TInstance>, options?: IServiceRegistrationOptions): void;
|
|
139
|
+
registerInstance<T, TInstance extends T>(service: IService<T>, instance: TInstance, options?: IServiceRegistrationOptions): void;
|
|
140
|
+
registerScoped<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance>, options?: IServiceRegistrationOptions): void;
|
|
141
|
+
registerSingleton<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance>, options?: IServiceRegistrationOptions): void;
|
|
142
|
+
registerTransient<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance>, options?: IServiceRegistrationOptions): void;
|
|
143
|
+
tryRegister<T, TInstance extends T>(service: IService<T>, ctor: Constructor<TInstance>, options?: IServiceRegistrationOptions): boolean;
|
|
144
|
+
tryRegisterInstance<T, TInstance extends T>(service: IService<T>, instance: TInstance, options?: IServiceRegistrationOptions): boolean;
|
|
145
|
+
tryRegisterScoped<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance>, options?: IServiceRegistrationOptions): boolean;
|
|
146
|
+
tryRegisterSingleton<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance>, options?: IServiceRegistrationOptions): boolean;
|
|
147
|
+
tryRegisterTransient<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance>, options?: IServiceRegistrationOptions): boolean;
|
|
128
148
|
get<T>(serviceOrKey: IService<T> | string): T;
|
|
129
149
|
has<T>(serviceOrKey: IService<T> | string): boolean;
|
|
130
150
|
tryGet<T>(serviceOrKey: IService<T> | string): T | undefined;
|
|
131
151
|
/** Prevents items from being registered with the serivce map. */
|
|
132
152
|
freeze(): void;
|
|
153
|
+
protected getOrCreateServiceInstance(key: string, rootScope?: ServiceScope, ancestors?: Constructor<any>[]): any;
|
|
133
154
|
private registerService;
|
|
134
|
-
private
|
|
155
|
+
private tryRegisterService;
|
|
135
156
|
private checkFactoryInstance;
|
|
136
157
|
private checkInstanceScope;
|
|
137
|
-
private
|
|
158
|
+
private checkParentChildScopes;
|
|
138
159
|
private getOrCreateInjectable;
|
|
139
160
|
private createServiceInstance;
|
|
140
161
|
private createObjectInstance;
|
|
@@ -121,13 +121,18 @@ class SingletonServiceFactory {
|
|
|
121
121
|
}
|
|
122
122
|
exports.SingletonServiceFactory = SingletonServiceFactory;
|
|
123
123
|
class ServiceMap {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
this
|
|
129
|
-
|
|
130
|
-
|
|
124
|
+
/** Creates a new ServiceMap instance; note: the services parameter is for internal purposes and should not be used. */
|
|
125
|
+
constructor(services = new Map()) {
|
|
126
|
+
this.services = services;
|
|
127
|
+
this.instances = new Map();
|
|
128
|
+
// assume this is a scoped service if the provided map already has entries
|
|
129
|
+
if (!services.size) {
|
|
130
|
+
// the thisFactory is used to return the appropriate ServiceMap instance since the IInstantiationService and IServiceCollection services need to be scoped
|
|
131
|
+
const thisFactory = { create: service => service };
|
|
132
|
+
this.registerService(exports.IInstantiationService, "scoped" /* scoped */, thisFactory, { sealed: true });
|
|
133
|
+
this.registerService(exports.IServiceCollection, "scoped" /* scoped */, thisFactory, { sealed: true });
|
|
134
|
+
this.registerSingleton(exports.IOptionsService, OptionsService, { sealed: true });
|
|
135
|
+
}
|
|
131
136
|
}
|
|
132
137
|
addOptionsProvider(provider) {
|
|
133
138
|
return this.get(exports.IOptionsService).addOptionsProvider(provider);
|
|
@@ -140,97 +145,76 @@ class ServiceMap {
|
|
|
140
145
|
}
|
|
141
146
|
createScope() {
|
|
142
147
|
const parent = this;
|
|
148
|
+
const getOrCreateServiceInstanceFromParent = this.getOrCreateServiceInstance.bind(this);
|
|
143
149
|
return new class extends ServiceMap {
|
|
144
150
|
constructor() {
|
|
145
|
-
super();
|
|
146
|
-
// The service map registers a few built-in services that need to be handled a little differently
|
|
147
|
-
// -- if the service is singleton/instance it gets copied from the parent
|
|
148
|
-
// -- if the service is scoped/transient do not overwrite the entry from the parent
|
|
149
|
-
for (const entry of parent.services.values()) {
|
|
150
|
-
if (entry.scope === "singleton" /* singleton */ || entry.scope === "instance" /* instance */) {
|
|
151
|
-
// copy the singleton entry directly to the scoped collection - it's possible the instance has not yet been created so the entire entry gets copied down
|
|
152
|
-
this.registerEntry(entry);
|
|
153
|
-
}
|
|
154
|
-
else if (!this.services.has(entry.service.key)) {
|
|
155
|
-
// create a new entry for scoped/transient services
|
|
156
|
-
this.registerEntry({ ...entry, instance: undefined });
|
|
157
|
-
}
|
|
158
|
-
}
|
|
151
|
+
super(parent.services);
|
|
159
152
|
this.freeze();
|
|
160
153
|
}
|
|
161
154
|
dispose() {
|
|
162
|
-
for (const
|
|
163
|
-
//
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
service.instance.dispose();
|
|
155
|
+
for (const instance of this.instances.values()) {
|
|
156
|
+
// dispose instances created and referenced by the scope; this will be scoped and transient instances
|
|
157
|
+
// also make sure we don't dispose the current instance as that will cause a stack overflow
|
|
158
|
+
if (instance !== this && isDisposable(instance)) {
|
|
159
|
+
instance.dispose();
|
|
168
160
|
}
|
|
169
161
|
}
|
|
170
|
-
this.
|
|
162
|
+
this.instances.clear();
|
|
163
|
+
}
|
|
164
|
+
getOrCreateServiceInstance(key, rootScope, ancestors) {
|
|
165
|
+
const entry = this.services.get(key);
|
|
166
|
+
if (entry !== undefined && (entry.scope === "singleton" /* singleton */ || entry.scope === "instance" /* instance */)) {
|
|
167
|
+
// if the service is an instance or singleton call up the parent chain and get the instance from the root
|
|
168
|
+
return getOrCreateServiceInstanceFromParent(key, rootScope, ancestors);
|
|
169
|
+
}
|
|
170
|
+
return super.getOrCreateServiceInstance(key, rootScope, ancestors);
|
|
171
171
|
}
|
|
172
172
|
};
|
|
173
173
|
}
|
|
174
174
|
getOptions(options) {
|
|
175
175
|
return this.get(exports.IOptionsService).getOptions(options);
|
|
176
176
|
}
|
|
177
|
-
register(service, ctor) {
|
|
178
|
-
this.registerService(service, getServiceScope(ctor), ctor);
|
|
177
|
+
register(service, ctor, options) {
|
|
178
|
+
this.registerService(service, getServiceScope(ctor), ctor, options);
|
|
179
179
|
}
|
|
180
|
-
registerInstance(service, instance) {
|
|
180
|
+
registerInstance(service, instance, options) {
|
|
181
181
|
if (instance === undefined) {
|
|
182
182
|
throw new Error("instance undefined");
|
|
183
183
|
}
|
|
184
184
|
// TODO: check if the instance constructor has a required scope - if so, verify its a singleton
|
|
185
|
-
this.
|
|
186
|
-
|
|
187
|
-
scope: "instance" /* instance */,
|
|
188
|
-
instance
|
|
189
|
-
});
|
|
185
|
+
this.instances.set(service.key, instance);
|
|
186
|
+
this.services.set(service.key, { service, scope: "instance" /* instance */, sealed: options && options.sealed });
|
|
190
187
|
}
|
|
191
|
-
registerScoped(service, ctorOrFactory) {
|
|
192
|
-
this.registerService(service, "scoped" /* scoped */, ctorOrFactory);
|
|
188
|
+
registerScoped(service, ctorOrFactory, options) {
|
|
189
|
+
this.registerService(service, "scoped" /* scoped */, ctorOrFactory, options);
|
|
193
190
|
}
|
|
194
|
-
registerSingleton(service, ctorOrFactory) {
|
|
195
|
-
this.registerService(service, "singleton" /* singleton */, ctorOrFactory);
|
|
191
|
+
registerSingleton(service, ctorOrFactory, options) {
|
|
192
|
+
this.registerService(service, "singleton" /* singleton */, ctorOrFactory, options);
|
|
196
193
|
}
|
|
197
|
-
registerTransient(service, ctorOrFactory) {
|
|
198
|
-
this.registerService(service, "transient" /* transient */, ctorOrFactory);
|
|
194
|
+
registerTransient(service, ctorOrFactory, options) {
|
|
195
|
+
this.registerService(service, "transient" /* transient */, ctorOrFactory, options);
|
|
199
196
|
}
|
|
200
|
-
tryRegister(service, ctor) {
|
|
201
|
-
|
|
202
|
-
this.register(service, ctor);
|
|
203
|
-
return true;
|
|
204
|
-
}
|
|
205
|
-
return false;
|
|
197
|
+
tryRegister(service, ctor, options) {
|
|
198
|
+
return this.tryRegisterService(service, getServiceScope(ctor), ctor, options) === "success";
|
|
206
199
|
}
|
|
207
|
-
tryRegisterInstance(service, instance) {
|
|
208
|
-
|
|
209
|
-
|
|
200
|
+
tryRegisterInstance(service, instance, options) {
|
|
201
|
+
try {
|
|
202
|
+
// TODO: refactor -- need to invoke registerInstance because it registers the instance
|
|
203
|
+
this.registerInstance(service, instance, options);
|
|
210
204
|
return true;
|
|
211
205
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
tryRegisterScoped(service, ctorOrFactory) {
|
|
215
|
-
if (!this.services.has(service.key)) {
|
|
216
|
-
this.registerScoped(service, ctorOrFactory);
|
|
217
|
-
return true;
|
|
206
|
+
catch {
|
|
207
|
+
return false;
|
|
218
208
|
}
|
|
219
|
-
return false;
|
|
220
209
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
this.registerSingleton(service, ctorOrFactory);
|
|
224
|
-
return true;
|
|
225
|
-
}
|
|
226
|
-
return false;
|
|
210
|
+
tryRegisterScoped(service, ctorOrFactory, options) {
|
|
211
|
+
return this.tryRegisterService(service, "scoped" /* scoped */, ctorOrFactory, options) === "success";
|
|
227
212
|
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
return false;
|
|
213
|
+
tryRegisterSingleton(service, ctorOrFactory, options) {
|
|
214
|
+
return this.tryRegisterService(service, "singleton" /* singleton */, ctorOrFactory, options) === "success";
|
|
215
|
+
}
|
|
216
|
+
tryRegisterTransient(service, ctorOrFactory, options) {
|
|
217
|
+
return this.tryRegisterService(service, "transient" /* transient */, ctorOrFactory, options) === "success";
|
|
234
218
|
}
|
|
235
219
|
get(serviceOrKey) {
|
|
236
220
|
const key = typeof serviceOrKey === "string" ? serviceOrKey : serviceOrKey.key;
|
|
@@ -250,22 +234,46 @@ class ServiceMap {
|
|
|
250
234
|
freeze() {
|
|
251
235
|
this.isFrozen = true;
|
|
252
236
|
}
|
|
253
|
-
|
|
254
|
-
this.
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
237
|
+
getOrCreateServiceInstance(key, rootScope, ancestors) {
|
|
238
|
+
const entry = this.services.get(key);
|
|
239
|
+
if (!entry) {
|
|
240
|
+
throw new Error(`Service not registered for key '${key}'.`);
|
|
241
|
+
}
|
|
242
|
+
let current = this.instances.get(key);
|
|
243
|
+
if (current) {
|
|
244
|
+
return current;
|
|
245
|
+
}
|
|
246
|
+
const instance = this.createServiceInstance(entry, rootScope, ancestors);
|
|
247
|
+
if (entry.scope === "scoped" /* scoped */ || entry.scope === "singleton" /* singleton */) {
|
|
248
|
+
this.instances.set(key, instance);
|
|
249
|
+
}
|
|
250
|
+
return instance;
|
|
260
251
|
}
|
|
261
|
-
|
|
262
|
-
|
|
252
|
+
registerService(service, scope, ctorOrFactory, options) {
|
|
253
|
+
const result = this.tryRegisterService(service, scope, ctorOrFactory, options);
|
|
254
|
+
if (result === "frozen") {
|
|
263
255
|
throw new Error("Service collection is frozen");
|
|
264
256
|
}
|
|
265
|
-
if (
|
|
266
|
-
|
|
257
|
+
if (result === "sealed") {
|
|
258
|
+
throw new Error(`Service with key (${service.key}) cannot be overridden.`);
|
|
267
259
|
}
|
|
268
|
-
|
|
260
|
+
}
|
|
261
|
+
tryRegisterService(service, scope, ctorOrFactory, options) {
|
|
262
|
+
if (this.isFrozen === true) {
|
|
263
|
+
return "frozen";
|
|
264
|
+
}
|
|
265
|
+
const current = this.services.get(service.key);
|
|
266
|
+
if (current && current.sealed) {
|
|
267
|
+
return "sealed";
|
|
268
|
+
}
|
|
269
|
+
const ctor = isConstructor(ctorOrFactory) ? ctorOrFactory : undefined;
|
|
270
|
+
const factory = isServiceFactory(ctorOrFactory) ? ctorOrFactory : undefined;
|
|
271
|
+
const sealed = options && options.sealed;
|
|
272
|
+
if (ctor) {
|
|
273
|
+
this.checkInstanceScope(ctor, scope);
|
|
274
|
+
}
|
|
275
|
+
this.services.set(service.key, { service, scope, ctor, factory, sealed });
|
|
276
|
+
return "success";
|
|
269
277
|
}
|
|
270
278
|
checkFactoryInstance(instance, scope) {
|
|
271
279
|
if (typeof instance !== "object" && typeof instance !== "function") {
|
|
@@ -281,30 +289,23 @@ class ServiceMap {
|
|
|
281
289
|
throw new Error("Registered service scope is different than the instance required scope");
|
|
282
290
|
}
|
|
283
291
|
}
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
if (entry.instance) {
|
|
290
|
-
return entry.instance;
|
|
291
|
-
}
|
|
292
|
-
const instance = this.createServiceInstance(entry, ancestors);
|
|
293
|
-
if (entry.scope === "scoped" /* scoped */ || entry.scope === "singleton" /* singleton */) {
|
|
294
|
-
entry.instance = instance;
|
|
292
|
+
checkParentChildScopes(parentScope, childScope) {
|
|
293
|
+
if (!parentScope || parentScope === "instance" /* instance */ || parentScope === "singleton" /* singleton */) {
|
|
294
|
+
if (childScope === "scoped" /* scoped */) {
|
|
295
|
+
throw new Error("Scoped services should only be referenced by Transient or other Scoped services.");
|
|
296
|
+
}
|
|
295
297
|
}
|
|
296
|
-
return instance;
|
|
297
298
|
}
|
|
298
|
-
getOrCreateInjectable(injectable, ancestors) {
|
|
299
|
+
getOrCreateInjectable(injectable, rootScope, ancestors) {
|
|
299
300
|
if (this.services.has(injectable.key)) {
|
|
300
|
-
return this.getOrCreateServiceInstance(injectable.key, ancestors);
|
|
301
|
+
return this.getOrCreateServiceInstance(injectable.key, rootScope, ancestors);
|
|
301
302
|
}
|
|
302
303
|
if (injectable.factory) {
|
|
303
304
|
return injectable.factory(this);
|
|
304
305
|
}
|
|
305
306
|
throw new Error(`Invalid injectable (${injectable.key}), either a service has not been registered or the injectable does not define a factory.`);
|
|
306
307
|
}
|
|
307
|
-
createServiceInstance(entry, ancestors) {
|
|
308
|
+
createServiceInstance(entry, rootScope, ancestors) {
|
|
308
309
|
if (entry.factory) {
|
|
309
310
|
const instance = entry.factory.create(this);
|
|
310
311
|
// even though the scope cannot be verified until now it is still a good idea to check that the service instance is being properly scoped
|
|
@@ -312,11 +313,11 @@ class ServiceMap {
|
|
|
312
313
|
return instance;
|
|
313
314
|
}
|
|
314
315
|
if (entry.ctor) {
|
|
315
|
-
return this.createObjectInstance(entry.ctor, ancestors);
|
|
316
|
+
return this.createObjectInstance(entry.ctor, rootScope, ancestors);
|
|
316
317
|
}
|
|
317
318
|
throw new Error("Invalid service entry.");
|
|
318
319
|
}
|
|
319
|
-
createObjectInstance(ctor, ancestors) {
|
|
320
|
+
createObjectInstance(ctor, rootScope, ancestors) {
|
|
320
321
|
if (ancestors && ancestors.includes(ctor)) {
|
|
321
322
|
const path = [...ancestors.map(ctor => ctor.name), ctor.name].join(" -> ");
|
|
322
323
|
throw new Error("Circular dependency detected: " + path);
|
|
@@ -327,10 +328,18 @@ class ServiceMap {
|
|
|
327
328
|
throw new Error(`Invalid constructor (${ctor.name}), all parameters must be injectable.`);
|
|
328
329
|
}
|
|
329
330
|
try {
|
|
331
|
+
// root scope is used to ensure service dependecies are properly scoped -- mainly, singleton services should not reference scoped services
|
|
332
|
+
rootScope = rootScope || ctor[scope];
|
|
333
|
+
// ancestors is used to track circular dependencies
|
|
330
334
|
ancestors = ancestors || [];
|
|
331
335
|
ancestors.push(ctor);
|
|
332
336
|
// create/get instances for all the object's constructor parameters
|
|
333
|
-
const args = keys.map(key =>
|
|
337
|
+
const args = keys.map(key => {
|
|
338
|
+
const injectable = dependencies[key];
|
|
339
|
+
const entry = this.services.get(injectable.key);
|
|
340
|
+
this.checkParentChildScopes(rootScope, entry && entry.scope);
|
|
341
|
+
return this.getOrCreateInjectable(injectable, rootScope, ancestors);
|
|
342
|
+
});
|
|
334
343
|
ancestors.splice(ancestors.indexOf(ctor), 1);
|
|
335
344
|
return new ctor(...args);
|
|
336
345
|
}
|
|
@@ -392,4 +401,4 @@ class OptionsService {
|
|
|
392
401
|
return options;
|
|
393
402
|
}
|
|
394
403
|
}
|
|
395
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1jb2xsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NlcnZpY2UtY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFzR2EsUUFBQSxxQkFBcUIsR0FBRyxhQUFhLENBQXdCLHVCQUF1QixDQUFDLENBQUM7QUFDdEYsUUFBQSxlQUFlLEdBQUcsYUFBYSxDQUFrQixpQkFBaUIsQ0FBQyxDQUFDO0FBQ3BFLFFBQUEsa0JBQWtCLEdBQUcsYUFBYSxDQUFxQixvQkFBb0IsQ0FBQyxDQUFDO0FBRTFGLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDO0FBQ3RDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQztBQVN4QixnRkFBZ0Y7QUFDaEYsU0FBZ0IsTUFBTSxDQUFDLElBQVM7SUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBc0IsQ0FBQztBQUN0QyxDQUFDO0FBRkQsd0JBRUM7QUFFRCxtRkFBbUY7QUFDbkYsU0FBZ0IsU0FBUyxDQUFDLElBQVM7SUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyw4QkFBeUIsQ0FBQztBQUN6QyxDQUFDO0FBRkQsOEJBRUM7QUFFRCxtRkFBbUY7QUFDbkYsU0FBZ0IsU0FBUyxDQUFDLElBQVM7SUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyw4QkFBeUIsQ0FBQztBQUN6QyxDQUFDO0FBRkQsOEJBRUM7QUFJRCxTQUFnQixnQkFBZ0IsQ0FBSSxZQUE0QztJQUM1RSxNQUFNLE9BQU8sR0FBRyxPQUFPLFlBQVksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUM7SUFDeEYsTUFBTSxVQUFVLEdBQVEsVUFBVSxNQUFXLEVBQUUsV0FBbUIsRUFBRSxjQUFzQjtRQUN0RixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0RB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
|
|
404
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1jb2xsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NlcnZpY2UtY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE2R2EsUUFBQSxxQkFBcUIsR0FBRyxhQUFhLENBQXdCLHVCQUF1QixDQUFDLENBQUM7QUFDdEYsUUFBQSxlQUFlLEdBQUcsYUFBYSxDQUFrQixpQkFBaUIsQ0FBQyxDQUFDO0FBQ3BFLFFBQUEsa0JBQWtCLEdBQUcsYUFBYSxDQUFxQixvQkFBb0IsQ0FBQyxDQUFDO0FBRTFGLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDO0FBQ3RDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQztBQVN4QixnRkFBZ0Y7QUFDaEYsU0FBZ0IsTUFBTSxDQUFDLElBQVM7SUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBc0IsQ0FBQztBQUN0QyxDQUFDO0FBRkQsd0JBRUM7QUFFRCxtRkFBbUY7QUFDbkYsU0FBZ0IsU0FBUyxDQUFDLElBQVM7SUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyw4QkFBeUIsQ0FBQztBQUN6QyxDQUFDO0FBRkQsOEJBRUM7QUFFRCxtRkFBbUY7QUFDbkYsU0FBZ0IsU0FBUyxDQUFDLElBQVM7SUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyw4QkFBeUIsQ0FBQztBQUN6QyxDQUFDO0FBRkQsOEJBRUM7QUFJRCxTQUFnQixnQkFBZ0IsQ0FBSSxZQUE0QztJQUM1RSxNQUFNLE9BQU8sR0FBRyxPQUFPLFlBQVksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUM7SUFDeEYsTUFBTSxVQUFVLEdBQVEsVUFBVSxNQUFXLEVBQUUsV0FBbUIsRUFBRSxjQUFzQjtRQUN0RixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0RB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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shrub/core",
|
|
3
3
|
"description": "A framework for modular server-side applications and front-end components.",
|
|
4
|
-
"version": "0.5.
|
|
4
|
+
"version": "0.5.30",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -22,5 +22,5 @@
|
|
|
22
22
|
"clean": "rimraf ./dist && rimraf tsconfig.tsbuildinfo",
|
|
23
23
|
"test": "jest"
|
|
24
24
|
},
|
|
25
|
-
"gitHead": "
|
|
25
|
+
"gitHead": "b146deb7bac0f9bc51c28a610a1f3062ade6ba69"
|
|
26
26
|
}
|