@loopback/context 4.0.0-alpha.8 → 4.1.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 (201) hide show
  1. package/LICENSE +25 -0
  2. package/README.md +116 -0
  3. package/dist/binding-config.d.ts +40 -0
  4. package/dist/binding-config.js +33 -0
  5. package/dist/binding-config.js.map +1 -0
  6. package/dist/binding-decorator.d.ts +45 -0
  7. package/dist/binding-decorator.js +118 -0
  8. package/dist/binding-decorator.js.map +1 -0
  9. package/dist/binding-filter.d.ts +108 -0
  10. package/dist/binding-filter.js +162 -0
  11. package/dist/binding-filter.js.map +1 -0
  12. package/dist/binding-inspector.d.ts +150 -0
  13. package/dist/binding-inspector.js +249 -0
  14. package/dist/binding-inspector.js.map +1 -0
  15. package/dist/binding-key.d.ts +66 -0
  16. package/dist/binding-key.js +121 -0
  17. package/dist/binding-key.js.map +1 -0
  18. package/dist/binding-sorter.d.ts +71 -0
  19. package/dist/binding-sorter.js +89 -0
  20. package/dist/binding-sorter.js.map +1 -0
  21. package/dist/binding.d.ts +577 -0
  22. package/dist/binding.js +788 -0
  23. package/dist/binding.js.map +1 -0
  24. package/dist/context-event.d.ts +23 -0
  25. package/dist/context-event.js +7 -0
  26. package/dist/context-event.js.map +1 -0
  27. package/dist/context-observer.d.ts +36 -0
  28. package/dist/context-observer.js +7 -0
  29. package/dist/context-observer.js.map +1 -0
  30. package/dist/context-subscription.d.ts +147 -0
  31. package/dist/context-subscription.js +317 -0
  32. package/dist/context-subscription.js.map +1 -0
  33. package/dist/context-tag-indexer.d.ts +42 -0
  34. package/dist/context-tag-indexer.js +135 -0
  35. package/dist/context-tag-indexer.js.map +1 -0
  36. package/dist/context-view.d.ts +209 -0
  37. package/dist/context-view.js +240 -0
  38. package/dist/context-view.js.map +1 -0
  39. package/dist/context.d.ts +513 -0
  40. package/dist/context.js +717 -0
  41. package/dist/context.js.map +1 -0
  42. package/dist/index.d.ts +52 -0
  43. package/dist/index.js +60 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/inject-config.d.ts +67 -0
  46. package/dist/inject-config.js +181 -0
  47. package/dist/inject-config.js.map +1 -0
  48. package/dist/inject.d.ts +250 -0
  49. package/dist/inject.js +535 -0
  50. package/dist/inject.js.map +1 -0
  51. package/dist/interception-proxy.d.ts +76 -0
  52. package/dist/interception-proxy.js +67 -0
  53. package/dist/interception-proxy.js.map +1 -0
  54. package/dist/interceptor-chain.d.ts +121 -0
  55. package/dist/interceptor-chain.js +148 -0
  56. package/dist/interceptor-chain.js.map +1 -0
  57. package/dist/interceptor.d.ts +138 -0
  58. package/dist/interceptor.js +299 -0
  59. package/dist/interceptor.js.map +1 -0
  60. package/dist/invocation.d.ts +101 -0
  61. package/dist/invocation.js +163 -0
  62. package/dist/invocation.js.map +1 -0
  63. package/dist/json-types.d.ts +28 -0
  64. package/{lib/src/provider.js → dist/json-types.js} +3 -3
  65. package/dist/json-types.js.map +1 -0
  66. package/dist/keys.d.ts +65 -0
  67. package/dist/keys.js +74 -0
  68. package/dist/keys.js.map +1 -0
  69. package/dist/provider.d.ts +31 -0
  70. package/{lib6/src → dist}/provider.js +2 -2
  71. package/dist/provider.js.map +1 -0
  72. package/dist/resolution-session.d.ts +180 -0
  73. package/dist/resolution-session.js +274 -0
  74. package/dist/resolution-session.js.map +1 -0
  75. package/dist/resolver.d.ts +46 -0
  76. package/dist/resolver.js +203 -0
  77. package/dist/resolver.js.map +1 -0
  78. package/dist/unique-id.d.ts +14 -0
  79. package/dist/unique-id.js +26 -0
  80. package/dist/unique-id.js.map +1 -0
  81. package/dist/value-promise.d.ts +134 -0
  82. package/dist/value-promise.js +277 -0
  83. package/dist/value-promise.js.map +1 -0
  84. package/package.json +49 -34
  85. package/src/binding-config.ts +73 -0
  86. package/src/binding-decorator.ts +136 -0
  87. package/src/binding-filter.ts +250 -0
  88. package/src/binding-inspector.ts +371 -0
  89. package/src/binding-key.ts +136 -0
  90. package/src/binding-sorter.ts +124 -0
  91. package/src/binding.ts +1107 -0
  92. package/src/context-event.ts +30 -0
  93. package/src/context-observer.ts +50 -0
  94. package/src/context-subscription.ts +402 -0
  95. package/src/context-tag-indexer.ts +147 -0
  96. package/src/context-view.ts +440 -0
  97. package/src/context.ts +1079 -0
  98. package/src/index.ts +58 -0
  99. package/src/inject-config.ts +239 -0
  100. package/src/inject.ts +796 -0
  101. package/src/interception-proxy.ts +127 -0
  102. package/src/interceptor-chain.ts +268 -0
  103. package/src/interceptor.ts +430 -0
  104. package/src/invocation.ts +269 -0
  105. package/src/json-types.ts +35 -0
  106. package/src/keys.ts +85 -0
  107. package/src/provider.ts +37 -0
  108. package/src/resolution-session.ts +414 -0
  109. package/src/resolver.ts +282 -0
  110. package/src/unique-id.ts +24 -0
  111. package/src/value-promise.ts +318 -0
  112. package/index.d.ts +0 -6
  113. package/index.js +0 -9
  114. package/lib/binding.d.ts +0 -75
  115. package/lib/binding.js +0 -103
  116. package/lib/binding.js.map +0 -1
  117. package/lib/context.d.ts +0 -14
  118. package/lib/context.js +0 -97
  119. package/lib/context.js.map +0 -1
  120. package/lib/index.d.ts +0 -1
  121. package/lib/index.js +0 -12
  122. package/lib/index.js.map +0 -1
  123. package/lib/inject.d.ts +0 -46
  124. package/lib/inject.js +0 -74
  125. package/lib/inject.js.map +0 -1
  126. package/lib/isPromise.d.ts +0 -1
  127. package/lib/isPromise.js +0 -15
  128. package/lib/isPromise.js.map +0 -1
  129. package/lib/reflect.d.ts +0 -39
  130. package/lib/reflect.js +0 -20
  131. package/lib/reflect.js.map +0 -1
  132. package/lib/resolver.d.ts +0 -30
  133. package/lib/resolver.js +0 -129
  134. package/lib/resolver.js.map +0 -1
  135. package/lib/src/binding.d.ts +0 -85
  136. package/lib/src/binding.js +0 -123
  137. package/lib/src/binding.js.map +0 -1
  138. package/lib/src/context.d.ts +0 -14
  139. package/lib/src/context.js +0 -97
  140. package/lib/src/context.js.map +0 -1
  141. package/lib/src/index.d.ts +0 -10
  142. package/lib/src/index.js +0 -27
  143. package/lib/src/index.js.map +0 -1
  144. package/lib/src/inject.d.ts +0 -46
  145. package/lib/src/inject.js +0 -74
  146. package/lib/src/inject.js.map +0 -1
  147. package/lib/src/isPromise.d.ts +0 -1
  148. package/lib/src/isPromise.js +0 -15
  149. package/lib/src/isPromise.js.map +0 -1
  150. package/lib/src/provider.d.ts +0 -29
  151. package/lib/src/provider.js.map +0 -1
  152. package/lib/src/reflect.d.ts +0 -38
  153. package/lib/src/reflect.js +0 -143
  154. package/lib/src/reflect.js.map +0 -1
  155. package/lib/src/resolver.d.ts +0 -34
  156. package/lib/src/resolver.js +0 -144
  157. package/lib/src/resolver.js.map +0 -1
  158. package/lib6/binding.d.ts +0 -75
  159. package/lib6/binding.js +0 -103
  160. package/lib6/binding.js.map +0 -1
  161. package/lib6/context.d.ts +0 -14
  162. package/lib6/context.js +0 -97
  163. package/lib6/context.js.map +0 -1
  164. package/lib6/index.d.ts +0 -1
  165. package/lib6/index.js +0 -12
  166. package/lib6/index.js.map +0 -1
  167. package/lib6/inject.d.ts +0 -46
  168. package/lib6/inject.js +0 -74
  169. package/lib6/inject.js.map +0 -1
  170. package/lib6/isPromise.d.ts +0 -1
  171. package/lib6/isPromise.js +0 -15
  172. package/lib6/isPromise.js.map +0 -1
  173. package/lib6/reflect.d.ts +0 -39
  174. package/lib6/reflect.js +0 -20
  175. package/lib6/reflect.js.map +0 -1
  176. package/lib6/resolver.d.ts +0 -30
  177. package/lib6/resolver.js +0 -129
  178. package/lib6/resolver.js.map +0 -1
  179. package/lib6/src/binding.d.ts +0 -85
  180. package/lib6/src/binding.js +0 -133
  181. package/lib6/src/binding.js.map +0 -1
  182. package/lib6/src/context.d.ts +0 -14
  183. package/lib6/src/context.js +0 -97
  184. package/lib6/src/context.js.map +0 -1
  185. package/lib6/src/index.d.ts +0 -10
  186. package/lib6/src/index.js +0 -27
  187. package/lib6/src/index.js.map +0 -1
  188. package/lib6/src/inject.d.ts +0 -46
  189. package/lib6/src/inject.js +0 -74
  190. package/lib6/src/inject.js.map +0 -1
  191. package/lib6/src/isPromise.d.ts +0 -1
  192. package/lib6/src/isPromise.js +0 -15
  193. package/lib6/src/isPromise.js.map +0 -1
  194. package/lib6/src/provider.d.ts +0 -29
  195. package/lib6/src/provider.js.map +0 -1
  196. package/lib6/src/reflect.d.ts +0 -38
  197. package/lib6/src/reflect.js +0 -143
  198. package/lib6/src/reflect.js.map +0 -1
  199. package/lib6/src/resolver.d.ts +0 -34
  200. package/lib6/src/resolver.js +0 -154
  201. package/lib6/src/resolver.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding.js","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { Binding } from './binding';
2
+ import { Context } from './context';
3
+ /**
4
+ * Events emitted by a context
5
+ */
6
+ export declare type ContextEvent = {
7
+ /**
8
+ * Source context that emits the event
9
+ */
10
+ context: Context;
11
+ /**
12
+ * Binding that is being added/removed/updated
13
+ */
14
+ binding: Readonly<Binding<unknown>>;
15
+ /**
16
+ * Event type
17
+ */
18
+ type: string;
19
+ };
20
+ /**
21
+ * Synchronous listener for context events
22
+ */
23
+ export declare type ContextEventListener = (event: ContextEvent) => void;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2020. All Rights Reserved.
3
+ // Node module: @loopback/context
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=context-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-event.js","sourceRoot":"","sources":["../src/context-event.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,iCAAiC;AACjC,+CAA+C;AAC/C,gEAAgE"}
@@ -0,0 +1,36 @@
1
+ import { Binding } from './binding';
2
+ import { BindingFilter } from './binding-filter';
3
+ import { Context } from './context';
4
+ import { ValueOrPromise } from './value-promise';
5
+ /**
6
+ * Context event types. We support `bind` and `unbind` for now but
7
+ * keep it open for new types
8
+ */
9
+ export declare type ContextEventType = 'bind' | 'unbind' | string;
10
+ /**
11
+ * Listen on `bind`, `unbind`, or other events
12
+ * @param eventType - Context event type
13
+ * @param binding - The binding as event source
14
+ * @param context - Context object for the binding event
15
+ */
16
+ export declare type ContextObserverFn = (eventType: ContextEventType, binding: Readonly<Binding<unknown>>, context: Context) => ValueOrPromise<void>;
17
+ /**
18
+ * Observers of context bind/unbind events
19
+ */
20
+ export interface ContextObserver {
21
+ /**
22
+ * An optional filter function to match bindings. If not present, the listener
23
+ * will be notified of all binding events.
24
+ */
25
+ filter?: BindingFilter;
26
+ /**
27
+ * Listen on `bind`, `unbind`, or other events
28
+ * @param eventType - Context event type
29
+ * @param binding - The binding as event source
30
+ */
31
+ observe: ContextObserverFn;
32
+ }
33
+ /**
34
+ * Context event observer type - An instance of `ContextObserver` or a function
35
+ */
36
+ export declare type ContextEventObserver = ContextObserver | ContextObserverFn;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2019,2020. All Rights Reserved.
3
+ // Node module: @loopback/context
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=context-observer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-observer.js","sourceRoot":"","sources":["../src/context-observer.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,iCAAiC;AACjC,+CAA+C;AAC/C,gEAAgE"}
@@ -0,0 +1,147 @@
1
+ /// <reference types="node" />
2
+ import { EventEmitter } from 'events';
3
+ import { Context } from './context';
4
+ import { ContextEvent, ContextEventListener } from './context-event';
5
+ import { ContextEventObserver, ContextObserver } from './context-observer';
6
+ /**
7
+ * Subscription of context events. It's modeled after
8
+ * https://github.com/tc39/proposal-observable.
9
+ */
10
+ export interface Subscription {
11
+ /**
12
+ * unsubscribe
13
+ */
14
+ unsubscribe(): void;
15
+ /**
16
+ * Is the subscription closed?
17
+ */
18
+ closed: boolean;
19
+ }
20
+ /**
21
+ * Event data for observer notifications
22
+ */
23
+ export interface Notification extends ContextEvent {
24
+ /**
25
+ * A snapshot of observers when the original event is emitted
26
+ */
27
+ observers: Set<ContextEventObserver>;
28
+ }
29
+ /**
30
+ * Manager for context observer subscriptions
31
+ */
32
+ export declare class ContextSubscriptionManager extends EventEmitter {
33
+ protected readonly context: Context;
34
+ /**
35
+ * A listener to watch parent context events
36
+ */
37
+ protected _parentContextEventListener?: ContextEventListener;
38
+ /**
39
+ * A list of registered context observers. The Set will be created when the
40
+ * first observer is added.
41
+ */
42
+ protected _observers: Set<ContextEventObserver> | undefined;
43
+ /**
44
+ * Internal counter for pending notification events which are yet to be
45
+ * processed by observers.
46
+ */
47
+ private pendingNotifications;
48
+ /**
49
+ * Queue for background notifications for observers
50
+ */
51
+ private notificationQueue;
52
+ constructor(context: Context);
53
+ /**
54
+ * @internal
55
+ */
56
+ get parentContextEventListener(): ContextEventListener | undefined;
57
+ /**
58
+ * @internal
59
+ */
60
+ get observers(): Set<ContextEventObserver> | undefined;
61
+ /**
62
+ * Wrap the debug statement so that it always print out the context name
63
+ * as the prefix
64
+ * @param args - Arguments for the debug
65
+ */
66
+ private _debug;
67
+ /**
68
+ * Set up an internal listener to notify registered observers asynchronously
69
+ * upon `bind` and `unbind` events. This method will be called lazily when
70
+ * the first observer is added.
71
+ */
72
+ private setupEventHandlersIfNeeded;
73
+ private handleParentEvent;
74
+ /**
75
+ * A strongly-typed method to emit context events
76
+ * @param type Event type
77
+ * @param event Context event
78
+ */
79
+ private emitEvent;
80
+ /**
81
+ * Emit an `error` event
82
+ * @param err Error
83
+ */
84
+ private emitError;
85
+ /**
86
+ * Start a background task to listen on context events and notify observers
87
+ */
88
+ private startNotificationTask;
89
+ /**
90
+ * Publish an event to the registered observers. Please note the
91
+ * notification is queued and performed asynchronously so that we allow fluent
92
+ * APIs such as `ctx.bind('key').to(...).tag(...);` and give observers the
93
+ * fully populated binding.
94
+ *
95
+ * @param event - Context event
96
+ * @param observers - Current set of context observers
97
+ */
98
+ protected notifyObservers(event: ContextEvent, observers?: Set<ContextEventObserver> | undefined): Promise<void>;
99
+ /**
100
+ * Process notification events as they arrive on the queue
101
+ */
102
+ private processNotifications;
103
+ /**
104
+ * Listen on given event types and emit `notification` event. This method
105
+ * merge multiple event types into one for notification.
106
+ * @param eventTypes - Context event types
107
+ */
108
+ private setupNotification;
109
+ /**
110
+ * Wait until observers are notified for all of currently pending notification
111
+ * events.
112
+ *
113
+ * This method is for test only to perform assertions after observers are
114
+ * notified for relevant events.
115
+ */
116
+ waitUntilPendingNotificationsDone(timeout?: number): Promise<void>;
117
+ /**
118
+ * Add a context event observer to the context
119
+ * @param observer - Context observer instance or function
120
+ */
121
+ subscribe(observer: ContextEventObserver): Subscription;
122
+ /**
123
+ * Remove the context event observer from the context
124
+ * @param observer - Context event observer
125
+ */
126
+ unsubscribe(observer: ContextEventObserver): boolean;
127
+ /**
128
+ * Check if an observer is subscribed to this context
129
+ * @param observer - Context observer
130
+ */
131
+ isSubscribed(observer: ContextObserver): boolean;
132
+ /**
133
+ * Handle errors caught during the notification of observers
134
+ * @param err - Error
135
+ */
136
+ private handleNotificationError;
137
+ /**
138
+ * Close the context: clear observers, stop notifications, and remove event
139
+ * listeners from its parent context.
140
+ *
141
+ * @remarks
142
+ * This method MUST be called to avoid memory leaks once a context object is
143
+ * no longer needed and should be recycled. An example is the `RequestContext`,
144
+ * which is created per request.
145
+ */
146
+ close(): void;
147
+ }
@@ -0,0 +1,317 @@
1
+ "use strict";
2
+ // Copyright IBM Corp. 2019,2020. All Rights Reserved.
3
+ // Node module: @loopback/context
4
+ // This file is licensed under the MIT License.
5
+ // License text available at https://opensource.org/licenses/MIT
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ContextSubscriptionManager = void 0;
8
+ const tslib_1 = require("tslib");
9
+ const debug_1 = (0, tslib_1.__importDefault)(require("debug"));
10
+ const events_1 = require("events");
11
+ const p_event_1 = require("p-event");
12
+ const debug = (0, debug_1.default)('loopback:context:subscription');
13
+ /**
14
+ * An implementation of `Subscription` interface for context events
15
+ */
16
+ class ContextSubscription {
17
+ constructor(context, observer) {
18
+ this.context = context;
19
+ this.observer = observer;
20
+ this._closed = false;
21
+ }
22
+ unsubscribe() {
23
+ this.context.unsubscribe(this.observer);
24
+ this._closed = true;
25
+ }
26
+ get closed() {
27
+ return this._closed;
28
+ }
29
+ }
30
+ /**
31
+ * Manager for context observer subscriptions
32
+ */
33
+ class ContextSubscriptionManager extends events_1.EventEmitter {
34
+ constructor(context) {
35
+ super();
36
+ this.context = context;
37
+ /**
38
+ * Internal counter for pending notification events which are yet to be
39
+ * processed by observers.
40
+ */
41
+ this.pendingNotifications = 0;
42
+ this.setMaxListeners(Infinity);
43
+ }
44
+ /**
45
+ * @internal
46
+ */
47
+ get parentContextEventListener() {
48
+ return this._parentContextEventListener;
49
+ }
50
+ /**
51
+ * @internal
52
+ */
53
+ get observers() {
54
+ return this._observers;
55
+ }
56
+ /**
57
+ * Wrap the debug statement so that it always print out the context name
58
+ * as the prefix
59
+ * @param args - Arguments for the debug
60
+ */
61
+ _debug(...args) {
62
+ /* istanbul ignore if */
63
+ if (!debug.enabled)
64
+ return;
65
+ const formatter = args.shift();
66
+ if (typeof formatter === 'string') {
67
+ debug(`[%s] ${formatter}`, this.context.name, ...args);
68
+ }
69
+ else {
70
+ debug('[%s] ', this.context.name, formatter, ...args);
71
+ }
72
+ }
73
+ /**
74
+ * Set up an internal listener to notify registered observers asynchronously
75
+ * upon `bind` and `unbind` events. This method will be called lazily when
76
+ * the first observer is added.
77
+ */
78
+ setupEventHandlersIfNeeded() {
79
+ if (this.notificationQueue != null)
80
+ return;
81
+ if (this.context.parent != null) {
82
+ /**
83
+ * Add an event listener to its parent context so that this context will
84
+ * be notified of parent events, such as `bind` or `unbind`.
85
+ */
86
+ this._parentContextEventListener = event => {
87
+ this.handleParentEvent(event);
88
+ };
89
+ // Listen on the parent context events
90
+ this.context.parent.on('bind', this._parentContextEventListener);
91
+ this.context.parent.on('unbind', this._parentContextEventListener);
92
+ }
93
+ // The following are two async functions. Returned promises are ignored as
94
+ // they are long-running background tasks.
95
+ this.startNotificationTask().catch(err => {
96
+ this.handleNotificationError(err);
97
+ });
98
+ let ctx = this.context.parent;
99
+ while (ctx) {
100
+ ctx.subscriptionManager.setupEventHandlersIfNeeded();
101
+ ctx = ctx.parent;
102
+ }
103
+ }
104
+ handleParentEvent(event) {
105
+ const { binding, context, type } = event;
106
+ // Propagate the event to this context only if the binding key does not
107
+ // exist in this context. The parent binding is shadowed if there is a
108
+ // binding with the same key in this one.
109
+ if (this.context.contains(binding.key)) {
110
+ this._debug('Event %s %s is not re-emitted from %s to %s', type, binding.key, context.name, this.context.name);
111
+ return;
112
+ }
113
+ this._debug('Re-emitting %s %s from %s to %s', type, binding.key, context.name, this.context.name);
114
+ this.context.emitEvent(type, event);
115
+ }
116
+ /**
117
+ * A strongly-typed method to emit context events
118
+ * @param type Event type
119
+ * @param event Context event
120
+ */
121
+ emitEvent(type, event) {
122
+ this.emit(type, event);
123
+ }
124
+ /**
125
+ * Emit an `error` event
126
+ * @param err Error
127
+ */
128
+ emitError(err) {
129
+ this.emit('error', err);
130
+ }
131
+ /**
132
+ * Start a background task to listen on context events and notify observers
133
+ */
134
+ startNotificationTask() {
135
+ // Set up listeners on `bind` and `unbind` for notifications
136
+ this.setupNotification('bind', 'unbind');
137
+ // Create an async iterator for the `notification` event as a queue
138
+ this.notificationQueue = (0, p_event_1.iterator)(this, 'notification', {
139
+ // Do not end the iterator if an error event is emitted on the
140
+ // subscription manager
141
+ rejectionEvents: [],
142
+ });
143
+ return this.processNotifications();
144
+ }
145
+ /**
146
+ * Publish an event to the registered observers. Please note the
147
+ * notification is queued and performed asynchronously so that we allow fluent
148
+ * APIs such as `ctx.bind('key').to(...).tag(...);` and give observers the
149
+ * fully populated binding.
150
+ *
151
+ * @param event - Context event
152
+ * @param observers - Current set of context observers
153
+ */
154
+ async notifyObservers(event, observers = this._observers) {
155
+ if (!observers || observers.size === 0)
156
+ return;
157
+ const { type, binding, context } = event;
158
+ for (const observer of observers) {
159
+ if (typeof observer === 'function') {
160
+ await observer(type, binding, context);
161
+ }
162
+ else if (!observer.filter || observer.filter(binding)) {
163
+ await observer.observe(type, binding, context);
164
+ }
165
+ }
166
+ }
167
+ /**
168
+ * Process notification events as they arrive on the queue
169
+ */
170
+ async processNotifications() {
171
+ const events = this.notificationQueue;
172
+ if (events == null)
173
+ return;
174
+ for await (const { type, binding, context, observers } of events) {
175
+ // The loop will happen asynchronously upon events
176
+ try {
177
+ // The execution of observers happen in the Promise micro-task queue
178
+ await this.notifyObservers({ type, binding, context }, observers);
179
+ this.pendingNotifications--;
180
+ this._debug('Observers notified for %s of binding %s', type, binding.key);
181
+ this.emitEvent('observersNotified', { type, binding, context });
182
+ }
183
+ catch (err) {
184
+ // Do not reduce the pending notification count so that errors
185
+ // can be captured by waitUntilPendingNotificationsDone
186
+ this._debug('Error caught from observers', err);
187
+ // Errors caught from observers.
188
+ if (this.listenerCount('error') > 0) {
189
+ // waitUntilPendingNotificationsDone may be called
190
+ this.emitError(err);
191
+ }
192
+ else {
193
+ // Emit it to the current context. If no error listeners are
194
+ // registered, crash the process.
195
+ this.handleNotificationError(err);
196
+ }
197
+ }
198
+ }
199
+ }
200
+ /**
201
+ * Listen on given event types and emit `notification` event. This method
202
+ * merge multiple event types into one for notification.
203
+ * @param eventTypes - Context event types
204
+ */
205
+ setupNotification(...eventTypes) {
206
+ for (const type of eventTypes) {
207
+ this.context.on(type, ({ binding, context }) => {
208
+ // No need to schedule notifications if no observers are present
209
+ if (!this._observers || this._observers.size === 0)
210
+ return;
211
+ // Track pending events
212
+ this.pendingNotifications++;
213
+ // Take a snapshot of current observers to ensure notifications of this
214
+ // event will only be sent to current ones. Emit a new event to notify
215
+ // current context observers.
216
+ this.emitEvent('notification', {
217
+ type,
218
+ binding,
219
+ context,
220
+ observers: new Set(this._observers),
221
+ });
222
+ });
223
+ }
224
+ }
225
+ /**
226
+ * Wait until observers are notified for all of currently pending notification
227
+ * events.
228
+ *
229
+ * This method is for test only to perform assertions after observers are
230
+ * notified for relevant events.
231
+ */
232
+ async waitUntilPendingNotificationsDone(timeout) {
233
+ const count = this.pendingNotifications;
234
+ debug('Number of pending notifications: %d', count);
235
+ if (count === 0)
236
+ return;
237
+ await (0, p_event_1.multiple)(this, 'observersNotified', { count, timeout });
238
+ }
239
+ /**
240
+ * Add a context event observer to the context
241
+ * @param observer - Context observer instance or function
242
+ */
243
+ subscribe(observer) {
244
+ var _a;
245
+ this._observers = (_a = this._observers) !== null && _a !== void 0 ? _a : new Set();
246
+ this.setupEventHandlersIfNeeded();
247
+ this._observers.add(observer);
248
+ return new ContextSubscription(this.context, observer);
249
+ }
250
+ /**
251
+ * Remove the context event observer from the context
252
+ * @param observer - Context event observer
253
+ */
254
+ unsubscribe(observer) {
255
+ if (!this._observers)
256
+ return false;
257
+ return this._observers.delete(observer);
258
+ }
259
+ /**
260
+ * Check if an observer is subscribed to this context
261
+ * @param observer - Context observer
262
+ */
263
+ isSubscribed(observer) {
264
+ if (!this._observers)
265
+ return false;
266
+ return this._observers.has(observer);
267
+ }
268
+ /**
269
+ * Handle errors caught during the notification of observers
270
+ * @param err - Error
271
+ */
272
+ handleNotificationError(err) {
273
+ // Bubbling up the error event over the context chain
274
+ // until we find an error listener
275
+ let ctx = this.context;
276
+ while (ctx) {
277
+ if (ctx.listenerCount('error') === 0) {
278
+ // No error listener found, try its parent
279
+ ctx = ctx.parent;
280
+ continue;
281
+ }
282
+ this._debug('Emitting error to context %s', ctx.name, err);
283
+ ctx.emitError(err);
284
+ return;
285
+ }
286
+ // No context with error listeners found
287
+ this._debug('No error handler is configured for the context chain', err);
288
+ // Let it crash now by emitting an error event
289
+ this.context.emitError(err);
290
+ }
291
+ /**
292
+ * Close the context: clear observers, stop notifications, and remove event
293
+ * listeners from its parent context.
294
+ *
295
+ * @remarks
296
+ * This method MUST be called to avoid memory leaks once a context object is
297
+ * no longer needed and should be recycled. An example is the `RequestContext`,
298
+ * which is created per request.
299
+ */
300
+ close() {
301
+ this._observers = undefined;
302
+ if (this.notificationQueue != null) {
303
+ // Cancel the notification iterator
304
+ this.notificationQueue.return(undefined).catch(err => {
305
+ this.handleNotificationError(err);
306
+ });
307
+ this.notificationQueue = undefined;
308
+ }
309
+ if (this.context.parent && this._parentContextEventListener) {
310
+ this.context.parent.removeListener('bind', this._parentContextEventListener);
311
+ this.context.parent.removeListener('unbind', this._parentContextEventListener);
312
+ this._parentContextEventListener = undefined;
313
+ }
314
+ }
315
+ }
316
+ exports.ContextSubscriptionManager = ContextSubscriptionManager;
317
+ //# sourceMappingURL=context-subscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-subscription.js","sourceRoot":"","sources":["../src/context-subscription.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { Binding, BindingTag } from './binding';
2
+ import { Context } from './context';
3
+ import { BoundValue } from './value-promise';
4
+ /**
5
+ * Indexer for context bindings by tag
6
+ */
7
+ export declare class ContextTagIndexer {
8
+ protected readonly context: Context;
9
+ /**
10
+ * Index for bindings by tag names
11
+ */
12
+ readonly bindingsIndexedByTag: Map<string, Set<Readonly<Binding<unknown>>>>;
13
+ /**
14
+ * A listener for binding events
15
+ */
16
+ private bindingEventListener;
17
+ /**
18
+ * A listener to maintain tag index for bindings
19
+ */
20
+ private tagIndexListener;
21
+ constructor(context: Context);
22
+ /**
23
+ * Set up context/binding listeners and refresh index for bindings by tag
24
+ */
25
+ private setupTagIndexForBindings;
26
+ /**
27
+ * Remove tag index for the given binding
28
+ * @param binding - Binding object
29
+ */
30
+ private removeTagIndexForBinding;
31
+ /**
32
+ * Update tag index for the given binding
33
+ * @param binding - Binding object
34
+ */
35
+ private updateTagIndexForBinding;
36
+ /**
37
+ * Find bindings by tag leveraging indexes
38
+ * @param tag - Tag name pattern or name/value pairs
39
+ */
40
+ findByTagIndex<ValueType = BoundValue>(tag: BindingTag | RegExp): Readonly<Binding<ValueType>>[];
41
+ close(): void;
42
+ }