@sumaris-net/ngx-components 18.24.8 → 18.24.9
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/doc/changelog.md +4 -0
- package/esm2022/src/app/core/services/platform.service.mjs +13 -5
- package/esm2022/src/app/core/table/table.class.mjs +2 -2
- package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +9 -3
- package/esm2022/src/app/shared/version/versions.mjs +57 -58
- package/fesm2022/sumaris-net.ngx-components.mjs +78 -66
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/install/install-upgrade-card.component.d.ts +1 -1
- package/src/app/core/services/platform.service.d.ts +3 -2
- package/src/app/shared/upload-file/upload-file-popover.component.d.ts +5 -1
- package/src/app/shared/version/versions.d.ts +5 -17
- package/src/assets/manifest.json +1 -1
|
@@ -17,6 +17,8 @@ export class UploadFilePopover {
|
|
|
17
17
|
deleteFn;
|
|
18
18
|
maxParallelUpload;
|
|
19
19
|
autoHideDropArea = false;
|
|
20
|
+
okButtonText = 'COMMON.BTN_IMPORT';
|
|
21
|
+
cancelButtonText = 'COMMON.BTN_CANCEL';
|
|
20
22
|
importing = false;
|
|
21
23
|
error;
|
|
22
24
|
get files() {
|
|
@@ -80,11 +82,11 @@ export class UploadFilePopover {
|
|
|
80
82
|
}
|
|
81
83
|
}
|
|
82
84
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UploadFilePopover, deps: [{ token: i1.PopoverController }, { token: i2.TranslateService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
83
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: UploadFilePopover, selector: "app-upload-file-popover", inputs: { fileExtension: "fileExtension", title: "title", uniqueFile: "uniqueFile", instantUpload: "instantUpload", uploadFn: "uploadFn", deleteFn: "deleteFn", maxParallelUpload: "maxParallelUpload", autoHideDropArea: "autoHideDropArea" }, viewQueries: [{ propertyName: "uploader", first: true, predicate: ["uploader"], descendants: true, static: true }], ngImport: i0, template: "<ion-content class=\"ion-no-padding\" scrollY=\"false\">\n <app-upload-file\n #uploader\n [uploadFn]=\"uploadFn\"\n [deleteFn]=\"deleteFn\"\n [fileExtension]=\"fileExtension\"\n [instantUpload]=\"instantUpload\"\n [uniqueFile]=\"uniqueFile\"\n [maxParallelUpload]=\"maxParallelUpload\"\n [autoHideDropArea]=\"autoHideDropArea\"\n ></app-upload-file>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding ion-nowrap\" >\n <ion-col>\n @if (importing) {\n <div class=\"importing-info\">\n <ion-text color=\"medium\"><small translate>FILE.UPLOAD.IMPORTING</small></ion-text>\n \n <ion-spinner name=\"dots\" color=\"accent\"></ion-spinner>\n </div>\n }\n @if (error) {\n <ion-item lines=\"none\" color=\"transparent\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"ion-text-wrap\">\n <small [innerHTML]=\"error | translate\"></small>\n </ion-label>\n </ion-item>\n }\n </ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label translate
|
|
85
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: UploadFilePopover, selector: "app-upload-file-popover", inputs: { fileExtension: "fileExtension", title: "title", uniqueFile: "uniqueFile", instantUpload: "instantUpload", uploadFn: "uploadFn", deleteFn: "deleteFn", maxParallelUpload: "maxParallelUpload", autoHideDropArea: "autoHideDropArea", okButtonText: "okButtonText", cancelButtonText: "cancelButtonText" }, viewQueries: [{ propertyName: "uploader", first: true, predicate: ["uploader"], descendants: true, static: true }], ngImport: i0, template: "<ion-content class=\"ion-no-padding\" scrollY=\"false\">\n <app-upload-file\n #uploader\n [uploadFn]=\"uploadFn\"\n [deleteFn]=\"deleteFn\"\n [fileExtension]=\"fileExtension\"\n [instantUpload]=\"instantUpload\"\n [uniqueFile]=\"uniqueFile\"\n [maxParallelUpload]=\"maxParallelUpload\"\n [autoHideDropArea]=\"autoHideDropArea\"\n ></app-upload-file>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding ion-nowrap\" >\n <ion-col>\n @if (importing) {\n <div class=\"importing-info\">\n <ion-text color=\"medium\"><small translate>FILE.UPLOAD.IMPORTING</small></ion-text>\n \n <ion-spinner name=\"dots\" color=\"accent\"></ion-spinner>\n </div>\n }\n @if (error) {\n <ion-item lines=\"none\" color=\"transparent\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"ion-text-wrap\">\n <small [innerHTML]=\"error | translate\"></small>\n </ion-label>\n </ion-item>\n }\n </ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label [innerHTML]=\"cancelButtonText | translate\"></ion-label>\n </ion-button>\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"onValidate($event)\"\n (keyup.enter)=\"onValidate($event)\"\n color=\"tertiary\"\n [disabled]=\"disabled\"\n >\n <ion-label [innerHTML]=\"okButtonText | translate\"></ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", styles: [".importing-info{padding-inline-start:var(--ion-padding);display:inline-flex;flex-wrap:nowrap;padding-top:8px}\n"], dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i3.UploadFileComponent, selector: "app-upload-file", inputs: ["fileExtension", "uniqueFile", "instantUpload", "uploadFn", "deleteFn", "maxParallelUpload", "autoHideDropArea"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
84
86
|
}
|
|
85
87
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UploadFilePopover, decorators: [{
|
|
86
88
|
type: Component,
|
|
87
|
-
args: [{ selector: 'app-upload-file-popover', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-content class=\"ion-no-padding\" scrollY=\"false\">\n <app-upload-file\n #uploader\n [uploadFn]=\"uploadFn\"\n [deleteFn]=\"deleteFn\"\n [fileExtension]=\"fileExtension\"\n [instantUpload]=\"instantUpload\"\n [uniqueFile]=\"uniqueFile\"\n [maxParallelUpload]=\"maxParallelUpload\"\n [autoHideDropArea]=\"autoHideDropArea\"\n ></app-upload-file>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding ion-nowrap\" >\n <ion-col>\n @if (importing) {\n <div class=\"importing-info\">\n <ion-text color=\"medium\"><small translate>FILE.UPLOAD.IMPORTING</small></ion-text>\n \n <ion-spinner name=\"dots\" color=\"accent\"></ion-spinner>\n </div>\n }\n @if (error) {\n <ion-item lines=\"none\" color=\"transparent\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"ion-text-wrap\">\n <small [innerHTML]=\"error | translate\"></small>\n </ion-label>\n </ion-item>\n }\n </ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label translate
|
|
89
|
+
args: [{ selector: 'app-upload-file-popover', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-content class=\"ion-no-padding\" scrollY=\"false\">\n <app-upload-file\n #uploader\n [uploadFn]=\"uploadFn\"\n [deleteFn]=\"deleteFn\"\n [fileExtension]=\"fileExtension\"\n [instantUpload]=\"instantUpload\"\n [uniqueFile]=\"uniqueFile\"\n [maxParallelUpload]=\"maxParallelUpload\"\n [autoHideDropArea]=\"autoHideDropArea\"\n ></app-upload-file>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding ion-nowrap\" >\n <ion-col>\n @if (importing) {\n <div class=\"importing-info\">\n <ion-text color=\"medium\"><small translate>FILE.UPLOAD.IMPORTING</small></ion-text>\n \n <ion-spinner name=\"dots\" color=\"accent\"></ion-spinner>\n </div>\n }\n @if (error) {\n <ion-item lines=\"none\" color=\"transparent\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"ion-text-wrap\">\n <small [innerHTML]=\"error | translate\"></small>\n </ion-label>\n </ion-item>\n }\n </ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label [innerHTML]=\"cancelButtonText | translate\"></ion-label>\n </ion-button>\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"onValidate($event)\"\n (keyup.enter)=\"onValidate($event)\"\n color=\"tertiary\"\n [disabled]=\"disabled\"\n >\n <ion-label [innerHTML]=\"okButtonText | translate\"></ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", styles: [".importing-info{padding-inline-start:var(--ion-padding);display:inline-flex;flex-wrap:nowrap;padding-top:8px}\n"] }]
|
|
88
90
|
}], ctorParameters: () => [{ type: i1.PopoverController }, { type: i2.TranslateService }, { type: i0.ChangeDetectorRef }], propDecorators: { uploader: [{
|
|
89
91
|
type: ViewChild,
|
|
90
92
|
args: ['uploader', { static: true }]
|
|
@@ -104,5 +106,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
104
106
|
type: Input
|
|
105
107
|
}], autoHideDropArea: [{
|
|
106
108
|
type: Input
|
|
109
|
+
}], okButtonText: [{
|
|
110
|
+
type: Input
|
|
111
|
+
}], cancelButtonText: [{
|
|
112
|
+
type: Input
|
|
107
113
|
}] } });
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUtcG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC91cGxvYWQtZmlsZS91cGxvYWQtZmlsZS1wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3VwbG9hZC1maWxlL3VwbG9hZC1maWxlLXBvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkzSCxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7O0FBdUI5RSxNQUFNLE9BQU8saUJBQWlCO0lBNEJoQjtJQUNBO0lBQ0E7SUE3QjZCLFFBQVEsQ0FBc0I7SUFFOUQsYUFBYSxDQUFTO0lBQ3RCLEtBQUssQ0FBUztJQUNkLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUN0QixRQUFRLENBQW9CO0lBQzVCLFFBQVEsQ0FBb0I7SUFDNUIsaUJBQWlCLENBQVM7SUFDMUIsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBRWxDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsS0FBSyxDQUFTO0lBRWQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJ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OUIsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQb3BvdmVyQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFVwbG9hZEZpbGVDb21wb25lbnQgfSBmcm9tICcuL3VwbG9hZC1maWxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWxlRGVsZXRlRm4sIEZpbGVVcGxvYWRGbiwgVXBsb2FkRmlsZSB9IGZyb20gJy4vdXBsb2FkLWZpbGUubW9kZWwnO1xuaW1wb3J0IHsgaXNFbXB0eUFycmF5LCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsT3JCbGFuayB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBsb2FkRmlsZVBvcG92ZXJPcHRpb25zPFQ+IHtcbiAgdGl0bGU/OiBzdHJpbmc7XG5cbiAgdXBsb2FkRm46IEZpbGVVcGxvYWRGbjxUPjtcbiAgZGVsZXRlRm4/OiBGaWxlRGVsZXRlRm48YW55PjtcblxuICBpbnN0YW50VXBsb2FkPzogYm9vbGVhbjtcbiAgdW5pcXVlRmlsZT86IGJvb2xlYW47XG4gIGZpbGVFeHRlbnNpb24/OiBzdHJpbmc7XG4gIG1heFBhcmFsbGVsVXBsb2FkPzogbnVtYmVyO1xuICBhdXRvSGlkZURyb3BBcmVhPzogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXVwbG9hZC1maWxlLXBvcG92ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLWZpbGUtcG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3VwbG9hZC1maWxlLXBvcG92ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFVwbG9hZEZpbGVQb3BvdmVyIGltcGxlbWVudHMgVXBsb2FkRmlsZVBvcG92ZXJPcHRpb25zPGFueT4ge1xuICBAVmlld0NoaWxkKCd1cGxvYWRlcicsIHsgc3RhdGljOiB0cnVlIH0pIHVwbG9hZGVyOiBVcGxvYWRGaWxlQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpIGZpbGVFeHRlbnNpb246IHN0cmluZztcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgdW5pcXVlRmlsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBpbnN0YW50VXBsb2FkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHVwbG9hZEZuOiBGaWxlVXBsb2FkRm48YW55PjtcbiAgQElucHV0KCkgZGVsZXRlRm46IEZpbGVEZWxldGVGbjxhbnk+O1xuICBASW5wdXQoKSBtYXhQYXJhbGxlbFVwbG9hZDogbnVtYmVyO1xuICBASW5wdXQoKSBhdXRvSGlkZURyb3BBcmVhID0gZmFsc2U7XG5cbiAgaW1wb3J0aW5nID0gZmFsc2U7XG4gIGVycm9yOiBzdHJpbmc7XG5cbiAgZ2V0IGZpbGVzKCk6IFVwbG9hZEZpbGU8YW55PltdIHtcbiAgICByZXR1cm4gdGhpcy51cGxvYWRlci5maWxlcztcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbXBvcnRpbmcgfHwgaXNFbXB0eUFycmF5KHRoaXMuZmlsZXMpO1xuICB9XG5cbiAgZ2V0IHZhbGlkKCkge1xuICAgIHJldHVybiBpc05vdEVtcHR5QXJyYXkodGhpcy5maWxlcyk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcG9wb3ZlckNvbnRyb2xsZXI6IFBvcG92ZXJDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgYXN5bmMgb25WYWxpZGF0ZShldmVudDogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBBdm9pZCBtdWx0aXBsZSBjYWxsXG4gICAgaWYgKHRoaXMuaW1wb3J0aW5nKSByZXR1cm47XG5cbiAgICBjb25zb2xlLmRlYnVnKCdbdXBsb2FkLWZpbGUtcG9wb3Zlcl0gVmFsaWRhdGUgZm9ybTogd2lsbCB1cGxvYWQgYWxsIGZpbGVzLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5pbXBvcnRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFdhaXQgcHJvY2Vzc2luZyBmaWxlcyBmaW5pc2hlZFxuICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZGVyLndhaXRJZGxlKCk7XG5cbiAgICAgICAgLy8gdXBsb2FkIGFsbCBmaWxlc1xuICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZGVyLnVwbG9hZEZpbGVzKCk7XG5cbiAgICAgICAgY29uc3QgZmlsZXM6IFVwbG9hZEZpbGU8YW55PltdID0gKHRoaXMudXBsb2FkZXIucHJvY2Vzc2VkRmlsZXMgfHwgW10pLmZpbHRlcigoZmlsZSkgPT4gIWZpbGUuZGVsZXRpbmcpOyAvLyBSZW1vdmUgZGVsZXRpbmcgZmlsZSAoZGVsZXRpb24gaW4gcHJvZ3Jlc3MpXG5cbiAgICAgICAgLy8gTm90aGluZyB0byB1cGxvYWQ6IGNsb3NlIHBvcG92ZXJcbiAgICAgICAgaWYgKGlzRW1wdHlBcnJheShmaWxlcykpIHJldHVybiB0aGlzLmNhbmNlbCgpO1xuXG4gICAgICAgIC8vIGNoZWNrIGVycm9yc1xuICAgICAgICBjb25zdCBlcnJvcnMgPSBmaWxlcy5tYXAoKGZpbGUpID0+IGZpbGUuZXJyb3IpLmZpbHRlcihpc05vdE5pbE9yQmxhbmspO1xuXG4gICAgICAgIC8vIElmIGVycm9yOiBzdG9wXG4gICAgICAgIGlmIChlcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgZXJyb3JzLmZvckVhY2goKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKGVycm9yKSk7XG4gICAgICAgICAgdGhyb3cgeyBtZXNzYWdlOiAnRklMRS5VUExPQUQuRVJST1InIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXR1cm4gZmlsZXNcbiAgICAgICAgYXdhaXQgdGhpcy5wb3BvdmVyQ29udHJvbGxlci5kaXNtaXNzKGZpbGVzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmVycm9yID0gKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmltcG9ydGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucG9wb3ZlckNvbnRyb2xsZXIuZGlzbWlzcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0RXJyb3IoKSB7XG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxpb24tY29udGVudCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCIgc2Nyb2xsWT1cImZhbHNlXCI+XG4gIDxhcHAtdXBsb2FkLWZpbGVcbiAgICAjdXBsb2FkZXJcbiAgICBbdXBsb2FkRm5dPVwidXBsb2FkRm5cIlxuICAgIFtkZWxldGVGbl09XCJkZWxldGVGblwiXG4gICAgW2ZpbGVFeHRlbnNpb25dPVwiZmlsZUV4dGVuc2lvblwiXG4gICAgW2luc3RhbnRVcGxvYWRdPVwiaW5zdGFudFVwbG9hZFwiXG4gICAgW3VuaXF1ZUZpbGVdPVwidW5pcXVlRmlsZVwiXG4gICAgW21heFBhcmFsbGVsVXBsb2FkXT1cIm1heFBhcmFsbGVsVXBsb2FkXCJcbiAgICBbYXV0b0hpZGVEcm9wQXJlYV09XCJhdXRvSGlkZURyb3BBcmVhXCJcbiAgPjwvYXBwLXVwbG9hZC1maWxlPlxuPC9pb24tY29udGVudD5cblxuPGlvbi1mb290ZXI+XG4gIDxpb24tdG9vbGJhcj5cbiAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nIGlvbi1ub3dyYXBcIiA+XG4gICAgICA8aW9uLWNvbD5cbiAgICAgICAgQGlmIChpbXBvcnRpbmcpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1wb3J0aW5nLWluZm9cIj5cbiAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPjxzbWFsbCB0cmFuc2xhdGU+RklMRS5VUExPQUQuSU1QT1JUSU5HPC9zbWFsbD48L2lvbi10ZXh0PlxuICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICA8aW9uLXNwaW5uZXIgbmFtZT1cImRvdHNcIiBjb2xvcj1cImFjY2VudFwiPjwvaW9uLXNwaW5uZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChlcnJvcikge1xuICAgICAgICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIiBjb2xvcj1cInRyYW5zcGFyZW50XCI+XG4gICAgICAgICAgICA8aW9uLWljb24gY29sb3I9XCJkYW5nZXJcIiBzbG90PVwic3RhcnRcIiBuYW1lPVwiYWxlcnQtY2lyY2xlXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cImlvbi10ZXh0LXdyYXBcIj5cbiAgICAgICAgICAgICAgPHNtYWxsIFtpbm5lckhUTUxdPVwiZXJyb3IgfCB0cmFuc2xhdGVcIj48L3NtYWxsPlxuICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgfVxuICAgICAgPC9pb24tY29sPlxuICAgICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+XG4gICAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9DQU5DRUw8L2lvbi1sYWJlbD5cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIFtmaWxsXT1cImRpc2FibGVkID8gJ2NsZWFyJyA6ICdzb2xpZCdcIlxuICAgICAgICAgIChjbGljayk9XCJvblZhbGlkYXRlKCRldmVudClcIlxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvblZhbGlkYXRlKCRldmVudClcIlxuICAgICAgICAgIGNvbG9yPVwidGVydGlhcnlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5DT01NT04uQlROX0lNUE9SVDwvaW9uLWxhYmVsPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2lvbi1jb2w+XG4gICAgPC9pb24tcm93PlxuICA8L2lvbi10b29sYmFyPlxuPC9pb24tZm9vdGVyPlxuIl19
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUtcG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC91cGxvYWQtZmlsZS91cGxvYWQtZmlsZS1wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3VwbG9hZC1maWxlL3VwbG9hZC1maWxlLXBvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkzSCxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7O0FBMEI5RSxNQUFNLE9BQU8saUJBQWlCO0lBOEJoQjtJQUNBO0lBQ0E7SUEvQjZCLFFBQVEsQ0FBc0I7SUFFOUQsYUFBYSxDQUFTO0lBQ3RCLEtBQUssQ0FBUztJQUNkLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUN0QixRQUFRLENBQW9CO0lBQzVCLFFBQVEsQ0FBb0I7SUFDNUIsaUJBQWlCLENBQVM7SUFDMUIsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLFlBQVksR0FBRyxtQkFBbUIsQ0FBQztJQUNuQyxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQztJQUVoRCxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLEtBQUssQ0FBUztJQUVkLElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFF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O3NCQUFoRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRTlCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBVcGxvYWRGaWxlQ29tcG9uZW50IH0gZnJvbSAnLi91cGxvYWQtZmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsZURlbGV0ZUZuLCBGaWxlVXBsb2FkRm4sIFVwbG9hZEZpbGUgfSBmcm9tICcuL3VwbG9hZC1maWxlLm1vZGVsJztcbmltcG9ydCB7IGlzRW1wdHlBcnJheSwgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbE9yQmxhbmsgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVwbG9hZEZpbGVQb3BvdmVyT3B0aW9uczxUPiB7XG4gIHRpdGxlPzogc3RyaW5nO1xuXG4gIHVwbG9hZEZuOiBGaWxlVXBsb2FkRm48VD47XG4gIGRlbGV0ZUZuPzogRmlsZURlbGV0ZUZuPGFueT47XG5cbiAgaW5zdGFudFVwbG9hZD86IGJvb2xlYW47XG4gIHVuaXF1ZUZpbGU/OiBib29sZWFuO1xuICBmaWxlRXh0ZW5zaW9uPzogc3RyaW5nO1xuICBtYXhQYXJhbGxlbFVwbG9hZD86IG51bWJlcjtcbiAgYXV0b0hpZGVEcm9wQXJlYT86IGJvb2xlYW47XG5cbiAgaW1wb3J0QnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2FuY2VsQnV0dG9uVGV4dD86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXVwbG9hZC1maWxlLXBvcG92ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLWZpbGUtcG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3VwbG9hZC1maWxlLXBvcG92ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFVwbG9hZEZpbGVQb3BvdmVyIGltcGxlbWVudHMgVXBsb2FkRmlsZVBvcG92ZXJPcHRpb25zPGFueT4ge1xuICBAVmlld0NoaWxkKCd1cGxvYWRlcicsIHsgc3RhdGljOiB0cnVlIH0pIHVwbG9hZGVyOiBVcGxvYWRGaWxlQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpIGZpbGVFeHRlbnNpb246IHN0cmluZztcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgdW5pcXVlRmlsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBpbnN0YW50VXBsb2FkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHVwbG9hZEZuOiBGaWxlVXBsb2FkRm48YW55PjtcbiAgQElucHV0KCkgZGVsZXRlRm46IEZpbGVEZWxldGVGbjxhbnk+O1xuICBASW5wdXQoKSBtYXhQYXJhbGxlbFVwbG9hZDogbnVtYmVyO1xuICBASW5wdXQoKSBhdXRvSGlkZURyb3BBcmVhID0gZmFsc2U7XG4gIEBJbnB1dCgpIG9rQnV0dG9uVGV4dCA9ICdDT01NT04uQlROX0lNUE9SVCc7XG4gIEBJbnB1dCgpIGNhbmNlbEJ1dHRvblRleHQgPSAnQ09NTU9OLkJUTl9DQU5DRUwnO1xuXG4gIGltcG9ydGluZyA9IGZhbHNlO1xuICBlcnJvcjogc3RyaW5nO1xuXG4gIGdldCBmaWxlcygpOiBVcGxvYWRGaWxlPGFueT5bXSB7XG4gICAgcmV0dXJuIHRoaXMudXBsb2FkZXIuZmlsZXM7XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW1wb3J0aW5nIHx8IGlzRW1wdHlBcnJheSh0aGlzLmZpbGVzKTtcbiAgfVxuXG4gIGdldCB2YWxpZCgpIHtcbiAgICByZXR1cm4gaXNOb3RFbXB0eUFycmF5KHRoaXMuZmlsZXMpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHBvcG92ZXJDb250cm9sbGVyOiBQb3BvdmVyQ29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIGFzeW5jIG9uVmFsaWRhdGUoZXZlbnQ6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgLy8gQXZvaWQgbXVsdGlwbGUgY2FsbFxuICAgIGlmICh0aGlzLmltcG9ydGluZykgcmV0dXJuO1xuXG4gICAgY29uc29sZS5kZWJ1ZygnW3VwbG9hZC1maWxlLXBvcG92ZXJdIFZhbGlkYXRlIGZvcm06IHdpbGwgdXBsb2FkIGFsbCBmaWxlcy4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaW1wb3J0aW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBXYWl0IHByb2Nlc3NpbmcgZmlsZXMgZmluaXNoZWRcbiAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRlci53YWl0SWRsZSgpO1xuXG4gICAgICAgIC8vIHVwbG9hZCBhbGwgZmlsZXNcbiAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRlci51cGxvYWRGaWxlcygpO1xuXG4gICAgICAgIGNvbnN0IGZpbGVzOiBVcGxvYWRGaWxlPGFueT5bXSA9ICh0aGlzLnVwbG9hZGVyLnByb2Nlc3NlZEZpbGVzIHx8IFtdKS5maWx0ZXIoKGZpbGUpID0+ICFmaWxlLmRlbGV0aW5nKTsgLy8gUmVtb3ZlIGRlbGV0aW5nIGZpbGUgKGRlbGV0aW9uIGluIHByb2dyZXNzKVxuXG4gICAgICAgIC8vIE5vdGhpbmcgdG8gdXBsb2FkOiBjbG9zZSBwb3BvdmVyXG4gICAgICAgIGlmIChpc0VtcHR5QXJyYXkoZmlsZXMpKSByZXR1cm4gdGhpcy5jYW5jZWwoKTtcblxuICAgICAgICAvLyBjaGVjayBlcnJvcnNcbiAgICAgICAgY29uc3QgZXJyb3JzID0gZmlsZXMubWFwKChmaWxlKSA9PiBmaWxlLmVycm9yKS5maWx0ZXIoaXNOb3ROaWxPckJsYW5rKTtcblxuICAgICAgICAvLyBJZiBlcnJvcjogc3RvcFxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgIGVycm9ycy5mb3JFYWNoKChlcnJvcikgPT4gY29uc29sZS5lcnJvcihlcnJvcikpO1xuICAgICAgICAgIHRocm93IHsgbWVzc2FnZTogJ0ZJTEUuVVBMT0FELkVSUk9SJyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmV0dXJuIGZpbGVzXG4gICAgICAgIGF3YWl0IHRoaXMucG9wb3ZlckNvbnRyb2xsZXIuZGlzbWlzcyhmaWxlcyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycjtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pbXBvcnRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHJldHVybiB0aGlzLnBvcG92ZXJDb250cm9sbGVyLmRpc21pc3MoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldEVycm9yKCkge1xuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLmVycm9yID0gbnVsbDtcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG59XG4iLCI8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiIHNjcm9sbFk9XCJmYWxzZVwiPlxuICA8YXBwLXVwbG9hZC1maWxlXG4gICAgI3VwbG9hZGVyXG4gICAgW3VwbG9hZEZuXT1cInVwbG9hZEZuXCJcbiAgICBbZGVsZXRlRm5dPVwiZGVsZXRlRm5cIlxuICAgIFtmaWxlRXh0ZW5zaW9uXT1cImZpbGVFeHRlbnNpb25cIlxuICAgIFtpbnN0YW50VXBsb2FkXT1cImluc3RhbnRVcGxvYWRcIlxuICAgIFt1bmlxdWVGaWxlXT1cInVuaXF1ZUZpbGVcIlxuICAgIFttYXhQYXJhbGxlbFVwbG9hZF09XCJtYXhQYXJhbGxlbFVwbG9hZFwiXG4gICAgW2F1dG9IaWRlRHJvcEFyZWFdPVwiYXV0b0hpZGVEcm9wQXJlYVwiXG4gID48L2FwcC11cGxvYWQtZmlsZT5cbjwvaW9uLWNvbnRlbnQ+XG5cbjxpb24tZm9vdGVyPlxuICA8aW9uLXRvb2xiYXI+XG4gICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tbm8tcGFkZGluZyBpb24tbm93cmFwXCIgPlxuICAgICAgPGlvbi1jb2w+XG4gICAgICAgIEBpZiAoaW1wb3J0aW5nKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImltcG9ydGluZy1pbmZvXCI+XG4gICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj48c21hbGwgdHJhbnNsYXRlPkZJTEUuVVBMT0FELklNUE9SVElORzwvc21hbGw+PC9pb24tdGV4dD5cbiAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJkb3RzXCIgY29sb3I9XCJhY2NlbnRcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoZXJyb3IpIHtcbiAgICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCIgY29sb3I9XCJ0cmFuc3BhcmVudFwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIGNvbG9yPVwiZGFuZ2VyXCIgc2xvdD1cInN0YXJ0XCIgbmFtZT1cImFsZXJ0LWNpcmNsZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwiZGFuZ2VyXCIgY2xhc3M9XCJpb24tdGV4dC13cmFwXCI+XG4gICAgICAgICAgICAgIDxzbWFsbCBbaW5uZXJIVE1MXT1cImVycm9yIHwgdHJhbnNsYXRlXCI+PC9zbWFsbD5cbiAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgIH1cbiAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIGNvbG9yPVwiZGFya1wiIChjbGljayk9XCJjYW5jZWwoKVwiPlxuICAgICAgICAgIDxpb24tbGFiZWwgW2lubmVySFRNTF09XCJjYW5jZWxCdXR0b25UZXh0IHwgdHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICBbZmlsbF09XCJkaXNhYmxlZCA/ICdjbGVhcicgOiAnc29saWQnXCJcbiAgICAgICAgICAoY2xpY2spPVwib25WYWxpZGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25WYWxpZGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICBjb2xvcj1cInRlcnRpYXJ5XCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlvbi1sYWJlbCBbaW5uZXJIVE1MXT1cIm9rQnV0dG9uVGV4dCB8IHRyYW5zbGF0ZVwiPjwvaW9uLWxhYmVsPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2lvbi1jb2w+XG4gICAgPC9pb24tcm93PlxuICA8L2lvbi10b29sYmFyPlxuPC9pb24tZm9vdGVyPlxuIl19
|
|
@@ -1,74 +1,73 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
VERSION_PART_REGEXP: /^[0-9]+|alpha[0-9]+|beta[0-9]+|rc[0-9]+|[0-9]+-SNAPSHOT$/,
|
|
4
|
-
};
|
|
1
|
+
// Parse version string on standard "Semantic Versioning 2.0.0"
|
|
2
|
+
const SEMVER_2_REGEXP = /^(?<major>0|[1-9]\d*)\.(?<minor>0|[1-9]\d*)\.(?<patch>0|[1-9]\d*)(?:-(?<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?<build>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
|
|
5
3
|
export class VersionUtils {
|
|
6
4
|
static compare = compareVersionNumbers;
|
|
7
5
|
static isCompatible = isVersionCompatible;
|
|
8
6
|
static isSame = isSameVersion;
|
|
9
7
|
}
|
|
10
8
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* negative if v1 < v2
|
|
16
|
-
* positive if v1 > v2
|
|
17
|
-
* Nan if they in the wrong format
|
|
18
|
-
*
|
|
19
|
-
* E.g.:
|
|
20
|
-
*
|
|
21
|
-
* assert(version_number_compare("1.7.1", "1.6.10") > 0);
|
|
22
|
-
* assert(version_number_compare("1.7.1", "1.7.10") < 0);
|
|
23
|
-
*
|
|
24
|
-
* "Unit tests": http://jsfiddle.net/ripper234/Xv9WL/28/
|
|
25
|
-
*
|
|
26
|
-
* Taken from http://stackoverflow.com/a/6832721/11236
|
|
9
|
+
* Compares two Semantic Versioning 2.0.0 strings
|
|
10
|
+
* @param {string} v1 - First version string
|
|
11
|
+
* @param {string} v2 - Second version string
|
|
12
|
+
* @returns {number} -1 if v1 < v2, 0 if equal, 1 if v1 > v2
|
|
27
13
|
*/
|
|
28
|
-
export function compareVersionNumbers(v1, v2) {
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
if (!validateParts(v1parts) || !validateParts(v2parts)) {
|
|
14
|
+
export function compareVersionNumbers(v1, v2, comparePrerelease = false) {
|
|
15
|
+
const m1 = v1.match(SEMVER_2_REGEXP);
|
|
16
|
+
const m2 = v2.match(SEMVER_2_REGEXP);
|
|
17
|
+
if (!m1 || !m2) {
|
|
33
18
|
return NaN;
|
|
34
19
|
}
|
|
35
|
-
|
|
36
|
-
|
|
20
|
+
const [p1, p2] = [m1.groups, m2.groups];
|
|
21
|
+
// 1. Compare major.minor.patch numerically
|
|
22
|
+
for (const key of ['major', 'minor', 'patch']) {
|
|
23
|
+
const n1 = Number(p1[key]);
|
|
24
|
+
const n2 = Number(p2[key]);
|
|
25
|
+
if (n1 !== n2)
|
|
26
|
+
return n1 > n2 ? 1 : -1;
|
|
27
|
+
}
|
|
28
|
+
// If do not compare pre-release part return equals version on same major.minor.patch
|
|
29
|
+
if (!comparePrerelease)
|
|
30
|
+
return 0;
|
|
31
|
+
// 2. Extract prerelease identifiers (build metadata is ignored)
|
|
32
|
+
const pre1 = p1.prerelease ? p1.prerelease.split('.') : [];
|
|
33
|
+
const pre2 = p2.prerelease ? p2.prerelease.split('.') : [];
|
|
34
|
+
// If both have no prerelease, they are equal
|
|
35
|
+
if (pre1.length === 0 && pre2.length === 0)
|
|
36
|
+
return 0;
|
|
37
|
+
// A version without prerelease has higher precedence than one with prerelease
|
|
38
|
+
if (pre1.length === 0)
|
|
39
|
+
return 1; // v1 stable, v2 pre-release → v1 > v2
|
|
40
|
+
if (pre2.length === 0)
|
|
41
|
+
return -1; // v1 pre-release, v2 stable → v1 < v2
|
|
42
|
+
// 3. Compare identifier by identifier
|
|
43
|
+
const maxLen = Math.max(pre1.length, pre2.length);
|
|
44
|
+
for (let i = 0; i < maxLen; i++) {
|
|
45
|
+
const id1 = pre1[i];
|
|
46
|
+
const id2 = pre2[i];
|
|
47
|
+
// If one has more fields, it has higher precedence if previous fields were equal
|
|
48
|
+
if (id1 === undefined)
|
|
49
|
+
return -1;
|
|
50
|
+
if (id2 === undefined)
|
|
37
51
|
return 1;
|
|
52
|
+
const isNum1 = /^\d+$/.test(id1);
|
|
53
|
+
const isNum2 = /^\d+$/.test(id2);
|
|
54
|
+
if (isNum1 && isNum2) {
|
|
55
|
+
// Numeric comparison
|
|
56
|
+
const n1 = Number(id1), n2 = Number(id2);
|
|
57
|
+
if (n1 !== n2)
|
|
58
|
+
return n1 > n2 ? 1 : -1;
|
|
38
59
|
}
|
|
39
|
-
if (
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return 1;
|
|
60
|
+
else if (!isNum1 && !isNum2) {
|
|
61
|
+
// Lexicographic comparison (ASCII order)
|
|
62
|
+
if (id1 !== id2)
|
|
63
|
+
return id1 > id2 ? 1 : -1;
|
|
44
64
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return -1;
|
|
49
|
-
}
|
|
50
|
-
return 0;
|
|
51
|
-
}
|
|
52
|
-
function validateParts(parts) {
|
|
53
|
-
for (let i = 0; i < parts.length; i++) {
|
|
54
|
-
let isNumber = regexp.POSITIVE_INTEGER.test(parts[i]);
|
|
55
|
-
// First part MUST be an integer
|
|
56
|
-
if (i === 0 && !isNumber)
|
|
57
|
-
return false;
|
|
58
|
-
// If not integer, should be 'alpha', 'beta', etc.
|
|
59
|
-
if (!isNumber) {
|
|
60
|
-
if (!regexp.VERSION_PART_REGEXP.test(parts[i]))
|
|
61
|
-
return false;
|
|
62
|
-
// Remove '-SNAPSHOT', as it should never be in prod
|
|
63
|
-
parts[i] = parts[i].replace('-SNAPSHOT', '');
|
|
64
|
-
// Check again if numeric
|
|
65
|
-
isNumber = regexp.POSITIVE_INTEGER.test(parts[i]);
|
|
65
|
+
else {
|
|
66
|
+
// Numeric identifiers always have lower precedence than alphanumeric
|
|
67
|
+
return isNum1 ? -1 : 1;
|
|
66
68
|
}
|
|
67
|
-
// Convert string to int (need by compare operators)
|
|
68
|
-
if (isNumber)
|
|
69
|
-
parts[i] = parseInt(parts[i]);
|
|
70
69
|
}
|
|
71
|
-
return
|
|
70
|
+
return 0; // Same version
|
|
72
71
|
}
|
|
73
72
|
export function isVersionCompatible(minVersion, actualVersion) {
|
|
74
73
|
// DEV ONLY
|
|
@@ -78,4 +77,4 @@ export function isVersionCompatible(minVersion, actualVersion) {
|
|
|
78
77
|
export function isSameVersion(v1, v2) {
|
|
79
78
|
return compareVersionNumbers(v1, v2) === 0;
|
|
80
79
|
}
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC92ZXJzaW9uL3ZlcnNpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtEQUErRDtBQUMvRCxNQUFNLGVBQWUsR0FDbkIsa09BQWtPLENBQUM7QUFFck8sTUFBTSxPQUFPLFlBQVk7SUFDdkIsTUFBTSxDQUFDLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQztJQUN2QyxNQUFNLENBQUMsWUFBWSxHQUFHLG1CQUFtQixDQUFDO0lBQzFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDOztBQUdoQzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxFQUFVLEVBQUUsRUFBVSxFQUFFLGlCQUFpQixHQUFHLEtBQUs7SUFDckYsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNyQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRXJDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNmLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV4QywyQ0FBMkM7SUFDM0MsS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNCLElBQUksRUFBRSxL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YUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFO0lBQ2xDLE9BQU8scUJBQXFCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gUGFyc2UgdmVyc2lvbiBzdHJpbmcgb24gc3RhbmRhcmQgXCJTZW1hbnRpYyBWZXJzaW9uaW5nIDIuMC4wXCJcbmNvbnN0IFNFTVZFUl8yX1JFR0VYUCA9XG4gIC9eKD88bWFqb3I+MHxbMS05XVxcZCopXFwuKD88bWlub3I+MHxbMS05XVxcZCopXFwuKD88cGF0Y2g+MHxbMS05XVxcZCopKD86LSg/PHByZXJlbGVhc2U+KD86MHxbMS05XVxcZCp8XFxkKlthLXpBLVotXVswLTlhLXpBLVotXSopKD86XFwuKD86MHxbMS05XVxcZCp8XFxkKlthLXpBLVotXVswLTlhLXpBLVotXSopKSopKT8oPzpcXCsoPzxidWlsZD5bMC05YS16QS1aLV0rKD86XFwuWzAtOWEtekEtWi1dKykqKSk/JC87XG5cbmV4cG9ydCBjbGFzcyBWZXJzaW9uVXRpbHMge1xuICBzdGF0aWMgY29tcGFyZSA9IGNvbXBhcmVWZXJzaW9uTnVtYmVycztcbiAgc3RhdGljIGlzQ29tcGF0aWJsZSA9IGlzVmVyc2lvbkNvbXBhdGlibGU7XG4gIHN0YXRpYyBpc1NhbWUgPSBpc1NhbWVWZXJzaW9uO1xufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBTZW1hbnRpYyBWZXJzaW9uaW5nIDIuMC4wIHN0cmluZ3NcbiAqIEBwYXJhbSB7c3RyaW5nfSB2MSAtIEZpcnN0IHZlcnNpb24gc3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gdjIgLSBTZWNvbmQgdmVyc2lvbiBzdHJpbmdcbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0xIGlmIHYxIDwgdjIsIDAgaWYgZXF1YWwsIDEgaWYgdjEgPiB2MlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZVZlcnNpb25OdW1iZXJzKHYxOiBzdHJpbmcsIHYyOiBzdHJpbmcsIGNvbXBhcmVQcmVyZWxlYXNlID0gZmFsc2UpOiBudW1iZXIge1xuICBjb25zdCBtMSA9IHYxLm1hdGNoKFNFTVZFUl8yX1JFR0VYUCk7XG4gIGNvbnN0IG0yID0gdjIubWF0Y2goU0VNVkVSXzJfUkVHRVhQKTtcblxuICBpZiAoIW0xIHx8ICFtMikge1xuICAgIHJldHVybiBOYU47XG4gIH1cblxuICBjb25zdCBbcDEsIHAyXSA9IFttMS5ncm91cHMsIG0yLmdyb3Vwc107XG5cbiAgLy8gMS4gQ29tcGFyZSBtYWpvci5taW5vci5wYXRjaCBudW1lcmljYWxseVxuICBmb3IgKGNvbnN0IGtleSBvZiBbJ21ham9yJywgJ21pbm9yJywgJ3BhdGNoJ10pIHtcbiAgICBjb25zdCBuMSA9IE51bWJlcihwMVtrZXldKTtcbiAgICBjb25zdCBuMiA9IE51bWJlcihwMltrZXldKTtcbiAgICBpZiAobjEgIT09IG4yKSByZXR1cm4gbjEgPiBuMiA/IDEgOiAtMTtcbiAgfVxuXG4gIC8vIElmIGRvIG5vdCBjb21wYXJlIHByZS1yZWxlYXNlIHBhcnQgcmV0dXJuIGVxdWFscyB2ZXJzaW9uIG9uIHNhbWUgbWFqb3IubWlub3IucGF0Y2hcbiAgaWYgKCFjb21wYXJlUHJlcmVsZWFzZSkgcmV0dXJuIDA7XG5cbiAgLy8gMi4gRXh0cmFjdCBwcmVyZWxlYXNlIGlkZW50aWZpZXJzIChidWlsZCBtZXRhZGF0YSBpcyBpZ25vcmVkKVxuICBjb25zdCBwcmUxID0gcDEucHJlcmVsZWFzZSA/IHAxLnByZXJlbGVhc2Uuc3BsaXQoJy4nKSA6IFtdO1xuICBjb25zdCBwcmUyID0gcDIucHJlcmVsZWFzZSA/IHAyLnByZXJlbGVhc2Uuc3BsaXQoJy4nKSA6IFtdO1xuXG4gIC8vIElmIGJvdGggaGF2ZSBubyBwcmVyZWxlYXNlLCB0aGV5IGFyZSBlcXVhbFxuICBpZiAocHJlMS5sZW5ndGggPT09IDAgJiYgcHJlMi5sZW5ndGggPT09IDApIHJldHVybiAwO1xuXG4gIC8vIEEgdmVyc2lvbiB3aXRob3V0IHByZXJlbGVhc2UgaGFzIGhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gb25lIHdpdGggcHJlcmVsZWFzZVxuICBpZiAocHJlMS5sZW5ndGggPT09IDApIHJldHVybiAxOyAvLyB2MSBzdGFibGUsIHYyIHByZS1yZWxlYXNlIOKGkiB2MSA+IHYyXG4gIGlmIChwcmUyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xOyAvLyB2MSBwcmUtcmVsZWFzZSwgdjIgc3RhYmxlIOKGkiB2MSA8IHYyXG5cbiAgLy8gMy4gQ29tcGFyZSBpZGVudGlmaWVyIGJ5IGlkZW50aWZpZXJcbiAgY29uc3QgbWF4TGVuID0gTWF0aC5tYXgocHJlMS5sZW5ndGgsIHByZTIubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhMZW47IGkrKykge1xuICAgIGNvbnN0IGlkMSA9IHByZTFbaV07XG4gICAgY29uc3QgaWQyID0gcHJlMltpXTtcblxuICAgIC8vIElmIG9uZSBoYXMgbW9yZSBmaWVsZHMsIGl0IGhhcyBoaWdoZXIgcHJlY2VkZW5jZSBpZiBwcmV2aW91cyBmaWVsZHMgd2VyZSBlcXVhbFxuICAgIGlmIChpZDEgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgIGlmIChpZDIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDE7XG5cbiAgICBjb25zdCBpc051bTEgPSAvXlxcZCskLy50ZXN0KGlkMSk7XG4gICAgY29uc3QgaXNOdW0yID0gL15cXGQrJC8udGVzdChpZDIpO1xuXG4gICAgaWYgKGlzTnVtMSAmJiBpc051bTIpIHtcbiAgICAgIC8vIE51bWVyaWMgY29tcGFyaXNvblxuICAgICAgY29uc3QgbjEgPSBOdW1iZXIoaWQxKSxcbiAgICAgICAgbjIgPSBOdW1iZXIoaWQyKTtcbiAgICAgIGlmIChuMSAhPT0gbjIpIHJldHVybiBuMSA+IG4yID8gMSA6IC0xO1xuICAgIH0gZWxzZSBpZiAoIWlzTnVtMSAmJiAhaXNOdW0yKSB7XG4gICAgICAvLyBMZXhpY29ncmFwaGljIGNvbXBhcmlzb24gKEFTQ0lJIG9yZGVyKVxuICAgICAgaWYgKGlkMSAhPT0gaWQyKSByZXR1cm4gaWQxID4gaWQyID8gMSA6IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOdW1lcmljIGlkZW50aWZpZXJzIGFsd2F5cyBoYXZlIGxvd2VyIHByZWNlZGVuY2UgdGhhbiBhbHBoYW51bWVyaWNcbiAgICAgIHJldHVybiBpc051bTEgPyAtMSA6IDE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDA7IC8vIFNhbWUgdmVyc2lvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWZXJzaW9uQ29tcGF0aWJsZShtaW5WZXJzaW9uLCBhY3R1YWxWZXJzaW9uKTogYm9vbGVhbiB7XG4gIC8vIERFViBPTkxZXG4gIC8vY29uc29sZS5kZWJ1ZyhgW2h0dHBdIENoZWNraW5nIGFjdHVhbCB2ZXJzaW9uIHske2FjdHVhbFZlcnNpb259fSBpcyBjb21wYXRpYmxlIHdpdGggbWluIGV4cGVjdGVkIHZlcnNpb24geyR7bWluVmVyc2lvbn19YCk7XG4gIHJldHVybiBjb21wYXJlVmVyc2lvbk51bWJlcnMobWluVmVyc2lvbiwgYWN0dWFsVmVyc2lvbikgPD0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2FtZVZlcnNpb24odjEsIHYyKTogYm9vbGVhbiB7XG4gIHJldHVybiBjb21wYXJlVmVyc2lvbk51bWJlcnModjEsIHYyKSA9PT0gMDtcbn1cbiJdfQ==
|
|
@@ -4,7 +4,7 @@ import { firstValueFrom, shareReplay, tap, of, timer, Subject, merge, delay, isO
|
|
|
4
4
|
import { catchError, map, filter, takeUntil, first, switchMap, tap as tap$1, throttleTime, debounceTime, startWith, distinctUntilChanged, mergeMap, skip, finalize, distinctUntilKeyChanged, take } from 'rxjs/operators';
|
|
5
5
|
import * as cloneImported from 'clone';
|
|
6
6
|
import * as i3$1 from '@angular/common';
|
|
7
|
-
import { CommonModule, DOCUMENT,
|
|
7
|
+
import { CommonModule, DOCUMENT, APP_BASE_HREF, LocationStrategy, Location, NgIf, AsyncPipe, JsonPipe } from '@angular/common';
|
|
8
8
|
import { CdkTableModule } from '@angular/cdk/table';
|
|
9
9
|
import * as i1$6 from '@angular/cdk/a11y';
|
|
10
10
|
import { A11yModule, FocusMonitor } from '@angular/cdk/a11y';
|
|
@@ -16221,6 +16221,8 @@ class UploadFilePopover {
|
|
|
16221
16221
|
deleteFn;
|
|
16222
16222
|
maxParallelUpload;
|
|
16223
16223
|
autoHideDropArea = false;
|
|
16224
|
+
okButtonText = 'COMMON.BTN_IMPORT';
|
|
16225
|
+
cancelButtonText = 'COMMON.BTN_CANCEL';
|
|
16224
16226
|
importing = false;
|
|
16225
16227
|
error;
|
|
16226
16228
|
get files() {
|
|
@@ -16284,11 +16286,11 @@ class UploadFilePopover {
|
|
|
16284
16286
|
}
|
|
16285
16287
|
}
|
|
16286
16288
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UploadFilePopover, deps: [{ token: i2$1.PopoverController }, { token: i1$1.TranslateService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
16287
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: UploadFilePopover, selector: "app-upload-file-popover", inputs: { fileExtension: "fileExtension", title: "title", uniqueFile: "uniqueFile", instantUpload: "instantUpload", uploadFn: "uploadFn", deleteFn: "deleteFn", maxParallelUpload: "maxParallelUpload", autoHideDropArea: "autoHideDropArea" }, viewQueries: [{ propertyName: "uploader", first: true, predicate: ["uploader"], descendants: true, static: true }], ngImport: i0, template: "<ion-content class=\"ion-no-padding\" scrollY=\"false\">\n <app-upload-file\n #uploader\n [uploadFn]=\"uploadFn\"\n [deleteFn]=\"deleteFn\"\n [fileExtension]=\"fileExtension\"\n [instantUpload]=\"instantUpload\"\n [uniqueFile]=\"uniqueFile\"\n [maxParallelUpload]=\"maxParallelUpload\"\n [autoHideDropArea]=\"autoHideDropArea\"\n ></app-upload-file>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding ion-nowrap\" >\n <ion-col>\n @if (importing) {\n <div class=\"importing-info\">\n <ion-text color=\"medium\"><small translate>FILE.UPLOAD.IMPORTING</small></ion-text>\n \n <ion-spinner name=\"dots\" color=\"accent\"></ion-spinner>\n </div>\n }\n @if (error) {\n <ion-item lines=\"none\" color=\"transparent\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"ion-text-wrap\">\n <small [innerHTML]=\"error | translate\"></small>\n </ion-label>\n </ion-item>\n }\n </ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label translate
|
|
16289
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: UploadFilePopover, selector: "app-upload-file-popover", inputs: { fileExtension: "fileExtension", title: "title", uniqueFile: "uniqueFile", instantUpload: "instantUpload", uploadFn: "uploadFn", deleteFn: "deleteFn", maxParallelUpload: "maxParallelUpload", autoHideDropArea: "autoHideDropArea", okButtonText: "okButtonText", cancelButtonText: "cancelButtonText" }, viewQueries: [{ propertyName: "uploader", first: true, predicate: ["uploader"], descendants: true, static: true }], ngImport: i0, template: "<ion-content class=\"ion-no-padding\" scrollY=\"false\">\n <app-upload-file\n #uploader\n [uploadFn]=\"uploadFn\"\n [deleteFn]=\"deleteFn\"\n [fileExtension]=\"fileExtension\"\n [instantUpload]=\"instantUpload\"\n [uniqueFile]=\"uniqueFile\"\n [maxParallelUpload]=\"maxParallelUpload\"\n [autoHideDropArea]=\"autoHideDropArea\"\n ></app-upload-file>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding ion-nowrap\" >\n <ion-col>\n @if (importing) {\n <div class=\"importing-info\">\n <ion-text color=\"medium\"><small translate>FILE.UPLOAD.IMPORTING</small></ion-text>\n \n <ion-spinner name=\"dots\" color=\"accent\"></ion-spinner>\n </div>\n }\n @if (error) {\n <ion-item lines=\"none\" color=\"transparent\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"ion-text-wrap\">\n <small [innerHTML]=\"error | translate\"></small>\n </ion-label>\n </ion-item>\n }\n </ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label [innerHTML]=\"cancelButtonText | translate\"></ion-label>\n </ion-button>\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"onValidate($event)\"\n (keyup.enter)=\"onValidate($event)\"\n color=\"tertiary\"\n [disabled]=\"disabled\"\n >\n <ion-label [innerHTML]=\"okButtonText | translate\"></ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", styles: [".importing-info{padding-inline-start:var(--ion-padding);display:inline-flex;flex-wrap:nowrap;padding-top:8px}\n"], dependencies: [{ kind: "component", type: i2$1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2$1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2$1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2$1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2$1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2$1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2$1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2$1.IonRow, selector: "ion-row" }, { kind: "component", type: i2$1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i2$1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i2$1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: UploadFileComponent, selector: "app-upload-file", inputs: ["fileExtension", "uniqueFile", "instantUpload", "uploadFn", "deleteFn", "maxParallelUpload", "autoHideDropArea"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
16288
16290
|
}
|
|
16289
16291
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UploadFilePopover, decorators: [{
|
|
16290
16292
|
type: Component,
|
|
16291
|
-
args: [{ selector: 'app-upload-file-popover', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-content class=\"ion-no-padding\" scrollY=\"false\">\n <app-upload-file\n #uploader\n [uploadFn]=\"uploadFn\"\n [deleteFn]=\"deleteFn\"\n [fileExtension]=\"fileExtension\"\n [instantUpload]=\"instantUpload\"\n [uniqueFile]=\"uniqueFile\"\n [maxParallelUpload]=\"maxParallelUpload\"\n [autoHideDropArea]=\"autoHideDropArea\"\n ></app-upload-file>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding ion-nowrap\" >\n <ion-col>\n @if (importing) {\n <div class=\"importing-info\">\n <ion-text color=\"medium\"><small translate>FILE.UPLOAD.IMPORTING</small></ion-text>\n \n <ion-spinner name=\"dots\" color=\"accent\"></ion-spinner>\n </div>\n }\n @if (error) {\n <ion-item lines=\"none\" color=\"transparent\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"ion-text-wrap\">\n <small [innerHTML]=\"error | translate\"></small>\n </ion-label>\n </ion-item>\n }\n </ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label translate
|
|
16293
|
+
args: [{ selector: 'app-upload-file-popover', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-content class=\"ion-no-padding\" scrollY=\"false\">\n <app-upload-file\n #uploader\n [uploadFn]=\"uploadFn\"\n [deleteFn]=\"deleteFn\"\n [fileExtension]=\"fileExtension\"\n [instantUpload]=\"instantUpload\"\n [uniqueFile]=\"uniqueFile\"\n [maxParallelUpload]=\"maxParallelUpload\"\n [autoHideDropArea]=\"autoHideDropArea\"\n ></app-upload-file>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding ion-nowrap\" >\n <ion-col>\n @if (importing) {\n <div class=\"importing-info\">\n <ion-text color=\"medium\"><small translate>FILE.UPLOAD.IMPORTING</small></ion-text>\n \n <ion-spinner name=\"dots\" color=\"accent\"></ion-spinner>\n </div>\n }\n @if (error) {\n <ion-item lines=\"none\" color=\"transparent\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"ion-text-wrap\">\n <small [innerHTML]=\"error | translate\"></small>\n </ion-label>\n </ion-item>\n }\n </ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label [innerHTML]=\"cancelButtonText | translate\"></ion-label>\n </ion-button>\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"onValidate($event)\"\n (keyup.enter)=\"onValidate($event)\"\n color=\"tertiary\"\n [disabled]=\"disabled\"\n >\n <ion-label [innerHTML]=\"okButtonText | translate\"></ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", styles: [".importing-info{padding-inline-start:var(--ion-padding);display:inline-flex;flex-wrap:nowrap;padding-top:8px}\n"] }]
|
|
16292
16294
|
}], ctorParameters: () => [{ type: i2$1.PopoverController }, { type: i1$1.TranslateService }, { type: i0.ChangeDetectorRef }], propDecorators: { uploader: [{
|
|
16293
16295
|
type: ViewChild,
|
|
16294
16296
|
args: ['uploader', { static: true }]
|
|
@@ -16308,6 +16310,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
16308
16310
|
type: Input
|
|
16309
16311
|
}], autoHideDropArea: [{
|
|
16310
16312
|
type: Input
|
|
16313
|
+
}], okButtonText: [{
|
|
16314
|
+
type: Input
|
|
16315
|
+
}], cancelButtonText: [{
|
|
16316
|
+
type: Input
|
|
16311
16317
|
}] } });
|
|
16312
16318
|
|
|
16313
16319
|
const APP_TESTING_PAGES = new InjectionToken('testingPages');
|
|
@@ -19353,77 +19359,76 @@ class NetworkUtils {
|
|
|
19353
19359
|
}
|
|
19354
19360
|
}
|
|
19355
19361
|
|
|
19356
|
-
|
|
19357
|
-
|
|
19358
|
-
VERSION_PART_REGEXP: /^[0-9]+|alpha[0-9]+|beta[0-9]+|rc[0-9]+|[0-9]+-SNAPSHOT$/,
|
|
19359
|
-
};
|
|
19362
|
+
// Parse version string on standard "Semantic Versioning 2.0.0"
|
|
19363
|
+
const SEMVER_2_REGEXP = /^(?<major>0|[1-9]\d*)\.(?<minor>0|[1-9]\d*)\.(?<patch>0|[1-9]\d*)(?:-(?<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?<build>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
|
|
19360
19364
|
class VersionUtils {
|
|
19361
19365
|
static compare = compareVersionNumbers;
|
|
19362
19366
|
static isCompatible = isVersionCompatible;
|
|
19363
19367
|
static isSame = isSameVersion;
|
|
19364
19368
|
}
|
|
19365
19369
|
/**
|
|
19366
|
-
*
|
|
19367
|
-
*
|
|
19368
|
-
*
|
|
19369
|
-
*
|
|
19370
|
-
* negative if v1 < v2
|
|
19371
|
-
* positive if v1 > v2
|
|
19372
|
-
* Nan if they in the wrong format
|
|
19373
|
-
*
|
|
19374
|
-
* E.g.:
|
|
19375
|
-
*
|
|
19376
|
-
* assert(version_number_compare("1.7.1", "1.6.10") > 0);
|
|
19377
|
-
* assert(version_number_compare("1.7.1", "1.7.10") < 0);
|
|
19378
|
-
*
|
|
19379
|
-
* "Unit tests": http://jsfiddle.net/ripper234/Xv9WL/28/
|
|
19380
|
-
*
|
|
19381
|
-
* Taken from http://stackoverflow.com/a/6832721/11236
|
|
19370
|
+
* Compares two Semantic Versioning 2.0.0 strings
|
|
19371
|
+
* @param {string} v1 - First version string
|
|
19372
|
+
* @param {string} v2 - Second version string
|
|
19373
|
+
* @returns {number} -1 if v1 < v2, 0 if equal, 1 if v1 > v2
|
|
19382
19374
|
*/
|
|
19383
|
-
function compareVersionNumbers(v1, v2) {
|
|
19384
|
-
const
|
|
19385
|
-
const
|
|
19386
|
-
|
|
19387
|
-
if (!validateParts(v1parts) || !validateParts(v2parts)) {
|
|
19375
|
+
function compareVersionNumbers(v1, v2, comparePrerelease = false) {
|
|
19376
|
+
const m1 = v1.match(SEMVER_2_REGEXP);
|
|
19377
|
+
const m2 = v2.match(SEMVER_2_REGEXP);
|
|
19378
|
+
if (!m1 || !m2) {
|
|
19388
19379
|
return NaN;
|
|
19389
19380
|
}
|
|
19390
|
-
|
|
19391
|
-
|
|
19392
|
-
|
|
19393
|
-
|
|
19394
|
-
|
|
19395
|
-
|
|
19396
|
-
|
|
19397
|
-
|
|
19381
|
+
const [p1, p2] = [m1.groups, m2.groups];
|
|
19382
|
+
// 1. Compare major.minor.patch numerically
|
|
19383
|
+
for (const key of ['major', 'minor', 'patch']) {
|
|
19384
|
+
const n1 = Number(p1[key]);
|
|
19385
|
+
const n2 = Number(p2[key]);
|
|
19386
|
+
if (n1 !== n2)
|
|
19387
|
+
return n1 > n2 ? 1 : -1;
|
|
19388
|
+
}
|
|
19389
|
+
// If do not compare pre-release part return equals version on same major.minor.patch
|
|
19390
|
+
if (!comparePrerelease)
|
|
19391
|
+
return 0;
|
|
19392
|
+
// 2. Extract prerelease identifiers (build metadata is ignored)
|
|
19393
|
+
const pre1 = p1.prerelease ? p1.prerelease.split('.') : [];
|
|
19394
|
+
const pre2 = p2.prerelease ? p2.prerelease.split('.') : [];
|
|
19395
|
+
// If both have no prerelease, they are equal
|
|
19396
|
+
if (pre1.length === 0 && pre2.length === 0)
|
|
19397
|
+
return 0;
|
|
19398
|
+
// A version without prerelease has higher precedence than one with prerelease
|
|
19399
|
+
if (pre1.length === 0)
|
|
19400
|
+
return 1; // v1 stable, v2 pre-release → v1 > v2
|
|
19401
|
+
if (pre2.length === 0)
|
|
19402
|
+
return -1; // v1 pre-release, v2 stable → v1 < v2
|
|
19403
|
+
// 3. Compare identifier by identifier
|
|
19404
|
+
const maxLen = Math.max(pre1.length, pre2.length);
|
|
19405
|
+
for (let i = 0; i < maxLen; i++) {
|
|
19406
|
+
const id1 = pre1[i];
|
|
19407
|
+
const id2 = pre2[i];
|
|
19408
|
+
// If one has more fields, it has higher precedence if previous fields were equal
|
|
19409
|
+
if (id1 === undefined)
|
|
19410
|
+
return -1;
|
|
19411
|
+
if (id2 === undefined)
|
|
19398
19412
|
return 1;
|
|
19413
|
+
const isNum1 = /^\d+$/.test(id1);
|
|
19414
|
+
const isNum2 = /^\d+$/.test(id2);
|
|
19415
|
+
if (isNum1 && isNum2) {
|
|
19416
|
+
// Numeric comparison
|
|
19417
|
+
const n1 = Number(id1), n2 = Number(id2);
|
|
19418
|
+
if (n1 !== n2)
|
|
19419
|
+
return n1 > n2 ? 1 : -1;
|
|
19420
|
+
}
|
|
19421
|
+
else if (!isNum1 && !isNum2) {
|
|
19422
|
+
// Lexicographic comparison (ASCII order)
|
|
19423
|
+
if (id1 !== id2)
|
|
19424
|
+
return id1 > id2 ? 1 : -1;
|
|
19399
19425
|
}
|
|
19400
|
-
|
|
19401
|
-
|
|
19402
|
-
|
|
19403
|
-
return -1;
|
|
19404
|
-
}
|
|
19405
|
-
return 0;
|
|
19406
|
-
}
|
|
19407
|
-
function validateParts(parts) {
|
|
19408
|
-
for (let i = 0; i < parts.length; i++) {
|
|
19409
|
-
let isNumber = regexp.POSITIVE_INTEGER.test(parts[i]);
|
|
19410
|
-
// First part MUST be an integer
|
|
19411
|
-
if (i === 0 && !isNumber)
|
|
19412
|
-
return false;
|
|
19413
|
-
// If not integer, should be 'alpha', 'beta', etc.
|
|
19414
|
-
if (!isNumber) {
|
|
19415
|
-
if (!regexp.VERSION_PART_REGEXP.test(parts[i]))
|
|
19416
|
-
return false;
|
|
19417
|
-
// Remove '-SNAPSHOT', as it should never be in prod
|
|
19418
|
-
parts[i] = parts[i].replace('-SNAPSHOT', '');
|
|
19419
|
-
// Check again if numeric
|
|
19420
|
-
isNumber = regexp.POSITIVE_INTEGER.test(parts[i]);
|
|
19426
|
+
else {
|
|
19427
|
+
// Numeric identifiers always have lower precedence than alphanumeric
|
|
19428
|
+
return isNum1 ? -1 : 1;
|
|
19421
19429
|
}
|
|
19422
|
-
// Convert string to int (need by compare operators)
|
|
19423
|
-
if (isNumber)
|
|
19424
|
-
parts[i] = parseInt(parts[i]);
|
|
19425
19430
|
}
|
|
19426
|
-
return
|
|
19431
|
+
return 0; // Same version
|
|
19427
19432
|
}
|
|
19428
19433
|
function isVersionCompatible(minVersion, actualVersion) {
|
|
19429
19434
|
// DEV ONLY
|
|
@@ -25672,6 +25677,7 @@ class PlatformService extends StartableService {
|
|
|
25672
25677
|
audioProvider;
|
|
25673
25678
|
environment;
|
|
25674
25679
|
downloader;
|
|
25680
|
+
appBaseHref;
|
|
25675
25681
|
_logger;
|
|
25676
25682
|
_mobile;
|
|
25677
25683
|
_desktop;
|
|
@@ -25680,7 +25686,7 @@ class PlatformService extends StartableService {
|
|
|
25680
25686
|
_android;
|
|
25681
25687
|
_ios;
|
|
25682
25688
|
busySubject = new BehaviorSubject(false);
|
|
25683
|
-
constructor(ionicPlatform, cdkPlatform, cdkClipboard, toastController, translate, dateAdapter, entitiesStorage, settings, networkService, accountService, configService, cache, audioProvider, environment, loggingService, downloader) {
|
|
25689
|
+
constructor(ionicPlatform, cdkPlatform, cdkClipboard, toastController, translate, dateAdapter, entitiesStorage, settings, networkService, accountService, configService, cache, audioProvider, environment, loggingService, downloader, appBaseHref) {
|
|
25684
25690
|
super(ionicPlatform);
|
|
25685
25691
|
this.ionicPlatform = ionicPlatform;
|
|
25686
25692
|
this.cdkPlatform = cdkPlatform;
|
|
@@ -25697,6 +25703,7 @@ class PlatformService extends StartableService {
|
|
|
25697
25703
|
this.audioProvider = audioProvider;
|
|
25698
25704
|
this.environment = environment;
|
|
25699
25705
|
this.downloader = downloader;
|
|
25706
|
+
this.appBaseHref = appBaseHref;
|
|
25700
25707
|
this._logger = loggingService?.getLogger('platform');
|
|
25701
25708
|
this._debug = !environment.production;
|
|
25702
25709
|
if (this._debug)
|
|
@@ -26094,7 +26101,7 @@ class PlatformService extends StartableService {
|
|
|
26094
26101
|
* Handle deep links (Android App Links / iOS Universal Links)
|
|
26095
26102
|
*/
|
|
26096
26103
|
async addDeepLinkListener(listenerFn) {
|
|
26097
|
-
if (!this.isApp() ||
|
|
26104
|
+
if (!this.isApp() || typeof listenerFn !== 'function')
|
|
26098
26105
|
return; // Skip
|
|
26099
26106
|
// Handle deep links (Android App Links / iOS Universal Links)
|
|
26100
26107
|
try {
|
|
@@ -26267,7 +26274,7 @@ class PlatformService extends StartableService {
|
|
|
26267
26274
|
this.checkAppVersionTimer?.unsubscribe(); // Stop timer if exists
|
|
26268
26275
|
return; // Skip
|
|
26269
26276
|
}
|
|
26270
|
-
const remoteVersion = await this.networkService.getAppVersion();
|
|
26277
|
+
const remoteVersion = (await this.networkService.getAppVersion(this.appBaseHref)).trim();
|
|
26271
26278
|
if (isNilOrBlank(remoteVersion)) {
|
|
26272
26279
|
if (production && !silent)
|
|
26273
26280
|
console.error('[platform] Cannot load remote app version. Skipping version check');
|
|
@@ -26363,7 +26370,7 @@ class PlatformService extends StartableService {
|
|
|
26363
26370
|
console.error('cause', err.details);
|
|
26364
26371
|
}
|
|
26365
26372
|
}
|
|
26366
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PlatformService, deps: [{ token: i2$1.Platform }, { token: i2$6.Platform }, { token: i3$5.Clipboard }, { token: i2$1.ToastController }, { token: i1$1.TranslateService }, { token: i1.MomentDateAdapter }, { token: EntitiesStorage }, { token: LocalSettingsService }, { token: NetworkService }, { token: AccountService }, { token: ConfigService }, { token: i4$1.CacheService }, { token: AudioProvider }, { token: ENVIRONMENT }, { token: APP_LOGGING_SERVICE, optional: true }, { token: i13$2.Downloader, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
26373
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PlatformService, deps: [{ token: i2$1.Platform }, { token: i2$6.Platform }, { token: i3$5.Clipboard }, { token: i2$1.ToastController }, { token: i1$1.TranslateService }, { token: i1.MomentDateAdapter }, { token: EntitiesStorage }, { token: LocalSettingsService }, { token: NetworkService }, { token: AccountService }, { token: ConfigService }, { token: i4$1.CacheService }, { token: AudioProvider }, { token: ENVIRONMENT }, { token: APP_LOGGING_SERVICE, optional: true }, { token: i13$2.Downloader, optional: true }, { token: APP_BASE_HREF, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
26367
26374
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PlatformService, providedIn: 'root' });
|
|
26368
26375
|
}
|
|
26369
26376
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PlatformService, decorators: [{
|
|
@@ -26379,6 +26386,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
26379
26386
|
args: [APP_LOGGING_SERVICE]
|
|
26380
26387
|
}] }, { type: i13$2.Downloader, decorators: [{
|
|
26381
26388
|
type: Optional
|
|
26389
|
+
}] }, { type: undefined, decorators: [{
|
|
26390
|
+
type: Optional
|
|
26391
|
+
}, {
|
|
26392
|
+
type: Inject,
|
|
26393
|
+
args: [APP_BASE_HREF]
|
|
26382
26394
|
}] }] });
|
|
26383
26395
|
|
|
26384
26396
|
// @dynamic
|
|
@@ -39845,7 +39857,7 @@ class AppTable {
|
|
|
39845
39857
|
setFilter(filter, opts) {
|
|
39846
39858
|
opts = opts || { emitEvent: true };
|
|
39847
39859
|
// Prevent permanent selection change events
|
|
39848
|
-
this.permanentSelectionChangedPrevented =
|
|
39860
|
+
this.permanentSelectionChangedPrevented = opts.permanentSelectionChangedPrevented ?? this.permanentSelectionChangedPrevented;
|
|
39849
39861
|
if (this.saveBeforeFilter) {
|
|
39850
39862
|
// if a dirty table is to be saved before filter
|
|
39851
39863
|
if (this.dirty) {
|