bways-report 0.1.5 → 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.
- package/README.md +291 -422
- package/esm2022/lib/core/config/bways-report-config.mjs +83 -0
- package/esm2022/lib/core/index.mjs +2 -1
- package/esm2022/lib/core/models/report-definition.model.mjs +1 -1
- package/esm2022/lib/core/services/index.mjs +2 -1
- package/esm2022/lib/core/services/report-data-discovery.service.mjs +138 -0
- package/esm2022/lib/core/services/report-session-context.service.mjs +11 -7
- package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
- package/esm2022/lib/core/utils/data-normalization.util.mjs +87 -1
- package/esm2022/lib/core/utils/identifier-humanizer.mjs +15 -4
- package/esm2022/lib/core/utils/report-parameter.util.mjs +119 -3
- package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +69 -0
- package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +98 -0
- package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +57 -0
- package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +85 -0
- package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +163 -0
- package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +12 -0
- package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +20 -30
- package/esm2022/lib/data-access/adapters/index.mjs +8 -1
- package/esm2022/lib/data-access/contracts/lookup.contract.mjs +1 -1
- package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +12 -2
- package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +71 -13
- package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +407 -0
- package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +403 -222
- package/esm2022/lib/features/designer/components/property-editor/property-editor-action.component.mjs +41 -34
- package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +142 -20
- package/esm2022/lib/features/designer/components/property-editor/property-editor-general.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +154 -5
- package/esm2022/lib/features/designer/components/property-editor/property-editor-layout.component.mjs +11 -5
- package/esm2022/lib/features/designer/components/property-editor/property-editor-report.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-validation.component.mjs +15 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +112 -39
- package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +204 -10
- package/esm2022/lib/features/designer/designer.component.mjs +44 -3
- package/esm2022/lib/features/designer/services/designer-state.service.mjs +70 -3
- package/esm2022/lib/features/embed/bways-report-builder.component.mjs +207 -0
- package/esm2022/lib/features/embed/bways-report-menu.component.mjs +433 -0
- package/esm2022/lib/features/embed/bways-report-page.component.mjs +204 -0
- package/esm2022/lib/features/embed/index.mjs +5 -0
- package/esm2022/lib/features/embed/inject-report-menu.mjs +99 -0
- package/esm2022/lib/features/index.mjs +2 -1
- package/esm2022/lib/features/persistence/services/report-store.service.mjs +43 -5
- package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +4 -4
- package/esm2022/lib/features/routing/index.mjs +2 -2
- package/esm2022/lib/features/routing/models/report-route.models.mjs +1 -1
- package/esm2022/lib/features/routing/report-routes.mjs +42 -1
- package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +6 -8
- package/esm2022/lib/features/routing/services/report-menu.service.mjs +14 -4
- package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +22 -3
- package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +121 -15
- package/esm2022/lib/primitives/components/button/rpt-button.component.mjs +28 -5
- package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +113 -20
- package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +8 -1
- package/esm2022/lib/primitives/components/index.mjs +2 -1
- package/esm2022/lib/primitives/components/number/rpt-number.component.mjs +9 -3
- package/esm2022/lib/primitives/components/searchable-select/rpt-searchable-select.component.mjs +386 -0
- package/esm2022/lib/provide-reporting.mjs +156 -11
- package/fesm2022/bways-report.mjs +5703 -1766
- package/fesm2022/bways-report.mjs.map +1 -1
- package/lib/core/config/bways-report-config.d.ts +161 -0
- package/lib/core/index.d.ts +1 -0
- package/lib/core/models/report-definition.model.d.ts +16 -0
- package/lib/core/services/index.d.ts +1 -0
- package/lib/core/services/report-data-discovery.service.d.ts +38 -0
- package/lib/core/services/report-session-context.service.d.ts +1 -0
- package/lib/core/tokens/reporting-config.token.d.ts +18 -0
- package/lib/core/utils/data-normalization.util.d.ts +10 -0
- package/lib/core/utils/report-parameter.util.d.ts +18 -1
- package/lib/data-access/adapters/endpoint-datasource.adapter.d.ts +13 -0
- package/lib/data-access/adapters/endpoint-lookup.adapter.d.ts +14 -0
- package/lib/data-access/adapters/endpoint-masterdata.adapter.d.ts +11 -0
- package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +15 -0
- package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +21 -0
- package/lib/data-access/adapters/endpoint-tokens.d.ts +21 -0
- package/lib/data-access/adapters/http-lookup.adapter.d.ts +2 -1
- package/lib/data-access/adapters/index.d.ts +7 -0
- package/lib/data-access/contracts/lookup.contract.d.ts +2 -2
- package/lib/features/designer/components/component-palette/component-palette.component.d.ts +1 -0
- package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +6 -2
- package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +34 -0
- package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +6 -0
- package/lib/features/designer/components/property-editor/property-editor-action.component.d.ts +3 -0
- package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +12 -2
- package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +41 -1
- package/lib/features/designer/components/property-editor/property-editor.component.d.ts +19 -0
- package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +13 -1
- package/lib/features/designer/designer.component.d.ts +4 -0
- package/lib/features/designer/services/designer-state.service.d.ts +12 -1
- package/lib/features/embed/bways-report-builder.component.d.ts +48 -0
- package/lib/features/embed/bways-report-menu.component.d.ts +40 -0
- package/lib/features/embed/bways-report-page.component.d.ts +61 -0
- package/lib/features/embed/index.d.ts +4 -0
- package/lib/features/embed/inject-report-menu.d.ts +44 -0
- package/lib/features/index.d.ts +1 -0
- package/lib/features/persistence/services/report-store.service.d.ts +5 -0
- package/lib/features/routing/index.d.ts +1 -1
- package/lib/features/routing/models/report-route.models.d.ts +3 -0
- package/lib/features/routing/report-routes.d.ts +40 -0
- package/lib/features/routing/resolvers/report.resolver.d.ts +1 -1
- package/lib/features/runtime/dynamic-renderer.component.d.ts +1 -0
- package/lib/features/runtime/report-grid-bridge.component.d.ts +8 -59
- package/lib/primitives/components/button/rpt-button.component.d.ts +3 -0
- package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +18 -2
- package/lib/primitives/components/index.d.ts +2 -0
- package/lib/primitives/components/searchable-select/rpt-searchable-select.component.d.ts +89 -0
- package/lib/provide-reporting.d.ts +28 -6
- package/package.json +1 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Endpoint-based lookup adapter.
|
|
3
|
+
*
|
|
4
|
+
* Reuses the `executeEndpoint` to fetch dropdown option rows.
|
|
5
|
+
* No separate lookup endpoint is needed — we just POST to the
|
|
6
|
+
* same execute endpoint with the table/SP that backs the dropdown.
|
|
7
|
+
*/
|
|
8
|
+
import { inject, Injectable } from '@angular/core';
|
|
9
|
+
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
|
10
|
+
import { of, throwError } from 'rxjs';
|
|
11
|
+
import { catchError, finalize, map, shareReplay, tap } from 'rxjs/operators';
|
|
12
|
+
import { ReportLookupAdapter, } from '../contracts/lookup.contract';
|
|
13
|
+
import { ReportSessionContextService } from '../../core/services/report-session-context.service';
|
|
14
|
+
import { extractLookupOptionItem, extractRowArray } from '../../core/utils/data-normalization.util';
|
|
15
|
+
import { BWAYS_REPORT_ENDPOINTS } from './endpoint-tokens';
|
|
16
|
+
import * as i0 from "@angular/core";
|
|
17
|
+
export class EndpointLookupAdapter extends ReportLookupAdapter {
|
|
18
|
+
http = inject(HttpClient);
|
|
19
|
+
endpoints = inject(BWAYS_REPORT_ENDPOINTS);
|
|
20
|
+
sessionService = inject(ReportSessionContextService, { optional: true });
|
|
21
|
+
cache = new Map();
|
|
22
|
+
inFlight = new Map();
|
|
23
|
+
fetchOptions(request) {
|
|
24
|
+
const cacheKey = this.generateCacheKey(request);
|
|
25
|
+
const cached = this.cache.get(cacheKey);
|
|
26
|
+
const now = Date.now();
|
|
27
|
+
if (cached && cached.expiresAt > now) {
|
|
28
|
+
return of(cached.data);
|
|
29
|
+
}
|
|
30
|
+
const running = this.inFlight.get(cacheKey);
|
|
31
|
+
if (running) {
|
|
32
|
+
return running;
|
|
33
|
+
}
|
|
34
|
+
const session = this.sessionService?.sessionContext() ?? {};
|
|
35
|
+
let headers = new HttpHeaders();
|
|
36
|
+
if (session['companyId'] !== undefined && session['companyId'] !== null) {
|
|
37
|
+
headers = headers.set('X-Company-Id', String(session['companyId']));
|
|
38
|
+
}
|
|
39
|
+
if (session['branchId'] !== undefined && session['branchId'] !== null) {
|
|
40
|
+
headers = headers.set('X-Branch-Id', String(session['branchId']));
|
|
41
|
+
}
|
|
42
|
+
const kind = request.sourceType === 'procedure' ? 'procedure' : 'table';
|
|
43
|
+
const targetUrl = this.endpoints.lookupEndpoint || this.endpoints.executeEndpoint;
|
|
44
|
+
const payload = {
|
|
45
|
+
// Lookup contract fields (used by /api/reporting/lookup)
|
|
46
|
+
entityName: request.entityName ?? '',
|
|
47
|
+
sourceType: request.sourceType ?? (kind === 'procedure' ? 'stored_procedure' : 'table'),
|
|
48
|
+
schema: request.schema ?? 'dbo',
|
|
49
|
+
valueField: request.valueField,
|
|
50
|
+
displayField: request.displayField,
|
|
51
|
+
filter: request.filter,
|
|
52
|
+
limit: request.limit ?? 500,
|
|
53
|
+
// Execute simplified contract fields
|
|
54
|
+
kind,
|
|
55
|
+
name: request.entityName ?? '',
|
|
56
|
+
columns: [request.valueField, request.displayField].filter(Boolean),
|
|
57
|
+
top: request.limit ?? 500,
|
|
58
|
+
// Execute rich contract fields (prevents "dataSource should not be empty")
|
|
59
|
+
dataSource: {
|
|
60
|
+
id: request.entityName ?? 'ds-lookup',
|
|
61
|
+
type: kind === 'procedure' ? 'stored_procedure' : 'table',
|
|
62
|
+
name: request.entityName ?? '',
|
|
63
|
+
schema: request.schema ?? 'dbo',
|
|
64
|
+
},
|
|
65
|
+
parameters: request.parameters ?? {},
|
|
66
|
+
sessionContext: session,
|
|
67
|
+
};
|
|
68
|
+
const obs$ = this.http
|
|
69
|
+
.post(targetUrl, payload, { headers })
|
|
70
|
+
.pipe(map((response) => {
|
|
71
|
+
const rawItems = extractRowArray(response);
|
|
72
|
+
return rawItems.map((r) => extractLookupOptionItem(r, request.valueField, request.displayField));
|
|
73
|
+
}), tap((items) => {
|
|
74
|
+
if (items.length > 0) {
|
|
75
|
+
this.cache.set(cacheKey, {
|
|
76
|
+
expiresAt: Date.now() + 600_000,
|
|
77
|
+
data: items,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}), catchError((err) => {
|
|
81
|
+
const msg = err?.error?.message || err?.message || 'Lookup request failed';
|
|
82
|
+
return throwError(() => new Error(Array.isArray(msg) ? msg.join(', ') : msg));
|
|
83
|
+
}), finalize(() => {
|
|
84
|
+
this.inFlight.delete(cacheKey);
|
|
85
|
+
}), shareReplay({ bufferSize: 1, refCount: true }));
|
|
86
|
+
this.inFlight.set(cacheKey, obs$);
|
|
87
|
+
return obs$;
|
|
88
|
+
}
|
|
89
|
+
generateCacheKey(req) {
|
|
90
|
+
return `${req.sourceType}:${req.entityName}:${req.valueField}:${req.displayField}:${JSON.stringify(req.filter ?? {})}:${JSON.stringify(req.parameters ?? {})}`;
|
|
91
|
+
}
|
|
92
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EndpointLookupAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
93
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EndpointLookupAdapter });
|
|
94
|
+
}
|
|
95
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EndpointLookupAdapter, decorators: [{
|
|
96
|
+
type: Injectable
|
|
97
|
+
}] });
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtbG9va3VwLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9kYXRhLWFjY2Vzcy9hZGFwdGVycy9lbmRwb2ludC1sb29rdXAuYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUdMLG1CQUFtQixHQUNwQixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFRM0QsTUFBTSxPQUFPLHFCQUFzQixTQUFRLG1CQUFtQjtJQUMzQyxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFCLFNBQVMsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMzQyxjQUFjLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFekUsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO0lBQ3RDLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBMEMsQ0FBQztJQUU5RSxZQUFZLENBQUMsT0FBMkI7UUFDdEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUV2QixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM1RCxJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDeEUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3RFLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFVBQVUsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3hFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO1FBQ2xGLE1BQU0sT0FBTyxHQUFHO1lBQ2QseURBQXlEO1lBQ3pELFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUU7WUFDcEMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3ZGLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLEtBQUs7WUFDL0IsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1lBQzlCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtZQUNsQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDdEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLElBQUksR0FBRztZQUUzQixxQ0FBcUM7WUFDckMsSUFBSTtZQUNKLElBQUksRUFBRSxPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUU7WUFDOUIsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUNuRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEtBQUssSUFBSSxHQUFHO1lBRXpCLDJFQUEyRTtZQUMzRSxVQUFVLEVBQUU7Z0JBQ1YsRUFBRSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksV0FBVztnQkFDckMsSUFBSSxFQUFFLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxPQUFPO2dCQUN6RCxJQUFJLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFO2dCQUM5QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxLQUFLO2FBQ2hDO1lBQ0QsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRTtZQUNwQyxjQUFjLEVBQUUsT0FBTztTQUN4QixDQUFDO1FBRUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUk7YUFDbkIsSUFBSSxDQUFVLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQzthQUM5QyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDZixNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0MsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FDN0IsdUJBQXVCLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUNyRSxDQUFDO1FBQ0osQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRTtvQkFDdkIsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPO29CQUMvQixJQUFJLEVBQUUsS0FBSztpQkFDWixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQztZQUMzRSxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLENBQUMsQ0FBQyxFQUNGLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO1FBRUosSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEdBQXVCO1FBQzlDLE9BQU8sR0FBRyxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNqSyxDQUFDO3dHQTdGVSxxQkFBcUI7NEdBQXJCLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRW5kcG9pbnQtYmFzZWQgbG9va3VwIGFkYXB0ZXIuXG4gKlxuICogUmV1c2VzIHRoZSBgZXhlY3V0ZUVuZHBvaW50YCB0byBmZXRjaCBkcm9wZG93biBvcHRpb24gcm93cy5cbiAqIE5vIHNlcGFyYXRlIGxvb2t1cCBlbmRwb2ludCBpcyBuZWVkZWQg4oCUIHdlIGp1c3QgUE9TVCB0byB0aGVcbiAqIHNhbWUgZXhlY3V0ZSBlbmRwb2ludCB3aXRoIHRoZSB0YWJsZS9TUCB0aGF0IGJhY2tzIHRoZSBkcm9wZG93bi5cbiAqL1xuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbmFsaXplLCBtYXAsIHNoYXJlUmVwbGF5LCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBMb29rdXBPcHRpb25JdGVtLFxuICBMb29rdXBRdWVyeVJlcXVlc3QsXG4gIFJlcG9ydExvb2t1cEFkYXB0ZXIsXG59IGZyb20gJy4uL2NvbnRyYWN0cy9sb29rdXAuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgZXh0cmFjdExvb2t1cE9wdGlvbkl0ZW0sIGV4dHJhY3RSb3dBcnJheSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvZGF0YS1ub3JtYWxpemF0aW9uLnV0aWwnO1xuaW1wb3J0IHsgQldBWVNfUkVQT1JUX0VORFBPSU5UUyB9IGZyb20gJy4vZW5kcG9pbnQtdG9rZW5zJztcblxuaW50ZXJmYWNlIENhY2hlRW50cnkge1xuICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgZGF0YTogTG9va3VwT3B0aW9uSXRlbVtdO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRW5kcG9pbnRMb29rdXBBZGFwdGVyIGV4dGVuZHMgUmVwb3J0TG9va3VwQWRhcHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHMgPSBpbmplY3QoQldBWVNfUkVQT1JUX0VORFBPSU5UUyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQ2FjaGVFbnRyeT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbkZsaWdodCA9IG5ldyBNYXA8c3RyaW5nLCBPYnNlcnZhYmxlPExvb2t1cE9wdGlvbkl0ZW1bXT4+KCk7XG5cbiAgZmV0Y2hPcHRpb25zKHJlcXVlc3Q6IExvb2t1cFF1ZXJ5UmVxdWVzdCk6IE9ic2VydmFibGU8TG9va3VwT3B0aW9uSXRlbVtdPiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSB0aGlzLmdlbmVyYXRlQ2FjaGVLZXkocmVxdWVzdCk7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5jYWNoZS5nZXQoY2FjaGVLZXkpO1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBpZiAoY2FjaGVkICYmIGNhY2hlZC5leHBpcmVzQXQgPiBub3cpIHtcbiAgICAgIHJldHVybiBvZihjYWNoZWQuZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVubmluZyA9IHRoaXMuaW5GbGlnaHQuZ2V0KGNhY2hlS2V5KTtcbiAgICBpZiAocnVubmluZykge1xuICAgICAgcmV0dXJuIHJ1bm5pbmc7XG4gICAgfVxuXG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvblNlcnZpY2U/LnNlc3Npb25Db250ZXh0KCkgPz8ge307XG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgICBpZiAoc2Vzc2lvblsnY29tcGFueUlkJ10gIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uWydjb21wYW55SWQnXSAhPT0gbnVsbCkge1xuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdYLUNvbXBhbnktSWQnLCBTdHJpbmcoc2Vzc2lvblsnY29tcGFueUlkJ10pKTtcbiAgICB9XG4gICAgaWYgKHNlc3Npb25bJ2JyYW5jaElkJ10gIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uWydicmFuY2hJZCddICE9PSBudWxsKSB7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ1gtQnJhbmNoLUlkJywgU3RyaW5nKHNlc3Npb25bJ2JyYW5jaElkJ10pKTtcbiAgICB9XG5cbiAgICBjb25zdCBraW5kID0gcmVxdWVzdC5zb3VyY2VUeXBlID09PSAncHJvY2VkdXJlJyA/ICdwcm9jZWR1cmUnIDogJ3RhYmxlJztcbiAgICBjb25zdCB0YXJnZXRVcmwgPSB0aGlzLmVuZHBvaW50cy5sb29rdXBFbmRwb2ludCB8fCB0aGlzLmVuZHBvaW50cy5leGVjdXRlRW5kcG9pbnQ7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIC8vIExvb2t1cCBjb250cmFjdCBmaWVsZHMgKHVzZWQgYnkgL2FwaS9yZXBvcnRpbmcvbG9va3VwKVxuICAgICAgZW50aXR5TmFtZTogcmVxdWVzdC5lbnRpdHlOYW1lID8/ICcnLFxuICAgICAgc291cmNlVHlwZTogcmVxdWVzdC5zb3VyY2VUeXBlID8/IChraW5kID09PSAncHJvY2VkdXJlJyA/ICdzdG9yZWRfcHJvY2VkdXJlJyA6ICd0YWJsZScpLFxuICAgICAgc2NoZW1hOiByZXF1ZXN0LnNjaGVtYSA/PyAnZGJvJyxcbiAgICAgIHZhbHVlRmllbGQ6IHJlcXVlc3QudmFsdWVGaWVsZCxcbiAgICAgIGRpc3BsYXlGaWVsZDogcmVxdWVzdC5kaXNwbGF5RmllbGQsXG4gICAgICBmaWx0ZXI6IHJlcXVlc3QuZmlsdGVyLFxuICAgICAgbGltaXQ6IHJlcXVlc3QubGltaXQgPz8gNTAwLFxuXG4gICAgICAvLyBFeGVjdXRlIHNpbXBsaWZpZWQgY29udHJhY3QgZmllbGRzXG4gICAgICBraW5kLFxuICAgICAgbmFtZTogcmVxdWVzdC5lbnRpdHlOYW1lID8/ICcnLFxuICAgICAgY29sdW1uczogW3JlcXVlc3QudmFsdWVGaWVsZCwgcmVxdWVzdC5kaXNwbGF5RmllbGRdLmZpbHRlcihCb29sZWFuKSxcbiAgICAgIHRvcDogcmVxdWVzdC5saW1pdCA/PyA1MDAsXG5cbiAgICAgIC8vIEV4ZWN1dGUgcmljaCBjb250cmFjdCBmaWVsZHMgKHByZXZlbnRzIFwiZGF0YVNvdXJjZSBzaG91bGQgbm90IGJlIGVtcHR5XCIpXG4gICAgICBkYXRhU291cmNlOiB7XG4gICAgICAgIGlkOiByZXF1ZXN0LmVudGl0eU5hbWUgPz8gJ2RzLWxvb2t1cCcsXG4gICAgICAgIHR5cGU6IGtpbmQgPT09ICdwcm9jZWR1cmUnID8gJ3N0b3JlZF9wcm9jZWR1cmUnIDogJ3RhYmxlJyxcbiAgICAgICAgbmFtZTogcmVxdWVzdC5lbnRpdHlOYW1lID8/ICcnLFxuICAgICAgICBzY2hlbWE6IHJlcXVlc3Quc2NoZW1hID8/ICdkYm8nLFxuICAgICAgfSxcbiAgICAgIHBhcmFtZXRlcnM6IHJlcXVlc3QucGFyYW1ldGVycyA/PyB7fSxcbiAgICAgIHNlc3Npb25Db250ZXh0OiBzZXNzaW9uLFxuICAgIH07XG5cbiAgICBjb25zdCBvYnMkID0gdGhpcy5odHRwXG4gICAgICAucG9zdDx1bmtub3duPih0YXJnZXRVcmwsIHBheWxvYWQsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBjb25zdCByYXdJdGVtcyA9IGV4dHJhY3RSb3dBcnJheShyZXNwb25zZSk7XG4gICAgICAgICAgcmV0dXJuIHJhd0l0ZW1zLm1hcCgocjogYW55KSA9PlxuICAgICAgICAgICAgZXh0cmFjdExvb2t1cE9wdGlvbkl0ZW0ociwgcmVxdWVzdC52YWx1ZUZpZWxkLCByZXF1ZXN0LmRpc3BsYXlGaWVsZClcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKChpdGVtcykgPT4ge1xuICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlLnNldChjYWNoZUtleSwge1xuICAgICAgICAgICAgICBleHBpcmVzQXQ6IERhdGUubm93KCkgKyA2MDBfMDAwLFxuICAgICAgICAgICAgICBkYXRhOiBpdGVtcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGNvbnN0IG1zZyA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8ICdMb29rdXAgcmVxdWVzdCBmYWlsZWQnO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihBcnJheS5pc0FycmF5KG1zZykgPyBtc2cuam9pbignLCAnKSA6IG1zZykpO1xuICAgICAgICB9KSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5GbGlnaHQuZGVsZXRlKGNhY2hlS2V5KTtcbiAgICAgICAgfSksXG4gICAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSlcbiAgICAgICk7XG5cbiAgICB0aGlzLmluRmxpZ2h0LnNldChjYWNoZUtleSwgb2JzJCk7XG4gICAgcmV0dXJuIG9icyQ7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlQ2FjaGVLZXkocmVxOiBMb29rdXBRdWVyeVJlcXVlc3QpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtyZXEuc291cmNlVHlwZX06JHtyZXEuZW50aXR5TmFtZX06JHtyZXEudmFsdWVGaWVsZH06JHtyZXEuZGlzcGxheUZpZWxkfToke0pTT04uc3RyaW5naWZ5KHJlcS5maWx0ZXIgPz8ge30pfToke0pTT04uc3RyaW5naWZ5KHJlcS5wYXJhbWV0ZXJzID8/IHt9KX1gO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Endpoint-based master data adapter.
|
|
3
|
+
*
|
|
4
|
+
* Reuses the `executeEndpoint` to fetch master/lookup data.
|
|
5
|
+
* The master data name is treated as a table name.
|
|
6
|
+
*/
|
|
7
|
+
import { inject, Injectable } from '@angular/core';
|
|
8
|
+
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
|
9
|
+
import { of } from 'rxjs';
|
|
10
|
+
import { catchError, map } from 'rxjs/operators';
|
|
11
|
+
import { MasterDataProvider, } from '../contracts/master-data.provider';
|
|
12
|
+
import { ReportSessionContextService } from '../../core/services/report-session-context.service';
|
|
13
|
+
import { extractRowArray } from '../../core/utils/data-normalization.util';
|
|
14
|
+
import { BWAYS_REPORT_ENDPOINTS } from './endpoint-tokens';
|
|
15
|
+
import * as i0 from "@angular/core";
|
|
16
|
+
export class EndpointMasterDataAdapter extends MasterDataProvider {
|
|
17
|
+
http = inject(HttpClient);
|
|
18
|
+
endpoints = inject(BWAYS_REPORT_ENDPOINTS);
|
|
19
|
+
sessionService = inject(ReportSessionContextService, { optional: true });
|
|
20
|
+
getMasterData(masterName, options) {
|
|
21
|
+
const session = this.sessionService?.sessionContext() ?? {};
|
|
22
|
+
let headers = new HttpHeaders();
|
|
23
|
+
if (session['companyId'] !== undefined && session['companyId'] !== null) {
|
|
24
|
+
headers = headers.set('X-Company-Id', String(session['companyId']));
|
|
25
|
+
}
|
|
26
|
+
if (session['branchId'] !== undefined && session['branchId'] !== null) {
|
|
27
|
+
headers = headers.set('X-Branch-Id', String(session['branchId']));
|
|
28
|
+
}
|
|
29
|
+
const payload = {
|
|
30
|
+
kind: 'table',
|
|
31
|
+
name: masterName,
|
|
32
|
+
schema: 'dbo',
|
|
33
|
+
parameters: options?.filter ?? {},
|
|
34
|
+
top: options?.limit ?? 500,
|
|
35
|
+
};
|
|
36
|
+
return this.http
|
|
37
|
+
.post(this.endpoints.executeEndpoint, payload, { headers })
|
|
38
|
+
.pipe(map((response) => {
|
|
39
|
+
const rows = extractRowArray(response);
|
|
40
|
+
return rows.map((r) => {
|
|
41
|
+
// Try to extract value/label from common patterns
|
|
42
|
+
const value = r?.id ?? r?.value ?? r?.code ?? Object.values(r ?? {})[0];
|
|
43
|
+
const label = r?.name ?? r?.label ?? r?.title ?? r?.description ?? String(value ?? '');
|
|
44
|
+
return { value, label, ...r };
|
|
45
|
+
});
|
|
46
|
+
}), catchError((err) => {
|
|
47
|
+
console.warn(`[EndpointMasterDataAdapter] Failed to fetch master data "${masterName}":`, err);
|
|
48
|
+
return of([]);
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EndpointMasterDataAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
52
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EndpointMasterDataAdapter });
|
|
53
|
+
}
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EndpointMasterDataAdapter, decorators: [{
|
|
55
|
+
type: Injectable
|
|
56
|
+
}] });
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtbWFzdGVyZGF0YS5hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZGF0YS1hY2Nlc3MvYWRhcHRlcnMvZW5kcG9pbnQtbWFzdGVyZGF0YS5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQWMsRUFBRSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUdMLGtCQUFrQixHQUNuQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFHM0QsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGtCQUFrQjtJQUM5QyxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFCLFNBQVMsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMzQyxjQUFjLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFMUYsYUFBYSxDQUNYLFVBQWtCLEVBQ2xCLE9BQTJCO1FBRTNCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDO1FBRTVELElBQUksT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN4RSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdEUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRztZQUNkLElBQUksRUFBRSxPQUFnQjtZQUN0QixJQUFJLEVBQUUsVUFBVTtZQUNoQixNQUFNLEVBQUUsS0FBSztZQUNiLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLEVBQUU7WUFDakMsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksR0FBRztTQUMzQixDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBVSxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQzthQUNuRSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDZixNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQ3pCLGtEQUFrRDtnQkFDbEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hFLE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxXQUFXLElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdkYsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQW9CLENBQUM7WUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLDREQUE0RCxVQUFVLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5RixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQzt3R0E1Q1UseUJBQXlCOzRHQUF6Qix5QkFBeUI7OzRGQUF6Qix5QkFBeUI7a0JBRHJDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVuZHBvaW50LWJhc2VkIG1hc3RlciBkYXRhIGFkYXB0ZXIuXG4gKlxuICogUmV1c2VzIHRoZSBgZXhlY3V0ZUVuZHBvaW50YCB0byBmZXRjaCBtYXN0ZXIvbG9va3VwIGRhdGEuXG4gKiBUaGUgbWFzdGVyIGRhdGEgbmFtZSBpcyB0cmVhdGVkIGFzIGEgdGFibGUgbmFtZS5cbiAqL1xuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIE1hc3RlckRhdGFJdGVtLFxuICBNYXN0ZXJEYXRhT3B0aW9ucyxcbiAgTWFzdGVyRGF0YVByb3ZpZGVyLFxufSBmcm9tICcuLi9jb250cmFjdHMvbWFzdGVyLWRhdGEucHJvdmlkZXInO1xuaW1wb3J0IHsgUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgZXh0cmFjdFJvd0FycmF5IH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9kYXRhLW5vcm1hbGl6YXRpb24udXRpbCc7XG5pbXBvcnQgeyBCV0FZU19SRVBPUlRfRU5EUE9JTlRTIH0gZnJvbSAnLi9lbmRwb2ludC10b2tlbnMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRW5kcG9pbnRNYXN0ZXJEYXRhQWRhcHRlciBleHRlbmRzIE1hc3RlckRhdGFQcm92aWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHMgPSBpbmplY3QoQldBWVNfUkVQT1JUX0VORFBPSU5UUyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIGdldE1hc3RlckRhdGEoXG4gICAgbWFzdGVyTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBNYXN0ZXJEYXRhT3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPE1hc3RlckRhdGFJdGVtW10+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9uU2VydmljZT8uc2Vzc2lvbkNvbnRleHQoKSA/PyB7fTtcblxuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgaWYgKHNlc3Npb25bJ2NvbXBhbnlJZCddICE9PSB1bmRlZmluZWQgJiYgc2Vzc2lvblsnY29tcGFueUlkJ10gIT09IG51bGwpIHtcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnWC1Db21wYW55LUlkJywgU3RyaW5nKHNlc3Npb25bJ2NvbXBhbnlJZCddKSk7XG4gICAgfVxuICAgIGlmIChzZXNzaW9uWydicmFuY2hJZCddICE9PSB1bmRlZmluZWQgJiYgc2Vzc2lvblsnYnJhbmNoSWQnXSAhPT0gbnVsbCkge1xuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdYLUJyYW5jaC1JZCcsIFN0cmluZyhzZXNzaW9uWydicmFuY2hJZCddKSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGtpbmQ6ICd0YWJsZScgYXMgY29uc3QsXG4gICAgICBuYW1lOiBtYXN0ZXJOYW1lLFxuICAgICAgc2NoZW1hOiAnZGJvJyxcbiAgICAgIHBhcmFtZXRlcnM6IG9wdGlvbnM/LmZpbHRlciA/PyB7fSxcbiAgICAgIHRvcDogb3B0aW9ucz8ubGltaXQgPz8gNTAwLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDx1bmtub3duPih0aGlzLmVuZHBvaW50cy5leGVjdXRlRW5kcG9pbnQsIHBheWxvYWQsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBjb25zdCByb3dzID0gZXh0cmFjdFJvd0FycmF5KHJlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm4gcm93cy5tYXAoKHI6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gVHJ5IHRvIGV4dHJhY3QgdmFsdWUvbGFiZWwgZnJvbSBjb21tb24gcGF0dGVybnNcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcj8uaWQgPz8gcj8udmFsdWUgPz8gcj8uY29kZSA/PyBPYmplY3QudmFsdWVzKHIgPz8ge30pWzBdO1xuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSByPy5uYW1lID8/IHI/LmxhYmVsID8/IHI/LnRpdGxlID8/IHI/LmRlc2NyaXB0aW9uID8/IFN0cmluZyh2YWx1ZSA/PyAnJyk7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZSwgbGFiZWwsIC4uLnIgfSBhcyBNYXN0ZXJEYXRhSXRlbTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgW0VuZHBvaW50TWFzdGVyRGF0YUFkYXB0ZXJdIEZhaWxlZCB0byBmZXRjaCBtYXN0ZXIgZGF0YSBcIiR7bWFzdGVyTmFtZX1cIjpgLCBlcnIpO1xuICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -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
|