@rangertechnologies/ngnxt 2.1.251 → 2.1.252

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 (84) hide show
  1. package/esm2022/environments/version.mjs +2 -2
  2. package/esm2022/lib/components/button/nxt-button.component.mjs +4 -4
  3. package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +5 -8
  4. package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +7 -8
  5. package/esm2022/lib/components/custom-model/custom-model.component.mjs +3 -5
  6. package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +3 -3
  7. package/esm2022/lib/components/datatable/datatable.component.mjs +8 -7
  8. package/esm2022/lib/components/file-upload/file-upload.component.mjs +9 -9
  9. package/esm2022/lib/components/icon-selector/icon-selector.component.mjs +3 -4
  10. package/esm2022/lib/components/list-view-filter/list-view-filter.component.mjs +9 -9
  11. package/esm2022/lib/components/nxt-input/nxt-input.component.mjs +12 -24
  12. package/esm2022/lib/components/pagination/pagination.component.mjs +3 -3
  13. package/esm2022/lib/components/pick-location/pick-location.component.mjs +4 -5
  14. package/esm2022/lib/components/search-box/search-box.component.mjs +8 -10
  15. package/esm2022/lib/interfaces/apimeta.mjs +2 -0
  16. package/esm2022/lib/nxt-app.module.mjs +4 -4
  17. package/esm2022/lib/pages/booklet/booklet.component.mjs +56 -28
  18. package/esm2022/lib/pages/builder/element/element.component.mjs +10 -65
  19. package/esm2022/lib/pages/builder/form/form.component.mjs +3 -6
  20. package/esm2022/lib/pages/builder/properties/properties.component.mjs +78 -182
  21. package/esm2022/lib/pages/builder/templates/templates.component.mjs +4 -5
  22. package/esm2022/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.mjs +4 -5
  23. package/esm2022/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.mjs +45 -42
  24. package/esm2022/lib/pages/questionbook/questionbook.component.mjs +31 -12
  25. package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +8 -12
  26. package/esm2022/lib/pipe/custom-translate.pipe.mjs +10 -16
  27. package/esm2022/lib/services/change.service.mjs +46 -0
  28. package/esm2022/lib/services/country.service.mjs +135 -0
  29. package/esm2022/lib/services/data.service.mjs +100 -0
  30. package/esm2022/lib/services/form-builder.service.mjs +402 -0
  31. package/esm2022/lib/services/pdf-designer.service.mjs +398 -0
  32. package/esm2022/lib/services/salesforce.service.mjs +41 -0
  33. package/esm2022/lib/services/shared.service.mjs +100 -0
  34. package/esm2022/lib/services/storage.service.mjs +59 -0
  35. package/esm2022/lib/services/template.service.mjs +351 -0
  36. package/esm2022/lib/services/translation.service.mjs +61 -0
  37. package/esm2022/public-api.mjs +2 -2
  38. package/fesm2022/rangertechnologies-ngnxt.mjs +933 -1201
  39. package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
  40. package/lib/components/button/nxt-button.component.d.ts +1 -1
  41. package/lib/components/custom-calendar/custom-calendar.component.d.ts +1 -1
  42. package/lib/components/custom-dropdown/custom-dropdown.component.d.ts +2 -2
  43. package/lib/components/custom-radio/custom-radio.component.d.ts +2 -2
  44. package/lib/components/datatable/datatable.component.d.ts +3 -3
  45. package/lib/components/file-upload/file-upload.component.d.ts +2 -2
  46. package/lib/components/image-cropper/component/image-cropper.component.d.ts +1 -1
  47. package/lib/components/nxt-input/nxt-input.component.d.ts +2 -2
  48. package/lib/components/search-box/search-box.component.d.ts +4 -4
  49. package/lib/interfaces/apimeta.d.ts +15 -0
  50. package/lib/nxt-app.module.d.ts +1 -1
  51. package/lib/pages/booklet/booklet.component.d.ts +9 -9
  52. package/lib/pages/builder/element/element.component.d.ts +4 -10
  53. package/lib/pages/builder/form/form.component.d.ts +1 -2
  54. package/lib/pages/builder/properties/properties.component.d.ts +6 -33
  55. package/lib/pages/builder/templates/templates.component.d.ts +1 -1
  56. package/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.d.ts +1 -1
  57. package/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.d.ts +2 -19
  58. package/lib/pages/questionbook/questionbook.component.d.ts +8 -6
  59. package/lib/pages/questionnaire/questionnaire.component.d.ts +5 -6
  60. package/lib/pipe/custom-translate.pipe.d.ts +3 -2
  61. package/lib/services/{form-builder/form-builder.service.d.ts → form-builder.service.d.ts} +1 -2
  62. package/lib/services/{pdf-designer/pdf-designer.service.d.ts → pdf-designer.service.d.ts} +1 -1
  63. package/lib/services/{storage/storage.service.d.ts → storage.service.d.ts} +2 -2
  64. package/lib/services/{translation/translation.service.d.ts → translation.service.d.ts} +1 -12
  65. package/package.json +1 -1
  66. package/public-api.d.ts +1 -1
  67. package/rangertechnologies-ngnxt-2.1.252.tgz +0 -0
  68. package/esm2022/lib/services/change/change.service.mjs +0 -46
  69. package/esm2022/lib/services/country/country.service.mjs +0 -135
  70. package/esm2022/lib/services/data/data.service.mjs +0 -100
  71. package/esm2022/lib/services/form-builder/form-builder.service.mjs +0 -485
  72. package/esm2022/lib/services/pdf-designer/pdf-designer.service.mjs +0 -398
  73. package/esm2022/lib/services/salesforce/salesforce.service.mjs +0 -41
  74. package/esm2022/lib/services/shared/shared.service.mjs +0 -100
  75. package/esm2022/lib/services/storage/storage.service.mjs +0 -59
  76. package/esm2022/lib/services/template/template.service.mjs +0 -351
  77. package/esm2022/lib/services/translation/translation.service.mjs +0 -121
  78. package/rangertechnologies-ngnxt-2.1.251.tgz +0 -0
  79. /package/lib/services/{change/change.service.d.ts → change.service.d.ts} +0 -0
  80. /package/lib/services/{country/country.service.d.ts → country.service.d.ts} +0 -0
  81. /package/lib/services/{data/data.service.d.ts → data.service.d.ts} +0 -0
  82. /package/lib/services/{salesforce/salesforce.service.d.ts → salesforce.service.d.ts} +0 -0
  83. /package/lib/services/{shared/shared.service.d.ts → shared.service.d.ts} +0 -0
  84. /package/lib/services/{template/template.service.d.ts → template.service.d.ts} +0 -0
@@ -1,17 +1,11 @@
1
- import { inject, Pipe } from '@angular/core';
2
- import { TranslationService } from '../services/translation/translation.service';
3
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
1
+ import { Pipe } from '@angular/core';
4
2
  import * as i0 from "@angular/core";
3
+ import * as i1 from "../services/translation.service";
5
4
  export class NxtCustomTranslatePipe {
5
+ translationService;
6
6
  cache = new Map();
7
- translationService = inject(TranslationService);
8
- constructor() {
9
- // SKS28JUL25 clear catch if input language code change
10
- this.translationService.translationsLoaded$
11
- .pipe(takeUntilDestroyed())
12
- .subscribe(() => {
13
- this.cache.clear();
14
- });
7
+ constructor(translationService) {
8
+ this.translationService = translationService;
15
9
  }
16
10
  transform(key, fallback) {
17
11
  if (this.cache.has(key)) {
@@ -22,15 +16,15 @@ export class NxtCustomTranslatePipe {
22
16
  this.cache.set(key, result);
23
17
  return result;
24
18
  }
25
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtCustomTranslatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
26
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NxtCustomTranslatePipe, isStandalone: true, name: "nxtCustomTranslate", pure: false });
19
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtCustomTranslatePipe, deps: [{ token: i1.TranslationService }], target: i0.ɵɵFactoryTarget.Pipe });
20
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NxtCustomTranslatePipe, isStandalone: true, name: "nxtCustomTranslate" });
27
21
  }
28
22
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtCustomTranslatePipe, decorators: [{
29
23
  type: Pipe,
30
24
  args: [{
31
25
  name: 'nxtCustomTranslate',
32
- pure: false,
26
+ pure: true,
33
27
  standalone: true
34
28
  }]
35
- }], ctorParameters: () => [] });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXRyYW5zbGF0ZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL3BpcGUvY3VzdG9tLXRyYW5zbGF0ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFPaEUsTUFBTSxPQUFPLHNCQUFzQjtJQUN6QixLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDbEMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFFeEQ7UUFDRSx1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQjthQUN4QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUMxQixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxTQUFTLENBQUMsR0FBVyxFQUFFLFFBQWdCO1FBQ3JDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxDQUFDO1FBQzlCLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFELE1BQU0sTUFBTSxHQUFHLFVBQVUsSUFBSSxRQUFRLElBQUksR0FBRyxDQUFDO1FBQzdDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO3dHQXJCVSxzQkFBc0I7c0dBQXRCLHNCQUFzQjs7NEZBQXRCLHNCQUFzQjtrQkFMbEMsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsb0JBQW9CO29CQUMxQixJQUFJLEVBQUUsS0FBSztvQkFDWCxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdueHRDdXN0b21UcmFuc2xhdGUnLFxuICBwdXJlOiBmYWxzZSxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBOeHRDdXN0b21UcmFuc2xhdGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHByaXZhdGUgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZSA9IGluamVjdChUcmFuc2xhdGlvblNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIFNLUzI4SlVMMjUgY2xlYXIgY2F0Y2ggaWYgaW5wdXQgbGFuZ3VhZ2UgY29kZSBjaGFuZ2VcbiAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGlvbnNMb2FkZWQkXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHRyYW5zZm9ybShrZXk6IHN0cmluZywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlLmdldChrZXkpITtcbiAgICB9XG4gICAgY29uc3QgdHJhbnNsYXRlZCA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZShrZXkpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRyYW5zbGF0ZWQgfHwgZmFsbGJhY2sgfHwga2V5O1xuICAgIHRoaXMuY2FjaGUuc2V0KGtleSwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iXX0=
29
+ }], ctorParameters: () => [{ type: i1.TranslationService }] });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXRyYW5zbGF0ZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL3BpcGUvY3VzdG9tLXRyYW5zbGF0ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7QUFRcEQsTUFBTSxPQUFPLHNCQUFzQjtJQUdiO0lBRlosS0FBSyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBRTFDLFlBQW9CLGtCQUFzQztRQUF0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO0lBQUcsQ0FBQztJQUU5RCxTQUFTLENBQUMsR0FBVyxFQUFFLFFBQWdCO1FBQ3JDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxDQUFDO1FBQzlCLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFELE1BQU0sTUFBTSxHQUFHLFVBQVUsSUFBSSxRQUFRLElBQUksR0FBRyxDQUFDO1FBQzdDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO3dHQWJVLHNCQUFzQjtzR0FBdEIsc0JBQXNCOzs0RkFBdEIsc0JBQXNCO2tCQUxsQyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxvQkFBb0I7b0JBQzFCLElBQUksRUFBRSxJQUFJO29CQUNWLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdueHRDdXN0b21UcmFuc2xhdGUnLFxuICBwdXJlOiB0cnVlLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIE54dEN1c3RvbVRyYW5zbGF0ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgcHJpdmF0ZSBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSkge31cblxuICB0cmFuc2Zvcm0oa2V5OiBzdHJpbmcsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZS5nZXQoa2V5KSE7XG4gICAgfVxuICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoa2V5KTtcbiAgICBjb25zdCByZXN1bHQgPSB0cmFuc2xhdGVkIHx8IGZhbGxiYWNrIHx8IGtleTtcbiAgICB0aGlzLmNhY2hlLnNldChrZXksIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19
@@ -0,0 +1,46 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class ChangeService {
5
+ constructor() { }
6
+ // Observable parentQuestion sources
7
+ changeAnnouncedSource = new BehaviorSubject(null);
8
+ changeConfirmedSource = new BehaviorSubject(null);
9
+ validationSource = new BehaviorSubject(null);
10
+ fieldSource = new BehaviorSubject(null);
11
+ // VD 13Sep24 - databind changes
12
+ customChanges = new BehaviorSubject(null);
13
+ // Observable parentQuestion streams
14
+ changeAnnounced$ = this.changeAnnouncedSource.asObservable();
15
+ changeConfirmed$ = this.changeConfirmedSource.asObservable();
16
+ submitValidate$ = this.validationSource.asObservable();
17
+ changeField$ = this.fieldSource.asObservable();
18
+ // VD 13Sep24 - databind changes
19
+ customChange$ = this.customChanges.asObservable();
20
+ // Service message commands
21
+ announceChange(changeValue) {
22
+ this.changeAnnouncedSource.next(changeValue);
23
+ }
24
+ confirmChange(childQuestion) {
25
+ this.changeConfirmedSource.next(childQuestion);
26
+ }
27
+ // VD 13Sep24 - databind changes
28
+ dataChanges(data) {
29
+ this.customChanges.next(data);
30
+ }
31
+ submitChange(value) {
32
+ this.validationSource.next(value);
33
+ }
34
+ fieldChange(value) {
35
+ this.fieldSource.next(value);
36
+ }
37
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChangeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
38
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChangeService, providedIn: 'root' });
39
+ }
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChangeService, decorators: [{
41
+ type: Injectable,
42
+ args: [{
43
+ providedIn: 'root'
44
+ }]
45
+ }], ctorParameters: () => [] });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbmdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvc2VydmljZXMvY2hhbmdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUt2QyxNQUFNLE9BQU8sYUFBYTtJQUV4QixnQkFBZ0IsQ0FBQztJQUNuQixvQ0FBb0M7SUFDNUIscUJBQXFCLEdBQUUsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7SUFDdEQscUJBQXFCLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7SUFDdkQsZ0JBQWdCLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7SUFDbEQsV0FBVyxHQUFHLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFDO0lBQ3JELGdDQUFnQztJQUN4QixhQUFhLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7SUFFdkQsb0NBQW9DO0lBQ3BDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3RCxnQkFBZ0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0QsZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN2RCxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMvQyxnQ0FBZ0M7SUFDaEMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFbEQsMkJBQTJCO0lBQzNCLGNBQWMsQ0FBQyxXQUFnQjtRQUM3QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxhQUFhLENBQUMsYUFBcUI7UUFDakMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBQ0QsZ0NBQWdDO0lBQ2hDLFdBQVcsQ0FBQyxJQUFZO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBWTtRQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCxXQUFXLENBQUMsS0FBUztRQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO3dHQXJDWSxhQUFhOzRHQUFiLGFBQWEsY0FGWixNQUFNOzs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDaGFuZ2VTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuLy8gT2JzZXJ2YWJsZSBwYXJlbnRRdWVzdGlvbiBzb3VyY2VzXG5wcml2YXRlIGNoYW5nZUFubm91bmNlZFNvdXJjZSA9bmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xucHJpdmF0ZSBjaGFuZ2VDb25maXJtZWRTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5wcml2YXRlIHZhbGlkYXRpb25Tb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5wcml2YXRlIGZpZWxkU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuLy8gVkQgMTNTZXAyNCAtIGRhdGFiaW5kIGNoYW5nZXNcbnByaXZhdGUgY3VzdG9tQ2hhbmdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcblxuLy8gT2JzZXJ2YWJsZSBwYXJlbnRRdWVzdGlvbiBzdHJlYW1zXG5jaGFuZ2VBbm5vdW5jZWQkID0gdGhpcy5jaGFuZ2VBbm5vdW5jZWRTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG5jaGFuZ2VDb25maXJtZWQkID0gdGhpcy5jaGFuZ2VDb25maXJtZWRTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG5zdWJtaXRWYWxpZGF0ZSQgPSB0aGlzLnZhbGlkYXRpb25Tb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG5jaGFuZ2VGaWVsZCQgPSB0aGlzLmZpZWxkU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuLy8gVkQgMTNTZXAyNCAtIGRhdGFiaW5kIGNoYW5nZXNcbmN1c3RvbUNoYW5nZSQgPSB0aGlzLmN1c3RvbUNoYW5nZXMuYXNPYnNlcnZhYmxlKCk7XG5cbi8vIFNlcnZpY2UgbWVzc2FnZSBjb21tYW5kc1xuYW5ub3VuY2VDaGFuZ2UoY2hhbmdlVmFsdWU6IGFueSkge1xuICB0aGlzLmNoYW5nZUFubm91bmNlZFNvdXJjZS5uZXh0KGNoYW5nZVZhbHVlKTtcbn1cblxuY29uZmlybUNoYW5nZShjaGlsZFF1ZXN0aW9uOiBzdHJpbmcpIHtcbiAgdGhpcy5jaGFuZ2VDb25maXJtZWRTb3VyY2UubmV4dChjaGlsZFF1ZXN0aW9uKTtcbn1cbi8vIFZEIDEzU2VwMjQgLSBkYXRhYmluZCBjaGFuZ2VzXG5kYXRhQ2hhbmdlcyhkYXRhOiBzdHJpbmcpIHtcbiAgdGhpcy5jdXN0b21DaGFuZ2VzLm5leHQoZGF0YSk7XG59XG5cbnN1Ym1pdENoYW5nZSh2YWx1ZTpzdHJpbmcpe1xuICB0aGlzLnZhbGlkYXRpb25Tb3VyY2UubmV4dCh2YWx1ZSk7XG59XG5maWVsZENoYW5nZSh2YWx1ZTphbnkpe1xuIHRoaXMuZmllbGRTb3VyY2UubmV4dCh2YWx1ZSk7XG59XG59Il19
@@ -0,0 +1,135 @@
1
+ // country.service.ts
2
+ import { Injectable } from '@angular/core';
3
+ import countryJson from '../country.json';
4
+ import * as i0 from "@angular/core";
5
+ export class CountryService {
6
+ countriesData = [];
7
+ constructor() {
8
+ this.countriesData = this.transformData(countryJson);
9
+ }
10
+ //SKS24JUN25 Transform raw data to enhanced format
11
+ transformData(countries) {
12
+ return countries.map(country => {
13
+ const getFirstValue = (obj) => obj ? Object.values(obj)[0] : null;
14
+ const getFirstKey = (obj) => obj ? Object.keys(obj)[0] : null;
15
+ const safeCurrency = country.currencies ? getFirstValue(country.currencies) : null;
16
+ const primaryLanguage = country.languages ? getFirstKey(country.languages) : 'en';
17
+ return {
18
+ countryName: country.name?.common || 'Unknown',
19
+ officialName: country.name?.official || country.name?.common || 'Unknown',
20
+ isoAlpha2: country.cca2 || '',
21
+ isoAlpha3: country.cca3 || '',
22
+ isoNumeric: country.ccn3 || '',
23
+ capital: Array.isArray(country.capital) ? country.capital : [country.capital || 'N/A'],
24
+ capitalPrimary: Array.isArray(country.capital) ? country.capital[0] : (country.capital || 'N/A'),
25
+ coordinates: {
26
+ latitude: country.latlng?.[0] || 0,
27
+ longitude: country.latlng?.[1] || 0,
28
+ latLng: country.latlng || [0, 0]
29
+ },
30
+ areaSqKm: country.area || 0,
31
+ continent: Array.isArray(country.continents) ? country.continents[0] : (country.continents || 'Unknown'),
32
+ region: country.region || 'Unknown',
33
+ subregion: country.subregion || 'Unknown',
34
+ population: country.population || 0,
35
+ languages: country.languages || {},
36
+ languagesCodeAndName: country.languages
37
+ ? Object.entries(country.languages).map(([code, name]) => ({
38
+ languageCode: code,
39
+ languagesName: name
40
+ }))
41
+ : [],
42
+ languagesName: country.languages ? Object.values(country.languages) : [],
43
+ languageCode: country.languages ? Object.keys(country.languages) : [],
44
+ primaryLanguage: country.languages ? getFirstValue(country.languages) : 'English',
45
+ primaryLanguageCode: primaryLanguage,
46
+ currencies: country.currencies || {},
47
+ currencyCode: safeCurrency ? getFirstKey(country.currencies) : 'USD',
48
+ currencyName: safeCurrency?.name || 'Unknown',
49
+ currencySymbol: safeCurrency?.symbol || '$',
50
+ phoneCodeFull: (country.idd?.root || '') + (country.idd?.suffixes?.[0] || ''),
51
+ flag: country.flag || '🏳️',
52
+ flagPng: country.flags?.png || '',
53
+ flagSvg: country.flags?.svg || '',
54
+ timezones: country.timezones || [],
55
+ borders: country.borders || [],
56
+ ...country
57
+ };
58
+ });
59
+ }
60
+ //SKS24JUN25 Single method to get requested fields, with deduplication for languageCode and languagesName
61
+ getCountryData(fields) {
62
+ // SKS24JUN25 Handle special case for languageCode and languagesName to remove duplicates
63
+ if (fields.includes('languageCode') || fields.includes('languagesName')) {
64
+ const result = [];
65
+ const uniqueValues = new Set();
66
+ if (fields.includes('languageCode') && !fields.includes('languagesName')) {
67
+ this.countriesData.forEach(country => {
68
+ country.languageCode.forEach(code => {
69
+ if (code && code !== '') {
70
+ uniqueValues.add(code);
71
+ }
72
+ });
73
+ });
74
+ result.push(...Array.from(uniqueValues).map(code => ({ languageCode: code })));
75
+ }
76
+ if (fields.includes('languagesName') && !fields.includes('languageCode')) {
77
+ uniqueValues.clear();
78
+ this.countriesData.forEach(country => {
79
+ country.languagesName.forEach(lang => {
80
+ if (lang && lang !== '') {
81
+ uniqueValues.add(lang);
82
+ }
83
+ });
84
+ });
85
+ result.push(...Array.from(uniqueValues).map(lang => ({ languagesName: lang })));
86
+ }
87
+ if (fields.includes('languagesName') && fields.includes('languageCode')) {
88
+ const uniqueLanguageMap = new Map();
89
+ this.countriesData.forEach(country => {
90
+ country.languagesCodeAndName.forEach(language => {
91
+ const key = `${language.languageCode}-${language.languagesName}`;
92
+ if (!uniqueLanguageMap.has(key)) {
93
+ uniqueLanguageMap.set(key, language);
94
+ }
95
+ });
96
+ });
97
+ result.push(...Array.from(uniqueLanguageMap.values()));
98
+ }
99
+ // SKS24JUN25 Include other requested fields
100
+ const otherFields = fields.filter(f => f !== 'languageCode' && f !== 'languagesName');
101
+ if (otherFields.length > 0) {
102
+ const otherData = this.countriesData.map(country => {
103
+ const obj = {};
104
+ otherFields.forEach(field => {
105
+ if (country[field] != null && country[field] !== '' && country[field] !== 'Unknown') {
106
+ obj[field] = country[field];
107
+ }
108
+ });
109
+ return Object.keys(obj).length > 0 ? obj : null;
110
+ }).filter(obj => obj != null);
111
+ result.push(...otherData);
112
+ }
113
+ return result;
114
+ }
115
+ // SKS24JUN25 General case: return requested fields for all countries
116
+ return this.countriesData.map(country => {
117
+ const obj = {};
118
+ fields.forEach(field => {
119
+ if (country[field] != null && country[field] !== '' && country[field] !== 'Unknown') {
120
+ obj[field] = country[field];
121
+ }
122
+ });
123
+ return Object.keys(obj).length > 0 ? obj : null;
124
+ }).filter(obj => obj != null);
125
+ }
126
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CountryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
127
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CountryService, providedIn: 'root' });
128
+ }
129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CountryService, decorators: [{
130
+ type: Injectable,
131
+ args: [{
132
+ providedIn: 'root'
133
+ }]
134
+ }], ctorParameters: () => [] });
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL3NlcnZpY2VzL2NvdW50cnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQkFBcUI7QUFDckIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLFdBQVcsTUFBTSxpQkFBaUIsQ0FBQzs7QUF5QzFDLE1BQU0sT0FBTyxjQUFjO0lBQ2pCLGFBQWEsR0FBa0IsRUFBRSxDQUFDO0lBRTFDO1FBQ0UsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxrREFBa0Q7SUFDMUMsYUFBYSxDQUFDLFNBQWdCO1FBQ3BDLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM3QixNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDdkUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25FLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNuRixNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxD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QUMsQ0FBQyxJQUFJLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7d0dBaklVLGNBQWM7NEdBQWQsY0FBYyxjQUZiLE1BQU07OzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gY291bnRyeS5zZXJ2aWNlLnRzXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgY291bnRyeUpzb24gZnJvbSAnLi4vY291bnRyeS5qc29uJztcblxuZXhwb3J0IGludGVyZmFjZSBDb3VudHJ5RGF0YSB7XG4gIGNvdW50cnlOYW1lOiBzdHJpbmc7XG4gIG9mZmljaWFsTmFtZTogc3RyaW5nO1xuICBpc29BbHBoYTI6IHN0cmluZztcbiAgaXNvQWxwaGEzOiBzdHJpbmc7XG4gIGlzb051bWVyaWM6IHN0cmluZztcbiAgY2FwaXRhbDogc3RyaW5nW107XG4gIGNhcGl0YWxQcmltYXJ5OiBzdHJpbmc7XG4gIGNvb3JkaW5hdGVzOiB7XG4gICAgbGF0aXR1ZGU6IG51bWJlcjtcbiAgICBsb25naXR1ZGU6IG51bWJlcjtcbiAgICBsYXRMbmc6IG51bWJlcltdO1xuICB9O1xuICBhcmVhU3FLbTogbnVtYmVyO1xuICBjb250aW5lbnQ6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIHN1YnJlZ2lvbjogc3RyaW5nO1xuICBwb3B1bGF0aW9uOiBudW1iZXI7XG4gIGxhbmd1YWdlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgbGFuZ3VhZ2VzTmFtZTogc3RyaW5nW107XG4gIGxhbmd1YWdlQ29kZTogc3RyaW5nW107XG4gIHByaW1hcnlMYW5ndWFnZTogc3RyaW5nO1xuICBwcmltYXJ5TGFuZ3VhZ2VDb2RlOiBzdHJpbmc7XG4gIGN1cnJlbmNpZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gIGN1cnJlbmN5Q29kZTogc3RyaW5nO1xuICBjdXJyZW5jeU5hbWU6IHN0cmluZztcbiAgY3VycmVuY3lTeW1ib2w6IHN0cmluZztcbiAgcGhvbmVDb2RlRnVsbDogc3RyaW5nO1xuICBmbGFnOiBzdHJpbmc7XG4gIGZsYWdQbmc6IHN0cmluZztcbiAgZmxhZ1N2Zzogc3RyaW5nO1xuICB0aW1lem9uZXM6IHN0cmluZ1tdO1xuICBib3JkZXJzOiBzdHJpbmdbXTtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb3VudHJ5U2VydmljZSB7XG4gIHByaXZhdGUgY291bnRyaWVzRGF0YTogQ291bnRyeURhdGFbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY291bnRyaWVzRGF0YSA9IHRoaXMudHJhbnNmb3JtRGF0YShjb3VudHJ5SnNvbik7XG4gIH1cblxuICAvL1NLUzI0SlVOMjUgVHJhbnNmb3JtIHJhdyBkYXRhIHRvIGVuaGFuY2VkIGZvcm1hdFxuICBwcml2YXRlIHRyYW5zZm9ybURhdGEoY291bnRyaWVzOiBhbnlbXSk6IENvdW50cnlEYXRhW10ge1xuICAgIHJldHVybiBjb3VudHJpZXMubWFwKGNvdW50cnkgPT4ge1xuICAgICAgY29uc3QgZ2V0Rmlyc3RWYWx1ZSA9IChvYmo6IGFueSkgPT4gb2JqID8gT2JqZWN0LnZhbHVlcyhvYmopWzBdIDogbnVsbDtcbiAgICAgIGNvbnN0IGdldEZpcnN0S2V5ID0gKG9iajogYW55KSA9PiBvYmogPyBPYmplY3Qua2V5cyhvYmopWzBdIDogbnVsbDtcbiAgICAgIGNvbnN0IHNhZmVDdXJyZW5jeSA9IGNvdW50cnkuY3VycmVuY2llcyA/IGdldEZpcnN0VmFsdWUoY291bnRyeS5jdXJyZW5jaWVzKSA6IG51bGw7XG4gICAgICBjb25zdCBwcmltYXJ5TGFuZ3VhZ2UgPSBjb3VudHJ5Lmxhbmd1YWdlcyA/IGdldEZpcnN0S2V5KGNvdW50cnkubGFuZ3VhZ2VzKSA6ICdlbic7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvdW50cnlOYW1lOiBjb3VudHJ5Lm5hbWU/LmNvbW1vbiB8fCAnVW5rbm93bicsXG4gICAgICAgIG9mZmljaWFsTmFtZTogY291bnRyeS5uYW1lPy5vZmZpY2lhbCB8fCBjb3VudHJ5Lm5hbWU/LmNvbW1vbiB8fCAnVW5rbm93bicsXG4gICAgICAgIGlzb0FscGhhMjogY291bnRyeS5jY2EyIHx8ICcnLFxuICAgICAgICBpc29BbHBoYTM6IGNvdW50cnkuY2NhMyB8fCAnJyxcbiAgICAgICAgaXNvTnVtZXJpYzogY291bnRyeS5jY24zIHx8ICcnLFxuICAgICAgICBjYXBpdGFsOiBBcnJheS5pc0FycmF5KGNvdW50cnkuY2FwaXRhbCkgPyBjb3VudHJ5LmNhcGl0YWwgOiBbY291bnRyeS5jYXBpdGFsIHx8ICdOL0EnXSxcbiAgICAgICAgY2FwaXRhbFByaW1hcnk6IEFycmF5LmlzQXJyYXkoY291bnRyeS5jYXBpdGFsKSA/IGNvdW50cnkuY2FwaXRhbFswXSA6IChjb3VudHJ5LmNhcGl0YWwgfHwgJ04vQScpLFxuICAgICAgICBjb29yZGluYXRlczoge1xuICAgICAgICAgIGxhdGl0dWRlOiBjb3VudHJ5LmxhdGxuZz8uWzBdIHx8IDAsXG4gICAgICAgICAgbG9uZ2l0dWRlOiBjb3VudHJ5LmxhdGxuZz8uWzFdIHx8IDAsXG4gICAgICAgICAgbGF0TG5nOiBjb3VudHJ5LmxhdGxuZyB8fCBbMCwgMF1cbiAgICAgICAgfSxcbiAgICAgICAgYXJlYVNxS206IGNvdW50cnkuYXJlYSB8fCAwLFxuICAgICAgICBjb250aW5lbnQ6IEFycmF5LmlzQXJyYXkoY291bnRyeS5jb250aW5lbnRzKSA/IGNvdW50cnkuY29udGluZW50c1swXSA6IChjb3VudHJ5LmNvbnRpbmVudHMgfHwgJ1Vua25vd24nKSxcbiAgICAgICAgcmVnaW9uOiBjb3VudHJ5LnJlZ2lvbiB8fCAnVW5rbm93bicsXG4gICAgICAgIHN1YnJlZ2lvbjogY291bnRyeS5zdWJyZWdpb24gfHwgJ1Vua25vd24nLFxuICAgICAgICBwb3B1bGF0aW9uOiBjb3VudHJ5LnBvcHVsYXRpb24gfHwgMCxcbiAgICAgICAgbGFuZ3VhZ2VzOiBjb3VudHJ5Lmxhbmd1YWdlcyB8fCB7fSxcbiAgICAgICAgbGFuZ3VhZ2VzQ29kZUFuZE5hbWU6IGNvdW50cnkubGFuZ3VhZ2VzXG4gICAgICAgID8gT2JqZWN0LmVudHJpZXMoY291bnRyeS5sYW5ndWFnZXMpLm1hcCgoW2NvZGUsIG5hbWVdKSA9PiAoe1xuICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlOiBjb2RlLFxuICAgICAgICAgICAgbGFuZ3VhZ2VzTmFtZTogbmFtZVxuICAgICAgICAgIH0pKVxuICAgICAgICA6IFtdLFxuICAgICAgICBsYW5ndWFnZXNOYW1lOiBjb3VudHJ5Lmxhbmd1YWdlcyA/IE9iamVjdC52YWx1ZXMoY291bnRyeS5sYW5ndWFnZXMpIDogW10sXG4gICAgICAgIGxhbmd1YWdlQ29kZTogY291bnRyeS5sYW5ndWFnZXMgPyBPYmplY3Qua2V5cyhjb3VudHJ5Lmxhbmd1YWdlcykgOiBbXSxcbiAgICAgICAgcHJpbWFyeUxhbmd1YWdlOiBjb3VudHJ5Lmxhbmd1YWdlcyA/IGdldEZpcnN0VmFsdWUoY291bnRyeS5sYW5ndWFnZXMpIDogJ0VuZ2xpc2gnLFxuICAgICAgICBwcmltYXJ5TGFuZ3VhZ2VDb2RlOiBwcmltYXJ5TGFuZ3VhZ2UsXG4gICAgICAgIGN1cnJlbmNpZXM6IGNvdW50cnkuY3VycmVuY2llcyB8fCB7fSxcbiAgICAgICAgY3VycmVuY3lDb2RlOiBzYWZlQ3VycmVuY3kgPyBnZXRGaXJzdEtleShjb3VudHJ5LmN1cnJlbmNpZXMpIDogJ1VTRCcsXG4gICAgICAgIGN1cnJlbmN5TmFtZTogKHNhZmVDdXJyZW5jeSBhcyBhbnkpPy5uYW1lIHx8ICdVbmtub3duJyxcbiAgICAgICAgY3VycmVuY3lTeW1ib2w6IChzYWZlQ3VycmVuY3kgYXMgYW55KT8uc3ltYm9sIHx8ICckJyxcbiAgICAgICAgcGhvbmVDb2RlRnVsbDogKGNvdW50cnkuaWRkPy5yb290IHx8ICcnKSArIChjb3VudHJ5LmlkZD8uc3VmZml4ZXM/LlswXSB8fCAnJyksXG4gICAgICAgIGZsYWc6IGNvdW50cnkuZmxhZyB8fCAn8J+Ps++4jycsXG4gICAgICAgIGZsYWdQbmc6IGNvdW50cnkuZmxhZ3M/LnBuZyB8fCAnJyxcbiAgICAgICAgZmxhZ1N2ZzogY291bnRyeS5mbGFncz8uc3ZnIHx8ICcnLFxuICAgICAgICB0aW1lem9uZXM6IGNvdW50cnkudGltZXpvbmVzIHx8IFtdLFxuICAgICAgICBib3JkZXJzOiBjb3VudHJ5LmJvcmRlcnMgfHwgW10sXG4gICAgICAgIC4uLmNvdW50cnlcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvL1NLUzI0SlVOMjUgU2luZ2xlIG1ldGhvZCB0byBnZXQgcmVxdWVzdGVkIGZpZWxkcywgd2l0aCBkZWR1cGxpY2F0aW9uIGZvciBsYW5ndWFnZUNvZGUgYW5kIGxhbmd1YWdlc05hbWVcbiAgZ2V0Q291bnRyeURhdGEoZmllbGRzOiAoa2V5b2YgQ291bnRyeURhdGEpW10pOiBhbnlbXSB7XG4gICAgLy8gU0tTMjRKVU4yNSBIYW5kbGUgc3BlY2lhbCBjYXNlIGZvciBsYW5ndWFnZUNvZGUgYW5kIGxhbmd1YWdlc05hbWUgdG8gcmVtb3ZlIGR1cGxpY2F0ZXNcbiAgICBpZiAoZmllbGRzLmluY2x1ZGVzKCdsYW5ndWFnZUNvZGUnKSB8fCBmaWVsZHMuaW5jbHVkZXMoJ2xhbmd1YWdlc05hbWUnKSkge1xuICAgICAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgICAgY29uc3QgdW5pcXVlVmFsdWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgIGlmIChmaWVsZHMuaW5jbHVkZXMoJ2xhbmd1YWdlQ29kZScpICYmICFmaWVsZHMuaW5jbHVkZXMoJ2xhbmd1YWdlc05hbWUnKSkge1xuICAgICAgICB0aGlzLmNvdW50cmllc0RhdGEuZm9yRWFjaChjb3VudHJ5ID0+IHtcbiAgICAgICAgICBjb3VudHJ5Lmxhbmd1YWdlQ29kZS5mb3JFYWNoKGNvZGUgPT4ge1xuICAgICAgICAgICAgaWYgKGNvZGUgJiYgY29kZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgdW5pcXVlVmFsdWVzLmFkZChjb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLkFycmF5LmZyb20odW5pcXVlVmFsdWVzKS5tYXAoY29kZSA9PiAoeyBsYW5ndWFnZUNvZGU6IGNvZGUgfSkpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkcy5pbmNsdWRlcygnbGFuZ3VhZ2VzTmFtZScpICYmICFmaWVsZHMuaW5jbHVkZXMoJ2xhbmd1YWdlQ29kZScpKSB7XG4gICAgICAgIHVuaXF1ZVZhbHVlcy5jbGVhcigpO1xuICAgICAgICB0aGlzLmNvdW50cmllc0RhdGEuZm9yRWFjaChjb3VudHJ5ID0+IHtcbiAgICAgICAgICBjb3VudHJ5Lmxhbmd1YWdlc05hbWUuZm9yRWFjaChsYW5nID0+IHtcbiAgICAgICAgICAgIGlmIChsYW5nICYmIGxhbmcgIT09ICcnKSB7XG4gICAgICAgICAgICAgIHVuaXF1ZVZhbHVlcy5hZGQobGFuZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQucHVzaCguLi5BcnJheS5mcm9tKHVuaXF1ZVZhbHVlcykubWFwKGxhbmcgPT4gKHsgbGFuZ3VhZ2VzTmFtZTogbGFuZyB9KSkpO1xuICAgICAgfVxuICAgICAgaWYoZmllbGRzLmluY2x1ZGVzKCdsYW5ndWFnZXNOYW1lJykgJiYgZmllbGRzLmluY2x1ZGVzKCdsYW5ndWFnZUNvZGUnKSl7XG4gICAgICAgIGNvbnN0IHVuaXF1ZUxhbmd1YWdlTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmNvdW50cmllc0RhdGEuZm9yRWFjaChjb3VudHJ5ID0+IHtcbiAgICAgICAgICBjb3VudHJ5Lmxhbmd1YWdlc0NvZGVBbmROYW1lLmZvckVhY2gobGFuZ3VhZ2UgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYCR7bGFuZ3VhZ2UubGFuZ3VhZ2VDb2RlfS0ke2xhbmd1YWdlLmxhbmd1YWdlc05hbWV9YDtcbiAgICAgICAgICAgIGlmICghdW5pcXVlTGFuZ3VhZ2VNYXAuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgdW5pcXVlTGFuZ3VhZ2VNYXAuc2V0KGtleSwgbGFuZ3VhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnB1c2goLi4uQXJyYXkuZnJvbSh1bmlxdWVMYW5ndWFnZU1hcC52YWx1ZXMoKSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBTS1MyNEpVTjI1IEluY2x1ZGUgb3RoZXIgcmVxdWVzdGVkIGZpZWxkc1xuICAgICAgY29uc3Qgb3RoZXJGaWVsZHMgPSBmaWVsZHMuZmlsdGVyKGYgPT4gZiAhPT0gJ2xhbmd1YWdlQ29kZScgJiYgZiAhPT0gJ2xhbmd1YWdlc05hbWUnKTtcbiAgICAgIGlmIChvdGhlckZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG90aGVyRGF0YSA9IHRoaXMuY291bnRyaWVzRGF0YS5tYXAoY291bnRyeSA9PiB7XG4gICAgICAgICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICAgICAgICBvdGhlckZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGlmIChjb3VudHJ5W2ZpZWxkXSAhPSBudWxsICYmIGNvdW50cnlbZmllbGRdICE9PSAnJyAmJiBjb3VudHJ5W2ZpZWxkXSAhPT0gJ1Vua25vd24nKSB7XG4gICAgICAgICAgICAgIG9ialtmaWVsZF0gPSBjb3VudHJ5W2ZpZWxkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPiAwID8gb2JqIDogbnVsbDtcbiAgICAgICAgfSkuZmlsdGVyKG9iaiA9PiBvYmogIT0gbnVsbCk7XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLm90aGVyRGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gU0tTMjRKVU4yNSBHZW5lcmFsIGNhc2U6IHJldHVybiByZXF1ZXN0ZWQgZmllbGRzIGZvciBhbGwgY291bnRyaWVzXG4gICAgcmV0dXJuIHRoaXMuY291bnRyaWVzRGF0YS5tYXAoY291bnRyeSA9PiB7XG4gICAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICBpZiAoY291bnRyeVtmaWVsZF0gIT0gbnVsbCAmJiBjb3VudHJ5W2ZpZWxkXSAhPT0gJycgJiYgY291bnRyeVtmaWVsZF0gIT09ICdVbmtub3duJykge1xuICAgICAgICAgIG9ialtmaWVsZF0gPSBjb3VudHJ5W2ZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPiAwID8gb2JqIDogbnVsbDtcbiAgICB9KS5maWx0ZXIob2JqID0+IG9iaiAhPSBudWxsKTtcbiAgfVxufSJdfQ==
@@ -0,0 +1,100 @@
1
+ import { Injectable, Optional } from '@angular/core';
2
+ import { HttpHeaders } from '@angular/common/http';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common/http";
5
+ export class DataService {
6
+ http;
7
+ apiUrl;
8
+ // VD 23JAN24 optionally declared httpClient
9
+ constructor(http) {
10
+ this.http = http;
11
+ }
12
+ getAPIData(tkn, params, resolve, reject, config) {
13
+ const self = this;
14
+ // Call the ShengelGo Server
15
+ const headers = new HttpHeaders().set('Authorization', `${tkn}`);
16
+ headers.append('Accept', 'application/json');
17
+ headers.append('Access-Control-Allow-Origin', '*');
18
+ // MR 23JAN24 - This should be removed, for now testing with dev-hse-api
19
+ this.http.get('https://dev-hse-api.rangerfusion.com/nxt/api/process/?dataType=' + params[0] + '&operation=' + params[1] + '&param=' + params[2], { headers: headers, observe: 'response' })
20
+ .subscribe(response => {
21
+ if (response.status == 200) {
22
+ resolve(response.body);
23
+ }
24
+ else {
25
+ reject(response.body);
26
+ }
27
+ }, error => {
28
+ reject(error);
29
+ });
30
+ }
31
+ //calling the node api
32
+ getAPIFromNode(dataType, operation, param1, param2, api) {
33
+ const apiUrl = api ? api : 'http://localhost:3001/nxt';
34
+ // let params = new HttpParams()
35
+ // .set('dataType', dataType)
36
+ // .set('operation', operation)
37
+ // .set('param1', param1)
38
+ // .set('param2',param2)
39
+ let body = {
40
+ "dataType": dataType,
41
+ "operation": operation,
42
+ "param1": param1,
43
+ "param2": param2,
44
+ };
45
+ return this.http.post(apiUrl, body);
46
+ }
47
+ // VD 22May24 -funtion to handling multiple child objects
48
+ getValue(element, columns) {
49
+ if (!element || !columns)
50
+ return null; //AP-25MAR25 Ensure both element and column are valid
51
+ // MSM27MAR25 check if columns is an array
52
+ if (typeof columns === 'string' && !Array.isArray(columns)) {
53
+ columns = [columns];
54
+ }
55
+ columns.forEach((column) => {
56
+ let flds = column?.split('.');
57
+ for (let i = 0; i < flds.length; i++) {
58
+ if (element == null)
59
+ return null; //AP-25MAR25 Prevent errors if element is null or undefined
60
+ let splitFlds = flds[i].split('[');
61
+ if (splitFlds.length === 1) {
62
+ element = element[flds[i]] !== undefined ? element[flds[i]] : null;
63
+ }
64
+ else {
65
+ let index = Number(splitFlds[1].split(']')[0]);
66
+ element = element[splitFlds[0]] && Array.isArray(element[splitFlds[0]])
67
+ ? element[splitFlds[0]][index] !== undefined ? element[splitFlds[0]][index] : null
68
+ : null;
69
+ }
70
+ }
71
+ });
72
+ return element;
73
+ }
74
+ // AP-16APR25 Sets the API URL with the provided apidata
75
+ apikey(apidata) {
76
+ this.apiUrl = apidata;
77
+ }
78
+ // VD 23JAN24 get callout
79
+ apiResponse(endpoint) {
80
+ if (this.apiUrl && this.apiUrl.trim() !== '') {
81
+ // AP-16APR25 If apiUrl is set, make the request with the base URL
82
+ return this.http?.get(this.apiUrl + endpoint);
83
+ }
84
+ else {
85
+ // AP-16APR25 If no apiUrl is set, make the request to the endpoint directly
86
+ return this.http?.get(endpoint);
87
+ }
88
+ }
89
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataService, deps: [{ token: i1.HttpClient, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
90
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataService, providedIn: 'root' });
91
+ }
92
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataService, decorators: [{
93
+ type: Injectable,
94
+ args: [{
95
+ providedIn: 'root'
96
+ }]
97
+ }], ctorParameters: () => [{ type: i1.HttpClient, decorators: [{
98
+ type: Optional
99
+ }] }] });
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL3NlcnZpY2VzL2RhdGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQWMsV0FBVyxFQUFjLE1BQU0sc0JBQXNCLENBQUM7OztBQU0zRSxNQUFNLE9BQU8sV0FBVztJQUdVO0lBRmhDLE1BQU0sQ0FBTTtJQUNaLDRDQUE0QztJQUM1QyxZQUFnQyxJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO0lBQUksQ0FBQztJQUU5QyxVQUFVLENBQUMsR0FBVyxFQUMzQixNQUFnQixFQUNoQixPQUFPLEVBQ1AsTUFBTSxFQUNOLE1BQVk7UUFDVixNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFFbEIsNEJBQTRCO1FBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDakUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsTUFBTSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRW5ELHdFQUF3RTtRQUN4RSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpRUFBaUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7YUFDekwsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3BC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QUFDLElBQUk7d0JBQ2xGLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ1gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFDRCx3REFBd0Q7SUFDeEQsTUFBTSxDQUFDLE9BQVk7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUNELDBCQUEwQjtJQUNqQixXQUFXLENBQUMsUUFBZ0I7UUFDakMsSUFBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFDLENBQUM7WUFDN0Msa0VBQWtFO1lBQ2xFLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxDQUFDO2FBQ0csQ0FBQztZQUNILDRFQUE0RTtZQUM1RSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO3dHQTFGVSxXQUFXOzRHQUFYLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBSWMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVNlcnZpY2Uge1xuICBhcGlVcmw6IGFueTtcbiAgLy8gVkQgMjNKQU4yNCBvcHRpb25hbGx5IGRlY2xhcmVkIGh0dHBDbGllbnRcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7IH1cblxuICBwdWJsaWMgZ2V0QVBJRGF0YSh0a246IHN0cmluZywgXG4gICAgcGFyYW1zOiBzdHJpbmdbXSxcbiAgICByZXNvbHZlLFxuICAgIHJlamVjdCxcbiAgICBjb25maWc/OiBhbnkpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAvLyBDYWxsIHRoZSBTaGVuZ2VsR28gU2VydmVyXG4gICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgYCR7dGtufWApO1xuICAgICAgaGVhZGVycy5hcHBlbmQoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICBoZWFkZXJzLmFwcGVuZCgnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgJyonKTtcblxuICAgICAgLy8gTVIgMjNKQU4yNCAtIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQsIGZvciBub3cgdGVzdGluZyB3aXRoIGRldi1oc2UtYXBpXG4gICAgICB0aGlzLmh0dHAuZ2V0KCdodHRwczovL2Rldi1oc2UtYXBpLnJhbmdlcmZ1c2lvbi5jb20vbnh0L2FwaS9wcm9jZXNzLz9kYXRhVHlwZT0nICsgcGFyYW1zWzBdICsgJyZvcGVyYXRpb249JyArIHBhcmFtc1sxXSArICcmcGFyYW09JyArIHBhcmFtc1syXSwgeyBoZWFkZXJzOiBoZWFkZXJzICwgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KVxuICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXMgPT0gMjAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmJvZHkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QocmVzcG9uc2UuYm9keSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gIH1cblxuICAvL2NhbGxpbmcgdGhlIG5vZGUgYXBpXG4gIHB1YmxpYyBnZXRBUElGcm9tTm9kZShkYXRhVHlwZTogc3RyaW5nLCBvcGVyYXRpb246IHN0cmluZywgcGFyYW0xOiBzdHJpbmcscGFyYW0yOiBzdHJpbmcsYXBpOnN0cmluZyl7XG4gICAgY29uc3QgYXBpVXJsID0gYXBpID8gYXBpIDogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMS9ueHQnO1xuICAgIC8vIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgLy8gICAuc2V0KCdkYXRhVHlwZScsIGRhdGFUeXBlKVxuICAgIC8vICAgLnNldCgnb3BlcmF0aW9uJywgb3BlcmF0aW9uKVxuICAgIC8vICAgLnNldCgncGFyYW0xJywgcGFyYW0xKVxuICAgIC8vICAgLnNldCgncGFyYW0yJyxwYXJhbTIpXG5cbiAgICBsZXQgYm9keSA9IHtcbiAgICAgIFwiZGF0YVR5cGVcIiA6ZGF0YVR5cGUgLFxuICAgICAgXCJvcGVyYXRpb25cIiA6b3BlcmF0aW9uICxcbiAgICAgIFwicGFyYW0xXCIgOnBhcmFtMSwgXG4gICAgICBcInBhcmFtMlwiIDogcGFyYW0yLFxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihhcGlVcmwsYm9keSApO1xuXG4gIH1cblxuICAgIFxuLy8gVkQgMjJNYXkyNCAtZnVudGlvbiB0byAgaGFuZGxpbmcgbXVsdGlwbGUgY2hpbGQgb2JqZWN0c1xucHVibGljIGdldFZhbHVlKGVsZW1lbnQ6IGFueSwgY29sdW1uczogYW55KSB7XG4gIGlmICghZWxlbWVudCB8fCAhY29sdW1ucykgcmV0dXJuIG51bGw7IC8vQVAtMjVNQVIyNSBFbnN1cmUgYm90aCBlbGVtZW50IGFuZCBjb2x1bW4gYXJlIHZhbGlkXG4vLyBNU00yN01BUjI1IGNoZWNrIGlmIGNvbHVtbnMgaXMgYW4gYXJyYXlcbiAgaWYodHlwZW9mIGNvbHVtbnMgPT09ICdzdHJpbmcnICYmICFBcnJheS5pc0FycmF5KGNvbHVtbnMpICApIHtcbiAgICBjb2x1bW5zID0gW2NvbHVtbnNdO1xuICB9XG4gIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgbGV0IGZsZHMgPSBjb2x1bW4/LnNwbGl0KCcuJyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHJldHVybiBudWxsOyAvL0FQLTI1TUFSMjUgUHJldmVudCBlcnJvcnMgaWYgZWxlbWVudCBpcyBudWxsIG9yIHVuZGVmaW5lZFxuXG4gICAgICBsZXQgc3BsaXRGbGRzID0gZmxkc1tpXS5zcGxpdCgnWycpO1xuICAgICAgaWYgKHNwbGl0Rmxkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRbZmxkc1tpXV0gIT09IHVuZGVmaW5lZCA/IGVsZW1lbnRbZmxkc1tpXV0gOiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGluZGV4ID0gTnVtYmVyKHNwbGl0Rmxkc1sxXS5zcGxpdCgnXScpWzBdKTtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRbc3BsaXRGbGRzWzBdXSAmJiBBcnJheS5pc0FycmF5KGVsZW1lbnRbc3BsaXRGbGRzWzBdXSkgXG4gICAgICAgICAgPyBlbGVtZW50W3NwbGl0Rmxkc1swXV1baW5kZXhdICE9PSB1bmRlZmluZWQgPyBlbGVtZW50W3NwbGl0Rmxkc1swXV1baW5kZXhdIDogbnVsbFxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZWxlbWVudDtcbn1cbi8vIEFQLTE2QVBSMjUgU2V0cyB0aGUgQVBJIFVSTCB3aXRoIHRoZSBwcm92aWRlZCBhcGlkYXRhXG5hcGlrZXkoYXBpZGF0YTogYW55KXtcbiAgdGhpcy5hcGlVcmwgPSBhcGlkYXRhO1xufVxuLy8gVkQgMjNKQU4yNCBnZXQgY2FsbG91dCBcbiAgcHVibGljIGFwaVJlc3BvbnNlKGVuZHBvaW50OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmKHRoaXMuYXBpVXJsICYmIHRoaXMuYXBpVXJsLnRyaW0oKSAhPT0gJycpe1xuICAgIC8vIEFQLTE2QVBSMjUgSWYgYXBpVXJsIGlzIHNldCwgbWFrZSB0aGUgcmVxdWVzdCB3aXRoIHRoZSBiYXNlIFVSTFxuICAgIHJldHVybiB0aGlzLmh0dHA/LmdldCh0aGlzLmFwaVVybCtlbmRwb2ludCk7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICAvLyBBUC0xNkFQUjI1IElmIG5vIGFwaVVybCBpcyBzZXQsIG1ha2UgdGhlIHJlcXVlc3QgdG8gdGhlIGVuZHBvaW50IGRpcmVjdGx5XG4gICAgICByZXR1cm4gdGhpcy5odHRwPy5nZXQoZW5kcG9pbnQpO1xuICAgIH1cbiAgfVxuXG59XG4iXX0=