@c8y/ngx-components 1017.0.338 → 1017.0.345

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.
Files changed (28) hide show
  1. package/core/common/date.pipe.d.ts +2 -2
  2. package/core/common/stringify-object.pipe.d.ts +2 -1
  3. package/ecosystem/packages/deploy-application/deploy-application.component.d.ts +6 -5
  4. package/ecosystem/shared/ecosystem.constants.d.ts +2 -0
  5. package/ecosystem/shared/ecosystem.model.d.ts +3 -1
  6. package/ecosystem/shared/ecosystem.service.d.ts +11 -5
  7. package/esm2020/core/common/date.pipe.mjs +12 -7
  8. package/esm2020/core/common/stringify-object.pipe.mjs +11 -8
  9. package/esm2020/ecosystem/application-properties/application-properties.component.mjs +3 -3
  10. package/esm2020/ecosystem/applications/install-from-package/install-from-package.component.mjs +2 -2
  11. package/esm2020/ecosystem/packages/deploy-application/deploy-application.component.mjs +26 -81
  12. package/esm2020/ecosystem/shared/ecosystem.constants.mjs +5 -3
  13. package/esm2020/ecosystem/shared/ecosystem.model.mjs +3 -1
  14. package/esm2020/ecosystem/shared/ecosystem.service.mjs +121 -24
  15. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs +139 -27
  16. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  17. package/fesm2015/c8y-ngx-components-ecosystem.mjs +23 -77
  18. package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
  19. package/fesm2015/c8y-ngx-components.mjs +20 -13
  20. package/fesm2015/c8y-ngx-components.mjs.map +1 -1
  21. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs +126 -25
  22. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  23. package/fesm2020/c8y-ngx-components-ecosystem.mjs +23 -78
  24. package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
  25. package/fesm2020/c8y-ngx-components.mjs +20 -13
  26. package/fesm2020/c8y-ngx-components.mjs.map +1 -1
  27. package/locales/locales.pot +15 -3
  28. package/package.json +2 -2
@@ -22,8 +22,8 @@ export declare const ES_MAX_TIME_MILLISECONDS: number;
22
22
  */
23
23
  export declare class DatePipe extends NgDatePipe {
24
24
  private translateService;
25
- constructor(locale: string, translateService: TranslateService);
25
+ constructor(locale: string, translateService: TranslateService, defaultTimezone?: string | null);
26
26
  transform(value: any, format?: string, timezone?: string, locale?: string): any;
27
- static ɵfac: i0.ɵɵFactoryDeclaration<DatePipe, never>;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<DatePipe, [null, null, { optional: true; }]>;
28
28
  static ɵpipe: i0.ɵɵPipeDeclaration<DatePipe, "c8yDate", false>;
29
29
  }
@@ -3,9 +3,10 @@ import { DatePipe } from './date.pipe';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class StringifyObjectPipe implements PipeTransform {
5
5
  private c8yDatePipe;
6
+ private readonly isoDateTimeRegex;
6
7
  constructor(c8yDatePipe: DatePipe);
7
8
  transform(value: any): string;
8
- checkDateValidity(value: any): boolean;
9
+ private isDate;
9
10
  static ɵfac: i0.ɵɵFactoryDeclaration<StringifyObjectPipe, never>;
10
11
  static ɵpipe: i0.ɵɵPipeDeclaration<StringifyObjectPipe, "stringifyObject", false>;
11
12
  }
@@ -1,22 +1,23 @@
1
1
  import { OnInit } from '@angular/core';
2
- import { ApplicationService, IApplication, IApplicationVersion, InventoryService } from '@c8y/client';
2
+ import { Router } from '@angular/router';
3
+ import { IApplication, IApplicationVersion } from '@c8y/client';
3
4
  import { GainsightService, WizardComponent } from '@c8y/ngx-components';
4
5
  import { ApplicationPropertiesFormComponent, EcosystemService } from '@c8y/ngx-components/ecosystem/shared';
5
6
  import { TranslateService } from '@ngx-translate/core';
6
7
  import * as i0 from "@angular/core";
7
8
  export declare class DeployApplicationComponent implements OnInit {
8
9
  private ecosystemService;
9
- private applicationService;
10
10
  private wizardComponent;
11
11
  private translate;
12
- private inventoryService;
13
12
  private gainsightService;
13
+ private router;
14
14
  CURRENT_LOCATION: string;
15
15
  inProgress: boolean;
16
16
  package: IApplication;
17
17
  isDeployed: boolean;
18
18
  deployedWithSuccess: boolean;
19
19
  newAppConfig: IApplication;
20
+ deployedApp: IApplication;
20
21
  model: {
21
22
  selected: any;
22
23
  binary: {
@@ -30,12 +31,12 @@ export declare class DeployApplicationComponent implements OnInit {
30
31
  readonly doneLabel: any;
31
32
  readonly cancelLabel: any;
32
33
  headerText: string;
33
- constructor(ecosystemService: EcosystemService, applicationService: ApplicationService, wizardComponent: WizardComponent, translate: TranslateService, inventoryService: InventoryService, gainsightService: GainsightService);
34
+ constructor(ecosystemService: EcosystemService, wizardComponent: WizardComponent, translate: TranslateService, gainsightService: GainsightService, router: Router);
34
35
  ngOnInit(): Promise<void>;
35
36
  deployApp(): Promise<void>;
36
- fallbackToCloneLatest(config: any): Promise<void>;
37
37
  cancel(): void;
38
38
  onAppVersionSelect(appVersion: IApplicationVersion): void;
39
+ open(): void;
39
40
  private markAsDeployed;
40
41
  private getHeaderText;
41
42
  static ɵfac: i0.ɵɵFactoryDeclaration<DeployApplicationComponent, never>;
@@ -1,5 +1,6 @@
1
1
  import { PropertiesListItem } from '@c8y/ngx-components';
2
2
  export declare const ERROR_MESSAGES: {
3
+ ALREADY_EXIST: any;
3
4
  TYPE_VALIDATION: any;
4
5
  ALREADY_SUBSCRIBED: any;
5
6
  NO_MANIFEST_FILE: any;
@@ -9,6 +10,7 @@ export declare const ERROR_MESSAGES: {
9
10
  MICROSERVICE_NAME_TOO_LONG: any;
10
11
  APPLICATION_CREATION_FAILED: any;
11
12
  KEY_OR_CONTEXT_PATH_MISMATCH: any;
13
+ VERSION_NOT_FOUND: any;
12
14
  };
13
15
  export declare const APP_STATE: {
14
16
  SUBSCRIBED: {
@@ -10,13 +10,15 @@ export declare enum Wizards {
10
10
  export declare enum ERROR_TYPE {
11
11
  TYPE_VALIDATION = "TYPE_VALIDATION",
12
12
  ALREADY_SUBSCRIBED = "ALREADY_SUBSCRIBED",
13
+ ALREADY_EXIST = "ALREADY_EXIST",
13
14
  INTERNAL_ERROR = "INTERNAL_ERROR",
14
15
  NO_MANIFEST_FILE = "NO_MANIFEST_FILE",
15
16
  INVALID_PACKAGE = "INVALID_PACKAGE",
16
17
  INVALID_APPLICATION = "INVALID_APPLICATION",
17
18
  MICROSERVICE_NAME_TOO_LONG = "MICROSERVICE_NAME_TOO_LONG",
18
19
  APPLICATION_CREATION_FAILED = "APPLICATION_CREATION_FAILED",
19
- KEY_OR_CONTEXT_PATH_MISMATCH = "KEY_OR_CONTEXT_PATH_MISMATCH"
20
+ KEY_OR_CONTEXT_PATH_MISMATCH = "KEY_OR_CONTEXT_PATH_MISMATCH",
21
+ VERSION_NOT_FOUND = "VERSION_NOT_FOUND"
20
22
  }
21
23
  export declare const PRODUCT_EXPERIENCE: {
22
24
  APPLICATIONS: {
@@ -49,6 +49,8 @@ export declare class EcosystemService {
49
49
  getWebApplications(customFilter?: any): Promise<IApplication[]>;
50
50
  getFeatureApplications(customFilter?: any): Promise<IApplication[]>;
51
51
  getPackageApplications(customFilter?: any): Promise<IApplication[]>;
52
+ getHostedAndPackageApplications(customFilter?: any): Promise<IApplication[]>;
53
+ getApplicationsFiltered(customFilter?: any, filterCallback?: (app: IApplication) => boolean): Promise<IApplication[]>;
52
54
  isMicroserviceHostingAllowed(): Promise<boolean>;
53
55
  canOpenAppInBrowser(app: IApplication): boolean;
54
56
  openApp(app: any): void;
@@ -72,10 +74,6 @@ export declare class EcosystemService {
72
74
  }>;
73
75
  getHumanizedAppName(app: IApplication): Promise<string>;
74
76
  createConfig(app: IApplication, formGroupValue: FormGroup): Partial<IApplication>;
75
- updateAppManifest(application: IApplication, sourcePackage: IApplication): Promise<{
76
- res: IFetchResponse;
77
- data: any;
78
- }>;
79
77
  listArchives(appId: string | number | IApplication): Promise<IApplicationBinary[]>;
80
78
  deleteArchive(archive: IApplicationBinary, app: IApplication): Promise<void>;
81
79
  getArchiveManagedObject(binaryId: string): Promise<IManagedObject>;
@@ -92,6 +90,9 @@ export declare class EcosystemService {
92
90
  createAppForArchive(archive: any, isPackageTypeArchive?: boolean): Promise<IApplication>;
93
91
  reactivateArchive(app: IApplication): Promise<void>;
94
92
  removeOldestArchive(app: IApplication, archives: IApplicationBinary[]): Promise<void>;
93
+ deployApp(selectedPackage: IApplication, formGroupValue: any, model: any): Promise<IApplication>;
94
+ fallbackToClone(application: IApplication, selectedPackage: IApplication, requestedVersion?: string): Promise<boolean>;
95
+ uploadBinaryFromOtherPackage(selectedPackage: IApplication, applicationToUploadBinaryTo: IApplication, binaryId: string, requestedVersion?: string, useBinariesFrom?: IApplication): Promise<void>;
95
96
  getAppState(app: IApplication): ApplicationState;
96
97
  isPackageBlueprint(app: IApplication): boolean;
97
98
  isPluginsPackage(app: IApplication): boolean;
@@ -112,6 +113,12 @@ export declare class EcosystemService {
112
113
  */
113
114
  alertError(error: Error | EcosystemError): void;
114
115
  validatePackageKeyAndContextPath(manifest: IManifest, app: IApplication): Promise<void>;
116
+ filterContainString(name: string, filterTerm: string): boolean;
117
+ updateAppManifest(application: IApplication, selectedPackage: IApplication, requestedVersion?: string): Promise<{
118
+ res: IFetchResponse;
119
+ data: any;
120
+ }>;
121
+ private checkIfAppNameKeyPathExists;
115
122
  private getAppKey;
116
123
  private getContextPath;
117
124
  private removeForbiddenCharacters;
@@ -119,7 +126,6 @@ export declare class EcosystemService {
119
126
  private getCumulocityJson$;
120
127
  private getAppType;
121
128
  private getBaseNameFromArchiveOrAppModel;
122
- private checkIfAppNameKeyPathExists;
123
129
  private removeAppProperties;
124
130
  private getUploadOverrides;
125
131
  private removeVersionFromName;
@@ -1,5 +1,5 @@
1
- import { DatePipe as NgDatePipe } from '@angular/common';
2
- import { Inject, LOCALE_ID, Pipe } from '@angular/core';
1
+ import { DatePipe as NgDatePipe, DATE_PIPE_DEFAULT_TIMEZONE } from '@angular/common';
2
+ import { Inject, LOCALE_ID, Optional, Pipe } from '@angular/core';
3
3
  import { TranslateService } from '@ngx-translate/core';
4
4
  import { gettext } from '../i18n/gettext';
5
5
  import * as i0 from "@angular/core";
@@ -24,8 +24,8 @@ export const ES_MAX_TIME_MILLISECONDS = 8640000000000000;
24
24
  * <span>{{ 8640000000000000 + 1 | c8yDate }}</span> <!-- e.g. after 13 Sep 275760, 03:00:00 --> ```
25
25
  */
26
26
  export class DatePipe extends NgDatePipe {
27
- constructor(locale, translateService) {
28
- super(locale);
27
+ constructor(locale, translateService, defaultTimezone) {
28
+ super(locale, defaultTimezone);
29
29
  this.translateService = translateService;
30
30
  }
31
31
  transform(value, format = 'medium', timezone, locale) {
@@ -48,7 +48,7 @@ export class DatePipe extends NgDatePipe {
48
48
  return result;
49
49
  }
50
50
  }
51
- DatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DatePipe, deps: [{ token: LOCALE_ID }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe });
51
+ DatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DatePipe, deps: [{ token: LOCALE_ID }, { token: i1.TranslateService }, { token: DATE_PIPE_DEFAULT_TIMEZONE, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });
52
52
  DatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.0.6", ngImport: i0, type: DatePipe, name: "c8yDate" });
53
53
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DatePipe, decorators: [{
54
54
  type: Pipe,
@@ -56,5 +56,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
56
56
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
57
57
  type: Inject,
58
58
  args: [LOCALE_ID]
59
- }] }, { type: i1.TranslateService }]; } });
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9jb21tb24vZGF0ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLElBQUksVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBRTFDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFXLGdCQUFnQixDQUFDO0FBRWpFOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxNQUFNLE9BQU8sUUFBUyxTQUFRLFVBQVU7SUFDdEMsWUFBK0IsTUFBYyxFQUFVLGdCQUFrQztRQUN2RixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFEdUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtJQUV6RixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVUsRUFBRSxTQUFpQixRQUFRLEVBQUUsUUFBaUIsRUFBRSxNQUFlO1FBQ2pGLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLFdBQVcsR0FBWSxLQUFLLENBQUM7UUFDakMsSUFBSSxXQUFXLEdBQVksS0FBSyxDQUFDO1FBRWpDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzlDLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1lBQzFELGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFFbkUsV0FBVyxHQUFHLEtBQUssR0FBRyxDQUFDLHdCQUF3QixDQUFDO1lBQ2hELFdBQVcsR0FBRyxLQUFLLEdBQUcsd0JBQXdCLENBQUM7U0FDaEQ7UUFDRCxJQUFJLE1BQU0sR0FBVyxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTlFLElBQUksV0FBVyxFQUFFO1lBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUN0RjthQUFNLElBQUksV0FBVyxFQUFFO1lBQ3RCLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDckY7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztxR0ExQlUsUUFBUSxrQkFDQyxTQUFTO21HQURsQixRQUFROzJGQUFSLFFBQVE7a0JBRHBCLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFOzswQkFFVixNQUFNOzJCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSBhcyBOZ0RhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdCwgTE9DQUxFX0lELCBQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnLi4vaTE4bi9nZXR0ZXh0JztcblxuLyoqXG4gKiBUaGUgcmFuZ2Ugb2YgdGltZXMgc3VwcG9ydGVkIGJ5IEVDTUFTY3JpcHQgRGF0ZSBvYmplY3RzIGluIG1pbGxpc2Vjb25kcy5cbiAqIEBzZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTE1LjkuMS4xXG4gKi9cbmV4cG9ydCBjb25zdCBFU19NQVhfVElNRV9NSUxMSVNFQ09ORFM6IG51bWJlciA9IDg2NDAwMDAwMDAwMDAwMDA7XG5cbi8qKlxuICogRm9ybWF0cyBhIGRhdGUgdmFsdWUgYWNjb3JkaW5nIHRvIGxvY2FsZSBydWxlcy4gSWYgbm8gb3RoZXIgZm9ybWF0IHNwZWNpZmllZCBpdCBkZWZhdWx0cyB0byBgbWVkaXVtYFxuICogdXNlZCBhcyBzdGFuZGFyZCBkYXRlL3RpbWUgZm9ybWF0LlxuICpcbiAqIEV4dGVuZHMgQW5ndWxhcidzIERhdGVQaXBlIGluIGEgd2F5IHNvIHRoYXQgZGF0ZSB2YWx1ZXMgZXhjZWVkaW5nIHRoZSByYW5nZSBzdXBwb3J0ZWQgYnkgRUNNQVNjcmlwdFxuICogYXJlIGRpc3BsYXllZCBhcyBlYXJsaWVzdC9sYXRlc3Qgc3VwcG9ydGVkIHBvaW50IGluIHRpbWUgcHJpbnRlZCBpbiB0aGUgZGVzaXJlZCBmb3JtYXQgcHJlLSBvciBwb3N0Zml4ZWRcbiAqIGJ5IHRoZSB3b3JkIGBiZWZvcmVgIG9yIGBhZnRlcmAsIHJlc3BlY3RpdmVseS5cbiAqIEluIGFsbCBvdGhlciBjYXNlcyB0aGUgcGlwZSBiZWhhdmVzIGFzIHRoZSBzdGFuZGFyZCBbRGF0ZVBpcGVde0BsaW5rIGh0dHBzOi8vYW5ndWxhci5pby9hcGkvY29tbW9uL0RhdGVQaXBlfS5cbiAqXG4gKiBgYGBodG1sXG4gKiA8c3BhbiBjbGFzcz1cImhpZ2hsaWdodFwiPnt7IGRlYWRsaW5lIHwgYzh5RGF0ZSB9fTwvc3Bhbj4gPCEtLSBlLmcuIDcgTWF5IDIwMjAsIDE3OjQ1OjE5IChlbi1HQikgb3IgMDcuMDUuMjAyMCwgMTc6NDU6MTkgKGRlKSAtLT5cbiAqIDxzcGFuPnt7IGxhc3RVcGRhdGVkIHwgYzh5RGF0ZTogJ2EgaDpNTTpzcycgfX08L3NwYW4+IDwhLS0gZS5nLiBwbSA1OjQ1OjE5IC0tPlxuICogPHNwYW4+e3sgODY0MDAwMDAwMDAwMDAwMCArIDEgfCBjOHlEYXRlIH19PC9zcGFuPiA8IS0tIGUuZy4gYWZ0ZXIgMTMgU2VwIDI3NTc2MCwgMDM6MDA6MDAgLS0+IGBgYFxuICovXG5AUGlwZSh7IG5hbWU6ICdjOHlEYXRlJyB9KVxuZXhwb3J0IGNsYXNzIERhdGVQaXBlIGV4dGVuZHMgTmdEYXRlUGlwZSB7XG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTE9DQUxFX0lEKSBsb2NhbGU6IHN0cmluZywgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XG4gICAgc3VwZXIobG9jYWxlKTtcbiAgfVxuXG4gIHRyYW5zZm9ybSh2YWx1ZTogYW55LCBmb3JtYXQ6IHN0cmluZyA9ICdtZWRpdW0nLCB0aW1lem9uZT86IHN0cmluZywgbG9jYWxlPzogc3RyaW5nKTogYW55IHtcbiAgICBsZXQgdmFsdWVJbkJvdW5kcyA9IHZhbHVlO1xuICAgIGxldCB2YWx1ZUJlZm9yZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGxldCB2YWx1ZUJleW9uZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdmFsdWVJbkJvdW5kcyA9IE1hdGgubWluKHZhbHVlLCBFU19NQVhfVElNRV9NSUxMSVNFQ09ORFMpO1xuICAgICAgdmFsdWVJbkJvdW5kcyA9IE1hdGgubWF4KHZhbHVlSW5Cb3VuZHMsIC1FU19NQVhfVElNRV9NSUxMSVNFQ09ORFMpO1xuXG4gICAgICB2YWx1ZUJlZm9yZSA9IHZhbHVlIDwgLUVTX01BWF9USU1FX01JTExJU0VDT05EUztcbiAgICAgIHZhbHVlQmV5b25kID0gdmFsdWUgPiBFU19NQVhfVElNRV9NSUxMSVNFQ09ORFM7XG4gICAgfVxuICAgIGxldCByZXN1bHQ6IHN0cmluZyA9IHN1cGVyLnRyYW5zZm9ybSh2YWx1ZUluQm91bmRzLCBmb3JtYXQsIHRpbWV6b25lLCBsb2NhbGUpO1xuXG4gICAgaWYgKHZhbHVlQmVmb3JlKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KGBiZWZvcmUge3tkYXRlfX1gKSwgeyBkYXRlOiByZXN1bHQgfSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZUJleW9uZCkge1xuICAgICAgcmVzdWx0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dChgYWZ0ZXIge3tkYXRlfX1gKSwgeyBkYXRlOiByZXN1bHQgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19
59
+ }] }, { type: i1.TranslateService }, { type: undefined, decorators: [{
60
+ type: Inject,
61
+ args: [DATE_PIPE_DEFAULT_TIMEZONE]
62
+ }, {
63
+ type: Optional
64
+ }] }]; } });
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9jb21tb24vZGF0ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLElBQUksVUFBVSxFQUFFLDBCQUEwQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckYsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUUxQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBVyxnQkFBZ0IsQ0FBQztBQUVqRTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsTUFBTSxPQUFPLFFBQVMsU0FBUSxVQUFVO0lBQ3RDLFlBQ3FCLE1BQWMsRUFDekIsZ0JBQWtDLEVBQ00sZUFBK0I7UUFFL0UsS0FBSyxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUh2QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO0lBSTVDLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBVSxFQUFFLFNBQWlCLFFBQVEsRUFBRSxRQUFpQixFQUFFLE1BQWU7UUFDakYsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksV0FBVyxHQUFZLEtBQUssQ0FBQztRQUNqQyxJQUFJLFdBQVcsR0FBWSxLQUFLLENBQUM7UUFFakMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUMsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLHdCQUF3QixDQUFDLENBQUM7WUFDMUQsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUVuRSxXQUFXLEdBQUcsS0FBSyxHQUFHLENBQUMsd0JBQXdCLENBQUM7WUFDaEQsV0FBVyxHQUFHLEtBQUssR0FBRyx3QkFBd0IsQ0FBQztTQUNoRDtRQUNELElBQUksTUFBTSxHQUFXLEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFOUUsSUFBSSxXQUFXLEVBQUU7WUFDZixNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQ3RGO2FBQU0sSUFBSSxXQUFXLEVBQUU7WUFDdEIsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUNyRjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O3FHQTlCVSxRQUFRLGtCQUVULFNBQVMsNkNBRVQsMEJBQTBCO21HQUp6QixRQUFROzJGQUFSLFFBQVE7a0JBRHBCLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFOzswQkFHcEIsTUFBTTsyQkFBQyxTQUFTOzswQkFFaEIsTUFBTTsyQkFBQywwQkFBMEI7OzBCQUFHLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSBhcyBOZ0RhdGVQaXBlLCBEQVRFX1BJUEVfREVGQVVMVF9USU1FWk9ORSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3QsIExPQ0FMRV9JRCwgT3B0aW9uYWwsIFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICcuLi9pMThuL2dldHRleHQnO1xuXG4vKipcbiAqIFRoZSByYW5nZSBvZiB0aW1lcyBzdXBwb3J0ZWQgYnkgRUNNQVNjcmlwdCBEYXRlIG9iamVjdHMgaW4gbWlsbGlzZWNvbmRzLlxuICogQHNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtMTUuOS4xLjFcbiAqL1xuZXhwb3J0IGNvbnN0IEVTX01BWF9USU1FX01JTExJU0VDT05EUzogbnVtYmVyID0gODY0MDAwMDAwMDAwMDAwMDtcblxuLyoqXG4gKiBGb3JtYXRzIGEgZGF0ZSB2YWx1ZSBhY2NvcmRpbmcgdG8gbG9jYWxlIHJ1bGVzLiBJZiBubyBvdGhlciBmb3JtYXQgc3BlY2lmaWVkIGl0IGRlZmF1bHRzIHRvIGBtZWRpdW1gXG4gKiB1c2VkIGFzIHN0YW5kYXJkIGRhdGUvdGltZSBmb3JtYXQuXG4gKlxuICogRXh0ZW5kcyBBbmd1bGFyJ3MgRGF0ZVBpcGUgaW4gYSB3YXkgc28gdGhhdCBkYXRlIHZhbHVlcyBleGNlZWRpbmcgdGhlIHJhbmdlIHN1cHBvcnRlZCBieSBFQ01BU2NyaXB0XG4gKiBhcmUgZGlzcGxheWVkIGFzIGVhcmxpZXN0L2xhdGVzdCBzdXBwb3J0ZWQgcG9pbnQgaW4gdGltZSBwcmludGVkIGluIHRoZSBkZXNpcmVkIGZvcm1hdCBwcmUtIG9yIHBvc3RmaXhlZFxuICogYnkgdGhlIHdvcmQgYGJlZm9yZWAgb3IgYGFmdGVyYCwgcmVzcGVjdGl2ZWx5LlxuICogSW4gYWxsIG90aGVyIGNhc2VzIHRoZSBwaXBlIGJlaGF2ZXMgYXMgdGhlIHN0YW5kYXJkIFtEYXRlUGlwZV17QGxpbmsgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9jb21tb24vRGF0ZVBpcGV9LlxuICpcbiAqIGBgYGh0bWxcbiAqIDxzcGFuIGNsYXNzPVwiaGlnaGxpZ2h0XCI+e3sgZGVhZGxpbmUgfCBjOHlEYXRlIH19PC9zcGFuPiA8IS0tIGUuZy4gNyBNYXkgMjAyMCwgMTc6NDU6MTkgKGVuLUdCKSBvciAwNy4wNS4yMDIwLCAxNzo0NToxOSAoZGUpIC0tPlxuICogPHNwYW4+e3sgbGFzdFVwZGF0ZWQgfCBjOHlEYXRlOiAnYSBoOk1NOnNzJyB9fTwvc3Bhbj4gPCEtLSBlLmcuIHBtIDU6NDU6MTkgLS0+XG4gKiA8c3Bhbj57eyA4NjQwMDAwMDAwMDAwMDAwICsgMSB8IGM4eURhdGUgfX08L3NwYW4+IDwhLS0gZS5nLiBhZnRlciAxMyBTZXAgMjc1NzYwLCAwMzowMDowMCAtLT4gYGBgXG4gKi9cbkBQaXBlKHsgbmFtZTogJ2M4eURhdGUnIH0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpcGUgZXh0ZW5kcyBOZ0RhdGVQaXBlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZTogc3RyaW5nLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBASW5qZWN0KERBVEVfUElQRV9ERUZBVUxUX1RJTUVaT05FKSBAT3B0aW9uYWwoKSBkZWZhdWx0VGltZXpvbmU/OiBzdHJpbmcgfCBudWxsXG4gICkge1xuICAgIHN1cGVyKGxvY2FsZSwgZGVmYXVsdFRpbWV6b25lKTtcbiAgfVxuXG4gIHRyYW5zZm9ybSh2YWx1ZTogYW55LCBmb3JtYXQ6IHN0cmluZyA9ICdtZWRpdW0nLCB0aW1lem9uZT86IHN0cmluZywgbG9jYWxlPzogc3RyaW5nKTogYW55IHtcbiAgICBsZXQgdmFsdWVJbkJvdW5kcyA9IHZhbHVlO1xuICAgIGxldCB2YWx1ZUJlZm9yZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGxldCB2YWx1ZUJleW9uZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdmFsdWVJbkJvdW5kcyA9IE1hdGgubWluKHZhbHVlLCBFU19NQVhfVElNRV9NSUxMSVNFQ09ORFMpO1xuICAgICAgdmFsdWVJbkJvdW5kcyA9IE1hdGgubWF4KHZhbHVlSW5Cb3VuZHMsIC1FU19NQVhfVElNRV9NSUxMSVNFQ09ORFMpO1xuXG4gICAgICB2YWx1ZUJlZm9yZSA9IHZhbHVlIDwgLUVTX01BWF9USU1FX01JTExJU0VDT05EUztcbiAgICAgIHZhbHVlQmV5b25kID0gdmFsdWUgPiBFU19NQVhfVElNRV9NSUxMSVNFQ09ORFM7XG4gICAgfVxuICAgIGxldCByZXN1bHQ6IHN0cmluZyA9IHN1cGVyLnRyYW5zZm9ybSh2YWx1ZUluQm91bmRzLCBmb3JtYXQsIHRpbWV6b25lLCBsb2NhbGUpO1xuXG4gICAgaWYgKHZhbHVlQmVmb3JlKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KGBiZWZvcmUge3tkYXRlfX1gKSwgeyBkYXRlOiByZXN1bHQgfSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZUJleW9uZCkge1xuICAgICAgcmVzdWx0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dChgYWZ0ZXIge3tkYXRlfX1gKSwgeyBkYXRlOiByZXN1bHQgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19
@@ -1,30 +1,33 @@
1
1
  import { Pipe } from '@angular/core';
2
+ import { isDate as _isDate } from 'lodash-es';
2
3
  import { DatePipe } from './date.pipe';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "./date.pipe";
5
6
  export class StringifyObjectPipe {
6
7
  constructor(c8yDatePipe) {
7
8
  this.c8yDatePipe = c8yDatePipe;
9
+ this.isoDateTimeRegex = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)(([+-](\d{2}):(\d{2})|Z)?)$/;
8
10
  }
9
11
  transform(value) {
10
12
  if (!value) {
11
13
  return '';
12
14
  }
13
- if (typeof value === 'object') {
15
+ if (typeof value === 'object' && !_isDate(value)) {
14
16
  return JSON.stringify(value);
15
17
  }
16
- if (this.checkDateValidity(value)) {
18
+ if (this.isDate(value)) {
17
19
  return this.c8yDatePipe.transform(value);
18
20
  }
19
21
  return value;
20
22
  }
21
- checkDateValidity(value) {
23
+ isDate(value) {
22
24
  if (!value)
23
25
  return false;
24
- const isNumericOrFloating = /^-?\d+(\.\d+)?$/.test(value);
25
- const parsedDate = new Date(value);
26
- const isValidDate = !isNaN(Number(parsedDate)) && Object.prototype.toString.call(parsedDate) === '[object Date]';
27
- return isValidDate && !isNumericOrFloating;
26
+ if (_isDate(value))
27
+ return !isNaN(value);
28
+ if (typeof value === 'string')
29
+ return this.isoDateTimeRegex.test(value);
30
+ return false;
28
31
  }
29
32
  }
30
33
  StringifyObjectPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: StringifyObjectPipe, deps: [{ token: i1.DatePipe }], target: i0.ɵɵFactoryTarget.Pipe });
@@ -33,4 +36,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
33
36
  type: Pipe,
34
37
  args: [{ name: 'stringifyObject' }]
35
38
  }], ctorParameters: function () { return [{ type: i1.DatePipe }]; } });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5naWZ5LW9iamVjdC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9jb21tb24vc3RyaW5naWZ5LW9iamVjdC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7OztBQUd2QyxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLFlBQW9CLFdBQXFCO1FBQXJCLGdCQUFXLEdBQVgsV0FBVyxDQUFVO0lBQUcsQ0FBQztJQUM3QyxTQUFTLENBQUMsS0FBVTtRQUNsQixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzdCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5QjtRQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFLO1FBQ3JCLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDekIsTUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsTUFBTSxXQUFXLEdBQ2YsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLGVBQWUsQ0FBQztRQUUvRixPQUFPLFdBQVcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQzdDLENBQUM7O2dIQXZCVSxtQkFBbUI7OEdBQW5CLG1CQUFtQjsyRkFBbkIsbUJBQW1CO2tCQUQvQixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICcuL2RhdGUucGlwZSc7XG5cbkBQaXBlKHsgbmFtZTogJ3N0cmluZ2lmeU9iamVjdCcgfSlcbmV4cG9ydCBjbGFzcyBTdHJpbmdpZnlPYmplY3RQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYzh5RGF0ZVBpcGU6IERhdGVQaXBlKSB7fVxuICB0cmFuc2Zvcm0odmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2hlY2tEYXRlVmFsaWRpdHkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jOHlEYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBjaGVja0RhdGVWYWxpZGl0eSh2YWx1ZSk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBpc051bWVyaWNPckZsb2F0aW5nID0gL14tP1xcZCsoXFwuXFxkKyk/JC8udGVzdCh2YWx1ZSk7XG4gICAgY29uc3QgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICBjb25zdCBpc1ZhbGlkRGF0ZSA9XG4gICAgICAhaXNOYU4oTnVtYmVyKHBhcnNlZERhdGUpKSAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocGFyc2VkRGF0ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcblxuICAgIHJldHVybiBpc1ZhbGlkRGF0ZSAmJiAhaXNOdW1lcmljT3JGbG9hdGluZztcbiAgfVxufVxuIl19
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5naWZ5LW9iamVjdC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9jb21tb24vc3RyaW5naWZ5LW9iamVjdC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLElBQUksT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7OztBQUd2QyxNQUFNLE9BQU8sbUJBQW1CO0lBRzlCLFlBQW9CLFdBQXFCO1FBQXJCLGdCQUFXLEdBQVgsV0FBVyxDQUFVO1FBRnhCLHFCQUFnQixHQUMvQix1RkFBdUYsQ0FBQztJQUM5QyxDQUFDO0lBQzdDLFNBQVMsQ0FBQyxLQUFVO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDaEQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlCO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxNQUFNLENBQUMsS0FBSztRQUNsQixJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3pCLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1lBQUUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7Z0hBdkJVLG1CQUFtQjs4R0FBbkIsbUJBQW1COzJGQUFuQixtQkFBbUI7a0JBRC9CLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc0RhdGUgYXMgX2lzRGF0ZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJy4vZGF0ZS5waXBlJztcblxuQFBpcGUoeyBuYW1lOiAnc3RyaW5naWZ5T2JqZWN0JyB9KVxuZXhwb3J0IGNsYXNzIFN0cmluZ2lmeU9iamVjdFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBpc29EYXRlVGltZVJlZ2V4ID1cbiAgICAvXihcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pVChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0oPzpcXC5cXGQqKT8pKChbKy1dKFxcZHsyfSk6KFxcZHsyfSl8Wik/KSQvO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGM4eURhdGVQaXBlOiBEYXRlUGlwZSkge31cbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIV9pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jOHlEYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGlzRGF0ZSh2YWx1ZSk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoX2lzRGF0ZSh2YWx1ZSkpIHJldHVybiAhaXNOYU4odmFsdWUpO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdGhpcy5pc29EYXRlVGltZVJlZ2V4LnRlc3QodmFsdWUpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=