@sumaris-net/ngx-components 1.9.9 → 1.10.2
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/bundles/sumaris-net.ngx-components.umd.js +143 -67
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/doc/changelog.md +4 -0
- package/esm2015/public_api.js +2 -2
- package/esm2015/src/app/core/form/editor.class.js +2 -2
- package/esm2015/src/app/core/form/entity-editor.class.js +17 -15
- package/esm2015/src/app/core/home/home.js +2 -2
- package/esm2015/src/app/core/install/install-upgrade-card.component.js +2 -2
- package/esm2015/src/app/core/services/account.service.js +22 -25
- package/esm2015/src/app/core/services/base-entity-service.class.js +3 -3
- package/esm2015/src/app/core/services/config.service.js +2 -2
- package/esm2015/src/app/core/services/network.service.js +5 -5
- package/esm2015/src/app/core/services/platform.service.js +3 -4
- package/esm2015/src/app/core/services/testing/referential-filter.model.js +23 -0
- package/esm2015/src/app/core/services/testing/referential.validator.js +44 -0
- package/esm2015/src/app/core/table/table.class.js +32 -20
- package/esm2015/src/app/shared/shared.testing.module.js +9 -3
- package/esm2015/src/app/shared/toast/toast.testing.js +39 -0
- package/esm2015/src/app/shared/toast/toast.testing.module.js +33 -0
- package/esm2015/src/app/shared/toast/toasts.js +119 -0
- package/esm2015/src/app/social/services/user-event.service.js +2 -2
- package/esm2015/sumaris-net.ngx-components.js +9 -7
- package/fesm2015/sumaris-net.ngx-components.js +140 -63
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +1 -1
- package/src/app/core/form/editor.class.d.ts +1 -1
- package/src/app/core/form/entity-editor.class.d.ts +9 -5
- package/src/app/core/home/home.d.ts +1 -1
- package/src/app/core/services/account.service.d.ts +4 -3
- package/src/app/core/services/config.service.d.ts +1 -1
- package/src/app/core/services/network.service.d.ts +1 -1
- package/src/app/core/services/platform.service.d.ts +1 -1
- package/src/app/core/services/testing/referential-filter.model.d.ts +9 -0
- package/src/app/core/services/testing/referential.validator.d.ts +19 -0
- package/src/app/core/table/table.class.d.ts +1 -1
- package/src/app/shared/shared.testing.module.d.ts +2 -0
- package/src/app/shared/toast/toast.testing.d.ts +14 -0
- package/src/app/shared/toast/toast.testing.module.d.ts +2 -0
- package/src/app/shared/{toasts.d.ts → toast/toasts.d.ts} +0 -0
- package/src/app/social/services/user-event.service.d.ts +1 -1
- package/sumaris-net.ngx-components.d.ts +8 -6
- package/sumaris-net.ngx-components.metadata.json +1 -1
- package/esm2015/src/app/shared/toasts.js +0 -119
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { createAnimation, IonicSafeString } from '@ionic/angular';
|
|
3
|
-
import { isEmptyArray, isNotNil } from './functions';
|
|
4
|
-
const TOAST_MAX_HEIGHT_PX = 75;
|
|
5
|
-
const TOAST_MAX_STACK_SIZE = 4;
|
|
6
|
-
export class Toasts {
|
|
7
|
-
static show(toastController, translate, opts) {
|
|
8
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
9
|
-
if (!toastController || !translate) {
|
|
10
|
-
console.error('Missing required argument \'toastController\' or \'translate\'');
|
|
11
|
-
if (opts.message instanceof IonicSafeString)
|
|
12
|
-
console.info('[toasts] message: ' + (translate && translate.instant(opts.message.value) || opts.message.value));
|
|
13
|
-
else if (typeof opts.message === 'string')
|
|
14
|
-
console.info('[toasts] message: ' + (translate && translate.instant(opts.message, opts.messageParams) || opts.message));
|
|
15
|
-
return Promise.resolve({});
|
|
16
|
-
}
|
|
17
|
-
this.counter++; // Increment toast counter
|
|
18
|
-
let currentOffset = this.stackSize;
|
|
19
|
-
if (this.stackSize < TOAST_MAX_STACK_SIZE) {
|
|
20
|
-
this.stackSize++; // Increment stack offset
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
this.stackSize = 1; // Reset the stack
|
|
24
|
-
currentOffset = 0;
|
|
25
|
-
}
|
|
26
|
-
const updateCounters = () => {
|
|
27
|
-
// Decrease counter
|
|
28
|
-
this.counter--;
|
|
29
|
-
// If all toast closed: reset the stack offset
|
|
30
|
-
if (this.counter === 0) {
|
|
31
|
-
this.stackSize = 0;
|
|
32
|
-
}
|
|
33
|
-
// If current toast is the last one, decrease the offset
|
|
34
|
-
else if (this.stackSize == currentOffset + 1) {
|
|
35
|
-
this.stackSize--;
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
const message = opts.message && opts.message instanceof IonicSafeString ? opts.message.value : opts.message;
|
|
39
|
-
const i18nKeys = [message];
|
|
40
|
-
if (opts.header)
|
|
41
|
-
i18nKeys.push(opts.header);
|
|
42
|
-
let closeButton;
|
|
43
|
-
if (opts.showCloseButton) {
|
|
44
|
-
opts.buttons = opts.buttons || [];
|
|
45
|
-
const buttonIndex = opts.buttons
|
|
46
|
-
.map(b => typeof b === 'object' && b || undefined)
|
|
47
|
-
.filter(isNotNil)
|
|
48
|
-
.findIndex(b => b.role === 'close');
|
|
49
|
-
if (buttonIndex !== -1) {
|
|
50
|
-
closeButton = opts.buttons[buttonIndex];
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
closeButton = { role: 'close' };
|
|
54
|
-
opts.buttons.push(closeButton);
|
|
55
|
-
}
|
|
56
|
-
closeButton.text = closeButton.text || 'COMMON.BTN_OK';
|
|
57
|
-
i18nKeys.push(closeButton.text);
|
|
58
|
-
}
|
|
59
|
-
// Read CSS
|
|
60
|
-
const cssArray = opts.cssClass && typeof opts.cssClass === 'string' && opts.cssClass.split(',') || opts.cssClass || [];
|
|
61
|
-
// Add 'error' class, if need
|
|
62
|
-
if (opts.type) {
|
|
63
|
-
switch (opts.type) {
|
|
64
|
-
case 'error':
|
|
65
|
-
opts.header = 'ERROR';
|
|
66
|
-
cssArray.push('danger');
|
|
67
|
-
break;
|
|
68
|
-
case 'warning':
|
|
69
|
-
cssArray.push('accent');
|
|
70
|
-
break;
|
|
71
|
-
case 'info':
|
|
72
|
-
cssArray.push('secondary');
|
|
73
|
-
break;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
opts.cssClass = cssArray;
|
|
77
|
-
const translations = translate.instant(i18nKeys);
|
|
78
|
-
if (opts.messageParams) {
|
|
79
|
-
translations[message] = translate.instant(message, opts.messageParams);
|
|
80
|
-
}
|
|
81
|
-
if (closeButton) {
|
|
82
|
-
closeButton.text = translations[closeButton.text];
|
|
83
|
-
}
|
|
84
|
-
// Retrieve the toast position
|
|
85
|
-
const position = opts.position || (opts.mode === 'ios' ? 'bottom' : 'top');
|
|
86
|
-
if (!opts.enterAnimation && position !== 'middle') {
|
|
87
|
-
// Compute positions, using the stack offset
|
|
88
|
-
const direction = position === 'top' ? 1 : -1;
|
|
89
|
-
const start = (currentOffset) * TOAST_MAX_HEIGHT_PX - direction * TOAST_MAX_HEIGHT_PX;
|
|
90
|
-
const end = direction * (currentOffset) * TOAST_MAX_HEIGHT_PX;
|
|
91
|
-
opts.enterAnimation = (baseEl, opts) => createAnimation()
|
|
92
|
-
.addElement(baseEl.querySelector('.toast-wrapper'))
|
|
93
|
-
.duration(250)
|
|
94
|
-
.fromTo('transform', `translateY(${start}px)`, `translateY(${end}px)`)
|
|
95
|
-
.fromTo('opacity', '0', '1');
|
|
96
|
-
}
|
|
97
|
-
const toast = yield toastController.create(Object.assign(Object.assign({
|
|
98
|
-
// Default values
|
|
99
|
-
position, duration: opts.showCloseButton ? 10000 : 4000 }, opts), { message: translations[message], header: opts.header && translations[opts.header] || undefined }));
|
|
100
|
-
if (opts.onWillPresent)
|
|
101
|
-
opts.onWillPresent(toast);
|
|
102
|
-
yield toast.present();
|
|
103
|
-
if (isEmptyArray(opts.buttons)) {
|
|
104
|
-
// Not need to wait dismiss (no 'await')
|
|
105
|
-
toast.onDidDismiss().then(updateCounters);
|
|
106
|
-
return null; // no result
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
// Wait for button result
|
|
110
|
-
const result = yield toast.onDidDismiss();
|
|
111
|
-
updateCounters();
|
|
112
|
-
return result;
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
Toasts.counter = 0;
|
|
118
|
-
Toasts.stackSize = 0;
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvdG9hc3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFFLGVBQWUsRUFBa0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUlqRixPQUFPLEVBQUMsWUFBWSxFQUFFLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUVuRCxNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQUMvQixNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQVMvQixNQUFNLE9BQU8sTUFBTTtJQUlqQixNQUFNLENBQU8sSUFBSSxDQUNmLGVBQWdDLEVBQ2hDLFNBQTJCLEVBQzNCLElBQXNCOztZQUV0QixJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNsQyxPQUFPLENBQUMsS0FBSyxDQUFDLGdFQUFnRSxDQUFDLENBQUM7Z0JBQ2hGLElBQUksSUFBSSxDQUFDLE9BQU8sWUFBWSxlQUFlO29CQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztxQkFDeEosSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssUUFBUTtvQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ25LLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUM1QjtZQUVELElBQUksQ0FB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O1FBQ0gsQ0FBQztLQUFBOztBQW5JTSxjQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ1osZ0JBQVMsR0FBRyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NyZWF0ZUFuaW1hdGlvbiwgSW9uaWNTYWZlU3RyaW5nLCBUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge092ZXJsYXlFdmVudERldGFpbCwgVG9hc3RPcHRpb25zfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQge1RvYXN0QnV0dG9ufSBmcm9tICdAaW9uaWMvY29yZS9kaXN0L3R5cGVzL2NvbXBvbmVudHMvdG9hc3QvdG9hc3QtaW50ZXJmYWNlJztcbmltcG9ydCB7aXNFbXB0eUFycmF5LCBpc05vdE5pbH0gZnJvbSAnLi9mdW5jdGlvbnMnO1xuXG5jb25zdCBUT0FTVF9NQVhfSEVJR0hUX1BYID0gNzU7XG5jb25zdCBUT0FTVF9NQVhfU1RBQ0tfU0laRSA9IDQ7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBTaG93VG9hc3RPcHRpb25zIGV4dGVuZHMgVG9hc3RPcHRpb25zIHtcbiAgdHlwZT86ICdlcnJvcid8J3dhcm5pbmcnfCdpbmZvJztcbiAgbWVzc2FnZVBhcmFtcz86IGFueTtcbiAgc2hvd0Nsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgb25XaWxsUHJlc2VudD86ICh0b2FzdDogSFRNTElvblRvYXN0RWxlbWVudCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFRvYXN0cyB7XG4gIHN0YXRpYyBjb3VudGVyID0gMDtcbiAgc3RhdGljIHN0YWNrU2l6ZSA9IDA7XG5cbiAgc3RhdGljIGFzeW5jIHNob3c8VCA9IGFueT4oXG4gICAgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXIsXG4gICAgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIG9wdHM6IFNob3dUb2FzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxPdmVybGF5RXZlbnREZXRhaWw8VD4+IHtcbiAgICBpZiAoIXRvYXN0Q29udHJvbGxlciB8fCAhdHJhbnNsYXRlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50IFxcJ3RvYXN0Q29udHJvbGxlclxcJyBvciBcXCd0cmFuc2xhdGVcXCcnKTtcbiAgICAgIGlmIChvcHRzLm1lc3NhZ2UgaW5zdGFuY2VvZiBJb25pY1NhZmVTdHJpbmcpIGNvbnNvbGUuaW5mbygnW3RvYXN0c10gbWVzc2FnZTogJyArICh0cmFuc2xhdGUgJiYgdHJhbnNsYXRlLmluc3RhbnQob3B0cy5tZXNzYWdlLnZhbHVlKSB8fCBvcHRzLm1lc3NhZ2UudmFsdWUpKTtcbiAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRzLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSBjb25zb2xlLmluZm8oJ1t0b2FzdHNdIG1lc3NhZ2U6ICcgKyAodHJhbnNsYXRlICYmIHRyYW5zbGF0ZS5pbnN0YW50KG9wdHMubWVzc2FnZSwgb3B0cy5tZXNzYWdlUGFyYW1zKSB8fCBvcHRzLm1lc3NhZ2UpKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgIH1cblxuICAgIHRoaXMuY291bnRlcisrOyAvLyBJbmNyZW1lbnQgdG9hc3QgY291bnRlclxuICAgIGxldCBjdXJyZW50T2Zmc2V0ID0gdGhpcy5zdGFja1NpemU7XG4gICAgaWYgKHRoaXMuc3RhY2tTaXplIDwgVE9BU1RfTUFYX1NUQUNLX1NJWkUpIHtcbiAgICAgIHRoaXMuc3RhY2tTaXplKys7IC8vIEluY3JlbWVudCBzdGFjayBvZmZzZXRcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnN0YWNrU2l6ZSA9IDE7IC8vIFJlc2V0IHRoZSBzdGFja1xuICAgICAgY3VycmVudE9mZnNldCA9IDA7XG4gICAgfVxuICAgIGNvbnN0IHVwZGF0ZUNvdW50ZXJzID0gKCkgPT4ge1xuICAgICAgLy8gRGVjcmVhc2UgY291bnRlclxuICAgICAgdGhpcy5jb3VudGVyLS07XG4gICAgICAvLyBJZiBhbGwgdG9hc3QgY2xvc2VkOiByZXNldCB0aGUgc3RhY2sgb2Zmc2V0XG4gICAgICBpZiAodGhpcy5jb3VudGVyID09PSAwKSB7XG4gICAgICAgIHRoaXMuc3RhY2tTaXplID0gMDtcbiAgICAgIH1cbiAgICAgIC8vIElmIGN1cnJlbnQgdG9hc3QgaXMgdGhlIGxhc3Qgb25lLCBkZWNyZWFzZSB0aGUgb2Zmc2V0XG4gICAgICBlbHNlIGlmICh0aGlzLnN0YWNrU2l6ZSA9PSBjdXJyZW50T2Zmc2V0ICsgMSl7XG4gICAgICAgIHRoaXMuc3RhY2tTaXplLS07XG4gICAgICB9XG4gICAgfTtcblxuXG4gICAgY29uc3QgbWVzc2FnZSA9IG9wdHMubWVzc2FnZSAmJiBvcHRzLm1lc3NhZ2UgaW5zdGFuY2VvZiBJb25pY1NhZmVTdHJpbmcgPyBvcHRzLm1lc3NhZ2UudmFsdWUgOiBvcHRzLm1lc3NhZ2UgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGkxOG5LZXlzID0gW21lc3NhZ2VdO1xuICAgIGlmIChvcHRzLmhlYWRlcikgaTE4bktleXMucHVzaChvcHRzLmhlYWRlcik7XG5cbiAgICBsZXQgY2xvc2VCdXR0b246IFRvYXN0QnV0dG9uO1xuICAgIGlmIChvcHRzLnNob3dDbG9zZUJ1dHRvbikge1xuICAgICAgb3B0cy5idXR0b25zID0gb3B0cy5idXR0b25zIHx8IFtdO1xuICAgICAgY29uc3QgYnV0dG9uSW5kZXggPSBvcHRzLmJ1dHRvbnNcbiAgICAgICAgLm1hcChiID0+IHR5cGVvZiBiID09PSAnb2JqZWN0JyAmJiBiIGFzIFRvYXN0QnV0dG9uIHx8IHVuZGVmaW5lZClcbiAgICAgICAgLmZpbHRlcihpc05vdE5pbClcbiAgICAgICAgLmZpbmRJbmRleChiID0+IGIucm9sZSA9PT0gJ2Nsb3NlJyk7XG4gICAgICBpZiAoYnV0dG9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNsb3NlQnV0dG9uID0gb3B0cy5idXR0b25zW2J1dHRvbkluZGV4XSBhcyBUb2FzdEJ1dHRvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsb3NlQnV0dG9uID0ge3JvbGU6ICdjbG9zZSd9O1xuICAgICAgICBvcHRzLmJ1dHRvbnMucHVzaChjbG9zZUJ1dHRvbik7XG4gICAgICB9XG4gICAgICBjbG9zZUJ1dHRvbi50ZXh0ID0gY2xvc2VCdXR0b24udGV4dCB8fCAnQ09NTU9OLkJUTl9PSyc7XG4gICAgICBpMThuS2V5cy5wdXNoKGNsb3NlQnV0dG9uLnRleHQpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgQ1NTXG4gICAgY29uc3QgY3NzQXJyYXkgPSBvcHRzLmNzc0NsYXNzICYmIHR5cGVvZiBvcHRzLmNzc0NsYXNzID09PSAnc3RyaW5nJyAmJiBvcHRzLmNzc0NsYXNzLnNwbGl0KCcsJykgfHwgKG9wdHMuY3NzQ2xhc3MgYXMgQXJyYXk8c3RyaW5nPikgfHwgW107XG5cbiAgICAvLyBBZGQgJ2Vycm9yJyBjbGFzcywgaWYgbmVlZFxuICAgIGlmIChvcHRzLnR5cGUpIHtcbiAgICAgIHN3aXRjaCAob3B0cy50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICBvcHRzLmhlYWRlciA9ICdFUlJPUic7XG4gICAgICAgICAgY3NzQXJyYXkucHVzaCgnZGFuZ2VyJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgICAgIGNzc0FycmF5LnB1c2goJ2FjY2VudCcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdpbmZvJzpcbiAgICAgICAgICBjc3NBcnJheS5wdXNoKCdzZWNvbmRhcnknKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvcHRzLmNzc0NsYXNzID0gY3NzQXJyYXk7XG5cbiAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSB0cmFuc2xhdGUuaW5zdGFudChpMThuS2V5cyk7XG4gICAgaWYgKG9wdHMubWVzc2FnZVBhcmFtcykge1xuICAgICAgdHJhbnNsYXRpb25zW21lc3NhZ2VdID0gdHJhbnNsYXRlLmluc3RhbnQobWVzc2FnZSwgb3B0cy5tZXNzYWdlUGFyYW1zKTtcbiAgICB9XG5cbiAgICBpZiAoY2xvc2VCdXR0b24pIHtcbiAgICAgIGNsb3NlQnV0dG9uLnRleHQgPSB0cmFuc2xhdGlvbnNbY2xvc2VCdXR0b24udGV4dF07XG4gICAgfVxuXG4gICAgLy8gUmV0cmlldmUgdGhlIHRvYXN0IHBvc2l0aW9uXG4gICAgY29uc3QgcG9zaXRpb24gPSBvcHRzLnBvc2l0aW9uIHx8IChvcHRzLm1vZGUgPT09ICdpb3MnID8gJ2JvdHRvbScgOiAndG9wJyk7XG5cbiAgICBpZiAoIW9wdHMuZW50ZXJBbmltYXRpb24gJiYgcG9zaXRpb24gIT09ICdtaWRkbGUnKSB7XG4gICAgICAvLyBDb21wdXRlIHBvc2l0aW9ucywgdXNpbmcgdGhlIHN0YWNrIG9mZnNldFxuICAgICAgY29uc3QgZGlyZWN0aW9uID0gcG9zaXRpb24gPT09ICd0b3AnID8gMSA6IC0xO1xuICAgICAgY29uc3Qgc3RhcnQgPSAoY3VycmVudE9mZnNldCkgKiBUT0FTVF9NQVhfSEVJR0hUX1BYICAtIGRpcmVjdGlvbiAqIFRPQVNUX01BWF9IRUlHSFRfUFg7XG4gICAgICBjb25zdCBlbmQgPSBkaXJlY3Rpb24gKiAoY3VycmVudE9mZnNldCkgKiBUT0FTVF9NQVhfSEVJR0hUX1BYO1xuICAgICAgb3B0cy5lbnRlckFuaW1hdGlvbiA9IChiYXNlRWw6IGFueSwgb3B0cz86IGFueSkgPT4gY3JlYXRlQW5pbWF0aW9uKClcbiAgICAgICAgICAuYWRkRWxlbWVudChiYXNlRWwucXVlcnlTZWxlY3RvcignLnRvYXN0LXdyYXBwZXInKSlcbiAgICAgICAgICAuZHVyYXRpb24oMjUwKVxuICAgICAgICAgIC5mcm9tVG8oJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGVZKCR7c3RhcnR9cHgpYCwgYHRyYW5zbGF0ZVkoJHtlbmR9cHgpYClcbiAgICAgICAgICAuZnJvbVRvKCdvcGFjaXR5JywgJzAnLCAnMScpO1xuICAgIH1cblxuICAgIGNvbnN0IHRvYXN0ID0gYXdhaXQgdG9hc3RDb250cm9sbGVyLmNyZWF0ZSh7XG4gICAgICAvLyBEZWZhdWx0IHZhbHVlc1xuICAgICAgcG9zaXRpb24sXG4gICAgICBkdXJhdGlvbjogb3B0cy5zaG93Q2xvc2VCdXR0b24gPyAxMDAwMCA6IDQwMDAsXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWVzc2FnZTogdHJhbnNsYXRpb25zW21lc3NhZ2VdLFxuICAgICAgaGVhZGVyOiBvcHRzLmhlYWRlciAmJiB0cmFuc2xhdGlvbnNbb3B0cy5oZWFkZXJdIHx8IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgaWYgKG9wdHMub25XaWxsUHJlc2VudCkgb3B0cy5vbldpbGxQcmVzZW50KHRvYXN0KTtcblxuICAgIGF3YWl0IHRvYXN0LnByZXNlbnQoKTtcblxuICAgIGlmIChpc0VtcHR5QXJyYXkob3B0cy5idXR0b25zKSkge1xuICAgICAgLy8gTm90IG5lZWQgdG8gd2FpdCBkaXNtaXNzIChubyAnYXdhaXQnKVxuICAgICAgdG9hc3Qub25EaWREaXNtaXNzKCkudGhlbih1cGRhdGVDb3VudGVycyk7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gbm8gcmVzdWx0XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICAvLyBXYWl0IGZvciBidXR0b24gcmVzdWx0XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0b2FzdC5vbkRpZERpc21pc3MoKTtcblxuICAgICAgdXBkYXRlQ291bnRlcnMoKTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|