@loopback/context 1.23.5 → 2.0.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.
Files changed (80) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/dist/binding-config.js +1 -1
  3. package/dist/binding-config.js.map +1 -1
  4. package/dist/binding-filter.d.ts +19 -1
  5. package/dist/binding-filter.js +40 -7
  6. package/dist/binding-filter.js.map +1 -1
  7. package/dist/binding-inspector.js +12 -11
  8. package/dist/binding-inspector.js.map +1 -1
  9. package/dist/binding-sorter.js +2 -2
  10. package/dist/binding-sorter.js.map +1 -1
  11. package/dist/binding.d.ts +42 -4
  12. package/dist/binding.js +40 -10
  13. package/dist/binding.js.map +1 -1
  14. package/dist/context-event.d.ts +23 -0
  15. package/dist/context-event.js +7 -0
  16. package/dist/context-event.js.map +1 -0
  17. package/dist/context-observer.d.ts +1 -36
  18. package/dist/context-subscription.d.ts +147 -0
  19. package/dist/context-subscription.js +336 -0
  20. package/dist/context-subscription.js.map +1 -0
  21. package/dist/context-tag-indexer.d.ts +42 -0
  22. package/dist/context-tag-indexer.js +134 -0
  23. package/dist/context-tag-indexer.js.map +1 -0
  24. package/dist/context-view.d.ts +2 -1
  25. package/dist/context-view.js +5 -2
  26. package/dist/context-view.js.map +1 -1
  27. package/dist/context.d.ts +35 -66
  28. package/dist/context.js +78 -250
  29. package/dist/context.js.map +1 -1
  30. package/dist/index.d.ts +5 -3
  31. package/dist/index.js +4 -3
  32. package/dist/index.js.map +1 -1
  33. package/dist/inject-config.js +3 -3
  34. package/dist/inject-config.js.map +1 -1
  35. package/dist/inject.d.ts +2 -2
  36. package/dist/inject.js +18 -11
  37. package/dist/inject.js.map +1 -1
  38. package/dist/interception-proxy.d.ts +15 -3
  39. package/dist/interception-proxy.js +20 -4
  40. package/dist/interception-proxy.js.map +1 -1
  41. package/dist/interceptor-chain.js +5 -2
  42. package/dist/interceptor-chain.js.map +1 -1
  43. package/dist/interceptor.d.ts +6 -0
  44. package/dist/interceptor.js +38 -12
  45. package/dist/interceptor.js.map +1 -1
  46. package/dist/invocation.d.ts +20 -2
  47. package/dist/invocation.js +14 -12
  48. package/dist/invocation.js.map +1 -1
  49. package/dist/keys.d.ts +6 -0
  50. package/dist/keys.js +6 -0
  51. package/dist/keys.js.map +1 -1
  52. package/dist/resolution-session.d.ts +1 -0
  53. package/dist/resolution-session.js +13 -6
  54. package/dist/resolution-session.js.map +1 -1
  55. package/dist/resolver.js +13 -8
  56. package/dist/resolver.js.map +1 -1
  57. package/dist/value-promise.d.ts +1 -3
  58. package/package.json +9 -9
  59. package/src/binding-config.ts +1 -1
  60. package/src/binding-filter.ts +61 -9
  61. package/src/binding-inspector.ts +6 -8
  62. package/src/binding-sorter.ts +2 -2
  63. package/src/binding.ts +73 -9
  64. package/src/context-event.ts +30 -0
  65. package/src/context-observer.ts +1 -38
  66. package/src/context-subscription.ts +403 -0
  67. package/src/context-tag-indexer.ts +149 -0
  68. package/src/context-view.ts +3 -6
  69. package/src/context.ts +94 -293
  70. package/src/index.ts +5 -3
  71. package/src/inject-config.ts +3 -3
  72. package/src/inject.ts +19 -10
  73. package/src/interception-proxy.ts +25 -3
  74. package/src/interceptor-chain.ts +1 -1
  75. package/src/interceptor.ts +34 -8
  76. package/src/invocation.ts +26 -7
  77. package/src/keys.ts +7 -0
  78. package/src/resolution-session.ts +9 -5
  79. package/src/resolver.ts +5 -5
  80. package/src/value-promise.ts +1 -1
@@ -3,11 +3,14 @@
3
3
  // Node module: @loopback/context
4
4
  // This file is licensed under the MIT License.
5
5
  // License text available at https://opensource.org/licenses/MIT
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
6
9
  Object.defineProperty(exports, "__esModule", { value: true });
7
10
  const metadata_1 = require("@loopback/metadata");
8
- const debugModule = require("debug");
11
+ const debug_1 = __importDefault(require("debug"));
9
12
  const value_promise_1 = require("./value-promise");
10
- const debugSession = debugModule('loopback:context:resolver:session');
13
+ const debugSession = debug_1.default('loopback:context:resolver:session');
11
14
  const getTargetName = metadata_1.DecoratorFactory.getTargetName;
12
15
  /**
13
16
  * Type guard for binding elements
@@ -54,7 +57,7 @@ class ResolutionSession {
54
57
  * @param session - The current resolution session
55
58
  */
56
59
  static enterBinding(binding, session) {
57
- session = session || new ResolutionSession();
60
+ session = (session !== null && session !== void 0 ? session : new ResolutionSession());
58
61
  session.pushBinding(binding);
59
62
  return session;
60
63
  }
@@ -74,7 +77,7 @@ class ResolutionSession {
74
77
  * @param session - The current resolution session
75
78
  */
76
79
  static enterInjection(injection, session) {
77
- session = session || new ResolutionSession();
80
+ session = (session !== null && session !== void 0 ? session : new ResolutionSession());
78
81
  session.pushInjection(injection);
79
82
  return session;
80
83
  }
@@ -182,6 +185,7 @@ class ResolutionSession {
182
185
  * Exit the resolution of a binding
183
186
  */
184
187
  popBinding() {
188
+ var _a;
185
189
  const top = this.stack.pop();
186
190
  if (!isBinding(top)) {
187
191
  throw new Error('The top element must be a binding');
@@ -189,7 +193,7 @@ class ResolutionSession {
189
193
  const binding = top.value;
190
194
  /* istanbul ignore if */
191
195
  if (debugSession.enabled) {
192
- debugSession('Exit binding:', binding && binding.toJSON());
196
+ debugSession('Exit binding:', (_a = binding) === null || _a === void 0 ? void 0 : _a.toJSON());
193
197
  debugSession('Resolution path:', this.getResolutionPath() || '<empty>');
194
198
  }
195
199
  return binding;
@@ -236,6 +240,9 @@ class ResolutionSession {
236
240
  getResolutionPath() {
237
241
  return this.stack.map(i => ResolutionSession.describe(i)).join(' --> ');
238
242
  }
243
+ toString() {
244
+ return this.getResolutionPath();
245
+ }
239
246
  }
240
247
  exports.ResolutionSession = ResolutionSession;
241
248
  /**
@@ -247,7 +254,7 @@ function asResolutionOptions(optionsOrSession) {
247
254
  if (optionsOrSession instanceof ResolutionSession) {
248
255
  return { session: optionsOrSession };
249
256
  }
250
- return optionsOrSession || {};
257
+ return (optionsOrSession !== null && optionsOrSession !== void 0 ? optionsOrSession : {});
251
258
  }
252
259
  exports.asResolutionOptions = asResolutionOptions;
253
260
  //# sourceMappingURL=resolution-session.js.map
@@ -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,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;AA+BD;;;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"}
1
+ {"version":3,"file":"resolution-session.js","sourceRoot":"","sources":["../src/resolution-session.ts"],"names":[],"mappings":"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"}
package/dist/resolver.js CHANGED
@@ -3,16 +3,19 @@
3
3
  // Node module: @loopback/context
4
4
  // This file is licensed under the MIT License.
5
5
  // License text available at https://opensource.org/licenses/MIT
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
6
9
  Object.defineProperty(exports, "__esModule", { value: true });
7
10
  const metadata_1 = require("@loopback/metadata");
8
- const assert = require("assert");
9
- const debugModule = require("debug");
11
+ const assert_1 = __importDefault(require("assert"));
12
+ const debug_1 = __importDefault(require("debug"));
10
13
  const binding_1 = require("./binding");
11
14
  const binding_filter_1 = require("./binding-filter");
12
15
  const inject_1 = require("./inject");
13
16
  const resolution_session_1 = require("./resolution-session");
14
17
  const value_promise_1 = require("./value-promise");
15
- const debug = debugModule('loopback:context:resolver');
18
+ const debug = debug_1.default('loopback:context:resolver');
16
19
  const getTargetName = metadata_1.DecoratorFactory.getTargetName;
17
20
  /**
18
21
  * Create an instance of a class which constructor has arguments
@@ -29,10 +32,11 @@ const getTargetName = metadata_1.DecoratorFactory.getTargetName;
29
32
  function instantiateClass(ctor, ctx, session,
30
33
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
34
  nonInjectedArgs) {
35
+ var _a;
32
36
  /* istanbul ignore if */
33
37
  if (debug.enabled) {
34
38
  debug('Instantiating %s', getTargetName(ctor));
35
- if (nonInjectedArgs && nonInjectedArgs.length) {
39
+ if ((_a = nonInjectedArgs) === null || _a === void 0 ? void 0 : _a.length) {
36
40
  debug('Non-injected arguments:', nonInjectedArgs);
37
41
  }
38
42
  }
@@ -61,7 +65,8 @@ exports.instantiateClass = instantiateClass;
61
65
  * injection is for method (excluding constructor) parameters.
62
66
  */
63
67
  function resolveContext(ctx, injection, session) {
64
- const currentBinding = session && session.currentBinding;
68
+ var _a;
69
+ const currentBinding = (_a = session) === null || _a === void 0 ? void 0 : _a.currentBinding;
65
70
  if (currentBinding == null ||
66
71
  currentBinding.scope !== binding_1.BindingScope.SINGLETON) {
67
72
  // No current binding or its scope is not `SINGLETON`
@@ -98,7 +103,7 @@ function resolve(ctx, injection, session) {
98
103
  }
99
104
  else {
100
105
  // Default to resolve the value from the context by binding key
101
- assert(binding_filter_1.isBindingAddress(injection.bindingSelector), 'The binding selector must be an address (string or BindingKey)');
106
+ assert_1.default(binding_filter_1.isBindingAddress(injection.bindingSelector), 'The binding selector must be an address (string or BindingKey)');
102
107
  const key = injection.bindingSelector;
103
108
  const options = Object.assign({ session: s }, injection.metadata);
104
109
  return ctx.getValueOrPromise(key, options);
@@ -131,14 +136,14 @@ nonInjectedArgs) {
131
136
  }
132
137
  const targetWithMethods = target;
133
138
  if (method) {
134
- assert(typeof targetWithMethods[method] === 'function', `Method ${method} not found`);
139
+ assert_1.default(typeof targetWithMethods[method] === 'function', `Method ${method} not found`);
135
140
  }
136
141
  // NOTE: the array may be sparse, i.e.
137
142
  // Object.keys(injectedArgs).length !== injectedArgs.length
138
143
  // Example value:
139
144
  // [ , 'key1', , 'key2']
140
145
  const injectedArgs = inject_1.describeInjectedArguments(target, method);
141
- const extraArgs = nonInjectedArgs || [];
146
+ const extraArgs = (nonInjectedArgs !== null && nonInjectedArgs !== void 0 ? nonInjectedArgs : []);
142
147
  let argLength = metadata_1.DecoratorFactory.getNumberOfParameters(target, method);
143
148
  // Please note `injectedArgs` contains `undefined` for non-injected args
144
149
  const numberOfInjected = injectedArgs.filter(i => i != null).length;
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
@@ -17,9 +17,7 @@ export declare type BoundValue = any;
17
17
  * provided by JavaScript runtime.
18
18
  */
19
19
  export declare type ValueOrPromise<T> = T | PromiseLike<T>;
20
- export declare type MapObject<T> = {
21
- [name: string]: T;
22
- };
20
+ export declare type MapObject<T> = Record<string, T>;
23
21
  /**
24
22
  * Check whether a value is a Promise-like instance.
25
23
  * Recognizes both native promises and third-party promise libraries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loopback/context",
3
- "version": "1.23.5",
3
+ "version": "2.0.0",
4
4
  "description": "LoopBack's container for Inversion of Control",
5
5
  "engines": {
6
6
  "node": ">=8.9"
@@ -18,20 +18,20 @@
18
18
  "copyright.owner": "IBM Corp.",
19
19
  "license": "MIT",
20
20
  "dependencies": {
21
- "@loopback/metadata": "^1.3.7",
21
+ "@loopback/metadata": "^1.4.0",
22
22
  "debug": "^4.1.1",
23
23
  "p-event": "^4.1.0",
24
- "uuid": "^3.3.3"
24
+ "uuid": "^3.4.0"
25
25
  },
26
26
  "devDependencies": {
27
- "@loopback/build": "^2.0.16",
28
- "@loopback/eslint-config": "^4.1.4",
29
- "@loopback/testlab": "^1.9.4",
27
+ "@loopback/build": "^3.1.0",
28
+ "@loopback/eslint-config": "^5.0.2",
29
+ "@loopback/testlab": "^1.10.2",
30
30
  "@types/bluebird": "^3.5.29",
31
31
  "@types/debug": "^4.1.5",
32
- "@types/node": "^10.17.5",
32
+ "@types/node": "^10.17.13",
33
33
  "@types/uuid": "^3.4.6",
34
- "bluebird": "^3.7.1"
34
+ "bluebird": "^3.7.2"
35
35
  },
36
36
  "keywords": [
37
37
  "LoopBack",
@@ -55,5 +55,5 @@
55
55
  "url": "https://github.com/strongloop/loopback-next.git",
56
56
  "directory": "packages/context"
57
57
  },
58
- "gitHead": "7f0ae6ec124c19357c3016cd11f9bc9c739dffcb"
58
+ "gitHead": "d08f135a0d1040edc61497739a8d86a866e4e29a"
59
59
  }
@@ -46,7 +46,7 @@ export class DefaultConfigurationResolver implements ConfigurationResolver {
46
46
  propertyPath?: string,
47
47
  resolutionOptions?: ResolutionOptions,
48
48
  ): ValueOrPromise<ConfigValueType | undefined> {
49
- propertyPath = propertyPath || '';
49
+ propertyPath = propertyPath ?? '';
50
50
  const configKey = configBindingKeyFor(key, propertyPath);
51
51
 
52
52
  const options: ResolutionOptions = Object.assign(
@@ -5,6 +5,7 @@
5
5
 
6
6
  import {Binding, BindingTag} from './binding';
7
7
  import {BindingAddress} from './binding-key';
8
+ import {MapObject} from './value-promise';
8
9
 
9
10
  /**
10
11
  * A function that filters bindings. It returns `true` to select a given
@@ -59,27 +60,78 @@ export function isBindingAddress(
59
60
  return typeof bindingSelector !== 'function';
60
61
  }
61
62
 
63
+ /**
64
+ * Binding filter function that holds a binding tag pattern. `Context.find()`
65
+ * uses the `bindingTagPattern` to optimize the matching of bindings by tag to
66
+ * avoid expensive check for all bindings.
67
+ */
68
+ export interface BindingTagFilter extends BindingFilter<unknown> {
69
+ /**
70
+ * A special property on the filter function to provide access to the binding
71
+ * tag pattern which can be utilized to optimize the matching of bindings by
72
+ * tag in a context.
73
+ */
74
+ bindingTagPattern: BindingTag | RegExp;
75
+ }
76
+
77
+ /**
78
+ * Type guard for BindingTagFilter
79
+ * @param filter - A BindingFilter function
80
+ */
81
+ export function isBindingTagFilter(
82
+ filter?: BindingFilter,
83
+ ): filter is BindingTagFilter {
84
+ if (filter == null || !('bindingTagPattern' in filter)) return false;
85
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
+ const tagPattern = (filter as any).bindingTagPattern;
87
+ return (
88
+ tagPattern instanceof RegExp ||
89
+ typeof tagPattern === 'string' ||
90
+ typeof tagPattern === 'object'
91
+ );
92
+ }
93
+
62
94
  /**
63
95
  * Create a binding filter for the tag pattern
64
96
  * @param tagPattern - Binding tag name, regexp, or object
65
97
  */
66
- export function filterByTag(tagPattern: BindingTag | RegExp): BindingFilter {
67
- if (typeof tagPattern === 'string' || tagPattern instanceof RegExp) {
68
- const regexp =
69
- typeof tagPattern === 'string'
70
- ? wildcardToRegExp(tagPattern)
71
- : tagPattern;
72
- return b => Array.from(b.tagNames).some(t => regexp!.test(t));
98
+ export function filterByTag(tagPattern: BindingTag | RegExp): BindingTagFilter {
99
+ let filter: BindingFilter;
100
+ let regex: RegExp | undefined = undefined;
101
+ if (tagPattern instanceof RegExp) {
102
+ // RegExp for tag names
103
+ regex = tagPattern;
104
+ }
105
+ if (
106
+ typeof tagPattern === 'string' &&
107
+ (tagPattern.includes('*') || tagPattern.includes('?'))
108
+ ) {
109
+ // Wildcard tag name
110
+ regex = wildcardToRegExp(tagPattern);
111
+ }
112
+
113
+ if (regex != null) {
114
+ // RegExp or wildcard match
115
+ filter = b => b.tagNames.some(t => regex!.test(t));
116
+ } else if (typeof tagPattern === 'string') {
117
+ // Plain tag string match
118
+ filter = b => b.tagNames.includes(tagPattern);
73
119
  } else {
74
- return b => {
120
+ // Match tag name/value pairs
121
+ const tagMap = tagPattern as MapObject<unknown>;
122
+ filter = b => {
75
123
  for (const t in tagPattern) {
76
124
  // One tag name/value does not match
77
- if (b.tagMap[t] !== tagPattern[t]) return false;
125
+ if (b.tagMap[t] !== tagMap[t]) return false;
78
126
  }
79
127
  // All tag name/value pairs match
80
128
  return true;
81
129
  };
82
130
  }
131
+ // Set up binding tag for the filter
132
+ const tagFilter = filter as BindingTagFilter;
133
+ tagFilter.bindingTagPattern = regex ?? tagPattern;
134
+ return tagFilter;
83
135
  }
84
136
 
85
137
  /**
@@ -4,7 +4,7 @@
4
4
  // License text available at https://opensource.org/licenses/MIT
5
5
 
6
6
  import {MetadataAccessor, MetadataInspector} from '@loopback/metadata';
7
- import * as debugFactory from 'debug';
7
+ import debugFactory from 'debug';
8
8
  import {Binding, BindingScope, BindingTag, BindingTemplate} from './binding';
9
9
  import {BindingAddress} from './binding-key';
10
10
  import {ContextTags} from './keys';
@@ -145,9 +145,7 @@ export function bindingTemplateFor<T = unknown>(
145
145
  ): BindingTemplate<T> {
146
146
  const spec = getBindingMetadata(cls);
147
147
  debug('class %s has binding metadata', cls.name, spec);
148
- const templateFunctions = (spec && spec.templates) || [
149
- asClassOrProvider(cls),
150
- ];
148
+ const templateFunctions = spec?.templates ?? [asClassOrProvider(cls)];
151
149
  return function applyBindingTemplatesFromMetadata(binding) {
152
150
  for (const t of templateFunctions) {
153
151
  binding.apply(t);
@@ -297,7 +295,7 @@ function buildBindingKey(
297
295
  if (key) return key;
298
296
 
299
297
  let namespace =
300
- options.namespace || bindingTemplate.tagMap[ContextTags.NAMESPACE];
298
+ options.namespace ?? bindingTemplate.tagMap[ContextTags.NAMESPACE];
301
299
  if (!namespace) {
302
300
  const namespaces = Object.assign(
303
301
  {},
@@ -305,17 +303,17 @@ function buildBindingKey(
305
303
  options.typeNamespaceMapping,
306
304
  );
307
305
  // Derive the key from type + name
308
- let type = options.type || bindingTemplate.tagMap[ContextTags.TYPE];
306
+ let type = options.type ?? bindingTemplate.tagMap[ContextTags.TYPE];
309
307
  if (!type) {
310
308
  type =
311
- bindingTemplate.tagNames.find(t => namespaces[t] != null) ||
309
+ bindingTemplate.tagNames.find(t => namespaces[t] != null) ??
312
310
  ContextTags.CLASS;
313
311
  }
314
312
  namespace = getNamespace(type, namespaces);
315
313
  }
316
314
 
317
315
  const name =
318
- options.name || bindingTemplate.tagMap[ContextTags.NAME] || cls.name;
316
+ options.name ?? (bindingTemplate.tagMap[ContextTags.NAME] || cls.name);
319
317
  key = `${namespace}.${name}`;
320
318
 
321
319
  return key;
@@ -85,8 +85,8 @@ export function compareByOrder(
85
85
  b: string | symbol | undefined | null,
86
86
  order: (string | symbol)[] = [],
87
87
  ) {
88
- a = a || '';
89
- b = b || '';
88
+ a = a ?? '';
89
+ b = b ?? '';
90
90
  const i1 = order.indexOf(a);
91
91
  const i2 = order.indexOf(b);
92
92
  if (i1 !== -1 || i2 !== -1) {
package/src/binding.ts CHANGED
@@ -3,7 +3,8 @@
3
3
  // This file is licensed under the MIT License.
4
4
  // License text available at https://opensource.org/licenses/MIT
5
5
 
6
- import * as debugFactory from 'debug';
6
+ import debugFactory from 'debug';
7
+ import {EventEmitter} from 'events';
7
8
  import {BindingAddress, BindingKey} from './binding-key';
8
9
  import {Context} from './context';
9
10
  import {createProxyWithInterceptors} from './interception-proxy';
@@ -139,6 +140,34 @@ export type BindingTag = TagMap | string;
139
140
  */
140
141
  export type BindingTemplate<T = unknown> = (binding: Binding<T>) => void;
141
142
 
143
+ /**
144
+ * Information for a binding event
145
+ */
146
+ export type BindingEvent = {
147
+ /**
148
+ * Event type
149
+ */
150
+ type: string;
151
+ /**
152
+ * Source binding that emits the event
153
+ */
154
+ binding: Readonly<Binding<unknown>>;
155
+ /**
156
+ * Operation that triggers the event
157
+ */
158
+ operation: string;
159
+ };
160
+
161
+ /**
162
+ * Event listeners for binding events
163
+ */
164
+ export type BindingEventListener = (
165
+ /**
166
+ * Binding event
167
+ */
168
+ event: BindingEvent,
169
+ ) => void;
170
+
142
171
  type ValueGetter<T> = (
143
172
  ctx: Context,
144
173
  options: ResolutionOptions,
@@ -148,7 +177,7 @@ type ValueGetter<T> = (
148
177
  * Binding represents an entry in the `Context`. Each binding has a key and a
149
178
  * corresponding value getter.
150
179
  */
151
- export class Binding<T = BoundValue> {
180
+ export class Binding<T = BoundValue> extends EventEmitter {
152
181
  /**
153
182
  * Key of the binding
154
183
  */
@@ -165,7 +194,7 @@ export class Binding<T = BoundValue> {
165
194
  */
166
195
  public get scope(): BindingScope {
167
196
  // Default to TRANSIENT if not set
168
- return this._scope || BindingScope.TRANSIENT;
197
+ return this._scope ?? BindingScope.TRANSIENT;
169
198
  }
170
199
 
171
200
  private _type?: BindingType;
@@ -180,15 +209,26 @@ export class Binding<T = BoundValue> {
180
209
  private _getValue: ValueGetter<T>;
181
210
 
182
211
  private _valueConstructor?: Constructor<T>;
212
+ private _providerConstructor?: Constructor<Provider<T>>;
213
+
183
214
  /**
184
- * For bindings bound via toClass, this property contains the constructor
185
- * function
215
+ * For bindings bound via `toClass()`, this property contains the constructor
216
+ * function of the class
186
217
  */
187
218
  public get valueConstructor(): Constructor<T> | undefined {
188
219
  return this._valueConstructor;
189
220
  }
190
221
 
222
+ /**
223
+ * For bindings bound via `toProvider()`, this property contains the
224
+ * constructor function of the provider class
225
+ */
226
+ public get providerConstructor(): Constructor<Provider<T>> | undefined {
227
+ return this._providerConstructor;
228
+ }
229
+
191
230
  constructor(key: BindingAddress<T>, public isLocked: boolean = false) {
231
+ super();
192
232
  BindingKey.validate(key);
193
233
  this.key = key.toString();
194
234
  }
@@ -314,6 +354,15 @@ export class Binding<T = BoundValue> {
314
354
  return this;
315
355
  }
316
356
 
357
+ /**
358
+ * Emit a `changed` event
359
+ * @param operation - Operation that makes changes
360
+ */
361
+ private emitChangedEvent(operation: string) {
362
+ const event: BindingEvent = {binding: this, operation, type: 'changed'};
363
+ this.emit('changed', event);
364
+ }
365
+
317
366
  /**
318
367
  * Tag the binding with names or name/value objects. A tag has a name and
319
368
  * an optional value. If not supplied, the tag name is used as the value.
@@ -352,6 +401,7 @@ export class Binding<T = BoundValue> {
352
401
  Object.assign(this.tagMap, t);
353
402
  }
354
403
  }
404
+ this.emitChangedEvent('tag');
355
405
  return this;
356
406
  }
357
407
 
@@ -369,6 +419,7 @@ export class Binding<T = BoundValue> {
369
419
  inScope(scope: BindingScope): this {
370
420
  if (this._scope !== scope) this._clearCache();
371
421
  this._scope = scope;
422
+ this.emitChangedEvent('scope');
372
423
  return this;
373
424
  }
374
425
 
@@ -399,6 +450,7 @@ export class Binding<T = BoundValue> {
399
450
  }
400
451
  return getValue(ctx, options);
401
452
  };
453
+ this.emitChangedEvent('value');
402
454
  }
403
455
 
404
456
  /**
@@ -494,6 +546,7 @@ export class Binding<T = BoundValue> {
494
546
  debug('Bind %s to provider %s', this.key, providerClass.name);
495
547
  }
496
548
  this._type = BindingType.PROVIDER;
549
+ this._providerConstructor = providerClass;
497
550
  this._setValueGetter((ctx, options) => {
498
551
  const providerOrPromise = instantiateClass<Provider<T>>(
499
552
  providerClass,
@@ -521,7 +574,11 @@ export class Binding<T = BoundValue> {
521
574
  this._setValueGetter((ctx, options) => {
522
575
  const instOrPromise = instantiateClass(ctor, ctx, options.session);
523
576
  if (!options.asProxyWithInterceptors) return instOrPromise;
524
- return createInterceptionProxyFromInstance(instOrPromise, ctx);
577
+ return createInterceptionProxyFromInstance(
578
+ instOrPromise,
579
+ ctx,
580
+ options.session,
581
+ );
525
582
  });
526
583
  this._valueConstructor = ctor;
527
584
  return this;
@@ -576,9 +633,8 @@ export class Binding<T = BoundValue> {
576
633
  /**
577
634
  * Convert to a plain JSON object
578
635
  */
579
- toJSON(): Object {
580
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
581
- const json: {[name: string]: any} = {
636
+ toJSON(): object {
637
+ const json: Record<string, unknown> = {
582
638
  key: this.key,
583
639
  scope: this.scope,
584
640
  tags: this.tagMap,
@@ -587,6 +643,12 @@ export class Binding<T = BoundValue> {
587
643
  if (this.type != null) {
588
644
  json.type = this.type;
589
645
  }
646
+ if (this._valueConstructor != null) {
647
+ json.valueConstructor = this._valueConstructor.name;
648
+ }
649
+ if (this._providerConstructor != null) {
650
+ json.providerConstructor = this._providerConstructor.name;
651
+ }
590
652
  return json;
591
653
  }
592
654
 
@@ -624,6 +686,7 @@ export class Binding<T = BoundValue> {
624
686
  function createInterceptionProxyFromInstance<T>(
625
687
  instOrPromise: ValueOrPromise<T>,
626
688
  context: Context,
689
+ session?: ResolutionSession,
627
690
  ) {
628
691
  return transformValueOrPromise(instOrPromise, inst => {
629
692
  if (typeof inst !== 'object') return inst;
@@ -631,6 +694,7 @@ function createInterceptionProxyFromInstance<T>(
631
694
  // Cast inst from `T` to `object`
632
695
  (inst as unknown) as object,
633
696
  context,
697
+ session,
634
698
  ) as unknown) as T;
635
699
  });
636
700
  }
@@ -0,0 +1,30 @@
1
+ // Copyright IBM Corp. 2020. All Rights Reserved.
2
+ // Node module: @loopback/context
3
+ // This file is licensed under the MIT License.
4
+ // License text available at https://opensource.org/licenses/MIT
5
+
6
+ import {Binding} from './binding';
7
+ import {Context} from './context';
8
+
9
+ /**
10
+ * Events emitted by a context
11
+ */
12
+ export type ContextEvent = {
13
+ /**
14
+ * Source context that emits the event
15
+ */
16
+ context: Context;
17
+ /**
18
+ * Binding that is being added/removed/updated
19
+ */
20
+ binding: Readonly<Binding<unknown>>;
21
+ /**
22
+ * Event type
23
+ */
24
+ type: string; // 'bind' or 'unbind'
25
+ };
26
+
27
+ /**
28
+ * Synchronous listener for context events
29
+ */
30
+ export type ContextEventListener = (event: ContextEvent) => void;