@nmshd/app-runtime 2.0.0-alpha.5 → 2.0.0-alpha.6
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/buildInformation.js +5 -5
- package/dist/modules/AppRuntimeModule.d.ts +1 -1
- package/dist/modules/AppRuntimeModule.js +4 -6
- package/dist/modules/AppRuntimeModule.js.map +1 -1
- package/lib-web/nmshd.app-runtime.js +55 -32
- package/lib-web/nmshd.app-runtime.min.js +1 -1
- package/package.json +8 -8
package/dist/buildInformation.js
CHANGED
|
@@ -8,11 +8,11 @@ const crypto_1 = require("@nmshd/crypto");
|
|
|
8
8
|
const runtime_1 = require("@nmshd/runtime");
|
|
9
9
|
const transport_1 = require("@nmshd/transport");
|
|
10
10
|
exports.buildInformation = {
|
|
11
|
-
version: "2.0.0-alpha.
|
|
12
|
-
build: "
|
|
13
|
-
date: "2022-07-
|
|
14
|
-
commit: "
|
|
15
|
-
dependencies: {"@js-soft/docdb-access-loki":"^1.0.3","@js-soft/native-abstractions":"^1.
|
|
11
|
+
version: "2.0.0-alpha.6",
|
|
12
|
+
build: "17",
|
|
13
|
+
date: "2022-07-19T13:27:53+00:00",
|
|
14
|
+
commit: "6fac45e109bc1f82f4cb7010552b612291f3c297",
|
|
15
|
+
dependencies: {"@js-soft/docdb-access-loki":"^1.0.3","@js-soft/native-abstractions":"^1.2.0","@nmshd/runtime":"2.0.0-alpha.37","lodash":"^4.17.21"},
|
|
16
16
|
libraries: {
|
|
17
17
|
serval: ts_serval_1.buildInformation,
|
|
18
18
|
crypto: crypto_1.buildInformation,
|
|
@@ -8,7 +8,7 @@ export interface IAppRuntimeModuleConstructor {
|
|
|
8
8
|
export interface AppRuntimeModuleConfiguration extends ModuleConfiguration {
|
|
9
9
|
}
|
|
10
10
|
export declare abstract class AppRuntimeModule<TConfig extends AppRuntimeModuleConfiguration = AppRuntimeModuleConfiguration> extends RuntimeModule<TConfig, AppRuntime> {
|
|
11
|
-
private readonly
|
|
11
|
+
private readonly nativeEventSubscriptionIds;
|
|
12
12
|
protected subscribeToNativeEvent<TEvent>(event: Event, handler: EventHandler<TEvent>): void;
|
|
13
13
|
protected unsubscribeFromAllEvents(): void;
|
|
14
14
|
}
|
|
@@ -5,7 +5,7 @@ const runtime_1 = require("@nmshd/runtime");
|
|
|
5
5
|
class AppRuntimeModule extends runtime_1.RuntimeModule {
|
|
6
6
|
constructor() {
|
|
7
7
|
super(...arguments);
|
|
8
|
-
this.
|
|
8
|
+
this.nativeEventSubscriptionIds = [];
|
|
9
9
|
}
|
|
10
10
|
subscribeToNativeEvent(event, handler) {
|
|
11
11
|
const subscriptionResult = this.runtime.nativeEnvironment.eventBus.subscribe(event, handler);
|
|
@@ -13,14 +13,12 @@ class AppRuntimeModule extends runtime_1.RuntimeModule {
|
|
|
13
13
|
this.logger.error(subscriptionResult.error);
|
|
14
14
|
throw subscriptionResult.error;
|
|
15
15
|
}
|
|
16
|
-
this.
|
|
16
|
+
this.nativeEventSubscriptionIds.push(subscriptionResult.value);
|
|
17
17
|
}
|
|
18
18
|
unsubscribeFromAllEvents() {
|
|
19
19
|
super.unsubscribeFromAllEvents();
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
this.registeredNativeEventSubscriptions.splice(0);
|
|
20
|
+
this.nativeEventSubscriptionIds.forEach((id) => this.runtime.nativeEnvironment.eventBus.unsubscribe(id));
|
|
21
|
+
this.nativeEventSubscriptionIds.splice(0);
|
|
24
22
|
}
|
|
25
23
|
}
|
|
26
24
|
exports.AppRuntimeModule = AppRuntimeModule;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppRuntimeModule.js","sourceRoot":"","sources":["../../src/modules/AppRuntimeModule.ts"],"names":[],"mappings":";;;AAEA,4CAAmE;AASnE,MAAsB,gBAEpB,SAAQ,uBAAkC;IAF5C;;QAGqB,
|
|
1
|
+
{"version":3,"file":"AppRuntimeModule.js","sourceRoot":"","sources":["../../src/modules/AppRuntimeModule.ts"],"names":[],"mappings":";;;AAEA,4CAAmE;AASnE,MAAsB,gBAEpB,SAAQ,uBAAkC;IAF5C;;QAGqB,+BAA0B,GAAa,EAAE,CAAA;IAkB9D,CAAC;IAhBa,sBAAsB,CAAS,KAAY,EAAE,OAA6B;QAChF,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC5F,IAAI,kBAAkB,CAAC,OAAO,EAAE;YAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;YAC3C,MAAM,kBAAkB,CAAC,KAAK,CAAA;SACjC;QAED,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;IAClE,CAAC;IAEkB,wBAAwB;QACvC,KAAK,CAAC,wBAAwB,EAAE,CAAA;QAEhC,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAA;QACxG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC7C,CAAC;CACJ;AArBD,4CAqBC"}
|
|
@@ -558,11 +558,11 @@ const crypto_1 = __webpack_require__(/*! @nmshd/crypto */ "@nmshd/crypto");
|
|
|
558
558
|
const runtime_1 = __webpack_require__(/*! @nmshd/runtime */ "@nmshd/runtime");
|
|
559
559
|
const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
|
|
560
560
|
exports.buildInformation = {
|
|
561
|
-
version: "2.0.0-alpha.
|
|
562
|
-
build: "
|
|
563
|
-
date: "2022-07-
|
|
564
|
-
commit: "
|
|
565
|
-
dependencies: {"@js-soft/docdb-access-loki":"^1.0.3","@js-soft/native-abstractions":"^1.
|
|
561
|
+
version: "2.0.0-alpha.6",
|
|
562
|
+
build: "17",
|
|
563
|
+
date: "2022-07-19T13:27:53+00:00",
|
|
564
|
+
commit: "6fac45e109bc1f82f4cb7010552b612291f3c297",
|
|
565
|
+
dependencies: {"@js-soft/docdb-access-loki":"^1.0.3","@js-soft/native-abstractions":"^1.2.0","@nmshd/runtime":"2.0.0-alpha.37","lodash":"^4.17.21"},
|
|
566
566
|
libraries: {
|
|
567
567
|
serval: ts_serval_1.buildInformation,
|
|
568
568
|
crypto: crypto_1.buildInformation,
|
|
@@ -1143,7 +1143,7 @@ const runtime_1 = __webpack_require__(/*! @nmshd/runtime */ "@nmshd/runtime");
|
|
|
1143
1143
|
class AppRuntimeModule extends runtime_1.RuntimeModule {
|
|
1144
1144
|
constructor() {
|
|
1145
1145
|
super(...arguments);
|
|
1146
|
-
this.
|
|
1146
|
+
this.nativeEventSubscriptionIds = [];
|
|
1147
1147
|
}
|
|
1148
1148
|
subscribeToNativeEvent(event, handler) {
|
|
1149
1149
|
const subscriptionResult = this.runtime.nativeEnvironment.eventBus.subscribe(event, handler);
|
|
@@ -1151,14 +1151,12 @@ class AppRuntimeModule extends runtime_1.RuntimeModule {
|
|
|
1151
1151
|
this.logger.error(subscriptionResult.error);
|
|
1152
1152
|
throw subscriptionResult.error;
|
|
1153
1153
|
}
|
|
1154
|
-
this.
|
|
1154
|
+
this.nativeEventSubscriptionIds.push(subscriptionResult.value);
|
|
1155
1155
|
}
|
|
1156
1156
|
unsubscribeFromAllEvents() {
|
|
1157
1157
|
super.unsubscribeFromAllEvents();
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
}
|
|
1161
|
-
this.registeredNativeEventSubscriptions.splice(0);
|
|
1158
|
+
this.nativeEventSubscriptionIds.forEach((id) => this.runtime.nativeEnvironment.eventBus.unsubscribe(id));
|
|
1159
|
+
this.nativeEventSubscriptionIds.splice(0);
|
|
1162
1160
|
}
|
|
1163
1161
|
}
|
|
1164
1162
|
exports.AppRuntimeModule = AppRuntimeModule;
|
|
@@ -3218,10 +3216,11 @@ const EventBus_1 = __webpack_require__(/*! ../EventBus */ "./node_modules/@js-so
|
|
|
3218
3216
|
const SubscriptionTargetInfo_1 = __webpack_require__(/*! ../SubscriptionTargetInfo */ "./node_modules/@js-soft/ts-utils/dist/eventBus/SubscriptionTargetInfo.js");
|
|
3219
3217
|
class EventEmitter2EventBus {
|
|
3220
3218
|
emitter;
|
|
3221
|
-
|
|
3219
|
+
listeners = new Map();
|
|
3222
3220
|
nextId = 0;
|
|
3223
|
-
|
|
3224
|
-
|
|
3221
|
+
invocationPromises = [];
|
|
3222
|
+
constructor(options) {
|
|
3223
|
+
this.emitter = new eventemitter2_1.EventEmitter2({ ...options, wildcard: true, maxListeners: 50, verboseMemoryLeak: true });
|
|
3225
3224
|
}
|
|
3226
3225
|
subscribe(subscriptionTarget, handler) {
|
|
3227
3226
|
return this.registerHandler(subscriptionTarget, handler);
|
|
@@ -3229,33 +3228,39 @@ class EventEmitter2EventBus {
|
|
|
3229
3228
|
subscribeOnce(subscriptionTarget, handler) {
|
|
3230
3229
|
return this.registerHandler(subscriptionTarget, handler, true);
|
|
3231
3230
|
}
|
|
3232
|
-
unsubscribe(
|
|
3233
|
-
return this.unregisterHandler(
|
|
3231
|
+
unsubscribe(subscriptionId) {
|
|
3232
|
+
return this.unregisterHandler(subscriptionId);
|
|
3234
3233
|
}
|
|
3235
3234
|
registerHandler(subscriptionTarget, handler, isOneTimeHandler = false) {
|
|
3236
3235
|
const subscriptionTargetInfo = SubscriptionTargetInfo_1.SubscriptionTargetInfo.from(subscriptionTarget);
|
|
3237
|
-
const
|
|
3238
|
-
const handlerWrapper = (event) => {
|
|
3236
|
+
const listenerId = this.nextId++;
|
|
3237
|
+
const handlerWrapper = async (event) => {
|
|
3239
3238
|
if (!subscriptionTargetInfo.isCompatibleWith(event)) {
|
|
3240
3239
|
return;
|
|
3241
3240
|
}
|
|
3242
|
-
handler(event);
|
|
3243
|
-
|
|
3244
|
-
|
|
3245
|
-
|
|
3241
|
+
const invocationPromise = (async () => await handler(event))();
|
|
3242
|
+
this.invocationPromises.push(invocationPromise);
|
|
3243
|
+
await invocationPromise;
|
|
3244
|
+
this.invocationPromises = this.invocationPromises.filter((p) => p !== invocationPromise);
|
|
3245
|
+
if (isOneTimeHandler)
|
|
3246
|
+
this.listeners.delete(listenerId);
|
|
3246
3247
|
};
|
|
3247
|
-
|
|
3248
|
-
|
|
3249
|
-
|
|
3250
|
-
|
|
3251
|
-
|
|
3252
|
-
const
|
|
3253
|
-
|
|
3254
|
-
|
|
3248
|
+
if (isOneTimeHandler) {
|
|
3249
|
+
const listener = this.emitter.once(subscriptionTargetInfo.namespace, handlerWrapper, { objectify: true });
|
|
3250
|
+
this.listeners.set(listenerId, listener);
|
|
3251
|
+
return listenerId;
|
|
3252
|
+
}
|
|
3253
|
+
const listener = this.emitter.on(subscriptionTargetInfo.namespace, handlerWrapper, { objectify: true });
|
|
3254
|
+
this.listeners.set(listenerId, listener);
|
|
3255
|
+
return listenerId;
|
|
3256
|
+
}
|
|
3257
|
+
unregisterHandler(listenerId) {
|
|
3258
|
+
const listener = this.listeners.get(listenerId);
|
|
3259
|
+
if (!listener) {
|
|
3255
3260
|
return false;
|
|
3256
3261
|
}
|
|
3257
|
-
|
|
3258
|
-
this.
|
|
3262
|
+
listener.off();
|
|
3263
|
+
this.listeners.delete(listenerId);
|
|
3259
3264
|
return true;
|
|
3260
3265
|
}
|
|
3261
3266
|
publish(event) {
|
|
@@ -3265,6 +3270,24 @@ class EventEmitter2EventBus {
|
|
|
3265
3270
|
}
|
|
3266
3271
|
this.emitter.emit(namespace, event);
|
|
3267
3272
|
}
|
|
3273
|
+
async close(timeout) {
|
|
3274
|
+
this.emitter.removeAllListeners();
|
|
3275
|
+
const waitForInvocations = Promise.all(this.invocationPromises).catch(() => {
|
|
3276
|
+
/* ignore errors */
|
|
3277
|
+
});
|
|
3278
|
+
if (!timeout) {
|
|
3279
|
+
await waitForInvocations;
|
|
3280
|
+
return;
|
|
3281
|
+
}
|
|
3282
|
+
let timeoutId;
|
|
3283
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
3284
|
+
timeoutId = setTimeout(() => {
|
|
3285
|
+
reject(new Error("timeout exceeded while waiting for events to process"));
|
|
3286
|
+
}, timeout);
|
|
3287
|
+
});
|
|
3288
|
+
await Promise.race([waitForInvocations, timeoutPromise]);
|
|
3289
|
+
clearTimeout(timeoutId);
|
|
3290
|
+
}
|
|
3268
3291
|
}
|
|
3269
3292
|
exports.EventEmitter2EventBus = EventEmitter2EventBus;
|
|
3270
3293
|
//# sourceMappingURL=EventEmitter2EventBus.js.map
|