active-connect-ng2 0.1.9 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/active-connect-ng2.module.mjs +5 -5
- package/esm2020/lib/websocket/client.mjs +3 -6
- package/esm2020/lib/websocket/decorators/websocket/outbound.mjs +24 -9
- package/esm2020/lib/websocket/index.mjs +2 -1
- package/esm2020/lib/websocket/objects/outbound-object.mjs +234 -0
- package/fesm2015/active-connect-ng2.mjs +269 -18
- package/fesm2015/active-connect-ng2.mjs.map +1 -1
- package/fesm2020/active-connect-ng2.mjs +263 -18
- package/fesm2020/active-connect-ng2.mjs.map +1 -1
- package/lib/websocket/client.d.ts +1 -1
- package/lib/websocket/index.d.ts +1 -0
- package/lib/websocket/objects/outbound-object.d.ts +37 -0
- package/package.json +1 -1
|
@@ -13,13 +13,13 @@ const dbConfig = {
|
|
|
13
13
|
{ name: 'method', keypath: 'method', options: { unique: true } },
|
|
14
14
|
{ name: 'data', keypath: 'data', options: { unique: false } },
|
|
15
15
|
{
|
|
16
|
-
name: '
|
|
17
|
-
keypath: '
|
|
16
|
+
name: 'specificHash',
|
|
17
|
+
keypath: 'specificHash',
|
|
18
18
|
options: { unique: false },
|
|
19
19
|
},
|
|
20
20
|
{
|
|
21
|
-
name: '
|
|
22
|
-
keypath: '
|
|
21
|
+
name: 'length',
|
|
22
|
+
keypath: 'length',
|
|
23
23
|
options: { unique: false },
|
|
24
24
|
},
|
|
25
25
|
],
|
|
@@ -39,4 +39,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
39
39
|
exports: [NgxIndexedDBModule],
|
|
40
40
|
}]
|
|
41
41
|
}] });
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLWNvbm5lY3QtbmcyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FjdGl2ZS1jb25uZWN0LW5nMi9zcmMvbGliL2FjdGl2ZS1jb25uZWN0LW5nMi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQVksTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRTlELE1BQU0sUUFBUSxHQUFhO0lBQ3pCLElBQUksRUFBRSxxQkFBcUI7SUFDM0IsT0FBTyxFQUFFLENBQUM7SUFDVixnQkFBZ0IsRUFBRTtRQUNoQjtZQUNFLEtBQUssRUFBRSxVQUFVO1lBQ2pCLFdBQVcsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRTtZQUN4RCxXQUFXLEVBQUU7Z0JBQ1gsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUNoRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQzdEO29CQUNFLElBQUksRUFBRSxjQUFjO29CQUNwQixPQUFPLEVBQUUsY0FBYztvQkFDdkIsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtpQkFDM0I7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7aUJBQzNCO2FBQ0Y7U0FDRjtLQUNGO0NBQ0YsQ0FBQztBQU9GLE1BQU0sT0FBTyxzQkFBc0I7O21IQUF0QixzQkFBc0I7b0hBQXRCLHNCQUFzQiw4Q0FGdkIsa0JBQWtCO29IQUVqQixzQkFBc0IsWUFIdkIsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUNwQyxrQkFBa0I7MkZBRWpCLHNCQUFzQjtrQkFMbEMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd4SW5kZXhlZERCTW9kdWxlLCBEQkNvbmZpZyB9IGZyb20gJ25neC1pbmRleGVkLWRiJztcblxuY29uc3QgZGJDb25maWc6IERCQ29uZmlnID0ge1xuICBuYW1lOiAnYWN0aXZlY29ubmVjdF9jYWNoZScsXG4gIHZlcnNpb246IDEsXG4gIG9iamVjdFN0b3Jlc01ldGE6IFtcbiAgICB7XG4gICAgICBzdG9yZTogJ291dGJvdW5kJyxcbiAgICAgIHN0b3JlQ29uZmlnOiB7IGtleVBhdGg6ICdtZXRob2QnLCBhdXRvSW5jcmVtZW50OiBmYWxzZSB9LFxuICAgICAgc3RvcmVTY2hlbWE6IFtcbiAgICAgICAgeyBuYW1lOiAnbWV0aG9kJywga2V5cGF0aDogJ21ldGhvZCcsIG9wdGlvbnM6IHsgdW5pcXVlOiB0cnVlIH0gfSxcbiAgICAgICAgeyBuYW1lOiAnZGF0YScsIGtleXBhdGg6ICdkYXRhJywgb3B0aW9uczogeyB1bmlxdWU6IGZhbHNlIH0gfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdzcGVjaWZpY0hhc2gnLFxuICAgICAgICAgIGtleXBhdGg6ICdzcGVjaWZpY0hhc2gnLFxuICAgICAgICAgIG9wdGlvbnM6IHsgdW5pcXVlOiBmYWxzZSB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2xlbmd0aCcsXG4gICAgICAgICAga2V5cGF0aDogJ2xlbmd0aCcsXG4gICAgICAgICAgb3B0aW9uczogeyB1bmlxdWU6IGZhbHNlIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF0sXG59O1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtdLFxuICBpbXBvcnRzOiBbTmd4SW5kZXhlZERCTW9kdWxlLmZvclJvb3QoZGJDb25maWcpXSxcbiAgZXhwb3J0czogW05neEluZGV4ZWREQk1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIEFjdGl2ZUNvbm5lY3ROZzJNb2R1bGUge31cbiJdfQ==
|
|
@@ -143,7 +143,7 @@ export class WebsocketClient {
|
|
|
143
143
|
}
|
|
144
144
|
});
|
|
145
145
|
}
|
|
146
|
-
messageReceived({ method, value, messageId,
|
|
146
|
+
messageReceived({ method, value, messageId, specificHash, inserted, updated, deleted, length, }) {
|
|
147
147
|
if (method == '___cache') {
|
|
148
148
|
this.handleOutboundCacheRequest(value);
|
|
149
149
|
}
|
|
@@ -165,7 +165,7 @@ export class WebsocketClient {
|
|
|
165
165
|
else {
|
|
166
166
|
const out = WebsocketClient.outbounds.get(method);
|
|
167
167
|
if (out) {
|
|
168
|
-
out(value,
|
|
168
|
+
out(value, specificHash, inserted, updated, deleted, length, this);
|
|
169
169
|
}
|
|
170
170
|
else {
|
|
171
171
|
const handle = WebsocketClient.handles.get(method);
|
|
@@ -186,14 +186,12 @@ export class WebsocketClient {
|
|
|
186
186
|
if (item) {
|
|
187
187
|
this.send('___cache', {
|
|
188
188
|
method,
|
|
189
|
-
globalHash: item.globalHash || null,
|
|
190
189
|
specificHash: item.specificHash || null,
|
|
191
190
|
});
|
|
192
191
|
}
|
|
193
192
|
else {
|
|
194
193
|
this.send('___cache', {
|
|
195
194
|
method,
|
|
196
|
-
globalHash: null,
|
|
197
195
|
specificHash: null,
|
|
198
196
|
});
|
|
199
197
|
}
|
|
@@ -202,7 +200,6 @@ export class WebsocketClient {
|
|
|
202
200
|
else {
|
|
203
201
|
this.send('___cache', {
|
|
204
202
|
method,
|
|
205
|
-
globalHash: null,
|
|
206
203
|
specificHash: null,
|
|
207
204
|
});
|
|
208
205
|
console.error('Active-Connect: Caching not possible as the indexedDB has not been initialized');
|
|
@@ -292,4 +289,4 @@ WebsocketClient.resetRequestedStateCallbacks = [];
|
|
|
292
289
|
WebsocketClient.outbounds = new Map();
|
|
293
290
|
WebsocketClient.handles = new Map();
|
|
294
291
|
WebsocketClient.onSuccessHandlers = [];
|
|
295
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsTUFBTSxPQUFPLGVBQWU7SUFJMUIsWUFDVSxHQUFZLEVBQ1osYUFBdUIsRUFDeEIsU0FBK0I7UUFGOUIsUUFBRyxHQUFILEdBQUcsQ0FBUztRQUNaLGtCQUFhLEdBQWIsYUFBYSxDQUFVO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBZ0NoQyxpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUV6QixXQUFNLEdBQUcsRUFBRSxDQUFDO1FBNEJaLDhCQUF5QixHQUFZLEtBQUssQ0FBQztRQXNDM0MsY0FBUyxHQUFXLENBQUMsQ0FBQztRQXdDdEIsb0JBQWUsR0FBMEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQTZOcEUsV0FBTSxHQUFHLEtBQUssQ0FBQztRQXZXcEIsSUFBSSxhQUFhO1lBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixJQUFJLFFBQVEsQ0FBQztZQUNiLElBQUksSUFBSSxDQUFDO1lBQ1QsUUFBUSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtnQkFDbEMsS0FBSyxRQUFRLENBQUMsQ0FBQztvQkFDYixRQUFRLEdBQUcsTUFBTSxDQUFDO29CQUNsQixJQUFJLEdBQUcsTUFBTSxDQUFDO29CQUNkLE1BQU07aUJBQ1A7Z0JBQ0QsT0FBTyxDQUFDLENBQUM7b0JBQ1AsUUFBUSxHQUFHLEtBQUssQ0FBQztvQkFDakIsSUFBSSxHQUFHLEtBQUssQ0FBQztvQkFDYixNQUFNO2lCQUNQO2FBQ0Y7WUFDRCxJQUFJLENBQUMsR0FBRyxHQUFHLFFBQVEsR0FBRyxJQUFJLEdB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QUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3BDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2IsSUFBSSxHQUFHLEdBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFpQixFQUFFLENBQUM7WUFDMUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksRUFBRTtnQkFDbkIsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ1o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFHTSxVQUFVLENBQUMsT0FBaUI7UUFDakMsSUFBSSxDQUFDLE9BQU87WUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxTQUFTLEtBQUksQ0FBQzs7QUFsVFAsNENBQTRCLEdBQWUsRUFBRSxDQUFDO0FBd0w5Qyx5QkFBUyxHQVdwQixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBZ0JDLHVCQUFPLEdBQW1DLElBQUksR0FBRyxFQUFFLENBQUM7QUFzRXBELGlDQUFpQixHQUcxQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ3hJbmRleGVkREJTZXJ2aWNlIH0gZnJvbSAnbmd4LWluZGV4ZWQtZGInO1xyXG5pbXBvcnQgeyBEZWNvcmFibGVGdW5jdGlvbiB9IGZyb20gJy4vZGVjb3JhdG9ycy9mdW5jdGlvbic7XHJcbmltcG9ydCB7IEpzb25QYXJzZXIgfSBmcm9tICcuL2pzb24vanNvbi1wYXJzZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIFdlYnNvY2tldENsaWVudCB7XHJcbiAgd3MhOiBXZWJTb2NrZXQ7XHJcbiAgcG9vbCE6IHsgV3NzQ29ubmVjdGVkOiBib29sZWFuIH0gfCBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdXJsPzogc3RyaW5nLFxyXG4gICAgcHJpdmF0ZSBzdXBwb3J0c0NhY2hlPzogYm9vbGVhbixcclxuICAgIHB1YmxpYyBkYlNlcnZpY2U/OiBOZ3hJbmRleGVkREJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBpZiAoc3VwcG9ydHNDYWNoZSkgdGhpcy5pbml0Q2FjaGUoKTtcclxuICAgIGlmICghdXJsKSB7XHJcbiAgICAgIGxldCBwcm90b2NvbDtcclxuICAgICAgbGV0IHBvcnQ7XHJcbiAgICAgIHN3aXRjaCAoZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2wpIHtcclxuICAgICAgICBjYXNlICdodHRwczonOiB7XHJcbiAgICAgICAgICBwcm90b2NvbCA9ICd3c3M6JztcclxuICAgICAgICAgIHBvcnQgPSAnOjQ0Myc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgcHJvdG9jb2wgPSAnd3M6JztcclxuICAgICAgICAgIHBvcnQgPSAnOjgwJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVybCA9IHByb3RvY29sICsgJy8vJyArIGRvY3VtZW50LmxvY2F0aW9uLmhvc3RuYW1lICsgcG9ydCArICcvd3NzJztcclxuICAgIH1cclxuICAgIHRoaXMuY29ubmVjdCh0aGlzLnVybCBhcyBzdHJpbmcpO1xyXG4gIH1cclxuXHJcbiAgc3ViamVjdDogYW55O1xyXG5cclxuICBwcml2YXRlIGNvbm5lY3QodXJsOiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5zdWJqZWN0KSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlKHVybCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5zdWJqZWN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXF1ZXN0U3RhY2s6IGFueVtdID0gW107XHJcblxyXG4gIHByaXZhdGUgX3Rva2VuID0gJyc7XHJcbiAgcHVibGljIGdldCBUb2tlbigpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLl90b2tlbikge1xyXG4gICAgICBpZiAod2luZG93LmxvY2FsU3RvcmFnZSlcclxuICAgICAgICB0aGlzLl90b2tlbiA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKSB8fCAnJztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl90b2tlbjtcclxuICB9XHJcbiAgcHVibGljIHNldCBUb2tlbih2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdG9rZW4gPSB2YWw7XHJcbiAgICBpZiAod2luZG93LmxvY2FsU3RvcmFnZSkgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0b2tlbicsIHZhbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldCBDb25uZWN0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLnNlbmRCcm93c2VySW5mb1RvU2VydmVyKCk7XHJcblxyXG4gICAgICB0aGlzLnJlc2V0UmVxdWVzdGVkU3RhdGUoKTtcclxuICAgICAgdGhpcy5hdXRoKHRoaXMuVG9rZW4pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVxdWVzdFN0YWNrLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VuZFRvU29ja2V0KGUubWV0aG9kLCBlLmRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5yZXF1ZXN0U3RhY2sgPSB0aGlzLnJlcXVlc3RTdGFjay5maWx0ZXIoKGUxKSA9PiBlMSAhPSBlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wb29sICYmIHRoaXMucG9vbC5Xc3NDb25uZWN0ZWQpIHRoaXMucG9vbC5Xc3NDb25uZWN0ZWQgPSB2YWx1ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVzZXRSZXF1ZXN0ZWRTdGF0ZUNhbGxiYWNrczogRnVuY3Rpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgY29ubmVjdGlvbkVzdGFibGlzaGVkT25jZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcmVzZXRSZXF1ZXN0ZWRTdGF0ZSgpIHtcclxuICAgIGlmICh0aGlzLmNvbm5lY3Rpb25Fc3RhYmxpc2hlZE9uY2UpIHtcclxuICAgICAgLy8gcmVzZXQgcmVxdWVzdGVkIHN0YXRlIGZvciBvdXRib3VuZHNcclxuICAgICAgV2Vic29ja2V0Q2xpZW50LnJlc2V0UmVxdWVzdGVkU3RhdGVDYWxsYmFja3MuZm9yRWFjaCgocmVzZXQpID0+IHtcclxuICAgICAgICByZXNldCgpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29ubmVjdGlvbkVzdGFibGlzaGVkT25jZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBzdGF0aWMgYWRkUmVzZXRSZXF1ZXN0aW5nU3RhdGVDYWxsYmFjayhjYWxsYmFjazogRnVuY3Rpb24pIHtcclxuICAgIFdlYnNvY2tldENsaWVudC5yZXNldFJlcXVlc3RlZFN0YXRlQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGUodXJsOiBzdHJpbmcpIHtcclxuICAgIC8vIGNyZWF0ZSBuZXcgY29ubmVjdGlvblxyXG4gICAgdGhpcy53cyA9IG5ldyBXZWJTb2NrZXQodXJsICsgKHRoaXMuc3VwcG9ydHNDYWNoZSA/ICc/Y2FjaGU9dHJ1ZScgOiAnJykpO1xyXG4gICAgdGhpcy53cy5vbmVycm9yID0gKGVycikgPT4ge1xyXG4gICAgICB0aGlzLndzLmNsb3NlKCk7XHJcbiAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICB9O1xyXG4gICAgdGhpcy53cy5vbm9wZW4gPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuQ29ubmVjdGVkID0gdHJ1ZTtcclxuICAgIH07XHJcbiAgICB0aGlzLndzLm9ubWVzc2FnZSA9IChlKSA9PiB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVJlY2VpdmVkKEpzb25QYXJzZXIucGFyc2UoZS5kYXRhLnRvU3RyaW5nKCkpKTtcclxuICAgIH07XHJcbiAgICB0aGlzLndzLm9uY2xvc2UgPSAoKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcclxuICAgICAgICBpZiAodGhpcy5wb29sICYmIHRoaXMucG9vbC5Xc3NDb25uZWN0ZWQpIHRoaXMucG9vbC5Xc3NDb25uZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29ubmVjdCh1cmwpO1xyXG4gICAgICAgIH0sIDEwMDApO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZXNzYWdlSWQ6IG51bWJlciA9IDA7XHJcbiAgcHJvdGVjdGVkIHNlbmRUb1NvY2tldChcclxuICAgIG1ldGhvZDogc3RyaW5nLFxyXG4gICAgZGF0YTogYW55LFxyXG4gICAgZG9udEVuc3VyZVRyYW5zbWlzc2lvbj86IGJvb2xlYW5cclxuICApIHtcclxuICAgIGNvbnN0IG1lc3NhZ2VJZCA9ICsrdGhpcy5tZXNzYWdlSWQ7XHJcbiAgICBpZiAodGhpcy53cy5yZWFkeVN0YXRlICE9IHRoaXMud3MuT1BFTikge1xyXG4gICAgICBpZiAoIWRvbnRFbnN1cmVUcmFuc21pc3Npb24pXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0U3RhY2sucHVzaCh7IG1ldGhvZCwgZGF0YSwgbWVzc2FnZUlkIH0pO1xyXG4gICAgICBlbHNlIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMud3Muc2VuZChKc29uUGFyc2VyLnN0cmluZ2lmeSh7IG1ldGhvZCwgdmFsdWU6IGRhdGEsIG1lc3NhZ2VJZCB9KSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWVzc2FnZUlkO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYXV0aCh0b2tlbjogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLnNlbmRUb1NvY2tldCgnYXV0aC50b2tlbicsIHRva2VuKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZW5kKFxyXG4gICAgbWV0aG9kOiBzdHJpbmcsXHJcbiAgICBkYXRhOiBhbnksXHJcbiAgICBkb250RW5zdXJlVHJhbnNtaXNzaW9uPzogYm9vbGVhblxyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCBtZXNzYWdlSWQgPSB0aGlzLnNlbmRUb1NvY2tldChcclxuICAgICAgbWV0aG9kLFxyXG4gICAgICBkYXRhLFxyXG4gICAgICBkb250RW5zdXJlVHJhbnNtaXNzaW9uIHx8IGZhbHNlXHJcbiAgICApO1xyXG4gICAgaWYgKG1lc3NhZ2VJZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5leHBlY3RNZXRob2QoYG0uJHttZXRob2R9YCwgbWVzc2FnZUlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwZWN0ZWRNZXRob2RzOiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBBcnJheTxGdW5jdGlvbj4+ID0gbmV3IE1hcCgpO1xyXG4gIHByaXZhdGUgZXhwZWN0TWV0aG9kKG1ldGhvZDogc3RyaW5nLCBtZXNzYWdlSWQ/OiBudW1iZXIgfCBudWxsKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgaWYgKG1lc3NhZ2VJZCkge1xyXG4gICAgICAgIHRoaXMuZXhwZWN0ZWRNZXRob2RzLnNldChtZXNzYWdlSWQsIFtyZXNvbHZlXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXhwZWN0ZWRNZXRob2RzLmhhcyhtZXRob2QpKSB7XHJcbiAgICAgICAgICBsZXQgYXJyID0gdGhpcy5leHBlY3RlZE1ldGhvZHMuZ2V0KG1ldGhvZCk7XHJcbiAgICAgICAgICAoYXJyIGFzIEFycmF5PEZ1bmN0aW9uPikucHVzaChyZXNvbHZlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5leHBlY3RlZE1ldGhvZHMuc2V0KG1ldGhvZCwgW3Jlc29sdmVdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZXNzYWdlUmVjZWl2ZWQoe1xyXG4gICAgbWV0aG9kLFxyXG4gICAgdmFsdWUsXHJcbiAgICBtZXNzYWdlSWQsXHJcbiAgICBnbG9iYWxIYXNoLFxyXG4gICAgc3BlY2lmaWNIYXNoLFxyXG4gICAgaW5zZXJ0ZWQsXHJcbiAgICB1cGRhdGVkLFxyXG4gICAgZGVsZXRlZCxcclxuICB9OiB7XHJcbiAgICBtZXRob2Q6IHN0cmluZztcclxuICAgIHZhbHVlOiBhbnk7XHJcbiAgICBtZXNzYWdlSWQ6IG51bWJlciB8IG51bGw7XHJcbiAgICBnbG9iYWxIYXNoOiBudW1iZXIgfCBudWxsO1xyXG4gICAgc3BlY2lmaWNIYXNoOiBudW1iZXIgfCBudWxsO1xyXG4gICAgaW5zZXJ0ZWQ6IGFueVtdIHwgbnVsbDtcclxuICAgIHVwZGF0ZWQ6IGFueVtdIHwgbnVsbDtcclxuICAgIGRlbGV0ZWQ6IGFueVtdIHwgbnVsbDtcclxuICB9KSB7XHJcbiAgICBpZiAobWV0aG9kID09ICdfX19jYWNoZScpIHtcclxuICAgICAgdGhpcy5oYW5kbGVPdXRib3VuZENhY2hlUmVxdWVzdCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAobWVzc2FnZUlkKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5leHBlY3RlZE1ldGhvZHMuZ2V0KG1lc3NhZ2VJZCk7XHJcbiAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSBjYWxsYmFjay5zaGlmdCgpO1xyXG4gICAgICAgIGlmIChmdW5jKSBmdW5jKHZhbHVlKTtcclxuICAgICAgICB0aGlzLmludm9rZVN1Y2Nlc3NIYW5kbGVycyhtZXRob2QpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5leHBlY3RlZE1ldGhvZHMuZ2V0KG1ldGhvZCk7XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrICYmIGNhbGxiYWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IGZ1bmMgPSBjYWxsYmFjay5zaGlmdCgpO1xyXG4gICAgICAgICAgaWYgKGZ1bmMpIGZ1bmModmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBvdXQgPSBXZWJzb2NrZXRDbGllbnQub3V0Ym91bmRzLmdldChtZXRob2QpO1xyXG4gICAgICAgICAgaWYgKG91dCkge1xyXG4gICAgICAgICAgICBvdXQoXHJcbiAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAgZ2xvYmFsSGFzaCxcclxuICAgICAgICAgICAgICBzcGVjaWZpY0hhc2gsXHJcbiAgICAgICAgICAgICAgaW5zZXJ0ZWQsXHJcbiAgICAgICAgICAgICAgdXBkYXRlZCxcclxuICAgICAgICAgICAgICBkZWxldGVkLFxyXG4gICAgICAgICAgICAgIHRoaXNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IFdlYnNvY2tldENsaWVudC5oYW5kbGVzLmdldChtZXRob2QpO1xyXG4gICAgICAgICAgICBpZiAoaGFuZGxlKSB7XHJcbiAgICAgICAgICAgICAgKGhhbmRsZS5GdW5jIGFzIEZ1bmN0aW9uKSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICdObyBNZXNzYWdlSWQgd2FzIHByb3ZpZGVkLCB0aGUgY29ubmVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkLidcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlT3V0Ym91bmRDYWNoZVJlcXVlc3QobWV0aG9kOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmRiU2VydmljZSkge1xyXG4gICAgICB0aGlzLmRiU2VydmljZS5nZXRCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpLnN1YnNjcmliZSgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgIHRoaXMuc2VuZCgnX19fY2FjaGUnLCB7XHJcbiAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgZ2xvYmFsSGFzaDogaXRlbS5nbG9iYWxIYXNoIHx8IG51bGwsXHJcbiAgICAgICAgICAgIHNwZWNpZmljSGFzaDogaXRlbS5zcGVjaWZpY0hhc2ggfHwgbnVsbCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNlbmQoJ19fX2NhY2hlJywge1xyXG4gICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgIGdsb2JhbEhhc2g6IG51bGwsXHJcbiAgICAgICAgICAgIHNwZWNpZmljSGFzaDogbnVsbCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbmQoJ19fX2NhY2hlJywge1xyXG4gICAgICAgIG1ldGhvZCxcclxuICAgICAgICBnbG9iYWxIYXNoOiBudWxsLFxyXG4gICAgICAgIHNwZWNpZmljSGFzaDogbnVsbCxcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgJ0FjdGl2ZS1Db25uZWN0OiBDYWNoaW5nIG5vdCBwb3NzaWJsZSBhcyB0aGUgaW5kZXhlZERCIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCdcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIG91dGJvdW5kczogTWFwPFxyXG4gICAgc3RyaW5nLFxyXG4gICAgKFxyXG4gICAgICBkYXRhOiBhbnksXHJcbiAgICAgIGdsb2JhbEhhc2g6IG51bWJlciB8IG51bGwsXHJcbiAgICAgIHNwZWNpZmljSGFzaDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgaW5zZXJ0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgdXBkYXRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICBkZWxldGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgIF90aGlzOiBXZWJzb2NrZXRDbGllbnRcclxuICAgICkgPT4gdm9pZFxyXG4gID4gPSBuZXcgTWFwKCk7XHJcbiAgc3RhdGljIGV4cGVjdE91dGJvdW5kKFxyXG4gICAgbWV0aG9kOiBzdHJpbmcsXHJcbiAgICBjYWxsYmFjazogKFxyXG4gICAgICBkYXRhOiBhbnksXHJcbiAgICAgIGdsb2JhbEhhc2g6IG51bWJlciB8IG51bGwsXHJcbiAgICAgIHNwZWNpZmljSGFzaDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgaW5zZXJ0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgdXBkYXRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICBkZWxldGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgIF90aGlzOiBXZWJzb2NrZXRDbGllbnRcclxuICAgICkgPT4gdm9pZFxyXG4gICkge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50Lm91dGJvdW5kcy5zZXQobWV0aG9kLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBoYW5kbGVzOiBNYXA8c3RyaW5nLCBEZWNvcmFibGVGdW5jdGlvbj4gPSBuZXcgTWFwKCk7XHJcbiAgc3RhdGljIHJlZ2lzdGVySGFuZGxlKG1ldGhvZDogc3RyaW5nLCBjYWxsYmFjazogRGVjb3JhYmxlRnVuY3Rpb24pIHtcclxuICAgIFdlYnNvY2tldENsaWVudC5oYW5kbGVzLnNldChtZXRob2QsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNDb25uZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy53cykgcmV0dXJuIHRoaXMud3MucmVhZHlTdGF0ZSA9PSBXZWJTb2NrZXQuT1BFTjtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZW5kQnJvd3NlckluZm9Ub1NlcnZlcigpIHtcclxuICAgIC8vIHNlbmQgYnJvd3NlciAvIG9zIGluZm9ybWF0aW9uXHJcbiAgICBjb25zdCBicm93c2VyID0gdGhpcy5nZXRCcm93c2VyKCk7XHJcbiAgICBjb25zdCBvcyA9IHRoaXMuZ2V0T1MoKTtcclxuICAgIHRoaXMuc2VuZCgnX19fYnJvd3NlcicsIHtcclxuICAgICAgYnJvd3NlcjogYCR7YnJvd3Nlci5uYW1lfSAke2Jyb3dzZXIudmVyc2lvbn0gJHtvc31gLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QnJvd3NlcigpOiB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH0ge1xyXG4gICAgLy8gaHR0cHM6Ly93d3cuZ3JlZ29yeXZhcmdoZXNlLmNvbS9ob3ctdG8tZ2V0LWJyb3dzZXItbmFtZS1hbmQtdmVyc2lvbi12aWEtamF2YXNjcmlwdC9cclxuICAgIHZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQsXHJcbiAgICAgIHRlbSxcclxuICAgICAgTSA9XHJcbiAgICAgICAgdWEubWF0Y2goXHJcbiAgICAgICAgICAvKG9wZXJhfGNocm9tZXxzYWZhcml8ZmlyZWZveHxtc2llfHRyaWRlbnQoPz1cXC8pKVxcLz9cXHMqKFxcZCspL2lcclxuICAgICAgICApIHx8IFtdO1xyXG4gICAgaWYgKC90cmlkZW50L2kudGVzdChNWzFdKSkge1xyXG4gICAgICB0ZW0gPSAvXFxicnZbIDpdKyhcXGQrKS9nLmV4ZWModWEpIHx8IFtdO1xyXG4gICAgICByZXR1cm4geyBuYW1lOiAnSUUgJywgdmVyc2lvbjogdGVtWzFdIHx8ICcnIH07XHJcbiAgICB9XHJcbiAgICBpZiAoTVsxXSA9PT0gJ0Nocm9tZScpIHtcclxuICAgICAgdGVtID0gdWEubWF0Y2goL1xcYk9QUlxcLyhcXGQrKS8pO1xyXG4gICAgICBpZiAodGVtICE9IG51bGwpIHtcclxuICAgICAgICByZXR1cm4geyBuYW1lOiAnT3BlcmEnLCB2ZXJzaW9uOiB0ZW1bMV0gfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgTSA9IE1bMl0gPyBbTVsxXSwgTVsyXV0gOiBbbmF2aWdhdG9yLmFwcE5hbWUsIG5hdmlnYXRvci5hcHBWZXJzaW9uLCAnLT8nXTtcclxuICAgIGlmICgodGVtID0gdWEubWF0Y2goL3ZlcnNpb25cXC8oXFxkKykvaSkpICE9IG51bGwpIHtcclxuICAgICAgTS5zcGxpY2UoMSwgMSwgdGVtWzFdKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5hbWU6IE1bMF0sXHJcbiAgICAgIHZlcnNpb246IE1bMV0sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldE9TKCk6IHN0cmluZyB7XHJcbiAgICB2YXIgdXNlckFnZW50ID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQsXHJcbiAgICAgIHBsYXRmb3JtID0gd2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSxcclxuICAgICAgbWFjb3NQbGF0Zm9ybXMgPSBbJ01hY2ludG9zaCcsICdNYWNJbnRlbCcsICdNYWNQUEMnLCAnTWFjNjhLJ10sXHJcbiAgICAgIHdpbmRvd3NQbGF0Zm9ybXMgPSBbJ1dpbjMyJywgJ1dpbjY0JywgJ1dpbmRvd3MnLCAnV2luQ0UnXSxcclxuICAgICAgaW9zUGxhdGZvcm1zID0gWydpUGhvbmUnLCAnaVBhZCcsICdpUG9kJ10sXHJcbiAgICAgIG9zID0gbnVsbDtcclxuXHJcbiAgICBpZiAobWFjb3NQbGF0Zm9ybXMuaW5kZXhPZihwbGF0Zm9ybSkgIT09IC0xKSB7XHJcbiAgICAgIG9zID0gJ01hYyBPUyc7XHJcbiAgICB9IGVsc2UgaWYgKGlvc1BsYXRmb3Jtcy5pbmRleE9mKHBsYXRmb3JtKSAhPT0gLTEpIHtcclxuICAgICAgb3MgPSAnaU9TJztcclxuICAgIH0gZWxzZSBpZiAod2luZG93c1BsYXRmb3Jtcy5pbmRleE9mKHBsYXRmb3JtKSAhPT0gLTEpIHtcclxuICAgICAgb3MgPSAnV2luZG93cyc7XHJcbiAgICB9IGVsc2UgaWYgKC9BbmRyb2lkLy50ZXN0KHVzZXJBZ2VudCkpIHtcclxuICAgICAgb3MgPSAnQW5kcm9pZCc7XHJcbiAgICB9IGVsc2UgaWYgKCFvcyAmJiAvTGludXgvLnRlc3QocGxhdGZvcm0pKSB7XHJcbiAgICAgIG9zID0gJ0xpbnV4JztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3MgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBvblN1Y2Nlc3NIYW5kbGVyczoge1xyXG4gICAgY2FsbGJhY2s6IERlY29yYWJsZUZ1bmN0aW9uO1xyXG4gICAgcmVnZXhwOiBSZWdFeHA7XHJcbiAgfVtdID0gW107XHJcbiAgcHVibGljIHN0YXRpYyBvblN1Y2Nlc3MoY2FsbGJhY2s6IERlY29yYWJsZUZ1bmN0aW9uLCByZWdleHA6IFJlZ0V4cCkge1xyXG4gICAgdGhpcy5vblN1Y2Nlc3NIYW5kbGVycy5wdXNoKHsgY2FsbGJhY2ssIHJlZ2V4cCB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW52b2tlU3VjY2Vzc0hhbmRsZXJzKG1ldGhvZDogc3RyaW5nKSB7XHJcbiAgICBXZWJzb2NrZXRDbGllbnQub25TdWNjZXNzSGFuZGxlcnNcclxuICAgICAgLmZpbHRlcigoZSkgPT4gZS5yZWdleHAudGVzdChtZXRob2QpKVxyXG4gICAgICAuZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgIHZhciByZXMgPSAoZS5jYWxsYmFjay5GdW5jIGFzIEZ1bmN0aW9uKSgpO1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLnRoZW4pIHtcclxuICAgICAgICAgIHJlcy50aGVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZWQgPSBmYWxzZTtcclxuICBwdWJsaWMgZGlzY29ubmVjdChyZXN0YXJ0PzogYm9vbGVhbikge1xyXG4gICAgaWYgKCFyZXN0YXJ0KSB0aGlzLmNsb3NlZCA9IHRydWU7XHJcbiAgICB0aGlzLndzLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRDYWNoZSgpIHt9XHJcbn1cclxuIl19
|
|
292
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsTUFBTSxPQUFPLGVBQWU7SUFJMUIsWUFDVSxHQUFZLEVBQ1osYUFBdUIsRUFDeEIsU0FBK0I7UUFGOUIsUUFBRyxHQUFILEdBQUcsQ0FBUztRQUNaLGtCQUFhLEdBQWIsYUFBYSxDQUFVO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBZ0NoQyxpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUV6QixXQUFNLEdBQUcsRUFBRSxDQUFDO1FBNEJaLDhCQUF5QixHQUFZLEtBQUssQ0FBQztRQXNDM0MsY0FBUyxHQUFXLENBQUMsQ0FBQztRQXdDdEIsb0JBQWUsR0FBMEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQWtOcEUsV0FBTSxHQUFHLEtBQUssQ0FBQztRQTVWcEIsSUFBSSxhQUFhO1lBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixJQUFJLFFBQVEsQ0FBQztZQUNiLElBQUksSUFBSSxDQUFDO1lBQ1QsUUFBUSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtnQkFDbEMsS0FBSyxRQUFRLENBQUMsQ0FBQztvQkFDYixRQUFRLEdBQUcsTUFBTSxDQUFDO29CQUNsQixJQUFJLEdBQUcsTUFBTSxDQUFDO29CQUNkLE1BQU07aUJBQ1A7Z0JBQ0QsT0FBTyxDQUFDLENBQUM7b0JBQ1AsUUFBUSxHQUFHLEtBQUssQ0FBQztvQkFDakIsSUFBSSxHQUFHLEtBQUssQ0FBQztvQkFDYixNQUFNO2lCQUNQO2FBQ0Y7WUFDRCxJQUFJLENBQUMsR0FBRyxHQUFHLFFBQVEsR0FBRyxJQUFJLEdB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UUFBUSxDQUFDLElBQWlCLEVBQUUsQ0FBQztZQUMxQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFO2dCQUNuQixHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDWjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUdNLFVBQVUsQ0FBQyxPQUFpQjtRQUNqQyxJQUFJLENBQUMsT0FBTztZQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVPLFNBQVMsS0FBSSxDQUFDOztBQXZTUCw0Q0FBNEIsR0FBZSxFQUFFLENBQUM7QUE2SzlDLHlCQUFTLEdBV3BCLElBQUksR0FBRyxFQUFFLENBQUM7QUFnQkMsdUJBQU8sR0FBbUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQXNFcEQsaUNBQWlCLEdBRzFCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5neEluZGV4ZWREQlNlcnZpY2UgfSBmcm9tICduZ3gtaW5kZXhlZC1kYic7XHJcbmltcG9ydCB7IERlY29yYWJsZUZ1bmN0aW9uIH0gZnJvbSAnLi9kZWNvcmF0b3JzL2Z1bmN0aW9uJztcclxuaW1wb3J0IHsgSnNvblBhcnNlciB9IGZyb20gJy4vanNvbi9qc29uLXBhcnNlcic7XHJcblxyXG5leHBvcnQgY2xhc3MgV2Vic29ja2V0Q2xpZW50IHtcclxuICB3cyE6IFdlYlNvY2tldDtcclxuICBwb29sITogeyBXc3NDb25uZWN0ZWQ6IGJvb2xlYW4gfSB8IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB1cmw/OiBzdHJpbmcsXHJcbiAgICBwcml2YXRlIHN1cHBvcnRzQ2FjaGU/OiBib29sZWFuLFxyXG4gICAgcHVibGljIGRiU2VydmljZT86IE5neEluZGV4ZWREQlNlcnZpY2VcclxuICApIHtcclxuICAgIGlmIChzdXBwb3J0c0NhY2hlKSB0aGlzLmluaXRDYWNoZSgpO1xyXG4gICAgaWYgKCF1cmwpIHtcclxuICAgICAgbGV0IHByb3RvY29sO1xyXG4gICAgICBsZXQgcG9ydDtcclxuICAgICAgc3dpdGNoIChkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCkge1xyXG4gICAgICAgIGNhc2UgJ2h0dHBzOic6IHtcclxuICAgICAgICAgIHByb3RvY29sID0gJ3dzczonO1xyXG4gICAgICAgICAgcG9ydCA9ICc6NDQzJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICBwcm90b2NvbCA9ICd3czonO1xyXG4gICAgICAgICAgcG9ydCA9ICc6ODAnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXJsID0gcHJvdG9jb2wgKyAnLy8nICsgZG9jdW1lbnQubG9jYXRpb24uaG9zdG5hbWUgKyBwb3J0ICsgJy93c3MnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb25uZWN0KHRoaXMudXJsIGFzIHN0cmluZyk7XHJcbiAgfVxyXG5cclxuICBzdWJqZWN0OiBhbnk7XHJcblxyXG4gIHByaXZhdGUgY29ubmVjdCh1cmw6IHN0cmluZykge1xyXG4gICAgaWYgKCF0aGlzLnN1YmplY3QpIHtcclxuICAgICAgdGhpcy5jcmVhdGUodXJsKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnN1YmplY3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlcXVlc3RTdGFjazogYW55W10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfdG9rZW4gPSAnJztcclxuICBwdWJsaWMgZ2V0IFRva2VuKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuX3Rva2VuKSB7XHJcbiAgICAgIGlmICh3aW5kb3cubG9jYWxTdG9yYWdlKVxyXG4gICAgICAgIHRoaXMuX3Rva2VuID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpIHx8ICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IFRva2VuKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl90b2tlbiA9IHZhbDtcclxuICAgIGlmICh3aW5kb3cubG9jYWxTdG9yYWdlKSB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Rva2VuJywgdmFsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0IENvbm5lY3RlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuc2VuZEJyb3dzZXJJbmZvVG9TZXJ2ZXIoKTtcclxuXHJcbiAgICAgIHRoaXMucmVzZXRSZXF1ZXN0ZWRTdGF0ZSgpO1xyXG4gICAgICB0aGlzLmF1dGgodGhpcy5Ub2tlbikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0U3RhY2suZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZW5kVG9Tb2NrZXQoZS5tZXRob2QsIGUuZGF0YSk7XHJcbiAgICAgICAgICB0aGlzLnJlcXVlc3RTdGFjayA9IHRoaXMucmVxdWVzdFN0YWNrLmZpbHRlcigoZTEpID0+IGUxICE9IGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnBvb2wgJiYgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCkgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIHN0YXRpYyByZXNldFJlcXVlc3RlZFN0YXRlQ2FsbGJhY2tzOiBGdW5jdGlvbltdID0gW107XHJcbiAgcHJpdmF0ZSBjb25uZWN0aW9uRXN0YWJsaXNoZWRPbmNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSByZXNldFJlcXVlc3RlZFN0YXRlKCkge1xyXG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbkVzdGFibGlzaGVkT25jZSkge1xyXG4gICAgICAvLyByZXNldCByZXF1ZXN0ZWQgc3RhdGUgZm9yIG91dGJvdW5kc1xyXG4gICAgICBXZWJzb2NrZXRDbGllbnQucmVzZXRSZXF1ZXN0ZWRTdGF0ZUNhbGxiYWNrcy5mb3JFYWNoKChyZXNldCkgPT4ge1xyXG4gICAgICAgIHJlc2V0KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25uZWN0aW9uRXN0YWJsaXNoZWRPbmNlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIHN0YXRpYyBhZGRSZXNldFJlcXVlc3RpbmdTdGF0ZUNhbGxiYWNrKGNhbGxiYWNrOiBGdW5jdGlvbikge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50LnJlc2V0UmVxdWVzdGVkU3RhdGVDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZSh1cmw6IHN0cmluZykge1xyXG4gICAgLy8gY3JlYXRlIG5ldyBjb25uZWN0aW9uXHJcbiAgICB0aGlzLndzID0gbmV3IFdlYlNvY2tldCh1cmwgKyAodGhpcy5zdXBwb3J0c0NhY2hlID8gJz9jYWNoZT10cnVlJyA6ICcnKSk7XHJcbiAgICB0aGlzLndzLm9uZXJyb3IgPSAoZXJyKSA9PiB7XHJcbiAgICAgIHRoaXMud3MuY2xvc2UoKTtcclxuICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgIH07XHJcbiAgICB0aGlzLndzLm9ub3BlbiA9ICgpID0+IHtcclxuICAgICAgdGhpcy5Db25uZWN0ZWQgPSB0cnVlO1xyXG4gICAgfTtcclxuICAgIHRoaXMud3Mub25tZXNzYWdlID0gKGUpID0+IHtcclxuICAgICAgdGhpcy5tZXNzYWdlUmVjZWl2ZWQoSnNvblBhcnNlci5wYXJzZShlLmRhdGEudG9TdHJpbmcoKSkpO1xyXG4gICAgfTtcclxuICAgIHRoaXMud3Mub25jbG9zZSA9ICgpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBvb2wgJiYgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCkgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb25uZWN0KHVybCk7XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1lc3NhZ2VJZDogbnVtYmVyID0gMDtcclxuICBwcm90ZWN0ZWQgc2VuZFRvU29ja2V0KFxyXG4gICAgbWV0aG9kOiBzdHJpbmcsXHJcbiAgICBkYXRhOiBhbnksXHJcbiAgICBkb250RW5zdXJlVHJhbnNtaXNzaW9uPzogYm9vbGVhblxyXG4gICkge1xyXG4gICAgY29uc3QgbWVzc2FnZUlkID0gKyt0aGlzLm1lc3NhZ2VJZDtcclxuICAgIGlmICh0aGlzLndzLnJlYWR5U3RhdGUgIT0gdGhpcy53cy5PUEVOKSB7XHJcbiAgICAgIGlmICghZG9udEVuc3VyZVRyYW5zbWlzc2lvbilcclxuICAgICAgICB0aGlzLnJlcXVlc3RTdGFjay5wdXNoKHsgbWV0aG9kLCBkYXRhLCBtZXNzYWdlSWQgfSk7XHJcbiAgICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53cy5zZW5kKEpzb25QYXJzZXIuc3RyaW5naWZ5KHsgbWV0aG9kLCB2YWx1ZTogZGF0YSwgbWVzc2FnZUlkIH0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZXNzYWdlSWQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhdXRoKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VuZFRvU29ja2V0KCdhdXRoLnRva2VuJywgdG9rZW4pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbmQoXHJcbiAgICBtZXRob2Q6IHN0cmluZyxcclxuICAgIGRhdGE6IGFueSxcclxuICAgIGRvbnRFbnN1cmVUcmFuc21pc3Npb24/OiBib29sZWFuXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IHRoaXMuc2VuZFRvU29ja2V0KFxyXG4gICAgICBtZXRob2QsXHJcbiAgICAgIGRhdGEsXHJcbiAgICAgIGRvbnRFbnN1cmVUcmFuc21pc3Npb24gfHwgZmFsc2VcclxuICAgICk7XHJcbiAgICBpZiAobWVzc2FnZUlkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmV4cGVjdE1ldGhvZChgbS4ke21ldGhvZH1gLCBtZXNzYWdlSWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBlY3RlZE1ldGhvZHM6IE1hcDxzdHJpbmcgfCBudW1iZXIsIEFycmF5PEZ1bmN0aW9uPj4gPSBuZXcgTWFwKCk7XHJcbiAgcHJpdmF0ZSBleHBlY3RNZXRob2QobWV0aG9kOiBzdHJpbmcsIG1lc3NhZ2VJZD86IG51bWJlciB8IG51bGwpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBpZiAobWVzc2FnZUlkKSB7XHJcbiAgICAgICAgdGhpcy5leHBlY3RlZE1ldGhvZHMuc2V0KG1lc3NhZ2VJZCwgW3Jlc29sdmVdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5leHBlY3RlZE1ldGhvZHMuaGFzKG1ldGhvZCkpIHtcclxuICAgICAgICAgIGxldCBhcnIgPSB0aGlzLmV4cGVjdGVkTWV0aG9kcy5nZXQobWV0aG9kKTtcclxuICAgICAgICAgIChhcnIgYXMgQXJyYXk8RnVuY3Rpb24+KS5wdXNoKHJlc29sdmUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmV4cGVjdGVkTWV0aG9kcy5zZXQobWV0aG9kLCBbcmVzb2x2ZV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1lc3NhZ2VSZWNlaXZlZCh7XHJcbiAgICBtZXRob2QsXHJcbiAgICB2YWx1ZSxcclxuICAgIG1lc3NhZ2VJZCxcclxuICAgIHNwZWNpZmljSGFzaCxcclxuICAgIGluc2VydGVkLFxyXG4gICAgdXBkYXRlZCxcclxuICAgIGRlbGV0ZWQsXHJcbiAgICBsZW5ndGgsXHJcbiAgfToge1xyXG4gICAgbWV0aG9kOiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogYW55O1xyXG4gICAgbWVzc2FnZUlkOiBudW1iZXIgfCBudWxsO1xyXG4gICAgc3BlY2lmaWNIYXNoOiBudW1iZXIgfCBudWxsO1xyXG4gICAgaW5zZXJ0ZWQ6IGFueVtdIHwgbnVsbDtcclxuICAgIHVwZGF0ZWQ6IGFueVtdIHwgbnVsbDtcclxuICAgIGRlbGV0ZWQ6IGFueVtdIHwgbnVsbDtcclxuICAgIGxlbmd0aDogbnVtYmVyIHwgbnVsbDtcclxuICB9KSB7XHJcbiAgICBpZiAobWV0aG9kID09ICdfX19jYWNoZScpIHtcclxuICAgICAgdGhpcy5oYW5kbGVPdXRib3VuZENhY2hlUmVxdWVzdCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAobWVzc2FnZUlkKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5leHBlY3RlZE1ldGhvZHMuZ2V0KG1lc3NhZ2VJZCk7XHJcbiAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSBjYWxsYmFjay5zaGlmdCgpO1xyXG4gICAgICAgIGlmIChmdW5jKSBmdW5jKHZhbHVlKTtcclxuICAgICAgICB0aGlzLmludm9rZVN1Y2Nlc3NIYW5kbGVycyhtZXRob2QpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5leHBlY3RlZE1ldGhvZHMuZ2V0KG1ldGhvZCk7XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrICYmIGNhbGxiYWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IGZ1bmMgPSBjYWxsYmFjay5zaGlmdCgpO1xyXG4gICAgICAgICAgaWYgKGZ1bmMpIGZ1bmModmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBvdXQgPSBXZWJzb2NrZXRDbGllbnQub3V0Ym91bmRzLmdldChtZXRob2QpO1xyXG4gICAgICAgICAgaWYgKG91dCkge1xyXG4gICAgICAgICAgICBvdXQodmFsdWUsIHNwZWNpZmljSGFzaCwgaW5zZXJ0ZWQsIHVwZGF0ZWQsIGRlbGV0ZWQsIGxlbmd0aCwgdGhpcyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBXZWJzb2NrZXRDbGllbnQuaGFuZGxlcy5nZXQobWV0aG9kKTtcclxuICAgICAgICAgICAgaWYgKGhhbmRsZSkge1xyXG4gICAgICAgICAgICAgIChoYW5kbGUuRnVuYyBhcyBGdW5jdGlvbikodmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAnTm8gTWVzc2FnZUlkIHdhcyBwcm92aWRlZCwgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHN1cHBvcnRlZC4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU91dGJvdW5kQ2FjaGVSZXF1ZXN0KG1ldGhvZDogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5kYlNlcnZpY2UpIHtcclxuICAgICAgdGhpcy5kYlNlcnZpY2UuZ2V0QnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKS5zdWJzY3JpYmUoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbmQoJ19fX2NhY2hlJywge1xyXG4gICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgIHNwZWNpZmljSGFzaDogaXRlbS5zcGVjaWZpY0hhc2ggfHwgbnVsbCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNlbmQoJ19fX2NhY2hlJywge1xyXG4gICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgIHNwZWNpZmljSGFzaDogbnVsbCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbmQoJ19fX2NhY2hlJywge1xyXG4gICAgICAgIG1ldGhvZCxcclxuICAgICAgICBzcGVjaWZpY0hhc2g6IG51bGwsXHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICdBY3RpdmUtQ29ubmVjdDogQ2FjaGluZyBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBvdXRib3VuZHM6IE1hcDxcclxuICAgIHN0cmluZyxcclxuICAgIChcclxuICAgICAgZGF0YTogYW55LFxyXG4gICAgICBzcGVjaWZpY0hhc2g6IG51bWJlciB8IG51bGwsXHJcbiAgICAgIGluc2VydGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgIHVwZGF0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgZGVsZXRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICBsZW5ndGg6IG51bWJlciB8IG51bGwsXHJcbiAgICAgIF90aGlzOiBXZWJzb2NrZXRDbGllbnRcclxuICAgICkgPT4gdm9pZFxyXG4gID4gPSBuZXcgTWFwKCk7XHJcbiAgc3RhdGljIGV4cGVjdE91dGJvdW5kKFxyXG4gICAgbWV0aG9kOiBzdHJpbmcsXHJcbiAgICBjYWxsYmFjazogKFxyXG4gICAgICBkYXRhOiBhbnksXHJcbiAgICAgIHNwZWNpZmljSGFzaDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgaW5zZXJ0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgdXBkYXRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICBkZWxldGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgIGxlbmd0aDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgX3RoaXM6IFdlYnNvY2tldENsaWVudFxyXG4gICAgKSA9PiB2b2lkXHJcbiAgKSB7XHJcbiAgICBXZWJzb2NrZXRDbGllbnQub3V0Ym91bmRzLnNldChtZXRob2QsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGhhbmRsZXM6IE1hcDxzdHJpbmcsIERlY29yYWJsZUZ1bmN0aW9uPiA9IG5ldyBNYXAoKTtcclxuICBzdGF0aWMgcmVnaXN0ZXJIYW5kbGUobWV0aG9kOiBzdHJpbmcsIGNhbGxiYWNrOiBEZWNvcmFibGVGdW5jdGlvbikge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50LmhhbmRsZXMuc2V0KG1ldGhvZCwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpc0Nvbm5lY3RlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLndzKSByZXR1cm4gdGhpcy53cy5yZWFkeVN0YXRlID09IFdlYlNvY2tldC5PUEVOO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbmRCcm93c2VySW5mb1RvU2VydmVyKCkge1xyXG4gICAgLy8gc2VuZCBicm93c2VyIC8gb3MgaW5mb3JtYXRpb25cclxuICAgIGNvbnN0IGJyb3dzZXIgPSB0aGlzLmdldEJyb3dzZXIoKTtcclxuICAgIGNvbnN0IG9zID0gdGhpcy5nZXRPUygpO1xyXG4gICAgdGhpcy5zZW5kKCdfX19icm93c2VyJywge1xyXG4gICAgICBicm93c2VyOiBgJHticm93c2VyLm5hbWV9ICR7YnJvd3Nlci52ZXJzaW9ufSAke29zfWAsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRCcm93c2VyKCk6IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfSB7XHJcbiAgICAvLyBodHRwczovL3d3dy5ncmVnb3J5dmFyZ2hlc2UuY29tL2hvdy10by1nZXQtYnJvd3Nlci1uYW1lLWFuZC12ZXJzaW9uLXZpYS1qYXZhc2NyaXB0L1xyXG4gICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudCxcclxuICAgICAgdGVtLFxyXG4gICAgICBNID1cclxuICAgICAgICB1YS5tYXRjaChcclxuICAgICAgICAgIC8ob3BlcmF8Y2hyb21lfHNhZmFyaXxmaXJlZm94fG1zaWV8dHJpZGVudCg/PVxcLykpXFwvP1xccyooXFxkKykvaVxyXG4gICAgICAgICkgfHwgW107XHJcbiAgICBpZiAoL3RyaWRlbnQvaS50ZXN0KE1bMV0pKSB7XHJcbiAgICAgIHRlbSA9IC9cXGJydlsgOl0rKFxcZCspL2cuZXhlYyh1YSkgfHwgW107XHJcbiAgICAgIHJldHVybiB7IG5hbWU6ICdJRSAnLCB2ZXJzaW9uOiB0ZW1bMV0gfHwgJycgfTtcclxuICAgIH1cclxuICAgIGlmIChNWzFdID09PSAnQ2hyb21lJykge1xyXG4gICAgICB0ZW0gPSB1YS5tYXRjaCgvXFxiT1BSXFwvKFxcZCspLyk7XHJcbiAgICAgIGlmICh0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiB7IG5hbWU6ICdPcGVyYScsIHZlcnNpb246IHRlbVsxXSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBNID0gTVsyXSA/IFtNWzFdLCBNWzJdXSA6IFtuYXZpZ2F0b3IuYXBwTmFtZSwgbmF2aWdhdG9yLmFwcFZlcnNpb24sICctPyddO1xyXG4gICAgaWYgKCh0ZW0gPSB1YS5tYXRjaCgvdmVyc2lvblxcLyhcXGQrKS9pKSkgIT0gbnVsbCkge1xyXG4gICAgICBNLnNwbGljZSgxLCAxLCB0ZW1bMV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmFtZTogTVswXSxcclxuICAgICAgdmVyc2lvbjogTVsxXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0T1MoKTogc3RyaW5nIHtcclxuICAgIHZhciB1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCxcclxuICAgICAgcGxhdGZvcm0gPSB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLFxyXG4gICAgICBtYWNvc1BsYXRmb3JtcyA9IFsnTWFjaW50b3NoJywgJ01hY0ludGVsJywgJ01hY1BQQycsICdNYWM2OEsnXSxcclxuICAgICAgd2luZG93c1BsYXRmb3JtcyA9IFsnV2luMzInLCAnV2luNjQnLCAnV2luZG93cycsICdXaW5DRSddLFxyXG4gICAgICBpb3NQbGF0Zm9ybXMgPSBbJ2lQaG9uZScsICdpUGFkJywgJ2lQb2QnXSxcclxuICAgICAgb3MgPSBudWxsO1xyXG5cclxuICAgIGlmIChtYWNvc1BsYXRmb3Jtcy5pbmRleE9mKHBsYXRmb3JtKSAhPT0gLTEpIHtcclxuICAgICAgb3MgPSAnTWFjIE9TJztcclxuICAgIH0gZWxzZSBpZiAoaW9zUGxhdGZvcm1zLmluZGV4T2YocGxhdGZvcm0pICE9PSAtMSkge1xyXG4gICAgICBvcyA9ICdpT1MnO1xyXG4gICAgfSBlbHNlIGlmICh3aW5kb3dzUGxhdGZvcm1zLmluZGV4T2YocGxhdGZvcm0pICE9PSAtMSkge1xyXG4gICAgICBvcyA9ICdXaW5kb3dzJztcclxuICAgIH0gZWxzZSBpZiAoL0FuZHJvaWQvLnRlc3QodXNlckFnZW50KSkge1xyXG4gICAgICBvcyA9ICdBbmRyb2lkJztcclxuICAgIH0gZWxzZSBpZiAoIW9zICYmIC9MaW51eC8udGVzdChwbGF0Zm9ybSkpIHtcclxuICAgICAgb3MgPSAnTGludXgnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvcyB8fCAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIG9uU3VjY2Vzc0hhbmRsZXJzOiB7XHJcbiAgICBjYWxsYmFjazogRGVjb3JhYmxlRnVuY3Rpb247XHJcbiAgICByZWdleHA6IFJlZ0V4cDtcclxuICB9W10gPSBbXTtcclxuICBwdWJsaWMgc3RhdGljIG9uU3VjY2VzcyhjYWxsYmFjazogRGVjb3JhYmxlRnVuY3Rpb24sIHJlZ2V4cDogUmVnRXhwKSB7XHJcbiAgICB0aGlzLm9uU3VjY2Vzc0hhbmRsZXJzLnB1c2goeyBjYWxsYmFjaywgcmVnZXhwIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnZva2VTdWNjZXNzSGFuZGxlcnMobWV0aG9kOiBzdHJpbmcpIHtcclxuICAgIFdlYnNvY2tldENsaWVudC5vblN1Y2Nlc3NIYW5kbGVyc1xyXG4gICAgICAuZmlsdGVyKChlKSA9PiBlLnJlZ2V4cC50ZXN0KG1ldGhvZCkpXHJcbiAgICAgIC5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgdmFyIHJlcyA9IChlLmNhbGxiYWNrLkZ1bmMgYXMgRnVuY3Rpb24pKCk7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMudGhlbikge1xyXG4gICAgICAgICAgcmVzLnRoZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkaXNjb25uZWN0KHJlc3RhcnQ/OiBib29sZWFuKSB7XHJcbiAgICBpZiAoIXJlc3RhcnQpIHRoaXMuY2xvc2VkID0gdHJ1ZTtcclxuICAgIHRoaXMud3MuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENhY2hlKCkge31cclxufVxyXG4iXX0=
|
|
@@ -3,7 +3,7 @@ export function Outbound(method, requestingRequired, cached) {
|
|
|
3
3
|
return function _Outbound(target, propertyKey) {
|
|
4
4
|
target.loading = new Map();
|
|
5
5
|
// property annotation
|
|
6
|
-
WebsocketClient.expectOutbound(method, function setOutbound(data,
|
|
6
|
+
WebsocketClient.expectOutbound(method, function setOutbound(data, specificHash, inserted, updated, deleted, length, _this) {
|
|
7
7
|
if (!target.___received)
|
|
8
8
|
target.___received = {};
|
|
9
9
|
if (!target.___data)
|
|
@@ -41,27 +41,43 @@ export function Outbound(method, requestingRequired, cached) {
|
|
|
41
41
|
target.___data[propertyKey] = undefined;
|
|
42
42
|
target.loading.set(propertyKey, false);
|
|
43
43
|
}
|
|
44
|
+
else if (data == 'data_delete') {
|
|
45
|
+
target.___data[propertyKey] = undefined;
|
|
46
|
+
target.loading.set(propertyKey, false);
|
|
47
|
+
target.___received[propertyKey] = false;
|
|
48
|
+
target.___requested[propertyKey] = false;
|
|
49
|
+
}
|
|
44
50
|
else if (data == 'data_diff') {
|
|
45
51
|
var data = target.___data[propertyKey] || [];
|
|
46
52
|
inserted?.forEach((e) => {
|
|
47
|
-
data.
|
|
53
|
+
const matching = data.filter((d) => d.id == e.id);
|
|
54
|
+
if (matching.length > 0) {
|
|
55
|
+
data[data.indexOf(matching[0])] = e;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
data.push(e);
|
|
59
|
+
}
|
|
48
60
|
});
|
|
49
61
|
updated?.forEach((e) => {
|
|
50
|
-
|
|
51
|
-
|
|
62
|
+
const matching = data.filter((d) => d.id == e.id);
|
|
63
|
+
if (matching.length > 0) {
|
|
64
|
+
data[data.indexOf(matching[0])] = e;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
data.push(e);
|
|
68
|
+
}
|
|
52
69
|
});
|
|
53
70
|
deleted?.forEach((e) => {
|
|
54
71
|
data = data.filter((d) => d.id != e.id);
|
|
55
72
|
});
|
|
56
73
|
target.___data[propertyKey] = data;
|
|
57
74
|
target.loading.set(propertyKey, false);
|
|
58
|
-
if (cached &&
|
|
75
|
+
if (cached && specificHash) {
|
|
59
76
|
if (_this.dbService) {
|
|
60
77
|
_this.dbService
|
|
61
78
|
.update('outbound', {
|
|
62
79
|
method,
|
|
63
80
|
data,
|
|
64
|
-
globalHash,
|
|
65
81
|
specificHash,
|
|
66
82
|
})
|
|
67
83
|
.subscribe(() => { });
|
|
@@ -76,13 +92,12 @@ export function Outbound(method, requestingRequired, cached) {
|
|
|
76
92
|
target.___received[propertyKey] = true;
|
|
77
93
|
target.___data[propertyKey] = data;
|
|
78
94
|
target.loading.set(propertyKey, false);
|
|
79
|
-
if (cached &&
|
|
95
|
+
if (cached && specificHash) {
|
|
80
96
|
if (_this.dbService) {
|
|
81
97
|
_this.dbService
|
|
82
98
|
.update('outbound', {
|
|
83
99
|
method,
|
|
84
100
|
data,
|
|
85
|
-
globalHash,
|
|
86
101
|
specificHash,
|
|
87
102
|
})
|
|
88
103
|
.subscribe(() => { });
|
|
@@ -128,4 +143,4 @@ export function Outbound(method, requestingRequired, cached) {
|
|
|
128
143
|
};
|
|
129
144
|
};
|
|
130
145
|
}
|
|
131
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY3RpdmUtY29ubmVjdC1uZzIvc3JjL2xpYi93ZWJzb2NrZXQvZGVjb3JhdG9ycy93ZWJzb2NrZXQvb3V0Ym91bmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUvQyxNQUFNLFVBQVUsUUFBUSxDQUN0QixNQUFjLEVBQ2Qsa0JBQTRCLEVBQzVCLE1BQWdCO0lBRWhCLE9BQU8sU0FBUyxTQUFTLENBQUMsTUFBVyxFQUFFLFdBQW1CO1FBQ3hELE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFDNUMsc0JBQXNCO1FBQ3RCLGVBQWUsQ0FBQyxjQUFjLENBQzVCLE1BQU0sRUFDTixTQUFTLFdBQVcsQ0FDbEIsSUFBUyxFQUNULFVBQXlCLEVBQ3pCLFlBQTJCLEVBQzNCLFFBQXNCLEVBQ3RCLE9BQXFCLEVBQ3JCLE9BQXFCLEVBQ3JCLEtBQXNCO1lBRXRCLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVztnQkFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87Z0JBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXO2dCQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtnQkFBRSxNQUFNLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNYLElBQUksS0FBSyxDQUFDLFNBQVM7b0JBQ2pCLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdkU7WUFFRCxJQUFJLElBQUksSUFBSSxlQUFlLEVBQUU7Z0JBQzNCLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtvQkFDbkIsS0FBSyxDQUFDLFNBQVM7eUJBQ1osUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUM7eUJBQzVCLFNBQVMsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO3dCQUN6QixNQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQzt3QkFDdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO3dCQUMxQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ3pDLENBQUMsQ0FBQyxDQUFDO2lCQUNOO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxLQUFLLENBQ1gscUZBQXFGLENBQ3RGLENBQUM7aUJBQ0g7YUFDRjtpQkFBTSxJQUFJLElBQUksSUFBSSxjQUFjLEVBQUU7Z0JBQ2pDLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtvQkFDbkIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztpQkFDckU7cUJBQU07b0JBQ0wsT0FBTyxDQUFDLEtBQUssQ0FDWCxxRkFBcUYsQ0FDdEYsQ0FBQztpQkFDSDtnQkFDRCxNQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDeEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxTQUFTLENBQUM7Z0JBQ3hDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN4QztpQkFBTSxJQUFJLElBQUksSUFBSSxXQUFXLEVBQUU7Z0JBQzlCLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUM3QyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNyQixJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNyQixJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQy9DLENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUNuQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBRXZDLElBQUksTUFBTSxJQUFJLFVBQVUsSUFBSSxZQUFZLEVBQUU7b0JBQ3hDLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTt3QkFDbkIsS0FBSyxDQUFDLFNBQVM7NkJBQ1osTUFBTSxDQUFDLFVBQVUsRUFBRTs0QkFDbEIsTUFBTTs0QkFDTixJQUFJOzRCQUNKLFVBQVU7NEJBQ1YsWUFBWTt5QkFDYixDQUFDOzZCQUNELFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQzt3QkFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3FCQUNqQzt5QkFBTTt3QkFDTCxPQUFPLENBQUMsS0FBSyxDQUNYLGdGQUFnRixDQUNqRixDQUFDO3FCQUNIO2lCQUNGO2FBQ0Y7aUJBQU07Z0JBQ0wsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUNuQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksTUFBTSxJQUFJLFVBQVUsSUFBSSxZQUFZLEVBQUU7b0JBQ3hDLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTt3QkFDbkIsS0FBSyxDQUFDLFNBQVM7NkJBQ1osTUFBTSxDQUFDLFVBQVUsRUFBRTs0QkFDbEIsTUFBTTs0QkFDTixJQUFJOzRCQUNKLFVBQVU7NEJBQ1YsWUFBWTt5QkFDYixDQUFDOzZCQUNELFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQzt3QkFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3FCQUNqQzt5QkFBTTt3QkFDTCxPQUFPLENBQUMsS0FBSyxDQUNYLGdGQUFnRixDQUNqRixDQUFDO3FCQUNIO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQ0YsQ0FBQztRQUNGLElBQUksa0JBQWtCLEVBQUU7WUFDdEIsZUFBZSxDQUFDLCtCQUErQixDQUFDLFNBQVMsUUFBUTtnQkFDL0QsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO29CQUN2QixNQUFNLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEtBQUssQ0FBQztpQkFDMUM7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTztZQUNMLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsR0FBRztnQkFDRCxJQUFJLGtCQUFrQixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDM0QsTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDN0M7Z0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO29CQUFFLE1BQU0sQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDaEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUN2QztxQkFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQ3RDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDeEM7Z0JBQ0QsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFDRCxHQUFHLENBQUMsR0FBUTtnQkFDVixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87b0JBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDdkMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDN0MsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV2Vic29ja2V0Q2xpZW50IH0gZnJvbSAnLi4vLi4vY2xpZW50JztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBPdXRib3VuZChcclxuICBtZXRob2Q6IHN0cmluZyxcclxuICByZXF1ZXN0aW5nUmVxdWlyZWQ/OiBib29sZWFuLFxyXG4gIGNhY2hlZD86IGJvb2xlYW5cclxuKSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIF9PdXRib3VuZCh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZyk6IGFueSB7XHJcbiAgICB0YXJnZXQubG9hZGluZyA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xyXG4gICAgLy8gcHJvcGVydHkgYW5ub3RhdGlvblxyXG4gICAgV2Vic29ja2V0Q2xpZW50LmV4cGVjdE91dGJvdW5kKFxyXG4gICAgICBtZXRob2QsXHJcbiAgICAgIGZ1bmN0aW9uIHNldE91dGJvdW5kKFxyXG4gICAgICAgIGRhdGE6IGFueSxcclxuICAgICAgICBnbG9iYWxIYXNoOiBudW1iZXIgfCBudWxsLFxyXG4gICAgICAgIHNwZWNpZmljSGFzaDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgICBpbnNlcnRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICAgIHVwZGF0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgICBkZWxldGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgICAgX3RoaXM6IFdlYnNvY2tldENsaWVudFxyXG4gICAgICApIHtcclxuICAgICAgICBpZiAoIXRhcmdldC5fX19yZWNlaXZlZCkgdGFyZ2V0Ll9fX3JlY2VpdmVkID0ge307XHJcbiAgICAgICAgaWYgKCF0YXJnZXQuX19fZGF0YSkgdGFyZ2V0Ll9fX2RhdGEgPSB7fTtcclxuICAgICAgICBpZiAoIXRhcmdldC5fX19yZWNlaXZlZCkgdGFyZ2V0Ll9fX3JlY2VpdmVkID0ge307XHJcbiAgICAgICAgaWYgKCF0YXJnZXQuX19fcmVxdWVzdGVkKSB0YXJnZXQuX19fcmVxdWVzdGVkID0ge307XHJcbiAgICAgICAgaWYgKCFjYWNoZWQpIHtcclxuICAgICAgICAgIGlmIChfdGhpcy5kYlNlcnZpY2UpXHJcbiAgICAgICAgICAgIF90aGlzLmRiU2VydmljZS5kZWxldGVCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpLnN1YnNjcmliZSgoKSA9PiB7fSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGF0YSA9PSAnY2FjaGVfcmVzdG9yZScpIHtcclxuICAgICAgICAgIGlmIChfdGhpcy5kYlNlcnZpY2UpIHtcclxuICAgICAgICAgICAgX3RoaXMuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgLmdldEJ5S2V5KCdvdXRib3VuZCcsIG1ldGhvZClcclxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0Ll9fX3JlY2VpdmVkW3Byb3BlcnR5S2V5XSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuX19fZGF0YVtwcm9wZXJ0eUtleV0gPSByZXN1bHQuZGF0YTtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAnQWN0aXZlIC0gQ29ubmVjdDogQ2FjaGluZyAvIHJlc3RvcmUgbm90IHBvc3NpYmxlIGFzIHRoZSBpbmRleGVkREIgaXMgbm90IGFjY2Vzc2libGUnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09ICdjYWNoZV9kZWxldGUnKSB7XHJcbiAgICAgICAgICBpZiAoX3RoaXMuZGJTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIF90aGlzLmRiU2VydmljZS5kZWxldGVCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpLnN1YnNjcmliZSgoKSA9PiB7fSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICdBY3RpdmUgLSBDb25uZWN0OiBDYWNoaW5nIC8gcmVzdG9yZSBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBpcyBub3QgYWNjZXNzaWJsZSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRhcmdldC5fX19yZWNlaXZlZFtwcm9wZXJ0eUtleV0gPSBmYWxzZTtcclxuICAgICAgICAgIHRhcmdldC5fX19kYXRhW3Byb3BlcnR5S2V5XSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgZmFsc2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PSAnZGF0YV9kaWZmJykge1xyXG4gICAgICAgICAgdmFyIGRhdGEgPSB0YXJnZXQuX19fZGF0YVtwcm9wZXJ0eUtleV0gfHwgW107XHJcbiAgICAgICAgICBpbnNlcnRlZD8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBkYXRhLnB1c2goZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHVwZGF0ZWQ/LmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKChkOiBhbnkpID0+IGQuaWQgIT0gZS5pZCk7XHJcbiAgICAgICAgICAgIGRhdGEucHVzaChlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZGVsZXRlZD8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoKGQ6IGFueSkgPT4gZC5pZCAhPSBlLmlkKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGFyZ2V0Ll9fX2RhdGFbcHJvcGVydHlLZXldID0gZGF0YTtcclxuICAgICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgIGlmIChjYWNoZWQgJiYgZ2xvYmFsSGFzaCAmJiBzcGVjaWZpY0hhc2gpIHtcclxuICAgICAgICAgICAgaWYgKF90aGlzLmRiU2VydmljZSkge1xyXG4gICAgICAgICAgICAgIF90aGlzLmRiU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLnVwZGF0ZSgnb3V0Ym91bmQnLCB7XHJcbiAgICAgICAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgICAgICAgZ2xvYmFsSGFzaCxcclxuICAgICAgICAgICAgICAgICAgc3BlY2lmaWNIYXNoLFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkIG91dGJvdW5kJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAgICdBY3RpdmUtQ29ubmVjdDogQ2FjaGluZyBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQnXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0YXJnZXQuX19fcmVjZWl2ZWRbcHJvcGVydHlLZXldID0gdHJ1ZTtcclxuICAgICAgICAgIHRhcmdldC5fX19kYXRhW3Byb3BlcnR5S2V5XSA9IGRhdGE7XHJcbiAgICAgICAgICB0YXJnZXQubG9hZGluZy5zZXQocHJvcGVydHlLZXksIGZhbHNlKTtcclxuICAgICAgICAgIGlmIChjYWNoZWQgJiYgZ2xvYmFsSGFzaCAmJiBzcGVjaWZpY0hhc2gpIHtcclxuICAgICAgICAgICAgaWYgKF90aGlzLmRiU2VydmljZSkge1xyXG4gICAgICAgICAgICAgIF90aGlzLmRiU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLnVwZGF0ZSgnb3V0Ym91bmQnLCB7XHJcbiAgICAgICAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgICAgICAgZ2xvYmFsSGFzaCxcclxuICAgICAgICAgICAgICAgICAgc3BlY2lmaWNIYXNoLFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkIG91dGJvdW5kJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAgICdBY3RpdmUtQ29ubmVjdDogQ2FjaGluZyBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQnXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIGlmIChyZXF1ZXN0aW5nUmVxdWlyZWQpIHtcclxuICAgICAgV2Vic29ja2V0Q2xpZW50LmFkZFJlc2V0UmVxdWVzdGluZ1N0YXRlQ2FsbGJhY2soZnVuY3Rpb24gY2FsbGJhY2soKSB7XHJcbiAgICAgICAgaWYgKHRhcmdldC5fX19yZXF1ZXN0ZWQpIHtcclxuICAgICAgICAgIHRhcmdldC5fX19yZXF1ZXN0ZWRbcHJvcGVydHlLZXldID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgd3JpdGVhYmxlOiB0cnVlLFxyXG4gICAgICBnZXQoKSB7XHJcbiAgICAgICAgaWYgKHJlcXVlc3RpbmdSZXF1aXJlZCAmJiAhdGFyZ2V0Ll9fX3JlcXVlc3RlZFtwcm9wZXJ0eUtleV0pIHtcclxuICAgICAgICAgIHRhcmdldC5fX19yZXF1ZXN0ZWRbcHJvcGVydHlLZXldID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc2VuZCgncmVxdWVzdC4nICsgbWV0aG9kLCBudWxsKS50aGVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGFyZ2V0Ll9fX2RhdGEpIHRhcmdldC5fX19kYXRhID0ge307XHJcbiAgICAgICAgaWYgKCF0YXJnZXQuX19fZGF0YVtwcm9wZXJ0eUtleV0pIHtcclxuICAgICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgdHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQubG9hZGluZ1twcm9wZXJ0eUtleV0pIHtcclxuICAgICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0Ll9fX2RhdGFbcHJvcGVydHlLZXldO1xyXG4gICAgICB9LFxyXG4gICAgICBzZXQodmFsOiBhbnkpIHtcclxuICAgICAgICBpZiAoIXRhcmdldC5fX19kYXRhKSB0YXJnZXQuX19fZGF0YSA9IHt9O1xyXG4gICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgZmFsc2UpO1xyXG4gICAgICAgIHJldHVybiAodGFyZ2V0Ll9fX2RhdGFbcHJvcGVydHlLZXldID0gdmFsKTtcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG4iXX0=
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY3RpdmUtY29ubmVjdC1uZzIvc3JjL2xpYi93ZWJzb2NrZXQvZGVjb3JhdG9ycy93ZWJzb2NrZXQvb3V0Ym91bmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUvQyxNQUFNLFVBQVUsUUFBUSxDQUN0QixNQUFjLEVBQ2Qsa0JBQTRCLEVBQzVCLE1BQWdCO0lBRWhCLE9BQU8sU0FBUyxTQUFTLENBQUMsTUFBVyxFQUFFLFdBQW1CO1FBQ3hELE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFDNUMsc0JBQXNCO1FBQ3RCLGVBQWUsQ0FBQyxjQUFjLENBQzVCLE1BQU0sRUFDTixTQUFTLFdBQVcsQ0FDbEIsSUFBUyxFQUNULFlBQTJCLEVBQzNCLFFBQXNCLEVBQ3RCLE9BQXFCLEVBQ3JCLE9BQXFCLEVBQ3JCLE1BQXFCLEVBQ3JCLEtBQXNCO1lBRXRCLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVztnQkFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87Z0JBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXO2dCQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtnQkFBRSxNQUFNLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNYLElBQUksS0FBSyxDQUFDLFNBQVM7b0JBQ2pCLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxTQUFT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QUFDLFdBQVcsQ0FBQyxFQUFFO29CQUNoQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQ3ZDO3FCQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDdEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUN4QztnQkFDRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsQ0FBQztZQUNELEdBQUcsQ0FBQyxHQUFRO2dCQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztvQkFBRSxNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUM3QyxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXZWJzb2NrZXRDbGllbnQgfSBmcm9tICcuLi8uLi9jbGllbnQnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE91dGJvdW5kKFxyXG4gIG1ldGhvZDogc3RyaW5nLFxyXG4gIHJlcXVlc3RpbmdSZXF1aXJlZD86IGJvb2xlYW4sXHJcbiAgY2FjaGVkPzogYm9vbGVhblxyXG4pIHtcclxuICByZXR1cm4gZnVuY3Rpb24gX091dGJvdW5kKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKTogYW55IHtcclxuICAgIHRhcmdldC5sb2FkaW5nID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XHJcbiAgICAvLyBwcm9wZXJ0eSBhbm5vdGF0aW9uXHJcbiAgICBXZWJzb2NrZXRDbGllbnQuZXhwZWN0T3V0Ym91bmQoXHJcbiAgICAgIG1ldGhvZCxcclxuICAgICAgZnVuY3Rpb24gc2V0T3V0Ym91bmQoXHJcbiAgICAgICAgZGF0YTogYW55LFxyXG4gICAgICAgIHNwZWNpZmljSGFzaDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgICBpbnNlcnRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICAgIHVwZGF0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgICBkZWxldGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgICAgbGVuZ3RoOiBudW1iZXIgfCBudWxsLFxyXG4gICAgICAgIF90aGlzOiBXZWJzb2NrZXRDbGllbnRcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKCF0YXJnZXQuX19fcmVjZWl2ZWQpIHRhcmdldC5fX19yZWNlaXZlZCA9IHt9O1xyXG4gICAgICAgIGlmICghdGFyZ2V0Ll9fX2RhdGEpIHRhcmdldC5fX19kYXRhID0ge307XHJcbiAgICAgICAgaWYgKCF0YXJnZXQuX19fcmVjZWl2ZWQpIHRhcmdldC5fX19yZWNlaXZlZCA9IHt9O1xyXG4gICAgICAgIGlmICghdGFyZ2V0Ll9fX3JlcXVlc3RlZCkgdGFyZ2V0Ll9fX3JlcXVlc3RlZCA9IHt9O1xyXG4gICAgICAgIGlmICghY2FjaGVkKSB7XHJcbiAgICAgICAgICBpZiAoX3RoaXMuZGJTZXJ2aWNlKVxyXG4gICAgICAgICAgICBfdGhpcy5kYlNlcnZpY2UuZGVsZXRlQnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKS5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRhdGEgPT0gJ2NhY2hlX3Jlc3RvcmUnKSB7XHJcbiAgICAgICAgICBpZiAoX3RoaXMuZGJTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIF90aGlzLmRiU2VydmljZVxyXG4gICAgICAgICAgICAgIC5nZXRCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpXHJcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5fX19yZWNlaXZlZFtwcm9wZXJ0eUtleV0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0Ll9fX2RhdGFbcHJvcGVydHlLZXldID0gcmVzdWx0LmRhdGE7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQubG9hZGluZy5zZXQocHJvcGVydHlLZXksIGZhbHNlKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICAgJ0FjdGl2ZSAtIENvbm5lY3Q6IENhY2hpbmcgLyByZXN0b3JlIG5vdCBwb3NzaWJsZSBhcyB0aGUgaW5kZXhlZERCIGlzIG5vdCBhY2Nlc3NpYmxlJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PSAnY2FjaGVfZGVsZXRlJykge1xyXG4gICAgICAgICAgaWYgKF90aGlzLmRiU2VydmljZSkge1xyXG4gICAgICAgICAgICBfdGhpcy5kYlNlcnZpY2UuZGVsZXRlQnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKS5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAnQWN0aXZlIC0gQ29ubmVjdDogQ2FjaGluZyAvIHJlc3RvcmUgbm90IHBvc3NpYmxlIGFzIHRoZSBpbmRleGVkREIgaXMgbm90IGFjY2Vzc2libGUnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0YXJnZXQuX19fcmVjZWl2ZWRbcHJvcGVydHlLZXldID0gZmFsc2U7XHJcbiAgICAgICAgICB0YXJnZXQuX19fZGF0YVtwcm9wZXJ0eUtleV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB0YXJnZXQubG9hZGluZy5zZXQocHJvcGVydHlLZXksIGZhbHNlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gJ2RhdGFfZGVsZXRlJykge1xyXG4gICAgICAgICAgdGFyZ2V0Ll9fX2RhdGFbcHJvcGVydHlLZXldID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgdGFyZ2V0LmxvYWRpbmcuc2V0KHByb3BlcnR5S2V5LCBmYWxzZSk7XHJcbiAgICAgICAgICB0YXJnZXQuX19fcmVjZWl2ZWRbcHJvcGVydHlLZXldID0gZmFsc2U7XHJcbiAgICAgICAgICB0YXJnZXQuX19fcmVxdWVzdGVkW3Byb3BlcnR5S2V5XSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PSAnZGF0YV9kaWZmJykge1xyXG4gICAgICAgICAgdmFyIGRhdGEgPSB0YXJnZXQuX19fZGF0YVtwcm9wZXJ0eUtleV0gfHwgW107XHJcbiAgICAgICAgICBpbnNlcnRlZD8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZyA9IGRhdGEuZmlsdGVyKChkOiBhbnkpID0+IGQuaWQgPT0gZS5pZCk7XHJcbiAgICAgICAgICAgIGlmIChtYXRjaGluZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgZGF0YVtkYXRhLmluZGV4T2YobWF0Y2hpbmdbMF0pXSA9IGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgZGF0YS5wdXNoKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHVwZGF0ZWQ/LmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmcgPSBkYXRhLmZpbHRlcigoZDogYW55KSA9PiBkLmlkID09IGUuaWQpO1xyXG4gICAgICAgICAgICBpZiAobWF0Y2hpbmcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGRhdGFbZGF0YS5pbmRleE9mKG1hdGNoaW5nWzBdKV0gPSBlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGRhdGEucHVzaChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBkZWxldGVkPy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcigoZDogYW55KSA9PiBkLmlkICE9IGUuaWQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0YXJnZXQuX19fZGF0YVtwcm9wZXJ0eUtleV0gPSBkYXRhO1xyXG4gICAgICAgICAgdGFyZ2V0LmxvYWRpbmcuc2V0KHByb3BlcnR5S2V5LCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgaWYgKGNhY2hlZCAmJiBzcGVjaWZpY0hhc2gpIHtcclxuICAgICAgICAgICAgaWYgKF90aGlzLmRiU2VydmljZSkge1xyXG4gICAgICAgICAgICAgIF90aGlzLmRiU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLnVwZGF0ZSgnb3V0Ym91bmQnLCB7XHJcbiAgICAgICAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgICAgICAgc3BlY2lmaWNIYXNoLFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkIG91dGJvdW5kJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAgICdBY3RpdmUtQ29ubmVjdDogQ2FjaGluZyBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQnXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0YXJnZXQuX19fcmVjZWl2ZWRbcHJvcGVydHlLZXldID0gdHJ1ZTtcclxuICAgICAgICAgIHRhcmdldC5fX19kYXRhW3Byb3BlcnR5S2V5XSA9IGRhdGE7XHJcbiAgICAgICAgICB0YXJnZXQubG9hZGluZy5zZXQocHJvcGVydHlLZXksIGZhbHNlKTtcclxuICAgICAgICAgIGlmIChjYWNoZWQgJiYgc3BlY2lmaWNIYXNoKSB7XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5kYlNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICBfdGhpcy5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC51cGRhdGUoJ291dGJvdW5kJywge1xyXG4gICAgICAgICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgICAgICAgIHNwZWNpZmljSGFzaCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHt9KTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygndXBkYXRlZCBvdXRib3VuZCcpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICAgICAnQWN0aXZlLUNvbm5lY3Q6IENhY2hpbmcgbm90IHBvc3NpYmxlIGFzIHRoZSBpbmRleGVkREIgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkJ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICBpZiAocmVxdWVzdGluZ1JlcXVpcmVkKSB7XHJcbiAgICAgIFdlYnNvY2tldENsaWVudC5hZGRSZXNldFJlcXVlc3RpbmdTdGF0ZUNhbGxiYWNrKGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xyXG4gICAgICAgIGlmICh0YXJnZXQuX19fcmVxdWVzdGVkKSB7XHJcbiAgICAgICAgICB0YXJnZXQuX19fcmVxdWVzdGVkW3Byb3BlcnR5S2V5XSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgIHdyaXRlYWJsZTogdHJ1ZSxcclxuICAgICAgZ2V0KCkge1xyXG4gICAgICAgIGlmIChyZXF1ZXN0aW5nUmVxdWlyZWQgJiYgIXRhcmdldC5fX19yZXF1ZXN0ZWRbcHJvcGVydHlLZXldKSB7XHJcbiAgICAgICAgICB0YXJnZXQuX19fcmVxdWVzdGVkW3Byb3BlcnR5S2V5XSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnNlbmQoJ3JlcXVlc3QuJyArIG1ldGhvZCwgbnVsbCkudGhlbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRhcmdldC5fX19kYXRhKSB0YXJnZXQuX19fZGF0YSA9IHt9O1xyXG4gICAgICAgIGlmICghdGFyZ2V0Ll9fX2RhdGFbcHJvcGVydHlLZXldKSB7XHJcbiAgICAgICAgICB0YXJnZXQubG9hZGluZy5zZXQocHJvcGVydHlLZXksIHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LmxvYWRpbmdbcHJvcGVydHlLZXldKSB7XHJcbiAgICAgICAgICB0YXJnZXQubG9hZGluZy5zZXQocHJvcGVydHlLZXksIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldC5fX19kYXRhW3Byb3BlcnR5S2V5XTtcclxuICAgICAgfSxcclxuICAgICAgc2V0KHZhbDogYW55KSB7XHJcbiAgICAgICAgaWYgKCF0YXJnZXQuX19fZGF0YSkgdGFyZ2V0Ll9fX2RhdGEgPSB7fTtcclxuICAgICAgICB0YXJnZXQubG9hZGluZy5zZXQocHJvcGVydHlLZXksIGZhbHNlKTtcclxuICAgICAgICByZXR1cm4gKHRhcmdldC5fX19kYXRhW3Byb3BlcnR5S2V5XSA9IHZhbCk7XHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuIl19
|
|
@@ -6,4 +6,5 @@ export * from './decorators/websocket/route';
|
|
|
6
6
|
export * from './decorators/websocket/shared';
|
|
7
7
|
export * from './decorators/websocket/websocket-route-service';
|
|
8
8
|
export * from './lifecycle/loading-status';
|
|
9
|
-
|
|
9
|
+
export * from './objects/outbound-object';
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY3RpdmUtY29ubmVjdC1uZzIvc3JjL2xpYi93ZWJzb2NrZXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jbGllbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvd2Vic29ja2V0L2hhbmRsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycy93ZWJzb2NrZXQvb24tc3VjY2Vzcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycy93ZWJzb2NrZXQvb3V0Ym91bmQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvd2Vic29ja2V0L3JvdXRlJztcclxuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3JzL3dlYnNvY2tldC9zaGFyZWQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvd2Vic29ja2V0L3dlYnNvY2tldC1yb3V0ZS1zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWZlY3ljbGUvbG9hZGluZy1zdGF0dXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL29iamVjdHMvb3V0Ym91bmQtb2JqZWN0JztcclxuIl19
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { WebsocketClient } from '../client';
|
|
3
|
+
export class OutboundObject {
|
|
4
|
+
constructor(client, method, lazyLoaded, cached, initialLoadingCount) {
|
|
5
|
+
this.client = client;
|
|
6
|
+
this.method = method;
|
|
7
|
+
this.lazyLoaded = lazyLoaded;
|
|
8
|
+
this.cached = cached;
|
|
9
|
+
this.initialLoadingCount = initialLoadingCount;
|
|
10
|
+
this.dataMap = new Map();
|
|
11
|
+
this.data = undefined;
|
|
12
|
+
this.requested = false;
|
|
13
|
+
this._loading = false;
|
|
14
|
+
this._length = undefined;
|
|
15
|
+
this.loadedId = null;
|
|
16
|
+
this.loadedIdData = null;
|
|
17
|
+
this.loadedIdChanged = null;
|
|
18
|
+
this.loadedGroupId = null;
|
|
19
|
+
this.loadedGroupData = null;
|
|
20
|
+
this.loadedGroupChanged = null;
|
|
21
|
+
this.target.loading = new Map();
|
|
22
|
+
if (this.client.dbService) {
|
|
23
|
+
this.client.dbService
|
|
24
|
+
.getByKey('outbound', method)
|
|
25
|
+
.subscribe((result) => {
|
|
26
|
+
if (result) {
|
|
27
|
+
this.previouslyCachedCount = result.length || null;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
const _this = this;
|
|
32
|
+
WebsocketClient.expectOutbound(method, function setOutbound(data, specificHash, insertedOrGroupData, updatedOrGroupId, deleted, length, _client) {
|
|
33
|
+
if (!cached) {
|
|
34
|
+
if (_client.dbService)
|
|
35
|
+
_client.dbService
|
|
36
|
+
.deleteByKey('outbound', method)
|
|
37
|
+
.subscribe(() => { });
|
|
38
|
+
}
|
|
39
|
+
if (data == 'cache_restore') {
|
|
40
|
+
if (_client.dbService) {
|
|
41
|
+
_client.dbService
|
|
42
|
+
.getByKey('outbound', method)
|
|
43
|
+
.subscribe((result) => {
|
|
44
|
+
_this._loading = false;
|
|
45
|
+
if (result.length)
|
|
46
|
+
_this._length = result.length;
|
|
47
|
+
_this.setData(result.data);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
console.error('Active - Connect: Caching / restore not possible as the indexedDB is not accessible');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else if (data == 'cache_delete') {
|
|
55
|
+
if (_client.dbService) {
|
|
56
|
+
_client.dbService
|
|
57
|
+
.deleteByKey('outbound', method)
|
|
58
|
+
.subscribe(() => { });
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
console.error('Active - Connect: Caching / restore not possible as the indexedDB is not accessible');
|
|
62
|
+
}
|
|
63
|
+
_this._loading = false;
|
|
64
|
+
_this.requested = false;
|
|
65
|
+
}
|
|
66
|
+
else if (data == 'data_delete') {
|
|
67
|
+
_this.data = undefined;
|
|
68
|
+
_this.dataMap = new Map();
|
|
69
|
+
_this.requested = false;
|
|
70
|
+
_this.loadedGroupData = null;
|
|
71
|
+
_this.loadedGroupId = null;
|
|
72
|
+
_this._length = undefined;
|
|
73
|
+
}
|
|
74
|
+
else if (data == 'data_group') {
|
|
75
|
+
_this.loadedGroupData = insertedOrGroupData;
|
|
76
|
+
_this.loadedGroupId = updatedOrGroupId ? updatedOrGroupId[0] : 0;
|
|
77
|
+
_this.loadedGroupChanged?.next(insertedOrGroupData);
|
|
78
|
+
}
|
|
79
|
+
else if (data == 'data_id') {
|
|
80
|
+
_this.loadedIdData =
|
|
81
|
+
(insertedOrGroupData?.length || 0) > 0
|
|
82
|
+
? insertedOrGroupData[0]
|
|
83
|
+
: null;
|
|
84
|
+
_this.loadedId = updatedOrGroupId ? updatedOrGroupId[0] : 0;
|
|
85
|
+
_this.loadedIdChanged?.next(_this.loadedIdData);
|
|
86
|
+
}
|
|
87
|
+
else if (data == 'data_diff') {
|
|
88
|
+
var value = _this.data || [];
|
|
89
|
+
insertedOrGroupData?.forEach((e) => {
|
|
90
|
+
_this.dataMap.set(e.id, e);
|
|
91
|
+
});
|
|
92
|
+
updatedOrGroupId?.forEach((e) => {
|
|
93
|
+
_this.dataMap.set(e.id, e);
|
|
94
|
+
});
|
|
95
|
+
deleted?.forEach((e) => {
|
|
96
|
+
_this.dataMap.delete(e.id);
|
|
97
|
+
});
|
|
98
|
+
_this.data = Array.from(_this.dataMap.values());
|
|
99
|
+
_this._loading = false;
|
|
100
|
+
if (cached && specificHash) {
|
|
101
|
+
if (_client.dbService) {
|
|
102
|
+
_client.dbService
|
|
103
|
+
.update('outbound', {
|
|
104
|
+
method,
|
|
105
|
+
data,
|
|
106
|
+
specificHash,
|
|
107
|
+
length,
|
|
108
|
+
})
|
|
109
|
+
.subscribe(() => { });
|
|
110
|
+
console.log('updated outbound');
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
console.error('Active-Connect: Caching not possible as the indexedDB has not been initialized');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
_this.setData(data);
|
|
119
|
+
_this._loading = false;
|
|
120
|
+
if (cached && specificHash) {
|
|
121
|
+
if (_client.dbService) {
|
|
122
|
+
_client.dbService
|
|
123
|
+
.update('outbound', {
|
|
124
|
+
method,
|
|
125
|
+
data,
|
|
126
|
+
specificHash,
|
|
127
|
+
length,
|
|
128
|
+
})
|
|
129
|
+
.subscribe(() => { });
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
console.error('Active-Connect: Caching not possible as the indexedDB has not been initialized');
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (length)
|
|
137
|
+
_this._length = length;
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
get target() {
|
|
141
|
+
return this.client.__proto__;
|
|
142
|
+
}
|
|
143
|
+
get(id) {
|
|
144
|
+
const observable = new Observable((observer) => {
|
|
145
|
+
this.loadedIdChanged = observer;
|
|
146
|
+
});
|
|
147
|
+
new Promise(async (resolve) => {
|
|
148
|
+
if (!this.requested && this.lazyLoaded) {
|
|
149
|
+
await this.load();
|
|
150
|
+
}
|
|
151
|
+
if (this.data) {
|
|
152
|
+
const res = this.dataMap.get(id);
|
|
153
|
+
if (res) {
|
|
154
|
+
this.loadedIdChanged?.next(res);
|
|
155
|
+
resolve();
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
if (this.loadedId == id) {
|
|
159
|
+
this.loadedIdChanged?.next(this.loadedIdData);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
await this.requestById(id);
|
|
164
|
+
}
|
|
165
|
+
resolve();
|
|
166
|
+
}).then();
|
|
167
|
+
return observable;
|
|
168
|
+
}
|
|
169
|
+
getForGroup(groupId) {
|
|
170
|
+
const observable = new Observable((observer) => {
|
|
171
|
+
this.loadedGroupChanged = observer;
|
|
172
|
+
});
|
|
173
|
+
new Promise(async (resolve) => {
|
|
174
|
+
if (!this.requested && this.lazyLoaded) {
|
|
175
|
+
await this.load();
|
|
176
|
+
}
|
|
177
|
+
if (this.loadedGroupId == groupId) {
|
|
178
|
+
this.loadedGroupChanged?.next(this.loadedGroupData);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
await this.requestForGroup(groupId);
|
|
182
|
+
}
|
|
183
|
+
resolve();
|
|
184
|
+
}).then();
|
|
185
|
+
return observable;
|
|
186
|
+
}
|
|
187
|
+
get all() {
|
|
188
|
+
if (!this.requested && this.lazyLoaded) {
|
|
189
|
+
this.load().then();
|
|
190
|
+
}
|
|
191
|
+
return this.data;
|
|
192
|
+
}
|
|
193
|
+
async load(count) {
|
|
194
|
+
if (this.lazyLoaded) {
|
|
195
|
+
this.requested = true;
|
|
196
|
+
this._loading = true;
|
|
197
|
+
await this.client.send('request.' + this.method, {
|
|
198
|
+
count: count || this.initialLoadingCount,
|
|
199
|
+
loaded: this.loadedLength,
|
|
200
|
+
});
|
|
201
|
+
this._loading = false;
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
throw Error('Active-Connect: Cannot run loading request as this outbound is not lazy-loaded.');
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
get loading() {
|
|
208
|
+
return this._loading;
|
|
209
|
+
}
|
|
210
|
+
get loadedLength() {
|
|
211
|
+
return this.data?.length || 0;
|
|
212
|
+
}
|
|
213
|
+
get length() {
|
|
214
|
+
return this._length;
|
|
215
|
+
}
|
|
216
|
+
requestById(id) {
|
|
217
|
+
return this.client.send('request.' + this.method, { id });
|
|
218
|
+
}
|
|
219
|
+
requestForGroup(groupId) {
|
|
220
|
+
return this.client.send('request.' + this.method, { groupId });
|
|
221
|
+
}
|
|
222
|
+
setData(data) {
|
|
223
|
+
this.data = data;
|
|
224
|
+
this._length = data.length;
|
|
225
|
+
this.dataMap = new Map();
|
|
226
|
+
this.data.forEach((d) => {
|
|
227
|
+
this.dataMap.set(d.id, d);
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
get isEmpty() {
|
|
231
|
+
return this.data == undefined;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQtb2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L29iamVjdHMvb3V0Ym91bmQtb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQU01QyxNQUFNLE9BQU8sY0FBYztJQUV6QixZQUNVLE1BQXVCLEVBQ3ZCLE1BQWMsRUFDZCxVQUFvQixFQUNaLE1BQWdCLEVBQ3hCLG1CQUE0QjtRQUo1QixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUN2QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZUFBVSxHQUFWLFVBQVUsQ0FBVTtRQUNaLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDeEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFTO1FBeUk5QixZQUFPLEdBQW1CLElBQUksR0FBRyxFQUFFLENBQUM7UUFDcEMsU0FBSSxHQUFvQixTQUFTLENBQUM7UUFzRGxDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFpQjNCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFPakIsWUFBTyxHQUF1QixTQUFTLENBQUM7UUFLeEMsYUFBUSxHQUFrQixJQUFJLENBQUM7UUFDL0IsaUJBQVksR0FBYSxJQUFJLENBQUM7UUFDOUIsb0JBQWUsR0FBdUIsSUFBSSxDQUFDO1FBSzNDLGtCQUFhLEdBQWtCLElBQUksQ0FBQztRQUNwQyxvQkFBZSxHQUFlLElBQUksQ0FBQztRQUNuQyx1QkFBa0IsR0FBeUIsSUFBSSxDQUFDO1FBcE90RCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztRQUVqRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ3pC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R0QsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUtPLFdBQVcsQ0FBQyxFQUFVO1FBQzVCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBaUIsQ0FBQztJQUM1RSxDQUFDO0lBS08sZUFBZSxDQUFDLE9BQWU7UUFDckMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVPLE9BQU8sQ0FBQyxJQUFzRDtRQUNwRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQVcsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDO0lBQ2hDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIE9ic2VydmVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFdlYnNvY2tldENsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElkT2JqZWN0IHtcclxuICBpZDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgT3V0Ym91bmRPYmplY3Q8VCBleHRlbmRzIElkT2JqZWN0PiB7XHJcbiAgcHJpdmF0ZSBwcmV2aW91c2x5Q2FjaGVkQ291bnQ6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2xpZW50OiBXZWJzb2NrZXRDbGllbnQsXHJcbiAgICBwcml2YXRlIG1ldGhvZDogc3RyaW5nLFxyXG4gICAgcHJpdmF0ZSBsYXp5TG9hZGVkPzogYm9vbGVhbixcclxuICAgIHB1YmxpYyByZWFkb25seSBjYWNoZWQ/OiBib29sZWFuLFxyXG4gICAgcHJpdmF0ZSBpbml0aWFsTG9hZGluZ0NvdW50PzogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICB0aGlzLnRhcmdldC5sb2FkaW5nID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2xpZW50LmRiU2VydmljZSkge1xyXG4gICAgICB0aGlzLmNsaWVudC5kYlNlcnZpY2VcclxuICAgICAgICAuZ2V0QnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNseUNhY2hlZENvdW50ID0gcmVzdWx0Lmxlbmd0aCB8fCBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgIFdlYnNvY2tldENsaWVudC5leHBlY3RPdXRib3VuZChcclxuICAgICAgbWV0aG9kLFxyXG4gICAgICBmdW5jdGlvbiBzZXRPdXRib3VuZChcclxuICAgICAgICBkYXRhOiBhbnksXHJcbiAgICAgICAgc3BlY2lmaWNIYXNoOiBudW1iZXIgfCBudWxsLFxyXG4gICAgICAgIGluc2VydGVkT3JHcm91cERhdGE6IGFueVtdIHwgbnVsbCxcclxuICAgICAgICB1cGRhdGVkT3JHcm91cElkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgICAgZGVsZXRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICAgIGxlbmd0aDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgICBfY2xpZW50OiBXZWJzb2NrZXRDbGllbnRcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKCFjYWNoZWQpIHtcclxuICAgICAgICAgIGlmIChfY2xpZW50LmRiU2VydmljZSlcclxuICAgICAgICAgICAgX2NsaWVudC5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAuZGVsZXRlQnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKVxyXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRhdGEgPT0gJ2NhY2hlX3Jlc3RvcmUnKSB7XHJcbiAgICAgICAgICBpZiAoX2NsaWVudC5kYlNlcnZpY2UpIHtcclxuICAgICAgICAgICAgX2NsaWVudC5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAuZ2V0QnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKVxyXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgpIF90aGlzLl9sZW5ndGggPSByZXN1bHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuc2V0RGF0YShyZXN1bHQuZGF0YSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICdBY3RpdmUgLSBDb25uZWN0OiBDYWNoaW5nIC8gcmVzdG9yZSBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBpcyBub3QgYWNjZXNzaWJsZSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gJ2NhY2hlX2RlbGV0ZScpIHtcclxuICAgICAgICAgIGlmIChfY2xpZW50LmRiU2VydmljZSkge1xyXG4gICAgICAgICAgICBfY2xpZW50LmRiU2VydmljZVxyXG4gICAgICAgICAgICAgIC5kZWxldGVCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpXHJcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICdBY3RpdmUgLSBDb25uZWN0OiBDYWNoaW5nIC8gcmVzdG9yZSBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBpcyBub3QgYWNjZXNzaWJsZSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIF90aGlzLl9sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBfdGhpcy5yZXF1ZXN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gJ2RhdGFfZGVsZXRlJykge1xyXG4gICAgICAgICAgX3RoaXMuZGF0YSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIF90aGlzLmRhdGFNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgICBfdGhpcy5yZXF1ZXN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIF90aGlzLmxvYWRlZEdyb3VwRGF0YSA9IG51bGw7XHJcbiAgICAgICAgICBfdGhpcy5sb2FkZWRHcm91cElkID0gbnVsbDtcclxuICAgICAgICAgIF90aGlzLl9sZW5ndGggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09ICdkYXRhX2dyb3VwJykge1xyXG4gICAgICAgICAgX3RoaXMubG9hZGVkR3JvdXBEYXRhID0gaW5zZXJ0ZWRPckdyb3VwRGF0YTtcclxuICAgICAgICAgIF90aGlzLmxvYWRlZEdyb3VwSWQgPSB1cGRhdGVkT3JHcm91cElkID8gdXBkYXRlZE9yR3JvdXBJZFswXSA6IDA7XHJcbiAgICAgICAgICBfdGhpcy5sb2FkZWRHcm91cENoYW5nZWQ/Lm5leHQoaW5zZXJ0ZWRPckdyb3VwRGF0YSBhcyBUW10pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PSAnZGF0YV9pZCcpIHtcclxuICAgICAgICAgIF90aGlzLmxvYWRlZElkRGF0YSA9XHJcbiAgICAgICAgICAgIChpbnNlcnRlZE9yR3JvdXBEYXRhPy5sZW5ndGggfHwgMCkgPiAwXHJcbiAgICAgICAgICAgICAgPyAoaW5zZXJ0ZWRPckdyb3VwRGF0YSBhcyBhbnlbXSlbMF1cclxuICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgICBfdGhpcy5sb2FkZWRJZCA9IHVwZGF0ZWRPckdyb3VwSWQgPyB1cGRhdGVkT3JHcm91cElkWzBdIDogMDtcclxuICAgICAgICAgIF90aGlzLmxvYWRlZElkQ2hhbmdlZD8ubmV4dChfdGhpcy5sb2FkZWRJZERhdGEgYXMgVCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09ICdkYXRhX2RpZmYnKSB7XHJcbiAgICAgICAgICB2YXIgdmFsdWUgPSBfdGhpcy5kYXRhIHx8IFtdO1xyXG4gICAgICAgICAgaW5zZXJ0ZWRPckdyb3VwRGF0YT8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBfdGhpcy5kYXRhTWFwLnNldChlLmlkLCBlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdXBkYXRlZE9yR3JvdXBJZD8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBfdGhpcy5kYXRhTWFwLnNldChlLmlkLCBlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZGVsZXRlZD8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBfdGhpcy5kYXRhTWFwLmRlbGV0ZShlLmlkKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgX3RoaXMuZGF0YSA9IEFycmF5LmZyb20oX3RoaXMuZGF0YU1hcC52YWx1ZXMoKSk7XHJcbiAgICAgICAgICBfdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIGlmIChjYWNoZWQgJiYgc3BlY2lmaWNIYXNoKSB7XHJcbiAgICAgICAgICAgIGlmIChfY2xpZW50LmRiU2VydmljZSkge1xyXG4gICAgICAgICAgICAgIF9jbGllbnQuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAudXBkYXRlKCdvdXRib3VuZCcsIHtcclxuICAgICAgICAgICAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICBzcGVjaWZpY0hhc2gsXHJcbiAgICAgICAgICAgICAgICAgIGxlbmd0aCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHt9KTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygndXBkYXRlZCBvdXRib3VuZCcpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICAgICAnQWN0aXZlLUNvbm5lY3Q6IENhY2hpbmcgbm90IHBvc3NpYmxlIGFzIHRoZSBpbmRleGVkREIgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkJ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgX3RoaXMuc2V0RGF0YShkYXRhKTtcclxuICAgICAgICAgIF90aGlzLl9sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoY2FjaGVkICYmIHNwZWNpZmljSGFzaCkge1xyXG4gICAgICAgICAgICBpZiAoX2NsaWVudC5kYlNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICBfY2xpZW50LmRiU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLnVwZGF0ZSgnb3V0Ym91bmQnLCB7XHJcbiAgICAgICAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgICAgICAgc3BlY2lmaWNIYXNoLFxyXG4gICAgICAgICAgICAgICAgICBsZW5ndGgsXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAgICdBY3RpdmUtQ29ubmVjdDogQ2FjaGluZyBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQnXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGVuZ3RoKSBfdGhpcy5fbGVuZ3RoID0gbGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRhcmdldCgpOiBhbnkge1xyXG4gICAgcmV0dXJuICh0aGlzLmNsaWVudCBhcyBhbnkpLl9fcHJvdG9fXztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGF0YU1hcDogTWFwPG51bWJlciwgVD4gPSBuZXcgTWFwKCk7XHJcbiAgcHJpdmF0ZSBkYXRhOiBUW10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblxyXG4gIHB1YmxpYyBnZXQoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgY29uc3Qgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPFQ+KChvYnNlcnZlcikgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRlZElkQ2hhbmdlZCA9IG9ic2VydmVyO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbmV3IFByb21pc2U8dm9pZD4oYXN5bmMgKHJlc29sdmUpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLnJlcXVlc3RlZCAmJiB0aGlzLmxhenlMb2FkZWQpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmxvYWQoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhKSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy5kYXRhTWFwLmdldChpZCk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgdGhpcy5sb2FkZWRJZENoYW5nZWQ/Lm5leHQocmVzKTtcclxuICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubG9hZGVkSWQgPT0gaWQpIHtcclxuICAgICAgICAgIHRoaXMubG9hZGVkSWRDaGFuZ2VkPy5uZXh0KHRoaXMubG9hZGVkSWREYXRhIGFzIFQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnJlcXVlc3RCeUlkKGlkKTtcclxuICAgICAgfVxyXG4gICAgICByZXNvbHZlKCk7XHJcbiAgICB9KS50aGVuKCk7XHJcbiAgICByZXR1cm4gb2JzZXJ2YWJsZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGb3JHcm91cChncm91cElkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFRbXT4ge1xyXG4gICAgY29uc3Qgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPFRbXT4oKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZGVkR3JvdXBDaGFuZ2VkID0gb2JzZXJ2ZXI7XHJcbiAgICB9KTtcclxuICAgIG5ldyBQcm9taXNlPHZvaWQ+KGFzeW5jIChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5yZXF1ZXN0ZWQgJiYgdGhpcy5sYXp5TG9hZGVkKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMubG9hZGVkR3JvdXBJZCA9PSBncm91cElkKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkZWRHcm91cENoYW5nZWQ/Lm5leHQodGhpcy5sb2FkZWRHcm91cERhdGEgYXMgVFtdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnJlcXVlc3RGb3JHcm91cChncm91cElkKTtcclxuICAgICAgfVxyXG4gICAgICByZXNvbHZlKCk7XHJcbiAgICB9KS50aGVuKCk7XHJcbiAgICByZXR1cm4gb2JzZXJ2YWJsZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYWxsKCk6IFRbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIXRoaXMucmVxdWVzdGVkICYmIHRoaXMubGF6eUxvYWRlZCkge1xyXG4gICAgICB0aGlzLmxvYWQoKS50aGVuKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXF1ZXN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgYXN5bmMgbG9hZChjb3VudD86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMubGF6eUxvYWRlZCkge1xyXG4gICAgICB0aGlzLnJlcXVlc3RlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuX2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5zZW5kKCdyZXF1ZXN0LicgKyB0aGlzLm1ldGhvZCwge1xyXG4gICAgICAgIGNvdW50OiBjb3VudCB8fCB0aGlzLmluaXRpYWxMb2FkaW5nQ291bnQsXHJcbiAgICAgICAgbG9hZGVkOiB0aGlzLmxvYWRlZExlbmd0aCxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuX2xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICdBY3RpdmUtQ29ubmVjdDogQ2Fubm90IHJ1biBsb2FkaW5nIHJlcXVlc3QgYXMgdGhpcyBvdXRib3VuZCBpcyBub3QgbGF6eS1sb2FkZWQuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbG9hZGluZyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9sb2FkaW5nO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGxvYWRlZExlbmd0aCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8ubGVuZ3RoIHx8IDA7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2xlbmd0aDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBnZXQgbGVuZ3RoKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkZWRJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRJZERhdGE6IFQgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGxvYWRlZElkQ2hhbmdlZDogT2JzZXJ2ZXI8VD4gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHJlcXVlc3RCeUlkKGlkOiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmQoJ3JlcXVlc3QuJyArIHRoaXMubWV0aG9kLCB7IGlkIH0pIGFzIFByb21pc2U8YW55PjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZGVkR3JvdXBJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRHcm91cERhdGE6IFRbXSB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9hZGVkR3JvdXBDaGFuZ2VkOiBPYnNlcnZlcjxUW10+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSByZXF1ZXN0Rm9yR3JvdXAoZ3JvdXBJZDogbnVtYmVyKTogUHJvbWlzZTxUW10+IHtcclxuICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kKCdyZXF1ZXN0LicgKyB0aGlzLm1ldGhvZCwgeyBncm91cElkIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXREYXRhKGRhdGE6IFRbXSB8IHsgYWRkZWQ6IFRbXSB8IHVuZGVmaW5lZDsgbGVuZ3RoOiBudW1iZXIgfSkge1xyXG4gICAgdGhpcy5kYXRhID0gZGF0YSBhcyBUW107XHJcbiAgICB0aGlzLl9sZW5ndGggPSBkYXRhLmxlbmd0aDtcclxuICAgIHRoaXMuZGF0YU1hcCA9IG5ldyBNYXAoKTtcclxuICAgIHRoaXMuZGF0YS5mb3JFYWNoKChkKSA9PiB7XHJcbiAgICAgIHRoaXMuZGF0YU1hcC5zZXQoZC5pZCwgZCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBpc0VtcHR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YSA9PSB1bmRlZmluZWQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|