@loopback/context 1.11.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/inject.js CHANGED
@@ -5,6 +5,7 @@
5
5
  // License text available at https://opensource.org/licenses/MIT
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  const metadata_1 = require("@loopback/metadata");
8
+ const binding_1 = require("./binding");
8
9
  const binding_filter_1 = require("./binding-filter");
9
10
  const context_view_1 = require("./context-view");
10
11
  const resolution_session_1 = require("./resolution-session");
@@ -139,10 +140,39 @@ var Getter;
139
140
  metadata = Object.assign({ decorator: '@inject.setter' }, metadata);
140
141
  return inject(bindingKey, metadata, resolveAsSetter);
141
142
  };
143
+ /**
144
+ * Inject the binding object for the given key. This is useful if a binding
145
+ * needs to be set up beyond just a constant value allowed by
146
+ * `@inject.setter`. The injected binding is found or created based on the
147
+ * `metadata.bindingCreation` option. See `BindingCreationPolicy` for more
148
+ * details.
149
+ *
150
+ * For example:
151
+ *
152
+ * ```ts
153
+ * class MyAuthAction {
154
+ * @inject.binding('current-user', {
155
+ * bindingCreation: BindingCreationPolicy.ALWAYS_CREATE,
156
+ * })
157
+ * private userBinding: Binding<UserProfile>;
158
+ *
159
+ * async authenticate() {
160
+ * this.userBinding.toDynamicValue(() => {...});
161
+ * }
162
+ * }
163
+ * ```
164
+ *
165
+ * @param bindingKey Binding key
166
+ * @param metadata Metadata for the injection
167
+ */
168
+ inject.binding = function injectBinding(bindingKey, metadata) {
169
+ metadata = Object.assign({ decorator: '@inject.binding' }, metadata);
170
+ return inject(bindingKey, metadata, resolveAsBinding);
171
+ };
142
172
  /**
143
173
  * Inject an array of values by a tag pattern string or regexp
144
174
  *
145
- * @example
175
+ * For example,
146
176
  * ```ts
147
177
  * class AuthenticationManager {
148
178
  * constructor(
@@ -187,41 +217,73 @@ var Getter;
187
217
  return inject('', { decorator: '@inject.context' }, ctx => ctx);
188
218
  };
189
219
  })(inject = exports.inject || (exports.inject = {}));
220
+ /**
221
+ * Assert the target type inspected from TypeScript for injection to be the
222
+ * expected type. If the types don't match, an error is thrown.
223
+ * @param injection Injection information
224
+ * @param expectedType Expected type
225
+ * @param expectedTypeName Name of the expected type to be used in the error
226
+ * @returns The name of the target
227
+ */
228
+ function assertTargetType(injection, expectedType, expectedTypeName) {
229
+ const targetName = resolution_session_1.ResolutionSession.describeInjection(injection).targetName;
230
+ const targetType = inspectTargetType(injection);
231
+ if (targetType && targetType !== expectedType) {
232
+ expectedTypeName = expectedTypeName || expectedType.name;
233
+ throw new Error(`The type of ${targetName} (${targetType.name}) is not ${expectedTypeName}`);
234
+ }
235
+ return targetName;
236
+ }
237
+ exports.assertTargetType = assertTargetType;
238
+ /**
239
+ * Resolver for `@inject.getter`
240
+ * @param ctx
241
+ * @param injection
242
+ * @param session
243
+ */
190
244
  function resolveAsGetter(ctx, injection, session) {
191
- assertTargetIsGetter(injection);
245
+ assertTargetType(injection, Function, 'Getter function');
192
246
  const bindingSelector = injection.bindingSelector;
193
247
  // We need to clone the session for the getter as it will be resolved later
194
- session = resolution_session_1.ResolutionSession.fork(session);
248
+ const forkedSession = resolution_session_1.ResolutionSession.fork(session);
195
249
  return function getter() {
196
250
  return ctx.get(bindingSelector, {
197
- session,
251
+ session: forkedSession,
198
252
  optional: injection.metadata.optional,
199
253
  });
200
254
  };
201
255
  }
202
- function assertTargetIsGetter(injection) {
203
- const targetType = inspectTargetType(injection);
204
- if (targetType && targetType !== Function) {
205
- const targetName = resolution_session_1.ResolutionSession.describeInjection(injection)
206
- .targetName;
207
- throw new Error(`The type of ${targetName} (${targetType.name}) is not a Getter function`);
208
- }
209
- }
256
+ /**
257
+ * Resolver for `@inject.setter`
258
+ * @param ctx
259
+ * @param injection
260
+ */
210
261
  function resolveAsSetter(ctx, injection) {
211
- const targetType = inspectTargetType(injection);
212
- const targetName = resolution_session_1.ResolutionSession.describeInjection(injection).targetName;
213
- if (targetType && targetType !== Function) {
214
- throw new Error(`The type of ${targetName} (${targetType.name}) is not a Setter function`);
215
- }
262
+ const targetName = assertTargetType(injection, Function, 'Setter function');
216
263
  const bindingSelector = injection.bindingSelector;
217
264
  if (!binding_filter_1.isBindingAddress(bindingSelector)) {
218
- throw new Error(`@inject.setter for (${targetType.name}) does not allow BindingFilter`);
265
+ throw new Error(`@inject.setter (${targetName}) does not allow BindingFilter.`);
219
266
  }
220
267
  // No resolution session should be propagated into the setter
221
268
  return function setter(value) {
222
- ctx.bind(bindingSelector).to(value);
269
+ const binding = findOrCreateBindingForInjection(ctx, injection);
270
+ binding.to(value);
223
271
  };
224
272
  }
273
+ function resolveAsBinding(ctx, injection) {
274
+ const targetName = assertTargetType(injection, binding_1.Binding);
275
+ const bindingSelector = injection.bindingSelector;
276
+ if (!binding_filter_1.isBindingAddress(bindingSelector)) {
277
+ throw new Error(`@inject.binding (${targetName}) does not allow BindingFilter.`);
278
+ }
279
+ return findOrCreateBindingForInjection(ctx, injection);
280
+ }
281
+ function findOrCreateBindingForInjection(ctx, injection) {
282
+ const bindingCreation = injection.metadata &&
283
+ injection.metadata.bindingCreation;
284
+ const binding = ctx.findOrCreateBinding(injection.bindingSelector, bindingCreation);
285
+ return binding;
286
+ }
225
287
  /**
226
288
  * Return an array of injection objects for parameters
227
289
  * @param target The target class for constructor or static methods,
@@ -248,8 +310,9 @@ function describeInjectedArguments(target, method) {
248
310
  }
249
311
  exports.describeInjectedArguments = describeInjectedArguments;
250
312
  /**
251
- * Inspect the target type
252
- * @param injection
313
+ * Inspect the target type for the injection to find out the corresponding
314
+ * JavaScript type
315
+ * @param injection Injection information
253
316
  */
254
317
  function inspectTargetType(injection) {
255
318
  let type = metadata_1.MetadataInspector.getDesignTypeForProperty(injection.target, injection.member);
@@ -268,19 +331,11 @@ function inspectTargetType(injection) {
268
331
  * @param session Resolution session
269
332
  */
270
333
  function resolveValuesByFilter(ctx, injection, session) {
271
- assertTargetIsArray(injection);
334
+ assertTargetType(injection, Array);
272
335
  const bindingFilter = injection.bindingSelector;
273
336
  const view = new context_view_1.ContextView(ctx, bindingFilter);
274
337
  return view.resolve(session);
275
338
  }
276
- function assertTargetIsArray(injection) {
277
- const targetType = inspectTargetType(injection);
278
- if (targetType !== Array) {
279
- const targetName = resolution_session_1.ResolutionSession.describeInjection(injection)
280
- .targetName;
281
- throw new Error(`The type of ${targetName} (${targetType.name}) is not Array`);
282
- }
283
- }
284
339
  /**
285
340
  * Resolve to a getter function that returns an array of bound values matching
286
341
  * the filter function for `@inject.getter`.
@@ -290,7 +345,7 @@ function assertTargetIsArray(injection) {
290
345
  * @param session Resolution session
291
346
  */
292
347
  function resolveAsGetterByFilter(ctx, injection, session) {
293
- assertTargetIsGetter(injection);
348
+ assertTargetType(injection, Function, 'Getter function');
294
349
  const bindingFilter = injection.bindingSelector;
295
350
  return context_view_1.createViewGetter(ctx, bindingFilter, session);
296
351
  }
@@ -299,15 +354,9 @@ function resolveAsGetterByFilter(ctx, injection, session) {
299
354
  * for `@inject.view`
300
355
  * @param ctx Context object
301
356
  * @param injection Injection information
302
- * @param session Resolution session
303
357
  */
304
- function resolveAsContextView(ctx, injection, session) {
305
- const targetType = inspectTargetType(injection);
306
- if (targetType && targetType !== context_view_1.ContextView) {
307
- const targetName = resolution_session_1.ResolutionSession.describeInjection(injection)
308
- .targetName;
309
- throw new Error(`The type of ${targetName} (${targetType.name}) is not ContextView`);
310
- }
358
+ function resolveAsContextView(ctx, injection) {
359
+ assertTargetType(injection, context_view_1.ContextView);
311
360
  const bindingFilter = injection.bindingSelector;
312
361
  const view = new context_view_1.ContextView(ctx, bindingFilter);
313
362
  view.open();
@@ -1 +1 @@
1
- {"version":3,"file":"inject.js","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inject.js","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":"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"}
@@ -71,10 +71,14 @@ export declare class ResolutionSession {
71
71
  * @param injection Injection object
72
72
  */
73
73
  static describeInjection(injection?: Readonly<Injection>): {
74
+ targetName?: undefined;
75
+ bindingSelector?: undefined;
76
+ metadata?: undefined;
77
+ } | {
74
78
  targetName: string;
75
79
  bindingSelector: import("./binding-filter").BindingSelector<any>;
76
80
  metadata: Object;
77
- } | undefined;
81
+ };
78
82
  /**
79
83
  * Push the injection onto the session
80
84
  * @param injection Injection The current injection
@@ -95,7 +95,7 @@ class ResolutionSession {
95
95
  static describeInjection(injection) {
96
96
  /* istanbul ignore if */
97
97
  if (injection == null)
98
- return undefined;
98
+ return {};
99
99
  const name = getTargetName(injection.target, injection.member, injection.methodDescriptorOrParameterIndex);
100
100
  return {
101
101
  targetName: name,
@@ -1 +1 @@
1
- {"version":3,"file":"resolution-session.js","sourceRoot":"","sources":["../src/resolution-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolution-session.js","sourceRoot":"","sources":["../src/resolution-session.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,iCAAiC;AACjC,+CAA+C;AAC/C,gEAAgE;;AAEhE,iDAAoD;AACpD,qCAAqC;AAGrC,mDAA2E;AAE3E,MAAM,YAAY,GAAG,WAAW,CAAC,mCAAmC,CAAC,CAAC;AACtE,MAAM,aAAa,GAAG,2BAAgB,CAAC,aAAa,CAAC;AA8BrD;;;GAGG;AACH,SAAS,SAAS,CAChB,OAAsC;IAEtC,OAAO,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAClB,OAAsC;IAEtC,OAAO,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAa,iBAAiB;IAA9B;QACE;;;WAGG;QACM,UAAK,GAAwB,EAAE,CAAC;IA4P3C,CAAC;IA1PC;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,OAA2B;QACrC,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,YAAY,CACzB,OAA0B,EAC1B,OAA2B;QAE3B,OAAO,GAAG,OAAO,IAAI,IAAI,iBAAiB,EAAE,CAAC;QAC7C,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC7B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CACnB,MAAwB,EACxB,OAA0B,EAC1B,OAA2B;QAE3B,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3E,OAAO,8BAAc,CACnB,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAC/B,GAAG,EAAE,CAAC,iBAAiB,CAAC,UAAU,EAAE,CACrC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,cAAc,CAC3B,SAA8B,EAC9B,OAA2B;QAE3B,OAAO,GAAG,OAAO,IAAI,IAAI,iBAAiB,EAAE,CAAC;QAC7C,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACjC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CACrB,MAAwB,EACxB,SAA8B,EAC9B,OAA2B;QAE3B,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,cAAc,CACxD,SAAS,EACT,OAAO,CACR,CAAC;QACF,OAAO,8BAAc,CACnB,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAC/B,GAAG,EAAE,CAAC,iBAAiB,CAAC,YAAY,EAAE,CACvC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,SAA+B;QACtD,wBAAwB;QACxB,IAAI,SAAS,IAAI,IAAI;YAAE,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,aAAa,CACxB,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,gCAAgC,CAC3C,CAAC;QACF,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,eAAe,EAAE,SAAS,CAAC,eAAe;YAC1C,mEAAmE;YACnE,QAAQ,EAAE,SAAS,CAAC,QAAkB;SACvC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,aAAa,CAAC,SAA8B;QAC1C,wBAAwB;QACxB,IAAI,YAAY,CAAC,OAAO,EAAE;YACxB,YAAY,CACV,kBAAkB,EAClB,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAC/C,CAAC;SACH;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAC,CAAC,CAAC;QACvD,wBAAwB;QACxB,IAAI,YAAY,CAAC,OAAO,EAAE;YACxB,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;SAC5D;IACH,CAAC;IAED;;OAEG;IACH,YAAY;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;SACzD;QAED,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC;QAC5B,wBAAwB;QACxB,IAAI,YAAY,CAAC,OAAO,EAAE;YACxB,YAAY,CACV,iBAAiB,EACjB,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAC/C,CAAC;YACF,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,SAAS,CAAC,CAAC;SACzE;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,IAAI,gBAAgB;QAClB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,WAAW,CAAC,OAAO,CAAC;gBAAE,OAAO,OAAO,CAAC,KAAK,CAAC;SAChD;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,IAAI,cAAc;QAChB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,SAAS,CAAC,OAAO,CAAC;gBAAE,OAAO,OAAO,CAAC,KAAK,CAAC;SAC9C;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,OAA0B;QACpC,wBAAwB;QACxB,IAAI,YAAY,CAAC,OAAO,EAAE;YACxB,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;SAClD;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,EAAE;YAC7D,MAAM,GAAG,GACP,gCAAgC;gBAChC,GAAG,IAAI,CAAC,iBAAiB,EAAE,QAAQ,OAAO,CAAC,GAAG,EAAE,CAAC;YACnD,YAAY,CAAC,GAAG,CAAC,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;SACtB;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAC,CAAC,CAAC;QACnD,wBAAwB;QACxB,IAAI,YAAY,CAAC,OAAO,EAAE;YACxB,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;SAC5D;IACH,CAAC;IAED;;OAEG;IACH,UAAU;QACR,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;SACtD;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC;QAC1B,wBAAwB;QACxB,IAAI,YAAY,CAAC,OAAO,EAAE;YACxB,YAAY,CAAC,eAAe,EAAE,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3D,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,SAAS,CAAC,CAAC;SACzE;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,cAAc;aACvB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC;aAC5D,IAAI,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;IAEO,MAAM,CAAC,QAAQ,CAAC,CAAoB;QAC1C,QAAQ,CAAC,CAAC,IAAI,EAAE;YACd,KAAK,WAAW;gBACd,OAAO,GAAG,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAE,CAAC,UAAU,CAAC;YACxE,KAAK,SAAS;gBACZ,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;SACtB;IACH,CAAC;IAED;;;;OAIG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;CACF;AAjQD,8CAiQC;AAwBD;;;GAGG;AACH,SAAgB,mBAAmB,CACjC,gBAA6C;IAE7C,0BAA0B;IAC1B,IAAI,gBAAgB,YAAY,iBAAiB,EAAE;QACjD,OAAO,EAAC,OAAO,EAAE,gBAAgB,EAAC,CAAC;KACpC;IACD,OAAO,gBAAgB,IAAI,EAAE,CAAC;AAChC,CAAC;AARD,kDAQC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loopback/context",
3
- "version": "1.11.0",
3
+ "version": "1.12.0",
4
4
  "description": "LoopBack's container for Inversion of Control",
5
5
  "engines": {
6
6
  "node": ">=8.9"
@@ -19,17 +19,17 @@
19
19
  "copyright.owner": "IBM Corp.",
20
20
  "license": "MIT",
21
21
  "dependencies": {
22
- "@loopback/metadata": "^1.0.13",
22
+ "@loopback/metadata": "^1.1.0",
23
23
  "debug": "^4.0.1",
24
24
  "p-event": "^4.1.0",
25
25
  "uuid": "^3.2.1"
26
26
  },
27
27
  "devDependencies": {
28
- "@loopback/build": "^1.4.3",
29
- "@loopback/testlab": "^1.2.4",
28
+ "@loopback/build": "^1.5.0",
29
+ "@loopback/testlab": "^1.2.5",
30
30
  "@loopback/tslint-config": "^2.0.4",
31
31
  "@types/bluebird": "^3.5.20",
32
- "@types/debug": "^4.1.0",
32
+ "@types/debug": "^4.1.4",
33
33
  "@types/node": "^10.11.2",
34
34
  "@types/uuid": "^3.4.3",
35
35
  "bluebird": "^3.5.4"
@@ -55,5 +55,5 @@
55
55
  "type": "git",
56
56
  "url": "https://github.com/strongloop/loopback-next.git"
57
57
  },
58
- "gitHead": "0074ff048d4037399bde085973a9f554344522fd"
58
+ "gitHead": "fe8ef4641a5d7f200a8744007e9d50d3659353ef"
59
59
  }
@@ -9,9 +9,37 @@ import {BindingAddress} from './binding-key';
9
9
  /**
10
10
  * A function that filters bindings. It returns `true` to select a given
11
11
  * binding.
12
+ *
13
+ * TODO(semver-major): We might change this type in the future to either remove
14
+ * the `<ValueType>` or make it as type guard by asserting the matched binding
15
+ * to be typed with `<ValueType>`.
16
+ *
17
+ * **NOTE**: Originally, we allow filters to be tied with a single value type.
18
+ * This actually does not make much sense - the filter function is typically
19
+ * invoked on all bindings to find those ones matching the given criteria.
20
+ * Filters must be prepared to handle bindings of any value type. We learned
21
+ * about this problem after enabling TypeScript's `strictFunctionTypes` check,
22
+ * but decided to preserve `ValueType` argument for backwards compatibility.
23
+ * The `<ValueType>` represents the value type for matched bindings but it's
24
+ * not used for checking.
25
+ *
26
+ * Ideally, `BindingFilter` should be declared as a type guard as follows:
27
+ * ```ts
28
+ * export type BindingFilterGuard<ValueType = unknown> = (
29
+ * binding: Readonly<Binding<unknown>>,
30
+ * ) => binding is Readonly<Binding<ValueType>>;
31
+ * ```
32
+ *
33
+ * But TypeScript treats the following types as incompatible and does not accept
34
+ * type 1 for type 2.
35
+ *
36
+ * 1. `(binding: Readonly<Binding<unknown>>) => boolean`
37
+ * 2. `(binding: Readonly<Binding<unknown>>) => binding is Readonly<Binding<ValueType>>`
38
+ *
12
39
  */
40
+ // tslint:disable-next-line:no-unused
13
41
  export type BindingFilter<ValueType = unknown> = (
14
- binding: Readonly<Binding<ValueType>>,
42
+ binding: Readonly<Binding<unknown>>,
15
43
  ) => boolean;
16
44
 
17
45
  /**
package/src/binding.ts CHANGED
@@ -537,8 +537,8 @@ export class Binding<T = BoundValue> {
537
537
  }
538
538
 
539
539
  /**
540
- * Apply a template function to set up the binding with scope, tags, and
541
- * other attributes as a group.
540
+ * Apply one or more template functions to set up the binding with scope,
541
+ * tags, and other attributes as a group.
542
542
  *
543
543
  * For example,
544
544
  * ```ts
@@ -548,10 +548,12 @@ export class Binding<T = BoundValue> {
548
548
  * const serverBinding = new Binding<RestServer>('servers.RestServer1');
549
549
  * serverBinding.apply(serverTemplate);
550
550
  * ```
551
- * @param templateFn A function to configure the binding
551
+ * @param templateFns One or more functions to configure the binding
552
552
  */
553
- apply(templateFn: BindingTemplate<T>): this {
554
- templateFn(this);
553
+ apply(...templateFns: BindingTemplate<T>[]): this {
554
+ for (const fn of templateFns) {
555
+ fn(this);
556
+ }
555
557
  return this;
556
558
  }
557
559
 
@@ -42,7 +42,7 @@ export class ContextView<T = unknown> extends EventEmitter
42
42
 
43
43
  constructor(
44
44
  protected readonly context: Context,
45
- public readonly filter: BindingFilter<T>,
45
+ public readonly filter: BindingFilter,
46
46
  ) {
47
47
  super();
48
48
  }
@@ -85,10 +85,11 @@ export class ContextView<T = unknown> extends EventEmitter
85
85
  /**
86
86
  * Find matching bindings and refresh the cache
87
87
  */
88
- protected findBindings() {
88
+ protected findBindings(): Readonly<Binding<T>>[] {
89
89
  debug('Finding matching bindings');
90
- this._cachedBindings = this.context.find(this.filter);
91
- return this._cachedBindings;
90
+ const found = this.context.find(this.filter);
91
+ this._cachedBindings = found;
92
+ return found;
92
93
  }
93
94
 
94
95
  /**
@@ -161,10 +162,10 @@ export class ContextView<T = unknown> extends EventEmitter
161
162
  */
162
163
  export function createViewGetter<T = unknown>(
163
164
  ctx: Context,
164
- bindingFilter: BindingFilter<T>,
165
+ bindingFilter: BindingFilter,
165
166
  session?: ResolutionSession,
166
167
  ): Getter<T[]> {
167
- const view = new ContextView(ctx, bindingFilter);
168
+ const view = new ContextView<T>(ctx, bindingFilter);
168
169
  view.open();
169
170
  return view.asGetter(session);
170
171
  }
package/src/context.ts CHANGED
@@ -38,7 +38,11 @@ if (!Symbol.asyncIterator) {
38
38
  // tslint:disable-next-line:no-any
39
39
  (Symbol as any).asyncIterator = Symbol.for('Symbol.asyncIterator');
40
40
  }
41
- // This import must happen after the polyfill
41
+ /**
42
+ * WARNING: This following import must happen after the polyfill. The
43
+ * `auto-import` by an IDE such as VSCode may move the import before the
44
+ * polyfill. It must be then fixed manually.
45
+ */
42
46
  import {iterator, multiple} from 'p-event';
43
47
 
44
48
  const debug = debugFactory('loopback:context');
@@ -518,7 +522,7 @@ export class Context extends EventEmitter {
518
522
  find<ValueType = BoundValue>(
519
523
  pattern?: string | RegExp | BindingFilter,
520
524
  ): Readonly<Binding<ValueType>>[] {
521
- const bindings: Readonly<Binding>[] = [];
525
+ const bindings: Readonly<Binding<ValueType>>[] = [];
522
526
  const filter = filterByKey(pattern);
523
527
 
524
528
  for (const b of this.registry.values()) {
@@ -751,6 +755,30 @@ export class Context extends EventEmitter {
751
755
  );
752
756
  }
753
757
 
758
+ /**
759
+ * Find or create a binding for the given key
760
+ * @param key Binding address
761
+ * @param policy Binding creation policy
762
+ */
763
+ findOrCreateBinding<T>(
764
+ key: BindingAddress<T>,
765
+ policy?: BindingCreationPolicy,
766
+ ) {
767
+ let binding: Binding<T>;
768
+ if (policy === BindingCreationPolicy.ALWAYS_CREATE) {
769
+ binding = this.bind(key);
770
+ } else if (policy === BindingCreationPolicy.NEVER_CREATE) {
771
+ binding = this.getBinding(key);
772
+ } else if (this.isBound(key)) {
773
+ // CREATE_IF_NOT_BOUND - the key is bound
774
+ binding = this.getBinding(key);
775
+ } else {
776
+ // CREATE_IF_NOT_BOUND - the key is not bound
777
+ binding = this.bind(key);
778
+ }
779
+ return binding;
780
+ }
781
+
754
782
  /**
755
783
  * Get the value bound to the given key.
756
784
  *
@@ -833,3 +861,23 @@ class ContextSubscription implements Subscription {
833
861
  return this._closed;
834
862
  }
835
863
  }
864
+
865
+ /**
866
+ * Policy to control if a binding should be created for the context
867
+ */
868
+ export enum BindingCreationPolicy {
869
+ /**
870
+ * Always create a binding with the key for the context
871
+ */
872
+ ALWAYS_CREATE = 'Always',
873
+ /**
874
+ * Never create a binding for the context. If the key is not bound in the
875
+ * context, throw an error.
876
+ */
877
+ NEVER_CREATE = 'Never',
878
+ /**
879
+ * Create a binding if the key is not bound in the context. Otherwise, return
880
+ * the existing binding.
881
+ */
882
+ CREATE_IF_NOT_BOUND = 'IfNotBound',
883
+ }