ngx-techlify-core 18.86.0 → 18.88.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/esm2022/lib/import-csv/import-csv.component.mjs +20 -19
- package/esm2022/lib/ordinal-pipe/ordinal-pipe.mjs +30 -0
- package/esm2022/lib/phone-number-selector/country.service.mjs +31 -0
- package/esm2022/lib/phone-number-selector/phone-number-selector.component.mjs +172 -0
- package/esm2022/lib/utility/date-utils.service.mjs +23 -1
- package/esm2022/public-api.mjs +5 -4
- package/fesm2022/ngx-techlify-core.mjs +282 -50
- package/fesm2022/ngx-techlify-core.mjs.map +1 -1
- package/lib/import-csv/import-csv.component.d.ts +3 -3
- package/lib/ordinal-pipe/ordinal-pipe.d.ts +7 -0
- package/lib/phone-number-selector/country.service.d.ts +12 -0
- package/lib/phone-number-selector/phone-number-selector.component.d.ts +47 -0
- package/lib/utility/date-utils.service.d.ts +13 -0
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
|
@@ -6,23 +6,24 @@ import * as i0 from "@angular/core";
|
|
|
6
6
|
import * as i1 from "../core/alert.service";
|
|
7
7
|
import * as i2 from "../core/error-handler.service";
|
|
8
8
|
import * as i3 from "../core/http.service";
|
|
9
|
-
import * as i4 from "
|
|
10
|
-
import * as i5 from "@angular/
|
|
11
|
-
import * as i6 from "@angular/material/
|
|
12
|
-
import * as i7 from "@angular/material/
|
|
13
|
-
import * as i8 from "@angular/material/
|
|
14
|
-
import * as i9 from "
|
|
15
|
-
import * as i10 from "
|
|
16
|
-
import * as i11 from "./
|
|
17
|
-
import * as i12 from "./
|
|
18
|
-
import * as i13 from "./import-
|
|
19
|
-
import * as i14 from "./
|
|
9
|
+
import * as i4 from "../utility/date-utils.service";
|
|
10
|
+
import * as i5 from "@angular/common";
|
|
11
|
+
import * as i6 from "@angular/material/button";
|
|
12
|
+
import * as i7 from "@angular/material/icon";
|
|
13
|
+
import * as i8 from "@angular/material/card";
|
|
14
|
+
import * as i9 from "@angular/material/tooltip";
|
|
15
|
+
import * as i10 from "../file-dropper/file-dropper.component";
|
|
16
|
+
import * as i11 from "./field-mapping/field-mapping.component";
|
|
17
|
+
import * as i12 from "./failed-items-list/failed-items-list.component";
|
|
18
|
+
import * as i13 from "./import-history-list/import-history-list.component";
|
|
19
|
+
import * as i14 from "./import-success/import-success.component";
|
|
20
|
+
import * as i15 from "./data-import/data-import.component";
|
|
20
21
|
let ImportCsvComponent = class ImportCsvComponent {
|
|
21
|
-
constructor(alertService, errorHandler, http,
|
|
22
|
+
constructor(alertService, errorHandler, http, dateUtils) {
|
|
22
23
|
this.alertService = alertService;
|
|
23
24
|
this.errorHandler = errorHandler;
|
|
24
25
|
this.http = http;
|
|
25
|
-
this.
|
|
26
|
+
this.dateUtils = dateUtils;
|
|
26
27
|
this.filesList = [];
|
|
27
28
|
this.data = [];
|
|
28
29
|
this.isUploaded = false;
|
|
@@ -137,10 +138,10 @@ let ImportCsvComponent = class ImportCsvComponent {
|
|
|
137
138
|
const field = this.selectedFields.find((field) => field.label == key);
|
|
138
139
|
if (field) {
|
|
139
140
|
if (field.propertyType == 'date' && this.isValidDate(new Date(data[field.label]))) {
|
|
140
|
-
mappedObject[field.property] = this.
|
|
141
|
+
mappedObject[field.property] = this.dateUtils.toLocalDateString(data[field.label]);
|
|
141
142
|
}
|
|
142
143
|
else if (field.propertyType == 'dateTime' && this.isValidDate(new Date(data[field.label]))) {
|
|
143
|
-
mappedObject[field.property] =
|
|
144
|
+
mappedObject[field.property] = this.dateUtils.toLocalDateTimeString(data[field.label]);
|
|
144
145
|
}
|
|
145
146
|
else {
|
|
146
147
|
mappedObject[field.property] = data[field.label];
|
|
@@ -192,8 +193,8 @@ let ImportCsvComponent = class ImportCsvComponent {
|
|
|
192
193
|
this.selectedFields = [];
|
|
193
194
|
this.currentStep = 1;
|
|
194
195
|
}
|
|
195
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ImportCsvComponent, deps: [{ token: i1.AlertService }, { token: i2.ErrorHandlerService }, { token: i3.HttpService }, { token: i4.
|
|
196
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ImportCsvComponent, selector: "app-import-csv", inputs: { config: "config" }, ngImport: i0, template: "<div class=\"d-flex flex-column\">\n <mat-card class=\"w-100 p-0\">\n <mat-card-content class=\"d-flex flex-row flex-wrap align-items-center justify-content-center w-100 primary-color\">\n <h4 style=\"flex: 0 0 20%;\" class=\"ml-2\">\n Step {{step.step}}: <span class=\"normal-font-weight\">{{step?.title}}</span>\n </h4>\n <h3 class=\"d-flex align-items-center justify-content-center gap-3 text-dark\" style=\"flex: 0 0 80%;\">\n <span>{{config?.title}} Import</span>\n <a *ngIf=\"config?.sampleFile && currentStep == 1\" style=\"color: inherit;\" [download]=\"config?.sampleFile?.name\"\n target=\"_blank\" [href]=\"config?.sampleFile?.path\" matTooltip=\"Download Sample file\" matTooltipPosition=\"below\">\n <button mat-stroked-button class=\"primary-color\">\n <mat-icon>\n download\n </mat-icon>\n Sample File\n </button>\n </a>\n </h3>\n </mat-card-content>\n </mat-card>\n <div class=\"w-100 mt-2\">\n <div class=\"row g-3\" *ngIf=\"currentStep==1 || currentStep == 2 || currentStep == 4\">\n <div class=\"col-12 col-md-8\">\n <mat-card class=\"w-100\">\n <mat-card-content class=\"d-flex flex-column\">\n <div class=\"w-100 overflow-x-auto\">\n <section class=\"d-flex flex-column w-100\" *ngIf=\"config.importType && !this.fileData.length && !this.failedItems.length\">\n <h5 class=\"primary-color pb-3\">File Upload</h5>\n <app-file-dropper class=\"d-block w-100 mb-2 drop-section\" [config]=\"filesConfig\" [fileArray]=\"filesList\"\n (fileChanged)=\"fileChanged($event)\">\n </app-file-dropper>\n <app-import-history-list *ngIf=\"config.importHistory.isEnabled\" [config]=\"config\">\n </app-import-history-list>\n </section>\n <app-field-mapping class=\"w-100\" *ngIf=\"this.fileData.length > 0 && !this.failedItems.length\"\n [data]=\"fileData\" [config]=\"config\" (onSave)=\"mappingProcessed($event)\" (onReUpload)=\"reUpload()\">\n </app-field-mapping>\n <app-failed-items-list class=\"w-100\" *ngIf=\"this.failedItems.length > 0\" [failedItems]=\"failedItems\"\n [selectedFields]=\"selectedFields\" (onReUpload)=\"reUpload()\"></app-failed-items-list>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-12 col-md-4\">\n <mat-card class=\"w-100\">\n <mat-card-content class=\"d-flex flex-column\">\n <h5 class=\"primary-color pb-3\">Instructions & Requirements</h5>\n <div class=\"text-muted\">\n <p>\n 1. Please use this yyyy/MM/dd date format for all the date fields. Otherwise your date fields will be\n incorrect or not will be accepted. Ex: 2021/09/27\n </p>\n <ng-container *ngIf=\"config?.customErrorMessages\">\n <ng-container *ngIf=\"config?.isRenderCustomErrorMessagesInHtml; else renderPlainText\">\n <ng-container *ngFor=\"let message of config?.customErrorMessages\">\n <div [innerHtml]=\"message\"></div>\n </ng-container>\n </ng-container>\n <ng-template #renderPlainText>\n <p *ngFor=\"let message of config?.customErrorMessages\">\n {{message}}\n </p>\n </ng-template>\n </ng-container>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n </div>\n <div class=\"d-flex flex-column p-3\" *ngIf=\"currentStep==3 || currentStep == 5\">\n <app-data-import [step]=\"step\"></app-data-import>\n </div>\n <div class=\"d-flex flex-column p-3\" *ngIf=\"currentStep == 6\">\n <app-import-success [data]=\"result\" [config]=\"config\"></app-import-success>\n </div>\n </div>\n</div>\n", styles: [".drop-section{width:100%!important}.mat-card-title{margin:0!important}.clickable-card{width:100%}.normal-font-weight{font-weight:200!important}\n"], dependencies: [{ kind: "directive", type:
|
|
196
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ImportCsvComponent, deps: [{ token: i1.AlertService }, { token: i2.ErrorHandlerService }, { token: i3.HttpService }, { token: i4.DateUtils }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
197
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ImportCsvComponent, selector: "app-import-csv", inputs: { config: "config" }, ngImport: i0, template: "<div class=\"d-flex flex-column\">\n <mat-card class=\"w-100 p-0\">\n <mat-card-content class=\"d-flex flex-row flex-wrap align-items-center justify-content-center w-100 primary-color\">\n <h4 style=\"flex: 0 0 20%;\" class=\"ml-2\">\n Step {{step.step}}: <span class=\"normal-font-weight\">{{step?.title}}</span>\n </h4>\n <h3 class=\"d-flex align-items-center justify-content-center gap-3 text-dark\" style=\"flex: 0 0 80%;\">\n <span>{{config?.title}} Import</span>\n <a *ngIf=\"config?.sampleFile && currentStep == 1\" style=\"color: inherit;\" [download]=\"config?.sampleFile?.name\"\n target=\"_blank\" [href]=\"config?.sampleFile?.path\" matTooltip=\"Download Sample file\" matTooltipPosition=\"below\">\n <button mat-stroked-button class=\"primary-color\">\n <mat-icon>\n download\n </mat-icon>\n Sample File\n </button>\n </a>\n </h3>\n </mat-card-content>\n </mat-card>\n <div class=\"w-100 mt-2\">\n <div class=\"row g-3\" *ngIf=\"currentStep==1 || currentStep == 2 || currentStep == 4\">\n <div class=\"col-12 col-md-8\">\n <mat-card class=\"w-100\">\n <mat-card-content class=\"d-flex flex-column\">\n <div class=\"w-100 overflow-x-auto\">\n <section class=\"d-flex flex-column w-100\" *ngIf=\"config.importType && !this.fileData.length && !this.failedItems.length\">\n <h5 class=\"primary-color pb-3\">File Upload</h5>\n <app-file-dropper class=\"d-block w-100 mb-2 drop-section\" [config]=\"filesConfig\" [fileArray]=\"filesList\"\n (fileChanged)=\"fileChanged($event)\">\n </app-file-dropper>\n <app-import-history-list *ngIf=\"config.importHistory.isEnabled\" [config]=\"config\">\n </app-import-history-list>\n </section>\n <app-field-mapping class=\"w-100\" *ngIf=\"this.fileData.length > 0 && !this.failedItems.length\"\n [data]=\"fileData\" [config]=\"config\" (onSave)=\"mappingProcessed($event)\" (onReUpload)=\"reUpload()\">\n </app-field-mapping>\n <app-failed-items-list class=\"w-100\" *ngIf=\"this.failedItems.length > 0\" [failedItems]=\"failedItems\"\n [selectedFields]=\"selectedFields\" (onReUpload)=\"reUpload()\"></app-failed-items-list>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-12 col-md-4\">\n <mat-card class=\"w-100\">\n <mat-card-content class=\"d-flex flex-column\">\n <h5 class=\"primary-color pb-3\">Instructions & Requirements</h5>\n <div class=\"text-muted\">\n <p>\n 1. Please use this yyyy/MM/dd date format for all the date fields. Otherwise your date fields will be\n incorrect or not will be accepted. Ex: 2021/09/27\n </p>\n <ng-container *ngIf=\"config?.customErrorMessages\">\n <ng-container *ngIf=\"config?.isRenderCustomErrorMessagesInHtml; else renderPlainText\">\n <ng-container *ngFor=\"let message of config?.customErrorMessages\">\n <div [innerHtml]=\"message\"></div>\n </ng-container>\n </ng-container>\n <ng-template #renderPlainText>\n <p *ngFor=\"let message of config?.customErrorMessages\">\n {{message}}\n </p>\n </ng-template>\n </ng-container>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n </div>\n <div class=\"d-flex flex-column p-3\" *ngIf=\"currentStep==3 || currentStep == 5\">\n <app-data-import [step]=\"step\"></app-data-import>\n </div>\n <div class=\"d-flex flex-column p-3\" *ngIf=\"currentStep == 6\">\n <app-import-success [data]=\"result\" [config]=\"config\"></app-import-success>\n </div>\n </div>\n</div>\n", styles: [".drop-section{width:100%!important}.mat-card-title{margin:0!important}.clickable-card{width:100%}.normal-font-weight{font-weight:200!important}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i8.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i10.FileDropperComponent, selector: "app-file-dropper", inputs: ["fileArray", "config", "styles"], outputs: ["fileChanged"] }, { kind: "component", type: i11.FieldMappingComponent, selector: "app-field-mapping", inputs: ["data", "config"], outputs: ["onSave", "onReUpload"] }, { kind: "component", type: i12.FailedItemsListComponent, selector: "app-failed-items-list", inputs: ["failedItems", "selectedFields"], outputs: ["onReUpload"] }, { kind: "component", type: i13.ImportHistoryListComponent, selector: "app-import-history-list", inputs: ["config"] }, { kind: "component", type: i14.ImportSuccessComponent, selector: "app-import-success", inputs: ["data", "config"] }, { kind: "component", type: i15.DataImportComponent, selector: "app-data-import", inputs: ["step"] }] }); }
|
|
197
198
|
};
|
|
198
199
|
ImportCsvComponent = __decorate([
|
|
199
200
|
UntilDestroy()
|
|
@@ -202,7 +203,7 @@ export { ImportCsvComponent };
|
|
|
202
203
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ImportCsvComponent, decorators: [{
|
|
203
204
|
type: Component,
|
|
204
205
|
args: [{ selector: 'app-import-csv', template: "<div class=\"d-flex flex-column\">\n <mat-card class=\"w-100 p-0\">\n <mat-card-content class=\"d-flex flex-row flex-wrap align-items-center justify-content-center w-100 primary-color\">\n <h4 style=\"flex: 0 0 20%;\" class=\"ml-2\">\n Step {{step.step}}: <span class=\"normal-font-weight\">{{step?.title}}</span>\n </h4>\n <h3 class=\"d-flex align-items-center justify-content-center gap-3 text-dark\" style=\"flex: 0 0 80%;\">\n <span>{{config?.title}} Import</span>\n <a *ngIf=\"config?.sampleFile && currentStep == 1\" style=\"color: inherit;\" [download]=\"config?.sampleFile?.name\"\n target=\"_blank\" [href]=\"config?.sampleFile?.path\" matTooltip=\"Download Sample file\" matTooltipPosition=\"below\">\n <button mat-stroked-button class=\"primary-color\">\n <mat-icon>\n download\n </mat-icon>\n Sample File\n </button>\n </a>\n </h3>\n </mat-card-content>\n </mat-card>\n <div class=\"w-100 mt-2\">\n <div class=\"row g-3\" *ngIf=\"currentStep==1 || currentStep == 2 || currentStep == 4\">\n <div class=\"col-12 col-md-8\">\n <mat-card class=\"w-100\">\n <mat-card-content class=\"d-flex flex-column\">\n <div class=\"w-100 overflow-x-auto\">\n <section class=\"d-flex flex-column w-100\" *ngIf=\"config.importType && !this.fileData.length && !this.failedItems.length\">\n <h5 class=\"primary-color pb-3\">File Upload</h5>\n <app-file-dropper class=\"d-block w-100 mb-2 drop-section\" [config]=\"filesConfig\" [fileArray]=\"filesList\"\n (fileChanged)=\"fileChanged($event)\">\n </app-file-dropper>\n <app-import-history-list *ngIf=\"config.importHistory.isEnabled\" [config]=\"config\">\n </app-import-history-list>\n </section>\n <app-field-mapping class=\"w-100\" *ngIf=\"this.fileData.length > 0 && !this.failedItems.length\"\n [data]=\"fileData\" [config]=\"config\" (onSave)=\"mappingProcessed($event)\" (onReUpload)=\"reUpload()\">\n </app-field-mapping>\n <app-failed-items-list class=\"w-100\" *ngIf=\"this.failedItems.length > 0\" [failedItems]=\"failedItems\"\n [selectedFields]=\"selectedFields\" (onReUpload)=\"reUpload()\"></app-failed-items-list>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-12 col-md-4\">\n <mat-card class=\"w-100\">\n <mat-card-content class=\"d-flex flex-column\">\n <h5 class=\"primary-color pb-3\">Instructions & Requirements</h5>\n <div class=\"text-muted\">\n <p>\n 1. Please use this yyyy/MM/dd date format for all the date fields. Otherwise your date fields will be\n incorrect or not will be accepted. Ex: 2021/09/27\n </p>\n <ng-container *ngIf=\"config?.customErrorMessages\">\n <ng-container *ngIf=\"config?.isRenderCustomErrorMessagesInHtml; else renderPlainText\">\n <ng-container *ngFor=\"let message of config?.customErrorMessages\">\n <div [innerHtml]=\"message\"></div>\n </ng-container>\n </ng-container>\n <ng-template #renderPlainText>\n <p *ngFor=\"let message of config?.customErrorMessages\">\n {{message}}\n </p>\n </ng-template>\n </ng-container>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n </div>\n <div class=\"d-flex flex-column p-3\" *ngIf=\"currentStep==3 || currentStep == 5\">\n <app-data-import [step]=\"step\"></app-data-import>\n </div>\n <div class=\"d-flex flex-column p-3\" *ngIf=\"currentStep == 6\">\n <app-import-success [data]=\"result\" [config]=\"config\"></app-import-success>\n </div>\n </div>\n</div>\n", styles: [".drop-section{width:100%!important}.mat-card-title{margin:0!important}.clickable-card{width:100%}.normal-font-weight{font-weight:200!important}\n"] }]
|
|
205
|
-
}], ctorParameters: () => [{ type: i1.AlertService }, { type: i2.ErrorHandlerService }, { type: i3.HttpService }, { type: i4.
|
|
206
|
+
}], ctorParameters: () => [{ type: i1.AlertService }, { type: i2.ErrorHandlerService }, { type: i3.HttpService }, { type: i4.DateUtils }], propDecorators: { config: [{
|
|
206
207
|
type: Input
|
|
207
208
|
}] } });
|
|
208
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWNzdi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL2ltcG9ydC1jc3YvaW1wb3J0LWNzdi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL2ltcG9ydC1jc3YvaW1wb3J0LWNzdi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBR0EsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUd6RCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVV0QixJQUFNLGtCQUFrQixHQUF4QixNQUFNLGtCQUFrQjtJQTBEN0IsWUFDVSxZQUEwQixFQUMxQixZQUFpQyxFQUNqQyxJQUFpQixFQUNqQixRQUFrQjtRQUhsQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDakMsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBMUQ1QixjQUFTLEdBQVUsRUFBRSxDQUFDO1FBQ3RCLFNBQUksR0FBVSxFQUFFLENBQUM7UUFDakIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1Qix5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFFdEMsYUFBUSxHQUFVLEVBQUUsQ0FBQztRQUNyQixnQkFBVyxHQUFVLEVBQUUsQ0FBQztRQUN4QixtQkFBYyxHQUFVLEVBQUUsQ0FBQztRQUMzQixnQkFBVyxHQUFRO1lBQ2pCO2dCQUNFLEVBQUUsRUFBRSxDQUFDO2dCQUNMLElBQUksRUFBRSxDQUFDO2dCQUNQLEtBQUssRUFBRSxRQUFRO2dC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QyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7K0dBN0xVLGtCQUFrQjttR0FBbEIsa0JBQWtCLG9GQ2pCL0IscStIQTZFQTs7QUQ1RGEsa0JBQWtCO0lBUDlCLFlBQVksRUFBRTtHQU9GLGtCQUFrQixDQStMOUI7OzRGQS9MWSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZ0JBQWdCO29LQU1qQixNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWaWV3ZXJDb25maWcgfSBmcm9tICcuLi9kb2N1bWVudC12aWV3ZXIvdmlld2VyLWNvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBGaWxlRHJvcHBlckNvbmZpZyB9IGZyb20gJy4uL2ZpbGUtZHJvcHBlci9maWxlLWRyb3BwZXIubW9kZWwnO1xuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL2h0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL2Vycm9yLWhhbmRsZXIuc2VydmljZSc7XG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xuaW1wb3J0IHsgSW1wb3J0Q3N2Q29uZmlnIH0gZnJvbSAnLi9pbXBvcnQtY3N2LWNvbmZpZyc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbkBVbnRpbERlc3Ryb3koKVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtaW1wb3J0LWNzdicsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbXBvcnQtY3N2LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW1wb3J0LWNzdi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEltcG9ydENzdkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHJlc3VsdDogYW55O1xuICBASW5wdXQoKSBjb25maWc6IEltcG9ydENzdkNvbmZpZztcbiAgZmlsZXNDb25maWc6IEZpbGVEcm9wcGVyQ29uZmlnO1xuICBmaWxlc0xpc3Q6IGFueVtdID0gW107XG4gIGRhdGE6IGFueVtdID0gW107XG4gIGlzVXBsb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNJbXBvcnRUeXBlU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdmlld2VyQ29uZmlnOiBWaWV3ZXJDb25maWc7XG4gIGZpbGVEYXRhOiBhbnlbXSA9IFtdO1xuICBmYWlsZWRJdGVtczogYW55W10gPSBbXTtcbiAgc2VsZWN0ZWRGaWVsZHM6IGFueVtdID0gW107XG4gIGltcG9ydFN0ZXBzOiBhbnkgPSBbXG4gICAge1xuICAgICAgaWQ6IDEsXG4gICAgICBzdGVwOiAxLFxuICAgICAgdGl0bGU6ICdVcGxvYWQnLFxuICAgICAgcHJvZ3Jlc3NUaXRsZTogJycsXG4gICAgICBwcm9ncmVzc0Rlc2NyaXB0aW9uOiAnJ1xuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDIsXG4gICAgICBzdGVwOiAyLFxuICAgICAgdGl0bGU6ICdGaWVsZCBNYXBwaW5ncycsXG4gICAgICBwcm9ncmVzc1RpdGxlOiAnJyxcbiAgICAgIHByb2dyZXNzRGVzY3JpcHRpb246ICcnXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMyxcbiAgICAgIHN0ZXA6IDMsXG4gICAgICB0aXRsZTogJ0RhdGEgVmFsaWRhdGlvbicsXG4gICAgICBwcm9ncmVzc1RpdGxlOiAnRGF0YSBCZWluZyBWYWxpZGF0ZWQnLFxuICAgICAgcHJvZ3Jlc3NEZXNjcmlwdGlvbjogJ1RoZSBkYXRhIGlzIGN1cnJlbnRseSBiZWluZyB2YWxpZGF0ZWQgYW5kIGNoZWNrZWQgZm9yIGVycm9ycywgcGxlYXNlIGRvIG5vdCBuYXZpZ2F0ZSBhd2F5IGZyb20gdGhpcyBwYWdlLiAnXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogNCxcbiAgICAgIHN0ZXA6IDMsXG4gICAgICB0aXRsZTogJ0RhdGEgVmFsaWRhdGlvbiAmIEVycm9ycycsXG4gICAgICBwcm9ncmVzc1RpdGxlOiAnJyxcbiAgICAgIHByb2dyZXNzRGVzY3JpcHRpb246ICcnXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogNSxcbiAgICAgIHN0ZXA6IDQsXG4gICAgICB0aXRsZTogJ0RhdGEgSW1wb3J0aW5nJyxcbiAgICAgIHByb2dyZXNzVGl0bGU6ICdEYXRhIEJlaW5nIEltcG9ydGVkJyxcbiAgICAgIHByb2dyZXNzRGVzY3JpcHRpb246ICdUaGUgZGF0YSBpcyBjdXJyZW50bHkgYmVpbmcgaW1wb3J0ZWQgYW5kIHNhdmVkLCBwbGVhc2UgZG8gbm90IG5hdmlnYXRlIGF3YXkgZnJvbSB0aGlzIHBhZ2UuIEFmdGVyIHRoZSBpbXBvcnQgaXMgY29tcGxldGVkLCB5b3Ugd2lsbCBiZSByZWRpcmVjdGVkIHRvIGEgcGFnZSB3aXRoIHRoZSBpbXBvcnRlZCByZWNvcmRzLidcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiA2LFxuICAgICAgc3RlcDogNSxcbiAgICAgIHRpdGxlOiAnU3VjY2VzcyBQYWdlICYgRGF0YSBQcmV2aWV3JyxcbiAgICAgIHByb2dyZXNzVGl0bGU6ICcnLFxuICAgICAgcHJvZ3Jlc3NEZXNjcmlwdGlvbjogJydcbiAgICB9LFxuICBdO1xuICBjdXJyZW50U3RlcDogYW55ID0gMTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGVcbiAgKSB7XG4gICAgdGhpcy5maWxlc0NvbmZpZyA9IHtcbiAgICAgIGZpbGVJZDogXCJmaWxlXCIsXG4gICAgICBjb250YWluZXJJZDogXCJmaWxlQ29udGFpbmVyXCIsXG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgaGVpZ2h0OiBcIjIwMHB4XCJcbiAgICAgIH0sXG4gICAgICBhY2NlcHRGaWxlOiAnLmNzdicsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBtYXhTaXplOiAxMCxcbiAgICAgIGFjY2VwdEZpbGVUZXh0OiBcIi5jc3ZcIlxuICAgIH07XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgfVxuXG4gIGdldCBzdGVwKCkge1xuICAgIHJldHVybiB0aGlzLmltcG9ydFN0ZXBzLmZpbmQoc3RlcCA9PiBzdGVwLmlkID09IHRoaXMuY3VycmVudFN0ZXApO1xuICB9XG5cbiAgYXN5bmMgZmlsZUNoYW5nZWQoZXZlbnQ6IGFueSkge1xuICAgIGxldCBzZWxlY3RlZEZpbGUgPSBudWxsO1xuICAgIGxldCBqc29uRGF0YSA9IG51bGw7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICBjb25zdCBmaWxlID0gZXZlbnRbMF07XG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSByZWFkZXIucmVzdWx0O1xuICAgICAgc2VsZWN0ZWRGaWxlID0gWExTWC5yZWFkKGRhdGEsIHtcbiAgICAgICAgdHlwZTogJ2JpbmFyeScsXG4gICAgICAgIHJhdzogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAganNvbkRhdGEgPSBzZWxlY3RlZEZpbGUuU2hlZXROYW1lcy5yZWR1Y2UoKGluaXRpYWwsIG5hbWUpID0+IHtcbiAgICAgICAgY29uc3Qgc2hlZXQgPSBzZWxlY3RlZEZpbGUuU2hlZXRzW25hbWVdO1xuICAgICAgICBpbml0aWFsID0gWExTWC51dGlscy5zaGVldF90b19qc29uKHNoZWV0LCB7XG4gICAgICAgICAgaGVhZGVyOiAwLFxuICAgICAgICAgIGRlZnZhbDogXCJcIixcbiAgICAgICAgICByYXc6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGluaXRpYWw7XG4gICAgICB9LCB7fSk7XG4gICAgICB0aGlzLmZpbGVEYXRhID0ganNvbkRhdGE7XG4gICAgICBpZiAodGhpcy5maWxlRGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5yZVVwbG9hZCgpO1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydCgnQ1NWIGZpbGUgaXMgZW1wdHknLCAnZXJyb3InKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5maWxlc0xpc3QgPSBldmVudDtcbiAgICAgIHRoaXMuY3VycmVudFN0ZXAgPSAyO1xuICAgIH1cbiAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGZpbGUpO1xuICB9XG5cbiAgbWFwcGluZ1Byb2Nlc3NlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5jdXJyZW50U3RlcCA9IDM7XG4gICAgc2V0VGltZW91dCh4ID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWVsZHMgPSBldmVudC5maWVsZHM7XG4gICAgICAvL0FycmF5IG9mIG1hcHBlZCBtb2RlbHNcbiAgICAgIGNvbnN0IG1hcHBlZE1vZGVscyA9IFtdO1xuICAgICAgLyoqRm9yZWFjaCBmaWxlIGRhdGEsIG1hcCB0aGUgc2VsZWN0ZWQgZmllbGRzICovXG4gICAgICB0aGlzLmZpbGVEYXRhLmZvckVhY2goZGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IG1hcHBlZE9iamVjdDogYW55ID0gPGFueT57fTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcbiAgICAgICAgICAvL0ZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgc2VsZWN0ZWQgZmllbGQgZm9yIHRoZSBrZXlcbiAgICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuc2VsZWN0ZWRGaWVsZHMuZmluZCgoZmllbGQ6IGFueSkgPT4gZmllbGQubGFiZWwgPT0ga2V5KTtcbiAgICAgICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZC5wcm9wZXJ0eVR5cGUgPT0gJ2RhdGUnICYmIHRoaXMuaXNWYWxpZERhdGUobmV3IERhdGUoZGF0YVtmaWVsZC5sYWJlbF0pKSkge1xuICAgICAgICAgICAgICBtYXBwZWRPYmplY3RbZmllbGQucHJvcGVydHldID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obmV3IERhdGUoZGF0YVtmaWVsZC5sYWJlbF0pLCAneXl5eS1NTS1kZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZmllbGQucHJvcGVydHlUeXBlID09ICdkYXRlVGltZScgJiYgdGhpcy5pc1ZhbGlkRGF0ZShuZXcgRGF0ZShkYXRhW2ZpZWxkLmxhYmVsXSkpKSB7XG4gICAgICAgICAgICAgIG1hcHBlZE9iamVjdFtmaWVsZC5wcm9wZXJ0eV0gPSAobmV3IERhdGUoZGF0YVtmaWVsZC5sYWJlbF0pIGFzIERhdGUpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgbWFwcGVkT2JqZWN0W2ZpZWxkLnByb3BlcnR5XSA9IGRhdGFbZmllbGQubGFiZWxdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL1B1c2ggdGhlIGNsZWFuZWQgb2JqZWN0IHRvIG1hcHBlZCBtb2RlbHMgYXJyYXlcbiAgICAgICAgbWFwcGVkTW9kZWxzLnB1c2gobWFwcGVkT2JqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zYXZlKG1hcHBlZE1vZGVscyk7XG4gICAgfSwgMjAwMCk7XG4gIH1cblxuICBhc3luYyBzYXZlKHRlbXBGaWxlRGF0YTogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaHR0cC5wb3N0KHRoaXMuY29uZmlnLmFwaVVybCwgeyBkYXRhOiB0ZW1wRmlsZURhdGEgfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgICAgKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG5cbiAgICAgICAgICB0aGlzLmZhaWxlZEl0ZW1zID0gcmVzdWx0LmZhaWxlZF9pdGVtcztcbiAgICAgICAgICBpZiAodGhpcy5mYWlsZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KHJlc3VsdC5tc2csICd3YXJuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghKHRoaXMuZmFpbGVkSXRlbXMubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAgPSA1O1xuICAgICAgICAgICAgc2V0VGltZW91dCh4ID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcCA9IDY7XG4gICAgICAgICAgICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcCA9IDQ7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvci5zdGF0dXMgPT09IDQyMiB8fCBlcnJvci5zdGF0dXMgPT09IDQwMCkgJiYgZXJyb3IubXNnKSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KGVycm9yLm1zZywgXCJ3YXJuaW5nXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgdGhpcy5yZVVwbG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIGlzVmFsaWREYXRlKGQ6IGFueSkge1xuICAgIHJldHVybiBkIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZC5nZXRUaW1lKCkpO1xuICB9XG5cbiAgcmVVcGxvYWQoKSB7XG4gICAgdGhpcy5kYXRhID0gW107XG4gICAgdGhpcy5maWxlRGF0YSA9IFtdO1xuICAgIHRoaXMuZmlsZXNMaXN0ID0gW107XG4gICAgdGhpcy5mYWlsZWRJdGVtcyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWVsZHMgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRTdGVwID0gMTtcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XG4gIDxtYXQtY2FyZCBjbGFzcz1cInctMTAwIHAtMFwiPlxuICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGZsZXgtd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMCBwcmltYXJ5LWNvbG9yXCI+XG4gICAgICA8aDQgc3R5bGU9XCJmbGV4OiAwIDAgMjAlO1wiIGNsYXNzPVwibWwtMlwiPlxuICAgICAgICBTdGVwIHt7c3RlcC5zdGVwfX06IDxzcGFuIGNsYXNzPVwibm9ybWFsLWZvbnQtd2VpZ2h0XCI+e3tzdGVwPy50aXRsZX19PC9zcGFuPlxuICAgICAgPC9oND5cbiAgICAgIDxoMyBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMyB0ZXh0LWRhcmtcIiBzdHlsZT1cImZsZXg6IDAgMCA4MCU7XCI+XG4gICAgICAgIDxzcGFuPnt7Y29uZmlnPy50aXRsZX19IEltcG9ydDwvc3Bhbj5cbiAgICAgICAgPGEgKm5nSWY9XCJjb25maWc/LnNhbXBsZUZpbGUgJiYgY3VycmVudFN0ZXAgPT0gMVwiIHN0eWxlPVwiY29sb3I6IGluaGVyaXQ7XCIgW2Rvd25sb2FkXT1cImNvbmZpZz8uc2FtcGxlRmlsZT8ubmFtZVwiXG4gICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCIgW2hyZWZdPVwiY29uZmlnPy5zYW1wbGVGaWxlPy5wYXRoXCIgbWF0VG9vbHRpcD1cIkRvd25sb2FkIFNhbXBsZSBmaWxlXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIj5cbiAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInByaW1hcnktY29sb3JcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgZG93bmxvYWRcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICBTYW1wbGUgRmlsZVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2E+XG4gICAgICA8L2gzPlxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgPC9tYXQtY2FyZD5cbiAgPGRpdiBjbGFzcz1cInctMTAwIG10LTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IGctM1wiICpuZ0lmPVwiY3VycmVudFN0ZXA9PTEgfHwgY3VycmVudFN0ZXAgPT0gMiB8fCBjdXJyZW50U3RlcCA9PSA0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC04XCI+XG4gICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBvdmVyZmxvdy14LWF1dG9cIj5cbiAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gdy0xMDBcIiAqbmdJZj1cImNvbmZpZy5pbXBvcnRUeXBlICYmICF0aGlzLmZpbGVEYXRhLmxlbmd0aCAmJiAhdGhpcy5mYWlsZWRJdGVtcy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJwcmltYXJ5LWNvbG9yIHBiLTNcIj5GaWxlIFVwbG9hZDwvaDU+XG4gICAgICAgICAgICAgICAgPGFwcC1maWxlLWRyb3BwZXIgY2xhc3M9XCJkLWJsb2NrIHctMTAwIG1iLTIgZHJvcC1zZWN0aW9uXCIgW2NvbmZpZ109XCJmaWxlc0NvbmZpZ1wiIFtmaWxlQXJyYXldPVwiZmlsZXNMaXN0XCJcbiAgICAgICAgICAgICAgICAgIChmaWxlQ2hhbmdlZCk9XCJmaWxlQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtZmlsZS1kcm9wcGVyPlxuICAgICAgICAgICAgICAgIDxhcHAtaW1wb3J0LWhpc3RvcnktbGlzdCAqbmdJZj1cImNvbmZpZy5pbXBvcnRIaXN0b3J5LmlzRW5hYmxlZFwiIFtjb25maWddPVwiY29uZmlnXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtaW1wb3J0LWhpc3RvcnktbGlzdD5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICA8YXBwLWZpZWxkLW1hcHBpbmcgY2xhc3M9XCJ3LTEwMFwiICpuZ0lmPVwidGhpcy5maWxlRGF0YS5sZW5ndGggPiAwICYmICF0aGlzLmZhaWxlZEl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgW2RhdGFdPVwiZmlsZURhdGFcIiBbY29uZmlnXT1cImNvbmZpZ1wiIChvblNhdmUpPVwibWFwcGluZ1Byb2Nlc3NlZCgkZXZlbnQpXCIgKG9uUmVVcGxvYWQpPVwicmVVcGxvYWQoKVwiPlxuICAgICAgICAgICAgICA8L2FwcC1maWVsZC1tYXBwaW5nPlxuICAgICAgICAgICAgICA8YXBwLWZhaWxlZC1pdGVtcy1saXN0IGNsYXNzPVwidy0xMDBcIiAqbmdJZj1cInRoaXMuZmFpbGVkSXRlbXMubGVuZ3RoID4gMFwiIFtmYWlsZWRJdGVtc109XCJmYWlsZWRJdGVtc1wiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkRmllbGRzXT1cInNlbGVjdGVkRmllbGRzXCIgKG9uUmVVcGxvYWQpPVwicmVVcGxvYWQoKVwiPjwvYXBwLWZhaWxlZC1pdGVtcy1saXN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgICAgICA8L21hdC1jYXJkPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC00XCI+XG4gICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxoNSBjbGFzcz1cInByaW1hcnktY29sb3IgcGItM1wiPkluc3RydWN0aW9ucyAmIFJlcXVpcmVtZW50czwvaDU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZFwiPlxuICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAxLiBQbGVhc2UgdXNlIHRoaXMgeXl5eS9NTS9kZCBkYXRlIGZvcm1hdCBmb3IgYWxsIHRoZSBkYXRlIGZpZWxkcy4gT3RoZXJ3aXNlIHlvdXIgZGF0ZSBmaWVsZHMgd2lsbCBiZVxuICAgICAgICAgICAgICAgIGluY29ycmVjdCBvciBub3Qgd2lsbCBiZSBhY2NlcHRlZC4gRXg6IDIwMjEvMDkvMjdcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnPy5jdXN0b21FcnJvck1lc3NhZ2VzXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZz8uaXNSZW5kZXJDdXN0b21FcnJvck1lc3NhZ2VzSW5IdG1sOyBlbHNlIHJlbmRlclBsYWluVGV4dFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBjb25maWc/LmN1c3RvbUVycm9yTWVzc2FnZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIdG1sXT1cIm1lc3NhZ2VcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVuZGVyUGxhaW5UZXh0PlxuICAgICAgICAgICAgICAgICAgPHAgKm5nRm9yPVwibGV0IG1lc3NhZ2Ugb2YgY29uZmlnPy5jdXN0b21FcnJvck1lc3NhZ2VzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7bWVzc2FnZX19XG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIHAtM1wiICpuZ0lmPVwiY3VycmVudFN0ZXA9PTMgfHwgY3VycmVudFN0ZXAgPT0gNVwiPlxuICAgICAgPGFwcC1kYXRhLWltcG9ydCBbc3RlcF09XCJzdGVwXCI+PC9hcHAtZGF0YS1pbXBvcnQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBwLTNcIiAqbmdJZj1cImN1cnJlbnRTdGVwID09IDZcIj5cbiAgICAgIDxhcHAtaW1wb3J0LXN1Y2Nlc3MgW2RhdGFdPVwicmVzdWx0XCIgW2NvbmZpZ109XCJjb25maWdcIj48L2FwcC1pbXBvcnQtc3VjY2Vzcz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWNzdi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL2ltcG9ydC1jc3YvaW1wb3J0LWNzdi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL2ltcG9ydC1jc3YvaW1wb3J0LWNzdi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBR0EsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUd6RCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVdEIsSUFBTSxrQkFBa0IsR0FBeEIsTUFBTSxrQkFBa0I7SUEwRDdCLFlBQ1UsWUFBMEIsRUFDMUIsWUFBaUMsRUFDakMsSUFBaUIsRUFDakIsU0FBb0I7UUFIcEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQTFEOUIsY0FBUyxHQUFVLEVBQUUsQ0FBQztRQUN0QixTQUFJLEdBQVUsRUFBRSxDQUFDO1FBQ2pCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBRXRDLGFBQVEsR0FBVSxFQUFFLENBQUM7UUFDckIsZ0JBQVcsR0FBVSxFQUFFLENBQUM7UUFDeEIsbUJBQWMsR0FBVSxFQUFFLENBQUM7UUFDM0IsZ0JBQVcsR0FBUTtZQUNqQjtnQkFDRSxFQUFFLEVBQUUsQ0FBQztnQkFDTCxJQUFJLEVBQUUsQ0FBQztnQkFDUCxLQUFLLEVBQUUsUUFBUTtn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QztJQUNsRCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQzsrR0E3TFUsa0JBQWtCO21HQUFsQixrQkFBa0Isb0ZDakIvQixxK0hBNkVBOztBRDVEYSxrQkFBa0I7SUFQOUIsWUFBWSxFQUFFO0dBT0Ysa0JBQWtCLENBK0w5Qjs7NEZBL0xZLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxnQkFBZ0I7cUtBTWpCLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZpZXdlckNvbmZpZyB9IGZyb20gJy4uL2RvY3VtZW50LXZpZXdlci92aWV3ZXItY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IEZpbGVEcm9wcGVyQ29uZmlnIH0gZnJvbSAnLi4vZmlsZS1kcm9wcGVyL2ZpbGUtZHJvcHBlci5tb2RlbCc7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4uL2NvcmUvaHR0cC5zZXJ2aWNlJztcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uL2NvcmUvZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIFhMU1ggZnJvbSAneGxzeCc7XG5pbXBvcnQgeyBJbXBvcnRDc3ZDb25maWcgfSBmcm9tICcuL2ltcG9ydC1jc3YtY29uZmlnJztcbmltcG9ydCB7IERhdGVVdGlscyB9IGZyb20gJy4uL3V0aWxpdHkvZGF0ZS11dGlscy5zZXJ2aWNlJztcbkBVbnRpbERlc3Ryb3koKVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtaW1wb3J0LWNzdicsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbXBvcnQtY3N2LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW1wb3J0LWNzdi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEltcG9ydENzdkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHJlc3VsdDogYW55O1xuICBASW5wdXQoKSBjb25maWc6IEltcG9ydENzdkNvbmZpZztcbiAgZmlsZXNDb25maWc6IEZpbGVEcm9wcGVyQ29uZmlnO1xuICBmaWxlc0xpc3Q6IGFueVtdID0gW107XG4gIGRhdGE6IGFueVtdID0gW107XG4gIGlzVXBsb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNJbXBvcnRUeXBlU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdmlld2VyQ29uZmlnOiBWaWV3ZXJDb25maWc7XG4gIGZpbGVEYXRhOiBhbnlbXSA9IFtdO1xuICBmYWlsZWRJdGVtczogYW55W10gPSBbXTtcbiAgc2VsZWN0ZWRGaWVsZHM6IGFueVtdID0gW107XG4gIGltcG9ydFN0ZXBzOiBhbnkgPSBbXG4gICAge1xuICAgICAgaWQ6IDEsXG4gICAgICBzdGVwOiAxLFxuICAgICAgdGl0bGU6ICdVcGxvYWQnLFxuICAgICAgcHJvZ3Jlc3NUaXRsZTogJycsXG4gICAgICBwcm9ncmVzc0Rlc2NyaXB0aW9uOiAnJ1xuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDIsXG4gICAgICBzdGVwOiAyLFxuICAgICAgdGl0bGU6ICdGaWVsZCBNYXBwaW5ncycsXG4gICAgICBwcm9ncmVzc1RpdGxlOiAnJyxcbiAgICAgIHByb2dyZXNzRGVzY3JpcHRpb246ICcnXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMyxcbiAgICAgIHN0ZXA6IDMsXG4gICAgICB0aXRsZTogJ0RhdGEgVmFsaWRhdGlvbicsXG4gICAgICBwcm9ncmVzc1RpdGxlOiAnRGF0YSBCZWluZyBWYWxpZGF0ZWQnLFxuICAgICAgcHJvZ3Jlc3NEZXNjcmlwdGlvbjogJ1RoZSBkYXRhIGlzIGN1cnJlbnRseSBiZWluZyB2YWxpZGF0ZWQgYW5kIGNoZWNrZWQgZm9yIGVycm9ycywgcGxlYXNlIGRvIG5vdCBuYXZpZ2F0ZSBhd2F5IGZyb20gdGhpcyBwYWdlLiAnXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogNCxcbiAgICAgIHN0ZXA6IDMsXG4gICAgICB0aXRsZTogJ0RhdGEgVmFsaWRhdGlvbiAmIEVycm9ycycsXG4gICAgICBwcm9ncmVzc1RpdGxlOiAnJyxcbiAgICAgIHByb2dyZXNzRGVzY3JpcHRpb246ICcnXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogNSxcbiAgICAgIHN0ZXA6IDQsXG4gICAgICB0aXRsZTogJ0RhdGEgSW1wb3J0aW5nJyxcbiAgICAgIHByb2dyZXNzVGl0bGU6ICdEYXRhIEJlaW5nIEltcG9ydGVkJyxcbiAgICAgIHByb2dyZXNzRGVzY3JpcHRpb246ICdUaGUgZGF0YSBpcyBjdXJyZW50bHkgYmVpbmcgaW1wb3J0ZWQgYW5kIHNhdmVkLCBwbGVhc2UgZG8gbm90IG5hdmlnYXRlIGF3YXkgZnJvbSB0aGlzIHBhZ2UuIEFmdGVyIHRoZSBpbXBvcnQgaXMgY29tcGxldGVkLCB5b3Ugd2lsbCBiZSByZWRpcmVjdGVkIHRvIGEgcGFnZSB3aXRoIHRoZSBpbXBvcnRlZCByZWNvcmRzLidcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiA2LFxuICAgICAgc3RlcDogNSxcbiAgICAgIHRpdGxlOiAnU3VjY2VzcyBQYWdlICYgRGF0YSBQcmV2aWV3JyxcbiAgICAgIHByb2dyZXNzVGl0bGU6ICcnLFxuICAgICAgcHJvZ3Jlc3NEZXNjcmlwdGlvbjogJydcbiAgICB9LFxuICBdO1xuICBjdXJyZW50U3RlcDogYW55ID0gMTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRlVXRpbHM6IERhdGVVdGlsc1xuICApIHtcbiAgICB0aGlzLmZpbGVzQ29uZmlnID0ge1xuICAgICAgZmlsZUlkOiBcImZpbGVcIixcbiAgICAgIGNvbnRhaW5lcklkOiBcImZpbGVDb250YWluZXJcIixcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBoZWlnaHQ6IFwiMjAwcHhcIlxuICAgICAgfSxcbiAgICAgIGFjY2VwdEZpbGU6ICcuY3N2JyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIG1heFNpemU6IDEwLFxuICAgICAgYWNjZXB0RmlsZVRleHQ6IFwiLmNzdlwiXG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG5cbiAgZ2V0IHN0ZXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW1wb3J0U3RlcHMuZmluZChzdGVwID0+IHN0ZXAuaWQgPT0gdGhpcy5jdXJyZW50U3RlcCk7XG4gIH1cblxuICBhc3luYyBmaWxlQ2hhbmdlZChldmVudDogYW55KSB7XG4gICAgbGV0IHNlbGVjdGVkRmlsZSA9IG51bGw7XG4gICAgbGV0IGpzb25EYXRhID0gbnVsbDtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIGNvbnN0IGZpbGUgPSBldmVudFswXTtcbiAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHJlYWRlci5yZXN1bHQ7XG4gICAgICBzZWxlY3RlZEZpbGUgPSBYTFNYLnJlYWQoZGF0YSwge1xuICAgICAgICB0eXBlOiAnYmluYXJ5JyxcbiAgICAgICAgcmF3OiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBqc29uRGF0YSA9IHNlbGVjdGVkRmlsZS5TaGVldE5hbWVzLnJlZHVjZSgoaW5pdGlhbCwgbmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBzaGVldCA9IHNlbGVjdGVkRmlsZS5TaGVldHNbbmFtZV07XG4gICAgICAgIGluaXRpYWwgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24oc2hlZXQsIHtcbiAgICAgICAgICBoZWFkZXI6IDAsXG4gICAgICAgICAgZGVmdmFsOiBcIlwiLFxuICAgICAgICAgIHJhdzogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaW5pdGlhbDtcbiAgICAgIH0sIHt9KTtcbiAgICAgIHRoaXMuZmlsZURhdGEgPSBqc29uRGF0YTtcbiAgICAgIGlmICh0aGlzLmZpbGVEYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnJlVXBsb2FkKCk7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KCdDU1YgZmlsZSBpcyBlbXB0eScsICdlcnJvcicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmZpbGVzTGlzdCA9IGV2ZW50O1xuICAgICAgdGhpcy5jdXJyZW50U3RlcCA9IDI7XG4gICAgfVxuICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoZmlsZSk7XG4gIH1cblxuICBtYXBwaW5nUHJvY2Vzc2VkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmN1cnJlbnRTdGVwID0gMztcbiAgICBzZXRUaW1lb3V0KHggPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZEZpZWxkcyA9IGV2ZW50LmZpZWxkcztcbiAgICAgIC8vQXJyYXkgb2YgbWFwcGVkIG1vZGVsc1xuICAgICAgY29uc3QgbWFwcGVkTW9kZWxzID0gW107XG4gICAgICAvKipGb3JlYWNoIGZpbGUgZGF0YSwgbWFwIHRoZSBzZWxlY3RlZCBmaWVsZHMgKi9cbiAgICAgIHRoaXMuZmlsZURhdGEuZm9yRWFjaChkYXRhID0+IHtcbiAgICAgICAgY29uc3QgbWFwcGVkT2JqZWN0OiBhbnkgPSA8YW55Pnt9O1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xuICAgICAgICAgIC8vRmluZCB0aGUgY29ycmVzcG9uZGluZyBzZWxlY3RlZCBmaWVsZCBmb3IgdGhlIGtleVxuICAgICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5zZWxlY3RlZEZpZWxkcy5maW5kKChmaWVsZDogYW55KSA9PiBmaWVsZC5sYWJlbCA9PSBrZXkpO1xuICAgICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgICAgaWYgKGZpZWxkLnByb3BlcnR5VHlwZSA9PSAnZGF0ZScgJiYgdGhpcy5pc1ZhbGlkRGF0ZShuZXcgRGF0ZShkYXRhW2ZpZWxkLmxhYmVsXSkpKSB7XG4gICAgICAgICAgICAgIG1hcHBlZE9iamVjdFtmaWVsZC5wcm9wZXJ0eV0gPSB0aGlzLmRhdGVVdGlscy50b0xvY2FsRGF0ZVN0cmluZyhkYXRhW2ZpZWxkLmxhYmVsXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChmaWVsZC5wcm9wZXJ0eVR5cGUgPT0gJ2RhdGVUaW1lJyAmJiB0aGlzLmlzVmFsaWREYXRlKG5ldyBEYXRlKGRhdGFbZmllbGQubGFiZWxdKSkpIHtcbiAgICAgICAgICAgICAgbWFwcGVkT2JqZWN0W2ZpZWxkLnByb3BlcnR5XSA9IHRoaXMuZGF0ZVV0aWxzLnRvTG9jYWxEYXRlVGltZVN0cmluZyhkYXRhW2ZpZWxkLmxhYmVsXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgbWFwcGVkT2JqZWN0W2ZpZWxkLnByb3BlcnR5XSA9IGRhdGFbZmllbGQubGFiZWxdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL1B1c2ggdGhlIGNsZWFuZWQgb2JqZWN0IHRvIG1hcHBlZCBtb2RlbHMgYXJyYXlcbiAgICAgICAgbWFwcGVkTW9kZWxzLnB1c2gobWFwcGVkT2JqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zYXZlKG1hcHBlZE1vZGVscyk7XG4gICAgfSwgMjAwMCk7XG4gIH1cblxuICBhc3luYyBzYXZlKHRlbXBGaWxlRGF0YTogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaHR0cC5wb3N0KHRoaXMuY29uZmlnLmFwaVVybCwgeyBkYXRhOiB0ZW1wRmlsZURhdGEgfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgICAgKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG5cbiAgICAgICAgICB0aGlzLmZhaWxlZEl0ZW1zID0gcmVzdWx0LmZhaWxlZF9pdGVtcztcbiAgICAgICAgICBpZiAodGhpcy5mYWlsZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KHJlc3VsdC5tc2csICd3YXJuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghKHRoaXMuZmFpbGVkSXRlbXMubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAgPSA1O1xuICAgICAgICAgICAgc2V0VGltZW91dCh4ID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcCA9IDY7XG4gICAgICAgICAgICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcCA9IDQ7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvci5zdGF0dXMgPT09IDQyMiB8fCBlcnJvci5zdGF0dXMgPT09IDQwMCkgJiYgZXJyb3IubXNnKSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KGVycm9yLm1zZywgXCJ3YXJuaW5nXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgdGhpcy5yZVVwbG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIGlzVmFsaWREYXRlKGQ6IGFueSkge1xuICAgIHJldHVybiBkIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZC5nZXRUaW1lKCkpO1xuICB9XG5cbiAgcmVVcGxvYWQoKSB7XG4gICAgdGhpcy5kYXRhID0gW107XG4gICAgdGhpcy5maWxlRGF0YSA9IFtdO1xuICAgIHRoaXMuZmlsZXNMaXN0ID0gW107XG4gICAgdGhpcy5mYWlsZWRJdGVtcyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWVsZHMgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRTdGVwID0gMTtcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XG4gIDxtYXQtY2FyZCBjbGFzcz1cInctMTAwIHAtMFwiPlxuICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGZsZXgtd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMCBwcmltYXJ5LWNvbG9yXCI+XG4gICAgICA8aDQgc3R5bGU9XCJmbGV4OiAwIDAgMjAlO1wiIGNsYXNzPVwibWwtMlwiPlxuICAgICAgICBTdGVwIHt7c3RlcC5zdGVwfX06IDxzcGFuIGNsYXNzPVwibm9ybWFsLWZvbnQtd2VpZ2h0XCI+e3tzdGVwPy50aXRsZX19PC9zcGFuPlxuICAgICAgPC9oND5cbiAgICAgIDxoMyBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMyB0ZXh0LWRhcmtcIiBzdHlsZT1cImZsZXg6IDAgMCA4MCU7XCI+XG4gICAgICAgIDxzcGFuPnt7Y29uZmlnPy50aXRsZX19IEltcG9ydDwvc3Bhbj5cbiAgICAgICAgPGEgKm5nSWY9XCJjb25maWc/LnNhbXBsZUZpbGUgJiYgY3VycmVudFN0ZXAgPT0gMVwiIHN0eWxlPVwiY29sb3I6IGluaGVyaXQ7XCIgW2Rvd25sb2FkXT1cImNvbmZpZz8uc2FtcGxlRmlsZT8ubmFtZVwiXG4gICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCIgW2hyZWZdPVwiY29uZmlnPy5zYW1wbGVGaWxlPy5wYXRoXCIgbWF0VG9vbHRpcD1cIkRvd25sb2FkIFNhbXBsZSBmaWxlXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIj5cbiAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInByaW1hcnktY29sb3JcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgZG93bmxvYWRcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICBTYW1wbGUgRmlsZVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2E+XG4gICAgICA8L2gzPlxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgPC9tYXQtY2FyZD5cbiAgPGRpdiBjbGFzcz1cInctMTAwIG10LTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IGctM1wiICpuZ0lmPVwiY3VycmVudFN0ZXA9PTEgfHwgY3VycmVudFN0ZXAgPT0gMiB8fCBjdXJyZW50U3RlcCA9PSA0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC04XCI+XG4gICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBvdmVyZmxvdy14LWF1dG9cIj5cbiAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gdy0xMDBcIiAqbmdJZj1cImNvbmZpZy5pbXBvcnRUeXBlICYmICF0aGlzLmZpbGVEYXRhLmxlbmd0aCAmJiAhdGhpcy5mYWlsZWRJdGVtcy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJwcmltYXJ5LWNvbG9yIHBiLTNcIj5GaWxlIFVwbG9hZDwvaDU+XG4gICAgICAgICAgICAgICAgPGFwcC1maWxlLWRyb3BwZXIgY2xhc3M9XCJkLWJsb2NrIHctMTAwIG1iLTIgZHJvcC1zZWN0aW9uXCIgW2NvbmZpZ109XCJmaWxlc0NvbmZpZ1wiIFtmaWxlQXJyYXldPVwiZmlsZXNMaXN0XCJcbiAgICAgICAgICAgICAgICAgIChmaWxlQ2hhbmdlZCk9XCJmaWxlQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtZmlsZS1kcm9wcGVyPlxuICAgICAgICAgICAgICAgIDxhcHAtaW1wb3J0LWhpc3RvcnktbGlzdCAqbmdJZj1cImNvbmZpZy5pbXBvcnRIaXN0b3J5LmlzRW5hYmxlZFwiIFtjb25maWddPVwiY29uZmlnXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtaW1wb3J0LWhpc3RvcnktbGlzdD5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICA8YXBwLWZpZWxkLW1hcHBpbmcgY2xhc3M9XCJ3LTEwMFwiICpuZ0lmPVwidGhpcy5maWxlRGF0YS5sZW5ndGggPiAwICYmICF0aGlzLmZhaWxlZEl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgW2RhdGFdPVwiZmlsZURhdGFcIiBbY29uZmlnXT1cImNvbmZpZ1wiIChvblNhdmUpPVwibWFwcGluZ1Byb2Nlc3NlZCgkZXZlbnQpXCIgKG9uUmVVcGxvYWQpPVwicmVVcGxvYWQoKVwiPlxuICAgICAgICAgICAgICA8L2FwcC1maWVsZC1tYXBwaW5nPlxuICAgICAgICAgICAgICA8YXBwLWZhaWxlZC1pdGVtcy1saXN0IGNsYXNzPVwidy0xMDBcIiAqbmdJZj1cInRoaXMuZmFpbGVkSXRlbXMubGVuZ3RoID4gMFwiIFtmYWlsZWRJdGVtc109XCJmYWlsZWRJdGVtc1wiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkRmllbGRzXT1cInNlbGVjdGVkRmllbGRzXCIgKG9uUmVVcGxvYWQpPVwicmVVcGxvYWQoKVwiPjwvYXBwLWZhaWxlZC1pdGVtcy1saXN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgICAgICA8L21hdC1jYXJkPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC00XCI+XG4gICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxoNSBjbGFzcz1cInByaW1hcnktY29sb3IgcGItM1wiPkluc3RydWN0aW9ucyAmIFJlcXVpcmVtZW50czwvaDU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZFwiPlxuICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAxLiBQbGVhc2UgdXNlIHRoaXMgeXl5eS9NTS9kZCBkYXRlIGZvcm1hdCBmb3IgYWxsIHRoZSBkYXRlIGZpZWxkcy4gT3RoZXJ3aXNlIHlvdXIgZGF0ZSBmaWVsZHMgd2lsbCBiZVxuICAgICAgICAgICAgICAgIGluY29ycmVjdCBvciBub3Qgd2lsbCBiZSBhY2NlcHRlZC4gRXg6IDIwMjEvMDkvMjdcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnPy5jdXN0b21FcnJvck1lc3NhZ2VzXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZz8uaXNSZW5kZXJDdXN0b21FcnJvck1lc3NhZ2VzSW5IdG1sOyBlbHNlIHJlbmRlclBsYWluVGV4dFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBjb25maWc/LmN1c3RvbUVycm9yTWVzc2FnZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIdG1sXT1cIm1lc3NhZ2VcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVuZGVyUGxhaW5UZXh0PlxuICAgICAgICAgICAgICAgICAgPHAgKm5nRm9yPVwibGV0IG1lc3NhZ2Ugb2YgY29uZmlnPy5jdXN0b21FcnJvck1lc3NhZ2VzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7bWVzc2FnZX19XG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIHAtM1wiICpuZ0lmPVwiY3VycmVudFN0ZXA9PTMgfHwgY3VycmVudFN0ZXAgPT0gNVwiPlxuICAgICAgPGFwcC1kYXRhLWltcG9ydCBbc3RlcF09XCJzdGVwXCI+PC9hcHAtZGF0YS1pbXBvcnQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBwLTNcIiAqbmdJZj1cImN1cnJlbnRTdGVwID09IDZcIj5cbiAgICAgIDxhcHAtaW1wb3J0LXN1Y2Nlc3MgW2RhdGFdPVwicmVzdWx0XCIgW2NvbmZpZ109XCJjb25maWdcIj48L2FwcC1pbXBvcnQtc3VjY2Vzcz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
const ordinals = ['th', 'st', 'nd', 'rd'];
|
|
4
|
+
/*
|
|
5
|
+
* Append ordinal to number (e.g. "1st" position)
|
|
6
|
+
* Usage:
|
|
7
|
+
* value | ordinal:keepNumber
|
|
8
|
+
* Example:
|
|
9
|
+
* {{ 23 | ordinal}}
|
|
10
|
+
* formats to: '23rd'
|
|
11
|
+
* Example:
|
|
12
|
+
* {{ 23 | ordinal:false}}
|
|
13
|
+
* formats to: 'rd'
|
|
14
|
+
*/
|
|
15
|
+
export class OrdinalPipe {
|
|
16
|
+
transform(n, keepNumber = true) {
|
|
17
|
+
let v = n % 100;
|
|
18
|
+
return (keepNumber ? n : '') + (ordinals[(v - 20) % 10] || ordinals[v] || ordinals[0]);
|
|
19
|
+
}
|
|
20
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OrdinalPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
21
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: OrdinalPipe, isStandalone: true, name: "ordinal" }); }
|
|
22
|
+
}
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OrdinalPipe, decorators: [{
|
|
24
|
+
type: Pipe,
|
|
25
|
+
args: [{
|
|
26
|
+
name: 'ordinal',
|
|
27
|
+
standalone: true,
|
|
28
|
+
}]
|
|
29
|
+
}] });
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkaW5hbC1waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNvcmUvc3JjL2xpYi9vcmRpbmFsLXBpcGUvb3JkaW5hbC1waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUVwRCxNQUFNLFFBQVEsR0FBYSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBRXBEOzs7Ozs7Ozs7O0VBVUU7QUFLRixNQUFNLE9BQU8sV0FBVztJQUVwQixTQUFTLENBQUMsQ0FBUyxFQUFFLGFBQXNCLElBQUk7UUFDM0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNoQixPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRixDQUFDOytHQUxRLFdBQVc7NkdBQVgsV0FBVzs7NEZBQVgsV0FBVztrQkFKdkIsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsU0FBUztvQkFDZixVQUFVLEVBQUUsSUFBSTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmNvbnN0IG9yZGluYWxzOiBzdHJpbmdbXSA9IFsndGgnLCAnc3QnLCAnbmQnLCAncmQnXTtcblxuLypcbiAqIEFwcGVuZCBvcmRpbmFsIHRvIG51bWJlciAoZS5nLiBcIjFzdFwiIHBvc2l0aW9uKVxuICogVXNhZ2U6XG4gKiAgIHZhbHVlIHwgb3JkaW5hbDprZWVwTnVtYmVyXG4gKiBFeGFtcGxlOlxuICogICB7eyAyMyB8ICBvcmRpbmFsfX1cbiAqICAgZm9ybWF0cyB0bzogJzIzcmQnXG4gKiBFeGFtcGxlOlxuICogICB7eyAyMyB8ICBvcmRpbmFsOmZhbHNlfX1cbiAqICAgZm9ybWF0cyB0bzogJ3JkJ1xuKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnb3JkaW5hbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgT3JkaW5hbFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHRyYW5zZm9ybShuOiBudW1iZXIsIGtlZXBOdW1iZXI6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIGxldCB2ID0gbiAlIDEwMDtcbiAgICAgICAgcmV0dXJuIChrZWVwTnVtYmVyID8gbiA6ICcnKSArIChvcmRpbmFsc1sodiAtIDIwKSAlIDEwXSB8fCBvcmRpbmFsc1t2XSB8fCBvcmRpbmFsc1swXSk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { TechlifyService } from '../base-model/techlify-service';
|
|
3
|
+
import { map, of } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../core/http.service";
|
|
6
|
+
export class CountryService extends TechlifyService {
|
|
7
|
+
constructor(http) {
|
|
8
|
+
super(http, 'countries');
|
|
9
|
+
this.http = http;
|
|
10
|
+
}
|
|
11
|
+
getCountriesObservable(reload = false) {
|
|
12
|
+
if (this.countries && !reload) {
|
|
13
|
+
return of(this.countries);
|
|
14
|
+
}
|
|
15
|
+
return this.http.cache(reload).get('api/countries', { params: { per_page: 1000, sort_by: 'name|ASC' } })
|
|
16
|
+
.pipe(map((res) => {
|
|
17
|
+
const countries = res?.data ?? [];
|
|
18
|
+
this.countries = countries;
|
|
19
|
+
return countries;
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CountryService, deps: [{ token: i1.HttpService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
23
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CountryService, providedIn: 'root' }); }
|
|
24
|
+
}
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CountryService, decorators: [{
|
|
26
|
+
type: Injectable,
|
|
27
|
+
args: [{
|
|
28
|
+
providedIn: 'root'
|
|
29
|
+
}]
|
|
30
|
+
}], ctorParameters: () => [{ type: i1.HttpService }] });
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNvcmUvc3JjL2xpYi9waG9uZS1udW1iZXItc2VsZWN0b3IvY291bnRyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFLM0MsTUFBTSxPQUFPLGNBQWUsU0FBUSxlQUFlO0lBR2pELFlBQStCLElBQWlCO1FBQzlDLEtBQUssQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFESSxTQUFJLEdBQUosSUFBSSxDQUFhO0lBRWhELENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxTQUFrQixLQUFLO1FBQzVDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQzthQUNyRyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixNQUFNLFNBQVMsR0FBVSxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUMzQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQzsrR0FuQlUsY0FBYzttSEFBZCxjQUFjLGNBRmIsTUFBTTs7NEZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUZWNobGlmeVNlcnZpY2UgfSBmcm9tICcuLi9iYXNlLW1vZGVsL3RlY2hsaWZ5LXNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL2h0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvdW50cnlTZXJ2aWNlIGV4dGVuZHMgVGVjaGxpZnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb3VudHJpZXM/OiBhbnlbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgb3ZlcnJpZGUgaHR0cDogSHR0cFNlcnZpY2UpIHtcbiAgICBzdXBlcihodHRwLCAnY291bnRyaWVzJyk7XG4gIH1cblxuICBnZXRDb3VudHJpZXNPYnNlcnZhYmxlKHJlbG9hZDogYm9vbGVhbiA9IGZhbHNlKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgIGlmICh0aGlzLmNvdW50cmllcyAmJiAhcmVsb2FkKSB7XG4gICAgICByZXR1cm4gb2YodGhpcy5jb3VudHJpZXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLmNhY2hlKHJlbG9hZCkuZ2V0KCdhcGkvY291bnRyaWVzJywgeyBwYXJhbXM6IHsgcGVyX3BhZ2U6IDEwMDAsIHNvcnRfYnk6ICduYW1lfEFTQycgfSB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBjb3VudHJpZXM6IGFueVtdID0gcmVzPy5kYXRhID8/IFtdO1xuICAgICAgICAgIHRoaXMuY291bnRyaWVzID0gY291bnRyaWVzO1xuICAgICAgICAgIHJldHVybiBjb3VudHJpZXM7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { Component, effect, forwardRef, input, signal } from '@angular/core';
|
|
2
|
+
import { FormControl, FormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
|
|
3
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
4
|
+
import { SharedModule } from '../shared.module';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "./country.service";
|
|
7
|
+
import * as i2 from "@angular/common";
|
|
8
|
+
import * as i3 from "@angular/forms";
|
|
9
|
+
import * as i4 from "@angular/material/form-field";
|
|
10
|
+
import * as i5 from "@angular/material/input";
|
|
11
|
+
import * as i6 from "@angular/material/core";
|
|
12
|
+
import * as i7 from "@angular/material/select";
|
|
13
|
+
export class PhoneNumberSelectorComponent {
|
|
14
|
+
constructor(service) {
|
|
15
|
+
this.service = service;
|
|
16
|
+
this.label = input('Phone Number');
|
|
17
|
+
this.placeholder = input('');
|
|
18
|
+
this.required = input(false);
|
|
19
|
+
this.countries = signal([]);
|
|
20
|
+
this.phoneGroup = new FormGroup({
|
|
21
|
+
country_code: new FormControl('GY'),
|
|
22
|
+
number: new FormControl(''),
|
|
23
|
+
});
|
|
24
|
+
this.onChange = () => { };
|
|
25
|
+
this.onTouched = () => { };
|
|
26
|
+
this.destroy$ = new Subject();
|
|
27
|
+
/**
|
|
28
|
+
* Used to validate inline that the number entered is valid based on the
|
|
29
|
+
* selected country's phone length, with or without its calling code.
|
|
30
|
+
* Countries without a phone length are not validated yet
|
|
31
|
+
*/
|
|
32
|
+
this.phoneFormatValidator = (ctrl) => {
|
|
33
|
+
const number = ctrl.value;
|
|
34
|
+
const country = this.getCountry(ctrl.parent?.get('country_code')?.value ?? 'GY');
|
|
35
|
+
if (!number || !country?.phone_length) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
return this.toLocalDigits(number, country).length === country.phone_length
|
|
39
|
+
? null
|
|
40
|
+
: { invalidPhone: true };
|
|
41
|
+
};
|
|
42
|
+
effect(() => {
|
|
43
|
+
const ctrl = this.phoneGroup.get('number');
|
|
44
|
+
if (this.required()) {
|
|
45
|
+
ctrl?.addValidators(Validators.required);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
ctrl?.removeValidators(Validators.required);
|
|
49
|
+
}
|
|
50
|
+
ctrl?.updateValueAndValidity({ emitEvent: false });
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
ngOnInit() {
|
|
54
|
+
this.phoneGroup.get('number')?.addValidators(this.phoneFormatValidator);
|
|
55
|
+
this.service.getCountriesObservable()
|
|
56
|
+
.pipe(takeUntil(this.destroy$))
|
|
57
|
+
.subscribe(countries => {
|
|
58
|
+
this.countries.set(countries.filter(country => country.phone_length));
|
|
59
|
+
this.writeValue(this.phoneGroup.get('number')?.value || null);
|
|
60
|
+
});
|
|
61
|
+
this.phoneGroup.get('country_code')?.valueChanges
|
|
62
|
+
.pipe(takeUntil(this.destroy$))
|
|
63
|
+
.subscribe(() => {
|
|
64
|
+
this.phoneGroup.get('number')?.updateValueAndValidity({ emitEvent: false });
|
|
65
|
+
});
|
|
66
|
+
this.phoneGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {
|
|
67
|
+
this.onChange(this.normalizeForApi(value.number ?? '', value.country_code ?? 'GY'));
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
ngOnDestroy() {
|
|
71
|
+
this.destroy$.next();
|
|
72
|
+
this.destroy$.complete();
|
|
73
|
+
}
|
|
74
|
+
writeValue(value) {
|
|
75
|
+
let countryCode = this.phoneGroup.get('country_code')?.value ?? 'GY';
|
|
76
|
+
let number = value ?? '';
|
|
77
|
+
// Countries are not loaded yet, this runs again once they are
|
|
78
|
+
if (!this.countries().length) {
|
|
79
|
+
this.phoneGroup.patchValue({ number }, { emitEvent: false });
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const country = this.detectCountry(number);
|
|
83
|
+
if (country) {
|
|
84
|
+
countryCode = country.iso_code;
|
|
85
|
+
number = number.replace(new RegExp(`^\\+?${country.calling_code}[-\\s]*`), '');
|
|
86
|
+
}
|
|
87
|
+
this.phoneGroup.patchValue({ country_code: countryCode, number }, { emitEvent: false });
|
|
88
|
+
this.phoneGroup.get('number')?.updateValueAndValidity({ emitEvent: false });
|
|
89
|
+
this.onChange(this.normalizeForApi(number, countryCode));
|
|
90
|
+
}
|
|
91
|
+
registerOnChange(fn) {
|
|
92
|
+
this.onChange = fn;
|
|
93
|
+
}
|
|
94
|
+
registerOnTouched(fn) {
|
|
95
|
+
this.onTouched = fn;
|
|
96
|
+
}
|
|
97
|
+
setDisabledState(isDisabled) {
|
|
98
|
+
isDisabled ? this.phoneGroup.disable() : this.phoneGroup.enable();
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Adjust the number to be sent to the api in the correct format
|
|
102
|
+
*/
|
|
103
|
+
normalizeForApi(number, countryCode) {
|
|
104
|
+
if (!number.replace(/\D/g, '')) {
|
|
105
|
+
return '';
|
|
106
|
+
}
|
|
107
|
+
const country = this.getCountry(countryCode);
|
|
108
|
+
if (!country) {
|
|
109
|
+
return number;
|
|
110
|
+
}
|
|
111
|
+
const local = this.toLocalDigits(number, country);
|
|
112
|
+
if (!country.phone_length) {
|
|
113
|
+
return `+${country.calling_code}-${local}`;
|
|
114
|
+
}
|
|
115
|
+
if (local.length !== country.phone_length) {
|
|
116
|
+
return number;
|
|
117
|
+
}
|
|
118
|
+
if (country.calling_code === '592') {
|
|
119
|
+
return `+592-${local.slice(0, 3)}-${local.slice(3)}`;
|
|
120
|
+
}
|
|
121
|
+
if (country.calling_code === '1') {
|
|
122
|
+
return `+1 (${local.slice(0, 3)}) ${local.slice(3, 6)}-${local.slice(6)}`;
|
|
123
|
+
}
|
|
124
|
+
return `+${country.calling_code}-${local}`;
|
|
125
|
+
}
|
|
126
|
+
getCountry(isoCode) {
|
|
127
|
+
return this.countries().find(country => country.iso_code === isoCode);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Returns the digits of the number without the country's calling code
|
|
131
|
+
*/
|
|
132
|
+
toLocalDigits(number, country) {
|
|
133
|
+
const digits = number.replace(/\D/g, '');
|
|
134
|
+
if (digits.length === country.calling_code.length + country.phone_length
|
|
135
|
+
&& digits.startsWith(country.calling_code)) {
|
|
136
|
+
return digits.slice(country.calling_code.length);
|
|
137
|
+
}
|
|
138
|
+
return digits;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Finds the country from the calling code the number starts with.
|
|
142
|
+
* +1 is shared by several countries, so it defaults to US like before
|
|
143
|
+
*/
|
|
144
|
+
detectCountry(number) {
|
|
145
|
+
const matches = this.countries().filter(country => number.startsWith(`+${country.calling_code}`)
|
|
146
|
+
|| (country.phone_length
|
|
147
|
+
&& number.startsWith(country.calling_code)
|
|
148
|
+
&& number.replace(/\D/g, '').length === country.calling_code.length + country.phone_length));
|
|
149
|
+
return matches.find(country => country.iso_code === 'US') ?? matches[0];
|
|
150
|
+
}
|
|
151
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhoneNumberSelectorComponent, deps: [{ token: i1.CountryService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
152
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: PhoneNumberSelectorComponent, isStandalone: true, selector: "app-phone-number-selector", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
153
|
+
{
|
|
154
|
+
provide: NG_VALUE_ACCESSOR,
|
|
155
|
+
useExisting: forwardRef(() => PhoneNumberSelectorComponent),
|
|
156
|
+
multi: true,
|
|
157
|
+
},
|
|
158
|
+
], ngImport: i0, template: "<mat-form-field class=\"w-100\" [formGroup]=\"phoneGroup\">\n <mat-label>{{ label() }}</mat-label>\n <input matInput formControlName=\"number\" [placeholder]=\"placeholder()\" [required]=\"required()\" (blur)=\"onTouched()\">\n <mat-select matPrefix formControlName=\"country_code\" [panelWidth]=\"null\" class=\"phone-prefix-select\">\n <mat-option *ngFor=\"let country of countries()\" [value]=\"country.iso_code\">{{ country.iso_code }} +{{ country.calling_code }}</mat-option>\n </mat-select>\n <mat-error *ngIf=\"phoneGroup.get('number')?.hasError('required')\">{{ label() }} is required</mat-error>\n <mat-error *ngIf=\"phoneGroup.get('number')?.hasError('invalidPhone')\">\n Invalid {{ phoneGroup.get('country_code')?.value }} phone number\n </mat-error>\n</mat-form-field>\n", styles: [".phone-prefix-select{width:90px;margin-left:8px;text-align:center}.phone-prefix-select ::ng-deep .mat-mdc-select-value{text-align:center}.phone-prefix-select ::ng-deep .mat-mdc-select-arrow-wrapper{display:none}.phone-prefix-select ::ng-deep .mat-mdc-select-trigger{display:inline-flex;align-items:center;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: SharedModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
|
|
159
|
+
}
|
|
160
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhoneNumberSelectorComponent, decorators: [{
|
|
161
|
+
type: Component,
|
|
162
|
+
args: [{ selector: 'app-phone-number-selector', standalone: true, imports: [
|
|
163
|
+
SharedModule
|
|
164
|
+
], providers: [
|
|
165
|
+
{
|
|
166
|
+
provide: NG_VALUE_ACCESSOR,
|
|
167
|
+
useExisting: forwardRef(() => PhoneNumberSelectorComponent),
|
|
168
|
+
multi: true,
|
|
169
|
+
},
|
|
170
|
+
], template: "<mat-form-field class=\"w-100\" [formGroup]=\"phoneGroup\">\n <mat-label>{{ label() }}</mat-label>\n <input matInput formControlName=\"number\" [placeholder]=\"placeholder()\" [required]=\"required()\" (blur)=\"onTouched()\">\n <mat-select matPrefix formControlName=\"country_code\" [panelWidth]=\"null\" class=\"phone-prefix-select\">\n <mat-option *ngFor=\"let country of countries()\" [value]=\"country.iso_code\">{{ country.iso_code }} +{{ country.calling_code }}</mat-option>\n </mat-select>\n <mat-error *ngIf=\"phoneGroup.get('number')?.hasError('required')\">{{ label() }} is required</mat-error>\n <mat-error *ngIf=\"phoneGroup.get('number')?.hasError('invalidPhone')\">\n Invalid {{ phoneGroup.get('country_code')?.value }} phone number\n </mat-error>\n</mat-form-field>\n", styles: [".phone-prefix-select{width:90px;margin-left:8px;text-align:center}.phone-prefix-select ::ng-deep .mat-mdc-select-value{text-align:center}.phone-prefix-select ::ng-deep .mat-mdc-select-arrow-wrapper{display:none}.phone-prefix-select ::ng-deep .mat-mdc-select-trigger{display:inline-flex;align-items:center;height:100%}\n"] }]
|
|
171
|
+
}], ctorParameters: () => [{ type: i1.CountryService }] });
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtbnVtYmVyLXNlbGVjdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvcGhvbmUtbnVtYmVyLXNlbGVjdG9yL3Bob25lLW51bWJlci1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3Bob25lLW51bWJlci1zZWxlY3Rvci9waG9uZS1udW1iZXItc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFHTCxXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNqQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7OztBQWtCaEQsTUFBTSxPQUFPLDRCQUE0QjtJQWlDdkMsWUFBb0IsT0FBdUI7UUFBdkIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFoQzNDLFVBQUssR0FBRyxLQUFLLENBQVMsY0FBYyxDQUFDLENBQUM7UUFDdEMsZ0JBQVcsR0FBRyxLQUFLLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDaEMsYUFBUSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUVqQyxjQUFTLEdBQUcsTUFBTSxDQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRXJCLGVBQVUsR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUNsQyxZQUFZLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ25D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RSxJQUFJO3lCQUNaO3FCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBlZmZlY3QsIGZvcndhcmRSZWYsIGlucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxuICBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdG9yRm4sXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb3VudHJ5U2VydmljZSB9IGZyb20gJy4vY291bnRyeS5zZXJ2aWNlJztcbmltcG9ydCB7IFNoYXJlZE1vZHVsZSB9IGZyb20gJy4uL3NoYXJlZC5tb2R1bGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcGhvbmUtbnVtYmVyLXNlbGVjdG9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFNoYXJlZE1vZHVsZVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vcGhvbmUtbnVtYmVyLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3Bob25lLW51bWJlci1zZWxlY3Rvci5jb21wb25lbnQuc2NzcycsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUGhvbmVOdW1iZXJTZWxlY3RvckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBQaG9uZU51bWJlclNlbGVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgbGFiZWwgPSBpbnB1dDxzdHJpbmc+KCdQaG9uZSBOdW1iZXInKTtcbiAgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVxdWlyZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgY291bnRyaWVzID0gc2lnbmFsPGFueVtdPihbXSk7XG5cbiAgcmVhZG9ubHkgcGhvbmVHcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIGNvdW50cnlfY29kZTogbmV3IEZvcm1Db250cm9sKCdHWScpLFxuICAgIG51bWJlcjogbmV3IEZvcm1Db250cm9sPHN0cmluZz4oJycpLFxuICB9KTtcblxuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCA9ICgpID0+IHsgfTtcbiAgcHJvdGVjdGVkIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHsgfTtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gdmFsaWRhdGUgaW5saW5lIHRoYXQgdGhlIG51bWJlciBlbnRlcmVkIGlzIHZhbGlkIGJhc2VkIG9uIHRoZVxuICAgKiBzZWxlY3RlZCBjb3VudHJ5J3MgcGhvbmUgbGVuZ3RoLCB3aXRoIG9yIHdpdGhvdXQgaXRzIGNhbGxpbmcgY29kZS5cbiAgICogQ291bnRyaWVzIHdpdGhvdXQgYSBwaG9uZSBsZW5ndGggYXJlIG5vdCB2YWxpZGF0ZWQgeWV0XG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBob25lRm9ybWF0VmFsaWRhdG9yOiBWYWxpZGF0b3JGbiA9IChjdHJsOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICBjb25zdCBudW1iZXIgPSBjdHJsLnZhbHVlIGFzIHN0cmluZztcbiAgICBjb25zdCBjb3VudHJ5ID0gdGhpcy5nZXRDb3VudHJ5KGN0cmwucGFyZW50Py5nZXQoJ2NvdW50cnlfY29kZScpPy52YWx1ZSA/PyAnR1knKTtcbiAgICBpZiAoIW51bWJlciB8fCAhY291bnRyeT8ucGhvbmVfbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50b0xvY2FsRGlnaXRzKG51bWJlciwgY291bnRyeSkubGVuZ3RoID09PSBjb3VudHJ5LnBob25lX2xlbmd0aFxuICAgICAgPyBudWxsXG4gICAgICA6IHsgaW52YWxpZFBob25lOiB0cnVlIH07XG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXJ2aWNlOiBDb3VudHJ5U2VydmljZSkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBjdHJsID0gdGhpcy5waG9uZUdyb3VwLmdldCgnbnVtYmVyJyk7XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCgpKSB7XG4gICAgICAgIGN0cmw/LmFkZFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdHJsPy5yZW1vdmVWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgfVxuICAgICAgY3RybD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnBob25lR3JvdXAuZ2V0KCdudW1iZXInKT8uYWRkVmFsaWRhdG9ycyh0aGlzLnBob25lRm9ybWF0VmFsaWRhdG9yKTtcblxuICAgIHRoaXMuc2VydmljZS5nZXRDb3VudHJpZXNPYnNlcnZhYmxlKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoY291bnRyaWVzID0+IHtcbiAgICAgICAgdGhpcy5jb3VudHJpZXMuc2V0KGNvdW50cmllcy5maWx0ZXIoY291bnRyeSA9PiBjb3VudHJ5LnBob25lX2xlbmd0aCkpO1xuICAgICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5waG9uZUdyb3VwLmdldCgnbnVtYmVyJyk/LnZhbHVlIHx8IG51bGwpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnBob25lR3JvdXAuZ2V0KCdjb3VudHJ5X2NvZGUnKT8udmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5waG9uZUdyb3VwLmdldCgnbnVtYmVyJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnBob25lR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLm5vcm1hbGl6ZUZvckFwaSh2YWx1ZS5udW1iZXIgPz8gJycsIHZhbHVlLmNvdW50cnlfY29kZSA/PyAnR1knKSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgbGV0IGNvdW50cnlDb2RlID0gdGhpcy5waG9uZUdyb3VwLmdldCgnY291bnRyeV9jb2RlJyk/LnZhbHVlID8/ICdHWSc7XG4gICAgbGV0IG51bWJlciA9IHZhbHVlID8/ICcnO1xuXG4gICAgLy8gQ291bnRyaWVzIGFyZSBub3QgbG9hZGVkIHlldCwgdGhpcyBydW5zIGFnYWluIG9uY2UgdGhleSBhcmVcbiAgICBpZiAoIXRoaXMuY291bnRyaWVzKCkubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBob25lR3JvdXAucGF0Y2hWYWx1ZSh7IG51bWJlciB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY291bnRyeSA9IHRoaXMuZGV0ZWN0Q291bnRyeShudW1iZXIpO1xuICAgIGlmIChjb3VudHJ5KSB7XG4gICAgICBjb3VudHJ5Q29kZSA9IGNvdW50cnkuaXNvX2NvZGU7XG4gICAgICBudW1iZXIgPSBudW1iZXIucmVwbGFjZShuZXcgUmVnRXhwKGBeXFxcXCs/JHtjb3VudHJ5LmNhbGxpbmdfY29kZX1bLVxcXFxzXSpgKSwgJycpO1xuICAgIH1cblxuICAgIHRoaXMucGhvbmVHcm91cC5wYXRjaFZhbHVlKHsgY291bnRyeV9jb2RlOiBjb3VudHJ5Q29kZSwgbnVtYmVyIH0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLnBob25lR3JvdXAuZ2V0KCdudW1iZXInKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLm5vcm1hbGl6ZUZvckFwaShudW1iZXIsIGNvdW50cnlDb2RlKSk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlzRGlzYWJsZWQgPyB0aGlzLnBob25lR3JvdXAuZGlzYWJsZSgpIDogdGhpcy5waG9uZUdyb3VwLmVuYWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdCB0aGUgbnVtYmVyIHRvIGJlIHNlbnQgdG8gdGhlIGFwaSBpbiB0aGUgY29ycmVjdCBmb3JtYXRcbiAgICovXG4gIHByaXZhdGUgbm9ybWFsaXplRm9yQXBpKG51bWJlcjogc3RyaW5nLCBjb3VudHJ5Q29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIW51bWJlci5yZXBsYWNlKC9cXEQvZywgJycpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgY291bnRyeSA9IHRoaXMuZ2V0Q291bnRyeShjb3VudHJ5Q29kZSk7XG4gICAgaWYgKCFjb3VudHJ5KSB7XG4gICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH1cblxuICAgIGNvbnN0IGxvY2FsID0gdGhpcy50b0xvY2FsRGlnaXRzKG51bWJlciwgY291bnRyeSk7XG4gICAgaWYgKCFjb3VudHJ5LnBob25lX2xlbmd0aCkge1xuICAgICAgcmV0dXJuIGArJHtjb3VudHJ5LmNhbGxpbmdfY29kZX0tJHtsb2NhbH1gO1xuICAgIH1cblxuICAgIGlmIChsb2NhbC5sZW5ndGggIT09IGNvdW50cnkucGhvbmVfbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH1cblxuICAgIGlmIChjb3VudHJ5LmNhbGxpbmdfY29kZSA9PT0gJzU5MicpIHtcbiAgICAgIHJldHVybiBgKzU5Mi0ke2xvY2FsLnNsaWNlKDAsIDMpfS0ke2xvY2FsLnNsaWNlKDMpfWA7XG4gICAgfVxuXG4gICAgaWYgKGNvdW50cnkuY2FsbGluZ19jb2RlID09PSAnMScpIHtcbiAgICAgIHJldHVybiBgKzEgKCR7bG9jYWwuc2xpY2UoMCwgMyl9KSAke2xvY2FsLnNsaWNlKDMsIDYpfS0ke2xvY2FsLnNsaWNlKDYpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGArJHtjb3VudHJ5LmNhbGxpbmdfY29kZX0tJHtsb2NhbH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb3VudHJ5KGlzb0NvZGU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuY291bnRyaWVzKCkuZmluZChjb3VudHJ5ID0+IGNvdW50cnkuaXNvX2NvZGUgPT09IGlzb0NvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRpZ2l0cyBvZiB0aGUgbnVtYmVyIHdpdGhvdXQgdGhlIGNvdW50cnkncyBjYWxsaW5nIGNvZGVcbiAgICovXG4gIHByaXZhdGUgdG9Mb2NhbERpZ2l0cyhudW1iZXI6IHN0cmluZywgY291bnRyeTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBkaWdpdHMgPSBudW1iZXIucmVwbGFjZSgvXFxEL2csICcnKTtcbiAgICBpZiAoZGlnaXRzLmxlbmd0aCA9PT0gY291bnRyeS5jYWxsaW5nX2NvZGUubGVuZ3RoICsgY291bnRyeS5waG9uZV9sZW5ndGhcbiAgICAgICYmIGRpZ2l0cy5zdGFydHNXaXRoKGNvdW50cnkuY2FsbGluZ19jb2RlKSkge1xuICAgICAgcmV0dXJuIGRpZ2l0cy5zbGljZShjb3VudHJ5LmNhbGxpbmdfY29kZS5sZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gZGlnaXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBjb3VudHJ5IGZyb20gdGhlIGNhbGxpbmcgY29kZSB0aGUgbnVtYmVyIHN0YXJ0cyB3aXRoLlxuICAgKiArMSBpcyBzaGFyZWQgYnkgc2V2ZXJhbCBjb3VudHJpZXMsIHNvIGl0IGRlZmF1bHRzIHRvIFVTIGxpa2UgYmVmb3JlXG4gICAqL1xuICBwcml2YXRlIGRldGVjdENvdW50cnkobnVtYmVyOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IG1hdGNoZXMgPSB0aGlzLmNvdW50cmllcygpLmZpbHRlcihjb3VudHJ5ID0+XG4gICAgICBudW1iZXIuc3RhcnRzV2l0aChgKyR7Y291bnRyeS5jYWxsaW5nX2NvZGV9YClcbiAgICAgIHx8IChjb3VudHJ5LnBob25lX2xlbmd0aFxuICAgICAgICAmJiBudW1iZXIuc3RhcnRzV2l0aChjb3VudHJ5LmNhbGxpbmdfY29kZSlcbiAgICAgICAgJiYgbnVtYmVyLnJlcGxhY2UoL1xcRC9nLCAnJykubGVuZ3RoID09PSBjb3VudHJ5LmNhbGxpbmdfY29kZS5sZW5ndGggKyBjb3VudHJ5LnBob25lX2xlbmd0aClcbiAgICApO1xuICAgIHJldHVybiBtYXRjaGVzLmZpbmQoY291bnRyeSA9PiBjb3VudHJ5Lmlzb19jb2RlID09PSAnVVMnKSA/PyBtYXRjaGVzWzBdO1xuICB9XG59XG4iLCI8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiIFtmb3JtR3JvdXBdPVwicGhvbmVHcm91cFwiPlxuICA8bWF0LWxhYmVsPnt7IGxhYmVsKCkgfX08L21hdC1sYWJlbD5cbiAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIm51bWJlclwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlcigpXCIgW3JlcXVpcmVkXT1cInJlcXVpcmVkKClcIiAoYmx1cik9XCJvblRvdWNoZWQoKVwiPlxuICA8bWF0LXNlbGVjdCBtYXRQcmVmaXggZm9ybUNvbnRyb2xOYW1lPVwiY291bnRyeV9jb2RlXCIgW3BhbmVsV2lkdGhdPVwibnVsbFwiIGNsYXNzPVwicGhvbmUtcHJlZml4LXNlbGVjdFwiPlxuICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBjb3VudHJ5IG9mIGNvdW50cmllcygpXCIgW3ZhbHVlXT1cImNvdW50cnkuaXNvX2NvZGVcIj57eyBjb3VudHJ5Lmlzb19jb2RlIH19ICt7eyBjb3VudHJ5LmNhbGxpbmdfY29kZSB9fTwvbWF0LW9wdGlvbj5cbiAgPC9tYXQtc2VsZWN0PlxuICA8bWF0LWVycm9yICpuZ0lmPVwicGhvbmVHcm91cC5nZXQoJ251bWJlcicpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPnt7IGxhYmVsKCkgfX0gaXMgcmVxdWlyZWQ8L21hdC1lcnJvcj5cbiAgPG1hdC1lcnJvciAqbmdJZj1cInBob25lR3JvdXAuZ2V0KCdudW1iZXInKT8uaGFzRXJyb3IoJ2ludmFsaWRQaG9uZScpXCI+XG4gICAgSW52YWxpZCB7eyBwaG9uZUdyb3VwLmdldCgnY291bnRyeV9jb2RlJyk/LnZhbHVlIH19IHBob25lIG51bWJlclxuICA8L21hdC1lcnJvcj5cbjwvbWF0LWZvcm0tZmllbGQ+XG4iXX0=
|
|
@@ -55,6 +55,28 @@ export class DateUtils {
|
|
|
55
55
|
];
|
|
56
56
|
return months[month - 1] ?? '';
|
|
57
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Parses a raw date string
|
|
60
|
+
*/
|
|
61
|
+
parseLocalDate(rawValue) {
|
|
62
|
+
const datePortion = rawValue.replace(/\d{1,2}:\d{2}(:\d{2})?\s*(AM|PM|am|pm)?/g, '').trim();
|
|
63
|
+
return new Date(`${datePortion} 00:00:00`);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Builds a timezone-naive "yyyy-MM-dd" string from a raw date string,
|
|
67
|
+
* ignoring any time-of-day it contains.
|
|
68
|
+
*/
|
|
69
|
+
toLocalDateString(rawValue) {
|
|
70
|
+
return this.getYYYYMMDDString(this.parseLocalDate(rawValue));
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Builds a timezone-naive "yyyy-MM-ddTHH:mm:ss" string
|
|
74
|
+
*/
|
|
75
|
+
toLocalDateTimeString(rawValue) {
|
|
76
|
+
const d = new Date(rawValue);
|
|
77
|
+
const pad = (value) => value < 10 ? `0${value}` : `${value}`;
|
|
78
|
+
return `${this.toLocalDateString(rawValue)}T${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
|
|
79
|
+
}
|
|
58
80
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DateUtils, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
59
81
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DateUtils, providedIn: 'root' }); }
|
|
60
82
|
}
|
|
@@ -64,4 +86,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
64
86
|
providedIn: 'root'
|
|
65
87
|
}]
|
|
66
88
|
}] });
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS11dGlscy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNvcmUvc3JjL2xpYi91dGlsaXR5L2RhdGUtdXRpbHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzQzs7Ozs7R0FLRztBQUlILE1BQU0sT0FBTyxTQUFTO0lBRWxCOztPQUVHO0lBQ0gsaUJBQWlCLENBQUMsU0FBZTtRQUM3QixJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM5RyxJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRXhGLE9BQU8sSUFBSSxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPLENBQUMsU0FBZTtRQUNuQixJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFNBQWU7UUFDakIsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyQyxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ0QsZ0ZBQWdGO0lBRWhGLFdBQVcsQ0FBQyxTQUFlO1FBQ3ZCLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQyxJQUFJLEtBQUssR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlHLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEYsSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFMUMsT0FBTyxJQUFJLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDeEQsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFhO1FBQ3RCLE1BQU0sTUFBTSxHQUFHO1lBQ1gsU0FBUztZQUNULFVBQVU7WUFDVixPQUFPO1lBQ1AsT0FBTztZQUNQLEtBQUs7WUFDTCxNQUFNO1lBQ04sTUFBTTtZQUNOLFFBQVE7WUFDUixXQUFXO1lBQ1gsU0FBUztZQUNULFVBQVU7WUFDVixVQUFVO1NBQ2IsQ0FBQztRQUVGLE9BQU8sTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYyxDQUFDLFFBQWdCO1FBQzNCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsMENBQTBDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUYsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLFdBQVcsV0FBVyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLFFBQWdCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxxQkFBcUIsQ0FBQyxRQUFnQjtRQUNsQyxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QixNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztRQUNyRSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDcEgsQ0FBQzsrR0FqRlEsU0FBUzttSEFBVCxTQUFTLGNBRk4sTUFBTTs7NEZBRVQsU0FBUztrQkFIckIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogU2VydmljZSB0aGF0IHByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBkYXRlc1xuICogXG4gKiBAYXV0aG9yIEpvc2h1YSBLaXNzb29uXG4gKiBAc2luY2UgMjAxNzA3MjZcbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEYXRlVXRpbHMge1xuXG4gICAgLyoqXG4gICAgICogVGFrZXMgaW4gYSBkYXRlIG9iamVjdCBhbmQgb3V0cHV0cyB0aGUgc3RyaW5nIHZhbHVlXG4gICAgICovXG4gICAgZ2V0WVlZWU1NRERTdHJpbmcoaW5wdXREYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAgICAgdmFyIHllYXIgPSBpbnB1dERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgdmFyIG1vbnRoID0gKGlucHV0RGF0ZS5nZXRNb250aCgpICsgMSkgPCAxMCA/IChcIjBcIiArIChpbnB1dERhdGUuZ2V0TW9udGgoKSArIDEpKSA6IChpbnB1dERhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICB2YXIgZGF0ZSA9IGlucHV0RGF0ZS5nZXREYXRlKCkgPCAxMCA/IChcIjBcIiArIGlucHV0RGF0ZS5nZXREYXRlKCkpIDogaW5wdXREYXRlLmdldERhdGUoKTtcblxuICAgICAgICByZXR1cm4geWVhciArIFwiLVwiICsgbW9udGggKyBcIi1cIiArIGRhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGFrZXMgaW4gYSBkYXRlIG9iamVjdCBhbmQgb3V0cHV0cyB0aGUgeWVhclxuICAgICAqL1xuICAgIGdldFlZWVkoaW5wdXREYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICAgICAgdmFyIHllYXIgPSBpbnB1dERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGFrZXMgaW4gYSBkYXRlIG9iamVjdCBhbmQgb3V0cHV0cyB0aGUgTW9udGhcbiAgICAgKi9cbiAgICBnZXRNTShpbnB1dERhdGU6IERhdGUpOiBudW1iZXIge1xuICAgICAgICB2YXIgbW9udGggPSBpbnB1dERhdGUuZ2V0TW9udGgoKSArIDE7XG4gICAgICAgIHJldHVybiBtb250aDtcbiAgICB9XG4gICAgLy8gICAgICAgICB2YXIgbiA9IHRoaXMucmZpZENhcmRVc2VNYW51YWxFbnRyeS5tYW51YWxfZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoKTtcblxuICAgIGdldERhdGVUaW1lKGlucHV0RGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIHZhciB5ZWFyID0gaW5wdXREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIHZhciBtb250aCA9IChpbnB1dERhdGUuZ2V0TW9udGgoKSArIDEpIDwgMTAgPyAoXCIwXCIgKyAoaW5wdXREYXRlLmdldE1vbnRoKCkgKyAxKSkgOiAoaW5wdXREYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgdmFyIGRhdGUgPSBpbnB1dERhdGUuZ2V0RGF0ZSgpIDwgMTAgPyAoXCIwXCIgKyBpbnB1dERhdGUuZ2V0RGF0ZSgpKSA6IGlucHV0RGF0ZS5nZXREYXRlKCk7XG4gICAgICAgIHZhciB0aW1lID0gaW5wdXREYXRlLnRvTG9jYWxlVGltZVN0cmluZygpO1xuXG4gICAgICAgIHJldHVybiB5ZWFyICsgXCItXCIgKyBtb250aCArIFwiLVwiICsgZGF0ZSArIFwiIFwiICsgdGltZTtcbiAgICB9XG5cbiAgICBnZXRNb250aE5hbWUobW9udGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IG1vbnRocyA9IFtcbiAgICAgICAgICAgICdKYW51YXJ5JyxcbiAgICAgICAgICAgICdGZWJydWFyeScsXG4gICAgICAgICAgICAnTWFyY2gnLFxuICAgICAgICAgICAgJ0FwcmlsJyxcbiAgICAgICAgICAgICdNYXknLFxuICAgICAgICAgICAgJ0p1bmUnLFxuICAgICAgICAgICAgJ0p1bHknLFxuICAgICAgICAgICAgJ0F1Z3VzdCcsXG4gICAgICAgICAgICAnU2VwdGVtYmVyJyxcbiAgICAgICAgICAgICdPY3RvYmVyJyxcbiAgICAgICAgICAgICdOb3ZlbWJlcicsXG4gICAgICAgICAgICAnRGVjZW1iZXInXG4gICAgICAgIF07XG5cbiAgICAgICAgcmV0dXJuIG1vbnRoc1ttb250aCAtIDFdID8/ICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIHJhdyBkYXRlIHN0cmluZyBcbiAgICAgKi9cbiAgICBwYXJzZUxvY2FsRGF0ZShyYXdWYWx1ZTogc3RyaW5nKTogRGF0ZSB7XG4gICAgICAgIGNvbnN0IGRhdGVQb3J0aW9uID0gcmF3VmFsdWUucmVwbGFjZSgvXFxkezEsMn06XFxkezJ9KDpcXGR7Mn0pP1xccyooQU18UE18YW18cG0pPy9nLCAnJykudHJpbSgpO1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoYCR7ZGF0ZVBvcnRpb259IDAwOjAwOjAwYCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIGEgdGltZXpvbmUtbmFpdmUgXCJ5eXl5LU1NLWRkXCIgc3RyaW5nIGZyb20gYSByYXcgZGF0ZSBzdHJpbmcsXG4gICAgICogaWdub3JpbmcgYW55IHRpbWUtb2YtZGF5IGl0IGNvbnRhaW5zLlxuICAgICAqL1xuICAgIHRvTG9jYWxEYXRlU3RyaW5nKHJhd1ZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRZWVlZTU1ERFN0cmluZyh0aGlzLnBhcnNlTG9jYWxEYXRlKHJhd1ZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIGEgdGltZXpvbmUtbmFpdmUgXCJ5eXl5LU1NLWRkVEhIOm1tOnNzXCIgc3RyaW5nIFxuICAgICAqL1xuICAgIHRvTG9jYWxEYXRlVGltZVN0cmluZyhyYXdWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKHJhd1ZhbHVlKTtcbiAgICAgICAgY29uc3QgcGFkID0gKHZhbHVlOiBudW1iZXIpID0+IHZhbHVlIDwgMTAgPyBgMCR7dmFsdWV9YCA6IGAke3ZhbHVlfWA7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnRvTG9jYWxEYXRlU3RyaW5nKHJhd1ZhbHVlKX1UJHtwYWQoZC5nZXRIb3VycygpKX06JHtwYWQoZC5nZXRNaW51dGVzKCkpfToke3BhZChkLmdldFNlY29uZHMoKSl9YDtcbiAgICB9XG5cbn0iXX0=
|