@ngxs/websocket-plugin 3.8.1-dev.master-07536db → 3.8.1-dev.master-4a74d16
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/esm2020/src/providers.mjs +34 -0
- package/esm2020/src/symbols.mjs +4 -5
- package/esm2020/src/websocket-handler.mjs +112 -106
- package/esm2020/src/websocket.module.mjs +5 -51
- package/fesm2015/ngxs-websocket-plugin.mjs +134 -142
- package/fesm2015/ngxs-websocket-plugin.mjs.map +1 -1
- package/fesm2020/ngxs-websocket-plugin.mjs +133 -142
- package/fesm2020/ngxs-websocket-plugin.mjs.map +1 -1
- package/package.json +1 -1
- package/src/providers.d.ts +31 -0
- package/src/symbols.d.ts +2 -2
- package/src/websocket-handler.d.ts +13 -27
- package/src/websocket.module.d.ts +1 -12
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { APP_INITIALIZER } from '@angular/core';
|
|
2
|
+
import { WebSocketHandler } from './websocket-handler';
|
|
3
|
+
import { USER_OPTIONS, NGXS_WEBSOCKET_OPTIONS } from './symbols';
|
|
4
|
+
export function ɵwebsocketOptionsFactory(options) {
|
|
5
|
+
return {
|
|
6
|
+
reconnectInterval: 5000,
|
|
7
|
+
reconnectAttempts: 10,
|
|
8
|
+
typeKey: 'type',
|
|
9
|
+
deserializer(e) {
|
|
10
|
+
return JSON.parse(e.data);
|
|
11
|
+
},
|
|
12
|
+
serializer(value) {
|
|
13
|
+
return JSON.stringify(value);
|
|
14
|
+
},
|
|
15
|
+
...options
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function ɵgetProviders(options) {
|
|
19
|
+
return [
|
|
20
|
+
{ provide: USER_OPTIONS, useValue: options },
|
|
21
|
+
{
|
|
22
|
+
provide: NGXS_WEBSOCKET_OPTIONS,
|
|
23
|
+
useFactory: ɵwebsocketOptionsFactory,
|
|
24
|
+
deps: [USER_OPTIONS]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
provide: APP_INITIALIZER,
|
|
28
|
+
useFactory: () => () => { },
|
|
29
|
+
deps: [WebSocketHandler],
|
|
30
|
+
multi: true
|
|
31
|
+
}
|
|
32
|
+
];
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvd2Vic29ja2V0LXBsdWdpbi9zcmMvcHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxzQkFBc0IsRUFBOEIsTUFBTSxXQUFXLENBQUM7QUFFN0YsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE9BQW1DO0lBQzFFLE9BQU87UUFDTCxpQkFBaUIsRUFBRSxJQUFJO1FBQ3ZCLGlCQUFpQixFQUFFLEVBQUU7UUFDckIsT0FBTyxFQUFFLE1BQU07UUFDZixZQUFZLENBQUMsQ0FBZTtZQUMxQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFDRCxVQUFVLENBQUMsS0FBVTtZQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUNELEdBQUcsT0FBTztLQUNYLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxPQUFvQztJQUNoRSxPQUFPO1FBQ0wsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7UUFDNUM7WUFDRSxPQUFPLEVBQUUsc0JBQXNCO1lBQy9CLFVBQVUsRUFBRSx3QkFBd0I7WUFDcEMsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDO1NBQ3JCO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQztZQUMxQixJQUFJLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztZQUN4QixLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUFBfSU5JVElBTElaRVIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgV2ViU29ja2V0SGFuZGxlciB9IGZyb20gJy4vd2Vic29ja2V0LWhhbmRsZXInO1xuaW1wb3J0IHsgVVNFUl9PUFRJT05TLCBOR1hTX1dFQlNPQ0tFVF9PUFRJT05TLCBOZ3hzV2Vic29ja2V0UGx1Z2luT3B0aW9ucyB9IGZyb20gJy4vc3ltYm9scyc7XG5cbmV4cG9ydCBmdW5jdGlvbiDJtXdlYnNvY2tldE9wdGlvbnNGYWN0b3J5KG9wdGlvbnM6IE5neHNXZWJzb2NrZXRQbHVnaW5PcHRpb25zKSB7XG4gIHJldHVybiB7XG4gICAgcmVjb25uZWN0SW50ZXJ2YWw6IDUwMDAsXG4gICAgcmVjb25uZWN0QXR0ZW1wdHM6IDEwLFxuICAgIHR5cGVLZXk6ICd0eXBlJyxcbiAgICBkZXNlcmlhbGl6ZXIoZTogTWVzc2FnZUV2ZW50KSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShlLmRhdGEpO1xuICAgIH0sXG4gICAgc2VyaWFsaXplcih2YWx1ZTogYW55KSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIH0sXG4gICAgLi4ub3B0aW9uc1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gybVnZXRQcm92aWRlcnMob3B0aW9ucz86IE5neHNXZWJzb2NrZXRQbHVnaW5PcHRpb25zKSB7XG4gIHJldHVybiBbXG4gICAgeyBwcm92aWRlOiBVU0VSX09QVElPTlMsIHVzZVZhbHVlOiBvcHRpb25zIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdYU19XRUJTT0NLRVRfT1BUSU9OUyxcbiAgICAgIHVzZUZhY3Rvcnk6IMm1d2Vic29ja2V0T3B0aW9uc0ZhY3RvcnksXG4gICAgICBkZXBzOiBbVVNFUl9PUFRJT05TXVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgICAgdXNlRmFjdG9yeTogKCkgPT4gKCkgPT4ge30sXG4gICAgICBkZXBzOiBbV2ViU29ja2V0SGFuZGxlcl0sXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXTtcbn1cbiJdfQ==
|
package/esm2020/src/symbols.mjs
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { InjectionToken } from '@angular/core';
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
}
|
|
2
|
+
const NG_DEV_MODE = typeof ngDevMode === 'undefined' || ngDevMode;
|
|
3
|
+
export const NGXS_WEBSOCKET_OPTIONS = new InjectionToken(NG_DEV_MODE ? 'NGXS_WEBSOCKET_OPTIONS' : '');
|
|
4
|
+
export const USER_OPTIONS = new InjectionToken(NG_DEV_MODE ? 'USER_OPTIONS' : '');
|
|
6
5
|
/**
|
|
7
6
|
* Action to connect to the websocket. Optionally pass a URL.
|
|
8
7
|
*/
|
|
@@ -63,4 +62,4 @@ export class TypeKeyPropertyMissingError extends Error {
|
|
|
63
62
|
super(`Property ${typeKey} is missing on the socket message`);
|
|
64
63
|
}
|
|
65
64
|
}
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltYm9scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3dlYnNvY2tldC1wbHVnaW4vc3JjL3N5bWJvbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvQyxNQUFNLFdBQVcsR0FBRyxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxDQUFDO0FBRWxFLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksY0FBYyxDQUN0RCxXQUFXLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzVDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBb0RsRjs7R0FFRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFHM0IsWUFBbUIsT0FBb0M7UUFBcEMsWUFBTyxHQUFQLE9BQU8sQ0FBNkI7SUFBRyxDQUFDOztBQUYzQyxxQkFBSSxHQUFHLHFCQUFxQixDQUFDO0FBSy9DOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHFCQUFxQjtJQUdoQyxZQUFtQixPQUFZO1FBQVosWUFBTyxHQUFQLE9BQU8sQ0FBSztJQUFHLENBQUM7O0FBRm5CLDBCQUFJLEdBQUcsMkJBQTJCLENBQUM7QUFLckQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sbUJBQW1COztBQUNkLHdCQUFJLEdBQUcsd0JBQXdCLENBQUM7QUFHbEQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCOztBQUNiLHVCQUFJLEdBQUcsdUJBQXVCLENBQUM7QUFHakQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8scUJBQXFCOztBQUNoQiwwQkFBSSxHQUFHLDBCQUEwQixDQUFDO0FBR3BEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9CQUFvQjtJQUcvQixZQUFtQixPQUFZO1FBQVosWUFBTyxHQUFQLE9BQU8sQ0FBSztJQUFHLENBQUM7O0FBRm5CLHlCQUFJLEdBQUcsMEJBQTBCLENBQUM7QUFLcEQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sMEJBQTBCOztBQUNyQiwrQkFBSSxHQUFHLGdDQUFnQyxDQUFDO0FBRzFEOzs7R0FHRztBQUNILE1BQU0sT0FBTywyQkFBNEIsU0FBUSxLQUFLO0lBQ3BELFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsWUFBWSxPQUFPLG1DQUFtQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZGVjbGFyZSBjb25zdCBuZ0Rldk1vZGU6IGJvb2xlYW47XG5cbmNvbnN0IE5HX0RFVl9NT0RFID0gdHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlO1xuXG5leHBvcnQgY29uc3QgTkdYU19XRUJTT0NLRVRfT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ3hzV2Vic29ja2V0UGx1Z2luT3B0aW9ucz4oXG4gIE5HX0RFVl9NT0RFID8gJ05HWFNfV0VCU09DS0VUX09QVElPTlMnIDogJydcbik7XG5cbmV4cG9ydCBjb25zdCBVU0VSX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW4oTkdfREVWX01PREUgPyAnVVNFUl9PUFRJT05TJyA6ICcnKTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3hzV2Vic29ja2V0UGx1Z2luT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBVUkwgb2YgdGhlIHdlYnNvY2tldC5cbiAgICovXG4gIHVybD86IHN0cmluZztcblxuICAvKipcbiAgICogRWl0aGVyIGEgc2luZ2xlIHByb3RvY29sIHN0cmluZyBvciBhbiBhcnJheSBvZiBwcm90b2NvbCBzdHJpbmdzLlxuICAgKiBUaGVzZSBzdHJpbmdzIGFyZSB1c2VkIHRvIGluZGljYXRlIHN1Yi1wcm90b2NvbHMsIHNvIHRoYXQgYSBzaW5nbGUgc2VydmVyXG4gICAqIGNhbiBpbXBsZW1lbnQgbXVsdGlwbGUgV2ViU29ja2V0IHN1Yi1wcm90b2NvbHMgKGZvciBleGFtcGxlLCB5b3UgbWlnaHQgd2FudCBvbmUgc2VydmVyIHRvIGJlIGFibGVcbiAgICogdG8gaGFuZGxlIGRpZmZlcmVudCB0eXBlcyBvZiBpbnRlcmFjdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpZWQgcHJvdG9jb2wpLlxuICAgKiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHByb3RvY29sIHN0cmluZywgYW4gZW1wdHkgc3RyaW5nIGlzIGFzc3VtZWQuXG4gICAqL1xuICBwcm90b2NvbD86IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBgYmluYXJ5VHlwZWAgcHJvcGVydHkgb2YgdGhlIHVuZGVybHlpbmcgV2ViU29ja2V0LlxuICAgKi9cbiAgYmluYXJ5VHlwZT86ICdibG9iJyB8ICdhcnJheWJ1ZmZlcic7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSBuYW1lIHRvIGRpc3RpZ3VuaXNoIHRoaXMgdHlwZSBmb3IgdGhlIHN0b3JlLlxuICAgKiBEZWZhdWx0OiAndHlwZSdcbiAgICovXG4gIHR5cGVLZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEludGVydmFsIHRvIHRyeSBhbmQgcmVjb25uZWN0LlxuICAgKiBEZWZhdWx0OiA1MDAwXG4gICAqL1xuICByZWNvbm5lY3RJbnRlcnZhbD86IG51bWJlcjtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHJlY29ubmVjdCBhdHRlbXBzLlxuICAgKiBEZWZhdWx0OiAxMFxuICAgKi9cbiAgcmVjb25uZWN0QXR0ZW1wdHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXIgdG8gY2FsbCBiZWZvcmUgc2VuZGluZyBtZXNzYWdlc1xuICAgKiBEZWZhdWx0OiBganNvbi5zdHJpbmdpZnlgXG4gICAqL1xuICBzZXJpYWxpemVyPzogKGRhdGE6IGFueSkgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXNlcmFsaXplciBiZWZvcmUgcHVibGlzaGluZyB0aGUgbWVzc2FnZS5cbiAgICovXG4gIGRlc2VyaWFsaXplcj86IChlOiBNZXNzYWdlRXZlbnQpID0+IGFueTtcbn1cblxuLyoqXG4gKiBBY3Rpb24gdG8gY29ubmVjdCB0byB0aGUgd2Vic29ja2V0LiBPcHRpb25hbGx5IHBhc3MgYSBVUkwuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25uZWN0V2ViU29ja2V0IHtcbiAgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW1dlYlNvY2tldF0gQ29ubmVjdCc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHBheWxvYWQ/OiBOZ3hzV2Vic29ja2V0UGx1Z2luT3B0aW9ucykge31cbn1cblxuLyoqXG4gKiBBY3Rpb24gdHJpZ2dlcmVkIHdoZW4gYSBlcnJvciBvY3VycnNcbiAqL1xuZXhwb3J0IGNsYXNzIFdlYnNvY2tldE1lc3NhZ2VFcnJvciB7XG4gIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1tXZWJTb2NrZXRdIE1lc3NhZ2UgRXJyb3InO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXlsb2FkOiBhbnkpIHt9XG59XG5cbi8qKlxuICogQWN0aW9uIHRvIGRpc2Nvbm5lY3QgdGhlIHdlYnNvY2tldC5cbiAqL1xuZXhwb3J0IGNsYXNzIERpc2Nvbm5lY3RXZWJTb2NrZXQge1xuICBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbV2ViU29ja2V0XSBEaXNjb25uZWN0Jztcbn1cblxuLyoqXG4gKiBBY3Rpb24gdHJpZ2dlcmVkIHdoZW4gd2Vic29ja2V0IGlzIGNvbm5lY3RlZFxuICovXG5leHBvcnQgY2xhc3MgV2ViU29ja2V0Q29ubmVjdGVkIHtcbiAgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW1dlYlNvY2tldF0gQ29ubmVjdGVkJztcbn1cblxuLyoqXG4gKiBBY3Rpb24gdHJpZ2dlcmVkIHdoZW4gd2Vic29ja2V0IGlzIGRpc2Nvbm5lY3RlZFxuICovXG5leHBvcnQgY2xhc3MgV2ViU29ja2V0RGlzY29ubmVjdGVkIHtcbiAgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW1dlYlNvY2tldF0gRGlzY29ubmVjdGVkJztcbn1cblxuLyoqXG4gKiBBY3Rpb24gdG8gc2VuZCB0byB0aGUgc2VydmVyLlxuICovXG5leHBvcnQgY2xhc3MgU2VuZFdlYlNvY2tldE1lc3NhZ2Uge1xuICBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbV2ViU29ja2V0XSBTZW5kIE1lc3NhZ2UnO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXlsb2FkOiBhbnkpIHt9XG59XG5cbi8qKlxuICogQWN0aW9uIGRpc3BhdGNoZWQgd2hlbiB0aGUgdXNlciB0cmllcyB0byBjb25uZWN0IGlmIHRoZSBjb25uZWN0aW9uIGFscmVhZHkgZXhpc3RzLlxuICovXG5leHBvcnQgY2xhc3MgV2ViU29ja2V0Q29ubmVjdGlvblVwZGF0ZWQge1xuICBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbV2ViU29ja2V0XSBDb25uZWN0aW9uIFVwZGF0ZWQnO1xufVxuXG4vKipcbiAqIFRoaXMgZXJyb3IgaXMgdGhyb3duIHdoZXJlIHRoZXJlIGlzIG5vIGB0eXBlYCAob3IgY3VzdG9tIGB0eXBlS2V5YCkgcHJvcGVydHlcbiAqIG9uIHRoZSBtZXNzYWdlIHRoYXQgY2FtZSBmcm9tIHRoZSBzZXJ2ZXIgc2lkZSBzb2NrZXRcbiAqL1xuZXhwb3J0IGNsYXNzIFR5cGVLZXlQcm9wZXJ0eU1pc3NpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IodHlwZUtleTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYFByb3BlcnR5ICR7dHlwZUtleX0gaXMgbWlzc2luZyBvbiB0aGUgc29ja2V0IG1lc3NhZ2VgKTtcbiAgfVxufVxuIl19
|
|
@@ -1,142 +1,148 @@
|
|
|
1
|
-
import { Injectable, Inject } from '@angular/core';
|
|
1
|
+
import { Injectable, Inject, NgZone } from '@angular/core';
|
|
2
2
|
import { Actions, Store, getValue, ofActionDispatched } from '@ngxs/store';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { ReplaySubject, Subject, fromEvent } from 'rxjs';
|
|
4
|
+
import { takeUntil } from 'rxjs/operators';
|
|
5
5
|
import { ConnectWebSocket, DisconnectWebSocket, SendWebSocketMessage, NGXS_WEBSOCKET_OPTIONS, WebsocketMessageError, WebSocketDisconnected, TypeKeyPropertyMissingError, WebSocketConnectionUpdated, WebSocketConnected } from './symbols';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
import * as i1 from "@ngxs/store";
|
|
8
8
|
export class WebSocketHandler {
|
|
9
|
-
constructor(
|
|
10
|
-
this.
|
|
11
|
-
this.
|
|
12
|
-
this.
|
|
13
|
-
this.
|
|
14
|
-
this.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
serializer: this.options.serializer,
|
|
20
|
-
deserializer: this.options.deserializer,
|
|
21
|
-
closeObserver: {
|
|
22
|
-
next: () => {
|
|
23
|
-
// ATTENTION!
|
|
24
|
-
// See https://github.com/ReactiveX/rxjs/blob/master/src/internal/observable/dom/WebSocketSubject.ts#L340
|
|
25
|
-
// RxJS socket emits `onComplete` event only if `event.wasClean` is truthy
|
|
26
|
-
// and doesn't complete socket subject if it's falsy
|
|
27
|
-
this.disconnect();
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
openObserver: {
|
|
31
|
-
next: () => this.store.dispatch(new WebSocketConnected())
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
this.typeKey = this.options.typeKey;
|
|
35
|
-
this.subscription = new Subscription();
|
|
36
|
-
this.setupActionsListeners();
|
|
9
|
+
constructor(_store, _ngZone, _actions$, _options) {
|
|
10
|
+
this._store = _store;
|
|
11
|
+
this._ngZone = _ngZone;
|
|
12
|
+
this._actions$ = _actions$;
|
|
13
|
+
this._options = _options;
|
|
14
|
+
this._socket = null;
|
|
15
|
+
this._socketClosed$ = new Subject();
|
|
16
|
+
this._typeKey = this._options.typeKey;
|
|
17
|
+
this._destroy$ = new ReplaySubject(1);
|
|
18
|
+
this._setupActionsListeners();
|
|
37
19
|
}
|
|
38
20
|
ngOnDestroy() {
|
|
39
|
-
this.
|
|
40
|
-
this.
|
|
21
|
+
this._disconnect(/* forcelyCloseSocket */ true);
|
|
22
|
+
this._destroy$.next();
|
|
41
23
|
}
|
|
42
|
-
|
|
43
|
-
this.
|
|
24
|
+
_setupActionsListeners() {
|
|
25
|
+
this._actions$
|
|
26
|
+
.pipe(ofActionDispatched(ConnectWebSocket), takeUntil(this._destroy$))
|
|
27
|
+
.subscribe(({ payload }) => {
|
|
44
28
|
this.connect(payload);
|
|
45
|
-
})
|
|
46
|
-
this.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
29
|
+
});
|
|
30
|
+
this._actions$
|
|
31
|
+
.pipe(ofActionDispatched(DisconnectWebSocket), takeUntil(this._destroy$))
|
|
32
|
+
.subscribe(() => {
|
|
33
|
+
this._disconnect(/* forcelyCloseSocket */ true);
|
|
34
|
+
});
|
|
35
|
+
this._actions$
|
|
36
|
+
.pipe(ofActionDispatched(SendWebSocketMessage), takeUntil(this._destroy$))
|
|
37
|
+
.subscribe(({ payload }) => {
|
|
50
38
|
this.send(payload);
|
|
51
|
-
})
|
|
39
|
+
});
|
|
52
40
|
}
|
|
53
41
|
connect(options) {
|
|
54
|
-
this.
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
42
|
+
if (this._socket) {
|
|
43
|
+
this._closeConnection(/* forcelyCloseSocket */ true);
|
|
44
|
+
this._store.dispatch(new WebSocketConnectionUpdated());
|
|
45
|
+
}
|
|
46
|
+
// TODO(arturovt): we should not override default config values because this breaks support for having multiple socket connections.
|
|
58
47
|
if (options) {
|
|
59
|
-
|
|
48
|
+
if (options.serializer) {
|
|
49
|
+
this._options.serializer = options.serializer;
|
|
50
|
+
}
|
|
51
|
+
if (options.deserializer) {
|
|
52
|
+
this._options.deserializer = options.deserializer;
|
|
53
|
+
}
|
|
60
54
|
}
|
|
61
|
-
this.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
55
|
+
this._ngZone.runOutsideAngular(() => {
|
|
56
|
+
// We either use options provided in the `ConnectWebSocket` action
|
|
57
|
+
// or fallback to default config values.
|
|
58
|
+
const url = options?.url || this._options.url;
|
|
59
|
+
const protocol = options?.protocol || this._options.protocol;
|
|
60
|
+
const binaryType = options?.binaryType || this._options.binaryType;
|
|
61
|
+
const socket = (this._socket = protocol
|
|
62
|
+
? new WebSocket(url, protocol)
|
|
63
|
+
: new WebSocket(url));
|
|
64
|
+
if (binaryType) {
|
|
65
|
+
socket.binaryType = binaryType;
|
|
66
|
+
}
|
|
67
|
+
fromEvent(socket, 'open')
|
|
68
|
+
.pipe(takeUntil(this._socketClosed$))
|
|
69
|
+
.subscribe(() => this._store.dispatch(new WebSocketConnected()));
|
|
70
|
+
fromEvent(socket, 'message')
|
|
71
|
+
.pipe(takeUntil(this._socketClosed$))
|
|
72
|
+
.subscribe(event => {
|
|
73
|
+
const message = this._options.deserializer(event);
|
|
74
|
+
const type = getValue(message, this._typeKey);
|
|
65
75
|
if (!type) {
|
|
66
|
-
throw new TypeKeyPropertyMissingError(this.
|
|
76
|
+
throw new TypeKeyPropertyMissingError(this._typeKey);
|
|
67
77
|
}
|
|
68
|
-
this.
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
78
|
+
this._store.dispatch({ ...message, type });
|
|
79
|
+
});
|
|
80
|
+
fromEvent(socket, 'error')
|
|
81
|
+
.pipe(takeUntil(this._socketClosed$))
|
|
82
|
+
.subscribe(error => {
|
|
83
|
+
// The error event indicates that an error has occurred during the
|
|
84
|
+
// WebSocket communication, and it is often appropriate to close the
|
|
85
|
+
// WebSocket connection when such an error occurs.
|
|
86
|
+
// We need to call `_disconnect()` after the error event has been fired.
|
|
87
|
+
// This ensures that the WebSocket connection is properly closed to prevent
|
|
88
|
+
// potential resource leaks.
|
|
89
|
+
this._disconnect(/* forcelyCloseSocket */ true);
|
|
90
|
+
this._store.dispatch(new WebsocketMessageError(error));
|
|
91
|
+
});
|
|
92
|
+
fromEvent(socket, 'close')
|
|
93
|
+
.pipe(takeUntil(this._socketClosed$))
|
|
94
|
+
.subscribe(event => {
|
|
95
|
+
if (event.wasClean) {
|
|
96
|
+
// It is not necessary to call `socket.close()` after the `close` event
|
|
97
|
+
// has been fired. In fact, calling `socket.close()` within the `close`
|
|
98
|
+
// event handler or immediately after the event has been fired can lead
|
|
99
|
+
// to unexpected behavior.
|
|
100
|
+
this._disconnect(/* forcelyCloseSocket */ false);
|
|
73
101
|
}
|
|
74
102
|
else {
|
|
75
|
-
|
|
103
|
+
// If the WebSocket `close` event has been fired and its `wasClean`
|
|
104
|
+
// property is falsy, it indicates that the WebSocket connection was
|
|
105
|
+
// closed in an unexpected or abnormal manner.
|
|
106
|
+
// We should call `socket.close()` in this scenario, we can ensure that
|
|
107
|
+
// the WebSocket connection is properly closed.
|
|
108
|
+
this._disconnect(/* forcelyCloseSocket */ true);
|
|
109
|
+
this._store.dispatch(new WebsocketMessageError(event));
|
|
76
110
|
}
|
|
77
|
-
}
|
|
111
|
+
});
|
|
78
112
|
});
|
|
79
113
|
}
|
|
80
|
-
|
|
81
|
-
if (this.
|
|
82
|
-
this.
|
|
83
|
-
this.
|
|
114
|
+
_disconnect(forcelyCloseSocket) {
|
|
115
|
+
if (this._socket) {
|
|
116
|
+
this._closeConnection(forcelyCloseSocket);
|
|
117
|
+
this._store.dispatch(new WebSocketDisconnected());
|
|
84
118
|
}
|
|
85
119
|
}
|
|
86
120
|
send(data) {
|
|
87
|
-
if (!this.
|
|
121
|
+
if (!this._socket) {
|
|
88
122
|
throw new Error('You must connect to the socket before sending any data');
|
|
89
123
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Don't enlarge the `connect` method
|
|
94
|
-
*/
|
|
95
|
-
mergeConfigWithOptions(options) {
|
|
96
|
-
if (options.url) {
|
|
97
|
-
this.config.url = options.url;
|
|
98
|
-
}
|
|
99
|
-
if (options.serializer) {
|
|
100
|
-
this.config.serializer = options.serializer;
|
|
124
|
+
try {
|
|
125
|
+
this._socket.send(this._options.serializer(data));
|
|
101
126
|
}
|
|
102
|
-
|
|
103
|
-
this.
|
|
127
|
+
catch (error) {
|
|
128
|
+
this._store.dispatch(new WebsocketMessageError(error));
|
|
104
129
|
}
|
|
105
130
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
* then the previous subscription will still live in the memory
|
|
110
|
-
* to prevent such behavior - we close the previous connection if it exists
|
|
111
|
-
*/
|
|
112
|
-
updateConnection() {
|
|
113
|
-
if (this.socket) {
|
|
114
|
-
this.closeConnection();
|
|
115
|
-
this.store.dispatch(new WebSocketConnectionUpdated());
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Used in many places so it's better to move the code into function
|
|
120
|
-
*/
|
|
121
|
-
dispatchWebSocketDisconnected() {
|
|
122
|
-
this.store.dispatch(new WebSocketDisconnected());
|
|
123
|
-
}
|
|
124
|
-
closeConnection() {
|
|
125
|
-
// `socket.complete()` closes the connection
|
|
126
|
-
// also it doesn't invoke the `onComplete` callback that we passed
|
|
127
|
-
// into `socket.subscribe(...)`
|
|
128
|
-
if (this.socket !== null) {
|
|
129
|
-
this.socket.complete();
|
|
130
|
-
this.socket = null;
|
|
131
|
+
_closeConnection(forcelyCloseSocket) {
|
|
132
|
+
if (forcelyCloseSocket) {
|
|
133
|
+
this._socket?.close();
|
|
131
134
|
}
|
|
135
|
+
this._socket = null;
|
|
136
|
+
this._socketClosed$.next();
|
|
132
137
|
}
|
|
133
138
|
}
|
|
134
|
-
/** @nocollapse */ WebSocketHandler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: WebSocketHandler, deps: [{ token: i1.Store }, { token: i1.Actions }, { token: NGXS_WEBSOCKET_OPTIONS }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
135
|
-
/** @nocollapse */ WebSocketHandler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: WebSocketHandler });
|
|
139
|
+
/** @nocollapse */ WebSocketHandler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: WebSocketHandler, deps: [{ token: i1.Store }, { token: i0.NgZone }, { token: i1.Actions }, { token: NGXS_WEBSOCKET_OPTIONS }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
140
|
+
/** @nocollapse */ WebSocketHandler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: WebSocketHandler, providedIn: 'root' });
|
|
136
141
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: WebSocketHandler, decorators: [{
|
|
137
|
-
type: Injectable
|
|
138
|
-
|
|
142
|
+
type: Injectable,
|
|
143
|
+
args: [{ providedIn: 'root' }]
|
|
144
|
+
}], ctorParameters: function () { return [{ type: i1.Store }, { type: i0.NgZone }, { type: i1.Actions }, { type: undefined, decorators: [{
|
|
139
145
|
type: Inject,
|
|
140
146
|
args: [NGXS_WEBSOCKET_OPTIONS]
|
|
141
147
|
}] }]; } });
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy93ZWJzb2NrZXQtcGx1Z2luL3NyYy93ZWJzb2NrZXQtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQTBCLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUUsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUV0QixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLDJCQUEyQixFQUMzQiwwQkFBMEIsRUFDMUIsa0JBQWtCLEVBQ25CLE1BQU0sV0FBVyxDQUFDOzs7QUFHbkIsTUFBTSxPQUFPLGdCQUFnQjtJQTRCM0IsWUFDVSxLQUFZLEVBQ1osUUFBaUIsRUFDZSxPQUFtQztRQUZuRSxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQ1osYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNlLFlBQU8sR0FBUCxPQUFPLENBQTRCO1FBOUJyRSxXQUFNLEdBQWlDLElBQUksQ0FBQztRQUU1QyxXQUFNLEdBQWdDO1lBQzVDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUk7WUFDdEIsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtZQUMvQiwyREFBMkQ7WUFDM0QsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVTtZQUNuQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO1lBQ25DLFlBQVksRUFBRSxJQUFJ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QyxRQUFRLENBQUMsSUFBSSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLGVBQWU7UUFDckIsNENBQTRDO1FBQzVDLGtFQUFrRTtRQUNsRSwrQkFBK0I7UUFDL0IsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRTtZQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ3BCO0lBQ0gsQ0FBQzs7Z0lBdkpVLGdCQUFnQiw4REErQmpCLHNCQUFzQjtvSUEvQnJCLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVOzswQkFnQ04sTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9ucywgU3RvcmUsIGdldFZhbHVlLCBvZkFjdGlvbkRpc3BhdGNoZWQgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgV2ViU29ja2V0U3ViamVjdCwgV2ViU29ja2V0U3ViamVjdENvbmZpZyB9IGZyb20gJ3J4anMvd2ViU29ja2V0JztcblxuaW1wb3J0IHtcbiAgQ29ubmVjdFdlYlNvY2tldCxcbiAgRGlzY29ubmVjdFdlYlNvY2tldCxcbiAgU2VuZFdlYlNvY2tldE1lc3NhZ2UsXG4gIE5HWFNfV0VCU09DS0VUX09QVElPTlMsXG4gIE5neHNXZWJzb2NrZXRQbHVnaW5PcHRpb25zLFxuICBXZWJzb2NrZXRNZXNzYWdlRXJyb3IsXG4gIFdlYlNvY2tldERpc2Nvbm5lY3RlZCxcbiAgVHlwZUtleVByb3BlcnR5TWlzc2luZ0Vycm9yLFxuICBXZWJTb2NrZXRDb25uZWN0aW9uVXBkYXRlZCxcbiAgV2ViU29ja2V0Q29ubmVjdGVkXG59IGZyb20gJy4vc3ltYm9scyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBXZWJTb2NrZXRIYW5kbGVyIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBzb2NrZXQ6IFdlYlNvY2tldFN1YmplY3Q8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgY29uZmlnOiBXZWJTb2NrZXRTdWJqZWN0Q29uZmlnPGFueT4gPSB7XG4gICAgdXJsOiB0aGlzLm9wdGlvbnMudXJsISxcbiAgICBwcm90b2NvbDogdGhpcy5vcHRpb25zLnByb3RvY29sLFxuICAgIC8vIERlZmF1bHQgYmluYXJ5IHR5cGUgaXMgYGJsb2JgIGZvciB0aGUgZ2xvYmFsIGBXZWJTb2NrZXRgXG4gICAgYmluYXJ5VHlwZTogdGhpcy5vcHRpb25zLmJpbmFyeVR5cGUsXG4gICAgc2VyaWFsaXplcjogdGhpcy5vcHRpb25zLnNlcmlhbGl6ZXIsXG4gICAgZGVzZXJpYWxpemVyOiB0aGlzLm9wdGlvbnMuZGVzZXJpYWxpemVyLFxuICAgIGNsb3NlT2JzZXJ2ZXI6IHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgLy8gQVRURU5USU9OIVxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL1JlYWN0aXZlWC9yeGpzL2Jsb2IvbWFzdGVyL3NyYy9pbnRlcm5hbC9vYnNlcnZhYmxlL2RvbS9XZWJTb2NrZXRTdWJqZWN0LnRzI0wzNDBcbiAgICAgICAgLy8gUnhKUyBzb2NrZXQgZW1pdHMgYG9uQ29tcGxldGVgIGV2ZW50IG9ubHkgaWYgYGV2ZW50Lndhc0NsZWFuYCBpcyB0cnV0aHlcbiAgICAgICAgLy8gYW5kIGRvZXNuJ3QgY29tcGxldGUgc29ja2V0IHN1YmplY3QgaWYgaXQncyBmYWxzeVxuICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9wZW5PYnNlcnZlcjoge1xuICAgICAgbmV4dDogKCkgPT4gdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgV2ViU29ja2V0Q29ubmVjdGVkKCkpXG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgdHlwZUtleSA9IHRoaXMub3B0aW9ucy50eXBlS2V5ITtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcbiAgICBwcml2YXRlIGFjdGlvbnMkOiBBY3Rpb25zLFxuICAgIEBJbmplY3QoTkdYU19XRUJTT0NLRVRfT1BUSU9OUykgcHJpdmF0ZSBvcHRpb25zOiBOZ3hzV2Vic29ja2V0UGx1Z2luT3B0aW9uc1xuICApIHtcbiAgICB0aGlzLnNldHVwQWN0aW9uc0xpc3RlbmVycygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUNvbm5lY3Rpb24oKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEFjdGlvbnNMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5hY3Rpb25zJC5waXBlKG9mQWN0aW9uRGlzcGF0Y2hlZChDb25uZWN0V2ViU29ja2V0KSkuc3Vic2NyaWJlKCh7IHBheWxvYWQgfSkgPT4ge1xuICAgICAgICB0aGlzLmNvbm5lY3QocGF5bG9hZCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmFjdGlvbnMkLnBpcGUob2ZBY3Rpb25EaXNwYXRjaGVkKERpc2Nvbm5lY3RXZWJTb2NrZXQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuYWN0aW9ucyQucGlwZShvZkFjdGlvbkRpc3BhdGNoZWQoU2VuZFdlYlNvY2tldE1lc3NhZ2UpKS5zdWJzY3JpYmUoKHsgcGF5bG9hZCB9KSA9PiB7XG4gICAgICAgIHRoaXMuc2VuZChwYXlsb2FkKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY29ubmVjdChvcHRpb25zPzogTmd4c1dlYnNvY2tldFBsdWdpbk9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNvbm5lY3Rpb24oKTtcblxuICAgIC8vIFVzZXJzIGNhbiBwYXNzIHRoZSBvcHRpb25zIGluIHRoZSBjb25uZWN0IG1ldGhvZCBzb1xuICAgIC8vIGlmIG9wdGlvbnMgYXJlbid0IGF2YWlsYWJsZSBhdCBESSBib290c3RyYXAgdGhleSBoYXZlIGFjY2Vzc1xuICAgIC8vIHRvIHBhc3MgdGhlbSBoZXJlXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMubWVyZ2VDb25maWdXaXRoT3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXRTdWJqZWN0KHRoaXMuY29uZmlnKTtcblxuICAgIHRoaXMuc29ja2V0LnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAobWVzc2FnZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBnZXRWYWx1ZShtZXNzYWdlLCB0aGlzLnR5cGVLZXkpO1xuICAgICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUtleVByb3BlcnR5TWlzc2luZ0Vycm9yKHRoaXMudHlwZUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaCh7IC4uLm1lc3NhZ2UsIHR5cGUgfSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIENsb3NlRXZlbnQpIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoV2ViU29ja2V0RGlzY29ubmVjdGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgV2Vic29ja2V0TWVzc2FnZUVycm9yKGVycm9yKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzY29ubmVjdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zb2NrZXQpIHtcbiAgICAgIHRoaXMuY2xvc2VDb25uZWN0aW9uKCk7XG4gICAgICB0aGlzLmRpc3BhdGNoV2ViU29ja2V0RGlzY29ubmVjdGVkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZW5kKGRhdGE6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zb2NrZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgY29ubmVjdCB0byB0aGUgc29ja2V0IGJlZm9yZSBzZW5kaW5nIGFueSBkYXRhJyk7XG4gICAgfVxuXG4gICAgdGhpcy5zb2NrZXQubmV4dChkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEb24ndCBlbmxhcmdlIHRoZSBgY29ubmVjdGAgbWV0aG9kXG4gICAqL1xuICBwcml2YXRlIG1lcmdlQ29uZmlnV2l0aE9wdGlvbnMob3B0aW9uczogTmd4c1dlYnNvY2tldFBsdWdpbk9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucy51cmwpIHtcbiAgICAgIHRoaXMuY29uZmlnLnVybCA9IG9wdGlvbnMudXJsO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNlcmlhbGl6ZXIpIHtcbiAgICAgIHRoaXMuY29uZmlnLnNlcmlhbGl6ZXIgPSBvcHRpb25zLnNlcmlhbGl6ZXI7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGVzZXJpYWxpemVyKSB7XG4gICAgICB0aGlzLmNvbmZpZy5kZXNlcmlhbGl6ZXIgPSBvcHRpb25zLmRlc2VyaWFsaXplcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG8gZW5zdXJlIHdlIGRvbid0IGhhdmUgYW55IG1lbW9yeSBsZWFrc1xuICAgKiBlLmcuIGlmIHRoZSB1c2VyIG9jY2FzaW9uYWxseSBkaXNwYXRjaGVkIGBDb25uZWN0V2ViU29ja2V0YCB0d2ljZVxuICAgKiB0aGVuIHRoZSBwcmV2aW91cyBzdWJzY3JpcHRpb24gd2lsbCBzdGlsbCBsaXZlIGluIHRoZSBtZW1vcnlcbiAgICogdG8gcHJldmVudCBzdWNoIGJlaGF2aW9yIC0gd2UgY2xvc2UgdGhlIHByZXZpb3VzIGNvbm5lY3Rpb24gaWYgaXQgZXhpc3RzXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUNvbm5lY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgICB0aGlzLmNsb3NlQ29ubmVjdGlvbigpO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgV2ViU29ja2V0Q29ubmVjdGlvblVwZGF0ZWQoKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgaW4gbWFueSBwbGFjZXMgc28gaXQncyBiZXR0ZXIgdG8gbW92ZSB0aGUgY29kZSBpbnRvIGZ1bmN0aW9uXG4gICAqL1xuICBwcml2YXRlIGRpc3BhdGNoV2ViU29ja2V0RGlzY29ubmVjdGVkKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFdlYlNvY2tldERpc2Nvbm5lY3RlZCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VDb25uZWN0aW9uKCk6IHZvaWQge1xuICAgIC8vIGBzb2NrZXQuY29tcGxldGUoKWAgY2xvc2VzIHRoZSBjb25uZWN0aW9uXG4gICAgLy8gYWxzbyBpdCBkb2Vzbid0IGludm9rZSB0aGUgYG9uQ29tcGxldGVgIGNhbGxiYWNrIHRoYXQgd2UgcGFzc2VkXG4gICAgLy8gaW50byBgc29ja2V0LnN1YnNjcmliZSguLi4pYFxuICAgIGlmICh0aGlzLnNvY2tldCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5zb2NrZXQuY29tcGxldGUoKTtcbiAgICAgIHRoaXMuc29ja2V0ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy93ZWJzb2NrZXQtcGx1Z2luL3NyYy93ZWJzb2NrZXQtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBYSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUV0QixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLDJCQUEyQixFQUMzQiwwQkFBMEIsRUFDMUIsa0JBQWtCLEVBQ25CLE1BQU0sV0FBVyxDQUFDOzs7QUFHbkIsTUFBTSxPQUFPLGdCQUFnQjtJQVMzQixZQUNVLE1BQWEsRUFDYixPQUFlLEVBQ2YsU0FBa0IsRUFDYyxRQUFvQztRQUhwRSxXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQ2IsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGNBQVMsR0FBVCxTQUFTLENBQVM7UUFDYyxhQUFRLEdBQVIsUUFBUSxDQUE0QjtRQVp0RSxZQUFPLEdBQXFCLElBQUksQ0FBQztRQUV4QixtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFckMsYUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBUSxDQUFDO1FBRWxDLGNBQVMsR0FBRyxJQUFJLGFBQWEsQ0FBTyxDQUFDLENBQUMsQ0FBQztRQVF0RCxJQUFJLENBQUMsc0JBQXNCLEVB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QUFRLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3hEO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLGtCQUEyQjtRQUNsRCxJQUFJLGtCQUFrQixFQUFFO1lBQ3RCLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDdkI7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7O2dJQXRKVSxnQkFBZ0Isb0ZBYWpCLHNCQUFzQjtvSUFickIsZ0JBQWdCLGNBREgsTUFBTTsyRkFDbkIsZ0JBQWdCO2tCQUQ1QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBYzdCLE1BQU07MkJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBPbkRlc3Ryb3ksIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9ucywgU3RvcmUsIGdldFZhbHVlLCBvZkFjdGlvbkRpc3BhdGNoZWQgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgQ29ubmVjdFdlYlNvY2tldCxcbiAgRGlzY29ubmVjdFdlYlNvY2tldCxcbiAgU2VuZFdlYlNvY2tldE1lc3NhZ2UsXG4gIE5HWFNfV0VCU09DS0VUX09QVElPTlMsXG4gIE5neHNXZWJzb2NrZXRQbHVnaW5PcHRpb25zLFxuICBXZWJzb2NrZXRNZXNzYWdlRXJyb3IsXG4gIFdlYlNvY2tldERpc2Nvbm5lY3RlZCxcbiAgVHlwZUtleVByb3BlcnR5TWlzc2luZ0Vycm9yLFxuICBXZWJTb2NrZXRDb25uZWN0aW9uVXBkYXRlZCxcbiAgV2ViU29ja2V0Q29ubmVjdGVkXG59IGZyb20gJy4vc3ltYm9scyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgV2ViU29ja2V0SGFuZGxlciBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX3NvY2tldDogV2ViU29ja2V0IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc29ja2V0Q2xvc2VkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdHlwZUtleSA9IHRoaXMuX29wdGlvbnMudHlwZUtleSE7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBuZXcgUmVwbGF5U3ViamVjdDx2b2lkPigxKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9zdG9yZTogU3RvcmUsXG4gICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBfYWN0aW9ucyQ6IEFjdGlvbnMsXG4gICAgQEluamVjdChOR1hTX1dFQlNPQ0tFVF9PUFRJT05TKSBwcml2YXRlIF9vcHRpb25zOiBOZ3hzV2Vic29ja2V0UGx1Z2luT3B0aW9uc1xuICApIHtcbiAgICB0aGlzLl9zZXR1cEFjdGlvbnNMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc2Nvbm5lY3QoLyogZm9yY2VseUNsb3NlU29ja2V0ICovIHRydWUpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwQWN0aW9uc0xpc3RlbmVycygpOiB2b2lkIHtcbiAgICB0aGlzLl9hY3Rpb25zJFxuICAgICAgLnBpcGUob2ZBY3Rpb25EaXNwYXRjaGVkKENvbm5lY3RXZWJTb2NrZXQpLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoeyBwYXlsb2FkIH0pID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0KHBheWxvYWQpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9hY3Rpb25zJFxuICAgICAgLnBpcGUob2ZBY3Rpb25EaXNwYXRjaGVkKERpc2Nvbm5lY3RXZWJTb2NrZXQpLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2Rpc2Nvbm5lY3QoLyogZm9yY2VseUNsb3NlU29ja2V0ICovIHRydWUpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9hY3Rpb25zJFxuICAgICAgLnBpcGUob2ZBY3Rpb25EaXNwYXRjaGVkKFNlbmRXZWJTb2NrZXRNZXNzYWdlKSwgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgcGF5bG9hZCB9KSA9PiB7XG4gICAgICAgIHRoaXMuc2VuZChwYXlsb2FkKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25uZWN0KG9wdGlvbnM/OiBOZ3hzV2Vic29ja2V0UGx1Z2luT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zb2NrZXQpIHtcbiAgICAgIHRoaXMuX2Nsb3NlQ29ubmVjdGlvbigvKiBmb3JjZWx5Q2xvc2VTb2NrZXQgKi8gdHJ1ZSk7XG4gICAgICB0aGlzLl9zdG9yZS5kaXNwYXRjaChuZXcgV2ViU29ja2V0Q29ubmVjdGlvblVwZGF0ZWQoKSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETyhhcnR1cm92dCk6IHdlIHNob3VsZCBub3Qgb3ZlcnJpZGUgZGVmYXVsdCBjb25maWcgdmFsdWVzIGJlY2F1c2UgdGhpcyBicmVha3Mgc3VwcG9ydCBmb3IgaGF2aW5nIG11bHRpcGxlIHNvY2tldCBjb25uZWN0aW9ucy5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuc2VyaWFsaXplcikge1xuICAgICAgICB0aGlzLl9vcHRpb25zLnNlcmlhbGl6ZXIgPSBvcHRpb25zLnNlcmlhbGl6ZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmRlc2VyaWFsaXplcikge1xuICAgICAgICB0aGlzLl9vcHRpb25zLmRlc2VyaWFsaXplciA9IG9wdGlvbnMuZGVzZXJpYWxpemVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAvLyBXZSBlaXRoZXIgdXNlIG9wdGlvbnMgcHJvdmlkZWQgaW4gdGhlIGBDb25uZWN0V2ViU29ja2V0YCBhY3Rpb25cbiAgICAgIC8vIG9yIGZhbGxiYWNrIHRvIGRlZmF1bHQgY29uZmlnIHZhbHVlcy5cbiAgICAgIGNvbnN0IHVybCA9IG9wdGlvbnM/LnVybCB8fCB0aGlzLl9vcHRpb25zLnVybCE7XG4gICAgICBjb25zdCBwcm90b2NvbCA9IG9wdGlvbnM/LnByb3RvY29sIHx8IHRoaXMuX29wdGlvbnMucHJvdG9jb2w7XG4gICAgICBjb25zdCBiaW5hcnlUeXBlID0gb3B0aW9ucz8uYmluYXJ5VHlwZSB8fCB0aGlzLl9vcHRpb25zLmJpbmFyeVR5cGU7XG5cbiAgICAgIGNvbnN0IHNvY2tldCA9ICh0aGlzLl9zb2NrZXQgPSBwcm90b2NvbFxuICAgICAgICA/IG5ldyBXZWJTb2NrZXQodXJsLCBwcm90b2NvbClcbiAgICAgICAgOiBuZXcgV2ViU29ja2V0KHVybCkpO1xuXG4gICAgICBpZiAoYmluYXJ5VHlwZSkge1xuICAgICAgICBzb2NrZXQuYmluYXJ5VHlwZSA9IGJpbmFyeVR5cGU7XG4gICAgICB9XG5cbiAgICAgIGZyb21FdmVudChzb2NrZXQsICdvcGVuJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3NvY2tldENsb3NlZCQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3N0b3JlLmRpc3BhdGNoKG5ldyBXZWJTb2NrZXRDb25uZWN0ZWQoKSkpO1xuXG4gICAgICBmcm9tRXZlbnQ8TWVzc2FnZUV2ZW50Pihzb2NrZXQsICdtZXNzYWdlJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3NvY2tldENsb3NlZCQpKVxuICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5fb3B0aW9ucy5kZXNlcmlhbGl6ZXIhKGV2ZW50KTtcbiAgICAgICAgICBjb25zdCB0eXBlID0gZ2V0VmFsdWUobWVzc2FnZSwgdGhpcy5fdHlwZUtleSk7XG4gICAgICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUtleVByb3BlcnR5TWlzc2luZ0Vycm9yKHRoaXMuX3R5cGVLZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9zdG9yZS5kaXNwYXRjaCh7IC4uLm1lc3NhZ2UsIHR5cGUgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICBmcm9tRXZlbnQoc29ja2V0LCAnZXJyb3InKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fc29ja2V0Q2xvc2VkJCkpXG4gICAgICAgIC5zdWJzY3JpYmUoZXJyb3IgPT4ge1xuICAgICAgICAgIC8vIFRoZSBlcnJvciBldmVudCBpbmRpY2F0ZXMgdGhhdCBhbiBlcnJvciBoYXMgb2NjdXJyZWQgZHVyaW5nIHRoZVxuICAgICAgICAgIC8vIFdlYlNvY2tldCBjb21tdW5pY2F0aW9uLCBhbmQgaXQgaXMgb2Z0ZW4gYXBwcm9wcmlhdGUgdG8gY2xvc2UgdGhlXG4gICAgICAgICAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gd2hlbiBzdWNoIGFuIGVycm9yIG9jY3Vycy5cbiAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNhbGwgYF9kaXNjb25uZWN0KClgIGFmdGVyIHRoZSBlcnJvciBldmVudCBoYXMgYmVlbiBmaXJlZC5cbiAgICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgcHJvcGVybHkgY2xvc2VkIHRvIHByZXZlbnRcbiAgICAgICAgICAvLyBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MuXG4gICAgICAgICAgdGhpcy5fZGlzY29ubmVjdCgvKiBmb3JjZWx5Q2xvc2VTb2NrZXQgKi8gdHJ1ZSk7XG4gICAgICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2gobmV3IFdlYnNvY2tldE1lc3NhZ2VFcnJvcihlcnJvcikpO1xuICAgICAgICB9KTtcblxuICAgICAgZnJvbUV2ZW50PENsb3NlRXZlbnQ+KHNvY2tldCwgJ2Nsb3NlJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3NvY2tldENsb3NlZCQpKVxuICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQud2FzQ2xlYW4pIHtcbiAgICAgICAgICAgIC8vIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY2FsbCBgc29ja2V0LmNsb3NlKClgIGFmdGVyIHRoZSBgY2xvc2VgIGV2ZW50XG4gICAgICAgICAgICAvLyBoYXMgYmVlbiBmaXJlZC4gSW4gZmFjdCwgY2FsbGluZyBgc29ja2V0LmNsb3NlKClgIHdpdGhpbiB0aGUgYGNsb3NlYFxuICAgICAgICAgICAgLy8gZXZlbnQgaGFuZGxlciBvciBpbW1lZGlhdGVseSBhZnRlciB0aGUgZXZlbnQgaGFzIGJlZW4gZmlyZWQgY2FuIGxlYWRcbiAgICAgICAgICAgIC8vIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG4gICAgICAgICAgICB0aGlzLl9kaXNjb25uZWN0KC8qIGZvcmNlbHlDbG9zZVNvY2tldCAqLyBmYWxzZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgYGNsb3NlYCBldmVudCBoYXMgYmVlbiBmaXJlZCBhbmQgaXRzIGB3YXNDbGVhbmBcbiAgICAgICAgICAgIC8vIHByb3BlcnR5IGlzIGZhbHN5LCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gd2FzXG4gICAgICAgICAgICAvLyBjbG9zZWQgaW4gYW4gdW5leHBlY3RlZCBvciBhYm5vcm1hbCBtYW5uZXIuXG4gICAgICAgICAgICAvLyBXZSBzaG91bGQgY2FsbCBgc29ja2V0LmNsb3NlKClgIGluIHRoaXMgc2NlbmFyaW8sIHdlIGNhbiBlbnN1cmUgdGhhdFxuICAgICAgICAgICAgLy8gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIHByb3Blcmx5IGNsb3NlZC5cbiAgICAgICAgICAgIHRoaXMuX2Rpc2Nvbm5lY3QoLyogZm9yY2VseUNsb3NlU29ja2V0ICovIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2gobmV3IFdlYnNvY2tldE1lc3NhZ2VFcnJvcihldmVudCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9kaXNjb25uZWN0KGZvcmNlbHlDbG9zZVNvY2tldDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zb2NrZXQpIHtcbiAgICAgIHRoaXMuX2Nsb3NlQ29ubmVjdGlvbihmb3JjZWx5Q2xvc2VTb2NrZXQpO1xuICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2gobmV3IFdlYlNvY2tldERpc2Nvbm5lY3RlZCgpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlbmQoZGF0YTogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zb2NrZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgY29ubmVjdCB0byB0aGUgc29ja2V0IGJlZm9yZSBzZW5kaW5nIGFueSBkYXRhJyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX3NvY2tldC5zZW5kKHRoaXMuX29wdGlvbnMuc2VyaWFsaXplciEoZGF0YSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLl9zdG9yZS5kaXNwYXRjaChuZXcgV2Vic29ja2V0TWVzc2FnZUVycm9yKGVycm9yKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2xvc2VDb25uZWN0aW9uKGZvcmNlbHlDbG9zZVNvY2tldDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChmb3JjZWx5Q2xvc2VTb2NrZXQpIHtcbiAgICAgIHRoaXMuX3NvY2tldD8uY2xvc2UoKTtcbiAgICB9XG4gICAgdGhpcy5fc29ja2V0ID0gbnVsbDtcbiAgICB0aGlzLl9zb2NrZXRDbG9zZWQkLm5leHQoKTtcbiAgfVxufVxuIl19
|
|
@@ -1,44 +1,11 @@
|
|
|
1
|
-
import { NgModule,
|
|
2
|
-
import {
|
|
3
|
-
import { NGXS_WEBSOCKET_OPTIONS, noop } from './symbols';
|
|
1
|
+
import { NgModule, makeEnvironmentProviders } from '@angular/core';
|
|
2
|
+
import { ɵgetProviders } from './providers';
|
|
4
3
|
import * as i0 from "@angular/core";
|
|
5
|
-
export function websocketOptionsFactory(options) {
|
|
6
|
-
return {
|
|
7
|
-
reconnectInterval: 5000,
|
|
8
|
-
reconnectAttempts: 10,
|
|
9
|
-
typeKey: 'type',
|
|
10
|
-
deserializer(e) {
|
|
11
|
-
return JSON.parse(e.data);
|
|
12
|
-
},
|
|
13
|
-
serializer(value) {
|
|
14
|
-
return JSON.stringify(value);
|
|
15
|
-
},
|
|
16
|
-
...options
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
export const USER_OPTIONS = new InjectionToken('USER_OPTIONS');
|
|
20
4
|
export class NgxsWebsocketPluginModule {
|
|
21
5
|
static forRoot(options) {
|
|
22
6
|
return {
|
|
23
7
|
ngModule: NgxsWebsocketPluginModule,
|
|
24
|
-
providers:
|
|
25
|
-
WebSocketHandler,
|
|
26
|
-
{
|
|
27
|
-
provide: USER_OPTIONS,
|
|
28
|
-
useValue: options
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
provide: NGXS_WEBSOCKET_OPTIONS,
|
|
32
|
-
useFactory: websocketOptionsFactory,
|
|
33
|
-
deps: [USER_OPTIONS]
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
provide: APP_INITIALIZER,
|
|
37
|
-
useFactory: noop,
|
|
38
|
-
deps: [WebSocketHandler],
|
|
39
|
-
multi: true
|
|
40
|
-
}
|
|
41
|
-
]
|
|
8
|
+
providers: ɵgetProviders(options)
|
|
42
9
|
};
|
|
43
10
|
}
|
|
44
11
|
}
|
|
@@ -49,19 +16,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.4", ngImpor
|
|
|
49
16
|
type: NgModule
|
|
50
17
|
}] });
|
|
51
18
|
export function withNgxsWebSocketPlugin(options) {
|
|
52
|
-
return makeEnvironmentProviders(
|
|
53
|
-
{ provide: USER_OPTIONS, useValue: options },
|
|
54
|
-
{
|
|
55
|
-
provide: NGXS_WEBSOCKET_OPTIONS,
|
|
56
|
-
useFactory: websocketOptionsFactory,
|
|
57
|
-
deps: [USER_OPTIONS]
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
provide: APP_INITIALIZER,
|
|
61
|
-
useFactory: noop,
|
|
62
|
-
deps: [WebSocketHandler],
|
|
63
|
-
multi: true
|
|
64
|
-
}
|
|
65
|
-
]);
|
|
19
|
+
return makeEnvironmentProviders(ɵgetProviders(options));
|
|
66
20
|
}
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3dlYnNvY2tldC1wbHVnaW4vc3JjL3dlYnNvY2tldC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFHUix3QkFBd0IsRUFDekIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFJNUMsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQyxNQUFNLENBQUMsT0FBTyxDQUNaLE9BQW9DO1FBRXBDLE9BQU87WUFDTCxRQUFRLEVBQUUseUJBQXlCO1lBQ25DLFNBQVMsRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDO1NBQ2xDLENBQUM7SUFDSixDQUFDOzt5SUFSVSx5QkFBeUI7MElBQXpCLHlCQUF5QjswSUFBekIseUJBQXlCOzJGQUF6Qix5QkFBeUI7a0JBRHJDLFFBQVE7O0FBWVQsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxPQUFvQztJQUVwQyxPQUFPLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBOZ01vZHVsZSxcbiAgTW9kdWxlV2l0aFByb3ZpZGVycyxcbiAgRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVyc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgybVnZXRQcm92aWRlcnMgfSBmcm9tICcuL3Byb3ZpZGVycyc7XG5pbXBvcnQgeyBOZ3hzV2Vic29ja2V0UGx1Z2luT3B0aW9ucyB9IGZyb20gJy4vc3ltYm9scyc7XG5cbkBOZ01vZHVsZSgpXG5leHBvcnQgY2xhc3MgTmd4c1dlYnNvY2tldFBsdWdpbk1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KFxuICAgIG9wdGlvbnM/OiBOZ3hzV2Vic29ja2V0UGx1Z2luT3B0aW9uc1xuICApOiBNb2R1bGVXaXRoUHJvdmlkZXJzPE5neHNXZWJzb2NrZXRQbHVnaW5Nb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IE5neHNXZWJzb2NrZXRQbHVnaW5Nb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IMm1Z2V0UHJvdmlkZXJzKG9wdGlvbnMpXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aE5neHNXZWJTb2NrZXRQbHVnaW4oXG4gIG9wdGlvbnM/OiBOZ3hzV2Vic29ja2V0UGx1Z2luT3B0aW9uc1xuKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKMm1Z2V0UHJvdmlkZXJzKG9wdGlvbnMpKTtcbn1cbiJdfQ==
|