@shrub/core 0.5.28 → 0.5.32

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.
@@ -114,11 +114,14 @@ export class ServiceMap {
114
114
  constructor(services = new Map()) {
115
115
  this.services = services;
116
116
  this.instances = new Map();
117
- // the thisFactory is necessary for scoped collections
118
- const thisFactory = { create: () => this };
119
- this.registerService(IInstantiationService, "scoped" /* scoped */, thisFactory);
120
- this.registerService(IServiceCollection, "scoped" /* scoped */, thisFactory);
121
- this.registerSingleton(IOptionsService, OptionsService);
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
+ }
122
125
  }
123
126
  addOptionsProvider(provider) {
124
127
  return this.get(IOptionsService).addOptionsProvider(provider);
@@ -147,73 +150,60 @@ export class ServiceMap {
147
150
  }
148
151
  this.instances.clear();
149
152
  }
150
- getOrCreateServiceInstance(key, ancestors) {
153
+ getOrCreateServiceInstance(key, rootScope, ancestors) {
151
154
  const entry = this.services.get(key);
152
155
  if (entry !== undefined && (entry.scope === "singleton" /* singleton */ || entry.scope === "instance" /* instance */)) {
153
156
  // if the service is an instance or singleton call up the parent chain and get the instance from the root
154
- return getOrCreateServiceInstanceFromParent(key, ancestors);
157
+ return getOrCreateServiceInstanceFromParent(key, rootScope, ancestors);
155
158
  }
156
- return super.getOrCreateServiceInstance(key, ancestors);
159
+ return super.getOrCreateServiceInstance(key, rootScope, ancestors);
157
160
  }
158
161
  };
159
162
  }
160
163
  getOptions(options) {
161
164
  return this.get(IOptionsService).getOptions(options);
162
165
  }
163
- register(service, ctor) {
164
- this.registerService(service, getServiceScope(ctor), ctor);
166
+ register(service, ctor, options) {
167
+ this.registerService(service, getServiceScope(ctor), ctor, options);
165
168
  }
166
- registerInstance(service, instance) {
169
+ registerInstance(service, instance, options) {
167
170
  if (instance === undefined) {
168
171
  throw new Error("instance undefined");
169
172
  }
170
173
  // TODO: check if the instance constructor has a required scope - if so, verify its a singleton
171
174
  this.instances.set(service.key, instance);
172
- this.services.set(service.key, { service, scope: "instance" /* instance */ });
175
+ this.services.set(service.key, { service, scope: "instance" /* instance */, sealed: options && options.sealed });
173
176
  }
174
- registerScoped(service, ctorOrFactory) {
175
- this.registerService(service, "scoped" /* scoped */, ctorOrFactory);
177
+ registerScoped(service, ctorOrFactory, options) {
178
+ this.registerService(service, "scoped" /* scoped */, ctorOrFactory, options);
176
179
  }
177
- registerSingleton(service, ctorOrFactory) {
178
- this.registerService(service, "singleton" /* singleton */, ctorOrFactory);
180
+ registerSingleton(service, ctorOrFactory, options) {
181
+ this.registerService(service, "singleton" /* singleton */, ctorOrFactory, options);
179
182
  }
180
- registerTransient(service, ctorOrFactory) {
181
- this.registerService(service, "transient" /* transient */, ctorOrFactory);
183
+ registerTransient(service, ctorOrFactory, options) {
184
+ this.registerService(service, "transient" /* transient */, ctorOrFactory, options);
182
185
  }
183
- tryRegister(service, ctor) {
184
- if (!this.services.has(service.key)) {
185
- this.register(service, ctor);
186
- return true;
187
- }
188
- return false;
186
+ tryRegister(service, ctor, options) {
187
+ return this.tryRegisterService(service, getServiceScope(ctor), ctor, options) === "success";
189
188
  }
190
- tryRegisterInstance(service, instance) {
191
- if (!this.services.has(service.key)) {
192
- this.registerInstance(service, instance);
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);
193
193
  return true;
194
194
  }
195
- return false;
196
- }
197
- tryRegisterScoped(service, ctorOrFactory) {
198
- if (!this.services.has(service.key)) {
199
- this.registerScoped(service, ctorOrFactory);
200
- return true;
195
+ catch {
196
+ return false;
201
197
  }
202
- return false;
203
198
  }
204
- tryRegisterSingleton(service, ctorOrFactory) {
205
- if (!this.services.has(service.key)) {
206
- this.registerSingleton(service, ctorOrFactory);
207
- return true;
208
- }
209
- return false;
199
+ tryRegisterScoped(service, ctorOrFactory, options) {
200
+ return this.tryRegisterService(service, "scoped" /* scoped */, ctorOrFactory, options) === "success";
210
201
  }
211
- tryRegisterTransient(service, ctorOrFactory) {
212
- if (!this.services.has(service.key)) {
213
- this.registerTransient(service, ctorOrFactory);
214
- return true;
215
- }
216
- 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";
217
207
  }
218
208
  get(serviceOrKey) {
219
209
  const key = typeof serviceOrKey === "string" ? serviceOrKey : serviceOrKey.key;
@@ -233,7 +223,7 @@ export class ServiceMap {
233
223
  freeze() {
234
224
  this.isFrozen = true;
235
225
  }
236
- getOrCreateServiceInstance(key, ancestors) {
226
+ getOrCreateServiceInstance(key, rootScope, ancestors) {
237
227
  const entry = this.services.get(key);
238
228
  if (!entry) {
239
229
  throw new Error(`Service not registered for key '${key}'.`);
@@ -242,28 +232,37 @@ export class ServiceMap {
242
232
  if (current) {
243
233
  return current;
244
234
  }
245
- const instance = this.createServiceInstance(entry, ancestors);
235
+ const instance = this.createServiceInstance(entry, rootScope, ancestors);
246
236
  if (entry.scope === "scoped" /* scoped */ || entry.scope === "singleton" /* singleton */) {
247
237
  this.instances.set(key, instance);
248
238
  }
249
239
  return instance;
250
240
  }
251
- registerService(service, scope, ctorOrFactory) {
252
- this.registerEntry({
253
- service,
254
- scope,
255
- ctor: isConstructor(ctorOrFactory) ? ctorOrFactory : undefined,
256
- factory: isServiceFactory(ctorOrFactory) ? ctorOrFactory : undefined
257
- });
241
+ registerService(service, scope, ctorOrFactory, options) {
242
+ const result = this.tryRegisterService(service, scope, ctorOrFactory, options);
243
+ if (result === "frozen") {
244
+ throw new Error("Service collection is frozen");
245
+ }
246
+ if (result === "sealed") {
247
+ throw new Error(`Service with key (${service.key}) cannot be overridden.`);
248
+ }
258
249
  }
259
- registerEntry(entry) {
250
+ tryRegisterService(service, scope, ctorOrFactory, options) {
260
251
  if (this.isFrozen === true) {
261
- throw new Error("Service collection is frozen");
252
+ return "frozen";
262
253
  }
263
- if (entry.ctor) {
264
- this.checkInstanceScope(entry.ctor, entry.scope);
254
+ const current = this.services.get(service.key);
255
+ if (current && current.sealed) {
256
+ return "sealed";
265
257
  }
266
- this.services.set(entry.service.key, entry);
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";
267
266
  }
268
267
  checkFactoryInstance(instance, scope) {
269
268
  if (typeof instance !== "object" && typeof instance !== "function") {
@@ -279,16 +278,23 @@ export class ServiceMap {
279
278
  throw new Error("Registered service scope is different than the instance required scope");
280
279
  }
281
280
  }
282
- getOrCreateInjectable(injectable, ancestors) {
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
+ }
286
+ }
287
+ }
288
+ getOrCreateInjectable(injectable, rootScope, ancestors) {
283
289
  if (this.services.has(injectable.key)) {
284
- return this.getOrCreateServiceInstance(injectable.key, ancestors);
290
+ return this.getOrCreateServiceInstance(injectable.key, rootScope, ancestors);
285
291
  }
286
292
  if (injectable.factory) {
287
293
  return injectable.factory(this);
288
294
  }
289
295
  throw new Error(`Invalid injectable (${injectable.key}), either a service has not been registered or the injectable does not define a factory.`);
290
296
  }
291
- createServiceInstance(entry, ancestors) {
297
+ createServiceInstance(entry, rootScope, ancestors) {
292
298
  if (entry.factory) {
293
299
  const instance = entry.factory.create(this);
294
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
@@ -296,11 +302,11 @@ export class ServiceMap {
296
302
  return instance;
297
303
  }
298
304
  if (entry.ctor) {
299
- return this.createObjectInstance(entry.ctor, ancestors);
305
+ return this.createObjectInstance(entry.ctor, rootScope, ancestors);
300
306
  }
301
307
  throw new Error("Invalid service entry.");
302
308
  }
303
- createObjectInstance(ctor, ancestors) {
309
+ createObjectInstance(ctor, rootScope, ancestors) {
304
310
  if (ancestors && ancestors.includes(ctor)) {
305
311
  const path = [...ancestors.map(ctor => ctor.name), ctor.name].join(" -> ");
306
312
  throw new Error("Circular dependency detected: " + path);
@@ -311,10 +317,18 @@ export class ServiceMap {
311
317
  throw new Error(`Invalid constructor (${ctor.name}), all parameters must be injectable.`);
312
318
  }
313
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
314
323
  ancestors = ancestors || [];
315
324
  ancestors.push(ctor);
316
325
  // create/get instances for all the object's constructor parameters
317
- const args = keys.map(key => this.getOrCreateInjectable(dependencies[key], ancestors));
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
+ });
318
332
  ancestors.splice(ancestors.indexOf(ctor), 1);
319
333
  return new ctor(...args);
320
334
  }
@@ -374,4 +388,4 @@ class OptionsService {
374
388
  return options;
375
389
  }
376
390
  }
377
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1jb2xsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2UtY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxR0EsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsYUFBYSxDQUF3Qix1QkFBdUIsQ0FBQyxDQUFDO0FBQ25HLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQWtCLGlCQUFpQixDQUFDLENBQUM7QUFDakYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFxQixvQkFBb0IsQ0FBQyxDQUFDO0FBRTFGLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDO0FBQ3RDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQztBQVN4QixnRkFBZ0Y7QUFDaEYsTUFBTSxVQUFVLE1BQU0sQ0FBQyxJQUFTO0lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsd0JBQXNCLENBQUM7QUFDdEMsQ0FBQztBQUVELG1GQUFtRjtBQUNuRixNQUFNLFVBQVUsU0FBUyxDQUFDLElBQVM7SUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyw4QkFBeUIsQ0FBQztBQUN6QyxDQUFDO0FBRUQsbUZBQW1GO0FBQ25GLE1BQU0sVUFBVSxTQUFTLENBQUMsSUFBUztJQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLDhCQUF5QixDQUFDO0FBQ3pDLENBQUM7QUFJRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUksWUFBNEM7SUFDNUUsTUFBTSxPQUFPLEdBQUcsT0FBTyxZQUFZLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQ3hGLE1BQU0sVUFBVSxHQUFRLFVBQVUsTUFBVyxFQUFFLFdBQW1CLEVBQUUsY0FBc0I7UUFDdEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN4QixNQUFNLElBQUks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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>): void;
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>): void;
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>): void;
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>): void;
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>): boolean;
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>): boolean;
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>): boolean;
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>): boolean;
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. */
@@ -83,6 +88,7 @@ interface IServiceEntry<T = any> {
83
88
  readonly scope: ServiceScope;
84
89
  readonly ctor?: Constructor<T>;
85
90
  readonly factory?: IServiceFactory<T>;
91
+ readonly sealed?: boolean;
86
92
  }
87
93
  export declare const IInstantiationService: IService<IInstantiationService>;
88
94
  export declare const IOptionsService: IService<IOptionsService>;
@@ -129,26 +135,27 @@ export declare class ServiceMap implements IServiceRegistration, IServiceCollect
129
135
  createInstance<T>(ctor: Constructor<T>): T;
130
136
  createScope(): IScopedServiceCollection;
131
137
  getOptions<T>(options: IOptions<T>): T;
132
- register<T, TInstance extends T>(service: IService<T>, ctor: Constructor<TInstance>): void;
133
- registerInstance<T, TInstance extends T>(service: IService<T>, instance: TInstance): void;
134
- registerScoped<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance>): void;
135
- registerSingleton<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance>): void;
136
- registerTransient<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance>): void;
137
- tryRegister<T, TInstance extends T>(service: IService<T>, ctor: Constructor<TInstance>): boolean;
138
- tryRegisterInstance<T, TInstance extends T>(service: IService<T>, instance: TInstance): boolean;
139
- tryRegisterScoped<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance>): boolean;
140
- tryRegisterSingleton<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance>): boolean;
141
- tryRegisterTransient<T, TInstance extends T>(service: IService<T>, ctorOrFactory: Constructor<TInstance> | IServiceFactory<TInstance>): boolean;
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;
142
148
  get<T>(serviceOrKey: IService<T> | string): T;
143
149
  has<T>(serviceOrKey: IService<T> | string): boolean;
144
150
  tryGet<T>(serviceOrKey: IService<T> | string): T | undefined;
145
151
  /** Prevents items from being registered with the serivce map. */
146
152
  freeze(): void;
147
- protected getOrCreateServiceInstance(key: string, ancestors?: Constructor<any>[]): any;
153
+ protected getOrCreateServiceInstance(key: string, rootScope?: ServiceScope, ancestors?: Constructor<any>[]): any;
148
154
  private registerService;
149
- private registerEntry;
155
+ private tryRegisterService;
150
156
  private checkFactoryInstance;
151
157
  private checkInstanceScope;
158
+ private checkParentChildScopes;
152
159
  private getOrCreateInjectable;
153
160
  private createServiceInstance;
154
161
  private createObjectInstance;
@@ -125,11 +125,14 @@ class ServiceMap {
125
125
  constructor(services = new Map()) {
126
126
  this.services = services;
127
127
  this.instances = new Map();
128
- // the thisFactory is necessary for scoped collections
129
- const thisFactory = { create: () => this };
130
- this.registerService(exports.IInstantiationService, "scoped" /* scoped */, thisFactory);
131
- this.registerService(exports.IServiceCollection, "scoped" /* scoped */, thisFactory);
132
- this.registerSingleton(exports.IOptionsService, OptionsService);
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
+ }
133
136
  }
134
137
  addOptionsProvider(provider) {
135
138
  return this.get(exports.IOptionsService).addOptionsProvider(provider);
@@ -158,73 +161,60 @@ class ServiceMap {
158
161
  }
159
162
  this.instances.clear();
160
163
  }
161
- getOrCreateServiceInstance(key, ancestors) {
164
+ getOrCreateServiceInstance(key, rootScope, ancestors) {
162
165
  const entry = this.services.get(key);
163
166
  if (entry !== undefined && (entry.scope === "singleton" /* singleton */ || entry.scope === "instance" /* instance */)) {
164
167
  // if the service is an instance or singleton call up the parent chain and get the instance from the root
165
- return getOrCreateServiceInstanceFromParent(key, ancestors);
168
+ return getOrCreateServiceInstanceFromParent(key, rootScope, ancestors);
166
169
  }
167
- return super.getOrCreateServiceInstance(key, ancestors);
170
+ return super.getOrCreateServiceInstance(key, rootScope, ancestors);
168
171
  }
169
172
  };
170
173
  }
171
174
  getOptions(options) {
172
175
  return this.get(exports.IOptionsService).getOptions(options);
173
176
  }
174
- register(service, ctor) {
175
- this.registerService(service, getServiceScope(ctor), ctor);
177
+ register(service, ctor, options) {
178
+ this.registerService(service, getServiceScope(ctor), ctor, options);
176
179
  }
177
- registerInstance(service, instance) {
180
+ registerInstance(service, instance, options) {
178
181
  if (instance === undefined) {
179
182
  throw new Error("instance undefined");
180
183
  }
181
184
  // TODO: check if the instance constructor has a required scope - if so, verify its a singleton
182
185
  this.instances.set(service.key, instance);
183
- this.services.set(service.key, { service, scope: "instance" /* instance */ });
186
+ this.services.set(service.key, { service, scope: "instance" /* instance */, sealed: options && options.sealed });
184
187
  }
185
- registerScoped(service, ctorOrFactory) {
186
- this.registerService(service, "scoped" /* scoped */, ctorOrFactory);
188
+ registerScoped(service, ctorOrFactory, options) {
189
+ this.registerService(service, "scoped" /* scoped */, ctorOrFactory, options);
187
190
  }
188
- registerSingleton(service, ctorOrFactory) {
189
- this.registerService(service, "singleton" /* singleton */, ctorOrFactory);
191
+ registerSingleton(service, ctorOrFactory, options) {
192
+ this.registerService(service, "singleton" /* singleton */, ctorOrFactory, options);
190
193
  }
191
- registerTransient(service, ctorOrFactory) {
192
- this.registerService(service, "transient" /* transient */, ctorOrFactory);
194
+ registerTransient(service, ctorOrFactory, options) {
195
+ this.registerService(service, "transient" /* transient */, ctorOrFactory, options);
193
196
  }
194
- tryRegister(service, ctor) {
195
- if (!this.services.has(service.key)) {
196
- this.register(service, ctor);
197
- return true;
198
- }
199
- return false;
197
+ tryRegister(service, ctor, options) {
198
+ return this.tryRegisterService(service, getServiceScope(ctor), ctor, options) === "success";
200
199
  }
201
- tryRegisterInstance(service, instance) {
202
- if (!this.services.has(service.key)) {
203
- this.registerInstance(service, instance);
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);
204
204
  return true;
205
205
  }
206
- return false;
207
- }
208
- tryRegisterScoped(service, ctorOrFactory) {
209
- if (!this.services.has(service.key)) {
210
- this.registerScoped(service, ctorOrFactory);
211
- return true;
206
+ catch {
207
+ return false;
212
208
  }
213
- return false;
214
209
  }
215
- tryRegisterSingleton(service, ctorOrFactory) {
216
- if (!this.services.has(service.key)) {
217
- this.registerSingleton(service, ctorOrFactory);
218
- return true;
219
- }
220
- return false;
210
+ tryRegisterScoped(service, ctorOrFactory, options) {
211
+ return this.tryRegisterService(service, "scoped" /* scoped */, ctorOrFactory, options) === "success";
221
212
  }
222
- tryRegisterTransient(service, ctorOrFactory) {
223
- if (!this.services.has(service.key)) {
224
- this.registerTransient(service, ctorOrFactory);
225
- return true;
226
- }
227
- 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";
228
218
  }
229
219
  get(serviceOrKey) {
230
220
  const key = typeof serviceOrKey === "string" ? serviceOrKey : serviceOrKey.key;
@@ -244,7 +234,7 @@ class ServiceMap {
244
234
  freeze() {
245
235
  this.isFrozen = true;
246
236
  }
247
- getOrCreateServiceInstance(key, ancestors) {
237
+ getOrCreateServiceInstance(key, rootScope, ancestors) {
248
238
  const entry = this.services.get(key);
249
239
  if (!entry) {
250
240
  throw new Error(`Service not registered for key '${key}'.`);
@@ -253,28 +243,37 @@ class ServiceMap {
253
243
  if (current) {
254
244
  return current;
255
245
  }
256
- const instance = this.createServiceInstance(entry, ancestors);
246
+ const instance = this.createServiceInstance(entry, rootScope, ancestors);
257
247
  if (entry.scope === "scoped" /* scoped */ || entry.scope === "singleton" /* singleton */) {
258
248
  this.instances.set(key, instance);
259
249
  }
260
250
  return instance;
261
251
  }
262
- registerService(service, scope, ctorOrFactory) {
263
- this.registerEntry({
264
- service,
265
- scope,
266
- ctor: isConstructor(ctorOrFactory) ? ctorOrFactory : undefined,
267
- factory: isServiceFactory(ctorOrFactory) ? ctorOrFactory : undefined
268
- });
252
+ registerService(service, scope, ctorOrFactory, options) {
253
+ const result = this.tryRegisterService(service, scope, ctorOrFactory, options);
254
+ if (result === "frozen") {
255
+ throw new Error("Service collection is frozen");
256
+ }
257
+ if (result === "sealed") {
258
+ throw new Error(`Service with key (${service.key}) cannot be overridden.`);
259
+ }
269
260
  }
270
- registerEntry(entry) {
261
+ tryRegisterService(service, scope, ctorOrFactory, options) {
271
262
  if (this.isFrozen === true) {
272
- throw new Error("Service collection is frozen");
263
+ return "frozen";
273
264
  }
274
- if (entry.ctor) {
275
- this.checkInstanceScope(entry.ctor, entry.scope);
265
+ const current = this.services.get(service.key);
266
+ if (current && current.sealed) {
267
+ return "sealed";
276
268
  }
277
- this.services.set(entry.service.key, entry);
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";
278
277
  }
279
278
  checkFactoryInstance(instance, scope) {
280
279
  if (typeof instance !== "object" && typeof instance !== "function") {
@@ -290,16 +289,23 @@ class ServiceMap {
290
289
  throw new Error("Registered service scope is different than the instance required scope");
291
290
  }
292
291
  }
293
- getOrCreateInjectable(injectable, ancestors) {
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
+ }
297
+ }
298
+ }
299
+ getOrCreateInjectable(injectable, rootScope, ancestors) {
294
300
  if (this.services.has(injectable.key)) {
295
- return this.getOrCreateServiceInstance(injectable.key, ancestors);
301
+ return this.getOrCreateServiceInstance(injectable.key, rootScope, ancestors);
296
302
  }
297
303
  if (injectable.factory) {
298
304
  return injectable.factory(this);
299
305
  }
300
306
  throw new Error(`Invalid injectable (${injectable.key}), either a service has not been registered or the injectable does not define a factory.`);
301
307
  }
302
- createServiceInstance(entry, ancestors) {
308
+ createServiceInstance(entry, rootScope, ancestors) {
303
309
  if (entry.factory) {
304
310
  const instance = entry.factory.create(this);
305
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
@@ -307,11 +313,11 @@ class ServiceMap {
307
313
  return instance;
308
314
  }
309
315
  if (entry.ctor) {
310
- return this.createObjectInstance(entry.ctor, ancestors);
316
+ return this.createObjectInstance(entry.ctor, rootScope, ancestors);
311
317
  }
312
318
  throw new Error("Invalid service entry.");
313
319
  }
314
- createObjectInstance(ctor, ancestors) {
320
+ createObjectInstance(ctor, rootScope, ancestors) {
315
321
  if (ancestors && ancestors.includes(ctor)) {
316
322
  const path = [...ancestors.map(ctor => ctor.name), ctor.name].join(" -> ");
317
323
  throw new Error("Circular dependency detected: " + path);
@@ -322,10 +328,18 @@ class ServiceMap {
322
328
  throw new Error(`Invalid constructor (${ctor.name}), all parameters must be injectable.`);
323
329
  }
324
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
325
334
  ancestors = ancestors || [];
326
335
  ancestors.push(ctor);
327
336
  // create/get instances for all the object's constructor parameters
328
- const args = keys.map(key => this.getOrCreateInjectable(dependencies[key], ancestors));
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
+ });
329
343
  ancestors.splice(ancestors.indexOf(ctor), 1);
330
344
  return new ctor(...args);
331
345
  }
@@ -387,4 +401,4 @@ class OptionsService {
387
401
  return options;
388
402
  }
389
403
  }
390
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1jb2xsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NlcnZpY2UtY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFxR2EsUUFBQSxxQkFBcUIsR0FBRyxhQUFhLENBQXdCLHVCQUF1QixDQUFDLENBQUM7QUFDdEYsUUFBQSxlQUFlLEdBQUcsYUFBYSxDQUFrQixpQkFBaUIsQ0FBQyxDQUFDO0FBQ3BFLFFBQUEsa0JBQWtCLEdBQUcsYUFBYSxDQUFxQixvQkFBb0IsQ0FBQyxDQUFDO0FBRTFGLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDO0FBQ3RDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQztBQVN4QixnRkFBZ0Y7QUFDaEYsU0FBZ0IsTUFBTSxDQUFDLElBQVM7SUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBc0IsQ0FBQztBQUN0QyxDQUFDO0FBRkQsd0JBRUM7QUFFRCxtRkFBbUY7QUFDbkYsU0FBZ0IsU0FBUyxDQUFDLElBQVM7SUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyw4QkFBeUIsQ0FBQztBQUN6QyxDQUFDO0FBRkQsOEJBRUM7QUFFRCxtRkFBbUY7QUFDbkYsU0FBZ0IsU0FBUyxDQUFDLElBQVM7SUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyw4QkFBeUIsQ0FBQztBQUN6QyxDQUFDO0FBRkQsOEJBRUM7QUFJRCxTQUFnQixnQkFBZ0IsQ0FBSSxZQUE0QztJQUM1RSxNQUFNLE9BQU8sR0FBRyxPQUFPLFlBQVksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUM7SUFDeEYsTUFBTSxVQUFVLEdBQVEsVUFBVSxNQUFXLEVBQUUsV0FBbUIsRUFBRSxjQUFzQjtRQUN0RixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0RB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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.28",
4
+ "version": "0.5.32",
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": "e44c4305d5785b9136179ca7f915ae6b15677383"
25
+ "gitHead": "0b342661c68a6a2cb3eed6fa2929c7bbfe902cdd"
26
26
  }