bways-report 0.1.6 → 0.1.7

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 (98) hide show
  1. package/README.md +293 -464
  2. package/esm2022/lib/core/config/bways-report-config.mjs +83 -0
  3. package/esm2022/lib/core/index.mjs +2 -1
  4. package/esm2022/lib/core/models/report-definition.model.mjs +1 -1
  5. package/esm2022/lib/core/services/report-data-discovery.service.mjs +6 -3
  6. package/esm2022/lib/core/services/report-session-context.service.mjs +11 -7
  7. package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
  8. package/esm2022/lib/core/utils/data-normalization.util.mjs +87 -1
  9. package/esm2022/lib/core/utils/report-parameter.util.mjs +119 -3
  10. package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +69 -0
  11. package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +98 -0
  12. package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +57 -0
  13. package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +85 -0
  14. package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +163 -0
  15. package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +12 -0
  16. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +4 -23
  17. package/esm2022/lib/data-access/adapters/index.mjs +8 -1
  18. package/esm2022/lib/data-access/contracts/lookup.contract.mjs +1 -1
  19. package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +12 -2
  20. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +5 -5
  21. package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +407 -0
  22. package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +109 -60
  23. package/esm2022/lib/features/designer/components/property-editor/property-editor-action.component.mjs +3 -3
  24. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +110 -20
  25. package/esm2022/lib/features/designer/components/property-editor/property-editor-general.component.mjs +3 -3
  26. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +60 -3
  27. package/esm2022/lib/features/designer/components/property-editor/property-editor-layout.component.mjs +11 -5
  28. package/esm2022/lib/features/designer/components/property-editor/property-editor-report.component.mjs +3 -3
  29. package/esm2022/lib/features/designer/components/property-editor/property-editor-validation.component.mjs +15 -3
  30. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +204 -10
  31. package/esm2022/lib/features/designer/designer.component.mjs +43 -2
  32. package/esm2022/lib/features/designer/services/designer-state.service.mjs +9 -2
  33. package/esm2022/lib/features/embed/bways-report-builder.component.mjs +207 -0
  34. package/esm2022/lib/features/embed/bways-report-menu.component.mjs +433 -0
  35. package/esm2022/lib/features/embed/bways-report-page.component.mjs +204 -0
  36. package/esm2022/lib/features/embed/index.mjs +5 -0
  37. package/esm2022/lib/features/embed/inject-report-menu.mjs +99 -0
  38. package/esm2022/lib/features/index.mjs +2 -1
  39. package/esm2022/lib/features/persistence/services/report-store.service.mjs +43 -5
  40. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +4 -4
  41. package/esm2022/lib/features/routing/index.mjs +2 -2
  42. package/esm2022/lib/features/routing/models/report-route.models.mjs +1 -1
  43. package/esm2022/lib/features/routing/report-routes.mjs +42 -1
  44. package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +6 -8
  45. package/esm2022/lib/features/routing/services/report-menu.service.mjs +14 -4
  46. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +22 -3
  47. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +16 -2
  48. package/esm2022/lib/primitives/components/button/rpt-button.component.mjs +28 -5
  49. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +86 -19
  50. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +8 -1
  51. package/esm2022/lib/primitives/components/index.mjs +2 -1
  52. package/esm2022/lib/primitives/components/number/rpt-number.component.mjs +9 -3
  53. package/esm2022/lib/primitives/components/searchable-select/rpt-searchable-select.component.mjs +386 -0
  54. package/esm2022/lib/provide-reporting.mjs +137 -7
  55. package/fesm2022/bways-report.mjs +4053 -840
  56. package/fesm2022/bways-report.mjs.map +1 -1
  57. package/lib/core/config/bways-report-config.d.ts +161 -0
  58. package/lib/core/index.d.ts +1 -0
  59. package/lib/core/models/report-definition.model.d.ts +16 -0
  60. package/lib/core/services/report-session-context.service.d.ts +1 -0
  61. package/lib/core/tokens/reporting-config.token.d.ts +16 -0
  62. package/lib/core/utils/data-normalization.util.d.ts +10 -0
  63. package/lib/core/utils/report-parameter.util.d.ts +18 -1
  64. package/lib/data-access/adapters/endpoint-datasource.adapter.d.ts +13 -0
  65. package/lib/data-access/adapters/endpoint-lookup.adapter.d.ts +14 -0
  66. package/lib/data-access/adapters/endpoint-masterdata.adapter.d.ts +11 -0
  67. package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +15 -0
  68. package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +21 -0
  69. package/lib/data-access/adapters/endpoint-tokens.d.ts +21 -0
  70. package/lib/data-access/adapters/index.d.ts +7 -0
  71. package/lib/data-access/contracts/lookup.contract.d.ts +2 -2
  72. package/lib/features/designer/components/component-palette/component-palette.component.d.ts +1 -0
  73. package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +1 -1
  74. package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +34 -0
  75. package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +1 -0
  76. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +12 -2
  77. package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +10 -0
  78. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +13 -1
  79. package/lib/features/designer/designer.component.d.ts +4 -0
  80. package/lib/features/embed/bways-report-builder.component.d.ts +48 -0
  81. package/lib/features/embed/bways-report-menu.component.d.ts +40 -0
  82. package/lib/features/embed/bways-report-page.component.d.ts +61 -0
  83. package/lib/features/embed/index.d.ts +4 -0
  84. package/lib/features/embed/inject-report-menu.d.ts +44 -0
  85. package/lib/features/index.d.ts +1 -0
  86. package/lib/features/persistence/services/report-store.service.d.ts +5 -0
  87. package/lib/features/routing/index.d.ts +1 -1
  88. package/lib/features/routing/models/report-route.models.d.ts +3 -0
  89. package/lib/features/routing/report-routes.d.ts +40 -0
  90. package/lib/features/routing/resolvers/report.resolver.d.ts +1 -1
  91. package/lib/features/runtime/dynamic-renderer.component.d.ts +1 -0
  92. package/lib/features/runtime/report-grid-bridge.component.d.ts +1 -1
  93. package/lib/primitives/components/button/rpt-button.component.d.ts +3 -0
  94. package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +16 -3
  95. package/lib/primitives/components/index.d.ts +2 -0
  96. package/lib/primitives/components/searchable-select/rpt-searchable-select.component.d.ts +89 -0
  97. package/lib/provide-reporting.d.ts +22 -6
  98. package/package.json +1 -1
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Endpoint-based persistence adapter.
3
+ *
4
+ * Calls `reportsEndpoint` for CRUD operations on saved report definitions.
5
+ * When `reportsEndpoint` is null, falls back to `LocalStorageReportPersistenceAdapter`.
6
+ */
7
+ import { inject, Injectable } from '@angular/core';
8
+ import { HttpClient } from '@angular/common/http';
9
+ import { of, throwError } from 'rxjs';
10
+ import { catchError } from 'rxjs/operators';
11
+ import { ReportPersistenceAdapter } from '../contracts/report-persistence.contract';
12
+ import { BWAYS_REPORT_ENDPOINTS } from './endpoint-tokens';
13
+ import * as i0 from "@angular/core";
14
+ export class EndpointPersistenceAdapter extends ReportPersistenceAdapter {
15
+ http = inject(HttpClient);
16
+ endpoints = inject(BWAYS_REPORT_ENDPOINTS);
17
+ load(reportId) {
18
+ const url = this.endpoints.reportsEndpoint;
19
+ if (!url) {
20
+ return throwError(() => new Error('[bways-report] No reportsEndpoint configured.'));
21
+ }
22
+ return this.http.get(`${url}/${encodeURIComponent(reportId)}`).pipe(catchError((err) => {
23
+ const msg = err?.error?.message || err?.message || 'Failed to load report';
24
+ return throwError(() => new Error(Array.isArray(msg) ? msg.join(', ') : msg));
25
+ }));
26
+ }
27
+ save(report) {
28
+ const url = this.endpoints.reportsEndpoint;
29
+ if (!url) {
30
+ return throwError(() => new Error('[bways-report] No reportsEndpoint configured.'));
31
+ }
32
+ const payload = {
33
+ ...report,
34
+ id: report.id,
35
+ name: report.name,
36
+ description: report.description,
37
+ category: report.category,
38
+ version: report.version,
39
+ isPublished: report.isPublished,
40
+ definition: report,
41
+ };
42
+ return this.http.post(url, payload).pipe(catchError((err) => {
43
+ const msg = err?.error?.message || err?.message || 'Failed to save report';
44
+ return throwError(() => new Error(Array.isArray(msg) ? msg.join(', ') : msg));
45
+ }));
46
+ }
47
+ list() {
48
+ const url = this.endpoints.reportsEndpoint;
49
+ if (!url) {
50
+ return of([]);
51
+ }
52
+ return this.http.get(url).pipe(catchError((err) => {
53
+ console.warn('[EndpointPersistenceAdapter] Failed to list reports:', err);
54
+ return of([]);
55
+ }));
56
+ }
57
+ delete(reportId) {
58
+ const url = this.endpoints.reportsEndpoint;
59
+ if (!url) {
60
+ return throwError(() => new Error('[bways-report] No reportsEndpoint configured.'));
61
+ }
62
+ return this.http.delete(`${url}/${encodeURIComponent(reportId)}`).pipe(catchError((err) => {
63
+ const msg = err?.error?.message || err?.message || 'Failed to delete report';
64
+ return throwError(() => new Error(Array.isArray(msg) ? msg.join(', ') : msg));
65
+ }));
66
+ }
67
+ publish(reportId, version) {
68
+ const url = this.endpoints.reportsEndpoint;
69
+ if (!url) {
70
+ return throwError(() => new Error('[bways-report] No reportsEndpoint configured.'));
71
+ }
72
+ return this.http
73
+ .post(`${url}/${encodeURIComponent(reportId)}/publish`, { version })
74
+ .pipe(catchError((err) => {
75
+ const msg = err?.error?.message || err?.message || 'Failed to publish report';
76
+ return throwError(() => new Error(Array.isArray(msg) ? msg.join(', ') : msg));
77
+ }));
78
+ }
79
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EndpointPersistenceAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
80
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EndpointPersistenceAdapter });
81
+ }
82
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EndpointPersistenceAdapter, decorators: [{
83
+ type: Injectable
84
+ }] });
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtcGVyc2lzdGVuY2UuYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2RhdGEtYWNjZXNzL2FkYXB0ZXJzL2VuZHBvaW50LXBlcnNpc3RlbmNlLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBS2pELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUczRCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsd0JBQXdCO0lBQ3JELElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUIsU0FBUyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBRTVELElBQUksQ0FBQyxRQUFnQjtRQUNuQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztRQUMzQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQW1CLEdBQUcsR0FBRyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJ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LENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO3dHQS9FVSwwQkFBMEI7NEdBQTFCLDBCQUEwQjs7NEZBQTFCLDBCQUEwQjtrQkFEdEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRW5kcG9pbnQtYmFzZWQgcGVyc2lzdGVuY2UgYWRhcHRlci5cbiAqXG4gKiBDYWxscyBgcmVwb3J0c0VuZHBvaW50YCBmb3IgQ1JVRCBvcGVyYXRpb25zIG9uIHNhdmVkIHJlcG9ydCBkZWZpbml0aW9ucy5cbiAqIFdoZW4gYHJlcG9ydHNFbmRwb2ludGAgaXMgbnVsbCwgZmFsbHMgYmFjayB0byBgTG9jYWxTdG9yYWdlUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyYC5cbiAqL1xuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgUmVwb3J0RGVmaW5pdGlvbixcbiAgUmVwb3J0U3VtbWFyeSxcbn0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWRlZmluaXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyIH0gZnJvbSAnLi4vY29udHJhY3RzL3JlcG9ydC1wZXJzaXN0ZW5jZS5jb250cmFjdCc7XG5pbXBvcnQgeyBCV0FZU19SRVBPUlRfRU5EUE9JTlRTIH0gZnJvbSAnLi9lbmRwb2ludC10b2tlbnMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRW5kcG9pbnRQZXJzaXN0ZW5jZUFkYXB0ZXIgZXh0ZW5kcyBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnRzID0gaW5qZWN0KEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMpO1xuXG4gIGxvYWQocmVwb3J0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8UmVwb3J0RGVmaW5pdGlvbj4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuZW5kcG9pbnRzLnJlcG9ydHNFbmRwb2ludDtcbiAgICBpZiAoIXVybCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdbYndheXMtcmVwb3J0XSBObyByZXBvcnRzRW5kcG9pbnQgY29uZmlndXJlZC4nKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFJlcG9ydERlZmluaXRpb24+KGAke3VybH0vJHtlbmNvZGVVUklDb21wb25lbnQocmVwb3J0SWQpfWApLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgbXNnID0gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBsb2FkIHJlcG9ydCc7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihBcnJheS5pc0FycmF5KG1zZykgPyBtc2cuam9pbignLCAnKSA6IG1zZykpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgc2F2ZShyZXBvcnQ6IFJlcG9ydERlZmluaXRpb24pOiBPYnNlcnZhYmxlPFJlcG9ydERlZmluaXRpb24+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmVuZHBvaW50cy5yZXBvcnRzRW5kcG9pbnQ7XG4gICAgaWYgKCF1cmwpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignW2J3YXlzLXJlcG9ydF0gTm8gcmVwb3J0c0VuZHBvaW50IGNvbmZpZ3VyZWQuJykpO1xuICAgIH1cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgLi4ucmVwb3J0LFxuICAgICAgaWQ6IHJlcG9ydC5pZCxcbiAgICAgIG5hbWU6IHJlcG9ydC5uYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHJlcG9ydC5kZXNjcmlwdGlvbixcbiAgICAgIGNhdGVnb3J5OiByZXBvcnQuY2F0ZWdvcnksXG4gICAgICB2ZXJzaW9uOiByZXBvcnQudmVyc2lvbixcbiAgICAgIGlzUHVibGlzaGVkOiByZXBvcnQuaXNQdWJsaXNoZWQsXG4gICAgICBkZWZpbml0aW9uOiByZXBvcnQsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8UmVwb3J0RGVmaW5pdGlvbj4odXJsLCBwYXlsb2FkKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gc2F2ZSByZXBvcnQnO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoQXJyYXkuaXNBcnJheShtc2cpID8gbXNnLmpvaW4oJywgJykgOiBtc2cpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGxpc3QoKTogT2JzZXJ2YWJsZTxSZXBvcnRTdW1tYXJ5W10+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmVuZHBvaW50cy5yZXBvcnRzRW5kcG9pbnQ7XG4gICAgaWYgKCF1cmwpIHtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFJlcG9ydFN1bW1hcnlbXT4odXJsKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybignW0VuZHBvaW50UGVyc2lzdGVuY2VBZGFwdGVyXSBGYWlsZWQgdG8gbGlzdCByZXBvcnRzOicsIGVycik7XG4gICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWxldGUocmVwb3J0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuZW5kcG9pbnRzLnJlcG9ydHNFbmRwb2ludDtcbiAgICBpZiAoIXVybCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdbYndheXMtcmVwb3J0XSBObyByZXBvcnRzRW5kcG9pbnQgY29uZmlndXJlZC4nKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPHZvaWQ+KGAke3VybH0vJHtlbmNvZGVVUklDb21wb25lbnQocmVwb3J0SWQpfWApLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgbXNnID0gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBkZWxldGUgcmVwb3J0JztcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKEFycmF5LmlzQXJyYXkobXNnKSA/IG1zZy5qb2luKCcsICcpIDogbXNnKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaXNoKHJlcG9ydElkOiBzdHJpbmcsIHZlcnNpb246IG51bWJlcik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuZW5kcG9pbnRzLnJlcG9ydHNFbmRwb2ludDtcbiAgICBpZiAoIXVybCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdbYndheXMtcmVwb3J0XSBObyByZXBvcnRzRW5kcG9pbnQgY29uZmlndXJlZC4nKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PHZvaWQ+KGAke3VybH0vJHtlbmNvZGVVUklDb21wb25lbnQocmVwb3J0SWQpfS9wdWJsaXNoYCwgeyB2ZXJzaW9uIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc3QgbXNnID0gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBwdWJsaXNoIHJlcG9ydCc7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKEFycmF5LmlzQXJyYXkobXNnKSA/IG1zZy5qb2luKCcsICcpIDogbXNnKSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Endpoint-based schema discovery adapter.
3
+ *
4
+ * Instead of the single `apiBaseUrl + /schema/...` pattern, this adapter
5
+ * fetches SPs from `spEndpoint` and tables from `tablesEndpoint`.
6
+ * Columns and parameters are served from the cached list responses
7
+ * (each list item carries its columns/parameters inline).
8
+ */
9
+ import { inject, Injectable } from '@angular/core';
10
+ import { HttpClient } from '@angular/common/http';
11
+ import { Observable, of } from 'rxjs';
12
+ import { catchError, map, shareReplay, tap } from 'rxjs/operators';
13
+ import { ReportSchemaDiscoveryAdapter, } from '../contracts/schema-discovery.contract';
14
+ import { BWAYS_REPORT_ENDPOINTS } from './endpoint-tokens';
15
+ import * as i0 from "@angular/core";
16
+ export class EndpointSchemaDiscoveryAdapter extends ReportSchemaDiscoveryAdapter {
17
+ http = inject(HttpClient);
18
+ endpoints = inject(BWAYS_REPORT_ENDPOINTS);
19
+ /** Cached list responses so we don't re-fetch on every getColumns/getParameters call */
20
+ spCache$ = null;
21
+ tableCache$ = null;
22
+ spItems = [];
23
+ tableItems = [];
24
+ getEntities(types) {
25
+ const needSps = !types || types.includes('stored_procedure');
26
+ const needTables = !types || types.includes('table') || types.includes('view');
27
+ const results = [];
28
+ if (needSps) {
29
+ results.push(this.fetchSps().pipe(map((items) => items.map((sp) => ({
30
+ name: sp.name,
31
+ schema: sp.schema ?? 'dbo',
32
+ type: 'stored_procedure',
33
+ })))));
34
+ }
35
+ if (needTables) {
36
+ results.push(this.fetchTables().pipe(map((items) => {
37
+ let filtered = items;
38
+ if (types && types.length > 0) {
39
+ filtered = items.filter((t) => types.includes((t.type ?? 'table')));
40
+ }
41
+ return filtered.map((t) => ({
42
+ name: t.name,
43
+ schema: t.schema ?? 'dbo',
44
+ type: (t.type ?? 'table'),
45
+ }));
46
+ })));
47
+ }
48
+ if (results.length === 0) {
49
+ return of([]);
50
+ }
51
+ // Combine SP and table results
52
+ if (results.length === 1) {
53
+ return results[0];
54
+ }
55
+ return new Observable((subscriber) => {
56
+ const combined = [];
57
+ let completed = 0;
58
+ const subs = results.map((obs) => obs.subscribe({
59
+ next: (items) => combined.push(...items),
60
+ error: (err) => subscriber.error(err),
61
+ complete: () => {
62
+ completed++;
63
+ if (completed === results.length) {
64
+ subscriber.next(combined);
65
+ subscriber.complete();
66
+ }
67
+ },
68
+ }));
69
+ return () => subs.forEach((s) => s.unsubscribe());
70
+ });
71
+ }
72
+ getColumns(entityName, schema = 'dbo', type) {
73
+ // For SPs, columns come from the first execute response (not available at schema time).
74
+ // We return an empty array; the runtime discovers columns from the result.
75
+ if (type === 'stored_procedure') {
76
+ return of([]);
77
+ }
78
+ // Look in cached table items first
79
+ return this.fetchTables().pipe(map((tables) => {
80
+ const match = tables.find((t) => t.name.toLowerCase() === entityName.toLowerCase() &&
81
+ (t.schema ?? 'dbo').toLowerCase() === schema.toLowerCase());
82
+ if (!match?.columns)
83
+ return [];
84
+ return match.columns.map((col) => ({
85
+ field: col.field ?? col.name,
86
+ label: col.label ?? humanizeColumnName(col.name ?? col.field ?? ''),
87
+ dataType: mapSqlDataType(col.dataType ?? col.sqlType ?? 'string'),
88
+ nullable: col.nullable ?? true,
89
+ }));
90
+ }));
91
+ }
92
+ getParameters(entityName, schema = 'dbo') {
93
+ return this.fetchSps().pipe(map((sps) => {
94
+ const match = sps.find((sp) => sp.name.toLowerCase() === entityName.toLowerCase() &&
95
+ (sp.schema ?? 'dbo').toLowerCase() === schema.toLowerCase());
96
+ if (!match?.parameters)
97
+ return [];
98
+ return match.parameters.map((p) => ({
99
+ name: p.name,
100
+ friendlyLabel: p.friendlyLabel,
101
+ description: p.description,
102
+ dataType: mapSqlDataType(p.dataType ?? p.sqlType ?? 'string'),
103
+ sqlType: p.sqlType ?? 'VARCHAR',
104
+ required: p.required ?? false,
105
+ defaultValue: p.defaultValue,
106
+ }));
107
+ }));
108
+ }
109
+ /** Fetch and cache the SP list from the endpoint */
110
+ fetchSps() {
111
+ if (!this.spCache$) {
112
+ if (!this.endpoints?.spEndpoint) {
113
+ return of([]);
114
+ }
115
+ this.spCache$ = this.http.get(this.endpoints.spEndpoint).pipe(tap((items) => (this.spItems = items)), catchError((err) => {
116
+ console.warn('[EndpointSchemaDiscovery] Failed to fetch SPs:', err);
117
+ return of([]);
118
+ }), shareReplay({ bufferSize: 1, refCount: true }));
119
+ }
120
+ return this.spCache$;
121
+ }
122
+ /** Fetch and cache the tables list from the endpoint */
123
+ fetchTables() {
124
+ if (!this.tableCache$) {
125
+ if (!this.endpoints?.tablesEndpoint) {
126
+ return of([]);
127
+ }
128
+ this.tableCache$ = this.http.get(this.endpoints.tablesEndpoint).pipe(tap((items) => (this.tableItems = items)), catchError((err) => {
129
+ console.warn('[EndpointSchemaDiscovery] Failed to fetch tables:', err);
130
+ return of([]);
131
+ }), shareReplay({ bufferSize: 1, refCount: true }));
132
+ }
133
+ return this.tableCache$;
134
+ }
135
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EndpointSchemaDiscoveryAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
136
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EndpointSchemaDiscoveryAdapter });
137
+ }
138
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EndpointSchemaDiscoveryAdapter, decorators: [{
139
+ type: Injectable
140
+ }] });
141
+ /** Maps SQL type strings to the four canonical data types */
142
+ function mapSqlDataType(raw) {
143
+ const lower = (raw ?? '').toLowerCase().trim();
144
+ if (['int', 'integer', 'bigint', 'smallint', 'tinyint', 'decimal', 'numeric', 'float', 'real', 'money', 'smallmoney', 'number'].includes(lower)) {
145
+ return 'number';
146
+ }
147
+ if (['date', 'datetime', 'datetime2', 'smalldatetime', 'datetimeoffset', 'time', 'timestamp'].includes(lower)) {
148
+ return 'date';
149
+ }
150
+ if (['bit', 'boolean', 'bool'].includes(lower)) {
151
+ return 'boolean';
152
+ }
153
+ return 'string';
154
+ }
155
+ /** Creates a human-readable label from a column name */
156
+ function humanizeColumnName(name) {
157
+ return name
158
+ .replace(/([a-z])([A-Z])/g, '$1 $2')
159
+ .replace(/[_-]+/g, ' ')
160
+ .replace(/\b\w/g, (c) => c.toUpperCase())
161
+ .trim();
162
+ }
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtc2NoZW1hLWRpc2NvdmVyeS5hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZGF0YS1hY2Nlc3MvYWRhcHRlcnMvZW5kcG9pbnQtc2NoZW1hLWRpc2NvdmVyeS5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFLTCw0QkFBNEIsR0FDN0IsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFzQzNELE1BQU0sT0FBTyw4QkFBK0IsU0FBUSw0QkFBNEI7SUFDN0QsSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQixTQUFTLEdBQXlCLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBRWxGLHdGQUF3RjtJQUNoRixRQUFRLEdBQW9DLElBQUksQ0FBQztJQUNqRCxXQUFXLEdBQXVDLElBQUksQ0FBQztJQUN2RCxPQUFPLEdBQWlCLEVBQUUsQ0FBQztJQUMzQixVQUFVLEdBQW9CLEVBQUUsQ0FBQztJQUV6QyxXQUFXLENBQUMsS0FBNEI7UUFDdEMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzdELE1BQU0sVUFBVSxHQUFH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QUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9DLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsd0RBQXdEO0FBQ3hELFNBQVMsa0JBQWtCLENBQUMsSUFBWTtJQUN0QyxPQUFPLElBQUk7U0FDUixPQUFPLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDO1NBQ25DLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO1NBQ3RCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN4QyxJQUFJLEVBQUUsQ0FBQztBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVuZHBvaW50LWJhc2VkIHNjaGVtYSBkaXNjb3ZlcnkgYWRhcHRlci5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBzaW5nbGUgYGFwaUJhc2VVcmwgKyAvc2NoZW1hLy4uLmAgcGF0dGVybiwgdGhpcyBhZGFwdGVyXG4gKiBmZXRjaGVzIFNQcyBmcm9tIGBzcEVuZHBvaW50YCBhbmQgdGFibGVzIGZyb20gYHRhYmxlc0VuZHBvaW50YC5cbiAqIENvbHVtbnMgYW5kIHBhcmFtZXRlcnMgYXJlIHNlcnZlZCBmcm9tIHRoZSBjYWNoZWQgbGlzdCByZXNwb25zZXNcbiAqIChlYWNoIGxpc3QgaXRlbSBjYXJyaWVzIGl0cyBjb2x1bW5zL3BhcmFtZXRlcnMgaW5saW5lKS5cbiAqL1xuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBzaGFyZVJlcGxheSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRGF0YWJhc2VFbnRpdHlNZXRhZGF0YSxcbiAgRGF0YWJhc2VFbnRpdHlUeXBlLFxuICBFbnRpdHlDb2x1bW5NZXRhZGF0YSxcbiAgUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGEsXG4gIFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsXG59IGZyb20gJy4uL2NvbnRyYWN0cy9zY2hlbWEtZGlzY292ZXJ5LmNvbnRyYWN0JztcbmltcG9ydCB7IEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMgfSBmcm9tICcuL2VuZHBvaW50LXRva2Vucyc7XG5pbXBvcnQgdHlwZSB7IEJ3YXlzUmVwb3J0RW5kcG9pbnRzIH0gZnJvbSAnLi9lbmRwb2ludC10b2tlbnMnO1xuXG4vKipcbiAqIFJhdyBTUCBpdGVtIGFzIHJldHVybmVkIGJ5IHRoZSBob3N0J3MgYHNwRW5kcG9pbnRgLlxuICovXG5pbnRlcmZhY2UgU3BMaXN0SXRlbSB7XG4gIG5hbWU6IHN0cmluZztcbiAgc2NoZW1hPzogc3RyaW5nO1xuICBwYXJhbWV0ZXJzPzogQXJyYXk8e1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzcWxUeXBlPzogc3RyaW5nO1xuICAgIGRhdGFUeXBlPzogc3RyaW5nO1xuICAgIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgICBkZWZhdWx0VmFsdWU/OiB1bmtub3duO1xuICAgIGZyaWVuZGx5TGFiZWw/OiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIH0+O1xufVxuXG4vKipcbiAqIFJhdyB0YWJsZS92aWV3IGl0ZW0gYXMgcmV0dXJuZWQgYnkgdGhlIGhvc3QncyBgdGFibGVzRW5kcG9pbnRgLlxuICovXG5pbnRlcmZhY2UgVGFibGVMaXN0SXRlbSB7XG4gIG5hbWU6IHN0cmluZztcbiAgc2NoZW1hPzogc3RyaW5nO1xuICB0eXBlPzogJ3RhYmxlJyB8ICd2aWV3JztcbiAgY29sdW1ucz86IEFycmF5PHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZmllbGQ/OiBzdHJpbmc7XG4gICAgc3FsVHlwZT86IHN0cmluZztcbiAgICBkYXRhVHlwZT86IHN0cmluZztcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICBudWxsYWJsZT86IGJvb2xlYW47XG4gIH0+O1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRW5kcG9pbnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyIGV4dGVuZHMgUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHM6IEJ3YXlzUmVwb3J0RW5kcG9pbnRzID0gaW5qZWN0KEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMpO1xuXG4gIC8qKiBDYWNoZWQgbGlzdCByZXNwb25zZXMgc28gd2UgZG9uJ3QgcmUtZmV0Y2ggb24gZXZlcnkgZ2V0Q29sdW1ucy9nZXRQYXJhbWV0ZXJzIGNhbGwgKi9cbiAgcHJpdmF0ZSBzcENhY2hlJDogT2JzZXJ2YWJsZTxTcExpc3RJdGVtW10+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdGFibGVDYWNoZSQ6IE9ic2VydmFibGU8VGFibGVMaXN0SXRlbVtdPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHNwSXRlbXM6IFNwTGlzdEl0ZW1bXSA9IFtdO1xuICBwcml2YXRlIHRhYmxlSXRlbXM6IFRhYmxlTGlzdEl0ZW1bXSA9IFtdO1xuXG4gIGdldEVudGl0aWVzKHR5cGVzPzogRGF0YWJhc2VFbnRpdHlUeXBlW10pOiBPYnNlcnZhYmxlPERhdGFiYXNlRW50aXR5TWV0YWRhdGFbXT4ge1xuICAgIGNvbnN0IG5lZWRTcHMgPSAhdHlwZXMgfHwgdHlwZXMuaW5jbHVkZXMoJ3N0b3JlZF9wcm9jZWR1cmUnKTtcbiAgICBjb25zdCBuZWVkVGFibGVzID0gIXR5cGVzIHx8IHR5cGVzLmluY2x1ZGVzKCd0YWJsZScpIHx8IHR5cGVzLmluY2x1ZGVzKCd2aWV3Jyk7XG5cbiAgICBjb25zdCByZXN1bHRzOiBPYnNlcnZhYmxlPERhdGFiYXNlRW50aXR5TWV0YWRhdGFbXT5bXSA9IFtdO1xuXG4gICAgaWYgKG5lZWRTcHMpIHtcbiAgICAgIHJlc3VsdHMucHVzaChcbiAgICAgICAgdGhpcy5mZXRjaFNwcygpLnBpcGUoXG4gICAgICAgICAgbWFwKChpdGVtcykgPT5cbiAgICAgICAgICAgIGl0ZW1zLm1hcCgoc3ApID0+ICh7XG4gICAgICAgICAgICAgIG5hbWU6IHNwLm5hbWUsXG4gICAgICAgICAgICAgIHNjaGVtYTogc3Auc2NoZW1hID8/ICdkYm8nLFxuICAgICAgICAgICAgICB0eXBlOiAnc3RvcmVkX3Byb2NlZHVyZScgYXMgRGF0YWJhc2VFbnRpdHlUeXBlLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChuZWVkVGFibGVzKSB7XG4gICAgICByZXN1bHRzLnB1c2goXG4gICAgICAgIHRoaXMuZmV0Y2hUYWJsZXMoKS5waXBlKFxuICAgICAgICAgIG1hcCgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgIGxldCBmaWx0ZXJlZCA9IGl0ZW1zO1xuICAgICAgICAgICAgaWYgKHR5cGVzICYmIHR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZmlsdGVyZWQgPSBpdGVtcy5maWx0ZXIoKHQpID0+IHR5cGVzLmluY2x1ZGVzKCh0LnR5cGUgPz8gJ3RhYmxlJykgYXMgRGF0YWJhc2VFbnRpdHlUeXBlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKCh0KSA9PiAoe1xuICAgICAgICAgICAgICBuYW1lOiB0Lm5hbWUsXG4gICAgICAgICAgICAgIHNjaGVtYTogdC5zY2hlbWEgPz8gJ2RibycsXG4gICAgICAgICAgICAgIHR5cGU6ICh0LnR5cGUgPz8gJ3RhYmxlJykgYXMgRGF0YWJhc2VFbnRpdHlUeXBlLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cblxuICAgIC8vIENvbWJpbmUgU1AgYW5kIHRhYmxlIHJlc3VsdHNcbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiByZXN1bHRzWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxEYXRhYmFzZUVudGl0eU1ldGFkYXRhW10+KChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBjb25zdCBjb21iaW5lZDogRGF0YWJhc2VFbnRpdHlNZXRhZGF0YVtdID0gW107XG4gICAgICBsZXQgY29tcGxldGVkID0gMDtcbiAgICAgIGNvbnN0IHN1YnMgPSByZXN1bHRzLm1hcCgob2JzKSA9PlxuICAgICAgICBvYnMuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoaXRlbXMpID0+IGNvbWJpbmVkLnB1c2goLi4uaXRlbXMpLFxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiBzdWJzY3JpYmVyLmVycm9yKGVyciksXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbXBsZXRlZCsrO1xuICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gcmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGNvbWJpbmVkKTtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgcmV0dXJuICgpID0+IHN1YnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENvbHVtbnMoXG4gICAgZW50aXR5TmFtZTogc3RyaW5nLFxuICAgIHNjaGVtYSA9ICdkYm8nLFxuICAgIHR5cGU/OiBEYXRhYmFzZUVudGl0eVR5cGVcbiAgKTogT2JzZXJ2YWJsZTxFbnRpdHlDb2x1bW5NZXRhZGF0YVtdPiB7XG4gICAgLy8gRm9yIFNQcywgY29sdW1ucyBjb21lIGZyb20gdGhlIGZpcnN0IGV4ZWN1dGUgcmVzcG9uc2UgKG5vdCBhdmFpbGFibGUgYXQgc2NoZW1hIHRpbWUpLlxuICAgIC8vIFdlIHJldHVybiBhbiBlbXB0eSBhcnJheTsgdGhlIHJ1bnRpbWUgZGlzY292ZXJzIGNvbHVtbnMgZnJvbSB0aGUgcmVzdWx0LlxuICAgIGlmICh0eXBlID09PSAnc3RvcmVkX3Byb2NlZHVyZScpIHtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfVxuXG4gICAgLy8gTG9vayBpbiBjYWNoZWQgdGFibGUgaXRlbXMgZmlyc3RcbiAgICByZXR1cm4gdGhpcy5mZXRjaFRhYmxlcygpLnBpcGUoXG4gICAgICBtYXAoKHRhYmxlcykgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHRhYmxlcy5maW5kKFxuICAgICAgICAgICh0KSA9PiB0Lm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZW50aXR5TmFtZS50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICAgICAgICAgICh0LnNjaGVtYSA/PyAnZGJvJykudG9Mb3dlckNhc2UoKSA9PT0gc2NoZW1hLnRvTG93ZXJDYXNlKClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFtYXRjaD8uY29sdW1ucykgcmV0dXJuIFtdO1xuICAgICAgICByZXR1cm4gbWF0Y2guY29sdW1ucy5tYXAoKGNvbCkgPT4gKHtcbiAgICAgICAgICBmaWVsZDogY29sLmZpZWxkID8/IGNvbC5uYW1lLFxuICAgICAgICAgIGxhYmVsOiBjb2wubGFiZWwgPz8gaHVtYW5pemVDb2x1bW5OYW1lKGNvbC5uYW1lID8/IGNvbC5maWVsZCA/PyAnJyksXG4gICAgICAgICAgZGF0YVR5cGU6IG1hcFNxbERhdGFUeXBlKGNvbC5kYXRhVHlwZSA/PyBjb2wuc3FsVHlwZSA/PyAnc3RyaW5nJyksXG4gICAgICAgICAgbnVsbGFibGU6IGNvbC5udWxsYWJsZSA/PyB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRQYXJhbWV0ZXJzKFxuICAgIGVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBzY2hlbWEgPSAnZGJvJ1xuICApOiBPYnNlcnZhYmxlPFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhW10+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaFNwcygpLnBpcGUoXG4gICAgICBtYXAoKHNwcykgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHNwcy5maW5kKFxuICAgICAgICAgIChzcCkgPT4gc3AubmFtZS50b0xvd2VyQ2FzZSgpID09PSBlbnRpdHlOYW1lLnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgICAgICAgICAgIChzcC5zY2hlbWEgPz8gJ2RibycpLnRvTG93ZXJDYXNlKCkgPT09IHNjaGVtYS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICk7XG4gICAgICAgIGlmICghbWF0Y2g/LnBhcmFtZXRlcnMpIHJldHVybiBbXTtcbiAgICAgICAgcmV0dXJuIG1hdGNoLnBhcmFtZXRlcnMubWFwKChwKSA9PiAoe1xuICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICBmcmllbmRseUxhYmVsOiBwLmZyaWVuZGx5TGFiZWwsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHAuZGVzY3JpcHRpb24sXG4gICAgICAgICAgZGF0YVR5cGU6IG1hcFNxbERhdGFUeXBlKHAuZGF0YVR5cGUgPz8gcC5zcWxUeXBlID8/ICdzdHJpbmcnKSxcbiAgICAgICAgICBzcWxUeXBlOiBwLnNxbFR5cGUgPz8gJ1ZBUkNIQVInLFxuICAgICAgICAgIHJlcXVpcmVkOiBwLnJlcXVpcmVkID8/IGZhbHNlLFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogcC5kZWZhdWx0VmFsdWUsXG4gICAgICAgIH0pKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBGZXRjaCBhbmQgY2FjaGUgdGhlIFNQIGxpc3QgZnJvbSB0aGUgZW5kcG9pbnQgKi9cbiAgcHJpdmF0ZSBmZXRjaFNwcygpOiBPYnNlcnZhYmxlPFNwTGlzdEl0ZW1bXT4ge1xuICAgIGlmICghdGhpcy5zcENhY2hlJCkge1xuICAgICAgaWYgKCF0aGlzLmVuZHBvaW50cz8uc3BFbmRwb2ludCkge1xuICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgfVxuICAgICAgdGhpcy5zcENhY2hlJCA9IHRoaXMuaHR0cC5nZXQ8U3BMaXN0SXRlbVtdPih0aGlzLmVuZHBvaW50cy5zcEVuZHBvaW50KS5waXBlKFxuICAgICAgICB0YXAoKGl0ZW1zKSA9PiAodGhpcy5zcEl0ZW1zID0gaXRlbXMpKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdbRW5kcG9pbnRTY2hlbWFEaXNjb3ZlcnldIEZhaWxlZCB0byBmZXRjaCBTUHM6JywgZXJyKTtcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3BDYWNoZSQ7XG4gIH1cblxuICAvKiogRmV0Y2ggYW5kIGNhY2hlIHRoZSB0YWJsZXMgbGlzdCBmcm9tIHRoZSBlbmRwb2ludCAqL1xuICBwcml2YXRlIGZldGNoVGFibGVzKCk6IE9ic2VydmFibGU8VGFibGVMaXN0SXRlbVtdPiB7XG4gICAgaWYgKCF0aGlzLnRhYmxlQ2FjaGUkKSB7XG4gICAgICBpZiAoIXRoaXMuZW5kcG9pbnRzPy50YWJsZXNFbmRwb2ludCkge1xuICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgfVxuICAgICAgdGhpcy50YWJsZUNhY2hlJCA9IHRoaXMuaHR0cC5nZXQ8VGFibGVMaXN0SXRlbVtdPih0aGlzLmVuZHBvaW50cy50YWJsZXNFbmRwb2ludCkucGlwZShcbiAgICAgICAgdGFwKChpdGVtcykgPT4gKHRoaXMudGFibGVJdGVtcyA9IGl0ZW1zKSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUud2FybignW0VuZHBvaW50U2NoZW1hRGlzY292ZXJ5XSBGYWlsZWQgdG8gZmV0Y2ggdGFibGVzOicsIGVycik7XG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfSksXG4gICAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRhYmxlQ2FjaGUkO1xuICB9XG59XG5cbi8qKiBNYXBzIFNRTCB0eXBlIHN0cmluZ3MgdG8gdGhlIGZvdXIgY2Fub25pY2FsIGRhdGEgdHlwZXMgKi9cbmZ1bmN0aW9uIG1hcFNxbERhdGFUeXBlKHJhdzogc3RyaW5nKTogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdkYXRlJyB8ICdib29sZWFuJyB7XG4gIGNvbnN0IGxvd2VyID0gKHJhdyA/PyAnJykudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIGlmIChbJ2ludCcsICdpbnRlZ2VyJywgJ2JpZ2ludCcsICdzbWFsbGludCcsICd0aW55aW50JywgJ2RlY2ltYWwnLCAnbnVtZXJpYycsICdmbG9hdCcsICdyZWFsJywgJ21vbmV5JywgJ3NtYWxsbW9uZXknLCAnbnVtYmVyJ10uaW5jbHVkZXMobG93ZXIpKSB7XG4gICAgcmV0dXJuICdudW1iZXInO1xuICB9XG4gIGlmIChbJ2RhdGUnLCAnZGF0ZXRpbWUnLCAnZGF0ZXRpbWUyJywgJ3NtYWxsZGF0ZXRpbWUnLCAnZGF0ZXRpbWVvZmZzZXQnLCAndGltZScsICd0aW1lc3RhbXAnXS5pbmNsdWRlcyhsb3dlcikpIHtcbiAgICByZXR1cm4gJ2RhdGUnO1xuICB9XG4gIGlmIChbJ2JpdCcsICdib29sZWFuJywgJ2Jvb2wnXS5pbmNsdWRlcyhsb3dlcikpIHtcbiAgICByZXR1cm4gJ2Jvb2xlYW4nO1xuICB9XG4gIHJldHVybiAnc3RyaW5nJztcbn1cblxuLyoqIENyZWF0ZXMgYSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmcm9tIGEgY29sdW1uIG5hbWUgKi9cbmZ1bmN0aW9uIGh1bWFuaXplQ29sdW1uTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbmFtZVxuICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEgJDInKVxuICAgIC5yZXBsYWNlKC9bXy1dKy9nLCAnICcpXG4gICAgLnJlcGxhY2UoL1xcYlxcdy9nLCAoYykgPT4gYy50b1VwcGVyQ2FzZSgpKVxuICAgIC50cmltKCk7XG59XG4iXX0=
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Injection tokens for the endpoint-based adapter configuration.
3
+ *
4
+ * When the developer uses `BwaysReportConfig` (simple config), these tokens
5
+ * are populated with the endpoint URLs so adapters can inject them.
6
+ */
7
+ import { InjectionToken } from '@angular/core';
8
+ /**
9
+ * Injection token for the endpoint URLs.
10
+ */
11
+ export const BWAYS_REPORT_ENDPOINTS = new InjectionToken('BWAYS_REPORT_ENDPOINTS');
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtdG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZGF0YS1hY2Nlc3MvYWRhcHRlcnMvZW5kcG9pbnQtdG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWEvQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksY0FBYyxDQUN0RCx3QkFBd0IsQ0FDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW5qZWN0aW9uIHRva2VucyBmb3IgdGhlIGVuZHBvaW50LWJhc2VkIGFkYXB0ZXIgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBXaGVuIHRoZSBkZXZlbG9wZXIgdXNlcyBgQndheXNSZXBvcnRDb25maWdgIChzaW1wbGUgY29uZmlnKSwgdGhlc2UgdG9rZW5zXG4gKiBhcmUgcG9wdWxhdGVkIHdpdGggdGhlIGVuZHBvaW50IFVSTHMgc28gYWRhcHRlcnMgY2FuIGluamVjdCB0aGVtLlxuICovXG5cbmltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogRW5kcG9pbnQgVVJMcyB1c2VkIGJ5IHRoZSBlbmRwb2ludC1iYXNlZCBhZGFwdGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCd2F5c1JlcG9ydEVuZHBvaW50cyB7XG4gIHNwRW5kcG9pbnQ6IHN0cmluZztcbiAgdGFibGVzRW5kcG9pbnQ6IHN0cmluZztcbiAgZXhlY3V0ZUVuZHBvaW50OiBzdHJpbmc7XG4gIGxvb2t1cEVuZHBvaW50Pzogc3RyaW5nIHwgbnVsbDtcbiAgcmVwb3J0c0VuZHBvaW50OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiBmb3IgdGhlIGVuZHBvaW50IFVSTHMuXG4gKi9cbmV4cG9ydCBjb25zdCBCV0FZU19SRVBPUlRfRU5EUE9JTlRTID0gbmV3IEluamVjdGlvblRva2VuPEJ3YXlzUmVwb3J0RW5kcG9pbnRzPihcbiAgJ0JXQVlTX1JFUE9SVF9FTkRQT0lOVFMnXG4pO1xuIl19
@@ -5,7 +5,7 @@ import { catchError, finalize, map, shareReplay, tap } from 'rxjs/operators';
5
5
  import { ReportLookupAdapter, } from '../contracts/lookup.contract';
6
6
  import { REPORTING_CONFIG } from '../../core/tokens/reporting-config.token';
7
7
  import { ReportSessionContextService } from '../../core/services/report-session-context.service';
8
- import { extractRowArray } from '../../core/utils/data-normalization.util';
8
+ import { extractLookupOptionItem, extractRowArray } from '../../core/utils/data-normalization.util';
9
9
  import * as i0 from "@angular/core";
10
10
  /**
11
11
  * Built-in HTTP adapter for fetching dropdown options from backend database tables and SPs.
@@ -79,14 +79,7 @@ export class HttpReportLookupAdapter extends ReportLookupAdapter {
79
79
  }
80
80
  const obs$ = this.http.post(`${baseUrl}/lookup`, request, { headers }).pipe(map((response) => {
81
81
  const rawItems = extractRowArray(response);
82
- return rawItems.map((r) => {
83
- if (r && typeof r === 'object' && 'value' in r) {
84
- return r;
85
- }
86
- const val = r?.[request.valueField] ?? r?.id ?? r?.code ?? String(r ?? '');
87
- const lbl = r?.[request.displayField] ?? r?.name ?? r?.title ?? String(val);
88
- return { value: val, label: lbl, raw: r };
89
- });
82
+ return rawItems.map((r) => extractLookupOptionItem(r, request.valueField, request.displayField));
90
83
  }), tap((items) => {
91
84
  // Never cache empty results: parameters may simply not have been filled yet.
92
85
  if (items.length > 0)
@@ -116,19 +109,7 @@ export class HttpReportLookupAdapter extends ReportLookupAdapter {
116
109
  resolveMockOptions(req) {
117
110
  const entity = req.entityName || '';
118
111
  const records = this.mockDataStore[entity] ?? [];
119
- const valKey = req.valueField;
120
- const labelKey = req.displayField;
121
- let filteredRecords = records;
122
- const branchParam = req.parameters?.['@BranchId'] ?? req.parameters?.['branchId'];
123
- if (branchParam !== undefined && branchParam !== null && branchParam !== '') {
124
- const matchNum = Number(branchParam);
125
- filteredRecords = records.filter((r) => r['branchId'] === undefined || r['branchId'] === matchNum || r['branch'] === String(branchParam));
126
- }
127
- return filteredRecords.map((r) => ({
128
- value: r[valKey] ?? String(r['id'] ?? r['code'] ?? ''),
129
- label: r[labelKey] ?? String(r['name'] ?? r['title'] ?? ''),
130
- raw: r,
131
- }));
112
+ return records.map((r) => extractLookupOptionItem(r, req.valueField, req.displayField));
132
113
  }
133
114
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HttpReportLookupAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
134
115
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HttpReportLookupAdapter });
@@ -138,4 +119,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
138
119
  }] });
139
120
  /** Convenience alias */
140
121
  export const HttpLookupAdapter = HttpReportLookupAdapter;
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1sb29rdXAuYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2RhdGEtYWNjZXNzL2FkYXB0ZXJzL2h0dHAtbG9va3VwLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFHTCxtQkFBbUIsR0FDcEIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7O0FBTzNFOzs7R0FHRztBQUVILE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxtQkFBbUI7SUFDN0MsSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5QyxNQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEQsY0FBYyxHQUFHLE1BQU0sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXpFLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBc0IsQ0FBQztJQUN0QyxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQTBDLENBQUM7SUFFN0QsYUFBYSxHQUFzRDtRQUNsRixTQUFTLEVBQUU7WUFDVCxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNsRixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNuRixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNsRixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUN0RixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNuRixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtTQUNuRjtRQUNELFFBQVEsRUFBRTtZQUNSLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRTtZQUNuRixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUU7WUFDdkUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFO1lBQzNFLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRTtTQUNqRjtRQUNELFFBQVEsRUFBRTtZQUNSLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO1lBQzVGLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO1lBQ3ZGLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsMEJBQTBCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQy9GLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUU7U0FDcEc7UUFDRCxjQUFjLEVBQUU7WUFDZCxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFO1lBQ3BELEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUU7WUFDdkQsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRTtZQUM3QyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFO1NBQzlDO1FBQ0QsbUJBQW1CLEVBQUU7WUFDbkIsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDckUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSx3QkFBd0IsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7WUFDeEUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSx3QkFBd0IsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDdEUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7U0FDeEU7UUFDRCxtQkFBbUIsRUFBRTtZQUNuQixFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQ25DLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQ2hDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO1NBQzVCO0tBQ0YsQ0FBQztJQUVGLFlBQVksQ0FBQyxPQUEyQjtRQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXZCLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDckMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDO1FBQ3hDLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUM1RCxJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hDLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3hFLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RSxDQUFDO1lBQ0QsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDdEUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBVSxHQUFHLE9BQU8sU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNsRixHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDZixNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzNDLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO29CQUM3QixJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUMvQyxPQUFPLENBQXFCLENBQUM7b0JBQy9CLENBQUM7b0JBQ0QsTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDNUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ1osNkVBQTZFO2dCQUM3RSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2pCLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksdUJBQXVCLENBQUM7Z0JBQzNFLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEYsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO1lBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVPLFFBQVEsQ0FBQyxHQUFXLEVBQUUsSUFBd0IsRUFBRSxVQUFVLEdBQUcsR0FBRztRQUN0RSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDbEIsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxVQUFVLEdBQUcsSUFBSTtZQUN6QyxJQUFJO1NBQ0wsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEdBQXVCO1FBQzlDLE9BQU8sR0FBRyxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNqSyxDQUFDO0lBRU8sa0JBQWtCLENBQUMsR0FBdUI7UUFDaEQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztRQUM5QixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO1FBRWxDLElBQUksZUFBZSxHQUFHLE9BQU8sQ0FBQztRQUM5QixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xGLElBQUksV0FBVyxLQUFLLFNBQVMsSUFBSSxXQUFXLEtBQUssSUFBSSxJQUFJLFdBQVcsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUM1RSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQzlCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FDeEcsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakMsS0FBSyxFQUFHLENBQUMsQ0FBQyxNQUFNLENBQXFCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNFLEtBQUssRUFBRyxDQUFDLENBQUMsUUFBUSxDQUFZLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZFLEdBQUcsRUFBRSxDQUFDO1NBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO3dHQTNJVSx1QkFBdUI7NEdBQXZCLHVCQUF1Qjs7NEZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVTs7QUErSVgsd0JBQXdCO0FBQ3hCLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgbWFwLCBzaGFyZVJlcGxheSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgTG9va3VwT3B0aW9uSXRlbSxcbiAgTG9va3VwUXVlcnlSZXF1ZXN0LFxuICBSZXBvcnRMb29rdXBBZGFwdGVyLFxufSBmcm9tICcuLi9jb250cmFjdHMvbG9va3VwLmNvbnRyYWN0JztcbmltcG9ydCB7IFJFUE9SVElOR19DT05GSUcgfSBmcm9tICcuLi8uLi9jb3JlL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IGV4dHJhY3RSb3dBcnJheSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvZGF0YS1ub3JtYWxpemF0aW9uLnV0aWwnO1xuXG5pbnRlcmZhY2UgQ2FjaGVFbnRyeSB7XG4gIGV4cGlyZXNBdDogbnVtYmVyO1xuICBkYXRhOiBMb29rdXBPcHRpb25JdGVtW107XG59XG5cbi8qKlxuICogQnVpbHQtaW4gSFRUUCBhZGFwdGVyIGZvciBmZXRjaGluZyBkcm9wZG93biBvcHRpb25zIGZyb20gYmFja2VuZCBkYXRhYmFzZSB0YWJsZXMgYW5kIFNQcy5cbiAqIEluY2x1ZGVzIGluLW1lbW9yeSBjYWNoaW5nIHdpdGggVFRMLCBpbi1mbGlnaHQgcmVxdWVzdCBkZWR1cGxpY2F0aW9uLCBhbmQgZmFsbGJhY2sgbW9jayBkYXRhLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSHR0cFJlcG9ydExvb2t1cEFkYXB0ZXIgZXh0ZW5kcyBSZXBvcnRMb29rdXBBZGFwdGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KFJFUE9SVElOR19DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQ2FjaGVFbnRyeT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbkZsaWdodCA9IG5ldyBNYXA8c3RyaW5nLCBPYnNlcnZhYmxlPExvb2t1cE9wdGlvbkl0ZW1bXT4+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtb2NrRGF0YVN0b3JlOiBSZWNvcmQ8c3RyaW5nLCBBcnJheTx7IFtrZXk6IHN0cmluZ106IHVua25vd24gfT4+ID0ge1xuICAgIEN1c3RvbWVyczogW1xuICAgICAgeyBjdXN0b21lcklkOiAxMDEsIGN1c3RvbWVyTmFtZTogJ0FjbWUgQ29ycG9yYXRpb24nLCBicmFuY2hJZDogMSwgaXNBY3RpdmU6IHRydWUgfSxcbiAgICAgIHsgY3VzdG9tZXJJZDogMTAyLCBjdXN0b21lck5hbWU6ICdHbG9iZXggSW5kdXN0cmllcycsIGJyYW5jaElkOiAyLCBpc0FjdGl2ZTogdHJ1ZSB9LFxuICAgICAgeyBjdXN0b21lcklkOiAxMDMsIGN1c3RvbWVyTmFtZTogJ0luaXRlY2ggU29mdHdhcmUnLCBicmFuY2hJZDogMSwgaXNBY3RpdmU6IHRydWUgfSxcbiAgICAgIHsgY3VzdG9tZXJJZDogMTA0LCBjdXN0b21lck5hbWU6ICdVbWJyZWxsYSBDb3Jwb3JhdGlvbicsIGJyYW5jaElkOiAzLCBpc0FjdGl2ZTogdHJ1ZSB9LFxuICAgICAgeyBjdXN0b21lcklkOiAxMDUsIGN1c3RvbWVyTmFtZTogJ1dheW5lIEVudGVycHJpc2VzJywgYnJhbmNoSWQ6IDIsIGlzQWN0aXZlOiB0cnVlIH0sXG4gICAgICB7IGN1c3RvbWVySWQ6IDEwNiwgY3VzdG9tZXJOYW1lOiAnU3RhcmsgSW5kdXN0cmllcycsIGJyYW5jaElkOiAxLCBpc0FjdGl2ZTogdHJ1ZSB9LFxuICAgIF0sXG4gICAgQnJhbmNoZXM6IFtcbiAgICAgIHsgYnJhbmNoSWQ6IDEsIGJyYW5jaE5hbWU6ICdOb3J0aCBBbWVyaWNhIEhRIChOZXcgWW9yayknLCByZWdpb246ICdOb3J0aCBBbWVyaWNhJyB9LFxuICAgICAgeyBicmFuY2hJZDogMiwgYnJhbmNoTmFtZTogJ0VNRUEgRGl2aXNpb24gKExvbmRvbiknLCByZWdpb246ICdFdXJvcGUnIH0sXG4gICAgICB7IGJyYW5jaElkOiAzLCBicmFuY2hOYW1lOiAnQVBBQyBIdWIgKFNpbmdhcG9yZSknLCByZWdpb246ICdBc2lhIFBhY2lmaWMnIH0sXG4gICAgICB7IGJyYW5jaElkOiA0LCBicmFuY2hOYW1lOiAnTEFUQU0gT2ZmaWNlIChTw6NvIFBhdWxvKScsIHJlZ2lvbjogJ0xhdGluIEFtZXJpY2EnIH0sXG4gICAgXSxcbiAgICBQcm9kdWN0czogW1xuICAgICAgeyBwcm9kdWN0SWQ6IDEsIHByb2R1Y3ROYW1lOiAnRW50ZXJwcmlzZSBFUlAgU3VpdGUnLCBjYXRlZ29yeTogJ1NvZnR3YXJlJywgdW5pdFByaWNlOiAyNDAwIH0sXG4gICAgICB7IHByb2R1Y3RJZDogMiwgcHJvZHVjdE5hbWU6ICdDbG91ZCBBbmFseXRpY3MgUHJvJywgY2F0ZWdvcnk6ICdTYWFTJywgdW5pdFByaWNlOiAxMjAwIH0sXG4gICAgICB7IHByb2R1Y3RJZDogMywgcHJvZHVjdE5hbWU6ICdTZWN1cml0eSBTaGllbGQgRW5kcG9pbnQnLCBjYXRlZ29yeTogJ1NlY3VyaXR5JywgdW5pdFByaWNlOiA4NTAgfSxcbiAgICAgIHsgcHJvZHVjdElkOiA0LCBwcm9kdWN0TmFtZTogJ0RlZGljYXRlZCBBUEkgR2F0ZXdheScsIGNhdGVnb3J5OiAnSW5mcmFzdHJ1Y3R1cmUnLCB1bml0UHJpY2U6IDMxMDAgfSxcbiAgICBdLFxuICAgIFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7IGNvZGU6ICdCQU5LX1RSQU5TRkVSJywgdGl0bGU6ICdEaXJlY3QgQmFuayBXaXJlJyB9LFxuICAgICAgeyBjb2RlOiAnQ1JFRElUX0NBUkQnLCB0aXRsZTogJ0NvcnBvcmF0ZSBDcmVkaXQgQ2FyZCcgfSxcbiAgICAgIHsgY29kZTogJ1BBWVBBTCcsIHRpdGxlOiAnUGF5UGFsIENvcnBvcmF0ZScgfSxcbiAgICAgIHsgY29kZTogJ05FVF8zMCcsIHRpdGxlOiAnTmV0IDMwIEludm9pY2luZycgfSxcbiAgICBdLFxuICAgIHVzcF9HZXRDdXN0b21lckxpc3Q6IFtcbiAgICAgIHsgaWQ6IDEwMSwgbmFtZTogJ0FjbWUgQ29ycG9yYXRpb24gKFNQKScsIGJyYW5jaElkOiAxLCBicmFuY2g6ICdOQScgfSxcbiAgICAgIHsgaWQ6IDEwMiwgbmFtZTogJ0dsb2JleCBJbmR1c3RyaWVzIChTUCknLCBicmFuY2hJZDogMiwgYnJhbmNoOiAnRU1FQScgfSxcbiAgICAgIHsgaWQ6IDEwNSwgbmFtZTogJ1dheW5lIEVudGVycHJpc2VzIChTUCknLCBicmFuY2hJZDogMSwgYnJhbmNoOiAnTkEnIH0sXG4gICAgICB7IGlkOiAxMDYsIG5hbWU6ICdTdGFyayBJbmR1c3RyaWVzIChTUCknLCBicmFuY2hJZDogMywgYnJhbmNoOiAnQVBBQycgfSxcbiAgICBdLFxuICAgIHVzcF9HZXRCcmFuY2hMb29rdXA6IFtcbiAgICAgIHsgaWQ6IDEsIG5hbWU6ICdOb3J0aCBBbWVyaWNhIEhRJyB9LFxuICAgICAgeyBpZDogMiwgbmFtZTogJ0VNRUEgRGl2aXNpb24nIH0sXG4gICAgICB7IGlkOiAzLCBuYW1lOiAnQVBBQyBIdWInIH0sXG4gICAgXSxcbiAgfTtcblxuICBmZXRjaE9wdGlvbnMocmVxdWVzdDogTG9va3VwUXVlcnlSZXF1ZXN0KTogT2JzZXJ2YWJsZTxMb29rdXBPcHRpb25JdGVtW10+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuZ2VuZXJhdGVDYWNoZUtleShyZXF1ZXN0KTtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGlmIChjYWNoZWQgJiYgY2FjaGVkLmV4cGlyZXNBdCA+IG5vdykge1xuICAgICAgcmV0dXJuIG9mKGNhY2hlZC5kYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdCBydW5uaW5nID0gdGhpcy5pbkZsaWdodC5nZXQoY2FjaGVLZXkpO1xuICAgIGlmIChydW5uaW5nKSB7XG4gICAgICByZXR1cm4gcnVubmluZztcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5jb25maWc/LmFwaUJhc2VVcmw7XG4gICAgaWYgKGJhc2VVcmwgJiYgdGhpcy5odHRwKSB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9uU2VydmljZT8uc2Vzc2lvbkNvbnRleHQoKSA/PyB7fTtcbiAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgICBpZiAoc2Vzc2lvblsnY29tcGFueUlkJ10gIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uWydjb21wYW55SWQnXSAhPT0gbnVsbCkge1xuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ1gtQ29tcGFueS1JZCcsIFN0cmluZyhzZXNzaW9uWydjb21wYW55SWQnXSkpO1xuICAgICAgfVxuICAgICAgaWYgKHNlc3Npb25bJ2JyYW5jaElkJ10gIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uWydicmFuY2hJZCddICE9PSBudWxsKSB7XG4gICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnWC1CcmFuY2gtSWQnLCBTdHJpbmcoc2Vzc2lvblsnYnJhbmNoSWQnXSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvYnMkID0gdGhpcy5odHRwLnBvc3Q8dW5rbm93bj4oYCR7YmFzZVVybH0vbG9va3VwYCwgcmVxdWVzdCwgeyBoZWFkZXJzIH0pLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBjb25zdCByYXdJdGVtcyA9IGV4dHJhY3RSb3dBcnJheShyZXNwb25zZSk7XG4gICAgICAgICAgcmV0dXJuIHJhd0l0ZW1zLm1hcCgocjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAociAmJiB0eXBlb2YgciA9PT0gJ29iamVjdCcgJiYgJ3ZhbHVlJyBpbiByKSB7XG4gICAgICAgICAgICAgIHJldHVybiByIGFzIExvb2t1cE9wdGlvbkl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWwgPSByPy5bcmVxdWVzdC52YWx1ZUZpZWxkXSA/PyByPy5pZCA/PyByPy5jb2RlID8/IFN0cmluZyhyID8/ICcnKTtcbiAgICAgICAgICAgIGNvbnN0IGxibCA9IHI/LltyZXF1ZXN0LmRpc3BsYXlGaWVsZF0gPz8gcj8ubmFtZSA/PyByPy50aXRsZSA/PyBTdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB2YWwsIGxhYmVsOiBsYmwsIHJhdzogciB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKChpdGVtcykgPT4ge1xuICAgICAgICAgIC8vIE5ldmVyIGNhY2hlIGVtcHR5IHJlc3VsdHM6IHBhcmFtZXRlcnMgbWF5IHNpbXBseSBub3QgaGF2ZSBiZWVuIGZpbGxlZCB5ZXQuXG4gICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHRoaXMuc2V0Q2FjaGUoY2FjaGVLZXksIGl0ZW1zLCA2MDApO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc3QgbXNnID0gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgJ0xvb2t1cCByZXF1ZXN0IGZhaWxlZCc7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKEFycmF5LmlzQXJyYXkobXNnKSA/IG1zZy5qb2luKCcsICcpIDogbXNnKSk7XG4gICAgICAgIH0pLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbkZsaWdodC5kZWxldGUoY2FjaGVLZXkpO1xuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KVxuICAgICAgKTtcblxuICAgICAgdGhpcy5pbkZsaWdodC5zZXQoY2FjaGVLZXksIG9icyQpO1xuICAgICAgcmV0dXJuIG9icyQ7XG4gICAgfVxuXG4gICAgY29uc3QgZmFsbGJhY2sgPSB0aGlzLnJlc29sdmVNb2NrT3B0aW9ucyhyZXF1ZXN0KTtcbiAgICB0aGlzLnNldENhY2hlKGNhY2hlS2V5LCBmYWxsYmFjaywgNjAwKTtcbiAgICByZXR1cm4gb2YoZmFsbGJhY2spO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDYWNoZShrZXk6IHN0cmluZywgZGF0YTogTG9va3VwT3B0aW9uSXRlbVtdLCB0dGxTZWNvbmRzID0gNjAwKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB7XG4gICAgICBleHBpcmVzQXQ6IERhdGUubm93KCkgKyB0dGxTZWNvbmRzICogMTAwMCxcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlQ2FjaGVLZXkocmVxOiBMb29rdXBRdWVyeVJlcXVlc3QpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtyZXEuc291cmNlVHlwZX06JHtyZXEuZW50aXR5TmFtZX06JHtyZXEudmFsdWVGaWVsZH06JHtyZXEuZGlzcGxheUZpZWxkfToke0pTT04uc3RyaW5naWZ5KHJlcS5maWx0ZXIgPz8ge30pfToke0pTT04uc3RyaW5naWZ5KHJlcS5wYXJhbWV0ZXJzID8/IHt9KX1gO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlTW9ja09wdGlvbnMocmVxOiBMb29rdXBRdWVyeVJlcXVlc3QpOiBMb29rdXBPcHRpb25JdGVtW10ge1xuICAgIGNvbnN0IGVudGl0eSA9IHJlcS5lbnRpdHlOYW1lIHx8ICcnO1xuICAgIGNvbnN0IHJlY29yZHMgPSB0aGlzLm1vY2tEYXRhU3RvcmVbZW50aXR5XSA/PyBbXTtcbiAgICBjb25zdCB2YWxLZXkgPSByZXEudmFsdWVGaWVsZDtcbiAgICBjb25zdCBsYWJlbEtleSA9IHJlcS5kaXNwbGF5RmllbGQ7XG5cbiAgICBsZXQgZmlsdGVyZWRSZWNvcmRzID0gcmVjb3JkcztcbiAgICBjb25zdCBicmFuY2hQYXJhbSA9IHJlcS5wYXJhbWV0ZXJzPy5bJ0BCcmFuY2hJZCddID8/IHJlcS5wYXJhbWV0ZXJzPy5bJ2JyYW5jaElkJ107XG4gICAgaWYgKGJyYW5jaFBhcmFtICE9PSB1bmRlZmluZWQgJiYgYnJhbmNoUGFyYW0gIT09IG51bGwgJiYgYnJhbmNoUGFyYW0gIT09ICcnKSB7XG4gICAgICBjb25zdCBtYXRjaE51bSA9IE51bWJlcihicmFuY2hQYXJhbSk7XG4gICAgICBmaWx0ZXJlZFJlY29yZHMgPSByZWNvcmRzLmZpbHRlcihcbiAgICAgICAgKHIpID0+IHJbJ2JyYW5jaElkJ10gPT09IHVuZGVmaW5lZCB8fCByWydicmFuY2hJZCddID09PSBtYXRjaE51bSB8fCByWydicmFuY2gnXSA9PT0gU3RyaW5nKGJyYW5jaFBhcmFtKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyZWRSZWNvcmRzLm1hcCgocikgPT4gKHtcbiAgICAgIHZhbHVlOiAoclt2YWxLZXldIGFzIHN0cmluZyB8IG51bWJlcikgPz8gU3RyaW5nKHJbJ2lkJ10gPz8gclsnY29kZSddID8/ICcnKSxcbiAgICAgIGxhYmVsOiAocltsYWJlbEtleV0gYXMgc3RyaW5nKSA/PyBTdHJpbmcoclsnbmFtZSddID8/IHJbJ3RpdGxlJ10gPz8gJycpLFxuICAgICAgcmF3OiByLFxuICAgIH0pKTtcbiAgfVxufVxuXG4vKiogQ29udmVuaWVuY2UgYWxpYXMgKi9cbmV4cG9ydCBjb25zdCBIdHRwTG9va3VwQWRhcHRlciA9IEh0dHBSZXBvcnRMb29rdXBBZGFwdGVyO1xuIl19
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1sb29rdXAuYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2RhdGEtYWNjZXNzL2FkYXB0ZXJzL2h0dHAtbG9va3VwLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFHTCxtQkFBbUIsR0FDcEIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7O0FBT3BHOzs7R0FHRztBQUVILE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxtQkFBbUI7SUFDN0MsSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5QyxNQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEQsY0FBYyxHQUFHLE1BQU0sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXpFLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBc0IsQ0FBQztJQUN0QyxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQTBDLENBQUM7SUFFN0QsYUFBYSxHQUFzRDtRQUNsRixTQUFTLEVBQUU7WUFDVCxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNsRixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNuRixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNsRixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUN0RixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNuRixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtTQUNuRjtRQUNELFFBQVEsRUFBRTtZQUNSLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRTtZQUNuRixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUU7WUFDdkUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFO1lBQzNFLEVBQUUsUUFB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Q2xCLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsVUFBVSxHQUFHLElBQUk7WUFDekMsSUFBSTtTQUNMLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxHQUF1QjtRQUM5QyxPQUFPLEdBQUcsR0FBRyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDakssQ0FBQztJQUVPLGtCQUFrQixDQUFDLEdBQXVCO1FBQ2hELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQzVCLHVCQUF1QixDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FDN0QsQ0FBQztJQUNKLENBQUM7d0dBeEhVLHVCQUF1Qjs0R0FBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVOztBQTRIWCx3QkFBd0I7QUFDeEIsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbmFsaXplLCBtYXAsIHNoYXJlUmVwbGF5LCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBMb29rdXBPcHRpb25JdGVtLFxuICBMb29rdXBRdWVyeVJlcXVlc3QsXG4gIFJlcG9ydExvb2t1cEFkYXB0ZXIsXG59IGZyb20gJy4uL2NvbnRyYWN0cy9sb29rdXAuY29udHJhY3QnO1xuaW1wb3J0IHsgUkVQT1JUSU5HX0NPTkZJRyB9IGZyb20gJy4uLy4uL2NvcmUvdG9rZW5zL3JlcG9ydGluZy1jb25maWcudG9rZW4nO1xuaW1wb3J0IHsgUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgZXh0cmFjdExvb2t1cE9wdGlvbkl0ZW0sIGV4dHJhY3RSb3dBcnJheSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvZGF0YS1ub3JtYWxpemF0aW9uLnV0aWwnO1xuXG5pbnRlcmZhY2UgQ2FjaGVFbnRyeSB7XG4gIGV4cGlyZXNBdDogbnVtYmVyO1xuICBkYXRhOiBMb29rdXBPcHRpb25JdGVtW107XG59XG5cbi8qKlxuICogQnVpbHQtaW4gSFRUUCBhZGFwdGVyIGZvciBmZXRjaGluZyBkcm9wZG93biBvcHRpb25zIGZyb20gYmFja2VuZCBkYXRhYmFzZSB0YWJsZXMgYW5kIFNQcy5cbiAqIEluY2x1ZGVzIGluLW1lbW9yeSBjYWNoaW5nIHdpdGggVFRMLCBpbi1mbGlnaHQgcmVxdWVzdCBkZWR1cGxpY2F0aW9uLCBhbmQgZmFsbGJhY2sgbW9jayBkYXRhLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSHR0cFJlcG9ydExvb2t1cEFkYXB0ZXIgZXh0ZW5kcyBSZXBvcnRMb29rdXBBZGFwdGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KFJFUE9SVElOR19DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQ2FjaGVFbnRyeT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbkZsaWdodCA9IG5ldyBNYXA8c3RyaW5nLCBPYnNlcnZhYmxlPExvb2t1cE9wdGlvbkl0ZW1bXT4+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtb2NrRGF0YVN0b3JlOiBSZWNvcmQ8c3RyaW5nLCBBcnJheTx7IFtrZXk6IHN0cmluZ106IHVua25vd24gfT4+ID0ge1xuICAgIEN1c3RvbWVyczogW1xuICAgICAgeyBjdXN0b21lcklkOiAxMDEsIGN1c3RvbWVyTmFtZTogJ0FjbWUgQ29ycG9yYXRpb24nLCBicmFuY2hJZDogMSwgaXNBY3RpdmU6IHRydWUgfSxcbiAgICAgIHsgY3VzdG9tZXJJZDogMTAyLCBjdXN0b21lck5hbWU6ICdHbG9iZXggSW5kdXN0cmllcycsIGJyYW5jaElkOiAyLCBpc0FjdGl2ZTogdHJ1ZSB9LFxuICAgICAgeyBjdXN0b21lcklkOiAxMDMsIGN1c3RvbWVyTmFtZTogJ0luaXRlY2ggU29mdHdhcmUnLCBicmFuY2hJZDogMSwgaXNBY3RpdmU6IHRydWUgfSxcbiAgICAgIHsgY3VzdG9tZXJJZDogMTA0LCBjdXN0b21lck5hbWU6ICdVbWJyZWxsYSBDb3Jwb3JhdGlvbicsIGJyYW5jaElkOiAzLCBpc0FjdGl2ZTogdHJ1ZSB9LFxuICAgICAgeyBjdXN0b21lcklkOiAxMDUsIGN1c3RvbWVyTmFtZTogJ1dheW5lIEVudGVycHJpc2VzJywgYnJhbmNoSWQ6IDIsIGlzQWN0aXZlOiB0cnVlIH0sXG4gICAgICB7IGN1c3RvbWVySWQ6IDEwNiwgY3VzdG9tZXJOYW1lOiAnU3RhcmsgSW5kdXN0cmllcycsIGJyYW5jaElkOiAxLCBpc0FjdGl2ZTogdHJ1ZSB9LFxuICAgIF0sXG4gICAgQnJhbmNoZXM6IFtcbiAgICAgIHsgYnJhbmNoSWQ6IDEsIGJyYW5jaE5hbWU6ICdOb3J0aCBBbWVyaWNhIEhRIChOZXcgWW9yayknLCByZWdpb246ICdOb3J0aCBBbWVyaWNhJyB9LFxuICAgICAgeyBicmFuY2hJZDogMiwgYnJhbmNoTmFtZTogJ0VNRUEgRGl2aXNpb24gKExvbmRvbiknLCByZWdpb246ICdFdXJvcGUnIH0sXG4gICAgICB7IGJyYW5jaElkOiAzLCBicmFuY2hOYW1lOiAnQVBBQyBIdWIgKFNpbmdhcG9yZSknLCByZWdpb246ICdBc2lhIFBhY2lmaWMnIH0sXG4gICAgICB7IGJyYW5jaElkOiA0LCBicmFuY2hOYW1lOiAnTEFUQU0gT2ZmaWNlIChTw6NvIFBhdWxvKScsIHJlZ2lvbjogJ0xhdGluIEFtZXJpY2EnIH0sXG4gICAgXSxcbiAgICBQcm9kdWN0czogW1xuICAgICAgeyBwcm9kdWN0SWQ6IDEsIHByb2R1Y3ROYW1lOiAnRW50ZXJwcmlzZSBFUlAgU3VpdGUnLCBjYXRlZ29yeTogJ1NvZnR3YXJlJywgdW5pdFByaWNlOiAyNDAwIH0sXG4gICAgICB7IHByb2R1Y3RJZDogMiwgcHJvZHVjdE5hbWU6ICdDbG91ZCBBbmFseXRpY3MgUHJvJywgY2F0ZWdvcnk6ICdTYWFTJywgdW5pdFByaWNlOiAxMjAwIH0sXG4gICAgICB7IHByb2R1Y3RJZDogMywgcHJvZHVjdE5hbWU6ICdTZWN1cml0eSBTaGllbGQgRW5kcG9pbnQnLCBjYXRlZ29yeTogJ1NlY3VyaXR5JywgdW5pdFByaWNlOiA4NTAgfSxcbiAgICAgIHsgcHJvZHVjdElkOiA0LCBwcm9kdWN0TmFtZTogJ0RlZGljYXRlZCBBUEkgR2F0ZXdheScsIGNhdGVnb3J5OiAnSW5mcmFzdHJ1Y3R1cmUnLCB1bml0UHJpY2U6IDMxMDAgfSxcbiAgICBdLFxuICAgIFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7IGNvZGU6ICdCQU5LX1RSQU5TRkVSJywgdGl0bGU6ICdEaXJlY3QgQmFuayBXaXJlJyB9LFxuICAgICAgeyBjb2RlOiAnQ1JFRElUX0NBUkQnLCB0aXRsZTogJ0NvcnBvcmF0ZSBDcmVkaXQgQ2FyZCcgfSxcbiAgICAgIHsgY29kZTogJ1BBWVBBTCcsIHRpdGxlOiAnUGF5UGFsIENvcnBvcmF0ZScgfSxcbiAgICAgIHsgY29kZTogJ05FVF8zMCcsIHRpdGxlOiAnTmV0IDMwIEludm9pY2luZycgfSxcbiAgICBdLFxuICAgIHVzcF9HZXRDdXN0b21lckxpc3Q6IFtcbiAgICAgIHsgaWQ6IDEwMSwgbmFtZTogJ0FjbWUgQ29ycG9yYXRpb24gKFNQKScsIGJyYW5jaElkOiAxLCBicmFuY2g6ICdOQScgfSxcbiAgICAgIHsgaWQ6IDEwMiwgbmFtZTogJ0dsb2JleCBJbmR1c3RyaWVzIChTUCknLCBicmFuY2hJZDogMiwgYnJhbmNoOiAnRU1FQScgfSxcbiAgICAgIHsgaWQ6IDEwNSwgbmFtZTogJ1dheW5lIEVudGVycHJpc2VzIChTUCknLCBicmFuY2hJZDogMSwgYnJhbmNoOiAnTkEnIH0sXG4gICAgICB7IGlkOiAxMDYsIG5hbWU6ICdTdGFyayBJbmR1c3RyaWVzIChTUCknLCBicmFuY2hJZDogMywgYnJhbmNoOiAnQVBBQycgfSxcbiAgICBdLFxuICAgIHVzcF9HZXRCcmFuY2hMb29rdXA6IFtcbiAgICAgIHsgaWQ6IDEsIG5hbWU6ICdOb3J0aCBBbWVyaWNhIEhRJyB9LFxuICAgICAgeyBpZDogMiwgbmFtZTogJ0VNRUEgRGl2aXNpb24nIH0sXG4gICAgICB7IGlkOiAzLCBuYW1lOiAnQVBBQyBIdWInIH0sXG4gICAgXSxcbiAgfTtcblxuICBmZXRjaE9wdGlvbnMocmVxdWVzdDogTG9va3VwUXVlcnlSZXF1ZXN0KTogT2JzZXJ2YWJsZTxMb29rdXBPcHRpb25JdGVtW10+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuZ2VuZXJhdGVDYWNoZUtleShyZXF1ZXN0KTtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGlmIChjYWNoZWQgJiYgY2FjaGVkLmV4cGlyZXNBdCA+IG5vdykge1xuICAgICAgcmV0dXJuIG9mKGNhY2hlZC5kYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdCBydW5uaW5nID0gdGhpcy5pbkZsaWdodC5nZXQoY2FjaGVLZXkpO1xuICAgIGlmIChydW5uaW5nKSB7XG4gICAgICByZXR1cm4gcnVubmluZztcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5jb25maWc/LmFwaUJhc2VVcmw7XG4gICAgaWYgKGJhc2VVcmwgJiYgdGhpcy5odHRwKSB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9uU2VydmljZT8uc2Vzc2lvbkNvbnRleHQoKSA/PyB7fTtcbiAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgICBpZiAoc2Vzc2lvblsnY29tcGFueUlkJ10gIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uWydjb21wYW55SWQnXSAhPT0gbnVsbCkge1xuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ1gtQ29tcGFueS1JZCcsIFN0cmluZyhzZXNzaW9uWydjb21wYW55SWQnXSkpO1xuICAgICAgfVxuICAgICAgaWYgKHNlc3Npb25bJ2JyYW5jaElkJ10gIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uWydicmFuY2hJZCddICE9PSBudWxsKSB7XG4gICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnWC1CcmFuY2gtSWQnLCBTdHJpbmcoc2Vzc2lvblsnYnJhbmNoSWQnXSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvYnMkID0gdGhpcy5odHRwLnBvc3Q8dW5rbm93bj4oYCR7YmFzZVVybH0vbG9va3VwYCwgcmVxdWVzdCwgeyBoZWFkZXJzIH0pLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBjb25zdCByYXdJdGVtcyA9IGV4dHJhY3RSb3dBcnJheShyZXNwb25zZSk7XG4gICAgICAgICAgcmV0dXJuIHJhd0l0ZW1zLm1hcCgocjogYW55KSA9PlxuICAgICAgICAgICAgZXh0cmFjdExvb2t1cE9wdGlvbkl0ZW0ociwgcmVxdWVzdC52YWx1ZUZpZWxkLCByZXF1ZXN0LmRpc3BsYXlGaWVsZClcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKChpdGVtcykgPT4ge1xuICAgICAgICAgIC8vIE5ldmVyIGNhY2hlIGVtcHR5IHJlc3VsdHM6IHBhcmFtZXRlcnMgbWF5IHNpbXBseSBub3QgaGF2ZSBiZWVuIGZpbGxlZCB5ZXQuXG4gICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHRoaXMuc2V0Q2FjaGUoY2FjaGVLZXksIGl0ZW1zLCA2MDApO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc3QgbXNnID0gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgJ0xvb2t1cCByZXF1ZXN0IGZhaWxlZCc7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKEFycmF5LmlzQXJyYXkobXNnKSA/IG1zZy5qb2luKCcsICcpIDogbXNnKSk7XG4gICAgICAgIH0pLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbkZsaWdodC5kZWxldGUoY2FjaGVLZXkpO1xuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KVxuICAgICAgKTtcblxuICAgICAgdGhpcy5pbkZsaWdodC5zZXQoY2FjaGVLZXksIG9icyQpO1xuICAgICAgcmV0dXJuIG9icyQ7XG4gICAgfVxuXG4gICAgY29uc3QgZmFsbGJhY2sgPSB0aGlzLnJlc29sdmVNb2NrT3B0aW9ucyhyZXF1ZXN0KTtcbiAgICB0aGlzLnNldENhY2hlKGNhY2hlS2V5LCBmYWxsYmFjaywgNjAwKTtcbiAgICByZXR1cm4gb2YoZmFsbGJhY2spO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDYWNoZShrZXk6IHN0cmluZywgZGF0YTogTG9va3VwT3B0aW9uSXRlbVtdLCB0dGxTZWNvbmRzID0gNjAwKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB7XG4gICAgICBleHBpcmVzQXQ6IERhdGUubm93KCkgKyB0dGxTZWNvbmRzICogMTAwMCxcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlQ2FjaGVLZXkocmVxOiBMb29rdXBRdWVyeVJlcXVlc3QpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtyZXEuc291cmNlVHlwZX06JHtyZXEuZW50aXR5TmFtZX06JHtyZXEudmFsdWVGaWVsZH06JHtyZXEuZGlzcGxheUZpZWxkfToke0pTT04uc3RyaW5naWZ5KHJlcS5maWx0ZXIgPz8ge30pfToke0pTT04uc3RyaW5naWZ5KHJlcS5wYXJhbWV0ZXJzID8/IHt9KX1gO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlTW9ja09wdGlvbnMocmVxOiBMb29rdXBRdWVyeVJlcXVlc3QpOiBMb29rdXBPcHRpb25JdGVtW10ge1xuICAgIGNvbnN0IGVudGl0eSA9IHJlcS5lbnRpdHlOYW1lIHx8ICcnO1xuICAgIGNvbnN0IHJlY29yZHMgPSB0aGlzLm1vY2tEYXRhU3RvcmVbZW50aXR5XSA/PyBbXTtcbiAgICByZXR1cm4gcmVjb3Jkcy5tYXAoKHI6IGFueSkgPT5cbiAgICAgIGV4dHJhY3RMb29rdXBPcHRpb25JdGVtKHIsIHJlcS52YWx1ZUZpZWxkLCByZXEuZGlzcGxheUZpZWxkKVxuICAgICk7XG4gIH1cbn1cblxuLyoqIENvbnZlbmllbmNlIGFsaWFzICovXG5leHBvcnQgY29uc3QgSHR0cExvb2t1cEFkYXB0ZXIgPSBIdHRwUmVwb3J0TG9va3VwQWRhcHRlcjtcbiJdfQ==
@@ -5,4 +5,11 @@ export { HttpReportPersistenceAdapter, HttpPersistenceAdapter, } from './http-pe
5
5
  export { HttpMasterDataAdapter, } from './http-masterdata.adapter';
6
6
  export { LocalStorageReportPersistenceAdapter, } from './local-storage-persistence.adapter';
7
7
  export { MockReportDataSourceAdapter, } from './mock-datasource.adapter';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9kYXRhLWFjY2Vzcy9hZGFwdGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZ0NBQWdDLEVBQ2hDLDBCQUEwQixHQUMzQixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEdBQ2xCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixxQkFBcUIsR0FDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLHNCQUFzQixHQUN2QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFDTCxxQkFBcUIsR0FDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsb0NBQW9DLEdBQ3JDLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUNMLDJCQUEyQixHQUM1QixNQUFNLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgSHR0cFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsXG4gIEh0dHBTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyLFxufSBmcm9tICcuL2h0dHAtc2NoZW1hLWRpc2NvdmVyeS5hZGFwdGVyJztcbmV4cG9ydCB7XG4gIEh0dHBSZXBvcnRMb29rdXBBZGFwdGVyLFxuICBIdHRwTG9va3VwQWRhcHRlcixcbn0gZnJvbSAnLi9odHRwLWxvb2t1cC5hZGFwdGVyJztcbmV4cG9ydCB7XG4gIEh0dHBSZXBvcnREYXRhU291cmNlQWRhcHRlcixcbiAgSHR0cERhdGFTb3VyY2VBZGFwdGVyLFxufSBmcm9tICcuL2h0dHAtZGF0YXNvdXJjZS5hZGFwdGVyJztcbmV4cG9ydCB7XG4gIEh0dHBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gIEh0dHBQZXJzaXN0ZW5jZUFkYXB0ZXIsXG59IGZyb20gJy4vaHR0cC1wZXJzaXN0ZW5jZS5hZGFwdGVyJztcbmV4cG9ydCB7XG4gIEh0dHBNYXN0ZXJEYXRhQWRhcHRlcixcbn0gZnJvbSAnLi9odHRwLW1hc3RlcmRhdGEuYWRhcHRlcic7XG5leHBvcnQge1xuICBMb2NhbFN0b3JhZ2VSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG59IGZyb20gJy4vbG9jYWwtc3RvcmFnZS1wZXJzaXN0ZW5jZS5hZGFwdGVyJztcbmV4cG9ydCB7XG4gIE1vY2tSZXBvcnREYXRhU291cmNlQWRhcHRlcixcbn0gZnJvbSAnLi9tb2NrLWRhdGFzb3VyY2UuYWRhcHRlcic7XG4iXX0=
8
+ // Endpoint-based adapters (used by BwaysReportConfig simple config)
9
+ export { EndpointSchemaDiscoveryAdapter } from './endpoint-schema-discovery.adapter';
10
+ export { EndpointDataSourceAdapter } from './endpoint-datasource.adapter';
11
+ export { EndpointLookupAdapter } from './endpoint-lookup.adapter';
12
+ export { EndpointPersistenceAdapter } from './endpoint-persistence.adapter';
13
+ export { EndpointMasterDataAdapter } from './endpoint-masterdata.adapter';
14
+ export { BWAYS_REPORT_ENDPOINTS } from './endpoint-tokens';
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9kYXRhLWFjY2Vzcy9hZGFwdGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZ0NBQWdDLEVBQ2hDLDBCQUEwQixHQUMzQixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEdBQ2xCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixxQkFBcUIsR0FDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLHNCQUFzQixHQUN2QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFDTCxxQkFBcUIsR0FDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsb0NBQW9DLEdBQ3JDLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUNMLDJCQUEyQixHQUM1QixNQUFNLDJCQUEyQixDQUFDO0FBRW5DLG9FQUFvRTtBQUNwRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNyRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIEh0dHBSZXBvcnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyLFxuICBIdHRwU2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbn0gZnJvbSAnLi9odHRwLXNjaGVtYS1kaXNjb3ZlcnkuYWRhcHRlcic7XG5leHBvcnQge1xuICBIdHRwUmVwb3J0TG9va3VwQWRhcHRlcixcbiAgSHR0cExvb2t1cEFkYXB0ZXIsXG59IGZyb20gJy4vaHR0cC1sb29rdXAuYWRhcHRlcic7XG5leHBvcnQge1xuICBIdHRwUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG4gIEh0dHBEYXRhU291cmNlQWRhcHRlcixcbn0gZnJvbSAnLi9odHRwLWRhdGFzb3VyY2UuYWRhcHRlcic7XG5leHBvcnQge1xuICBIdHRwUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICBIdHRwUGVyc2lzdGVuY2VBZGFwdGVyLFxufSBmcm9tICcuL2h0dHAtcGVyc2lzdGVuY2UuYWRhcHRlcic7XG5leHBvcnQge1xuICBIdHRwTWFzdGVyRGF0YUFkYXB0ZXIsXG59IGZyb20gJy4vaHR0cC1tYXN0ZXJkYXRhLmFkYXB0ZXInO1xuZXhwb3J0IHtcbiAgTG9jYWxTdG9yYWdlUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxufSBmcm9tICcuL2xvY2FsLXN0b3JhZ2UtcGVyc2lzdGVuY2UuYWRhcHRlcic7XG5leHBvcnQge1xuICBNb2NrUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG59IGZyb20gJy4vbW9jay1kYXRhc291cmNlLmFkYXB0ZXInO1xuXG4vLyBFbmRwb2ludC1iYXNlZCBhZGFwdGVycyAodXNlZCBieSBCd2F5c1JlcG9ydENvbmZpZyBzaW1wbGUgY29uZmlnKVxuZXhwb3J0IHsgRW5kcG9pbnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyIH0gZnJvbSAnLi9lbmRwb2ludC1zY2hlbWEtZGlzY292ZXJ5LmFkYXB0ZXInO1xuZXhwb3J0IHsgRW5kcG9pbnREYXRhU291cmNlQWRhcHRlciB9IGZyb20gJy4vZW5kcG9pbnQtZGF0YXNvdXJjZS5hZGFwdGVyJztcbmV4cG9ydCB7IEVuZHBvaW50TG9va3VwQWRhcHRlciB9IGZyb20gJy4vZW5kcG9pbnQtbG9va3VwLmFkYXB0ZXInO1xuZXhwb3J0IHsgRW5kcG9pbnRQZXJzaXN0ZW5jZUFkYXB0ZXIgfSBmcm9tICcuL2VuZHBvaW50LXBlcnNpc3RlbmNlLmFkYXB0ZXInO1xuZXhwb3J0IHsgRW5kcG9pbnRNYXN0ZXJEYXRhQWRhcHRlciB9IGZyb20gJy4vZW5kcG9pbnQtbWFzdGVyZGF0YS5hZGFwdGVyJztcbmV4cG9ydCB7IEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMgfSBmcm9tICcuL2VuZHBvaW50LXRva2Vucyc7XG5leHBvcnQgdHlwZSB7IEJ3YXlzUmVwb3J0RW5kcG9pbnRzIH0gZnJvbSAnLi9lbmRwb2ludC10b2tlbnMnO1xuIl19
@@ -3,4 +3,4 @@
3
3
  */
4
4
  export class ReportLookupAdapter {
5
5
  }
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZGF0YS1hY2Nlc3MvY29udHJhY3RzL2xvb2t1cC5jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwQkE7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLG1CQUFtQjtDQUt4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERyb3Bkb3duU291cmNlVHlwZSB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuXG4vKipcbiAqIFJlcXVlc3QgcGF5bG9hZCBmb3IgcXVlcnlpbmcgbG9va3VwIGRhdGEgZnJvbSB0aGUgaG9zdCBiYWNrZW5kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9va3VwUXVlcnlSZXF1ZXN0IHtcbiAgc291cmNlVHlwZTogRHJvcGRvd25Tb3VyY2VUeXBlO1xuICBlbnRpdHlOYW1lPzogc3RyaW5nO1xuICBzY2hlbWE/OiBzdHJpbmc7XG4gIHZhbHVlRmllbGQ6IHN0cmluZztcbiAgZGlzcGxheUZpZWxkOiBzdHJpbmc7XG4gIGZpbHRlcj86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBwYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGxpbWl0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZWQgb3B0aW9uIGl0ZW0gZm9yIGRyb3Bkb3ducyBhbmQgc2VsZWN0b3JzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9va3VwT3B0aW9uSXRlbSB7XG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHJhdz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIEFic3RyYWN0IGNvbnRyYWN0IGZvciBmZXRjaGluZyBkeW5hbWljIGxvb2t1cC9vcHRpb24gZGF0YSBmb3IgcmVwb3J0IGRyb3Bkb3duIGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZXBvcnRMb29rdXBBZGFwdGVyIHtcbiAgLyoqXG4gICAqIEZldGNoZXMgZHJvcGRvd24gb3B0aW9uIHJvd3MgZnJvbSBkYXRhYmFzZSB0YWJsZSBvciBzdG9yZWQgcHJvY2VkdXJlLlxuICAgKi9cbiAgYWJzdHJhY3QgZmV0Y2hPcHRpb25zKHJlcXVlc3Q6IExvb2t1cFF1ZXJ5UmVxdWVzdCk6IE9ic2VydmFibGU8TG9va3VwT3B0aW9uSXRlbVtdPjtcbn1cbiJdfQ==
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZGF0YS1hY2Nlc3MvY29udHJhY3RzL2xvb2t1cC5jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwQkE7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLG1CQUFtQjtDQUt4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERyb3Bkb3duU291cmNlVHlwZSB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuXG4vKipcbiAqIFJlcXVlc3QgcGF5bG9hZCBmb3IgcXVlcnlpbmcgbG9va3VwIGRhdGEgZnJvbSB0aGUgaG9zdCBiYWNrZW5kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9va3VwUXVlcnlSZXF1ZXN0IHtcbiAgc291cmNlVHlwZTogRHJvcGRvd25Tb3VyY2VUeXBlO1xuICBlbnRpdHlOYW1lPzogc3RyaW5nO1xuICBzY2hlbWE/OiBzdHJpbmc7XG4gIHZhbHVlRmllbGQ/OiBzdHJpbmc7XG4gIGRpc3BsYXlGaWVsZD86IHN0cmluZztcbiAgZmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbGltaXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTm9ybWFsaXplZCBvcHRpb24gaXRlbSBmb3IgZHJvcGRvd25zIGFuZCBzZWxlY3RvcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb29rdXBPcHRpb25JdGVtIHtcbiAgdmFsdWU6IHN0cmluZyB8IG51bWJlcjtcbiAgbGFiZWw6IHN0cmluZztcbiAgcmF3PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogQWJzdHJhY3QgY29udHJhY3QgZm9yIGZldGNoaW5nIGR5bmFtaWMgbG9va3VwL29wdGlvbiBkYXRhIGZvciByZXBvcnQgZHJvcGRvd24gY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlcG9ydExvb2t1cEFkYXB0ZXIge1xuICAvKipcbiAgICogRmV0Y2hlcyBkcm9wZG93biBvcHRpb24gcm93cyBmcm9tIGRhdGFiYXNlIHRhYmxlIG9yIHN0b3JlZCBwcm9jZWR1cmUuXG4gICAqL1xuICBhYnN0cmFjdCBmZXRjaE9wdGlvbnMocmVxdWVzdDogTG9va3VwUXVlcnlSZXF1ZXN0KTogT2JzZXJ2YWJsZTxMb29rdXBPcHRpb25JdGVtW10+O1xufVxuIl19