@c8y/ngx-components 1018.0.147 → 1018.0.151

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 (30) 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/application-properties/update-application-modal/update-application-modal.component.d.ts +0 -2
  4. package/ecosystem/packages/deploy-application/deploy-application.component.d.ts +7 -6
  5. package/ecosystem/shared/ecosystem.constants.d.ts +3 -1
  6. package/ecosystem/shared/ecosystem.model.d.ts +3 -1
  7. package/ecosystem/shared/ecosystem.service.d.ts +11 -5
  8. package/esm2020/core/common/date.pipe.mjs +12 -7
  9. package/esm2020/core/common/stringify-object.pipe.mjs +11 -8
  10. package/esm2020/ecosystem/application-properties/application-properties.component.mjs +6 -4
  11. package/esm2020/ecosystem/application-properties/update-application-modal/update-application-modal.component.mjs +11 -22
  12. package/esm2020/ecosystem/applications/install-from-package/install-from-package.component.mjs +2 -2
  13. package/esm2020/ecosystem/packages/deploy-application/deploy-application.component.mjs +28 -85
  14. package/esm2020/ecosystem/shared/ecosystem.constants.mjs +5 -3
  15. package/esm2020/ecosystem/shared/ecosystem.model.mjs +3 -1
  16. package/esm2020/ecosystem/shared/ecosystem.service.mjs +121 -24
  17. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs +139 -27
  18. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  19. package/fesm2015/c8y-ngx-components-ecosystem.mjs +110 -179
  20. package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
  21. package/fesm2015/c8y-ngx-components.mjs +20 -13
  22. package/fesm2015/c8y-ngx-components.mjs.map +1 -1
  23. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs +126 -25
  24. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  25. package/fesm2020/c8y-ngx-components-ecosystem.mjs +110 -176
  26. package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
  27. package/fesm2020/c8y-ngx-components.mjs +20 -13
  28. package/fesm2020/c8y-ngx-components.mjs.map +1 -1
  29. package/locales/locales.pot +15 -3
  30. package/package.json +1 -1
@@ -22,8 +22,8 @@ export declare const ES_MAX_TIME_MILLISECONDS = 8640000000000000;
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
  }
@@ -20,8 +20,6 @@ export declare class UpdateApplicationModalComponent implements OnInit {
20
20
  ngOnInit(): void;
21
21
  done(): void;
22
22
  updateApplication(): Promise<void>;
23
- private uploadNewBinary;
24
- private fallBackToCloneUpdate;
25
23
  static ɵfac: i0.ɵɵFactoryDeclaration<UpdateApplicationModalComponent, never>;
26
24
  static ɵcmp: i0.ɵɵComponentDeclaration<UpdateApplicationModalComponent, "c8y-update-application-modal", never, {}, {}, never, never, false>;
27
25
  }
@@ -1,23 +1,24 @@
1
1
  import { OnInit } from '@angular/core';
2
- import { ApplicationService, IApplication, IApplicationVersion, InventoryService } from '@c8y/client';
3
- import { PluginsService, WizardComponent, GainsightService } from '@c8y/ngx-components';
2
+ import { Router } from '@angular/router';
3
+ import { IApplication, IApplicationVersion } from '@c8y/client';
4
+ import { GainsightService, PluginsService, 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 pluginService;
14
13
  private gainsightService;
14
+ private router;
15
15
  CURRENT_LOCATION: string;
16
16
  inProgress: boolean;
17
17
  package: IApplication;
18
18
  isDeployed: boolean;
19
19
  deployedWithSuccess: boolean;
20
20
  newAppConfig: IApplication;
21
+ deployedApp: IApplication;
21
22
  applicationHref: string;
22
23
  model: {
23
24
  selected: any;
@@ -32,12 +33,12 @@ export declare class DeployApplicationComponent implements OnInit {
32
33
  readonly doneLabel: "Done";
33
34
  readonly cancelLabel: "Cancel";
34
35
  headerText: string;
35
- constructor(ecosystemService: EcosystemService, applicationService: ApplicationService, wizardComponent: WizardComponent, translate: TranslateService, inventoryService: InventoryService, pluginService: PluginsService, gainsightService: GainsightService);
36
+ constructor(ecosystemService: EcosystemService, wizardComponent: WizardComponent, translate: TranslateService, pluginService: PluginsService, gainsightService: GainsightService, router: Router);
36
37
  ngOnInit(): Promise<void>;
37
38
  deployApp(): Promise<void>;
38
- fallbackToCloneLatest(config: any): Promise<void>;
39
39
  cancel(): void;
40
40
  onAppVersionSelect(appVersion: IApplicationVersion): void;
41
+ open(): void;
41
42
  private markAsDeployed;
42
43
  private getHeaderText;
43
44
  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: "Could not deploy the application, as the application with the same name, context-path or key exist already.";
3
4
  TYPE_VALIDATION: "Wrong file format. Expected a *.zip file with a valid manifest.";
4
5
  ALREADY_SUBSCRIBED: "Could not subscribe to the microservice because another application with the same context path is already subscribed.";
5
6
  NO_MANIFEST_FILE: "Could not find a manifest.";
@@ -8,7 +9,8 @@ export declare const ERROR_MESSAGES: {
8
9
  INTERNAL_ERROR: "An internal error occurred, try to upload again.";
9
10
  MICROSERVICE_NAME_TOO_LONG: "Microservice name \"{{ name }}\" must not be longer than {{ maxChars }} characters.";
10
11
  APPLICATION_CREATION_FAILED: "Application creation failed.";
11
- KEY_OR_CONTEXT_PATH_MISMATCH: "The contextPath or key of the uploaded archive do not match with the existing app.";
12
+ KEY_OR_CONTEXT_PATH_MISMATCH: "The \"contextPath`KEEP_ORIGINAL`\" or \"key`KEEP_ORIGINAL`\" of the uploaded archive do not match with the existing application.";
13
+ VERSION_NOT_FOUND: "The selected version was not found on the server.";
12
14
  };
13
15
  export declare const APP_STATE: {
14
16
  SUBSCRIBED: {
@@ -15,13 +15,15 @@ export declare enum EcosystemWizards {
15
15
  export declare enum ERROR_TYPE {
16
16
  TYPE_VALIDATION = "TYPE_VALIDATION",
17
17
  ALREADY_SUBSCRIBED = "ALREADY_SUBSCRIBED",
18
+ ALREADY_EXIST = "ALREADY_EXIST",
18
19
  INTERNAL_ERROR = "INTERNAL_ERROR",
19
20
  NO_MANIFEST_FILE = "NO_MANIFEST_FILE",
20
21
  INVALID_PACKAGE = "INVALID_PACKAGE",
21
22
  INVALID_APPLICATION = "INVALID_APPLICATION",
22
23
  MICROSERVICE_NAME_TOO_LONG = "MICROSERVICE_NAME_TOO_LONG",
23
24
  APPLICATION_CREATION_FAILED = "APPLICATION_CREATION_FAILED",
24
- KEY_OR_CONTEXT_PATH_MISMATCH = "KEY_OR_CONTEXT_PATH_MISMATCH"
25
+ KEY_OR_CONTEXT_PATH_MISMATCH = "KEY_OR_CONTEXT_PATH_MISMATCH",
26
+ VERSION_NOT_FOUND = "VERSION_NOT_FOUND"
25
27
  }
26
28
  export declare type LicensedApplicationPlugin = Pick<ApplicationPlugin, 'type' | 'license' | 'name' | 'version' | 'contextPath'>;
27
29
  export declare const PRODUCT_EXPERIENCE: {
@@ -58,6 +58,8 @@ export declare class EcosystemService {
58
58
  getWebApplications(customFilter?: any): Promise<IApplication[]>;
59
59
  getFeatureApplications(customFilter?: any): Promise<IApplication[]>;
60
60
  getPackageApplications(customFilter?: any): Promise<IApplication[]>;
61
+ getHostedAndPackageApplications(customFilter?: any): Promise<IApplication[]>;
62
+ getApplicationsFiltered(customFilter?: any, filterCallback?: (app: IApplication) => boolean): Promise<IApplication[]>;
61
63
  isMicroserviceHostingAllowed(): Promise<boolean>;
62
64
  canOpenAppInBrowser(app: IApplication): boolean;
63
65
  openApp(app: any): void;
@@ -81,10 +83,6 @@ export declare class EcosystemService {
81
83
  }>;
82
84
  getHumanizedAppName(app: IApplication): Promise<string>;
83
85
  createConfig(app: IApplication, formGroupValue: FormGroup): Partial<IApplication>;
84
- updateAppManifest(application: IApplication, sourcePackage: IApplication): Promise<{
85
- res: IFetchResponse;
86
- data: any;
87
- }>;
88
86
  listArchives(appId: string | number | IApplication): Promise<IApplicationBinary[]>;
89
87
  deleteArchive(archive: IApplicationBinary, app: IApplication): Promise<void>;
90
88
  getArchiveManagedObject(binaryId: string): Promise<IManagedObject>;
@@ -101,6 +99,9 @@ export declare class EcosystemService {
101
99
  createAppForArchive(archive: any, isPackageTypeArchive?: boolean): Promise<IApplication>;
102
100
  reactivateArchive(app: IApplication): Promise<void>;
103
101
  removeOldestArchive(app: IApplication, archives: IApplicationBinary[]): Promise<void>;
102
+ deployApp(selectedPackage: IApplication, formGroupValue: any, model: any): Promise<IApplication>;
103
+ fallbackToClone(application: IApplication, selectedPackage: IApplication, requestedVersion?: string): Promise<boolean>;
104
+ uploadBinaryFromOtherPackage(selectedPackage: IApplication, applicationToUploadBinaryTo: IApplication, binaryId: string, requestedVersion?: string, useBinariesFrom?: IApplication): Promise<void>;
104
105
  getAppState(app: IApplication): ApplicationState;
105
106
  getPackageContentState(app: IApplication): ApplicationState;
106
107
  isPackageBlueprint(app: IApplication): boolean;
@@ -122,6 +123,12 @@ export declare class EcosystemService {
122
123
  */
123
124
  alertError(error: Error | EcosystemError): void;
124
125
  validatePackageKeyAndContextPath(manifest: IManifest, app: IApplication): Promise<void>;
126
+ filterContainString(name: string, filterTerm: string): boolean;
127
+ updateAppManifest(application: IApplication, selectedPackage: IApplication, requestedVersion?: string): Promise<{
128
+ res: IFetchResponse;
129
+ data: any;
130
+ }>;
131
+ private checkIfAppNameKeyPathExists;
125
132
  private getAppKey;
126
133
  private getContextPath;
127
134
  private removeForbiddenCharacters;
@@ -129,7 +136,6 @@ export declare class EcosystemService {
129
136
  private getCumulocityJson$;
130
137
  private getAppType;
131
138
  private getBaseNameFromArchiveOrAppModel;
132
- private checkIfAppNameKeyPathExists;
133
139
  private removeAppProperties;
134
140
  private getUploadOverrides;
135
141
  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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9jb21tb24vZGF0ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLElBQUksVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBRTFDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLGdCQUFnQixDQUFDO0FBRXpEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxNQUFNLE9BQU8sUUFBUyxTQUFRLFVBQVU7SUFDdEMsWUFBK0IsTUFBYyxFQUFVLGdCQUFrQztRQUN2RixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFEdUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtJQUV6RixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVUsRUFBRSxNQUFNLEdBQUcsUUFBUSxFQUFFLFFBQWlCLEVBQUUsTUFBZTtRQUN6RSxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztRQUV4QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5QyxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztZQUMxRCxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBRW5FLFdBQVcsR0FBRyxLQUFLLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQztZQUNoRCxXQUFXLEdBQUcsS0FBSyxHQUFHLHdCQUF3QixDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxNQUFNLEdBQVcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU5RSxJQUFJLFdBQVcsRUFBRTtZQUNmLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDdEY7YUFBTSxJQUFJLFdBQVcsRUFBRTtZQUN0QixNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQ3JGO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7cUdBMUJVLFFBQVEsa0JBQ0MsU0FBUzttR0FEbEIsUUFBUTsyRkFBUixRQUFRO2tCQURwQixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTs7MEJBRVYsTUFBTTsyQkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgYXMgTmdEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3QsIExPQ0FMRV9JRCwgUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uL2kxOG4vZ2V0dGV4dCc7XG5cbi8qKlxuICogVGhlIHJhbmdlIG9mIHRpbWVzIHN1cHBvcnRlZCBieSBFQ01BU2NyaXB0IERhdGUgb2JqZWN0cyBpbiBtaWxsaXNlY29uZHMuXG4gKiBAc2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy0xNS45LjEuMVxuICovXG5leHBvcnQgY29uc3QgRVNfTUFYX1RJTUVfTUlMTElTRUNPTkRTID0gODY0MDAwMDAwMDAwMDAwMDtcblxuLyoqXG4gKiBGb3JtYXRzIGEgZGF0ZSB2YWx1ZSBhY2NvcmRpbmcgdG8gbG9jYWxlIHJ1bGVzLiBJZiBubyBvdGhlciBmb3JtYXQgc3BlY2lmaWVkIGl0IGRlZmF1bHRzIHRvIGBtZWRpdW1gXG4gKiB1c2VkIGFzIHN0YW5kYXJkIGRhdGUvdGltZSBmb3JtYXQuXG4gKlxuICogRXh0ZW5kcyBBbmd1bGFyJ3MgRGF0ZVBpcGUgaW4gYSB3YXkgc28gdGhhdCBkYXRlIHZhbHVlcyBleGNlZWRpbmcgdGhlIHJhbmdlIHN1cHBvcnRlZCBieSBFQ01BU2NyaXB0XG4gKiBhcmUgZGlzcGxheWVkIGFzIGVhcmxpZXN0L2xhdGVzdCBzdXBwb3J0ZWQgcG9pbnQgaW4gdGltZSBwcmludGVkIGluIHRoZSBkZXNpcmVkIGZvcm1hdCBwcmUtIG9yIHBvc3RmaXhlZFxuICogYnkgdGhlIHdvcmQgYGJlZm9yZWAgb3IgYGFmdGVyYCwgcmVzcGVjdGl2ZWx5LlxuICogSW4gYWxsIG90aGVyIGNhc2VzIHRoZSBwaXBlIGJlaGF2ZXMgYXMgdGhlIHN0YW5kYXJkIFtEYXRlUGlwZV17QGxpbmsgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9jb21tb24vRGF0ZVBpcGV9LlxuICpcbiAqIGBgYGh0bWxcbiAqIDxzcGFuIGNsYXNzPVwiaGlnaGxpZ2h0XCI+e3sgZGVhZGxpbmUgfCBjOHlEYXRlIH19PC9zcGFuPiA8IS0tIGUuZy4gNyBNYXkgMjAyMCwgMTc6NDU6MTkgKGVuLUdCKSBvciAwNy4wNS4yMDIwLCAxNzo0NToxOSAoZGUpIC0tPlxuICogPHNwYW4+e3sgbGFzdFVwZGF0ZWQgfCBjOHlEYXRlOiAnYSBoOk1NOnNzJyB9fTwvc3Bhbj4gPCEtLSBlLmcuIHBtIDU6NDU6MTkgLS0+XG4gKiA8c3Bhbj57eyA4NjQwMDAwMDAwMDAwMDAwICsgMSB8IGM4eURhdGUgfX08L3NwYW4+IDwhLS0gZS5nLiBhZnRlciAxMyBTZXAgMjc1NzYwLCAwMzowMDowMCAtLT4gYGBgXG4gKi9cbkBQaXBlKHsgbmFtZTogJ2M4eURhdGUnIH0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpcGUgZXh0ZW5kcyBOZ0RhdGVQaXBlIHtcbiAgY29uc3RydWN0b3IoQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZTogc3RyaW5nLCBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UpIHtcbiAgICBzdXBlcihsb2NhbGUpO1xuICB9XG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIGZvcm1hdCA9ICdtZWRpdW0nLCB0aW1lem9uZT86IHN0cmluZywgbG9jYWxlPzogc3RyaW5nKTogYW55IHtcbiAgICBsZXQgdmFsdWVJbkJvdW5kcyA9IHZhbHVlO1xuICAgIGxldCB2YWx1ZUJlZm9yZSA9IGZhbHNlO1xuICAgIGxldCB2YWx1ZUJleW9uZCA9IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdmFsdWVJbkJvdW5kcyA9IE1hdGgubWluKHZhbHVlLCBFU19NQVhfVElNRV9NSUxMSVNFQ09ORFMpO1xuICAgICAgdmFsdWVJbkJvdW5kcyA9IE1hdGgubWF4KHZhbHVlSW5Cb3VuZHMsIC1FU19NQVhfVElNRV9NSUxMSVNFQ09ORFMpO1xuXG4gICAgICB2YWx1ZUJlZm9yZSA9IHZhbHVlIDwgLUVTX01BWF9USU1FX01JTExJU0VDT05EUztcbiAgICAgIHZhbHVlQmV5b25kID0gdmFsdWUgPiBFU19NQVhfVElNRV9NSUxMSVNFQ09ORFM7XG4gICAgfVxuICAgIGxldCByZXN1bHQ6IHN0cmluZyA9IHN1cGVyLnRyYW5zZm9ybSh2YWx1ZUluQm91bmRzLCBmb3JtYXQsIHRpbWV6b25lLCBsb2NhbGUpO1xuXG4gICAgaWYgKHZhbHVlQmVmb3JlKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KGBiZWZvcmUge3tkYXRlfX1gKSwgeyBkYXRlOiByZXN1bHQgfSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZUJleW9uZCkge1xuICAgICAgcmVzdWx0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dChgYWZ0ZXIge3tkYXRlfX1gKSwgeyBkYXRlOiByZXN1bHQgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9jb21tb24vZGF0ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLElBQUksVUFBVSxFQUFFLDBCQUEwQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckYsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUUxQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUV6RDs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsTUFBTSxPQUFPLFFBQVMsU0FBUSxVQUFVO0lBQ3RDLFlBQ3FCLE1BQWMsRUFDekIsZ0JBQWtDLEVBQ00sZUFBK0I7UUFFL0UsS0FBSyxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUh2QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO0lBSTVDLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBVSxFQUFFLE1BQU0sR0FBRyxRQUFRLEVBQUUsUUFBaUIsRUFBRSxNQUFlO1FBQ3pFLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXhCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzlDLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1lBQzFELGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFFbkUsV0FBVyxHQUFHLEtBQUssR0FBRyxDQUFDLHdCQUF3QixDQUFDO1lBQ2hELFdBQVcsR0FBRyxLQUFLLEdBQUcsd0JBQXdCLENBQUM7U0FDaEQ7UUFDRCxJQUFJLE1BQU0sR0FBVyxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTlFLElBQUksV0FBVyxFQUFFO1lBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUN0RjthQUFNLElBQUksV0FBVyxFQUFFO1lBQ3RCLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDckY7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztxR0E5QlUsUUFBUSxrQkFFVCxTQUFTLDZDQUVULDBCQUEwQjttR0FKekIsUUFBUTsyRkFBUixRQUFRO2tCQURwQixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTs7MEJBR3BCLE1BQU07MkJBQUMsU0FBUzs7MEJBRWhCLE1BQU07MkJBQUMsMEJBQTBCOzswQkFBRyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgYXMgTmdEYXRlUGlwZSwgREFURV9QSVBFX0RFRkFVTFRfVElNRVpPTkUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0LCBMT0NBTEVfSUQsIE9wdGlvbmFsLCBQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnLi4vaTE4bi9nZXR0ZXh0JztcblxuLyoqXG4gKiBUaGUgcmFuZ2Ugb2YgdGltZXMgc3VwcG9ydGVkIGJ5IEVDTUFTY3JpcHQgRGF0ZSBvYmplY3RzIGluIG1pbGxpc2Vjb25kcy5cbiAqIEBzZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTE1LjkuMS4xXG4gKi9cbmV4cG9ydCBjb25zdCBFU19NQVhfVElNRV9NSUxMSVNFQ09ORFMgPSA4NjQwMDAwMDAwMDAwMDAwO1xuXG4vKipcbiAqIEZvcm1hdHMgYSBkYXRlIHZhbHVlIGFjY29yZGluZyB0byBsb2NhbGUgcnVsZXMuIElmIG5vIG90aGVyIGZvcm1hdCBzcGVjaWZpZWQgaXQgZGVmYXVsdHMgdG8gYG1lZGl1bWBcbiAqIHVzZWQgYXMgc3RhbmRhcmQgZGF0ZS90aW1lIGZvcm1hdC5cbiAqXG4gKiBFeHRlbmRzIEFuZ3VsYXIncyBEYXRlUGlwZSBpbiBhIHdheSBzbyB0aGF0IGRhdGUgdmFsdWVzIGV4Y2VlZGluZyB0aGUgcmFuZ2Ugc3VwcG9ydGVkIGJ5IEVDTUFTY3JpcHRcbiAqIGFyZSBkaXNwbGF5ZWQgYXMgZWFybGllc3QvbGF0ZXN0IHN1cHBvcnRlZCBwb2ludCBpbiB0aW1lIHByaW50ZWQgaW4gdGhlIGRlc2lyZWQgZm9ybWF0IHByZS0gb3IgcG9zdGZpeGVkXG4gKiBieSB0aGUgd29yZCBgYmVmb3JlYCBvciBgYWZ0ZXJgLCByZXNwZWN0aXZlbHkuXG4gKiBJbiBhbGwgb3RoZXIgY2FzZXMgdGhlIHBpcGUgYmVoYXZlcyBhcyB0aGUgc3RhbmRhcmQgW0RhdGVQaXBlXXtAbGluayBodHRwczovL2FuZ3VsYXIuaW8vYXBpL2NvbW1vbi9EYXRlUGlwZX0uXG4gKlxuICogYGBgaHRtbFxuICogPHNwYW4gY2xhc3M9XCJoaWdobGlnaHRcIj57eyBkZWFkbGluZSB8IGM4eURhdGUgfX08L3NwYW4+IDwhLS0gZS5nLiA3IE1heSAyMDIwLCAxNzo0NToxOSAoZW4tR0IpIG9yIDA3LjA1LjIwMjAsIDE3OjQ1OjE5IChkZSkgLS0+XG4gKiA8c3Bhbj57eyBsYXN0VXBkYXRlZCB8IGM4eURhdGU6ICdhIGg6TU06c3MnIH19PC9zcGFuPiA8IS0tIGUuZy4gcG0gNTo0NToxOSAtLT5cbiAqIDxzcGFuPnt7IDg2NDAwMDAwMDAwMDAwMDAgKyAxIHwgYzh5RGF0ZSB9fTwvc3Bhbj4gPCEtLSBlLmcuIGFmdGVyIDEzIFNlcCAyNzU3NjAsIDAzOjAwOjAwIC0tPiBgYGBcbiAqL1xuQFBpcGUoeyBuYW1lOiAnYzh5RGF0ZScgfSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlwZSBleHRlbmRzIE5nRGF0ZVBpcGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KExPQ0FMRV9JRCkgbG9jYWxlOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIEBJbmplY3QoREFURV9QSVBFX0RFRkFVTFRfVElNRVpPTkUpIEBPcHRpb25hbCgpIGRlZmF1bHRUaW1lem9uZT86IHN0cmluZyB8IG51bGxcbiAgKSB7XG4gICAgc3VwZXIobG9jYWxlLCBkZWZhdWx0VGltZXpvbmUpO1xuICB9XG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIGZvcm1hdCA9ICdtZWRpdW0nLCB0aW1lem9uZT86IHN0cmluZywgbG9jYWxlPzogc3RyaW5nKTogYW55IHtcbiAgICBsZXQgdmFsdWVJbkJvdW5kcyA9IHZhbHVlO1xuICAgIGxldCB2YWx1ZUJlZm9yZSA9IGZhbHNlO1xuICAgIGxldCB2YWx1ZUJleW9uZCA9IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgdmFsdWVJbkJvdW5kcyA9IE1hdGgubWluKHZhbHVlLCBFU19NQVhfVElNRV9NSUxMSVNFQ09ORFMpO1xuICAgICAgdmFsdWVJbkJvdW5kcyA9IE1hdGgubWF4KHZhbHVlSW5Cb3VuZHMsIC1FU19NQVhfVElNRV9NSUxMSVNFQ09ORFMpO1xuXG4gICAgICB2YWx1ZUJlZm9yZSA9IHZhbHVlIDwgLUVTX01BWF9USU1FX01JTExJU0VDT05EUztcbiAgICAgIHZhbHVlQmV5b25kID0gdmFsdWUgPiBFU19NQVhfVElNRV9NSUxMSVNFQ09ORFM7XG4gICAgfVxuICAgIGxldCByZXN1bHQ6IHN0cmluZyA9IHN1cGVyLnRyYW5zZm9ybSh2YWx1ZUluQm91bmRzLCBmb3JtYXQsIHRpbWV6b25lLCBsb2NhbGUpO1xuXG4gICAgaWYgKHZhbHVlQmVmb3JlKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KGBiZWZvcmUge3tkYXRlfX1gKSwgeyBkYXRlOiByZXN1bHQgfSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZUJleW9uZCkge1xuICAgICAgcmVzdWx0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dChgYWZ0ZXIge3tkYXRlfX1gKSwgeyBkYXRlOiByZXN1bHQgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19
@@ -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=