bways-report 0.1.6 → 0.1.8
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 +293 -464
- 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/report-data-discovery.service.mjs +6 -3
- 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/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 +4 -23
- 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 +5 -5
- 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 +109 -60
- package/esm2022/lib/features/designer/components/property-editor/property-editor-action.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +110 -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 +60 -3
- 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/toolbar/designer-toolbar.component.mjs +204 -10
- package/esm2022/lib/features/designer/designer.component.mjs +276 -21
- package/esm2022/lib/features/designer/services/designer-state.service.mjs +9 -2
- 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 +16 -2
- package/esm2022/lib/primitives/components/button/rpt-button.component.mjs +28 -5
- package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +86 -19
- 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 +137 -7
- package/fesm2022/bways-report.mjs +4286 -859
- 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/report-session-context.service.d.ts +1 -0
- package/lib/core/tokens/reporting-config.token.d.ts +16 -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/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 +1 -1
- 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 +1 -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 +10 -0
- package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +13 -1
- package/lib/features/designer/designer.component.d.ts +15 -0
- 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 +1 -1
- package/lib/primitives/components/button/rpt-button.component.d.ts +3 -0
- package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +16 -3
- 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 +22 -6
- package/package.json +1 -1
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simplified configuration for bways-report.
|
|
3
|
+
*
|
|
4
|
+
* This is the developer-facing config object that makes integration
|
|
5
|
+
* as simple as 3–4 endpoint URLs + optional overrides.
|
|
6
|
+
* The normalizer converts this into the internal `ReportingConfig`
|
|
7
|
+
* plus adapter wiring decisions.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Mapping from friendly palette category names to internal category IDs.
|
|
11
|
+
*/
|
|
12
|
+
export const PALETTE_CATEGORY_MAP = {
|
|
13
|
+
formInputs: 'input',
|
|
14
|
+
actionButtons: 'action',
|
|
15
|
+
displayLabels: 'display',
|
|
16
|
+
dataLookups: 'data',
|
|
17
|
+
layout: 'layout',
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Normalizes a `BwaysReportConfig` into the internal format.
|
|
21
|
+
* Validates required fields and maps friendly names to internal IDs.
|
|
22
|
+
*/
|
|
23
|
+
export function normalizeBwaysConfig(config) {
|
|
24
|
+
// Validate required endpoints
|
|
25
|
+
if (!config.spEndpoint || typeof config.spEndpoint !== 'string' || config.spEndpoint.trim() === '') {
|
|
26
|
+
throw new Error(`[bways-report] "spEndpoint" is required in BwaysReportConfig. ` +
|
|
27
|
+
`Please provide the URL for fetching stored procedures, e.g. '/api/reporting/procedures'.`);
|
|
28
|
+
}
|
|
29
|
+
if (!config.tablesEndpoint || typeof config.tablesEndpoint !== 'string' || config.tablesEndpoint.trim() === '') {
|
|
30
|
+
throw new Error(`[bways-report] "tablesEndpoint" is required in BwaysReportConfig. ` +
|
|
31
|
+
`Please provide the URL for fetching tables/views, e.g. '/api/reporting/tables'.`);
|
|
32
|
+
}
|
|
33
|
+
if (!config.executeEndpoint || typeof config.executeEndpoint !== 'string' || config.executeEndpoint.trim() === '') {
|
|
34
|
+
throw new Error(`[bways-report] "executeEndpoint" is required in BwaysReportConfig. ` +
|
|
35
|
+
`Please provide the URL for executing queries, e.g. '/api/reporting/execute'.`);
|
|
36
|
+
}
|
|
37
|
+
// Map component palette categories
|
|
38
|
+
let allowedCategories = null;
|
|
39
|
+
if (config.components && config.components.length > 0) {
|
|
40
|
+
allowedCategories = config.components.map((friendly) => {
|
|
41
|
+
const internal = PALETTE_CATEGORY_MAP[friendly];
|
|
42
|
+
if (!internal) {
|
|
43
|
+
console.warn(`[bways-report] Unknown component category "${friendly}". ` +
|
|
44
|
+
`Valid options: ${Object.keys(PALETTE_CATEGORY_MAP).join(', ')}.`);
|
|
45
|
+
return friendly; // Pass through unknown categories as-is
|
|
46
|
+
}
|
|
47
|
+
return internal;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// Warn if reportsEndpoint is missing
|
|
51
|
+
const reportsEndpoint = config.reportsEndpoint?.trim() || null;
|
|
52
|
+
if (!reportsEndpoint) {
|
|
53
|
+
console.warn(`[bways-report] No "reportsEndpoint" provided. Reports will be saved to browser localStorage. ` +
|
|
54
|
+
`For shared report menus across users, provide a reportsEndpoint, e.g. '/api/reporting/reports'.`);
|
|
55
|
+
}
|
|
56
|
+
const lookupEndpoint = config.lookupEndpoint?.trim()
|
|
57
|
+
? cleanUrl(config.lookupEndpoint)
|
|
58
|
+
: config.executeEndpoint.includes('/execute')
|
|
59
|
+
? cleanUrl(config.executeEndpoint.replace(/\/execute\/?$/, '/lookup'))
|
|
60
|
+
: null;
|
|
61
|
+
return {
|
|
62
|
+
spEndpoint: cleanUrl(config.spEndpoint),
|
|
63
|
+
tablesEndpoint: cleanUrl(config.tablesEndpoint),
|
|
64
|
+
executeEndpoint: cleanUrl(config.executeEndpoint),
|
|
65
|
+
lookupEndpoint,
|
|
66
|
+
reportsEndpoint: reportsEndpoint ? cleanUrl(reportsEndpoint) : null,
|
|
67
|
+
allowedCategories,
|
|
68
|
+
autoParameter: config.autoParameter !== false, // default true
|
|
69
|
+
routeBase: config.routeBase?.trim() || 'reports',
|
|
70
|
+
session: config.session ?? null,
|
|
71
|
+
sessionProvider: config.sessionProvider ?? null,
|
|
72
|
+
gridComponent: config.grid ?? null,
|
|
73
|
+
chartComponent: config.chart ?? null,
|
|
74
|
+
defaultPageSize: config.defaultPageSize ?? 25,
|
|
75
|
+
dateFormat: config.dateFormat ?? 'dd/MM/yyyy',
|
|
76
|
+
lookupTimeoutMs: config.lookupTimeoutMs ?? 300000,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/** Remove trailing slashes from a URL */
|
|
80
|
+
function cleanUrl(url) {
|
|
81
|
+
return url.trim().replace(/\/+$/, '');
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYndheXMtcmVwb3J0LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2NvcmUvY29uZmlnL2J3YXlzLXJlcG9ydC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQXVCSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFvQztJQUNuRSxVQUFVLEVBQUUsT0FBTztJQUNuQixhQUFhLEVBQUUsUUFBUTtJQUN2QixhQUFhLEVBQUUsU0FBUztJQUN4QixXQUFXLEVBQUUsTUFBTTtJQUNuQixNQUFNLEVBQUUsUUFBUTtDQUNqQixDQUFDO0FBbUtGOzs7R0FHRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxNQUF5QjtJQUM1RCw4QkFBOEI7SUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksT0FBTyxNQUFNLENBQUMsVUFBVSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ25HLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0VBQWdFO1lBQ2hFLDBGQUEwRixDQUMzRixDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFJLE9BQU8sTUFBTSxDQUFDLGNBQWMsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUMvRyxNQUFNLElBQUksS0FBSyxDQUNiLG9FQUFvRTtZQUNwRSxpRkFBaUYsQ0FDbEYsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsSUFBSSxPQUFPLE1BQU0sQ0FBQyxlQUFlLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFB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bnRlbnQiOlsiLyoqXG4gKiBTaW1wbGlmaWVkIGNvbmZpZ3VyYXRpb24gZm9yIGJ3YXlzLXJlcG9ydC5cbiAqXG4gKiBUaGlzIGlzIHRoZSBkZXZlbG9wZXItZmFjaW5nIGNvbmZpZyBvYmplY3QgdGhhdCBtYWtlcyBpbnRlZ3JhdGlvblxuICogYXMgc2ltcGxlIGFzIDPigJM0IGVuZHBvaW50IFVSTHMgKyBvcHRpb25hbCBvdmVycmlkZXMuXG4gKiBUaGUgbm9ybWFsaXplciBjb252ZXJ0cyB0aGlzIGludG8gdGhlIGludGVybmFsIGBSZXBvcnRpbmdDb25maWdgXG4gKiBwbHVzIGFkYXB0ZXIgd2lyaW5nIGRlY2lzaW9ucy5cbiAqL1xuXG5pbXBvcnQgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZXNzaW9uQ29udGV4dFByb3ZpZGVyLCBTZXNzaW9uQ29udGV4dFNvdXJjZSB9IGZyb20gJy4uL3Rva2Vucy9zZXNzaW9uLWNvbnRleHQudG9rZW4nO1xuXG4vKipcbiAqIFBhbGV0dGUgY29tcG9uZW50IGNhdGVnb3J5IG5hbWVzIHRoZSBkZXZlbG9wZXIgY2FuIHVzZVxuICogd2hlbiByZXN0cmljdGluZyB0aGUgZGVzaWduZXIgY29tcG9uZW50IHBhbGV0dGUuXG4gKlxuICogTWFwcyB0byBpbnRlcm5hbCByZWdpc3RyeSBjYXRlZ29yeSBJRHM6XG4gKiAtIGBmb3JtSW5wdXRzYCAgICDihpIgYGlucHV0YFxuICogLSBgYWN0aW9uQnV0dG9uc2Ag4oaSIGBhY3Rpb25gXG4gKiAtIGBkaXNwbGF5TGFiZWxzYCDihpIgYGRpc3BsYXlgXG4gKiAtIGBkYXRhTG9va3Vwc2AgICDihpIgYGRhdGFgXG4gKiAtIGBsYXlvdXRgICAgICAgICDihpIgYGxheW91dGBcbiAqL1xuZXhwb3J0IHR5cGUgUGFsZXR0ZUNhdGVnb3J5ID1cbiAgfCAnZm9ybUlucHV0cydcbiAgfCAnYWN0aW9uQnV0dG9ucydcbiAgfCAnZGlzcGxheUxhYmVscydcbiAgfCAnZGF0YUxvb2t1cHMnXG4gIHwgJ2xheW91dCc7XG5cbi8qKlxuICogTWFwcGluZyBmcm9tIGZyaWVuZGx5IHBhbGV0dGUgY2F0ZWdvcnkgbmFtZXMgdG8gaW50ZXJuYWwgY2F0ZWdvcnkgSURzLlxuICovXG5leHBvcnQgY29uc3QgUEFMRVRURV9DQVRFR09SWV9NQVA6IFJlY29yZDxQYWxldHRlQ2F0ZWdvcnksIHN0cmluZz4gPSB7XG4gIGZvcm1JbnB1dHM6ICdpbnB1dCcsXG4gIGFjdGlvbkJ1dHRvbnM6ICdhY3Rpb24nLFxuICBkaXNwbGF5TGFiZWxzOiAnZGlzcGxheScsXG4gIGRhdGFMb29rdXBzOiAnZGF0YScsXG4gIGxheW91dDogJ2xheW91dCcsXG59O1xuXG4vKipcbiAqIFNpbXBsaWZpZWQsIGRldmVsb3Blci1mYWNpbmcgY29uZmlndXJhdGlvbiBmb3IgYndheXMtcmVwb3J0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZXBvcnRDb25maWc6IEJ3YXlzUmVwb3J0Q29uZmlnID0ge1xuICogICBzcEVuZHBvaW50OiAgICAgICcvYXBpL3JlcG9ydGluZy9wcm9jZWR1cmVzJyxcbiAqICAgdGFibGVzRW5kcG9pbnQ6ICAnL2FwaS9yZXBvcnRpbmcvdGFibGVzJyxcbiAqICAgZXhlY3V0ZUVuZHBvaW50OiAnL2FwaS9yZXBvcnRpbmcvZXhlY3V0ZScsXG4gKiAgIHJlcG9ydHNFbmRwb2ludDogJy9hcGkvcmVwb3J0aW5nL3JlcG9ydHMnLFxuICogICBjb21wb25lbnRzOiBbJ2Zvcm1JbnB1dHMnLCAnYWN0aW9uQnV0dG9ucycsICdkaXNwbGF5TGFiZWxzJ10sXG4gKiAgIGF1dG9QYXJhbWV0ZXI6IHRydWUsXG4gKiAgIHNlc3Npb246ICgpID0+IGluamVjdChBdXRoU2VydmljZSkuc2Vzc2lvbigpLFxuICogICByb3V0ZUJhc2U6ICdyZXBvcnRzJyxcbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCd2F5c1JlcG9ydENvbmZpZyB7XG4gIC8vIOKUgOKUgOKUgCBCYWNrZW5kIGVuZHBvaW50cyAodGhlIDPigJM0IGVuZHBvaW50IGNvbnRyYWN0KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogR0VUIGVuZHBvaW50IHJldHVybmluZyB0aGUgbGlzdCBvZiBzdG9yZWQgcHJvY2VkdXJlcyB3aXRoIHRoZWlyIHBhcmFtZXRlcnMuXG4gICAqIFJlc3BvbnNlOiBgW3sgbmFtZSwgc2NoZW1hLCBwYXJhbWV0ZXJzOiBbeyBuYW1lLCBzcWxUeXBlLCByZXF1aXJlZCwgZGVmYXVsdFZhbHVlPyB9XSB9XWBcbiAgICovXG4gIHNwRW5kcG9pbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogR0VUIGVuZHBvaW50IHJldHVybmluZyB0aGUgbGlzdCBvZiB0YWJsZXMvdmlld3Mgd2l0aCB0aGVpciBjb2x1bW5zLlxuICAgKiBSZXNwb25zZTogYFt7IG5hbWUsIHNjaGVtYSwgdHlwZTogJ3RhYmxlJ3wndmlldycsIGNvbHVtbnM6IFt7IG5hbWUsIHNxbFR5cGUgfV0gfV1gXG4gICAqL1xuICB0YWJsZXNFbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQT1NUIGVuZHBvaW50IHRoYXQgcnVucyBhIHN0b3JlZCBwcm9jZWR1cmUgb3IgdGFibGUgcXVlcnkgYW5kIHJldHVybnMgcm93cy5cbiAgICogQm9keTogYHsga2luZDogJ3Byb2NlZHVyZSd8J3RhYmxlJywgbmFtZSwgc2NoZW1hLCBwYXJhbWV0ZXJzLCBjb2x1bW5zPywgdG9wPyB9YFxuICAgKiBSZXNwb25zZTogYHJvd3NbXWBcbiAgICovXG4gIGV4ZWN1dGVFbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBQT1NUIGVuZHBvaW50IGZvciBmZXRjaGluZyBkcm9wZG93biBtYXN0ZXIgZGF0YSBhbmQgbG9va3VwIG9wdGlvbnMuXG4gICAqIERlZmF1bHRzIHRvIHJlcGxhY2luZyBgL2V4ZWN1dGVgIHdpdGggYC9sb29rdXBgIGlmIG9taXR0ZWQuXG4gICAqL1xuICBsb29rdXBFbmRwb2ludD86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgQ1JVRCBlbmRwb2ludCBmb3Igc2F2aW5nL2xvYWRpbmcgcmVwb3J0IHBhZ2UgZGVmaW5pdGlvbnMuXG4gICAqIFdoZW4gb21pdHRlZCwgcmVwb3J0cyBhcmUgc2F2ZWQgdG8gYnJvd3NlciBsb2NhbFN0b3JhZ2Ugd2l0aCBhIGNvbnNvbGUgd2FybmluZy5cbiAgICogLSBHRVQgICAg4oaSIGxpc3Qgc2F2ZWQgcmVwb3J0c1xuICAgKiAtIEdFVCAvOmlkIOKGkiBsb2FkIGEgc3BlY2lmaWMgcmVwb3J0XG4gICAqIC0gUE9TVCAgIOKGkiBzYXZlIGEgbmV3IG9yIHVwZGF0ZWQgcmVwb3J0XG4gICAqIC0gREVMRVRFIC86aWQg4oaSIGRlbGV0ZSBhIHJlcG9ydFxuICAgKi9cbiAgcmVwb3J0c0VuZHBvaW50Pzogc3RyaW5nO1xuXG4gIC8vIOKUgOKUgOKUgCBEZXNpZ25lciBvcHRpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgcGFsZXR0ZSBncm91cHMgdG8gc2hvdyBpbiB0aGUgZGVzaWduZXIuXG4gICAqIERlZmF1bHRzIHRvIGFsbCBncm91cHMgd2hlbiBub3Qgc3BlY2lmaWVkLlxuICAgKlxuICAgKiBAZXhhbXBsZSBbJ2Zvcm1JbnB1dHMnLCAnYWN0aW9uQnV0dG9ucycsICdkaXNwbGF5TGFiZWxzJ11cbiAgICovXG4gIGNvbXBvbmVudHM/OiBQYWxldHRlQ2F0ZWdvcnlbXTtcblxuICAvKipcbiAgICogV2hlbiB0cnVlLCBzdG9yZWQgcHJvY2VkdXJlIHBhcmFtZXRlcnMgbGlrZSBgQEJyYW5jaElkYCwgYEBDb21wYW55SWRgXG4gICAqIGFyZSBhdXRvbWF0aWNhbGx5IGJvdW5kIGZyb20gdGhlIHNlc3Npb24gY29udGV4dC5cbiAgICogUmVxdWlyZXMgYHNlc3Npb25gIHRvIGJlIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhdXRvUGFyYW1ldGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2Vzc2lvbiBjb250ZXh0IHByb3ZpZGVyIGZvciBhdXRvLXBhcmFtZXRlciBiaW5kaW5nLlxuICAgKiBDYW4gYmUgYSBzZXJ2aWNlIGNsYXNzIGltcGxlbWVudGluZyBgU2Vzc2lvbkNvbnRleHRQcm92aWRlcmAsXG4gICAqIGEgcGxhaW4gb2JqZWN0LCBhIGZhY3RvcnkgZnVuY3Rpb24sIGFuIE9ic2VydmFibGUsIG9yIGEgU2lnbmFsLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBzZXNzaW9uOiBQbGF5Z3JvdW5kU2Vzc2lvblNlcnZpY2VcbiAgICogc2Vzc2lvbjogKCkgPT4gaW5qZWN0KEF1dGhTZXJ2aWNlKS5zZXNzaW9uKClcbiAgICogc2Vzc2lvbjogeyBicmFuY2hJZDogMSwgY29tcGFueUlkOiAxMCB9XG4gICAqL1xuICBzZXNzaW9uPzogVHlwZTxTZXNzaW9uQ29udGV4dFByb3ZpZGVyPiB8IFNlc3Npb25Db250ZXh0U291cmNlIHwgKCgpID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgc2VydmljZSBjbGFzcyBpbXBsZW1lbnRpbmcgYFNlc3Npb25Db250ZXh0UHJvdmlkZXJgLlxuICAgKiBFcXVpdmFsZW50IHRvIGBzZXNzaW9uOiBNeVNlc3Npb25TZXJ2aWNlYC5cbiAgICovXG4gIHNlc3Npb25Qcm92aWRlcj86IFR5cGU8U2Vzc2lvbkNvbnRleHRQcm92aWRlcj47XG5cbiAgLy8g4pSA4pSA4pSAIExpdmUgcGFnZSBvcHRpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBCYXNlIHBhdGggZm9yIGxpdmUgcmVwb3J0IHBhZ2VzLlxuICAgKiBHZW5lcmF0ZWQgcmVwb3J0IHBhZ2VzIG9wZW4gYXQgYC88cm91dGVCYXNlPi88c2x1Zz5gLlxuICAgKlxuICAgKiBAZGVmYXVsdCAncmVwb3J0cydcbiAgICovXG4gIHJvdXRlQmFzZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgQW5ndWxhciBjb21wb25lbnQgZm9yIHJlbmRlcmluZyBkYXRhIGdyaWRzLlxuICAgKiBQYXNzIHlvdXIgZ3JpZCBjb21wb25lbnQgKEJXYXlzLWdyaWQsIEFHIEdyaWQgd3JhcHBlciwgZXRjLikuXG4gICAqL1xuICBncmlkPzogVHlwZTx1bmtub3duPjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgQW5ndWxhciBjb21wb25lbnQgZm9yIHJlbmRlcmluZyBjaGFydHMuXG4gICAqL1xuICBjaGFydD86IFR5cGU8dW5rbm93bj47XG5cbiAgLy8g4pSA4pSA4pSAIEdlbmVyYWwgb3B0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogRGVmYXVsdCBwYWdlIHNpemUgZm9yIGdyaWQgcmVzdWx0cy4gQGRlZmF1bHQgMjUgKi9cbiAgZGVmYXVsdFBhZ2VTaXplPzogbnVtYmVyO1xuXG4gIC8qKiBEYXRlIGZvcm1hdCBzdHJpbmcgdXNlZCBhY3Jvc3MgdGhlIGxpYnJhcnkuIEBkZWZhdWx0ICdkZC9NTS95eXl5JyAqL1xuICBkYXRlRm9ybWF0Pzogc3RyaW5nO1xuXG4gIC8qKiBUaW1lb3V0IGluIG1zIGZvciBsb29rdXAvZXhlY3V0ZSBxdWVyaWVzLiBAZGVmYXVsdCAzMDAwMDAgKi9cbiAgbG9va3VwVGltZW91dE1zPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBub3JtYWxpemluZyBhIGBCd2F5c1JlcG9ydENvbmZpZ2AgZm9yIGludGVybmFsIHVzZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb3JtYWxpemVkQndheXNDb25maWcge1xuICAvKiogRW5kcG9pbnQgVVJMcyAqL1xuICBzcEVuZHBvaW50OiBzdHJpbmc7XG4gIHRhYmxlc0VuZHBvaW50OiBzdHJpbmc7XG4gIGV4ZWN1dGVFbmRwb2ludDogc3RyaW5nO1xuICBsb29rdXBFbmRwb2ludDogc3RyaW5nIHwgbnVsbDtcbiAgcmVwb3J0c0VuZHBvaW50OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKiBSZXNvbHZlZCBpbnRlcm5hbCBjYXRlZ29yeSBJRHMgKGUuZy4gWydpbnB1dCcsICdhY3Rpb24nLCAnZGlzcGxheSddKSAqL1xuICBhbGxvd2VkQ2F0ZWdvcmllczogc3RyaW5nW10gfCBudWxsO1xuXG4gIC8qKiBXaGV0aGVyIGF1dG8tcGFyYW1ldGVyIGJpbmRpbmcgaXMgZW5hYmxlZCAqL1xuICBhdXRvUGFyYW1ldGVyOiBib29sZWFuO1xuXG4gIC8qKiBSb3V0ZSBiYXNlIHBhdGggKi9cbiAgcm91dGVCYXNlOiBzdHJpbmc7XG5cbiAgLyoqIFNlc3Npb24gc291cmNlICovXG4gIHNlc3Npb246IFR5cGU8U2Vzc2lvbkNvbnRleHRQcm92aWRlcj4gfCBTZXNzaW9uQ29udGV4dFNvdXJjZSB8ICgoKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfCBudWxsO1xuICBzZXNzaW9uUHJvdmlkZXI6IFR5cGU8U2Vzc2lvbkNvbnRleHRQcm92aWRlcj4gfCBudWxsO1xuXG4gIC8qKiBHcmlkIGNvbXBvbmVudCAqL1xuICBncmlkQ29tcG9uZW50OiBUeXBlPHVua25vd24+IHwgbnVsbDtcblxuICAvKiogQ2hhcnQgY29tcG9uZW50ICovXG4gIGNoYXJ0Q29tcG9uZW50OiBUeXBlPHVua25vd24+IHwgbnVsbDtcblxuICAvKiogR2VuZXJhbCBjb25maWcgdmFsdWVzICovXG4gIGRlZmF1bHRQYWdlU2l6ZTogbnVtYmVyO1xuICBkYXRlRm9ybWF0OiBzdHJpbmc7XG4gIGxvb2t1cFRpbWVvdXRNczogbnVtYmVyO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBgQndheXNSZXBvcnRDb25maWdgIGludG8gdGhlIGludGVybmFsIGZvcm1hdC5cbiAqIFZhbGlkYXRlcyByZXF1aXJlZCBmaWVsZHMgYW5kIG1hcHMgZnJpZW5kbHkgbmFtZXMgdG8gaW50ZXJuYWwgSURzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQndheXNDb25maWcoY29uZmlnOiBCd2F5c1JlcG9ydENvbmZpZyk6IE5vcm1hbGl6ZWRCd2F5c0NvbmZpZyB7XG4gIC8vIFZhbGlkYXRlIHJlcXVpcmVkIGVuZHBvaW50c1xuICBpZiAoIWNvbmZpZy5zcEVuZHBvaW50IHx8IHR5cGVvZiBjb25maWcuc3BFbmRwb2ludCAhPT0gJ3N0cmluZycgfHwgY29uZmlnLnNwRW5kcG9pbnQudHJpbSgpID09PSAnJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBbYndheXMtcmVwb3J0XSBcInNwRW5kcG9pbnRcIiBpcyByZXF1aXJlZCBpbiBCd2F5c1JlcG9ydENvbmZpZy4gYCArXG4gICAgICBgUGxlYXNlIHByb3ZpZGUgdGhlIFVSTCBmb3IgZmV0Y2hpbmcgc3RvcmVkIHByb2NlZHVyZXMsIGUuZy4gJy9hcGkvcmVwb3J0aW5nL3Byb2NlZHVyZXMnLmBcbiAgICApO1xuICB9XG4gIGlmICghY29uZmlnLnRhYmxlc0VuZHBvaW50IHx8IHR5cGVvZiBjb25maWcudGFibGVzRW5kcG9pbnQgIT09ICdzdHJpbmcnIHx8IGNvbmZpZy50YWJsZXNFbmRwb2ludC50cmltKCkgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFtid2F5cy1yZXBvcnRdIFwidGFibGVzRW5kcG9pbnRcIiBpcyByZXF1aXJlZCBpbiBCd2F5c1JlcG9ydENvbmZpZy4gYCArXG4gICAgICBgUGxlYXNlIHByb3ZpZGUgdGhlIFVSTCBmb3IgZmV0Y2hpbmcgdGFibGVzL3ZpZXdzLCBlLmcuICcvYXBpL3JlcG9ydGluZy90YWJsZXMnLmBcbiAgICApO1xuICB9XG4gIGlmICghY29uZmlnLmV4ZWN1dGVFbmRwb2ludCB8fCB0eXBlb2YgY29uZmlnLmV4ZWN1dGVFbmRwb2ludCAhPT0gJ3N0cmluZycgfHwgY29uZmlnLmV4ZWN1dGVFbmRwb2ludC50cmltKCkgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFtid2F5cy1yZXBvcnRdIFwiZXhlY3V0ZUVuZHBvaW50XCIgaXMgcmVxdWlyZWQgaW4gQndheXNSZXBvcnRDb25maWcuIGAgK1xuICAgICAgYFBsZWFzZSBwcm92aWRlIHRoZSBVUkwgZm9yIGV4ZWN1dGluZyBxdWVyaWVzLCBlLmcuICcvYXBpL3JlcG9ydGluZy9leGVjdXRlJy5gXG4gICAgKTtcbiAgfVxuXG4gIC8vIE1hcCBjb21wb25lbnQgcGFsZXR0ZSBjYXRlZ29yaWVzXG4gIGxldCBhbGxvd2VkQ2F0ZWdvcmllczogc3RyaW5nW10gfCBudWxsID0gbnVsbDtcbiAgaWYgKGNvbmZpZy5jb21wb25lbnRzICYmIGNvbmZpZy5jb21wb25lbnRzLmxlbmd0aCA+IDApIHtcbiAgICBhbGxvd2VkQ2F0ZWdvcmllcyA9IGNvbmZpZy5jb21wb25lbnRzLm1hcCgoZnJpZW5kbHkpID0+IHtcbiAgICAgIGNvbnN0IGludGVybmFsID0gUEFMRVRURV9DQVRFR09SWV9NQVBbZnJpZW5kbHldO1xuICAgICAgaWYgKCFpbnRlcm5hbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFtid2F5cy1yZXBvcnRdIFVua25vd24gY29tcG9uZW50IGNhdGVnb3J5IFwiJHtmcmllbmRseX1cIi4gYCArXG4gICAgICAgICAgYFZhbGlkIG9wdGlvbnM6ICR7T2JqZWN0LmtleXMoUEFMRVRURV9DQVRFR09SWV9NQVApLmpvaW4oJywgJyl9LmBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZyaWVuZGx5OyAvLyBQYXNzIHRocm91Z2ggdW5rbm93biBjYXRlZ29yaWVzIGFzLWlzXG4gICAgICB9XG4gICAgICByZXR1cm4gaW50ZXJuYWw7XG4gICAgfSk7XG4gIH1cblxuICAvLyBXYXJuIGlmIHJlcG9ydHNFbmRwb2ludCBpcyBtaXNzaW5nXG4gIGNvbnN0IHJlcG9ydHNFbmRwb2ludCA9IGNvbmZpZy5yZXBvcnRzRW5kcG9pbnQ/LnRyaW0oKSB8fCBudWxsO1xuICBpZiAoIXJlcG9ydHNFbmRwb2ludCkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBbYndheXMtcmVwb3J0XSBObyBcInJlcG9ydHNFbmRwb2ludFwiIHByb3ZpZGVkLiBSZXBvcnRzIHdpbGwgYmUgc2F2ZWQgdG8gYnJvd3NlciBsb2NhbFN0b3JhZ2UuIGAgK1xuICAgICAgYEZvciBzaGFyZWQgcmVwb3J0IG1lbnVzIGFjcm9zcyB1c2VycywgcHJvdmlkZSBhIHJlcG9ydHNFbmRwb2ludCwgZS5nLiAnL2FwaS9yZXBvcnRpbmcvcmVwb3J0cycuYFxuICAgICk7XG4gIH1cblxuICBjb25zdCBsb29rdXBFbmRwb2ludCA9IGNvbmZpZy5sb29rdXBFbmRwb2ludD8udHJpbSgpXG4gICAgPyBjbGVhblVybChjb25maWcubG9va3VwRW5kcG9pbnQpXG4gICAgOiBjb25maWcuZXhlY3V0ZUVuZHBvaW50LmluY2x1ZGVzKCcvZXhlY3V0ZScpXG4gICAgPyBjbGVhblVybChjb25maWcuZXhlY3V0ZUVuZHBvaW50LnJlcGxhY2UoL1xcL2V4ZWN1dGVcXC8/JC8sICcvbG9va3VwJykpXG4gICAgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgc3BFbmRwb2ludDogY2xlYW5VcmwoY29uZmlnLnNwRW5kcG9pbnQpLFxuICAgIHRhYmxlc0VuZHBvaW50OiBjbGVhblVybChjb25maWcudGFibGVzRW5kcG9pbnQpLFxuICAgIGV4ZWN1dGVFbmRwb2ludDogY2xlYW5VcmwoY29uZmlnLmV4ZWN1dGVFbmRwb2ludCksXG4gICAgbG9va3VwRW5kcG9pbnQsXG4gICAgcmVwb3J0c0VuZHBvaW50OiByZXBvcnRzRW5kcG9pbnQgPyBjbGVhblVybChyZXBvcnRzRW5kcG9pbnQpIDogbnVsbCxcblxuICAgIGFsbG93ZWRDYXRlZ29yaWVzLFxuICAgIGF1dG9QYXJhbWV0ZXI6IGNvbmZpZy5hdXRvUGFyYW1ldGVyICE9PSBmYWxzZSwgLy8gZGVmYXVsdCB0cnVlXG4gICAgcm91dGVCYXNlOiBjb25maWcucm91dGVCYXNlPy50cmltKCkgfHwgJ3JlcG9ydHMnLFxuICAgIHNlc3Npb246IGNvbmZpZy5zZXNzaW9uID8/IG51bGwsXG4gICAgc2Vzc2lvblByb3ZpZGVyOiBjb25maWcuc2Vzc2lvblByb3ZpZGVyID8/IG51bGwsXG5cbiAgICBncmlkQ29tcG9uZW50OiBjb25maWcuZ3JpZCA/PyBudWxsLFxuICAgIGNoYXJ0Q29tcG9uZW50OiBjb25maWcuY2hhcnQgPz8gbnVsbCxcblxuICAgIGRlZmF1bHRQYWdlU2l6ZTogY29uZmlnLmRlZmF1bHRQYWdlU2l6ZSA/PyAyNSxcbiAgICBkYXRlRm9ybWF0OiBjb25maWcuZGF0ZUZvcm1hdCA/PyAnZGQvTU0veXl5eScsXG4gICAgbG9va3VwVGltZW91dE1zOiBjb25maWcubG9va3VwVGltZW91dE1zID8/IDMwMDAwMCxcbiAgfTtcbn1cblxuLyoqIFJlbW92ZSB0cmFpbGluZyBzbGFzaGVzIGZyb20gYSBVUkwgKi9cbmZ1bmN0aW9uIGNsZWFuVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHVybC50cmltKCkucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG59XG4iXX0=
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export * from './config/bways-report-config';
|
|
1
2
|
export * from './models';
|
|
2
3
|
export * from './registry';
|
|
3
4
|
export * from './tokens';
|
|
@@ -7,4 +8,4 @@ export * from './services';
|
|
|
7
8
|
export * from './utilities';
|
|
8
9
|
export * from './utils/data-normalization.util';
|
|
9
10
|
export * from './utils/report-parameter.util';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jb25maWcvYndheXMtcmVwb3J0LWNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdHJ5JztcbmV4cG9ydCAqIGZyb20gJy4vdG9rZW5zJztcbmV4cG9ydCAqIGZyb20gJy4vZXJyb3JzJztcbmV4cG9ydCAqIGZyb20gJy4vdmFsaWRhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbGl0aWVzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvZGF0YS1ub3JtYWxpemF0aW9uLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9yZXBvcnQtcGFyYW1ldGVyLnV0aWwnO1xuIl19
|
|
@@ -10,4 +10,4 @@
|
|
|
10
10
|
* the required controls, layout, and bindings at runtime.
|
|
11
11
|
*/
|
|
12
12
|
export {};
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWRlZmluaXRpb24ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL21vZGVscy9yZXBvcnQtZGVmaW5pdGlvbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBvcnREZWZpbml0aW9uIOKAlCB0aGUgY2VudHJhbCBkb21haW4gb2JqZWN0LlxuICpcbiAqIEEgYFJlcG9ydERlZmluaXRpb25gIGlzIGEgY29tcGxldGUsIHZlcnNpb25lZCwgc2VyaWFsaXphYmxlIGRlc2NyaXB0aW9uXG4gKiBvZiBhIHJlcG9ydCBwYWdlLiBJdCBpcyB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgYm90aCB0aGVcbiAqIERlc2lnbmVyIGFuZCB0aGUgUnVudGltZS5cbiAqXG4gKiBLZXkgcHJpbmNpcGxlOiAqKkEgcmVwb3J0IGlzIGRhdGEsIG5vdCBBbmd1bGFyIHNvdXJjZSBjb2RlLioqXG4gKiBUaGUgbWV0YWRhdGEgaXMgc2F2ZWQvbG9hZGVkIGFzIEpTT04uIEFuZ3VsYXIgZHluYW1pY2FsbHkgY29uc3RydWN0c1xuICogdGhlIHJlcXVpcmVkIGNvbnRyb2xzLCBsYXlvdXQsIGFuZCBiaW5kaW5ncyBhdCBydW50aW1lLlxuICovXG5cbmltcG9ydCB7IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0UGFyYW1ldGVyRGVmaW5pdGlvbiB9IGZyb20gJy4vcmVwb3J0LXBhcmFtZXRlci5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbiB9IGZyb20gJy4vcmVwb3J0LWRhdGFzb3VyY2UubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0R3JpZERlZmluaXRpb24gfSBmcm9tICcuL3JlcG9ydC1ncmlkLm1vZGVsJztcbmltcG9ydCB7IFJlcG9ydExheW91dERlZmluaXRpb24gfSBmcm9tICcuL3JlcG9ydC1sYXlvdXQubW9kZWwnO1xuXG4vKipcbiAqIFBlcm1pc3Npb24gc2V0dGluZ3MgZm9yIGEgcmVwb3J0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFBlcm1pc3Npb25EZWZpbml0aW9uIHtcbiAgLyoqIFJvbGVzIHRoYXQgY2FuIHZpZXcvZXhlY3V0ZSB0aGlzIHJlcG9ydC4gKi9cbiAgdmlld1JvbGVzPzogc3RyaW5nW107XG5cbiAgLyoqIFJvbGVzIHRoYXQgY2FuIGVkaXQgdGhpcyByZXBvcnQgaW4gdGhlIGRlc2lnbmVyLiAqL1xuICBlZGl0Um9sZXM/
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWRlZmluaXRpb24ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL21vZGVscy9yZXBvcnQtZGVmaW5pdGlvbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBvcnREZWZpbml0aW9uIOKAlCB0aGUgY2VudHJhbCBkb21haW4gb2JqZWN0LlxuICpcbiAqIEEgYFJlcG9ydERlZmluaXRpb25gIGlzIGEgY29tcGxldGUsIHZlcnNpb25lZCwgc2VyaWFsaXphYmxlIGRlc2NyaXB0aW9uXG4gKiBvZiBhIHJlcG9ydCBwYWdlLiBJdCBpcyB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgYm90aCB0aGVcbiAqIERlc2lnbmVyIGFuZCB0aGUgUnVudGltZS5cbiAqXG4gKiBLZXkgcHJpbmNpcGxlOiAqKkEgcmVwb3J0IGlzIGRhdGEsIG5vdCBBbmd1bGFyIHNvdXJjZSBjb2RlLioqXG4gKiBUaGUgbWV0YWRhdGEgaXMgc2F2ZWQvbG9hZGVkIGFzIEpTT04uIEFuZ3VsYXIgZHluYW1pY2FsbHkgY29uc3RydWN0c1xuICogdGhlIHJlcXVpcmVkIGNvbnRyb2xzLCBsYXlvdXQsIGFuZCBiaW5kaW5ncyBhdCBydW50aW1lLlxuICovXG5cbmltcG9ydCB7IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0UGFyYW1ldGVyRGVmaW5pdGlvbiB9IGZyb20gJy4vcmVwb3J0LXBhcmFtZXRlci5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbiB9IGZyb20gJy4vcmVwb3J0LWRhdGFzb3VyY2UubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0R3JpZERlZmluaXRpb24gfSBmcm9tICcuL3JlcG9ydC1ncmlkLm1vZGVsJztcbmltcG9ydCB7IFJlcG9ydExheW91dERlZmluaXRpb24gfSBmcm9tICcuL3JlcG9ydC1sYXlvdXQubW9kZWwnO1xuXG4vKipcbiAqIFBlcm1pc3Npb24gc2V0dGluZ3MgZm9yIGEgcmVwb3J0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFBlcm1pc3Npb25EZWZpbml0aW9uIHtcbiAgLyoqIFJvbGVzIHRoYXQgY2FuIHZpZXcvZXhlY3V0ZSB0aGlzIHJlcG9ydC4gKi9cbiAgdmlld1JvbGVzPzogc3RyaW5nW107XG5cbiAgLyoqIFJvbGVzIHRoYXQgY2FuIGVkaXQgdGhpcyByZXBvcnQgaW4gdGhlIGRlc2lnbmVyLiAqL1xuICBlZGl0Um9sZXM/OiBzdHJpbmdbXTtcblxuICAvKiogV2hldGhlciB0aGlzIHJlcG9ydCBpcyBwdWJsaWNseSBhY2Nlc3NpYmxlLiAqL1xuICBpc1B1YmxpYz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogU3VtbWFyeSBpbmZvcm1hdGlvbiBmb3IgbGlzdGluZyByZXBvcnRzICh3aXRob3V0IGZ1bGwgZGVmaW5pdGlvbikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U3VtbWFyeSB7XG4gIC8qKiBVbmlxdWUgcmVwb3J0IGlkZW50aWZpZXIuICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqIFJlcG9ydCBkaXNwbGF5IG5hbWUuICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKiogQnJpZWYgZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKiBDYXRlZ29yeSBvciBncm91cCBmb3Igb3JnYW5pemluZyByZXBvcnRzLiAqL1xuICBjYXRlZ29yeT86IHN0cmluZztcblxuICAvKiogVVJMLWZyaWVuZGx5IHNsdWcgZm9yIHJvdXRpbmcuICovXG4gIHNsdWc/OiBzdHJpbmc7XG5cbiAgLyoqIE1lbnUgZ3JvdXAgZm9yIG9yZ2FuaXppbmcgcmVwb3J0cyBpbiBuYXZpZ2F0aW9uLiAqL1xuICBtZW51R3JvdXA/OiBzdHJpbmc7XG5cbiAgLyoqIFNvcnQgb3JkZXIgd2l0aGluIHRoZSBtZW51IGdyb3VwLiAqL1xuICBtZW51T3JkZXI/OiBudW1iZXI7XG5cbiAgLyoqIE9wdGlvbmFsIGljb24gbmFtZS4gKi9cbiAgaWNvbj86IHN0cmluZztcblxuICAvKiogQ3VycmVudCB2ZXJzaW9uIG51bWJlci4gKi9cbiAgdmVyc2lvbjogbnVtYmVyO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSByZXBvcnQgaXMgcHVibGlzaGVkICh2cy4gZHJhZnQpLiAqL1xuICBpc1B1Ymxpc2hlZDogYm9vbGVhbjtcblxuICAvKiogSVNPIGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24uICovXG4gIGxhc3RNb2RpZmllZD86IHN0cmluZztcblxuICAvKiogVXNlciB3aG8gbGFzdCBtb2RpZmllZC4gKi9cbiAgbGFzdE1vZGlmaWVkQnk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29tcGxldGUgcmVwb3J0IGRlZmluaXRpb24g4oCUIHRoZSBzb3VyY2Ugb2YgdHJ1dGguXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJpZFwiOiBcInNhbGVzLXJlZ2lzdGVyXCIsXG4gKiAgIFwibmFtZVwiOiBcIlNhbGVzIFJlZ2lzdGVyXCIsXG4gKiAgIFwic2NoZW1hVmVyc2lvblwiOiAxLFxuICogICBcInZlcnNpb25cIjogMSxcbiAqICAgXCJsYXlvdXRcIjogeyBcImNvbHVtbnNcIjogNCwgXCJnYXBcIjogMTYgfSxcbiAqICAgXCJjb21wb25lbnRzXCI6IFsuLi5dLFxuICogICBcInBhcmFtZXRlcnNcIjogWy4uLl0sXG4gKiAgIFwiZGF0YVNvdXJjZXNcIjogWy4uLl0sXG4gKiAgIFwiZ3JpZFwiOiB7IC4uLiB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnREZWZpbml0aW9uIHtcbiAgLyoqIFVuaXF1ZSByZXBvcnQgaWRlbnRpZmllci4gKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKiogRGlzcGxheSBuYW1lLiAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIEJyaWVmIGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKiogTWV0YWRhdGEgc2NoZW1hIHZlcnNpb24g4oCUIHVzZWQgZm9yIG1pZ3JhdGlvbi4gKi9cbiAgc2NoZW1hVmVyc2lvbjogbnVtYmVyO1xuXG4gIC8qKiBSZXBvcnQgY29udGVudCB2ZXJzaW9uIOKAlCBpbmNyZW1lbnRlZCBvbiBlYWNoIHNhdmUuICovXG4gIHZlcnNpb246IG51bWJlcjtcblxuICAvKiogQ2F0ZWdvcnkgb3IgZ3JvdXAgZm9yIG9yZ2FuaXppbmcgcmVwb3J0cy4gKi9cbiAgY2F0ZWdvcnk/OiBzdHJpbmc7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHJlcG9ydCBpcyBwdWJsaXNoZWQgKHZzLiBkcmFmdCkuICovXG4gIGlzUHVibGlzaGVkPzogYm9vbGVhbjtcblxuICAvKiogUGFnZSBsYXlvdXQgY29uZmlndXJhdGlvbi4gKi9cbiAgbGF5b3V0OiBSZXBvcnRMYXlvdXREZWZpbml0aW9uO1xuXG4gIC8qKiBDb21wb25lbnRzIChjb250cm9scywgYnV0dG9ucywgZGlzcGxheSBlbGVtZW50cykgb24gdGhpcyByZXBvcnQgcGFnZS4gKi9cbiAgY29tcG9uZW50czogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbltdO1xuXG4gIC8qKiBQYXJhbWV0ZXJzIHRoYXQgYnJpZGdlIGlucHV0cyB0byBkYXRhIHNvdXJjZXMuICovXG4gIHBhcmFtZXRlcnM6IFJlcG9ydFBhcmFtZXRlckRlZmluaXRpb25bXTtcblxuICAvKiogRGF0YSBzb3VyY2VzIGZvciBleGVjdXRpbmcgcXVlcmllcy4gKi9cbiAgZGF0YVNvdXJjZXM6IFJlcG9ydERhdGFTb3VyY2VEZWZpbml0aW9uW107XG5cbiAgLyoqIFJlc3VsdCBncmlkIGRlZmluaXRpb24uICovXG4gIGdyaWQ/OiBSZXBvcnRHcmlkRGVmaW5pdGlvbjtcblxuICAvKiogQWNjZXNzIGNvbnRyb2wgc2V0dGluZ3MuICovXG4gIHBlcm1pc3Npb25zPzogUmVwb3J0UGVybWlzc2lvbkRlZmluaXRpb247XG5cbiAgLyoqIFVSTC1mcmllbmRseSBzbHVnIGZvciByb3V0aW5nIChlLmcuICdzYWxlLXJlcG9ydCcpLiBBdXRvLWdlbmVyYXRlZCBmcm9tIG5hbWUgaWYgbm90IHNldC4gKi9cbiAgc2x1Zz86IHN0cmluZztcblxuICAvKiogTWVudSBncm91cCBmb3Igb3JnYW5pemluZyByZXBvcnRzIGluIHRoZSBzaWRlYmFyIChlLmcuICdTYWxlcycsICdGaW5hbmNlJykuICovXG4gIG1lbnVHcm91cD86IHN0cmluZztcblxuICAvKiogU29ydCBvcmRlciB3aXRoaW4gdGhlIG1lbnUgZ3JvdXAuIExvd2VyIG51bWJlcnMgYXBwZWFyIGZpcnN0LiAqL1xuICBtZW51T3JkZXI/OiBudW1iZXI7XG5cbiAgLyoqIE9wdGlvbmFsIGljb24gbmFtZSBmb3IgbWVudSBkaXNwbGF5LiAqL1xuICBpY29uPzogc3RyaW5nO1xuXG4gIC8qKiBDdXN0b20gbWV0YWRhdGEgZm9yIGhvc3Qtc3BlY2lmaWMgZXh0ZW5zaW9ucy4gKi9cbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKiogSVNPIGRhdGUgb2YgY3JlYXRpb24uICovXG4gIGNyZWF0ZWRBdD86IHN0cmluZztcblxuICAvKiogSVNPIGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24uICovXG4gIHVwZGF0ZWRBdD86IHN0cmluZztcblxuICAvKiogVXNlciB3aG8gbGFzdCBtb2RpZmllZC4gKi9cbiAgdXBkYXRlZEJ5Pzogc3RyaW5nO1xufVxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { inject, Injectable } from '@angular/core';
|
|
2
|
-
import { of } from 'rxjs';
|
|
2
|
+
import { of, throwError } from 'rxjs';
|
|
3
3
|
import { catchError, map } from 'rxjs/operators';
|
|
4
4
|
import { ReportSchemaDiscoveryAdapter, } from '../../data-access/contracts/schema-discovery.contract';
|
|
5
5
|
import { ReportLookupAdapter } from '../../data-access/contracts/lookup.contract';
|
|
@@ -122,7 +122,10 @@ export class ReportDataDiscoveryService {
|
|
|
122
122
|
return [];
|
|
123
123
|
}), catchError((err) => {
|
|
124
124
|
console.warn(`[ReportDataDiscoveryService] Dynamic sample detection failed for ${entityName}:`, err);
|
|
125
|
-
|
|
125
|
+
const errorMsg = err?.error?.message ||
|
|
126
|
+
err?.message ||
|
|
127
|
+
`Database query failed for ${entityName}.`;
|
|
128
|
+
return throwError(() => new Error(errorMsg));
|
|
126
129
|
}));
|
|
127
130
|
}
|
|
128
131
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportDataDiscoveryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -132,4 +135,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
132
135
|
type: Injectable,
|
|
133
136
|
args: [{ providedIn: 'root' }]
|
|
134
137
|
}] });
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWRhdGEtZGlzY292ZXJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1kYXRhLWRpc2NvdmVyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBYyxFQUFFLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBS0wsNEJBQTRCLEdBQzdCLE1BQU0sdURBQXVELENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbEYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHL0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBRW5FOzs7Ozs7Ozs7R0FTRztBQUVILE1BQU0sT0FBTywwQkFBMEI7SUFDcEIsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLDRCQUE0QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDNUUsYUFBYSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLGNBQWMsR0FBRyxNQUFNLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUUxRjs7T0FFRztJQUNILFdBQVcsQ0FBQyxLQUE0QjtRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFn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b3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBEYXRhYmFzZUVudGl0eU1ldGFkYXRhLFxuICBEYXRhYmFzZUVudGl0eVR5cGUsXG4gIEVudGl0eUNvbHVtbk1ldGFkYXRhLFxuICBQcm9jZWR1cmVQYXJhbWV0ZXJNZXRhZGF0YSxcbiAgUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbn0gZnJvbSAnLi4vLi4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL3NjaGVtYS1kaXNjb3ZlcnkuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVwb3J0TG9va3VwQWRhcHRlciB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9sb29rdXAuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JpZENvbHVtbkRlZmluaXRpb24gfSBmcm9tICcuLi9tb2RlbHMvcmVwb3J0LWdyaWQubW9kZWwnO1xuaW1wb3J0IHsgRHJvcGRvd25Tb3VyY2VUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgcmVzb2x2ZVBhcmFtZXRlck1hcHBpbmdzIH0gZnJvbSAnLi4vdXRpbHMvcmVwb3J0LXBhcmFtZXRlci51dGlsJztcbmltcG9ydCB7IGh1bWFuaXplSWRlbnRpZmllciB9IGZyb20gJy4uL3V0aWxzL2lkZW50aWZpZXItaHVtYW5pemVyJztcblxuLyoqXG4gKiBDZW50cmFsaXplZCBzZXJ2aWNlIGZvciBkaXNjb3ZlcmluZyBkYXRhYmFzZSBzY2hlbWEgZW50aXRpZXMsIHBhcmFtZXRlcnMsXG4gKiBhbmQgY29sdW1uIGRlZmluaXRpb25zLlxuICpcbiAqIFByb3ZpZGVzIGEgdW5pZmllZCBzdGF0aWMgKyBkeW5hbWljIGRldGVjdGlvbiBwaXBlbGluZTpcbiAqIElmIHN0YXRpYyBzY2hlbWEgbWV0YWRhdGEgZGlzY292ZXJ5IGZhaWxzIChlLmcuIFNRTCBTZXJ2ZXIgc3RvcmVkIHByb2NlZHVyZXNcbiAqIHVzaW5nICN0ZW1wIHRhYmxlcyB0aGF0IGNhbm5vdCBiZSBhbmFseXplZCBzdGF0aWNhbGx5KSwgaXQgYXV0b21hdGljYWxseVxuICogZmFsbHMgYmFjayB0byBleGVjdXRpbmcgYSBzYWZlIGR5bmFtaWMgc2FtcGxlIHF1ZXJ5IHdpdGggdGhlIGFjdGl2ZSBwYXJhbWV0ZXJcbiAqIHZhbHVlcyBhbmQgZXh0cmFjdGluZyBjb2x1bW4gZGVmaW5pdGlvbnMgZnJvbSB0aGUgcmVzdWx0IGRhdGFzZXQuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUmVwb3J0RGF0YURpc2NvdmVyeVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc2NvdmVyeUFkYXB0ZXIgPSBpbmplY3QoUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb29rdXBBZGFwdGVyID0gaW5qZWN0KFJlcG9ydExvb2t1cEFkYXB0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIGRhdGFiYXNlIHRhYmxlcywgdmlld3MsIGFuZCBzdG9yZWQgcHJvY2VkdXJlcy5cbiAgICovXG4gIGdldEVudGl0aWVzKHR5cGVzPzogRGF0YWJhc2VFbnRpdHlUeXBlW10pOiBPYnNlcnZhYmxlPERhdGFiYXNlRW50aXR5TWV0YWRhdGFbXT4ge1xuICAgIGlmICghdGhpcy5kaXNjb3ZlcnlBZGFwdGVyKSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kaXNjb3ZlcnlBZGFwdGVyLmdldEVudGl0aWVzKHR5cGVzKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydERhdGFEaXNjb3ZlcnlTZXJ2aWNlXSBGYWlsZWQgdG8gZ2V0IGVudGl0aWVzOicsIGVycik7XG4gICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHN0b3JlZCBwcm9jZWR1cmUgcGFyYW1ldGVyIG1ldGFkYXRhLlxuICAgKi9cbiAgZ2V0UGFyYW1ldGVycyhwcm9jZWR1cmVOYW1lOiBzdHJpbmcsIHNjaGVtYSA9ICdkYm8nKTogT2JzZXJ2YWJsZTxQcm9jZWR1cmVQYXJhbWV0ZXJNZXRhZGF0YVtdPiB7XG4gICAgaWYgKCFwcm9jZWR1cmVOYW1lIHx8ICF0aGlzLmRpc2NvdmVyeUFkYXB0ZXIpIHtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRpc2NvdmVyeUFkYXB0ZXIuZ2V0UGFyYW1ldGVycyhwcm9jZWR1cmVOYW1lLCBzY2hlbWEpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKGBbUmVwb3J0RGF0YURpc2NvdmVyeVNlcnZpY2VdIEZhaWxlZCB0byBnZXQgcGFyYW1ldGVycyBmb3IgJHtwcm9jZWR1cmVOYW1lfTpgLCBlcnIpO1xuICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuaWZpZWQgY29sdW1uIGRldGVjdGlvbjpcbiAgICogMS4gQXR0ZW1wdHMgc3RhdGljIHNjaGVtYSBkaXNjb3ZlcnkgdmlhIFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIuXG4gICAqIDIuIElmIHN0YXRpYyBkaXNjb3ZlcnkgcmV0dXJucyAwIGNvbHVtbnMgb3IgdGhyb3dzIGFuIGVycm9yIChlLmcuIFNRTCBFcnJvciAxMTUyNiB3aXRoICN0ZW1wIHRhYmxlcyksXG4gICAqICAgIGF1dG9tYXRpY2FsbHkgcnVucyBkeW5hbWljIHNhbXBsZSBxdWVyeSB2aWEgUmVwb3J0TG9va3VwQWRhcHRlciB1c2luZyByZXNvbHZlZCBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgYXV0b0RldGVjdENvbHVtbnMoXG4gICAgZW50aXR5TmFtZTogc3RyaW5nLFxuICAgIGVudGl0eVR5cGU6ICd0YWJsZScgfCAnc3RvcmVkX3Byb2NlZHVyZScgPSAnc3RvcmVkX3Byb2NlZHVyZScsXG4gICAgbWFwcGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30sXG4gICAgc2NoZW1hID0gJ2RibydcbiAgKTogT2JzZXJ2YWJsZTxHcmlkQ29sdW1uRGVmaW5pdGlvbltdPiB7XG4gICAgaWYgKCFlbnRpdHlOYW1lKSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cblxuICAgIC8vIFRyeSBzdGF0aWMgZGlzY292ZXJ5IGZpcnN0XG4gICAgaWYgKHRoaXMuZGlzY292ZXJ5QWRhcHRlcikge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzY292ZXJ5QWRhcHRlci5nZXRDb2x1bW5zKGVudGl0eU5hbWUsIHNjaGVtYSwgZW50aXR5VHlwZSkucGlwZShcbiAgICAgICAgbWFwKChjb2xzKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHMgJiYgY29scy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXBTdGF0aWNDb2x1bW5zVG9HcmlkKGNvbHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NUQVRJQ19FTVBUWScpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgLy8gRmFsbGJhY2sgdG8gZHluYW1pYyBleGVjdXRpb25cbiAgICAgICAgICByZXR1cm4gdGhpcy5mYWxsYmFja0R5bmFtaWNEZXRlY3Rpb24oZW50aXR5TmFtZSwgZW50aXR5VHlwZSwgbWFwcGluZ3MsIHNjaGVtYSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZhbGxiYWNrRHluYW1pY0RldGVjdGlvbihlbnRpdHlOYW1lLCBlbnRpdHlUeXBlLCBtYXBwaW5ncywgc2NoZW1hKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU3RhdGljQ29sdW1uc1RvR3JpZChjb2xzOiBFbnRpdHlDb2x1bW5NZXRhZGF0YVtdKTogR3JpZENvbHVtbkRlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIGNvbHMubWFwKChjKSA9PiAoe1xuICAgICAgZmllbGQ6IGMuZmllbGQsXG4gICAgICBsYWJlbDogaHVtYW5pemVJZGVudGlmaWVyKGMubGFiZWwgfHwgYy5maWVsZCksXG4gICAgICBkYXRhVHlwZTogKGMuZGF0YVR5cGUgYXMgYW55KSB8fCAnc3RyaW5nJyxcbiAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgIGFsaWduOiBjLmRhdGFUeXBlID09PSAnbnVtYmVyJyA/ICdyaWdodCcgOiAnbGVmdCcsXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmYWxsYmFja0R5bmFtaWNEZXRlY3Rpb24oXG4gICAgZW50aXR5TmFtZTogc3RyaW5nLFxuICAgIHNvdXJjZVR5cGU6ICd0YWJsZScgfCAnc3RvcmVkX3Byb2NlZHVyZScsXG4gICAgbWFwcGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHNjaGVtYSA9ICdkYm8nXG4gICk6IE9ic2VydmFibGU8R3JpZENvbHVtbkRlZmluaXRpb25bXT4ge1xuICAgIGlmICghdGhpcy5sb29rdXBBZGFwdGVyKSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cblxuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb25TZXJ2aWNlPy5nZXRDdXJyZW50U2Vzc2lvbkNvbnRleHQoKSA/PyB7fTtcbiAgICBjb25zdCByZXNvbHZlZFBhcmFtcyA9IHJlc29sdmVQYXJhbWV0ZXJNYXBwaW5ncyhtYXBwaW5ncyBhcyBhbnksIHNlc3Npb24sIHt9KTtcblxuICAgIHJldHVybiB0aGlzLmxvb2t1cEFkYXB0ZXJcbiAgICAgIC5mZXRjaE9wdGlvbnMoe1xuICAgICAgICBzb3VyY2VUeXBlOiAoc291cmNlVHlwZSA9PT0gJ3N0b3JlZF9wcm9jZWR1cmUnID8gJ3Byb2NlZHVyZScgOiBzb3VyY2VUeXBlKSBhcyBEcm9wZG93blNvdXJjZVR5cGUsXG4gICAgICAgIGVudGl0eU5hbWUsXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgdmFsdWVGaWVsZDogJycsXG4gICAgICAgIGRpc3BsYXlGaWVsZDogJycsXG4gICAgICAgIHBhcmFtZXRlcnM6IHJlc29sdmVkUGFyYW1zLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCA+IDAgJiYgaXRlbXNbMF0ucmF3KSB7XG4gICAgICAgICAgICBjb25zdCBzYW1wbGVSb3cgPSBpdGVtc1swXS5yYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2FtcGxlUm93KTtcbiAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGtleXMubWFwKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBzYW1wbGVSb3dba2V5XTtcbiAgICAgICAgICAgICAgICBsZXQgdHlwZTogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdkYXRlJyB8ICdib29sZWFuJyA9ICdzdHJpbmcnO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykgdHlwZSA9ICdudW1iZXInO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdib29sZWFuJykgdHlwZSA9ICdib29sZWFuJztcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9Ly50ZXN0KHZhbCkpIHR5cGUgPSAnZGF0ZSc7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgZmllbGQ6IGtleSxcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIoa2V5KSxcbiAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgYWxpZ246ICh0eXBlID09PSAnbnVtYmVyJyA/ICdyaWdodCcgOiAnbGVmdCcpIGFzICdyaWdodCcgfCAnbGVmdCcsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgW1JlcG9ydERhdGFEaXNjb3ZlcnlTZXJ2aWNlXSBEeW5hbWljIHNhbXBsZSBkZXRlY3Rpb24gZmFpbGVkIGZvciAke2VudGl0eU5hbWV9OmAsIGVycik7XG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWRhdGEtZGlzY292ZXJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1kYXRhLWRpc2NvdmVyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUtMLDRCQUE0QixHQUM3QixNQUFNLHVEQUF1RCxDQUFDO0FBQy9ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRy9FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQUVuRTs7Ozs7Ozs7O0dBU0c7QUFFSCxNQUFNLE9BQU8sMEJBQTBCO0lBQ3BCLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyw0QkFBNEIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLGFBQWEsR0FBRyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRSxjQUFjLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFMUY7O09BRUc7SUFDSCxXQUFXLENBQUMsS0FBNEI7UUFDdEMsSUFBSSxDQUFDLElBQUks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MEJBQTBCLGNBRGIsTUFBTTs7NEZBQ25CLDBCQUEwQjtrQkFEdEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBEYXRhYmFzZUVudGl0eU1ldGFkYXRhLFxuICBEYXRhYmFzZUVudGl0eVR5cGUsXG4gIEVudGl0eUNvbHVtbk1ldGFkYXRhLFxuICBQcm9jZWR1cmVQYXJhbWV0ZXJNZXRhZGF0YSxcbiAgUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbn0gZnJvbSAnLi4vLi4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL3NjaGVtYS1kaXNjb3ZlcnkuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVwb3J0TG9va3VwQWRhcHRlciB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9sb29rdXAuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JpZENvbHVtbkRlZmluaXRpb24gfSBmcm9tICcuLi9tb2RlbHMvcmVwb3J0LWdyaWQubW9kZWwnO1xuaW1wb3J0IHsgRHJvcGRvd25Tb3VyY2VUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgcmVzb2x2ZVBhcmFtZXRlck1hcHBpbmdzIH0gZnJvbSAnLi4vdXRpbHMvcmVwb3J0LXBhcmFtZXRlci51dGlsJztcbmltcG9ydCB7IGh1bWFuaXplSWRlbnRpZmllciB9IGZyb20gJy4uL3V0aWxzL2lkZW50aWZpZXItaHVtYW5pemVyJztcblxuLyoqXG4gKiBDZW50cmFsaXplZCBzZXJ2aWNlIGZvciBkaXNjb3ZlcmluZyBkYXRhYmFzZSBzY2hlbWEgZW50aXRpZXMsIHBhcmFtZXRlcnMsXG4gKiBhbmQgY29sdW1uIGRlZmluaXRpb25zLlxuICpcbiAqIFByb3ZpZGVzIGEgdW5pZmllZCBzdGF0aWMgKyBkeW5hbWljIGRldGVjdGlvbiBwaXBlbGluZTpcbiAqIElmIHN0YXRpYyBzY2hlbWEgbWV0YWRhdGEgZGlzY292ZXJ5IGZhaWxzIChlLmcuIFNRTCBTZXJ2ZXIgc3RvcmVkIHByb2NlZHVyZXNcbiAqIHVzaW5nICN0ZW1wIHRhYmxlcyB0aGF0IGNhbm5vdCBiZSBhbmFseXplZCBzdGF0aWNhbGx5KSwgaXQgYXV0b21hdGljYWxseVxuICogZmFsbHMgYmFjayB0byBleGVjdXRpbmcgYSBzYWZlIGR5bmFtaWMgc2FtcGxlIHF1ZXJ5IHdpdGggdGhlIGFjdGl2ZSBwYXJhbWV0ZXJcbiAqIHZhbHVlcyBhbmQgZXh0cmFjdGluZyBjb2x1bW4gZGVmaW5pdGlvbnMgZnJvbSB0aGUgcmVzdWx0IGRhdGFzZXQuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUmVwb3J0RGF0YURpc2NvdmVyeVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc2NvdmVyeUFkYXB0ZXIgPSBpbmplY3QoUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb29rdXBBZGFwdGVyID0gaW5qZWN0KFJlcG9ydExvb2t1cEFkYXB0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIGRhdGFiYXNlIHRhYmxlcywgdmlld3MsIGFuZCBzdG9yZWQgcHJvY2VkdXJlcy5cbiAgICovXG4gIGdldEVudGl0aWVzKHR5cGVzPzogRGF0YWJhc2VFbnRpdHlUeXBlW10pOiBPYnNlcnZhYmxlPERhdGFiYXNlRW50aXR5TWV0YWRhdGFbXT4ge1xuICAgIGlmICghdGhpcy5kaXNjb3ZlcnlBZGFwdGVyKSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kaXNjb3ZlcnlBZGFwdGVyLmdldEVudGl0aWVzKHR5cGVzKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydERhdGFEaXNjb3ZlcnlTZXJ2aWNlXSBGYWlsZWQgdG8gZ2V0IGVudGl0aWVzOicsIGVycik7XG4gICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHN0b3JlZCBwcm9jZWR1cmUgcGFyYW1ldGVyIG1ldGFkYXRhLlxuICAgKi9cbiAgZ2V0UGFyYW1ldGVycyhwcm9jZWR1cmVOYW1lOiBzdHJpbmcsIHNjaGVtYSA9ICdkYm8nKTogT2JzZXJ2YWJsZTxQcm9jZWR1cmVQYXJhbWV0ZXJNZXRhZGF0YVtdPiB7XG4gICAgaWYgKCFwcm9jZWR1cmVOYW1lIHx8ICF0aGlzLmRpc2NvdmVyeUFkYXB0ZXIpIHtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRpc2NvdmVyeUFkYXB0ZXIuZ2V0UGFyYW1ldGVycyhwcm9jZWR1cmVOYW1lLCBzY2hlbWEpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKGBbUmVwb3J0RGF0YURpc2NvdmVyeVNlcnZpY2VdIEZhaWxlZCB0byBnZXQgcGFyYW1ldGVycyBmb3IgJHtwcm9jZWR1cmVOYW1lfTpgLCBlcnIpO1xuICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuaWZpZWQgY29sdW1uIGRldGVjdGlvbjpcbiAgICogMS4gQXR0ZW1wdHMgc3RhdGljIHNjaGVtYSBkaXNjb3ZlcnkgdmlhIFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIuXG4gICAqIDIuIElmIHN0YXRpYyBkaXNjb3ZlcnkgcmV0dXJucyAwIGNvbHVtbnMgb3IgdGhyb3dzIGFuIGVycm9yIChlLmcuIFNRTCBFcnJvciAxMTUyNiB3aXRoICN0ZW1wIHRhYmxlcyksXG4gICAqICAgIGF1dG9tYXRpY2FsbHkgcnVucyBkeW5hbWljIHNhbXBsZSBxdWVyeSB2aWEgUmVwb3J0TG9va3VwQWRhcHRlciB1c2luZyByZXNvbHZlZCBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgYXV0b0RldGVjdENvbHVtbnMoXG4gICAgZW50aXR5TmFtZTogc3RyaW5nLFxuICAgIGVudGl0eVR5cGU6ICd0YWJsZScgfCAnc3RvcmVkX3Byb2NlZHVyZScgPSAnc3RvcmVkX3Byb2NlZHVyZScsXG4gICAgbWFwcGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30sXG4gICAgc2NoZW1hID0gJ2RibydcbiAgKTogT2JzZXJ2YWJsZTxHcmlkQ29sdW1uRGVmaW5pdGlvbltdPiB7XG4gICAgaWYgKCFlbnRpdHlOYW1lKSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cblxuICAgIC8vIFRyeSBzdGF0aWMgZGlzY292ZXJ5IGZpcnN0XG4gICAgaWYgKHRoaXMuZGlzY292ZXJ5QWRhcHRlcikge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzY292ZXJ5QWRhcHRlci5nZXRDb2x1bW5zKGVudGl0eU5hbWUsIHNjaGVtYSwgZW50aXR5VHlwZSkucGlwZShcbiAgICAgICAgbWFwKChjb2xzKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHMgJiYgY29scy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXBTdGF0aWNDb2x1bW5zVG9HcmlkKGNvbHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NUQVRJQ19FTVBUWScpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgLy8gRmFsbGJhY2sgdG8gZHluYW1pYyBleGVjdXRpb25cbiAgICAgICAgICByZXR1cm4gdGhpcy5mYWxsYmFja0R5bmFtaWNEZXRlY3Rpb24oZW50aXR5TmFtZSwgZW50aXR5VHlwZSwgbWFwcGluZ3MsIHNjaGVtYSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZhbGxiYWNrRHluYW1pY0RldGVjdGlvbihlbnRpdHlOYW1lLCBlbnRpdHlUeXBlLCBtYXBwaW5ncywgc2NoZW1hKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU3RhdGljQ29sdW1uc1RvR3JpZChjb2xzOiBFbnRpdHlDb2x1bW5NZXRhZGF0YVtdKTogR3JpZENvbHVtbkRlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIGNvbHMubWFwKChjKSA9PiAoe1xuICAgICAgZmllbGQ6IGMuZmllbGQsXG4gICAgICBsYWJlbDogaHVtYW5pemVJZGVudGlmaWVyKGMubGFiZWwgfHwgYy5maWVsZCksXG4gICAgICBkYXRhVHlwZTogKGMuZGF0YVR5cGUgYXMgYW55KSB8fCAnc3RyaW5nJyxcbiAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgIGFsaWduOiBjLmRhdGFUeXBlID09PSAnbnVtYmVyJyA/ICdyaWdodCcgOiAnbGVmdCcsXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmYWxsYmFja0R5bmFtaWNEZXRlY3Rpb24oXG4gICAgZW50aXR5TmFtZTogc3RyaW5nLFxuICAgIHNvdXJjZVR5cGU6ICd0YWJsZScgfCAnc3RvcmVkX3Byb2NlZHVyZScsXG4gICAgbWFwcGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHNjaGVtYSA9ICdkYm8nXG4gICk6IE9ic2VydmFibGU8R3JpZENvbHVtbkRlZmluaXRpb25bXT4ge1xuICAgIGlmICghdGhpcy5sb29rdXBBZGFwdGVyKSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cblxuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb25TZXJ2aWNlPy5nZXRDdXJyZW50U2Vzc2lvbkNvbnRleHQoKSA/PyB7fTtcbiAgICBjb25zdCByZXNvbHZlZFBhcmFtcyA9IHJlc29sdmVQYXJhbWV0ZXJNYXBwaW5ncyhtYXBwaW5ncyBhcyBhbnksIHNlc3Npb24sIHt9KTtcblxuICAgIHJldHVybiB0aGlzLmxvb2t1cEFkYXB0ZXJcbiAgICAgIC5mZXRjaE9wdGlvbnMoe1xuICAgICAgICBzb3VyY2VUeXBlOiAoc291cmNlVHlwZSA9PT0gJ3N0b3JlZF9wcm9jZWR1cmUnID8gJ3Byb2NlZHVyZScgOiBzb3VyY2VUeXBlKSBhcyBEcm9wZG93blNvdXJjZVR5cGUsXG4gICAgICAgIGVudGl0eU5hbWUsXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgdmFsdWVGaWVsZDogJycsXG4gICAgICAgIGRpc3BsYXlGaWVsZDogJycsXG4gICAgICAgIHBhcmFtZXRlcnM6IHJlc29sdmVkUGFyYW1zLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCA+IDAgJiYgaXRlbXNbMF0ucmF3KSB7XG4gICAgICAgICAgICBjb25zdCBzYW1wbGVSb3cgPSBpdGVtc1swXS5yYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2FtcGxlUm93KTtcbiAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGtleXMubWFwKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBzYW1wbGVSb3dba2V5XTtcbiAgICAgICAgICAgICAgICBsZXQgdHlwZTogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdkYXRlJyB8ICdib29sZWFuJyA9ICdzdHJpbmcnO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykgdHlwZSA9ICdudW1iZXInO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdib29sZWFuJykgdHlwZSA9ICdib29sZWFuJztcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9Ly50ZXN0KHZhbCkpIHR5cGUgPSAnZGF0ZSc7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgZmllbGQ6IGtleSxcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIoa2V5KSxcbiAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgYWxpZ246ICh0eXBlID09PSAnbnVtYmVyJyA/ICdyaWdodCcgOiAnbGVmdCcpIGFzICdyaWdodCcgfCAnbGVmdCcsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgW1JlcG9ydERhdGFEaXNjb3ZlcnlTZXJ2aWNlXSBEeW5hbWljIHNhbXBsZSBkZXRlY3Rpb24gZmFpbGVkIGZvciAke2VudGl0eU5hbWV9OmAsIGVycik7XG4gICAgICAgICAgY29uc3QgZXJyb3JNc2cgPVxuICAgICAgICAgICAgZXJyPy5lcnJvcj8ubWVzc2FnZSB8fFxuICAgICAgICAgICAgZXJyPy5tZXNzYWdlIHx8XG4gICAgICAgICAgICBgRGF0YWJhc2UgcXVlcnkgZmFpbGVkIGZvciAke2VudGl0eU5hbWV9LmA7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKGVycm9yTXNnKSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -2,6 +2,7 @@ import { computed, inject, Injectable, signal, } from '@angular/core';
|
|
|
2
2
|
import { toObservable } from '@angular/core/rxjs-interop';
|
|
3
3
|
import { isObservable } from 'rxjs';
|
|
4
4
|
import { REPORT_SESSION_CONTEXT, REPORT_SESSION_PROVIDER, } from '../tokens/session-context.token';
|
|
5
|
+
import { REPORTING_CONFIG } from '../tokens/reporting-config.token';
|
|
5
6
|
import { humanizeIdentifier } from '../utils/identifier-humanizer';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
/**
|
|
@@ -18,6 +19,7 @@ export class ReportSessionContextService {
|
|
|
18
19
|
sessionProvider = inject(REPORT_SESSION_PROVIDER, {
|
|
19
20
|
optional: true,
|
|
20
21
|
});
|
|
22
|
+
reportingConfig = inject(REPORTING_CONFIG, { optional: true });
|
|
21
23
|
/** Internal manual runtime session overrides (e.g. set via setSessionContext or setSessionParameter) */
|
|
22
24
|
manualRuntimeContext = signal({});
|
|
23
25
|
latestObservableValue = signal({});
|
|
@@ -318,12 +320,14 @@ export class ReportSessionContextService {
|
|
|
318
320
|
finalParams[paramName] = explicitVal;
|
|
319
321
|
continue;
|
|
320
322
|
}
|
|
321
|
-
// Check for session context match
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
323
|
+
// Check for session context match (skip when autoParameter is disabled)
|
|
324
|
+
if (this.reportingConfig?.autoParameter !== false) {
|
|
325
|
+
const sessionMatch = this.matchParameter(paramName);
|
|
326
|
+
if (sessionMatch && sessionMatch.value !== undefined && sessionMatch.value !== null) {
|
|
327
|
+
finalParams[paramName] = sessionMatch.value;
|
|
328
|
+
autoDerived[paramName] = sessionMatch;
|
|
329
|
+
continue;
|
|
330
|
+
}
|
|
327
331
|
}
|
|
328
332
|
// If default value is provided in SP metadata
|
|
329
333
|
if (param.defaultValue !== undefined && param.defaultValue !== null) {
|
|
@@ -356,4 +360,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
356
360
|
providedIn: 'root',
|
|
357
361
|
}]
|
|
358
362
|
}], ctorParameters: () => [] });
|
|
359
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUVWLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix1QkFBdUIsR0FLeEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFrQm5FOzs7Ozs7R0FNRztBQUlILE1BQU0sT0FBTywyQkFBMkI7SUFDckIsU0FBUyxHQUFHLE1BQU0sQ0FBOEIsc0JBQXNCLEVBQUU7UUFDdkYsUUFBUSxFQUFFLElBQUk7S0FDZixDQUFDLENBQUM7SUFDYyxlQUFlLEdBQUcsTUFBTSxDQUFnQyx1QkFBdUIsRUFBRTtRQUNoRyxRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FBQztJQUVILHdHQUF3RztJQUN2RixvQkFBb0IsR0FBRyxNQUFNLENBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELHFCQUFxQixHQUFHLE1BQU0sQ0FBb0IsRUFBRSxDQUFDLENBQUM7SUFDdEQsdUJBQXVCLEdBQUcsTUFBTSxDQUFvQixFQUFFLENBQUMsQ0FBQztJQUVqRSxhQUFhLENBQWdCO0lBQzdCLFdBQVcsQ0FBZ0I7SUFFbkM7Ozs7T0FJRztJQUNNLGNBQWMsR0FBOEIsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNqRSxJQUFJLFdBQVcsR0FB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U0FDN0MsQ0FBQztJQUNKLENBQUM7d0dBeFdVLDJCQUEyQjs0R0FBM0IsMkJBQTJCLGNBRjFCLE1BQU07OzRGQUVQLDJCQUEyQjtrQkFIdkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBJbmplY3RhYmxlLFxuICBPbkRlc3Ryb3ksXG4gIHNpZ25hbCxcbiAgU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBSRVBPUlRfU0VTU0lPTl9DT05URVhULFxuICBSRVBPUlRfU0VTU0lPTl9QUk9WSURFUixcbiAgU2Vzc2lvbkNvbnRleHRNYXAsXG4gIFNlc3Npb25Db250ZXh0UHJvdmlkZXIsXG4gIFNlc3Npb25Db250ZXh0U291cmNlLFxuICBTZXNzaW9uUGFyYW1QcmltaXRpdmUsXG59IGZyb20gJy4uL3Rva2Vucy9zZXNzaW9uLWNvbnRleHQudG9rZW4nO1xuaW1wb3J0IHsgUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvc2NoZW1hLWRpc2NvdmVyeS5jb250cmFjdCc7XG5pbXBvcnQgeyBodW1hbml6ZUlkZW50aWZpZXIgfSBmcm9tICcuLi91dGlscy9pZGVudGlmaWVyLWh1bWFuaXplcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvblBhcmFtTWF0Y2gge1xuICBpc01hdGNoZWQ6IGJvb2xlYW47XG4gIHNlc3Npb25LZXk6IHN0cmluZztcbiAgdmFsdWU6IFNlc3Npb25QYXJhbVByaW1pdGl2ZTtcbiAgZnJpZW5kbHlMYWJlbDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlcml2ZWRQYXJhbWV0ZXJzUmVzdWx0IHtcbiAgLyoqIFRoZSBjb25zb2xpZGF0ZWQgcGFyYW1ldGVyIHBheWxvYWQgZm9yIHN0b3JlZCBwcm9jZWR1cmUgZXhlY3V0aW9uICovXG4gIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogTWFwIG9mIHdoaWNoIFNQIHBhcmFtZXRlcnMgd2VyZSBhdXRvLWRlcml2ZWQgZnJvbSBzZXNzaW9uIGNvbnRleHQgKi9cbiAgYXV0b0Rlcml2ZWRQYXJhbXM6IFJlY29yZDxzdHJpbmcsIFNlc3Npb25QYXJhbU1hdGNoPjtcbiAgLyoqIEFueSByZXF1aXJlZCBwYXJhbWV0ZXJzIHRoYXQgd2VyZSBuZWl0aGVyIGluIHNlc3Npb24gY29udGV4dCBub3IgZXhwbGljaXRseSBtYXBwZWQgKi9cbiAgdW5yZXNvbHZlZFJlcXVpcmVkUGFyYW1zOiBQcm9jZWR1cmVQYXJhbWV0ZXJNZXRhZGF0YVtdO1xufVxuXG4vKipcbiAqIFNlcnZpY2UgdGhhdCBtYW5hZ2VzIGhvc3QgYXBwbGljYXRpb24gc2Vzc2lvbiBjb250ZXh0IHBhcmFtZXRlcnMgKGUuZy4gYnJhbmNoSWQsIGNvbXBhbnlJZCwgdXNlcklkKVxuICogYXQgcnVudGltZSBhbmQgYXV0b21hdGljYWxseSBkZXRlY3RzIGFuZCBiaW5kcyB0aGVtIHRvIFN0b3JlZCBQcm9jZWR1cmUgcGFyYW1ldGVycy5cbiAqXG4gKiBEZXNpZ25lZCB0byBjb21wbGV0ZWx5IHNoaWVsZCBlbmQgdXNlcnMgZnJvbSBlbnRlcmluZyB0ZWNobmljYWwgc2Vzc2lvbiBwYXJhbWV0ZXJzIHdoaWxlXG4gKiBlbGltaW5hdGluZyBzaWxlbnQgZmFpbHVyZXMgb3IgdGhyZWFkIGNyYXNoZXMgaW4gaG9zdCBpbnRlZ3JhdGlvbnMuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IHJhd1NvdXJjZSA9IGluamVjdDxTZXNzaW9uQ29udGV4dFNvdXJjZSB8IG51bGw+KFJFUE9SVF9TRVNTSU9OX0NPTlRFWFQsIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblByb3ZpZGVyID0gaW5qZWN0PFNlc3Npb25Db250ZXh0UHJvdmlkZXIgfCBudWxsPihSRVBPUlRfU0VTU0lPTl9QUk9WSURFUiwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcblxuICAvKiogSW50ZXJuYWwgbWFudWFsIHJ1bnRpbWUgc2Vzc2lvbiBvdmVycmlkZXMgKGUuZy4gc2V0IHZpYSBzZXRTZXNzaW9uQ29udGV4dCBvciBzZXRTZXNzaW9uUGFyYW1ldGVyKSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG1hbnVhbFJ1bnRpbWVDb250ZXh0ID0gc2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPih7fSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGF0ZXN0T2JzZXJ2YWJsZVZhbHVlID0gc2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPih7fSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvdmlkZXJPYnNlcnZhYmxlVmFsdWUgPSBzaWduYWw8U2Vzc2lvbkNvbnRleHRNYXA+KHt9KTtcblxuICBwcml2YXRlIG9ic2VydmFibGVTdWI/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcHJvdmlkZXJTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIFJlYWN0aXZlIHNpZ25hbCBleHBvc2luZyB0aGUgbGl2ZSBzZXNzaW9uIGNvbnRleHQgcGFyYW1ldGVycy5cbiAgICogVXBkYXRlcyBhdXRvbWF0aWNhbGx5IHdoZW4gaG9zdCBhcHAgbXV0YXRlcyBydW50aW1lIHN0YXRlLCB3aGVuIG9ic2VydmFibGVzIGVtaXQsXG4gICAqIG9yIHdoZW4gcmVhY3RpdmUgc2lnbmFscyB1cGRhdGUuXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uQ29udGV4dDogU2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBsZXQgcHJvdmlkZXJNYXA6IFNlc3Npb25Db250ZXh0TWFwID0ge307XG4gICAgaWYgKHRoaXMuc2Vzc2lvblByb3ZpZGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnNlc3Npb25Qcm92aWRlci5nZXRTZXNzaW9uQ29udGV4dCgpO1xuICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IChyZXMgYXMgKCkgPT4gU2Vzc2lvbkNvbnRleHRNYXApKCk7XG4gICAgICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcHJvdmlkZXJNYXAgPSB2YWw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzT2JzZXJ2YWJsZShyZXMpKSB7XG4gICAgICAgICAgcHJvdmlkZXJNYXAgPSB0aGlzLnByb3ZpZGVyT2JzZXJ2YWJsZVZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmICEoJ3RoZW4nIGluIHJlcykpIHtcbiAgICAgICAgICBwcm92aWRlck1hcCA9IHJlcyBhcyBTZXNzaW9uQ29udGV4dE1hcDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgcmVhZGluZyBTZXNzaW9uQ29udGV4dFByb3ZpZGVyOicsIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHRva2VuTWFwOiBTZXNzaW9uQ29udGV4dE1hcCA9IHt9O1xuICAgIGlmICh0aGlzLnJhd1NvdXJjZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZSh0aGlzLnJhd1NvdXJjZSkpIHtcbiAgICAgICAgICB0b2tlbk1hcCA9IHRoaXMubGF0ZXN0T2JzZXJ2YWJsZVZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMucmF3U291cmNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5yYXdTb3VyY2UoKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJSZXMgPSAocmVzIGFzICgpID0+IHVua25vd24pKCk7XG4gICAgICAgICAgICB0b2tlbk1hcCA9IGlubmVyUmVzICYmIHR5cGVvZiBpbm5lclJlcyA9PT0gJ29iamVjdCcgPyAoaW5uZXJSZXMgYXMgU2Vzc2lvbkNvbnRleHRNYXApIDoge307XG4gICAgICAgICAgfSBlbHNlIGlmIChpc09ic2VydmFibGUocmVzKSkge1xuICAgICAgICAgICAgdG9rZW5NYXAgPSB0aGlzLmxhdGVzdE9ic2VydmFibGVWYWx1ZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b2tlbk1hcCA9IHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyA/IChyZXMgYXMgU2Vzc2lvbkNvbnRleHRNYXApIDoge307XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnJhd1NvdXJjZSA9PT0gJ29iamVjdCcgJiYgdGhpcy5yYXdTb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICB0b2tlbk1hcCA9IHRoaXMucmF3U291cmNlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciBldmFsdWF0aW5nIHJhdyBzZXNzaW9uIHNvdXJjZTonLCBlcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1hbnVhbE1hcCA9IHRoaXMubWFudWFsUnVudGltZUNvbnRleHQoKTtcbiAgICBjb25zdCBhdXRvRGV0ZWN0ZWQgPSB0aGlzLmRldGVjdEJyb3dzZXJTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYXV0b0RldGVjdGVkLFxuICAgICAgLi4ucHJvdmlkZXJNYXAsXG4gICAgICAuLi50b2tlbk1hcCxcbiAgICAgIC4uLm1hbnVhbE1hcCxcbiAgICB9O1xuICB9KTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBzdHJlYW0gb2YgbGl2ZSBzZXNzaW9uIHBhcmFtZXRlcnMgZm9yIFJ4SlMtYmFzZWQgaW50ZWdyYXRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvbkNvbnRleHQkOiBPYnNlcnZhYmxlPFNlc3Npb25Db250ZXh0TWFwPiA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNlc3Npb25Db250ZXh0KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmluaXRTdWJzY3JpcHRpb25zKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9ic2VydmFibGVTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5wcm92aWRlclN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmF3U291cmNlICYmIGlzT2JzZXJ2YWJsZSh0aGlzLnJhd1NvdXJjZSkpIHtcbiAgICAgIHRoaXMub2JzZXJ2YWJsZVN1YiA9IHRoaXMucmF3U291cmNlLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICh2YWwpID0+IHtcbiAgICAgICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aGlzLmxhdGVzdE9ic2VydmFibGVWYWx1ZS5zZXQoeyAuLi52YWwgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgZnJvbSBzZXNzaW9uIGNvbnRleHQgb2JzZXJ2YWJsZTonLCBlcnIpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2Vzc2lvblByb3ZpZGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnNlc3Npb25Qcm92aWRlci5nZXRTZXNzaW9uQ29udGV4dCgpO1xuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlcykpIHtcbiAgICAgICAgICB0aGlzLnByb3ZpZGVyU3ViID0gcmVzLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAodmFsKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3ZpZGVyT2JzZXJ2YWJsZVZhbHVlLnNldCh7IC4uLnZhbCB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgZnJvbSBzZXNzaW9uIHByb3ZpZGVyIG9ic2VydmFibGU6JywgZXJyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgcmVzICYmXG4gICAgICAgICAgdHlwZW9mIHJlcyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAndGhlbicgaW4gcmVzICYmXG4gICAgICAgICAgdHlwZW9mIChyZXMgYXMgUHJvbWlzZTx1bmtub3duPikudGhlbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICApIHtcbiAgICAgICAgICAocmVzIGFzIFByb21pc2U8U2Vzc2lvbkNvbnRleHRNYXA+KVxuICAgICAgICAgICAgLnRoZW4oKHZhbCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm92aWRlck9ic2VydmFibGVWYWx1ZS5zZXQoeyAuLi52YWwgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2VdIEVycm9yIGZyb20gc2Vzc2lvbiBwcm92aWRlciBwcm9taXNlOicsIGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgaW5pdGlhbGl6aW5nIHNlc3Npb24gcHJvdmlkZXI6JywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBvciByZXBsYWNlcyB0aGUgcnVudGltZSBzZXNzaW9uIGNvbnRleHQuXG4gICAqIENhbiBiZSBjYWxsZWQgZHluYW1pY2FsbHkgYWZ0ZXIgdXNlciBhdXRoZW50aWNhdGlvbiwgYnJhbmNoIGNoYW5nZSwgZXRjLlxuICAgKi9cbiAgc2V0U2Vzc2lvbkNvbnRleHQoY29udGV4dDogU2Vzc2lvbkNvbnRleHRNYXApOiB2b2lkIHtcbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMubWFudWFsUnVudGltZUNvbnRleHQuc2V0KHsgLi4uY29udGV4dCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYW51YWxSdW50aW1lQ29udGV4dC5zZXQoe30pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIG9yIHNldHMgYSBzcGVjaWZpYyBzZXNzaW9uIHBhcmFtZXRlciBhdCBydW50aW1lIChlLmcuIGJyYW5jaElkID0gMikuXG4gICAqL1xuICBzZXRTZXNzaW9uUGFyYW1ldGVyKGtleTogc3RyaW5nLCB2YWx1ZTogU2Vzc2lvblBhcmFtUHJpbWl0aXZlKTogdm9pZCB7XG4gICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICB0aGlzLm1hbnVhbFJ1bnRpbWVDb250ZXh0LnVwZGF0ZSgoY3VycmVudCkgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICBba2V5XTogdmFsdWUsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbnkgcnVudGltZSBzZXNzaW9uIHBhcmFtZXRlcnMgc2V0IHZpYSBgc2V0U2Vzc2lvbkNvbnRleHRgIG9yIGBzZXRTZXNzaW9uUGFyYW1ldGVyYC5cbiAgICovXG4gIGNsZWFyU2Vzc2lvbkNvbnRleHQoKTogdm9pZCB7XG4gICAgdGhpcy5tYW51YWxSdW50aW1lQ29udGV4dC5zZXQoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhZmVseSByZXR1cm5zIHRoZSBjdXJyZW50IHNlc3Npb24gY29udGV4dCBtYXAuXG4gICAqIEFsd2F5cyBwdWxscyB0aGUgbGF0ZXN0IHJ1bnRpbWUgc3RhdGUuIE5ldmVyIHRocm93cyBvciBjcmFzaGVzIHRoZSB0aHJlYWQuXG4gICAqL1xuICBnZXRDdXJyZW50U2Vzc2lvbkNvbnRleHQoKTogU2Vzc2lvbkNvbnRleHRNYXAge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXNzaW9uQ29udGV4dCgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBGYWlsZWQgdG8gZXZhbHVhdGUgc2Vzc2lvbiBjb250ZXh0OicsIGVycik7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhZmVseSBkZXRlY3RzIHNlc3Npb24gcGFyYW1ldGVycyBmcm9tIGhvc3QgcHJvamVjdCBicm93c2VyIHN0b3JhZ2VcbiAgICogKHNlc3Npb25TdG9yYWdlOiB1c2VyX0luZm8sIGN1cnJlbnRVc2VyOyBsb2NhbFN0b3JhZ2U6IGN1cnJlbnRVc2VyLCBDb21wYW55RGF0YSwgdXNlcl9JbmZvKS5cbiAgICovXG4gIHByaXZhdGUgZGV0ZWN0QnJvd3NlclNlc3Npb24oKTogU2Vzc2lvbkNvbnRleHRNYXAge1xuICAgIGNvbnN0IHJlc3VsdDogU2Vzc2lvbkNvbnRleHRNYXAgPSB7fTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiByZXN1bHQ7XG5cbiAgICBjb25zdCBzb3VyY2VzOiBBcnJheTx7IHN0b3JhZ2U6IFN0b3JhZ2UgfCBudWxsOyBrZXk6IHN0cmluZyB9PiA9IFtcbiAgICAgIHsgc3RvcmFnZTogdHlwZW9mIHNlc3Npb25TdG9yYWdlICE9PSAndW5kZWZpbmVkJyA/IHNlc3Npb25TdG9yYWdlIDogbnVsbCwga2V5OiAndXNlcl9JbmZvJyB9LFxuICAgICAgeyBzdG9yYWdlOiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyA/IGxvY2FsU3RvcmFnZSA6IG51bGwsIGtleTogJ2N1cnJlbnRVc2VyJyB9LFxuICAgICAgeyBzdG9yYWdlOiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyA/IGxvY2FsU3RvcmFnZSA6IG51bGwsIGtleTogJ0NvbXBhbnlEYXRhJyB9LFxuICAgICAgeyBzdG9yYWdlOiB0eXBlb2Ygc2Vzc2lvblN0b3JhZ2UgIT09ICd1bmRlZmluZWQnID8gc2Vzc2lvblN0b3JhZ2UgOiBudWxsLCBrZXk6ICdjdXJyZW50VXNlcicgfSxcbiAgICAgIHsgc3RvcmFnZTogdHlwZW9mIGxvY2FsU3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcgPyBsb2NhbFN0b3JhZ2UgOiBudWxsLCBrZXk6ICd1c2VyX0luZm8nIH0sXG4gICAgXTtcblxuICAgIGZvciAoY29uc3Qgc3JjIG9mIHNvdXJjZXMpIHtcbiAgICAgIGlmICghc3JjLnN0b3JhZ2UpIGNvbnRpbnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHNyYy5zdG9yYWdlLmdldEl0ZW0oc3JjLmtleSk7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShpdGVtKTtcbiAgICAgICAgICBpZiAocGFyc2VkICYmIHR5cGVvZiBwYXJzZWQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwYXJzZWQpKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB2ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICB2ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgKHR5cGVvZiB2ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHYgPT09ICdib29sZWFuJylcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoayBpbiByZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHRba10gPSB2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElnbm9yZSBKU09OIHBhcnNlIGVycm9ycyBpbiBzdG9yYWdlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemVzIGEgcGFyYW1ldGVyIG9yIHNlc3Npb24ga2V5IGludG8gYSBsb3dlcmNhc2UgYWxwaGFudW1lcmljIHN0cmluZ1xuICAgKiBmb3IgcmVsaWFibGUsIGNhc2UtaW5zZW5zaXRpdmUsIGFuZCBzeW1ib2wtaW5zZW5zaXRpdmUgbWF0Y2hpbmcuXG4gICAqIFN0cmlwcyBTUUwgU2VydmVyIEh1bmdhcmlhbiB0eXBlIHByZWZpeGVzIChlLmcuICdAY2hyQ29tcGFueUlkJyAtPiAnY29tcGFueWlkJykuXG4gICAqL1xuICBub3JtYWxpemVLZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICgha2V5IHx8IHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIGtleVxuICAgICAgLnJlcGxhY2UoL15AKy8sICcnKVxuICAgICAgLnJlcGxhY2UoL14oY2hyfGludHx2Y2hyfG5jaHJ8ZHR8c3RyfG51bXxiaXR8ZGVjfGZsdCkrL2ksICcnKVxuICAgICAgLnJlcGxhY2UoL1tfXFwtXFxzXSsvZywgJycpXG4gICAgICAudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIHN0b3JlZCBwcm9jZWR1cmUgcGFyYW1ldGVyIG1hdGNoZXMgYW55IGtleSBpbiB0aGUgYWN0aXZlIHNlc3Npb24gY29udGV4dC5cbiAgICogU3VwcG9ydHMgZXhhY3QsIG5vcm1hbGl6ZWQsIGFuZCBjb21tb24gRVJQIHN5bm9ueW1zLlxuICAgKi9cbiAgbWF0Y2hQYXJhbWV0ZXIocGFyYW1OYW1lOiBzdHJpbmcpOiBTZXNzaW9uUGFyYW1NYXRjaCB8IG51bGwge1xuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldEN1cnJlbnRTZXNzaW9uQ29udGV4dCgpO1xuICAgIGNvbnN0IHNlc3Npb25LZXlzID0gT2JqZWN0LmtleXMoc2Vzc2lvbik7XG4gICAgaWYgKHNlc3Npb25LZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBub3JtYWxpemVkUGFyYW0gPSB0aGlzLm5vcm1hbGl6ZUtleShwYXJhbU5hbWUpO1xuXG4gICAgLy8gMS4gRXhhY3QgbWF0Y2ggb24gcmF3IG5hbWVcbiAgICBpZiAocGFyYW1OYW1lIGluIHNlc3Npb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzTWF0Y2hlZDogdHJ1ZSxcbiAgICAgICAgc2Vzc2lvbktleTogcGFyYW1OYW1lLFxuICAgICAgICB2YWx1ZTogc2Vzc2lvbltwYXJhbU5hbWVdLFxuICAgICAgICBmcmllbmRseUxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIocGFyYW1OYW1lKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gMi4gRGlyZWN0IG5vcm1hbGl6ZWQgbWF0Y2hcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBzZXNzaW9uS2V5cykge1xuICAgICAgaWYgKHRoaXMubm9ybWFsaXplS2V5KGtleSkgPT09IG5vcm1hbGl6ZWRQYXJhbSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzTWF0Y2hlZDogdHJ1ZSxcbiAgICAgICAgICBzZXNzaW9uS2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHNlc3Npb25ba2V5XSxcbiAgICAgICAgICBmcmllbmRseUxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIoa2V5KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBDb21tb24gRVJQIHN5bm9ueW0gZ3JvdXBzIChiaWRpcmVjdGlvbmFsIG1hdGNoaW5nKVxuICAgIGNvbnN0IHN5bm9ueW1Hcm91cHM6IHN0cmluZ1tdW10gPSBbXG4gICAgICBbJ2JyYW5jaCcsICdicmFuY2hpZCcsICdiaWQnLCAnYnJhbmNoY29kZScsICdsb2NhdGlvbmlkJywgJ2xvY2F0aW9uJywgJ2NvbXB1bml0JywgJ2NvbXB1bml0aWQnLCAndW5pdGNvZGUnLCAndW5pdGlkJywgJ2NvbXB1bml0cyddLFxuICAgICAgWydjb21wYW55JywgJ2NvbXBhbnlpZCcsICdjaWQnLCAnY29tcGFueWNvZGUnLCAndGVuYW50JywgJ3RlbmFudGlkJ10sXG4gICAgICBbJ3VzZXInLCAndXNlcmlkJywgJ3VpZCcsICd1c2VyY29kZScsICdvcGVyYXRvcmlkJywgJ2xvZ2ludXNlcicsICd1c2VybmFtZSddLFxuICAgICAgWydmaW5hbmNpYWx5ZWFyJywgJ2ZpbmFuY2lhbHllYXJpZCcsICd5ZWFyaWQnLCAnZnllYXInLCAnZmlzY2FseWVhcicsICdmaW55ZWFyJ10sXG4gICAgICBbJ2xvZ2luaWRlbnRpdHknLCAnbG9naW5faWRlbnRpdHknLCAnc3RhdHVzY29kZScsICdzdGF0dXNfY29kZSddLFxuICAgICAgWydvcmcnLCAnb3JnaWQnLCAnb3JnYW5pemF0aW9uJywgJ29yZ2FuaXphdGlvbmlkJ10sXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgZ3JvdXAgb2Ygc3lub255bUdyb3Vwcykge1xuICAgICAgaWYgKGdyb3VwLmluY2x1ZGVzKG5vcm1hbGl6ZWRQYXJhbSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygc2Vzc2lvbktleXMpIHtcbiAgICAgICAgICBpZiAoZ3JvdXAuaW5jbHVkZXModGhpcy5ub3JtYWxpemVLZXkoa2V5KSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlzTWF0Y2hlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgc2Vzc2lvbktleToga2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogc2Vzc2lvbltrZXldLFxuICAgICAgICAgICAgICBmcmllbmRseUxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIoa2V5KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW5kIGRlcml2ZXMgYWxsIHN0b3JlZCBwcm9jZWR1cmUgcGFyYW1ldGVyczpcbiAgICogLSBQcmVzZXJ2ZXMgZXhwbGljaXQgb3ZlcnJpZGVzIChlLmcuIGZyb20gY2FudmFzIGZvcm0gY29udHJvbHMgb3IgbWFudWFsIGlucHV0cylcbiAgICogLSBBdXRvbWF0aWNhbGx5IGluamVjdHMgbWF0Y2hlZCBzZXNzaW9uIHBhcmFtZXRlcnNcbiAgICogLSBWYWxpZGF0ZXMgd2hldGhlciByZXF1aXJlZCBwYXJhbWV0ZXJzIGFyZSBmdWxmaWxsZWRcbiAgICovXG4gIGRlcml2ZVBhcmFtZXRlcnMoXG4gICAgc3BQYXJhbXM6IFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhW10sXG4gICAgZXhwbGljaXRNYXBwaW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fVxuICApOiBEZXJpdmVkUGFyYW1ldGVyc1Jlc3VsdCB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCk7XG4gICAgY29uc3QgZmluYWxQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgY29uc3QgYXV0b0Rlcml2ZWQ6IFJlY29yZDxzdHJpbmcsIFNlc3Npb25QYXJhbU1hdGNoPiA9IHt9O1xuICAgIGNvbnN0IHVucmVzb2x2ZWRSZXF1aXJlZDogUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGFbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiBzcFBhcmFtcykge1xuICAgICAgY29uc3QgcGFyYW1OYW1lID0gcGFyYW0ubmFtZTtcbiAgICAgIGNvbnN0IGV4cGxpY2l0VmFsID0gZXhwbGljaXRNYXBwaW5nc1twYXJhbU5hbWVdO1xuXG4gICAgICAvLyBDaGVjayBpZiB1c2VyIG9yIGNhbnZhcyBleHBsaWNpdGx5IHByb3ZpZGVkIGEgdmFsdWUgKGFuZCBub3QgYW4gZW1wdHkgcGxhY2Vob2xkZXIpXG4gICAgICBjb25zdCBoYXNFeHBsaWNpdCA9IGV4cGxpY2l0VmFsICE9PSB1bmRlZmluZWQgJiYgZXhwbGljaXRWYWwgIT09ICcnICYmIGV4cGxpY2l0VmFsICE9PSBudWxsO1xuXG4gICAgICBpZiAoaGFzRXhwbGljaXQpIHtcbiAgICAgICAgZmluYWxQYXJhbXNbcGFyYW1OYW1lXSA9IGV4cGxpY2l0VmFsO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHNlc3Npb24gY29udGV4dCBtYXRjaFxuICAgICAgY29uc3Qgc2Vzc2lvbk1hdGNoID0gdGhpcy5tYXRjaFBhcmFtZXRlcihwYXJhbU5hbWUpO1xuICAgICAgaWYgKHNlc3Npb25NYXRjaCAmJiBzZXNzaW9uTWF0Y2gudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uTWF0Y2gudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgZmluYWxQYXJhbXNbcGFyYW1OYW1lXSA9IHNlc3Npb25NYXRjaC52YWx1ZTtcbiAgICAgICAgYXV0b0Rlcml2ZWRbcGFyYW1OYW1lXSA9IHNlc3Npb25NYXRjaDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGRlZmF1bHQgdmFsdWUgaXMgcHJvdmlkZWQgaW4gU1AgbWV0YWRhdGFcbiAgICAgIGlmIChwYXJhbS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwYXJhbS5kZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgZmluYWxQYXJhbXNbcGFyYW1OYW1lXSA9IHBhcmFtLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHJlcXVpcmVkIGJ1dCBub3Qgc2F0aXNmaWVkXG4gICAgICBpZiAocGFyYW0ucmVxdWlyZWQpIHtcbiAgICAgICAgdW5yZXNvbHZlZFJlcXVpcmVkLnB1c2gocGFyYW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsc28gaW5jbHVkZSBhbnkgZXh0cmEgZXhwbGljaXQgbWFwcGluZ3MgdGhhdCBkaWRuJ3QgbWF0Y2ggcGFyYW1ldGVyIGxpc3RcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoZXhwbGljaXRNYXBwaW5ncykpIHtcbiAgICAgIGlmICghKGtleSBpbiBmaW5hbFBhcmFtcykgJiYgdmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBudWxsICYmIHZhbCAhPT0gJycpIHtcbiAgICAgICAgZmluYWxQYXJhbXNba2V5XSA9IHZhbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFyYW1ldGVyczogZmluYWxQYXJhbXMsXG4gICAgICBhdXRvRGVyaXZlZFBhcmFtczogYXV0b0Rlcml2ZWQsXG4gICAgICB1bnJlc29sdmVkUmVxdWlyZWRQYXJhbXM6IHVucmVzb2x2ZWRSZXF1aXJlZCxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
363
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUVWLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix1QkFBdUIsR0FLeEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFrQm5FOzs7Ozs7R0FNRztBQUlILE1BQU0sT0FBTywyQkFBMkI7SUFDckIsU0FBUyxHQUFHLE1BQU0sQ0FBOEIsc0JBQXNCLEVBQUU7UUFDdkYsUUFBUSxFQUFFLElBQUk7S0FDZixDQUFDLENBQUM7SUFDYyxlQUFlLEdBQUcsTUFBTSxDQUFnQyx1QkFBdUIsRUFBRTtRQUNoRyxRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FBQztJQUNjLGVBQWUsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVoRix3R0FBd0c7SUFDdkYsb0JBQW9CLEdBQUcsTUFBTSxDQUFvQixFQUFFLENBQUMsQ0FBQztJQUNyRCxxQkFBcUIsR0FBRyxNQUFNLENBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELHVCQUF1QixHQUFHLE1BQU0sQ0FBb0Is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LEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUM3RSxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTztZQUNMLFVBQVUsRUFBRSxXQUFXO1lBQ3ZCLGlCQUFpQixFQUFFLFdBQVc7WUFDOUIsd0JBQXdCLEVBQUUsa0JBQWtCO1NBQzdDLENBQUM7SUFDSixDQUFDO3dHQTNXVSwyQkFBMkI7NEdBQTNCLDJCQUEyQixjQUYxQixNQUFNOzs0RkFFUCwyQkFBMkI7a0JBSHZDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgT25EZXN0cm95LFxuICBzaWduYWwsXG4gIFNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgUkVQT1JUX1NFU1NJT05fQ09OVEVYVCxcbiAgUkVQT1JUX1NFU1NJT05fUFJPVklERVIsXG4gIFNlc3Npb25Db250ZXh0TWFwLFxuICBTZXNzaW9uQ29udGV4dFByb3ZpZGVyLFxuICBTZXNzaW9uQ29udGV4dFNvdXJjZSxcbiAgU2Vzc2lvblBhcmFtUHJpbWl0aXZlLFxufSBmcm9tICcuLi90b2tlbnMvc2Vzc2lvbi1jb250ZXh0LnRva2VuJztcbmltcG9ydCB7IFJFUE9SVElOR19DT05GSUcgfSBmcm9tICcuLi90b2tlbnMvcmVwb3J0aW5nLWNvbmZpZy50b2tlbic7XG5pbXBvcnQgeyBQcm9jZWR1cmVQYXJhbWV0ZXJNZXRhZGF0YSB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9zY2hlbWEtZGlzY292ZXJ5LmNvbnRyYWN0JztcbmltcG9ydCB7IGh1bWFuaXplSWRlbnRpZmllciB9IGZyb20gJy4uL3V0aWxzL2lkZW50aWZpZXItaHVtYW5pemVyJztcblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uUGFyYW1NYXRjaCB7XG4gIGlzTWF0Y2hlZDogYm9vbGVhbjtcbiAgc2Vzc2lvbktleTogc3RyaW5nO1xuICB2YWx1ZTogU2Vzc2lvblBhcmFtUHJpbWl0aXZlO1xuICBmcmllbmRseUxhYmVsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVyaXZlZFBhcmFtZXRlcnNSZXN1bHQge1xuICAvKiogVGhlIGNvbnNvbGlkYXRlZCBwYXJhbWV0ZXIgcGF5bG9hZCBmb3Igc3RvcmVkIHByb2NlZHVyZSBleGVjdXRpb24gKi9cbiAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBNYXAgb2Ygd2hpY2ggU1AgcGFyYW1ldGVycyB3ZXJlIGF1dG8tZGVyaXZlZCBmcm9tIHNlc3Npb24gY29udGV4dCAqL1xuICBhdXRvRGVyaXZlZFBhcmFtczogUmVjb3JkPHN0cmluZywgU2Vzc2lvblBhcmFtTWF0Y2g+O1xuICAvKiogQW55IHJlcXVpcmVkIHBhcmFtZXRlcnMgdGhhdCB3ZXJlIG5laXRoZXIgaW4gc2Vzc2lvbiBjb250ZXh0IG5vciBleHBsaWNpdGx5IG1hcHBlZCAqL1xuICB1bnJlc29sdmVkUmVxdWlyZWRQYXJhbXM6IFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhW107XG59XG5cbi8qKlxuICogU2VydmljZSB0aGF0IG1hbmFnZXMgaG9zdCBhcHBsaWNhdGlvbiBzZXNzaW9uIGNvbnRleHQgcGFyYW1ldGVycyAoZS5nLiBicmFuY2hJZCwgY29tcGFueUlkLCB1c2VySWQpXG4gKiBhdCBydW50aW1lIGFuZCBhdXRvbWF0aWNhbGx5IGRldGVjdHMgYW5kIGJpbmRzIHRoZW0gdG8gU3RvcmVkIFByb2NlZHVyZSBwYXJhbWV0ZXJzLlxuICpcbiAqIERlc2lnbmVkIHRvIGNvbXBsZXRlbHkgc2hpZWxkIGVuZCB1c2VycyBmcm9tIGVudGVyaW5nIHRlY2huaWNhbCBzZXNzaW9uIHBhcmFtZXRlcnMgd2hpbGVcbiAqIGVsaW1pbmF0aW5nIHNpbGVudCBmYWlsdXJlcyBvciB0aHJlYWQgY3Jhc2hlcyBpbiBob3N0IGludGVncmF0aW9ucy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmF3U291cmNlID0gaW5qZWN0PFNlc3Npb25Db250ZXh0U291cmNlIHwgbnVsbD4oUkVQT1JUX1NFU1NJT05fQ09OVEVYVCwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uUHJvdmlkZXIgPSBpbmplY3Q8U2Vzc2lvbkNvbnRleHRQcm92aWRlciB8IG51bGw+KFJFUE9SVF9TRVNTSU9OX1BST1ZJREVSLCB7XG4gICAgb3B0aW9uYWw6IHRydWUsXG4gIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcG9ydGluZ0NvbmZpZyA9IGluamVjdChSRVBPUlRJTkdfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8qKiBJbnRlcm5hbCBtYW51YWwgcnVudGltZSBzZXNzaW9uIG92ZXJyaWRlcyAoZS5nLiBzZXQgdmlhIHNldFNlc3Npb25Db250ZXh0IG9yIHNldFNlc3Npb25QYXJhbWV0ZXIpICovXG4gIHByaXZhdGUgcmVhZG9ubHkgbWFudWFsUnVudGltZUNvbnRleHQgPSBzaWduYWw8U2Vzc2lvbkNvbnRleHRNYXA+KHt9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBsYXRlc3RPYnNlcnZhYmxlVmFsdWUgPSBzaWduYWw8U2Vzc2lvbkNvbnRleHRNYXA+KHt9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm92aWRlck9ic2VydmFibGVWYWx1ZSA9IHNpZ25hbDxTZXNzaW9uQ29udGV4dE1hcD4oe30pO1xuXG4gIHByaXZhdGUgb2JzZXJ2YWJsZVN1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBwcm92aWRlclN1Yj86IFN1YnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogUmVhY3RpdmUgc2lnbmFsIGV4cG9zaW5nIHRoZSBsaXZlIHNlc3Npb24gY29udGV4dCBwYXJhbWV0ZXJzLlxuICAgKiBVcGRhdGVzIGF1dG9tYXRpY2FsbHkgd2hlbiBob3N0IGFwcCBtdXRhdGVzIHJ1bnRpbWUgc3RhdGUsIHdoZW4gb2JzZXJ2YWJsZXMgZW1pdCxcbiAgICogb3Igd2hlbiByZWFjdGl2ZSBzaWduYWxzIHVwZGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHNlc3Npb25Db250ZXh0OiBTaWduYWw8U2Vzc2lvbkNvbnRleHRNYXA+ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGxldCBwcm92aWRlck1hcDogU2Vzc2lvbkNvbnRleHRNYXAgPSB7fTtcbiAgICBpZiAodGhpcy5zZXNzaW9uUHJvdmlkZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuc2Vzc2lvblByb3ZpZGVyLmdldFNlc3Npb25Db250ZXh0KCk7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgdmFsID0gKHJlcyBhcyAoKSA9PiBTZXNzaW9uQ29udGV4dE1hcCkoKTtcbiAgICAgICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBwcm92aWRlck1hcCA9IHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYnNlcnZhYmxlKHJlcykpIHtcbiAgICAgICAgICBwcm92aWRlck1hcCA9IHRoaXMucHJvdmlkZXJPYnNlcnZhYmxlVmFsdWUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXMgJiYgdHlwZW9mIHJlcyA9PT0gJ29iamVjdCcgJiYgISgndGhlbicgaW4gcmVzKSkge1xuICAgICAgICAgIHByb3ZpZGVyTWFwID0gcmVzIGFzIFNlc3Npb25Db250ZXh0TWFwO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciByZWFkaW5nIFNlc3Npb25Db250ZXh0UHJvdmlkZXI6JywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdG9rZW5NYXA6IFNlc3Npb25Db250ZXh0TWFwID0ge307XG4gICAgaWYgKHRoaXMucmF3U291cmNlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHRoaXMucmF3U291cmNlKSkge1xuICAgICAgICAgIHRva2VuTWFwID0gdGhpcy5sYXRlc3RPYnNlcnZhYmxlVmFsdWUoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5yYXdTb3VyY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLnJhd1NvdXJjZSgpO1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lclJlcyA9IChyZXMgYXMgKCkgPT4gdW5rbm93bikoKTtcbiAgICAgICAgICAgIHRva2VuTWFwID0gaW5uZXJSZXMgJiYgdHlwZW9mIGlubmVyUmVzID09PSAnb2JqZWN0JyA/IChpbm5lclJlcyBhcyBTZXNzaW9uQ29udGV4dE1hcCkgOiB7fTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JzZXJ2YWJsZShyZXMpKSB7XG4gICAgICAgICAgICB0b2tlbk1hcCA9IHRoaXMubGF0ZXN0T2JzZXJ2YWJsZVZhbHVlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRva2VuTWFwID0gcmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnID8gKHJlcyBhcyBTZXNzaW9uQ29udGV4dE1hcCkgOiB7fTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMucmF3U291cmNlID09PSAnb2JqZWN0JyAmJiB0aGlzLnJhd1NvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHRva2VuTWFwID0gdGhpcy5yYXdTb3VyY2U7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2VdIEVycm9yIGV2YWx1YXRpbmcgcmF3IHNlc3Npb24gc291cmNlOicsIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWFudWFsTWFwID0gdGhpcy5tYW51YWxSdW50aW1lQ29udGV4dCgpO1xuICAgIGNvbnN0IGF1dG9EZXRlY3RlZCA9IHRoaXMuZGV0ZWN0QnJvd3NlclNlc3Npb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5hdXRvRGV0ZWN0ZWQsXG4gICAgICAuLi5wcm92aWRlck1hcCxcbiAgICAgIC4uLnRva2VuTWFwLFxuICAgICAgLi4ubWFudWFsTWFwLFxuICAgIH07XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHN0cmVhbSBvZiBsaXZlIHNlc3Npb24gcGFyYW1ldGVycyBmb3IgUnhKUy1iYXNlZCBpbnRlZ3JhdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uQ29udGV4dCQ6IE9ic2VydmFibGU8U2Vzc2lvbkNvbnRleHRNYXA+ID0gdG9PYnNlcnZhYmxlKHRoaXMuc2Vzc2lvbkNvbnRleHQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaW5pdFN1YnNjcmlwdGlvbnMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub2JzZXJ2YWJsZVN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnByb3ZpZGVyU3ViPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0U3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yYXdTb3VyY2UgJiYgaXNPYnNlcnZhYmxlKHRoaXMucmF3U291cmNlKSkge1xuICAgICAgdGhpcy5vYnNlcnZhYmxlU3ViID0gdGhpcy5yYXdTb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHZhbCkgPT4ge1xuICAgICAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRoaXMubGF0ZXN0T2JzZXJ2YWJsZVZhbHVlLnNldCh7IC4uLnZhbCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciBmcm9tIHNlc3Npb24gY29udGV4dCBvYnNlcnZhYmxlOicsIGVycik7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZXNzaW9uUHJvdmlkZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuc2Vzc2lvblByb3ZpZGVyLmdldFNlc3Npb25Db250ZXh0KCk7XG4gICAgICAgIGlmIChpc09ic2VydmFibGUocmVzKSkge1xuICAgICAgICAgIHRoaXMucHJvdmlkZXJTdWIgPSByZXMuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6ICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvdmlkZXJPYnNlcnZhYmxlVmFsdWUuc2V0KHsgLi4udmFsIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciBmcm9tIHNlc3Npb24gcHJvdmlkZXIgb2JzZXJ2YWJsZTonLCBlcnIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICByZXMgJiZcbiAgICAgICAgICB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICd0aGVuJyBpbiByZXMgJiZcbiAgICAgICAgICB0eXBlb2YgKHJlcyBhcyBQcm9taXNlPHVua25vd24+KS50aGVuID09PSAnZnVuY3Rpb24nXG4gICAgICAgICkge1xuICAgICAgICAgIChyZXMgYXMgUHJvbWlzZTxTZXNzaW9uQ29udGV4dE1hcD4pXG4gICAgICAgICAgICAudGhlbigodmFsKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3ZpZGVyT2JzZXJ2YWJsZVZhbHVlLnNldCh7IC4uLnZhbCB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgZnJvbSBzZXNzaW9uIHByb3ZpZGVyIHByb21pc2U6JywgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciBpbml0aWFsaXppbmcgc2Vzc2lvbiBwcm92aWRlcjonLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIG9yIHJlcGxhY2VzIHRoZSBydW50aW1lIHNlc3Npb24gY29udGV4dC5cbiAgICogQ2FuIGJlIGNhbGxlZCBkeW5hbWljYWxseSBhZnRlciB1c2VyIGF1dGhlbnRpY2F0aW9uLCBicmFuY2ggY2hhbmdlLCBldGMuXG4gICAqL1xuICBzZXRTZXNzaW9uQ29udGV4dChjb250ZXh0OiBTZXNzaW9uQ29udGV4dE1hcCk6IHZvaWQge1xuICAgIGlmIChjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0ID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5tYW51YWxSdW50aW1lQ29udGV4dC5zZXQoeyAuLi5jb250ZXh0IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hbnVhbFJ1bnRpbWVDb250ZXh0LnNldCh7fSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgb3Igc2V0cyBhIHNwZWNpZmljIHNlc3Npb24gcGFyYW1ldGVyIGF0IHJ1bnRpbWUgKGUuZy4gYnJhbmNoSWQgPSAyKS5cbiAgICovXG4gIHNldFNlc3Npb25QYXJhbWV0ZXIoa2V5OiBzdHJpbmcsIHZhbHVlOiBTZXNzaW9uUGFyYW1QcmltaXRpdmUpOiB2b2lkIHtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgIHRoaXMubWFudWFsUnVudGltZUNvbnRleHQudXBkYXRlKChjdXJyZW50KSA9PiAoe1xuICAgICAgLi4uY3VycmVudCxcbiAgICAgIFtrZXldOiB2YWx1ZSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGFueSBydW50aW1lIHNlc3Npb24gcGFyYW1ldGVycyBzZXQgdmlhIGBzZXRTZXNzaW9uQ29udGV4dGAgb3IgYHNldFNlc3Npb25QYXJhbWV0ZXJgLlxuICAgKi9cbiAgY2xlYXJTZXNzaW9uQ29udGV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLm1hbnVhbFJ1bnRpbWVDb250ZXh0LnNldCh7fSk7XG4gIH1cblxuICAvKipcbiAgICogU2FmZWx5IHJldHVybnMgdGhlIGN1cnJlbnQgc2Vzc2lvbiBjb250ZXh0IG1hcC5cbiAgICogQWx3YXlzIHB1bGxzIHRoZSBsYXRlc3QgcnVudGltZSBzdGF0ZS4gTmV2ZXIgdGhyb3dzIG9yIGNyYXNoZXMgdGhlIHRocmVhZC5cbiAgICovXG4gIGdldEN1cnJlbnRTZXNzaW9uQ29udGV4dCgpOiBTZXNzaW9uQ29udGV4dE1hcCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLnNlc3Npb25Db250ZXh0KCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2VdIEZhaWxlZCB0byBldmFsdWF0ZSBzZXNzaW9uIGNvbnRleHQ6JywgZXJyKTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2FmZWx5IGRldGVjdHMgc2Vzc2lvbiBwYXJhbWV0ZXJzIGZyb20gaG9zdCBwcm9qZWN0IGJyb3dzZXIgc3RvcmFnZVxuICAgKiAoc2Vzc2lvblN0b3JhZ2U6IHVzZXJfSW5mbywgY3VycmVudFVzZXI7IGxvY2FsU3RvcmFnZTogY3VycmVudFVzZXIsIENvbXBhbnlEYXRhLCB1c2VyX0luZm8pLlxuICAgKi9cbiAgcHJpdmF0ZSBkZXRlY3RCcm93c2VyU2Vzc2lvbigpOiBTZXNzaW9uQ29udGV4dE1hcCB7XG4gICAgY29uc3QgcmVzdWx0OiBTZXNzaW9uQ29udGV4dE1hcCA9IHt9O1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNvbnN0IHNvdXJjZXM6IEFycmF5PHsgc3RvcmFnZTogU3RvcmFnZSB8IG51bGw7IGtleTogc3RyaW5nIH0+ID0gW1xuICAgICAgeyBzdG9yYWdlOiB0eXBlb2Ygc2Vzc2lvblN0b3JhZ2UgIT09ICd1bmRlZmluZWQnID8gc2Vzc2lvblN0b3JhZ2UgOiBudWxsLCBrZXk6ICd1c2VyX0luZm8nIH0sXG4gICAgICB7IHN0b3JhZ2U6IHR5cGVvZiBsb2NhbFN0b3JhZ2UgIT09ICd1bmRlZmluZWQnID8gbG9jYWxTdG9yYWdlIDogbnVsbCwga2V5OiAnY3VycmVudFVzZXInIH0sXG4gICAgICB7IHN0b3JhZ2U6IHR5cGVvZiBsb2NhbFN0b3JhZ2UgIT09ICd1bmRlZmluZWQnID8gbG9jYWxTdG9yYWdlIDogbnVsbCwga2V5OiAnQ29tcGFueURhdGEnIH0sXG4gICAgICB7IHN0b3JhZ2U6IHR5cGVvZiBzZXNzaW9uU3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcgPyBzZXNzaW9uU3RvcmFnZSA6IG51bGwsIGtleTogJ2N1cnJlbnRVc2VyJyB9LFxuICAgICAgeyBzdG9yYWdlOiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyA/IGxvY2FsU3RvcmFnZSA6IG51bGwsIGtleTogJ3VzZXJfSW5mbycgfSxcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBzcmMgb2Ygc291cmNlcykge1xuICAgICAgaWYgKCFzcmMuc3RvcmFnZSkgY29udGludWU7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpdGVtID0gc3JjLnN0b3JhZ2UuZ2V0SXRlbShzcmMua2V5KTtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGl0ZW0pO1xuICAgICAgICAgIGlmIChwYXJzZWQgJiYgdHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnNlZCkpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHYgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHYgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAodHlwZW9mIHYgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2ID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAoIShrIGluIHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdFtrXSA9IHY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlIEpTT04gcGFyc2UgZXJyb3JzIGluIHN0b3JhZ2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZXMgYSBwYXJhbWV0ZXIgb3Igc2Vzc2lvbiBrZXkgaW50byBhIGxvd2VyY2FzZSBhbHBoYW51bWVyaWMgc3RyaW5nXG4gICAqIGZvciByZWxpYWJsZSwgY2FzZS1pbnNlbnNpdGl2ZSwgYW5kIHN5bWJvbC1pbnNlbnNpdGl2ZSBtYXRjaGluZy5cbiAgICogU3RyaXBzIFNRTCBTZXJ2ZXIgSHVuZ2FyaWFuIHR5cGUgcHJlZml4ZXMgKGUuZy4gJ0BjaHJDb21wYW55SWQnIC0+ICdjb21wYW55aWQnKS5cbiAgICovXG4gIG5vcm1hbGl6ZUtleShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFrZXkgfHwgdHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHJldHVybiAnJztcbiAgICByZXR1cm4ga2V5XG4gICAgICAucmVwbGFjZSgvXkArLywgJycpXG4gICAgICAucmVwbGFjZSgvXihjaHJ8aW50fHZjaHJ8bmNocnxkdHxzdHJ8bnVtfGJpdHxkZWN8Zmx0KSsvaSwgJycpXG4gICAgICAucmVwbGFjZSgvW19cXC1cXHNdKy9nLCAnJylcbiAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgc3RvcmVkIHByb2NlZHVyZSBwYXJhbWV0ZXIgbWF0Y2hlcyBhbnkga2V5IGluIHRoZSBhY3RpdmUgc2Vzc2lvbiBjb250ZXh0LlxuICAgKiBTdXBwb3J0cyBleGFjdCwgbm9ybWFsaXplZCwgYW5kIGNvbW1vbiBFUlAgc3lub255bXMuXG4gICAqL1xuICBtYXRjaFBhcmFtZXRlcihwYXJhbU5hbWU6IHN0cmluZyk6IFNlc3Npb25QYXJhbU1hdGNoIHwgbnVsbCB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCk7XG4gICAgY29uc3Qgc2Vzc2lvbktleXMgPSBPYmplY3Qua2V5cyhzZXNzaW9uKTtcbiAgICBpZiAoc2Vzc2lvbktleXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXJhbSA9IHRoaXMubm9ybWFsaXplS2V5KHBhcmFtTmFtZSk7XG5cbiAgICAvLyAxLiBFeGFjdCBtYXRjaCBvbiByYXcgbmFtZVxuICAgIGlmIChwYXJhbU5hbWUgaW4gc2Vzc2lvbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNNYXRjaGVkOiB0cnVlLFxuICAgICAgICBzZXNzaW9uS2V5OiBwYXJhbU5hbWUsXG4gICAgICAgIHZhbHVlOiBzZXNzaW9uW3BhcmFtTmFtZV0sXG4gICAgICAgIGZyaWVuZGx5TGFiZWw6IGh1bWFuaXplSWRlbnRpZmllcihwYXJhbU5hbWUpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyAyLiBEaXJlY3Qgbm9ybWFsaXplZCBtYXRjaFxuICAgIGZvciAoY29uc3Qga2V5IG9mIHNlc3Npb25LZXlzKSB7XG4gICAgICBpZiAodGhpcy5ub3JtYWxpemVLZXkoa2V5KSA9PT0gbm9ybWFsaXplZFBhcmFtKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNNYXRjaGVkOiB0cnVlLFxuICAgICAgICAgIHNlc3Npb25LZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZTogc2Vzc2lvbltrZXldLFxuICAgICAgICAgIGZyaWVuZGx5TGFiZWw6IGh1bWFuaXplSWRlbnRpZmllcihrZXkpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMuIENvbW1vbiBFUlAgc3lub255bSBncm91cHMgKGJpZGlyZWN0aW9uYWwgbWF0Y2hpbmcpXG4gICAgY29uc3Qgc3lub255bUdyb3Vwczogc3RyaW5nW11bXSA9IFtcbiAgICAgIFsnYnJhbmNoJywgJ2JyYW5jaGlkJywgJ2JpZCcsICdicmFuY2hjb2RlJywgJ2xvY2F0aW9uaWQnLCAnbG9jYXRpb24nLCAnY29tcHVuaXQnLCAnY29tcHVuaXRpZCcsICd1bml0Y29kZScsICd1bml0aWQnLCAnY29tcHVuaXRzJ10sXG4gICAgICBbJ2NvbXBhbnknLCAnY29tcGFueWlkJywgJ2NpZCcsICdjb21wYW55Y29kZScsICd0ZW5hbnQnLCAndGVuYW50aWQnXSxcbiAgICAgIFsndXNlcicsICd1c2VyaWQnLCAndWlkJywgJ3VzZXJjb2RlJywgJ29wZXJhdG9yaWQnLCAnbG9naW51c2VyJywgJ3VzZXJuYW1lJ10sXG4gICAgICBbJ2ZpbmFuY2lhbHllYXInLCAnZmluYW5jaWFseWVhcmlkJywgJ3llYXJpZCcsICdmeWVhcicsICdmaXNjYWx5ZWFyJywgJ2ZpbnllYXInXSxcbiAgICAgIFsnbG9naW5pZGVudGl0eScsICdsb2dpbl9pZGVudGl0eScsICdzdGF0dXNjb2RlJywgJ3N0YXR1c19jb2RlJ10sXG4gICAgICBbJ29yZycsICdvcmdpZCcsICdvcmdhbml6YXRpb24nLCAnb3JnYW5pemF0aW9uaWQnXSxcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBncm91cCBvZiBzeW5vbnltR3JvdXBzKSB7XG4gICAgICBpZiAoZ3JvdXAuaW5jbHVkZXMobm9ybWFsaXplZFBhcmFtKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBzZXNzaW9uS2V5cykge1xuICAgICAgICAgIGlmIChncm91cC5pbmNsdWRlcyh0aGlzLm5vcm1hbGl6ZUtleShrZXkpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaXNNYXRjaGVkOiB0cnVlLFxuICAgICAgICAgICAgICBzZXNzaW9uS2V5OiBrZXksXG4gICAgICAgICAgICAgIHZhbHVlOiBzZXNzaW9uW2tleV0sXG4gICAgICAgICAgICAgIGZyaWVuZGx5TGFiZWw6IGh1bWFuaXplSWRlbnRpZmllcihrZXkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbmQgZGVyaXZlcyBhbGwgc3RvcmVkIHByb2NlZHVyZSBwYXJhbWV0ZXJzOlxuICAgKiAtIFByZXNlcnZlcyBleHBsaWNpdCBvdmVycmlkZXMgKGUuZy4gZnJvbSBjYW52YXMgZm9ybSBjb250cm9scyBvciBtYW51YWwgaW5wdXRzKVxuICAgKiAtIEF1dG9tYXRpY2FsbHkgaW5qZWN0cyBtYXRjaGVkIHNlc3Npb24gcGFyYW1ldGVyc1xuICAgKiAtIFZhbGlkYXRlcyB3aGV0aGVyIHJlcXVpcmVkIHBhcmFtZXRlcnMgYXJlIGZ1bGZpbGxlZFxuICAgKi9cbiAgZGVyaXZlUGFyYW1ldGVycyhcbiAgICBzcFBhcmFtczogUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGFbXSxcbiAgICBleHBsaWNpdE1hcHBpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9XG4gICk6IERlcml2ZWRQYXJhbWV0ZXJzUmVzdWx0IHtcbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRDdXJyZW50U2Vzc2lvbkNvbnRleHQoKTtcbiAgICBjb25zdCBmaW5hbFBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICBjb25zdCBhdXRvRGVyaXZlZDogUmVjb3JkPHN0cmluZywgU2Vzc2lvblBhcmFtTWF0Y2g+ID0ge307XG4gICAgY29uc3QgdW5yZXNvbHZlZFJlcXVpcmVkOiBQcm9jZWR1cmVQYXJhbWV0ZXJNZXRhZGF0YVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIHNwUGFyYW1zKSB7XG4gICAgICBjb25zdCBwYXJhbU5hbWUgPSBwYXJhbS5uYW1lO1xuICAgICAgY29uc3QgZXhwbGljaXRWYWwgPSBleHBsaWNpdE1hcHBpbmdzW3BhcmFtTmFtZV07XG5cbiAgICAgIC8vIENoZWNrIGlmIHVzZXIgb3IgY2FudmFzIGV4cGxpY2l0bHkgcHJvdmlkZWQgYSB2YWx1ZSAoYW5kIG5vdCBhbiBlbXB0eSBwbGFjZWhvbGRlcilcbiAgICAgIGNvbnN0IGhhc0V4cGxpY2l0ID0gZXhwbGljaXRWYWwgIT09IHVuZGVmaW5lZCAmJiBleHBsaWNpdFZhbCAhPT0gJycgJiYgZXhwbGljaXRWYWwgIT09IG51bGw7XG5cbiAgICAgIGlmIChoYXNFeHBsaWNpdCkge1xuICAgICAgICBmaW5hbFBhcmFtc1twYXJhbU5hbWVdID0gZXhwbGljaXRWYWw7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3Igc2Vzc2lvbiBjb250ZXh0IG1hdGNoIChza2lwIHdoZW4gYXV0b1BhcmFtZXRlciBpcyBkaXNhYmxlZClcbiAgICAgIGlmICh0aGlzLnJlcG9ydGluZ0NvbmZpZz8uYXV0b1BhcmFtZXRlciAhPT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbk1hdGNoID0gdGhpcy5tYXRjaFBhcmFtZXRlcihwYXJhbU5hbWUpO1xuICAgICAgICBpZiAoc2Vzc2lvbk1hdGNoICYmIHNlc3Npb25NYXRjaC52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHNlc3Npb25NYXRjaC52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpbmFsUGFyYW1zW3BhcmFtTmFtZV0gPSBzZXNzaW9uTWF0Y2gudmFsdWU7XG4gICAgICAgICAgYXV0b0Rlcml2ZWRbcGFyYW1OYW1lXSA9IHNlc3Npb25NYXRjaDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiBkZWZhdWx0IHZhbHVlIGlzIHByb3ZpZGVkIGluIFNQIG1ldGFkYXRhXG4gICAgICBpZiAocGFyYW0uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgcGFyYW0uZGVmYXVsdFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGZpbmFsUGFyYW1zW3BhcmFtTmFtZV0gPSBwYXJhbS5kZWZhdWx0VmFsdWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiByZXF1aXJlZCBidXQgbm90IHNhdGlzZmllZFxuICAgICAgaWYgKHBhcmFtLnJlcXVpcmVkKSB7XG4gICAgICAgIHVucmVzb2x2ZWRSZXF1aXJlZC5wdXNoKHBhcmFtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBbHNvIGluY2x1ZGUgYW55IGV4dHJhIGV4cGxpY2l0IG1hcHBpbmdzIHRoYXQgZGlkbid0IG1hdGNoIHBhcmFtZXRlciBsaXN0XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGxpY2l0TWFwcGluZ3MpKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZmluYWxQYXJhbXMpICYmIHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09ICcnKSB7XG4gICAgICAgIGZpbmFsUGFyYW1zW2tleV0gPSB2YWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmFtZXRlcnM6IGZpbmFsUGFyYW1zLFxuICAgICAgYXV0b0Rlcml2ZWRQYXJhbXM6IGF1dG9EZXJpdmVkLFxuICAgICAgdW5yZXNvbHZlZFJlcXVpcmVkUGFyYW1zOiB1bnJlc29sdmVkUmVxdWlyZWQsXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -23,4 +23,4 @@ export const CHART_COMPONENT = new InjectionToken('CHART_COMPONENT');
|
|
|
23
23
|
* Injection token for the reporting library configuration.
|
|
24
24
|
*/
|
|
25
25
|
export const REPORTING_CONFIG = new InjectionToken('REPORTING_CONFIG');
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0aW5nLWNvbmZpZy50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2NvcmUvdG9rZW5zL3JlcG9ydGluZy1jb25maWcudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBK0NyRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBZ0IsZ0JBQWdCLENBQUMsQ0FBQztBQUVsRjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FBZ0IsaUJBQWlCLENBQUMsQ0FBQztBQUVwRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksY0FBYyxDQUFrQixrQkFBa0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBvcnRpbmcgbGlicmFyeSBjb25maWd1cmF0aW9uIHRva2Vucy5cbiAqXG4gKiBDb3JlIGNvbmZpZ3VyYXRpb24gbW9kZWxzIGFuZCBpbmplY3Rpb24gdG9rZW5zLlxuICogRGVjb3VwbGVkIGZyb20gVUkgcHJpbWl0aXZlcyBhbmQgZGF0YS1hY2Nlc3MgYWRhcHRlcnMuXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBMaWJyYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRpbmdDb25maWcge1xuICAvKiogRGVmYXVsdCBwYWdlIHNpemUgZm9yIGdyaWRzLiAqL1xuICBkZWZhdWx0UGFnZVNpemU6IG51bWJlcjtcblxuICAvKiogRGF0ZSBmb3JtYXQgc3RyaW5nIHVzZWQgYWNyb3NzIHRoZSBsaWJyYXJ5LiAqL1xuICBkYXRlRm9ybWF0OiBzdHJpbmc7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIERlc2lnbmVyIGZlYXR1cmUgaXMgZW5hYmxlZC4gKi9cbiAgZW5hYmxlRGVzaWduZXI6IGJvb2xlYW47XG5cbiAgLyoqIEN1cnJlbnQgc2NoZW1hIHZlcnNpb24gZm9yIG5ldyByZXBvcnRzLiAqL1xuICBzY2hlbWFWZXJzaW9uOiBudW1iZXI7XG5cbiAgLyoqIEJhc2UgVVJMIGZvciBiYWNrZW5kIHJlcG9ydGluZyBlbmRwb2ludHMgKE5lc3RKUyAvIC5ORVQgLyBSRVNUIEFQSSkuICovXG4gIGFwaUJhc2VVcmw/OiBzdHJpbmc7XG5cbiAgLyoqIFdoZXRoZXIgYXV0b21hdGljIGJhY2tlbmQgc2NoZW1hIGRpc2NvdmVyeSAoU1BzICYgVGFibGVzKSBpcyBlbmFibGVkLiAqL1xuICBlbmFibGVTY2hlbWFEaXNjb3Zlcnk/OiBib29sZWFuO1xuXG4gIC8qKiBPcHRpb25hbCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgZHJvcGRvd24gbG9va3VwIHF1ZXJpZXMgKGRlZmF1bHRzIHRvIDMwMDAwMG1zIC8gNSBtaW51dGVzKS4gKi9cbiAgbG9va3VwVGltZW91dE1zPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBjYXRlZ29yeSBJRHMgdG8gc2hvdyBpbiB0aGUgZGVzaWduZXIgcGFsZXR0ZS5cbiAgICogV2hlbiBudWxsL3VuZGVmaW5lZCwgYWxsIGNhdGVnb3JpZXMgYXJlIHNob3duLlxuICAgKiBTZXQgYnkgdGhlIEJ3YXlzUmVwb3J0Q29uZmlnIG5vcm1hbGl6ZXIgZnJvbSBmcmllbmRseSBuYW1lcy5cbiAgICovXG4gIGFsbG93ZWRDYXRlZ29yaWVzPzogc3RyaW5nW10gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGF1dG8tYmluZCBTUCBwYXJhbWV0ZXJzIGZyb20gdGhlIHNlc3Npb24gY29udGV4dC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b1BhcmFtZXRlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEJhc2Ugcm91dGUgcGF0aCBmb3IgbGl2ZSByZXBvcnQgcGFnZXMuXG4gICAqIEBkZWZhdWx0ICdyZXBvcnRzJ1xuICAgKi9cbiAgcm91dGVCYXNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiBmb3IgdGhlIGdyaWQgY29tcG9uZW50LlxuICpcbiAqIFRoZSBob3N0IHByb3ZpZGVzIHRoZWlyIGdyaWQgY29tcG9uZW50IChCV2F5cy1ncmlkLCBBRyBHcmlkIHdyYXBwZXIsIGV0Yy4pXG4gKiBhbmQgdGhlIGBSZXBvcnRHcmlkQnJpZGdlQ29tcG9uZW50YCByZXNvbHZlcyBpdCBhdCBydW50aW1lLlxuICovXG5leHBvcnQgY29uc3QgR1JJRF9DT01QT05FTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48VHlwZTx1bmtub3duPj4oJ0dSSURfQ09NUE9ORU5UJyk7XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIGZvciB0aGUgY2hhcnQgY29tcG9uZW50LlxuICpcbiAqIFRoZSBob3N0IGNhbiBwcm92aWRlIHRoZWlyIHByZWZlcnJlZCBjaGFydCBjb21wb25lbnQgKENoYXJ0LmpzLCBIaWdoY2hhcnRzLCBBcGV4Q2hhcnRzIHdyYXBwZXIsIGV0Yy4pXG4gKiBhbmQgdGhlIGBSZXBvcnRDaGFydEJyaWRnZUNvbXBvbmVudGAgZGVsZWdhdGVzIHJlbmRlcmluZyB0byBpdCwgb3IgZmFsbHMgYmFjayB0byBidWlsdC1pbiBTVkcgY2hhcnRzLlxuICovXG5leHBvcnQgY29uc3QgQ0hBUlRfQ09NUE9ORU5UID0gbmV3IEluamVjdGlvblRva2VuPFR5cGU8dW5rbm93bj4+KCdDSEFSVF9DT01QT05FTlQnKTtcblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gZm9yIHRoZSByZXBvcnRpbmcgbGlicmFyeSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgUkVQT1JUSU5HX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxSZXBvcnRpbmdDb25maWc+KCdSRVBPUlRJTkdfQ09ORklHJyk7XG4iXX0=
|
|
@@ -53,4 +53,90 @@ export function getFieldCaseInsensitive(record, targetKey) {
|
|
|
53
53
|
}
|
|
54
54
|
return undefined;
|
|
55
55
|
}
|
|
56
|
-
|
|
56
|
+
/**
|
|
57
|
+
* Normalizes an arbitrary database record into a standardized { value, label, raw } option item.
|
|
58
|
+
* Supports case-insensitive field matching and intelligent heuristics for SQL Server columns.
|
|
59
|
+
*/
|
|
60
|
+
export function extractLookupOptionItem(row, valueField, displayField) {
|
|
61
|
+
if (!row || typeof row !== 'object') {
|
|
62
|
+
return {
|
|
63
|
+
value: row ?? '',
|
|
64
|
+
label: String(row ?? ''),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const rec = row;
|
|
68
|
+
// If row is already normalized (e.g. from backend lookup endpoint which returned { value, label })
|
|
69
|
+
// and user did not specify distinct target fields
|
|
70
|
+
if ('value' in rec &&
|
|
71
|
+
'label' in rec &&
|
|
72
|
+
(!valueField || valueField === 'value' || !getFieldCaseInsensitive(rec, valueField)) &&
|
|
73
|
+
(!displayField || displayField === 'label' || !getFieldCaseInsensitive(rec, displayField))) {
|
|
74
|
+
const v = rec['value'];
|
|
75
|
+
const result = {
|
|
76
|
+
value: typeof v === 'object' ? JSON.stringify(v) : v,
|
|
77
|
+
label: String(rec['label'] ?? rec['value'] ?? ''),
|
|
78
|
+
};
|
|
79
|
+
if ('raw' in rec && rec['raw']) {
|
|
80
|
+
result.raw = rec['raw'];
|
|
81
|
+
}
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
const keys = Object.keys(rec);
|
|
85
|
+
// 1. Resolve Value
|
|
86
|
+
let val = undefined;
|
|
87
|
+
if (valueField && valueField.trim()) {
|
|
88
|
+
val = getFieldCaseInsensitive(rec, valueField.trim());
|
|
89
|
+
}
|
|
90
|
+
if (val === undefined || val === null || val === '') {
|
|
91
|
+
const candidateValueKeys = ['code', 'id', 'key', 'value', 'val'];
|
|
92
|
+
for (const cand of candidateValueKeys) {
|
|
93
|
+
const v = getFieldCaseInsensitive(rec, cand);
|
|
94
|
+
if (v !== undefined && v !== null && v !== '') {
|
|
95
|
+
val = v;
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (val === undefined || val === null || val === '') {
|
|
101
|
+
const idKeys = keys.filter((k) => /(?:_code|_id|id|code)$/i.test(k));
|
|
102
|
+
const specificIdKey = idKeys.find((k) => !/^(?:user_?id|company_?id)$/i.test(k)) || idKeys[0];
|
|
103
|
+
if (specificIdKey) {
|
|
104
|
+
val = rec[specificIdKey];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (val === undefined || val === null || val === '') {
|
|
108
|
+
const firstPrimitiveKey = keys.find((k) => typeof rec[k] === 'string' || typeof rec[k] === 'number');
|
|
109
|
+
val = firstPrimitiveKey ? rec[firstPrimitiveKey] : (keys[0] ? rec[keys[0]] : '');
|
|
110
|
+
}
|
|
111
|
+
// 2. Resolve Label / Display
|
|
112
|
+
let label = undefined;
|
|
113
|
+
if (displayField && displayField.trim()) {
|
|
114
|
+
label = getFieldCaseInsensitive(rec, displayField.trim());
|
|
115
|
+
}
|
|
116
|
+
if (label === undefined || label === null || label === '') {
|
|
117
|
+
const candidateDisplayKeys = ['name', 'title', 'label', 'description', 'desc', 'text', 'caption'];
|
|
118
|
+
for (const cand of candidateDisplayKeys) {
|
|
119
|
+
const l = getFieldCaseInsensitive(rec, cand);
|
|
120
|
+
if (l !== undefined && l !== null && l !== '') {
|
|
121
|
+
label = l;
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (label === undefined || label === null || label === '') {
|
|
127
|
+
const nameKey = keys.find((k) => /(?:_name|_title|_desc)$/i.test(k));
|
|
128
|
+
if (nameKey) {
|
|
129
|
+
label = rec[nameKey];
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (label === undefined || label === null || label === '') {
|
|
133
|
+
const secondPrimitiveKey = keys.find((k) => (typeof rec[k] === 'string' || typeof rec[k] === 'number') && rec[k] !== val);
|
|
134
|
+
label = secondPrimitiveKey ? rec[secondPrimitiveKey] : String(val ?? '');
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
value: typeof val === 'object' ? JSON.stringify(val) : val,
|
|
138
|
+
label: String(label ?? val ?? ''),
|
|
139
|
+
raw: rec,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ub3JtYWxpemF0aW9uLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL3V0aWxzL2RhdGEtbm9ybWFsaXphdGlvbi51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBYyxRQUFpQjtJQUM1RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUM1QixPQUFPLFFBQWUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxRQUFtQyxDQUFDO0lBRWhELHNDQUFzQztJQUN0QyxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzFGLEtBQUssTUFBTSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFDaEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sR0FBVSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxNQUFrRCxFQUNsRCxTQUFpQjtJQUVqQixJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUU1RCxpQkFBaUI7SUFD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QUNuRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ2pDLEdBQUcsRUFBRSxHQUFHO0tBQ1QsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFV0aWxpdHkgdG8gbm9ybWFsaXplIGFyYml0cmFyeSBiYWNrZW5kIEhUVFAgcmVzcG9uc2VzIGludG8gc3RhbmRhcmQgYXJyYXkgb2YgcmVjb3Jkcy5cbiAqXG4gKiBTdXBwb3J0czpcbiAqIC0gRGlyZWN0IGFycmF5IHBheWxvYWRzOiBgWyB7IC4uLiB9LCB7IC4uLiB9IF1gXG4gKiAtIFN0YW5kYXJkIGVudmVsb3BlIHdyYXBwZXJzOiBgeyBkYXRhOiBbLi4uXSB9YCwgYHsgcm93czogWy4uLl0gfWAsIGB7IHJlc3VsdDogWy4uLl0gfWAsIGB7IGl0ZW1zOiBbLi4uXSB9YFxuICogLSBPRGF0YSBlbnZlbG9wZXM6IGB7IHZhbHVlOiBbLi4uXSB9YFxuICogLSBQYWdpbmF0ZWQgd3JhcHBlcnM6IGB7IHRvdGFsOiAxMDAsIHBhZ2U6IDEsIGRhdGE6IFsuLi5dIH1gXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0Um93QXJyYXk8VCA9IHVua25vd24+KHJlc3BvbnNlOiB1bmtub3duKTogVFtdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocmVzcG9uc2UpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlIGFzIFRbXTtcbiAgfVxuXG4gIGlmICghcmVzcG9uc2UgfHwgdHlwZW9mIHJlc3BvbnNlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IG9iaiA9IHJlc3BvbnNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8vIENoZWNrIGNvbW1vbiB3cmFwcGVyIHByb3BlcnR5IG5hbWVzXG4gIGNvbnN0IGNhbmRpZGF0ZUtleXMgPSBbJ2RhdGEnLCAncm93cycsICdyZXN1bHQnLCAnaXRlbXMnLCAndmFsdWUnLCAncmVjb3JkcycsICdlbnRpdGllcyddO1xuICBmb3IgKGNvbnN0IGtleSBvZiBjYW5kaWRhdGVLZXlzKSB7XG4gICAgY29uc3QgdmFsID0gb2JqW2tleV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgcmV0dXJuIHZhbCBhcyBUW107XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtdO1xufVxuXG4vKipcbiAqIENhc2UtaW5zZW5zaXRpdmUgbG9va3VwIGluIGFuIG9iamVjdC9yZWNvcmQuXG4gKiBTZWFyY2hlcyBmb3IgZXhhY3QgbWF0Y2ggZmlyc3QsIHRoZW4gbG93ZXItY2FzZWQgbWF0Y2gsIHRoZW4gbm9ybWFsaXplZCAoaWdub3JpbmcgdW5kZXJzY29yZXMvZGFzaGVzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpZWxkQ2FzZUluc2Vuc2l0aXZlKFxuICByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgdGFyZ2V0S2V5OiBzdHJpbmdcbik6IHVua25vd24ge1xuICBpZiAoIXJlY29yZCB8fCB0eXBlb2YgcmVjb3JkICE9PSAnb2JqZWN0JykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAvLyAxLiBFeGFjdCBtYXRjaFxuICBpZiAodGFyZ2V0S2V5IGluIHJlY29yZCkge1xuICAgIHJldHVybiByZWNvcmRbdGFyZ2V0S2V5XTtcbiAgfVxuXG4gIC8vIDIuIENhc2UtaW5zZW5zaXRpdmUgbWF0Y2hcbiAgY29uc3QgdGFyZ2V0TG93ZXIgPSB0YXJnZXRLZXkudG9Mb3dlckNhc2UoKTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMocmVjb3JkKSkge1xuICAgIGlmIChrLnRvTG93ZXJDYXNlKCkgPT09IHRhcmdldExvd2VyKSB7XG4gICAgICByZXR1cm4gdjtcbiAgICB9XG4gIH1cblxuICAvLyAzLiBOb3JtYWxpemVkIG1hdGNoIChzdHJpcCBsZWFkaW5nICdAJywgdW5kZXJzY29yZXMsIGRhc2hlcylcbiAgY29uc3Qgbm9ybWFsaXplID0gKHM6IHN0cmluZykgPT4gcy5yZXBsYWNlKC9eQC8sICcnKS5yZXBsYWNlKC9bX1xcLVxcc10vZywgJycpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXQgPSBub3JtYWxpemUodGFyZ2V0S2V5KTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMocmVjb3JkKSkge1xuICAgIGlmIChub3JtYWxpemUoaykgPT09IG5vcm1hbGl6ZWRUYXJnZXQpIHtcbiAgICAgIHJldHVybiB2O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm9ybWFsaXplZExvb2t1cE9wdGlvbiB7XG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHJhdz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYW4gYXJiaXRyYXJ5IGRhdGFiYXNlIHJlY29yZCBpbnRvIGEgc3RhbmRhcmRpemVkIHsgdmFsdWUsIGxhYmVsLCByYXcgfSBvcHRpb24gaXRlbS5cbiAqIFN1cHBvcnRzIGNhc2UtaW5zZW5zaXRpdmUgZmllbGQgbWF0Y2hpbmcgYW5kIGludGVsbGlnZW50IGhldXJpc3RpY3MgZm9yIFNRTCBTZXJ2ZXIgY29sdW1ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RMb29rdXBPcHRpb25JdGVtKFxuICByb3c6IHVua25vd24sXG4gIHZhbHVlRmllbGQ/OiBzdHJpbmcsXG4gIGRpc3BsYXlGaWVsZD86IHN0cmluZ1xuKTogTm9ybWFsaXplZExvb2t1cE9wdGlvbiB7XG4gIGlmICghcm93IHx8IHR5cGVvZiByb3cgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiAocm93IGFzIGFueSkgPz8gJycsXG4gICAgICBsYWJlbDogU3RyaW5nKHJvdyA/PyAnJyksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHJlYyA9IHJvdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvLyBJZiByb3cgaXMgYWxyZWFkeSBub3JtYWxpemVkIChlLmcuIGZyb20gYmFja2VuZCBsb29rdXAgZW5kcG9pbnQgd2hpY2ggcmV0dXJuZWQgeyB2YWx1ZSwgbGFiZWwgfSlcbiAgLy8gYW5kIHVzZXIgZGlkIG5vdCBzcGVjaWZ5IGRpc3RpbmN0IHRhcmdldCBmaWVsZHNcbiAgaWYgKFxuICAgICd2YWx1ZScgaW4gcmVjICYmXG4gICAgJ2xhYmVsJyBpbiByZWMgJiZcbiAgICAoIXZhbHVlRmllbGQgfHwgdmFsdWVGaWVsZCA9PT0gJ3ZhbHVlJyB8fCAhZ2V0RmllbGRDYXNlSW5zZW5zaXRpdmUocmVjLCB2YWx1ZUZpZWxkKSkgJiZcbiAgICAoIWRpc3BsYXlGaWVsZCB8fCBkaXNwbGF5RmllbGQgPT09ICdsYWJlbCcgfHwgIWdldEZpZWxkQ2FzZUluc2Vuc2l0aXZlKHJlYywgZGlzcGxheUZpZWxkKSlcbiAgKSB7XG4gICAgY29uc3QgdiA9IHJlY1sndmFsdWUnXTtcbiAgICBjb25zdCByZXN1bHQ6IE5vcm1hbGl6ZWRMb29rdXBPcHRpb24gPSB7XG4gICAgICB2YWx1ZTogdHlwZW9mIHYgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkodikgOiAodiBhcyBhbnkpLFxuICAgICAgbGFiZWw6IFN0cmluZyhyZWNbJ2xhYmVsJ10gPz8gcmVjWyd2YWx1ZSddID8/ICcnKSxcbiAgICB9O1xuICAgIGlmICgncmF3JyBpbiByZWMgJiYgcmVjWydyYXcnXSkge1xuICAgICAgcmVzdWx0LnJhdyA9IHJlY1sncmF3J10gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocmVjKTtcblxuICAvLyAxLiBSZXNvbHZlIFZhbHVlXG4gIGxldCB2YWw6IHVua25vd24gPSB1bmRlZmluZWQ7XG4gIGlmICh2YWx1ZUZpZWxkICYmIHZhbHVlRmllbGQudHJpbSgpKSB7XG4gICAgdmFsID0gZ2V0RmllbGRDYXNlSW5zZW5zaXRpdmUocmVjLCB2YWx1ZUZpZWxkLnRyaW0oKSk7XG4gIH1cblxuICBpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBudWxsIHx8IHZhbCA9PT0gJycpIHtcbiAgICBjb25zdCBjYW5kaWRhdGVWYWx1ZUtleXMgPSBbJ2NvZGUnLCAnaWQnLCAna2V5JywgJ3ZhbHVlJywgJ3ZhbCddO1xuICAgIGZvciAoY29uc3QgY2FuZCBvZiBjYW5kaWRhdGVWYWx1ZUtleXMpIHtcbiAgICAgIGNvbnN0IHYgPSBnZXRGaWVsZENhc2VJbnNlbnNpdGl2ZShyZWMsIGNhbmQpO1xuICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsICYmIHYgIT09ICcnKSB7XG4gICAgICAgIHZhbCA9IHY7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh2YWwgPT09IHVuZGVmaW5lZCB8fCB2YWwgPT09IG51bGwgfHwgdmFsID09PSAnJykge1xuICAgIGNvbnN0IGlkS2V5cyA9IGtleXMuZmlsdGVyKChrKSA9PiAvKD86X2NvZGV8X2lkfGlkfGNvZGUpJC9pLnRlc3QoaykpO1xuICAgIGNvbnN0IHNwZWNpZmljSWRLZXkgPSBpZEtleXMuZmluZCgoaykgPT4gIS9eKD86dXNlcl8/aWR8Y29tcGFueV8/aWQpJC9pLnRlc3QoaykpIHx8IGlkS2V5c1swXTtcbiAgICBpZiAoc3BlY2lmaWNJZEtleSkge1xuICAgICAgdmFsID0gcmVjW3NwZWNpZmljSWRLZXldO1xuICAgIH1cbiAgfVxuXG4gIGlmICh2YWwgPT09IHVuZGVmaW5lZCB8fCB2YWwgPT09IG51bGwgfHwgdmFsID09PSAnJykge1xuICAgIGNvbnN0IGZpcnN0UHJpbWl0aXZlS2V5ID0ga2V5cy5maW5kKChrKSA9PiB0eXBlb2YgcmVjW2tdID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgcmVjW2tdID09PSAnbnVtYmVyJyk7XG4gICAgdmFsID0gZmlyc3RQcmltaXRpdmVLZXkgPyByZWNbZmlyc3RQcmltaXRpdmVLZXldIDogKGtleXNbMF0gPyByZWNba2V5c1swXV0gOiAnJyk7XG4gIH1cblxuICAvLyAyLiBSZXNvbHZlIExhYmVsIC8gRGlzcGxheVxuICBsZXQgbGFiZWw6IHVua25vd24gPSB1bmRlZmluZWQ7XG4gIGlmIChkaXNwbGF5RmllbGQgJiYgZGlzcGxheUZpZWxkLnRyaW0oKSkge1xuICAgIGxhYmVsID0gZ2V0RmllbGRDYXNlSW5zZW5zaXRpdmUocmVjLCBkaXNwbGF5RmllbGQudHJpbSgpKTtcbiAgfVxuXG4gIGlmIChsYWJlbCA9PT0gdW5kZWZpbmVkIHx8IGxhYmVsID09PSBudWxsIHx8IGxhYmVsID09PSAnJykge1xuICAgIGNvbnN0IGNhbmRpZGF0ZURpc3BsYXlLZXlzID0gWyduYW1lJywgJ3RpdGxlJywgJ2xhYmVsJywgJ2Rlc2NyaXB0aW9uJywgJ2Rlc2MnLCAndGV4dCcsICdjYXB0aW9uJ107XG4gICAgZm9yIChjb25zdCBjYW5kIG9mIGNhbmRpZGF0ZURpc3BsYXlLZXlzKSB7XG4gICAgICBjb25zdCBsID0gZ2V0RmllbGRDYXNlSW5zZW5zaXRpdmUocmVjLCBjYW5kKTtcbiAgICAgIGlmIChsICE9PSB1bmRlZmluZWQgJiYgbCAhPT0gbnVsbCAmJiBsICE9PSAnJykge1xuICAgICAgICBsYWJlbCA9IGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChsYWJlbCA9PT0gdW5kZWZpbmVkIHx8IGxhYmVsID09PSBudWxsIHx8IGxhYmVsID09PSAnJykge1xuICAgIGNvbnN0IG5hbWVLZXkgPSBrZXlzLmZpbmQoKGspID0+IC8oPzpfbmFtZXxfdGl0bGV8X2Rlc2MpJC9pLnRlc3QoaykpO1xuICAgIGlmIChuYW1lS2V5KSB7XG4gICAgICBsYWJlbCA9IHJlY1tuYW1lS2V5XTtcbiAgICB9XG4gIH1cblxuICBpZiAobGFiZWwgPT09IHVuZGVmaW5lZCB8fCBsYWJlbCA9PT0gbnVsbCB8fCBsYWJlbCA9PT0gJycpIHtcbiAgICBjb25zdCBzZWNvbmRQcmltaXRpdmVLZXkgPSBrZXlzLmZpbmQoXG4gICAgICAoaykgPT4gKHR5cGVvZiByZWNba10gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiByZWNba10gPT09ICdudW1iZXInKSAmJiByZWNba10gIT09IHZhbFxuICAgICk7XG4gICAgbGFiZWwgPSBzZWNvbmRQcmltaXRpdmVLZXkgPyByZWNbc2Vjb25kUHJpbWl0aXZlS2V5XSA6IFN0cmluZyh2YWwgPz8gJycpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogKHZhbCBhcyBhbnkpLFxuICAgIGxhYmVsOiBTdHJpbmcobGFiZWwgPz8gdmFsID8/ICcnKSxcbiAgICByYXc6IHJlYyxcbiAgfTtcbn1cbiJdfQ==
|