@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/CHANGELOG.md +13 -0
- package/dist/binding-filter.d.ts +28 -1
- package/dist/binding-filter.js.map +1 -1
- package/dist/binding.d.ts +4 -4
- package/dist/binding.js +7 -5
- package/dist/binding.js.map +1 -1
- package/dist/context-view.d.ts +3 -3
- package/dist/context-view.js +3 -2
- package/dist/context-view.js.map +1 -1
- package/dist/context.d.ts +25 -0
- package/dist/context.js +48 -1
- package/dist/context.js.map +1 -1
- package/dist/inject.d.ts +59 -5
- package/dist/inject.js +88 -39
- package/dist/inject.js.map +1 -1
- package/dist/resolution-session.d.ts +5 -1
- package/dist/resolution-session.js +1 -1
- package/dist/resolution-session.js.map +1 -1
- package/package.json +6 -6
- package/src/binding-filter.ts +29 -1
- package/src/binding.ts +7 -5
- package/src/context-view.ts +7 -6
- package/src/context.ts +50 -2
- package/src/inject.ts +137 -60
- package/src/resolution-session.ts +1 -1
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
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
305
|
-
|
|
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();
|
package/dist/inject.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,iCAAiC;AACjC,+CAA+C;AAC/C,gEAAgE;;AAEhE,iDAQ4B;
|
|
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
|
-
}
|
|
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
|
|
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":";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,
|
|
1
|
+
{"version":3,"file":"resolution-session.js","sourceRoot":"","sources":["../src/resolution-session.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loopback/context",
|
|
3
|
-
"version": "1.
|
|
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
|
|
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.
|
|
29
|
-
"@loopback/testlab": "^1.2.
|
|
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.
|
|
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": "
|
|
58
|
+
"gitHead": "fe8ef4641a5d7f200a8744007e9d50d3659353ef"
|
|
59
59
|
}
|
package/src/binding-filter.ts
CHANGED
|
@@ -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<
|
|
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
|
|
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
|
|
551
|
+
* @param templateFns One or more functions to configure the binding
|
|
552
552
|
*/
|
|
553
|
-
apply(
|
|
554
|
-
|
|
553
|
+
apply(...templateFns: BindingTemplate<T>[]): this {
|
|
554
|
+
for (const fn of templateFns) {
|
|
555
|
+
fn(this);
|
|
556
|
+
}
|
|
555
557
|
return this;
|
|
556
558
|
}
|
|
557
559
|
|
package/src/context-view.ts
CHANGED
|
@@ -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
|
|
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
|
-
|
|
91
|
-
|
|
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
|
|
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
|
-
|
|
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
|
+
}
|