bways-report 0.1.0
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/LICENSE +26 -0
- package/README.md +477 -0
- package/esm2022/bways-report.mjs +5 -0
- package/esm2022/lib/core/errors/index.mjs +2 -0
- package/esm2022/lib/core/errors/reporting-errors.mjs +65 -0
- package/esm2022/lib/core/index.mjs +8 -0
- package/esm2022/lib/core/models/component-event.model.mjs +8 -0
- package/esm2022/lib/core/models/index.mjs +5 -0
- package/esm2022/lib/core/models/report-component.model.mjs +10 -0
- package/esm2022/lib/core/models/report-datasource.model.mjs +9 -0
- package/esm2022/lib/core/models/report-definition.model.mjs +13 -0
- package/esm2022/lib/core/models/report-grid.model.mjs +10 -0
- package/esm2022/lib/core/models/report-layout.model.mjs +9 -0
- package/esm2022/lib/core/models/report-parameter.model.mjs +9 -0
- package/esm2022/lib/core/models/validation.model.mjs +8 -0
- package/esm2022/lib/core/registry/component-category.mjs +8 -0
- package/esm2022/lib/core/registry/component-registry.mjs +90 -0
- package/esm2022/lib/core/registry/index.mjs +2 -0
- package/esm2022/lib/core/registry/property-definition.model.mjs +10 -0
- package/esm2022/lib/core/services/dynamic-form-builder.service.mjs +55 -0
- package/esm2022/lib/core/services/index.mjs +3 -0
- package/esm2022/lib/core/services/report-session-context.service.mjs +314 -0
- package/esm2022/lib/core/tokens/index.mjs +3 -0
- package/esm2022/lib/core/tokens/reporting-config.token.mjs +26 -0
- package/esm2022/lib/core/tokens/session-context.token.mjs +18 -0
- package/esm2022/lib/core/utilities/id-generator.mjs +17 -0
- package/esm2022/lib/core/utilities/index.mjs +3 -0
- package/esm2022/lib/core/utilities/schema-migration.mjs +38 -0
- package/esm2022/lib/core/utils/identifier-humanizer.mjs +88 -0
- package/esm2022/lib/core/validation/index.mjs +2 -0
- package/esm2022/lib/core/validation/validation-factory.mjs +70 -0
- package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +107 -0
- package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +119 -0
- package/esm2022/lib/data-access/adapters/index.mjs +3 -0
- package/esm2022/lib/data-access/contracts/data-source.contract.mjs +28 -0
- package/esm2022/lib/data-access/contracts/index.mjs +7 -0
- package/esm2022/lib/data-access/contracts/lookup.contract.mjs +6 -0
- package/esm2022/lib/data-access/contracts/master-data.provider.mjs +24 -0
- package/esm2022/lib/data-access/contracts/report-persistence.contract.mjs +25 -0
- package/esm2022/lib/data-access/contracts/schema-discovery.contract.mjs +7 -0
- package/esm2022/lib/data-access/contracts/translation.contract.mjs +9 -0
- package/esm2022/lib/data-access/index.mjs +3 -0
- package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +542 -0
- package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +843 -0
- package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +556 -0
- package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +845 -0
- package/esm2022/lib/features/designer/components/property-editor/property-editor-general.component.mjs +185 -0
- package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +452 -0
- package/esm2022/lib/features/designer/components/property-editor/property-editor-layout.component.mjs +350 -0
- package/esm2022/lib/features/designer/components/property-editor/property-editor-report.component.mjs +175 -0
- package/esm2022/lib/features/designer/components/property-editor/property-editor-validation.component.mjs +137 -0
- package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +608 -0
- package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +225 -0
- package/esm2022/lib/features/designer/designer.component.mjs +285 -0
- package/esm2022/lib/features/designer/index.mjs +7 -0
- package/esm2022/lib/features/designer/services/designer-state.service.mjs +310 -0
- package/esm2022/lib/features/designer/services/index.mjs +2 -0
- package/esm2022/lib/features/designer/utilities/canvas-layout.util.mjs +124 -0
- package/esm2022/lib/features/export/index.mjs +2 -0
- package/esm2022/lib/features/export/models/export.models.mjs +2 -0
- package/esm2022/lib/features/export/services/report-export.service.mjs +107 -0
- package/esm2022/lib/features/index.mjs +6 -0
- package/esm2022/lib/features/persistence/index.mjs +2 -0
- package/esm2022/lib/features/persistence/services/index.mjs +4 -0
- package/esm2022/lib/features/persistence/services/report-store.service.mjs +183 -0
- package/esm2022/lib/features/persistence/services/report-versioning.service.mjs +81 -0
- package/esm2022/lib/features/persistence/services/schema-validator.service.mjs +102 -0
- package/esm2022/lib/features/routing/components/routed-report-designer.component.mjs +156 -0
- package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +163 -0
- package/esm2022/lib/features/routing/index.mjs +6 -0
- package/esm2022/lib/features/routing/models/report-route.models.mjs +2 -0
- package/esm2022/lib/features/routing/report-routes.mjs +49 -0
- package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +22 -0
- package/esm2022/lib/features/routing/services/report-menu.service.mjs +77 -0
- package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +222 -0
- package/esm2022/lib/features/runtime/index.mjs +4 -0
- package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +409 -0
- package/esm2022/lib/features/runtime/report-runtime.component.mjs +147 -0
- package/esm2022/lib/primitives/components/button/rpt-button.component.mjs +88 -0
- package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +361 -0
- package/esm2022/lib/primitives/components/checkbox/rpt-checkbox.component.mjs +86 -0
- package/esm2022/lib/primitives/components/date/rpt-date.component.mjs +91 -0
- package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +204 -0
- package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +476 -0
- package/esm2022/lib/primitives/components/index.mjs +10 -0
- package/esm2022/lib/primitives/components/input/rpt-input.component.mjs +88 -0
- package/esm2022/lib/primitives/components/kpi-card/rpt-kpi-card.component.mjs +197 -0
- package/esm2022/lib/primitives/components/number/rpt-number.component.mjs +110 -0
- package/esm2022/lib/primitives/index.mjs +3 -0
- package/esm2022/lib/primitives/register-builtins.mjs +328 -0
- package/esm2022/lib/provide-reporting.mjs +92 -0
- package/esm2022/public-api.mjs +9 -0
- package/fesm2022/bways-report.mjs +10360 -0
- package/fesm2022/bways-report.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/core/errors/index.d.ts +1 -0
- package/lib/core/errors/reporting-errors.d.ts +42 -0
- package/lib/core/index.d.ts +7 -0
- package/lib/core/models/component-event.model.d.ts +37 -0
- package/lib/core/models/index.d.ts +11 -0
- package/lib/core/models/report-component.model.d.ts +95 -0
- package/lib/core/models/report-datasource.model.d.ts +39 -0
- package/lib/core/models/report-definition.model.d.ts +100 -0
- package/lib/core/models/report-grid.model.d.ts +73 -0
- package/lib/core/models/report-layout.model.d.ts +43 -0
- package/lib/core/models/report-parameter.model.d.ts +22 -0
- package/lib/core/models/validation.model.d.ts +30 -0
- package/lib/core/registry/component-category.d.ts +16 -0
- package/lib/core/registry/component-registry.d.ts +101 -0
- package/lib/core/registry/index.d.ts +4 -0
- package/lib/core/registry/property-definition.model.d.ts +38 -0
- package/lib/core/services/dynamic-form-builder.service.d.ts +30 -0
- package/lib/core/services/index.d.ts +3 -0
- package/lib/core/services/report-session-context.service.d.ts +87 -0
- package/lib/core/tokens/index.d.ts +4 -0
- package/lib/core/tokens/reporting-config.token.d.ts +42 -0
- package/lib/core/tokens/session-context.token.d.ts +36 -0
- package/lib/core/utilities/id-generator.d.ts +9 -0
- package/lib/core/utilities/index.d.ts +3 -0
- package/lib/core/utilities/schema-migration.d.ts +10 -0
- package/lib/core/utils/identifier-humanizer.d.ts +22 -0
- package/lib/core/validation/index.d.ts +1 -0
- package/lib/core/validation/validation-factory.d.ts +31 -0
- package/lib/data-access/adapters/http-lookup.adapter.d.ts +19 -0
- package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +20 -0
- package/lib/data-access/adapters/index.d.ts +2 -0
- package/lib/data-access/contracts/data-source.contract.d.ts +37 -0
- package/lib/data-access/contracts/index.d.ts +9 -0
- package/lib/data-access/contracts/lookup.contract.d.ts +32 -0
- package/lib/data-access/contracts/master-data.provider.d.ts +54 -0
- package/lib/data-access/contracts/report-persistence.contract.d.ts +36 -0
- package/lib/data-access/contracts/schema-discovery.contract.d.ts +52 -0
- package/lib/data-access/contracts/translation.contract.d.ts +16 -0
- package/lib/data-access/index.d.ts +2 -0
- package/lib/features/designer/components/component-palette/component-palette.component.d.ts +39 -0
- package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +42 -0
- package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +36 -0
- package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +68 -0
- package/lib/features/designer/components/property-editor/property-editor-general.component.d.ts +20 -0
- package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +20 -0
- package/lib/features/designer/components/property-editor/property-editor-layout.component.d.ts +18 -0
- package/lib/features/designer/components/property-editor/property-editor-report.component.d.ts +15 -0
- package/lib/features/designer/components/property-editor/property-editor-validation.component.d.ts +12 -0
- package/lib/features/designer/components/property-editor/property-editor.component.d.ts +44 -0
- package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +18 -0
- package/lib/features/designer/designer.component.d.ts +36 -0
- package/lib/features/designer/index.d.ts +7 -0
- package/lib/features/designer/services/designer-state.service.d.ts +103 -0
- package/lib/features/designer/services/index.d.ts +2 -0
- package/lib/features/designer/utilities/canvas-layout.util.d.ts +55 -0
- package/lib/features/export/index.d.ts +2 -0
- package/lib/features/export/models/export.models.d.ts +16 -0
- package/lib/features/export/services/report-export.service.d.ts +27 -0
- package/lib/features/index.d.ts +5 -0
- package/lib/features/persistence/index.d.ts +1 -0
- package/lib/features/persistence/services/index.d.ts +5 -0
- package/lib/features/persistence/services/report-store.service.d.ts +53 -0
- package/lib/features/persistence/services/report-versioning.service.d.ts +29 -0
- package/lib/features/persistence/services/schema-validator.service.d.ts +34 -0
- package/lib/features/routing/components/routed-report-designer.component.d.ts +18 -0
- package/lib/features/routing/components/routed-report-runtime.component.d.ts +18 -0
- package/lib/features/routing/index.d.ts +6 -0
- package/lib/features/routing/models/report-route.models.d.ts +41 -0
- package/lib/features/routing/report-routes.d.ts +16 -0
- package/lib/features/routing/resolvers/report.resolver.d.ts +7 -0
- package/lib/features/routing/services/report-menu.service.d.ts +30 -0
- package/lib/features/runtime/dynamic-renderer.component.d.ts +30 -0
- package/lib/features/runtime/index.d.ts +3 -0
- package/lib/features/runtime/report-grid-bridge.component.d.ts +94 -0
- package/lib/features/runtime/report-runtime.component.d.ts +26 -0
- package/lib/primitives/components/button/rpt-button.component.d.ts +19 -0
- package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +45 -0
- package/lib/primitives/components/checkbox/rpt-checkbox.component.d.ts +14 -0
- package/lib/primitives/components/date/rpt-date.component.d.ts +17 -0
- package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +32 -0
- package/lib/primitives/components/icon/rpt-icon.component.d.ts +41 -0
- package/lib/primitives/components/index.d.ts +12 -0
- package/lib/primitives/components/input/rpt-input.component.d.ts +16 -0
- package/lib/primitives/components/kpi-card/rpt-kpi-card.component.d.ts +43 -0
- package/lib/primitives/components/number/rpt-number.component.d.ts +20 -0
- package/lib/primitives/index.d.ts +2 -0
- package/lib/primitives/register-builtins.d.ts +11 -0
- package/lib/provide-reporting.d.ts +75 -0
- package/package.json +55 -0
- package/public-api.d.ts +5 -0
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { computed, inject, Injectable, signal, } from '@angular/core';
|
|
2
|
+
import { toObservable } from '@angular/core/rxjs-interop';
|
|
3
|
+
import { isObservable } from 'rxjs';
|
|
4
|
+
import { REPORT_SESSION_CONTEXT, REPORT_SESSION_PROVIDER, } from '../tokens/session-context.token';
|
|
5
|
+
import { humanizeIdentifier } from '../utils/identifier-humanizer';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
/**
|
|
8
|
+
* Service that manages host application session context parameters (e.g. branchId, companyId, userId)
|
|
9
|
+
* at runtime and automatically detects and binds them to Stored Procedure parameters.
|
|
10
|
+
*
|
|
11
|
+
* Designed to completely shield end users from entering technical session parameters while
|
|
12
|
+
* eliminating silent failures or thread crashes in host integrations.
|
|
13
|
+
*/
|
|
14
|
+
export class ReportSessionContextService {
|
|
15
|
+
rawSource = inject(REPORT_SESSION_CONTEXT, {
|
|
16
|
+
optional: true,
|
|
17
|
+
});
|
|
18
|
+
sessionProvider = inject(REPORT_SESSION_PROVIDER, {
|
|
19
|
+
optional: true,
|
|
20
|
+
});
|
|
21
|
+
/** Internal manual runtime session overrides (e.g. set via setSessionContext or setSessionParameter) */
|
|
22
|
+
manualRuntimeContext = signal({});
|
|
23
|
+
latestObservableValue = signal({});
|
|
24
|
+
providerObservableValue = signal({});
|
|
25
|
+
observableSub;
|
|
26
|
+
providerSub;
|
|
27
|
+
/**
|
|
28
|
+
* Reactive signal exposing the live session context parameters.
|
|
29
|
+
* Updates automatically when host app mutates runtime state, when observables emit,
|
|
30
|
+
* or when reactive signals update.
|
|
31
|
+
*/
|
|
32
|
+
sessionContext = computed(() => {
|
|
33
|
+
let providerMap = {};
|
|
34
|
+
if (this.sessionProvider) {
|
|
35
|
+
try {
|
|
36
|
+
const res = this.sessionProvider.getSessionContext();
|
|
37
|
+
if (typeof res === 'function') {
|
|
38
|
+
const val = res();
|
|
39
|
+
if (val && typeof val === 'object') {
|
|
40
|
+
providerMap = val;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else if (isObservable(res)) {
|
|
44
|
+
providerMap = this.providerObservableValue();
|
|
45
|
+
}
|
|
46
|
+
else if (res && typeof res === 'object' && !('then' in res)) {
|
|
47
|
+
providerMap = res;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
console.warn('[ReportSessionContextService] Error reading SessionContextProvider:', err);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
let tokenMap = {};
|
|
55
|
+
if (this.rawSource) {
|
|
56
|
+
try {
|
|
57
|
+
if (isObservable(this.rawSource)) {
|
|
58
|
+
tokenMap = this.latestObservableValue();
|
|
59
|
+
}
|
|
60
|
+
else if (typeof this.rawSource === 'function') {
|
|
61
|
+
const res = this.rawSource();
|
|
62
|
+
if (typeof res === 'function') {
|
|
63
|
+
const innerRes = res();
|
|
64
|
+
tokenMap = innerRes && typeof innerRes === 'object' ? innerRes : {};
|
|
65
|
+
}
|
|
66
|
+
else if (isObservable(res)) {
|
|
67
|
+
tokenMap = this.latestObservableValue();
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
tokenMap = res && typeof res === 'object' ? res : {};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else if (typeof this.rawSource === 'object' && this.rawSource !== null) {
|
|
74
|
+
tokenMap = this.rawSource;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
console.warn('[ReportSessionContextService] Error evaluating raw session source:', err);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const manualMap = this.manualRuntimeContext();
|
|
82
|
+
return {
|
|
83
|
+
...providerMap,
|
|
84
|
+
...tokenMap,
|
|
85
|
+
...manualMap,
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
/**
|
|
89
|
+
* Observable stream of live session parameters for RxJS-based integrations.
|
|
90
|
+
*/
|
|
91
|
+
sessionContext$ = toObservable(this.sessionContext);
|
|
92
|
+
constructor() {
|
|
93
|
+
this.initSubscriptions();
|
|
94
|
+
}
|
|
95
|
+
ngOnDestroy() {
|
|
96
|
+
this.observableSub?.unsubscribe();
|
|
97
|
+
this.providerSub?.unsubscribe();
|
|
98
|
+
}
|
|
99
|
+
initSubscriptions() {
|
|
100
|
+
if (this.rawSource && isObservable(this.rawSource)) {
|
|
101
|
+
this.observableSub = this.rawSource.subscribe({
|
|
102
|
+
next: (val) => {
|
|
103
|
+
if (val && typeof val === 'object') {
|
|
104
|
+
this.latestObservableValue.set({ ...val });
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
error: (err) => {
|
|
108
|
+
console.warn('[ReportSessionContextService] Error from session context observable:', err);
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
if (this.sessionProvider) {
|
|
113
|
+
try {
|
|
114
|
+
const res = this.sessionProvider.getSessionContext();
|
|
115
|
+
if (isObservable(res)) {
|
|
116
|
+
this.providerSub = res.subscribe({
|
|
117
|
+
next: (val) => {
|
|
118
|
+
if (val && typeof val === 'object') {
|
|
119
|
+
this.providerObservableValue.set({ ...val });
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
error: (err) => {
|
|
123
|
+
console.warn('[ReportSessionContextService] Error from session provider observable:', err);
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
else if (res &&
|
|
128
|
+
typeof res === 'object' &&
|
|
129
|
+
'then' in res &&
|
|
130
|
+
typeof res.then === 'function') {
|
|
131
|
+
res
|
|
132
|
+
.then((val) => {
|
|
133
|
+
if (val && typeof val === 'object') {
|
|
134
|
+
this.providerObservableValue.set({ ...val });
|
|
135
|
+
}
|
|
136
|
+
})
|
|
137
|
+
.catch((err) => {
|
|
138
|
+
console.warn('[ReportSessionContextService] Error from session provider promise:', err);
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
console.warn('[ReportSessionContextService] Error initializing session provider:', err);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Sets or replaces the runtime session context.
|
|
149
|
+
* Can be called dynamically after user authentication, branch change, etc.
|
|
150
|
+
*/
|
|
151
|
+
setSessionContext(context) {
|
|
152
|
+
if (context && typeof context === 'object') {
|
|
153
|
+
this.manualRuntimeContext.set({ ...context });
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
this.manualRuntimeContext.set({});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Updates or sets a specific session parameter at runtime (e.g. branchId = 2).
|
|
161
|
+
*/
|
|
162
|
+
setSessionParameter(key, value) {
|
|
163
|
+
if (!key)
|
|
164
|
+
return;
|
|
165
|
+
this.manualRuntimeContext.update((current) => ({
|
|
166
|
+
...current,
|
|
167
|
+
[key]: value,
|
|
168
|
+
}));
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Clears any runtime session parameters set via `setSessionContext` or `setSessionParameter`.
|
|
172
|
+
*/
|
|
173
|
+
clearSessionContext() {
|
|
174
|
+
this.manualRuntimeContext.set({});
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Safely returns the current session context map.
|
|
178
|
+
* Always pulls the latest runtime state. Never throws or crashes the thread.
|
|
179
|
+
*/
|
|
180
|
+
getCurrentSessionContext() {
|
|
181
|
+
try {
|
|
182
|
+
return this.sessionContext();
|
|
183
|
+
}
|
|
184
|
+
catch (err) {
|
|
185
|
+
console.warn('[ReportSessionContextService] Failed to evaluate session context:', err);
|
|
186
|
+
return {};
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Normalizes a parameter or session key into a lowercase alphanumeric string
|
|
191
|
+
* for reliable, case-insensitive, and symbol-insensitive matching.
|
|
192
|
+
* E.g. '@BranchId' -> 'branchid', 'branch_id' -> 'branchid', 'BranchID' -> 'branchid'
|
|
193
|
+
*/
|
|
194
|
+
normalizeKey(key) {
|
|
195
|
+
if (!key || typeof key !== 'string')
|
|
196
|
+
return '';
|
|
197
|
+
return key
|
|
198
|
+
.replace(/^@+/, '')
|
|
199
|
+
.replace(/[_\-\s]+/g, '')
|
|
200
|
+
.toLowerCase();
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Checks whether a stored procedure parameter matches any key in the active session context.
|
|
204
|
+
* Supports exact, normalized, and common ERP synonyms.
|
|
205
|
+
*/
|
|
206
|
+
matchParameter(paramName) {
|
|
207
|
+
const session = this.getCurrentSessionContext();
|
|
208
|
+
const sessionKeys = Object.keys(session);
|
|
209
|
+
if (sessionKeys.length === 0)
|
|
210
|
+
return null;
|
|
211
|
+
const normalizedParam = this.normalizeKey(paramName);
|
|
212
|
+
// 1. Exact match on raw name
|
|
213
|
+
if (paramName in session) {
|
|
214
|
+
return {
|
|
215
|
+
isMatched: true,
|
|
216
|
+
sessionKey: paramName,
|
|
217
|
+
value: session[paramName],
|
|
218
|
+
friendlyLabel: humanizeIdentifier(paramName),
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
// 2. Direct normalized match
|
|
222
|
+
for (const key of sessionKeys) {
|
|
223
|
+
if (this.normalizeKey(key) === normalizedParam) {
|
|
224
|
+
return {
|
|
225
|
+
isMatched: true,
|
|
226
|
+
sessionKey: key,
|
|
227
|
+
value: session[key],
|
|
228
|
+
friendlyLabel: humanizeIdentifier(key),
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// 3. Common ERP synonym groups (bidirectional matching)
|
|
233
|
+
const synonymGroups = [
|
|
234
|
+
['branch', 'branchid', 'bid', 'branchcode', 'locationid', 'location'],
|
|
235
|
+
['company', 'companyid', 'cid', 'companycode', 'tenant', 'tenantid'],
|
|
236
|
+
['user', 'userid', 'uid', 'usercode', 'operatorid', 'loginuser'],
|
|
237
|
+
['financialyear', 'financialyearid', 'yearid', 'fyear', 'fiscalyear'],
|
|
238
|
+
['org', 'orgid', 'organization', 'organizationid'],
|
|
239
|
+
];
|
|
240
|
+
for (const group of synonymGroups) {
|
|
241
|
+
if (group.includes(normalizedParam)) {
|
|
242
|
+
for (const key of sessionKeys) {
|
|
243
|
+
if (group.includes(this.normalizeKey(key))) {
|
|
244
|
+
return {
|
|
245
|
+
isMatched: true,
|
|
246
|
+
sessionKey: key,
|
|
247
|
+
value: session[key],
|
|
248
|
+
friendlyLabel: humanizeIdentifier(key),
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Resolves and derives all stored procedure parameters:
|
|
258
|
+
* - Preserves explicit overrides (e.g. from canvas form controls or manual inputs)
|
|
259
|
+
* - Automatically injects matched session parameters
|
|
260
|
+
* - Validates whether required parameters are fulfilled
|
|
261
|
+
*/
|
|
262
|
+
deriveParameters(spParams, explicitMappings = {}) {
|
|
263
|
+
const session = this.getCurrentSessionContext();
|
|
264
|
+
const finalParams = {};
|
|
265
|
+
const autoDerived = {};
|
|
266
|
+
const unresolvedRequired = [];
|
|
267
|
+
for (const param of spParams) {
|
|
268
|
+
const paramName = param.name;
|
|
269
|
+
const explicitVal = explicitMappings[paramName];
|
|
270
|
+
// Check if user or canvas explicitly provided a value (and not an empty placeholder)
|
|
271
|
+
const hasExplicit = explicitVal !== undefined && explicitVal !== '' && explicitVal !== null;
|
|
272
|
+
if (hasExplicit) {
|
|
273
|
+
finalParams[paramName] = explicitVal;
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
// Check for session context match
|
|
277
|
+
const sessionMatch = this.matchParameter(paramName);
|
|
278
|
+
if (sessionMatch && sessionMatch.value !== undefined && sessionMatch.value !== null) {
|
|
279
|
+
finalParams[paramName] = sessionMatch.value;
|
|
280
|
+
autoDerived[paramName] = sessionMatch;
|
|
281
|
+
continue;
|
|
282
|
+
}
|
|
283
|
+
// If default value is provided in SP metadata
|
|
284
|
+
if (param.defaultValue !== undefined && param.defaultValue !== null) {
|
|
285
|
+
finalParams[paramName] = param.defaultValue;
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
288
|
+
// If required but not satisfied
|
|
289
|
+
if (param.required) {
|
|
290
|
+
unresolvedRequired.push(param);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// Also include any extra explicit mappings that didn't match parameter list
|
|
294
|
+
for (const [key, val] of Object.entries(explicitMappings)) {
|
|
295
|
+
if (!(key in finalParams) && val !== undefined && val !== null && val !== '') {
|
|
296
|
+
finalParams[key] = val;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return {
|
|
300
|
+
parameters: finalParams,
|
|
301
|
+
autoDerivedParams: autoDerived,
|
|
302
|
+
unresolvedRequiredParams: unresolvedRequired,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportSessionContextService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
306
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportSessionContextService, providedIn: 'root' });
|
|
307
|
+
}
|
|
308
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportSessionContextService, decorators: [{
|
|
309
|
+
type: Injectable,
|
|
310
|
+
args: [{
|
|
311
|
+
providedIn: 'root',
|
|
312
|
+
}]
|
|
313
|
+
}], ctorParameters: () => [] });
|
|
314
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUVWLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix1QkFBdUIsR0FLeEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFrQm5FOzs7Ozs7R0FNRztBQUlILE1BQU0sT0FBTywyQkFBMkI7SUFDckIsU0FBUyxHQUFHLE1BQU0sQ0FBOEIsc0JBQXNCLEVBQUU7UUFDdkYsUUFBUSxFQUFFLElBQUk7S0FDZixDQUFDLENBQUM7SUFDYyxlQUFlLEdBQUcsTUFBTSxDQUFnQyx1QkFBdUIsRUFBRTtRQUNoRyxRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FBQztJQUVILHdHQUF3RztJQUN2RixvQkFBb0IsR0FBRyxNQUFNLENBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELHFCQUFxQixHQUFHLE1BQU0sQ0FBb0IsRUFBRSxDQUFDLENBQUM7SUFDdEQsdUJBQXVCLEdBQUcsTUFBTSxDQUFvQixFQUFFLENBQUMsQ0FBQztJQUVqRSxhQUFhLENBQWdCO0lBQzdCLFdBQVcsQ0FBZ0I7SUFFbkM7Ozs7T0FJRztJQUNNLGNBQWMsR0FBOEIsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNqRSxJQUFJLFdBQVcsR0FB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QyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPO1lBQ0wsVUFBVSxFQUFFLFdBQVc7WUFDdkIsaUJBQWlCLEVBQUUsV0FBVztZQUM5Qix3QkFBd0IsRUFBRSxrQkFBa0I7U0FDN0MsQ0FBQztJQUNKLENBQUM7d0dBeFRVLDJCQUEyQjs0R0FBM0IsMkJBQTJCLGNBRjFCLE1BQU07OzRGQUVQLDJCQUEyQjtrQkFIdkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBJbmplY3RhYmxlLFxuICBPbkRlc3Ryb3ksXG4gIHNpZ25hbCxcbiAgU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBSRVBPUlRfU0VTU0lPTl9DT05URVhULFxuICBSRVBPUlRfU0VTU0lPTl9QUk9WSURFUixcbiAgU2Vzc2lvbkNvbnRleHRNYXAsXG4gIFNlc3Npb25Db250ZXh0UHJvdmlkZXIsXG4gIFNlc3Npb25Db250ZXh0U291cmNlLFxuICBTZXNzaW9uUGFyYW1QcmltaXRpdmUsXG59IGZyb20gJy4uL3Rva2Vucy9zZXNzaW9uLWNvbnRleHQudG9rZW4nO1xuaW1wb3J0IHsgUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvc2NoZW1hLWRpc2NvdmVyeS5jb250cmFjdCc7XG5pbXBvcnQgeyBodW1hbml6ZUlkZW50aWZpZXIgfSBmcm9tICcuLi91dGlscy9pZGVudGlmaWVyLWh1bWFuaXplcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvblBhcmFtTWF0Y2gge1xuICBpc01hdGNoZWQ6IGJvb2xlYW47XG4gIHNlc3Npb25LZXk6IHN0cmluZztcbiAgdmFsdWU6IFNlc3Npb25QYXJhbVByaW1pdGl2ZTtcbiAgZnJpZW5kbHlMYWJlbDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlcml2ZWRQYXJhbWV0ZXJzUmVzdWx0IHtcbiAgLyoqIFRoZSBjb25zb2xpZGF0ZWQgcGFyYW1ldGVyIHBheWxvYWQgZm9yIHN0b3JlZCBwcm9jZWR1cmUgZXhlY3V0aW9uICovXG4gIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogTWFwIG9mIHdoaWNoIFNQIHBhcmFtZXRlcnMgd2VyZSBhdXRvLWRlcml2ZWQgZnJvbSBzZXNzaW9uIGNvbnRleHQgKi9cbiAgYXV0b0Rlcml2ZWRQYXJhbXM6IFJlY29yZDxzdHJpbmcsIFNlc3Npb25QYXJhbU1hdGNoPjtcbiAgLyoqIEFueSByZXF1aXJlZCBwYXJhbWV0ZXJzIHRoYXQgd2VyZSBuZWl0aGVyIGluIHNlc3Npb24gY29udGV4dCBub3IgZXhwbGljaXRseSBtYXBwZWQgKi9cbiAgdW5yZXNvbHZlZFJlcXVpcmVkUGFyYW1zOiBQcm9jZWR1cmVQYXJhbWV0ZXJNZXRhZGF0YVtdO1xufVxuXG4vKipcbiAqIFNlcnZpY2UgdGhhdCBtYW5hZ2VzIGhvc3QgYXBwbGljYXRpb24gc2Vzc2lvbiBjb250ZXh0IHBhcmFtZXRlcnMgKGUuZy4gYnJhbmNoSWQsIGNvbXBhbnlJZCwgdXNlcklkKVxuICogYXQgcnVudGltZSBhbmQgYXV0b21hdGljYWxseSBkZXRlY3RzIGFuZCBiaW5kcyB0aGVtIHRvIFN0b3JlZCBQcm9jZWR1cmUgcGFyYW1ldGVycy5cbiAqXG4gKiBEZXNpZ25lZCB0byBjb21wbGV0ZWx5IHNoaWVsZCBlbmQgdXNlcnMgZnJvbSBlbnRlcmluZyB0ZWNobmljYWwgc2Vzc2lvbiBwYXJhbWV0ZXJzIHdoaWxlXG4gKiBlbGltaW5hdGluZyBzaWxlbnQgZmFpbHVyZXMgb3IgdGhyZWFkIGNyYXNoZXMgaW4gaG9zdCBpbnRlZ3JhdGlvbnMuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IHJhd1NvdXJjZSA9IGluamVjdDxTZXNzaW9uQ29udGV4dFNvdXJjZSB8IG51bGw+KFJFUE9SVF9TRVNTSU9OX0NPTlRFWFQsIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblByb3ZpZGVyID0gaW5qZWN0PFNlc3Npb25Db250ZXh0UHJvdmlkZXIgfCBudWxsPihSRVBPUlRfU0VTU0lPTl9QUk9WSURFUiwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcblxuICAvKiogSW50ZXJuYWwgbWFudWFsIHJ1bnRpbWUgc2Vzc2lvbiBvdmVycmlkZXMgKGUuZy4gc2V0IHZpYSBzZXRTZXNzaW9uQ29udGV4dCBvciBzZXRTZXNzaW9uUGFyYW1ldGVyKSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG1hbnVhbFJ1bnRpbWVDb250ZXh0ID0gc2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPih7fSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGF0ZXN0T2JzZXJ2YWJsZVZhbHVlID0gc2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPih7fSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvdmlkZXJPYnNlcnZhYmxlVmFsdWUgPSBzaWduYWw8U2Vzc2lvbkNvbnRleHRNYXA+KHt9KTtcblxuICBwcml2YXRlIG9ic2VydmFibGVTdWI/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcHJvdmlkZXJTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIFJlYWN0aXZlIHNpZ25hbCBleHBvc2luZyB0aGUgbGl2ZSBzZXNzaW9uIGNvbnRleHQgcGFyYW1ldGVycy5cbiAgICogVXBkYXRlcyBhdXRvbWF0aWNhbGx5IHdoZW4gaG9zdCBhcHAgbXV0YXRlcyBydW50aW1lIHN0YXRlLCB3aGVuIG9ic2VydmFibGVzIGVtaXQsXG4gICAqIG9yIHdoZW4gcmVhY3RpdmUgc2lnbmFscyB1cGRhdGUuXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uQ29udGV4dDogU2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBsZXQgcHJvdmlkZXJNYXA6IFNlc3Npb25Db250ZXh0TWFwID0ge307XG4gICAgaWYgKHRoaXMuc2Vzc2lvblByb3ZpZGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnNlc3Npb25Qcm92aWRlci5nZXRTZXNzaW9uQ29udGV4dCgpO1xuICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IChyZXMgYXMgKCkgPT4gU2Vzc2lvbkNvbnRleHRNYXApKCk7XG4gICAgICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcHJvdmlkZXJNYXAgPSB2YWw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzT2JzZXJ2YWJsZShyZXMpKSB7XG4gICAgICAgICAgcHJvdmlkZXJNYXAgPSB0aGlzLnByb3ZpZGVyT2JzZXJ2YWJsZVZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmICEoJ3RoZW4nIGluIHJlcykpIHtcbiAgICAgICAgICBwcm92aWRlck1hcCA9IHJlcyBhcyBTZXNzaW9uQ29udGV4dE1hcDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgcmVhZGluZyBTZXNzaW9uQ29udGV4dFByb3ZpZGVyOicsIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHRva2VuTWFwOiBTZXNzaW9uQ29udGV4dE1hcCA9IHt9O1xuICAgIGlmICh0aGlzLnJhd1NvdXJjZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZSh0aGlzLnJhd1NvdXJjZSkpIHtcbiAgICAgICAgICB0b2tlbk1hcCA9IHRoaXMubGF0ZXN0T2JzZXJ2YWJsZVZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMucmF3U291cmNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5yYXdTb3VyY2UoKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJSZXMgPSAocmVzIGFzICgpID0+IHVua25vd24pKCk7XG4gICAgICAgICAgICB0b2tlbk1hcCA9IGlubmVyUmVzICYmIHR5cGVvZiBpbm5lclJlcyA9PT0gJ29iamVjdCcgPyAoaW5uZXJSZXMgYXMgU2Vzc2lvbkNvbnRleHRNYXApIDoge307XG4gICAgICAgICAgfSBlbHNlIGlmIChpc09ic2VydmFibGUocmVzKSkge1xuICAgICAgICAgICAgdG9rZW5NYXAgPSB0aGlzLmxhdGVzdE9ic2VydmFibGVWYWx1ZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b2tlbk1hcCA9IHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyA/IChyZXMgYXMgU2Vzc2lvbkNvbnRleHRNYXApIDoge307XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnJhd1NvdXJjZSA9PT0gJ29iamVjdCcgJiYgdGhpcy5yYXdTb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICB0b2tlbk1hcCA9IHRoaXMucmF3U291cmNlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciBldmFsdWF0aW5nIHJhdyBzZXNzaW9uIHNvdXJjZTonLCBlcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1hbnVhbE1hcCA9IHRoaXMubWFudWFsUnVudGltZUNvbnRleHQoKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5wcm92aWRlck1hcCxcbiAgICAgIC4uLnRva2VuTWFwLFxuICAgICAgLi4ubWFudWFsTWFwLFxuICAgIH07XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHN0cmVhbSBvZiBsaXZlIHNlc3Npb24gcGFyYW1ldGVycyBmb3IgUnhKUy1iYXNlZCBpbnRlZ3JhdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uQ29udGV4dCQ6IE9ic2VydmFibGU8U2Vzc2lvbkNvbnRleHRNYXA+ID0gdG9PYnNlcnZhYmxlKHRoaXMuc2Vzc2lvbkNvbnRleHQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaW5pdFN1YnNjcmlwdGlvbnMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub2JzZXJ2YWJsZVN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnByb3ZpZGVyU3ViPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0U3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yYXdTb3VyY2UgJiYgaXNPYnNlcnZhYmxlKHRoaXMucmF3U291cmNlKSkge1xuICAgICAgdGhpcy5vYnNlcnZhYmxlU3ViID0gdGhpcy5yYXdTb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHZhbCkgPT4ge1xuICAgICAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRoaXMubGF0ZXN0T2JzZXJ2YWJsZVZhbHVlLnNldCh7IC4uLnZhbCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciBmcm9tIHNlc3Npb24gY29udGV4dCBvYnNlcnZhYmxlOicsIGVycik7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZXNzaW9uUHJvdmlkZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuc2Vzc2lvblByb3ZpZGVyLmdldFNlc3Npb25Db250ZXh0KCk7XG4gICAgICAgIGlmIChpc09ic2VydmFibGUocmVzKSkge1xuICAgICAgICAgIHRoaXMucHJvdmlkZXJTdWIgPSByZXMuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6ICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvdmlkZXJPYnNlcnZhYmxlVmFsdWUuc2V0KHsgLi4udmFsIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciBmcm9tIHNlc3Npb24gcHJvdmlkZXIgb2JzZXJ2YWJsZTonLCBlcnIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICByZXMgJiZcbiAgICAgICAgICB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICd0aGVuJyBpbiByZXMgJiZcbiAgICAgICAgICB0eXBlb2YgKHJlcyBhcyBQcm9taXNlPHVua25vd24+KS50aGVuID09PSAnZnVuY3Rpb24nXG4gICAgICAgICkge1xuICAgICAgICAgIChyZXMgYXMgUHJvbWlzZTxTZXNzaW9uQ29udGV4dE1hcD4pXG4gICAgICAgICAgICAudGhlbigodmFsKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3ZpZGVyT2JzZXJ2YWJsZVZhbHVlLnNldCh7IC4uLnZhbCB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgZnJvbSBzZXNzaW9uIHByb3ZpZGVyIHByb21pc2U6JywgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciBpbml0aWFsaXppbmcgc2Vzc2lvbiBwcm92aWRlcjonLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIG9yIHJlcGxhY2VzIHRoZSBydW50aW1lIHNlc3Npb24gY29udGV4dC5cbiAgICogQ2FuIGJlIGNhbGxlZCBkeW5hbWljYWxseSBhZnRlciB1c2VyIGF1dGhlbnRpY2F0aW9uLCBicmFuY2ggY2hhbmdlLCBldGMuXG4gICAqL1xuICBzZXRTZXNzaW9uQ29udGV4dChjb250ZXh0OiBTZXNzaW9uQ29udGV4dE1hcCk6IHZvaWQge1xuICAgIGlmIChjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0ID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5tYW51YWxSdW50aW1lQ29udGV4dC5zZXQoeyAuLi5jb250ZXh0IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hbnVhbFJ1bnRpbWVDb250ZXh0LnNldCh7fSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgb3Igc2V0cyBhIHNwZWNpZmljIHNlc3Npb24gcGFyYW1ldGVyIGF0IHJ1bnRpbWUgKGUuZy4gYnJhbmNoSWQgPSAyKS5cbiAgICovXG4gIHNldFNlc3Npb25QYXJhbWV0ZXIoa2V5OiBzdHJpbmcsIHZhbHVlOiBTZXNzaW9uUGFyYW1QcmltaXRpdmUpOiB2b2lkIHtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgIHRoaXMubWFudWFsUnVudGltZUNvbnRleHQudXBkYXRlKChjdXJyZW50KSA9PiAoe1xuICAgICAgLi4uY3VycmVudCxcbiAgICAgIFtrZXldOiB2YWx1ZSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGFueSBydW50aW1lIHNlc3Npb24gcGFyYW1ldGVycyBzZXQgdmlhIGBzZXRTZXNzaW9uQ29udGV4dGAgb3IgYHNldFNlc3Npb25QYXJhbWV0ZXJgLlxuICAgKi9cbiAgY2xlYXJTZXNzaW9uQ29udGV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLm1hbnVhbFJ1bnRpbWVDb250ZXh0LnNldCh7fSk7XG4gIH1cblxuICAvKipcbiAgICogU2FmZWx5IHJldHVybnMgdGhlIGN1cnJlbnQgc2Vzc2lvbiBjb250ZXh0IG1hcC5cbiAgICogQWx3YXlzIHB1bGxzIHRoZSBsYXRlc3QgcnVudGltZSBzdGF0ZS4gTmV2ZXIgdGhyb3dzIG9yIGNyYXNoZXMgdGhlIHRocmVhZC5cbiAgICovXG4gIGdldEN1cnJlbnRTZXNzaW9uQ29udGV4dCgpOiBTZXNzaW9uQ29udGV4dE1hcCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLnNlc3Npb25Db250ZXh0KCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2VdIEZhaWxlZCB0byBldmFsdWF0ZSBzZXNzaW9uIGNvbnRleHQ6JywgZXJyKTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplcyBhIHBhcmFtZXRlciBvciBzZXNzaW9uIGtleSBpbnRvIGEgbG93ZXJjYXNlIGFscGhhbnVtZXJpYyBzdHJpbmdcbiAgICogZm9yIHJlbGlhYmxlLCBjYXNlLWluc2Vuc2l0aXZlLCBhbmQgc3ltYm9sLWluc2Vuc2l0aXZlIG1hdGNoaW5nLlxuICAgKiBFLmcuICdAQnJhbmNoSWQnIC0+ICdicmFuY2hpZCcsICdicmFuY2hfaWQnIC0+ICdicmFuY2hpZCcsICdCcmFuY2hJRCcgLT4gJ2JyYW5jaGlkJ1xuICAgKi9cbiAgbm9ybWFsaXplS2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWtleSB8fCB0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykgcmV0dXJuICcnO1xuICAgIHJldHVybiBrZXlcbiAgICAgIC5yZXBsYWNlKC9eQCsvLCAnJylcbiAgICAgIC5yZXBsYWNlKC9bX1xcLVxcc10rL2csICcnKVxuICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgYSBzdG9yZWQgcHJvY2VkdXJlIHBhcmFtZXRlciBtYXRjaGVzIGFueSBrZXkgaW4gdGhlIGFjdGl2ZSBzZXNzaW9uIGNvbnRleHQuXG4gICAqIFN1cHBvcnRzIGV4YWN0LCBub3JtYWxpemVkLCBhbmQgY29tbW9uIEVSUCBzeW5vbnltcy5cbiAgICovXG4gIG1hdGNoUGFyYW1ldGVyKHBhcmFtTmFtZTogc3RyaW5nKTogU2Vzc2lvblBhcmFtTWF0Y2ggfCBudWxsIHtcbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRDdXJyZW50U2Vzc2lvbkNvbnRleHQoKTtcbiAgICBjb25zdCBzZXNzaW9uS2V5cyA9IE9iamVjdC5rZXlzKHNlc3Npb24pO1xuICAgIGlmIChzZXNzaW9uS2V5cy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gICAgY29uc3Qgbm9ybWFsaXplZFBhcmFtID0gdGhpcy5ub3JtYWxpemVLZXkocGFyYW1OYW1lKTtcblxuICAgIC8vIDEuIEV4YWN0IG1hdGNoIG9uIHJhdyBuYW1lXG4gICAgaWYgKHBhcmFtTmFtZSBpbiBzZXNzaW9uKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc01hdGNoZWQ6IHRydWUsXG4gICAgICAgIHNlc3Npb25LZXk6IHBhcmFtTmFtZSxcbiAgICAgICAgdmFsdWU6IHNlc3Npb25bcGFyYW1OYW1lXSxcbiAgICAgICAgZnJpZW5kbHlMYWJlbDogaHVtYW5pemVJZGVudGlmaWVyKHBhcmFtTmFtZSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIDIuIERpcmVjdCBub3JtYWxpemVkIG1hdGNoXG4gICAgZm9yIChjb25zdCBrZXkgb2Ygc2Vzc2lvbktleXMpIHtcbiAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZUtleShrZXkpID09PSBub3JtYWxpemVkUGFyYW0pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc01hdGNoZWQ6IHRydWUsXG4gICAgICAgICAgc2Vzc2lvbktleToga2V5LFxuICAgICAgICAgIHZhbHVlOiBzZXNzaW9uW2tleV0sXG4gICAgICAgICAgZnJpZW5kbHlMYWJlbDogaHVtYW5pemVJZGVudGlmaWVyKGtleSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gQ29tbW9uIEVSUCBzeW5vbnltIGdyb3VwcyAoYmlkaXJlY3Rpb25hbCBtYXRjaGluZylcbiAgICBjb25zdCBzeW5vbnltR3JvdXBzOiBzdHJpbmdbXVtdID0gW1xuICAgICAgWydicmFuY2gnLCAnYnJhbmNoaWQnLCAnYmlkJywgJ2JyYW5jaGNvZGUnLCAnbG9jYXRpb25pZCcsICdsb2NhdGlvbiddLFxuICAgICAgWydjb21wYW55JywgJ2NvbXBhbnlpZCcsICdjaWQnLCAnY29tcGFueWNvZGUnLCAndGVuYW50JywgJ3RlbmFudGlkJ10sXG4gICAgICBbJ3VzZXInLCAndXNlcmlkJywgJ3VpZCcsICd1c2VyY29kZScsICdvcGVyYXRvcmlkJywgJ2xvZ2ludXNlciddLFxuICAgICAgWydmaW5hbmNpYWx5ZWFyJywgJ2ZpbmFuY2lhbHllYXJpZCcsICd5ZWFyaWQnLCAnZnllYXInLCAnZmlzY2FseWVhciddLFxuICAgICAgWydvcmcnLCAnb3JnaWQnLCAnb3JnYW5pemF0aW9uJywgJ29yZ2FuaXphdGlvbmlkJ10sXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgZ3JvdXAgb2Ygc3lub255bUdyb3Vwcykge1xuICAgICAgaWYgKGdyb3VwLmluY2x1ZGVzKG5vcm1hbGl6ZWRQYXJhbSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygc2Vzc2lvbktleXMpIHtcbiAgICAgICAgICBpZiAoZ3JvdXAuaW5jbHVkZXModGhpcy5ub3JtYWxpemVLZXkoa2V5KSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlzTWF0Y2hlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgc2Vzc2lvbktleToga2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogc2Vzc2lvbltrZXldLFxuICAgICAgICAgICAgICBmcmllbmRseUxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIoa2V5KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW5kIGRlcml2ZXMgYWxsIHN0b3JlZCBwcm9jZWR1cmUgcGFyYW1ldGVyczpcbiAgICogLSBQcmVzZXJ2ZXMgZXhwbGljaXQgb3ZlcnJpZGVzIChlLmcuIGZyb20gY2FudmFzIGZvcm0gY29udHJvbHMgb3IgbWFudWFsIGlucHV0cylcbiAgICogLSBBdXRvbWF0aWNhbGx5IGluamVjdHMgbWF0Y2hlZCBzZXNzaW9uIHBhcmFtZXRlcnNcbiAgICogLSBWYWxpZGF0ZXMgd2hldGhlciByZXF1aXJlZCBwYXJhbWV0ZXJzIGFyZSBmdWxmaWxsZWRcbiAgICovXG4gIGRlcml2ZVBhcmFtZXRlcnMoXG4gICAgc3BQYXJhbXM6IFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhW10sXG4gICAgZXhwbGljaXRNYXBwaW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fVxuICApOiBEZXJpdmVkUGFyYW1ldGVyc1Jlc3VsdCB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCk7XG4gICAgY29uc3QgZmluYWxQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgY29uc3QgYXV0b0Rlcml2ZWQ6IFJlY29yZDxzdHJpbmcsIFNlc3Npb25QYXJhbU1hdGNoPiA9IHt9O1xuICAgIGNvbnN0IHVucmVzb2x2ZWRSZXF1aXJlZDogUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGFbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiBzcFBhcmFtcykge1xuICAgICAgY29uc3QgcGFyYW1OYW1lID0gcGFyYW0ubmFtZTtcbiAgICAgIGNvbnN0IGV4cGxpY2l0VmFsID0gZXhwbGljaXRNYXBwaW5nc1twYXJhbU5hbWVdO1xuXG4gICAgICAvLyBDaGVjayBpZiB1c2VyIG9yIGNhbnZhcyBleHBsaWNpdGx5IHByb3ZpZGVkIGEgdmFsdWUgKGFuZCBub3QgYW4gZW1wdHkgcGxhY2Vob2xkZXIpXG4gICAgICBjb25zdCBoYXNFeHBsaWNpdCA9IGV4cGxpY2l0VmFsICE9PSB1bmRlZmluZWQgJiYgZXhwbGljaXRWYWwgIT09ICcnICYmIGV4cGxpY2l0VmFsICE9PSBudWxsO1xuXG4gICAgICBpZiAoaGFzRXhwbGljaXQpIHtcbiAgICAgICAgZmluYWxQYXJhbXNbcGFyYW1OYW1lXSA9IGV4cGxpY2l0VmFsO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHNlc3Npb24gY29udGV4dCBtYXRjaFxuICAgICAgY29uc3Qgc2Vzc2lvbk1hdGNoID0gdGhpcy5tYXRjaFBhcmFtZXRlcihwYXJhbU5hbWUpO1xuICAgICAgaWYgKHNlc3Npb25NYXRjaCAmJiBzZXNzaW9uTWF0Y2gudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uTWF0Y2gudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgZmluYWxQYXJhbXNbcGFyYW1OYW1lXSA9IHNlc3Npb25NYXRjaC52YWx1ZTtcbiAgICAgICAgYXV0b0Rlcml2ZWRbcGFyYW1OYW1lXSA9IHNlc3Npb25NYXRjaDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGRlZmF1bHQgdmFsdWUgaXMgcHJvdmlkZWQgaW4gU1AgbWV0YWRhdGFcbiAgICAgIGlmIChwYXJhbS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwYXJhbS5kZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgZmluYWxQYXJhbXNbcGFyYW1OYW1lXSA9IHBhcmFtLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHJlcXVpcmVkIGJ1dCBub3Qgc2F0aXNmaWVkXG4gICAgICBpZiAocGFyYW0ucmVxdWlyZWQpIHtcbiAgICAgICAgdW5yZXNvbHZlZFJlcXVpcmVkLnB1c2gocGFyYW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsc28gaW5jbHVkZSBhbnkgZXh0cmEgZXhwbGljaXQgbWFwcGluZ3MgdGhhdCBkaWRuJ3QgbWF0Y2ggcGFyYW1ldGVyIGxpc3RcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoZXhwbGljaXRNYXBwaW5ncykpIHtcbiAgICAgIGlmICghKGtleSBpbiBmaW5hbFBhcmFtcykgJiYgdmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBudWxsICYmIHZhbCAhPT0gJycpIHtcbiAgICAgICAgZmluYWxQYXJhbXNba2V5XSA9IHZhbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFyYW1ldGVyczogZmluYWxQYXJhbXMsXG4gICAgICBhdXRvRGVyaXZlZFBhcmFtczogYXV0b0Rlcml2ZWQsXG4gICAgICB1bnJlc29sdmVkUmVxdWlyZWRQYXJhbXM6IHVucmVzb2x2ZWRSZXF1aXJlZCxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { REPORTING_CONFIG, GRID_COMPONENT, CHART_COMPONENT, } from './reporting-config.token';
|
|
2
|
+
export { REPORT_SESSION_CONTEXT, REPORT_SESSION_PROVIDER, SessionContextProvider, } from './session-context.token';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL3Rva2Vucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxlQUFlLEdBQ2hCLE1BQU0sMEJBQTBCLENBQUM7QUFNbEMsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsc0JBQXNCLEdBQ3ZCLE1BQU0seUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xuICBSRVBPUlRJTkdfQ09ORklHLFxuICBHUklEX0NPTVBPTkVOVCxcbiAgQ0hBUlRfQ09NUE9ORU5ULFxufSBmcm9tICcuL3JlcG9ydGluZy1jb25maWcudG9rZW4nO1xuXG5leHBvcnQgdHlwZSB7XG4gIFJlcG9ydGluZ0NvbmZpZyxcbn0gZnJvbSAnLi9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcblxuZXhwb3J0IHtcbiAgUkVQT1JUX1NFU1NJT05fQ09OVEVYVCxcbiAgUkVQT1JUX1NFU1NJT05fUFJPVklERVIsXG4gIFNlc3Npb25Db250ZXh0UHJvdmlkZXIsXG59IGZyb20gJy4vc2Vzc2lvbi1jb250ZXh0LnRva2VuJztcblxuZXhwb3J0IHR5cGUge1xuICBTZXNzaW9uUGFyYW1QcmltaXRpdmUsXG4gIFNlc3Npb25Db250ZXh0TWFwLFxuICBTZXNzaW9uQ29udGV4dFByb3ZpZGVyRm4sXG4gIFNlc3Npb25Db250ZXh0U291cmNlLFxufSBmcm9tICcuL3Nlc3Npb24tY29udGV4dC50b2tlbic7XG4iXX0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reporting library configuration tokens.
|
|
3
|
+
*
|
|
4
|
+
* Core configuration models and injection tokens.
|
|
5
|
+
* Decoupled from UI primitives and data-access adapters.
|
|
6
|
+
*/
|
|
7
|
+
import { InjectionToken } from '@angular/core';
|
|
8
|
+
/**
|
|
9
|
+
* Injection token for the grid component.
|
|
10
|
+
*
|
|
11
|
+
* The host provides their grid component (BWays-grid, AG Grid wrapper, etc.)
|
|
12
|
+
* and the `ReportGridBridgeComponent` resolves it at runtime.
|
|
13
|
+
*/
|
|
14
|
+
export const GRID_COMPONENT = new InjectionToken('GRID_COMPONENT');
|
|
15
|
+
/**
|
|
16
|
+
* Injection token for the chart component.
|
|
17
|
+
*
|
|
18
|
+
* The host can provide their preferred chart component (Chart.js, Highcharts, ApexCharts wrapper, etc.)
|
|
19
|
+
* and the `ReportChartBridgeComponent` delegates rendering to it, or falls back to built-in SVG charts.
|
|
20
|
+
*/
|
|
21
|
+
export const CHART_COMPONENT = new InjectionToken('CHART_COMPONENT');
|
|
22
|
+
/**
|
|
23
|
+
* Injection token for the reporting library configuration.
|
|
24
|
+
*/
|
|
25
|
+
export const REPORTING_CONFIG = new InjectionToken('REPORTING_CONFIG');
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0aW5nLWNvbmZpZy50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2NvcmUvdG9rZW5zL3JlcG9ydGluZy1jb25maWcudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBeUJyRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBZ0IsZ0JBQWdCLENBQUMsQ0FBQztBQUVsRjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FBZ0IsaUJBQWlCLENBQUMsQ0FBQztBQUVwRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksY0FBYyxDQUFrQixrQkFBa0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBvcnRpbmcgbGlicmFyeSBjb25maWd1cmF0aW9uIHRva2Vucy5cbiAqXG4gKiBDb3JlIGNvbmZpZ3VyYXRpb24gbW9kZWxzIGFuZCBpbmplY3Rpb24gdG9rZW5zLlxuICogRGVjb3VwbGVkIGZyb20gVUkgcHJpbWl0aXZlcyBhbmQgZGF0YS1hY2Nlc3MgYWRhcHRlcnMuXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBMaWJyYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRpbmdDb25maWcge1xuICAvKiogRGVmYXVsdCBwYWdlIHNpemUgZm9yIGdyaWRzLiAqL1xuICBkZWZhdWx0UGFnZVNpemU6IG51bWJlcjtcblxuICAvKiogRGF0ZSBmb3JtYXQgc3RyaW5nIHVzZWQgYWNyb3NzIHRoZSBsaWJyYXJ5LiAqL1xuICBkYXRlRm9ybWF0OiBzdHJpbmc7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIERlc2lnbmVyIGZlYXR1cmUgaXMgZW5hYmxlZC4gKi9cbiAgZW5hYmxlRGVzaWduZXI6IGJvb2xlYW47XG5cbiAgLyoqIEN1cnJlbnQgc2NoZW1hIHZlcnNpb24gZm9yIG5ldyByZXBvcnRzLiAqL1xuICBzY2hlbWFWZXJzaW9uOiBudW1iZXI7XG5cbiAgLyoqIEJhc2UgVVJMIGZvciBiYWNrZW5kIHJlcG9ydGluZyBlbmRwb2ludHMgKE5lc3RKUyAvIC5ORVQgLyBSRVNUIEFQSSkuICovXG4gIGFwaUJhc2VVcmw/OiBzdHJpbmc7XG5cbiAgLyoqIFdoZXRoZXIgYXV0b21hdGljIGJhY2tlbmQgc2NoZW1hIGRpc2NvdmVyeSAoU1BzICYgVGFibGVzKSBpcyBlbmFibGVkLiAqL1xuICBlbmFibGVTY2hlbWFEaXNjb3Zlcnk/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiBmb3IgdGhlIGdyaWQgY29tcG9uZW50LlxuICpcbiAqIFRoZSBob3N0IHByb3ZpZGVzIHRoZWlyIGdyaWQgY29tcG9uZW50IChCV2F5cy1ncmlkLCBBRyBHcmlkIHdyYXBwZXIsIGV0Yy4pXG4gKiBhbmQgdGhlIGBSZXBvcnRHcmlkQnJpZGdlQ29tcG9uZW50YCByZXNvbHZlcyBpdCBhdCBydW50aW1lLlxuICovXG5leHBvcnQgY29uc3QgR1JJRF9DT01QT05FTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48VHlwZTx1bmtub3duPj4oJ0dSSURfQ09NUE9ORU5UJyk7XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIGZvciB0aGUgY2hhcnQgY29tcG9uZW50LlxuICpcbiAqIFRoZSBob3N0IGNhbiBwcm92aWRlIHRoZWlyIHByZWZlcnJlZCBjaGFydCBjb21wb25lbnQgKENoYXJ0LmpzLCBIaWdoY2hhcnRzLCBBcGV4Q2hhcnRzIHdyYXBwZXIsIGV0Yy4pXG4gKiBhbmQgdGhlIGBSZXBvcnRDaGFydEJyaWRnZUNvbXBvbmVudGAgZGVsZWdhdGVzIHJlbmRlcmluZyB0byBpdCwgb3IgZmFsbHMgYmFjayB0byBidWlsdC1pbiBTVkcgY2hhcnRzLlxuICovXG5leHBvcnQgY29uc3QgQ0hBUlRfQ09NUE9ORU5UID0gbmV3IEluamVjdGlvblRva2VuPFR5cGU8dW5rbm93bj4+KCdDSEFSVF9DT01QT05FTlQnKTtcblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gZm9yIHRoZSByZXBvcnRpbmcgbGlicmFyeSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgUkVQT1JUSU5HX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxSZXBvcnRpbmdDb25maWc+KCdSRVBPUlRJTkdfQ09ORklHJyk7XG4iXX0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
/**
|
|
3
|
+
* Injection token for host application session parameters.
|
|
4
|
+
* When configuring `provideReporting({ sessionContext: ... })`, the host app
|
|
5
|
+
* supplies their current session context (e.g. branchId, companyId, userId, tenantId).
|
|
6
|
+
*/
|
|
7
|
+
export const REPORT_SESSION_CONTEXT = new InjectionToken('REPORT_SESSION_CONTEXT');
|
|
8
|
+
/**
|
|
9
|
+
* Service contract for host applications providing runtime session parameters.
|
|
10
|
+
* A host service (e.g. AuthService, SessionService) can implement this interface/class.
|
|
11
|
+
*/
|
|
12
|
+
export class SessionContextProvider {
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Injection token for host application session provider service class.
|
|
16
|
+
*/
|
|
17
|
+
export const REPORT_SESSION_PROVIDER = new InjectionToken('REPORT_SESSION_PROVIDER');
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1jb250ZXh0LnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvY29yZS90b2tlbnMvc2Vzc2lvbi1jb250ZXh0LnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQVUsTUFBTSxlQUFlLENBQUM7QUErQnZEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBdUIsd0JBQXdCLENBQUMsQ0FBQztBQUV6Rzs7O0dBR0c7QUFDSCxNQUFNLE9BQWdCLHNCQUFzQjtDQU0zQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxjQUFjLENBQXlCLHlCQUF5QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogUHJpbWl0aXZlIHR5cGVzIGFsbG93YWJsZSBhcyBzZXNzaW9uIHBhcmFtZXRlciB2YWx1ZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFNlc3Npb25QYXJhbVByaW1pdGl2ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIE1hcCBvZiBzZXNzaW9uIHBhcmFtZXRlcnMgKGUuZy4geyBicmFuY2hJZDogMSwgY29tcGFueUlkOiAxMCwgdXNlcklkOiAndXNyLTEnIH0pLlxuICovXG5leHBvcnQgdHlwZSBTZXNzaW9uQ29udGV4dE1hcCA9IFJlY29yZDxzdHJpbmcsIFNlc3Npb25QYXJhbVByaW1pdGl2ZT47XG5cbi8qKlxuICogRmxleGlibGUgc2Vzc2lvbiBjb250ZXh0IHByb3ZpZGVyIHNvdXJjZTpcbiAqIC0gUGxhaW4gb2JqZWN0OiBgeyBicmFuY2hJZDogMSwgY29tcGFueUlkOiAxMCB9YFxuICogLSBEeW5hbWljIGdldHRlciBmdW5jdGlvbjogYCgpID0+IGF1dGhTZXJ2aWNlLmN1cnJlbnRVc2VyU2Vzc2lvbigpYFxuICogLSBBbmd1bGFyIFNpZ25hbDogYGF1dGhTZXJ2aWNlLnNlc3Npb25TaWduYWxgXG4gKiAtIFJ4SlMgT2JzZXJ2YWJsZTogYGF1dGhTZXJ2aWNlLnNlc3Npb24kYFxuICovXG5leHBvcnQgdHlwZSBTZXNzaW9uQ29udGV4dFByb3ZpZGVyRm4gPSAoKSA9PlxuICB8IFNlc3Npb25Db250ZXh0TWFwXG4gIHwgU2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPlxuICB8IE9ic2VydmFibGU8U2Vzc2lvbkNvbnRleHRNYXA+O1xuXG5leHBvcnQgdHlwZSBTZXNzaW9uQ29udGV4dFNvdXJjZSA9XG4gIHwgU2Vzc2lvbkNvbnRleHRNYXBcbiAgfCBTZXNzaW9uQ29udGV4dFByb3ZpZGVyRm5cbiAgfCBPYnNlcnZhYmxlPFNlc3Npb25Db250ZXh0TWFwPlxuICB8IFNpZ25hbDxTZXNzaW9uQ29udGV4dE1hcD47XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIGZvciBob3N0IGFwcGxpY2F0aW9uIHNlc3Npb24gcGFyYW1ldGVycy5cbiAqIFdoZW4gY29uZmlndXJpbmcgYHByb3ZpZGVSZXBvcnRpbmcoeyBzZXNzaW9uQ29udGV4dDogLi4uIH0pYCwgdGhlIGhvc3QgYXBwXG4gKiBzdXBwbGllcyB0aGVpciBjdXJyZW50IHNlc3Npb24gY29udGV4dCAoZS5nLiBicmFuY2hJZCwgY29tcGFueUlkLCB1c2VySWQsIHRlbmFudElkKS5cbiAqL1xuZXhwb3J0IGNvbnN0IFJFUE9SVF9TRVNTSU9OX0NPTlRFWFQgPSBuZXcgSW5qZWN0aW9uVG9rZW48U2Vzc2lvbkNvbnRleHRTb3VyY2U+KCdSRVBPUlRfU0VTU0lPTl9DT05URVhUJyk7XG5cbi8qKlxuICogU2VydmljZSBjb250cmFjdCBmb3IgaG9zdCBhcHBsaWNhdGlvbnMgcHJvdmlkaW5nIHJ1bnRpbWUgc2Vzc2lvbiBwYXJhbWV0ZXJzLlxuICogQSBob3N0IHNlcnZpY2UgKGUuZy4gQXV0aFNlcnZpY2UsIFNlc3Npb25TZXJ2aWNlKSBjYW4gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlL2NsYXNzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2Vzc2lvbkNvbnRleHRQcm92aWRlciB7XG4gIGFic3RyYWN0IGdldFNlc3Npb25Db250ZXh0KCk6XG4gICAgfCBTZXNzaW9uQ29udGV4dE1hcFxuICAgIHwgT2JzZXJ2YWJsZTxTZXNzaW9uQ29udGV4dE1hcD5cbiAgICB8IFNpZ25hbDxTZXNzaW9uQ29udGV4dE1hcD5cbiAgICB8IFByb21pc2U8U2Vzc2lvbkNvbnRleHRNYXA+O1xufVxuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiBmb3IgaG9zdCBhcHBsaWNhdGlvbiBzZXNzaW9uIHByb3ZpZGVyIHNlcnZpY2UgY2xhc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBSRVBPUlRfU0VTU0lPTl9QUk9WSURFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTZXNzaW9uQ29udGV4dFByb3ZpZGVyPignUkVQT1JUX1NFU1NJT05fUFJPVklERVInKTtcbiJdfQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a unique identifier with a given prefix.
|
|
3
|
+
*
|
|
4
|
+
* Safe for modern browser and Node environments.
|
|
5
|
+
*
|
|
6
|
+
* @param prefix - Prefix for the ID (default 'cmp').
|
|
7
|
+
* @returns Unique string ID (e.g. 'cmp-4a7b2c9d').
|
|
8
|
+
*/
|
|
9
|
+
export function generateId(prefix = 'cmp') {
|
|
10
|
+
if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
|
|
11
|
+
return `${prefix}-${crypto.randomUUID().slice(0, 8)}`;
|
|
12
|
+
}
|
|
13
|
+
// Fallback random generation
|
|
14
|
+
const random = Math.random().toString(36).substring(2, 10);
|
|
15
|
+
return `${prefix}-${random}`;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWQtZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvY29yZS91dGlsaXRpZXMvaWQtZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLE1BQU0sR0FBRyxLQUFLO0lBQ3ZDLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE9BQU8sTUFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUM3RSxPQUFPLEdBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVELDZCQUE2QjtJQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDM0QsT0FBTyxHQUFHLE1BQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZXMgYSB1bmlxdWUgaWRlbnRpZmllciB3aXRoIGEgZ2l2ZW4gcHJlZml4LlxuICpcbiAqIFNhZmUgZm9yIG1vZGVybiBicm93c2VyIGFuZCBOb2RlIGVudmlyb25tZW50cy5cbiAqXG4gKiBAcGFyYW0gcHJlZml4IC0gUHJlZml4IGZvciB0aGUgSUQgKGRlZmF1bHQgJ2NtcCcpLlxuICogQHJldHVybnMgVW5pcXVlIHN0cmluZyBJRCAoZS5nLiAnY21wLTRhN2IyYzlkJykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUlkKHByZWZpeCA9ICdjbXAnKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBjcnlwdG8ucmFuZG9tVVVJRCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBgJHtwcmVmaXh9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKS5zbGljZSgwLCA4KX1gO1xuICB9XG5cbiAgLy8gRmFsbGJhY2sgcmFuZG9tIGdlbmVyYXRpb25cbiAgY29uc3QgcmFuZG9tID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDEwKTtcbiAgcmV0dXJuIGAke3ByZWZpeH0tJHtyYW5kb219YDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { generateId } from './id-generator';
|
|
2
|
+
export { migrateDefinition } from './schema-migration';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL3V0aWxpdGllcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBnZW5lcmF0ZUlkIH0gZnJvbSAnLi9pZC1nZW5lcmF0b3InO1xuZXhwb3J0IHsgbWlncmF0ZURlZmluaXRpb24gfSBmcm9tICcuL3NjaGVtYS1taWdyYXRpb24nO1xuZXhwb3J0IHR5cGUgeyBNaWdyYXRpb25GbiB9IGZyb20gJy4vc2NoZW1hLW1pZ3JhdGlvbic7XG4iXX0=
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { SchemaVersionError } from '../errors/reporting-errors';
|
|
2
|
+
/**
|
|
3
|
+
* Migration registry mapping sourceVersion -> targetVersion migration function.
|
|
4
|
+
*/
|
|
5
|
+
const MIGRATIONS = {
|
|
6
|
+
// Example migration for v1 to v2 in future:
|
|
7
|
+
// 1: (def) => ({ ...def, schemaVersion: 2, ... }),
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Migrates a ReportDefinition to a target schema version.
|
|
11
|
+
*
|
|
12
|
+
* @param definition - Source report definition.
|
|
13
|
+
* @param targetVersion - Desired schema version (default current version = 1).
|
|
14
|
+
* @returns Migrated ReportDefinition.
|
|
15
|
+
*/
|
|
16
|
+
export function migrateDefinition(definition, targetVersion = 1) {
|
|
17
|
+
if (!definition) {
|
|
18
|
+
throw new SchemaVersionError(0, targetVersion, 'Invalid report definition provided');
|
|
19
|
+
}
|
|
20
|
+
const currentVersion = definition.schemaVersion ?? 1;
|
|
21
|
+
if (currentVersion === targetVersion) {
|
|
22
|
+
return { ...definition, schemaVersion: targetVersion };
|
|
23
|
+
}
|
|
24
|
+
if (currentVersion > targetVersion) {
|
|
25
|
+
throw new SchemaVersionError(currentVersion, targetVersion, `Cannot downgrade report schema from version ${currentVersion} to ${targetVersion}`);
|
|
26
|
+
}
|
|
27
|
+
let migrated = { ...definition };
|
|
28
|
+
for (let v = currentVersion; v < targetVersion; v++) {
|
|
29
|
+
const migrationFn = MIGRATIONS[v];
|
|
30
|
+
if (!migrationFn) {
|
|
31
|
+
throw new SchemaVersionError(v, v + 1, `No migration path defined from schema version ${v} to ${v + 1}`);
|
|
32
|
+
}
|
|
33
|
+
migrated = migrationFn(migrated);
|
|
34
|
+
}
|
|
35
|
+
migrated.schemaVersion = targetVersion;
|
|
36
|
+
return migrated;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLW1pZ3JhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2NvcmUvdXRpbGl0aWVzL3NjaGVtYS1taWdyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFJaEU7O0dBRUc7QUFDSCxNQUFNLFVBQVUsR0FBZ0M7QUFDOUMsNENBQTRDO0FBQzVDLG1EQUFtRDtDQUNwRCxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixVQUE0QixFQUM1QixhQUFhLEdBQUcsQ0FBQztJQUVqQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsTUFBTSxJQUFJLGtCQUFrQixDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsb0NBQW9DLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7SUFFckQsSUFBSSxjQUFjLEtBQUssYUFBYSxFQUFFLENBQUM7UUFDckMsT0FBTyxFQUFFLEdBQUcsVUFBVSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRUQsSUFBSSxjQUFjLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFDbkMsTUFBTSxJQUFJLGtCQUFrQixDQUMxQixjQUFjLEVBQ2QsYUFBYSxFQUNiLCtDQUErQyxjQUFjLE9BQU8sYUFBYSxFQUFFLENBQ3BGLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxRQUFRLEdBQUcsRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUFDO0lBQ2pDLEtBQUssSUFBSSxDQUFDLEdBQUcsY0FBYyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNwRCxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxrQkFBa0IsQ0FDMUIsQ0FBQyxFQUNELENBQUMsR0FBRyxDQUFDLEVBQ0wsaURBQWlELENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQ2pFLENBQUM7UUFDSixDQUFDO1FBQ0QsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsUUFBUSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDdkMsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcG9ydERlZmluaXRpb24gfSBmcm9tICcuLi9tb2RlbHMvcmVwb3J0LWRlZmluaXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgU2NoZW1hVmVyc2lvbkVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL3JlcG9ydGluZy1lcnJvcnMnO1xuXG5leHBvcnQgdHlwZSBNaWdyYXRpb25GbiA9IChkZWY6IFJlcG9ydERlZmluaXRpb24pID0+IFJlcG9ydERlZmluaXRpb247XG5cbi8qKlxuICogTWlncmF0aW9uIHJlZ2lzdHJ5IG1hcHBpbmcgc291cmNlVmVyc2lvbiAtPiB0YXJnZXRWZXJzaW9uIG1pZ3JhdGlvbiBmdW5jdGlvbi5cbiAqL1xuY29uc3QgTUlHUkFUSU9OUzogUmVjb3JkPG51bWJlciwgTWlncmF0aW9uRm4+ID0ge1xuICAvLyBFeGFtcGxlIG1pZ3JhdGlvbiBmb3IgdjEgdG8gdjIgaW4gZnV0dXJlOlxuICAvLyAxOiAoZGVmKSA9PiAoeyAuLi5kZWYsIHNjaGVtYVZlcnNpb246IDIsIC4uLiB9KSxcbn07XG5cbi8qKlxuICogTWlncmF0ZXMgYSBSZXBvcnREZWZpbml0aW9uIHRvIGEgdGFyZ2V0IHNjaGVtYSB2ZXJzaW9uLlxuICpcbiAqIEBwYXJhbSBkZWZpbml0aW9uIC0gU291cmNlIHJlcG9ydCBkZWZpbml0aW9uLlxuICogQHBhcmFtIHRhcmdldFZlcnNpb24gLSBEZXNpcmVkIHNjaGVtYSB2ZXJzaW9uIChkZWZhdWx0IGN1cnJlbnQgdmVyc2lvbiA9IDEpLlxuICogQHJldHVybnMgTWlncmF0ZWQgUmVwb3J0RGVmaW5pdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pZ3JhdGVEZWZpbml0aW9uKFxuICBkZWZpbml0aW9uOiBSZXBvcnREZWZpbml0aW9uLFxuICB0YXJnZXRWZXJzaW9uID0gMVxuKTogUmVwb3J0RGVmaW5pdGlvbiB7XG4gIGlmICghZGVmaW5pdGlvbikge1xuICAgIHRocm93IG5ldyBTY2hlbWFWZXJzaW9uRXJyb3IoMCwgdGFyZ2V0VmVyc2lvbiwgJ0ludmFsaWQgcmVwb3J0IGRlZmluaXRpb24gcHJvdmlkZWQnKTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRWZXJzaW9uID0gZGVmaW5pdGlvbi5zY2hlbWFWZXJzaW9uID8/IDE7XG5cbiAgaWYgKGN1cnJlbnRWZXJzaW9uID09PSB0YXJnZXRWZXJzaW9uKSB7XG4gICAgcmV0dXJuIHsgLi4uZGVmaW5pdGlvbiwgc2NoZW1hVmVyc2lvbjogdGFyZ2V0VmVyc2lvbiB9O1xuICB9XG5cbiAgaWYgKGN1cnJlbnRWZXJzaW9uID4gdGFyZ2V0VmVyc2lvbikge1xuICAgIHRocm93IG5ldyBTY2hlbWFWZXJzaW9uRXJyb3IoXG4gICAgICBjdXJyZW50VmVyc2lvbixcbiAgICAgIHRhcmdldFZlcnNpb24sXG4gICAgICBgQ2Fubm90IGRvd25ncmFkZSByZXBvcnQgc2NoZW1hIGZyb20gdmVyc2lvbiAke2N1cnJlbnRWZXJzaW9ufSB0byAke3RhcmdldFZlcnNpb259YFxuICAgICk7XG4gIH1cblxuICBsZXQgbWlncmF0ZWQgPSB7IC4uLmRlZmluaXRpb24gfTtcbiAgZm9yIChsZXQgdiA9IGN1cnJlbnRWZXJzaW9uOyB2IDwgdGFyZ2V0VmVyc2lvbjsgdisrKSB7XG4gICAgY29uc3QgbWlncmF0aW9uRm4gPSBNSUdSQVRJT05TW3ZdO1xuICAgIGlmICghbWlncmF0aW9uRm4pIHtcbiAgICAgIHRocm93IG5ldyBTY2hlbWFWZXJzaW9uRXJyb3IoXG4gICAgICAgIHYsXG4gICAgICAgIHYgKyAxLFxuICAgICAgICBgTm8gbWlncmF0aW9uIHBhdGggZGVmaW5lZCBmcm9tIHNjaGVtYSB2ZXJzaW9uICR7dn0gdG8gJHt2ICsgMX1gXG4gICAgICApO1xuICAgIH1cbiAgICBtaWdyYXRlZCA9IG1pZ3JhdGlvbkZuKG1pZ3JhdGVkKTtcbiAgfVxuXG4gIG1pZ3JhdGVkLnNjaGVtYVZlcnNpb24gPSB0YXJnZXRWZXJzaW9uO1xuICByZXR1cm4gbWlncmF0ZWQ7XG59XG4iXX0=
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strips technical SQL prefixes (usp_, sp_, tbl_, vw_, @), removes schema if present,
|
|
3
|
+
* and converts snake_case, PascalCase, or camelCase into clean, human-readable Title Case.
|
|
4
|
+
*
|
|
5
|
+
* Examples:
|
|
6
|
+
* - 'dbo.usp_GetCustomerList' -> 'Customer List'
|
|
7
|
+
* - 'usp_GetBranches' -> 'Branches'
|
|
8
|
+
* - '@BranchId' -> 'Branch'
|
|
9
|
+
* - '@ActiveOnly' -> 'Active Only'
|
|
10
|
+
* - 'tbl_Products' -> 'Products'
|
|
11
|
+
* - 'customer_name_en' -> 'Customer Name En'
|
|
12
|
+
*/
|
|
13
|
+
export function humanizeIdentifier(raw) {
|
|
14
|
+
if (!raw || typeof raw !== 'string')
|
|
15
|
+
return '';
|
|
16
|
+
// 1. Remove schema (e.g. 'dbo.')
|
|
17
|
+
let text = raw.includes('.') ? raw.split('.').pop() : raw;
|
|
18
|
+
// 2. Remove leading @, and prefixes like sp_, usp_, tbl_, vw_, get_ repeatedly
|
|
19
|
+
text = text.replace(/^@+/, '');
|
|
20
|
+
while (/^(usp_|sp_|tbl_|vw_|get_)/i.test(text)) {
|
|
21
|
+
text = text.replace(/^(usp_|sp_|tbl_|vw_|get_)/i, '');
|
|
22
|
+
}
|
|
23
|
+
// 3. If it starts with 'Get' followed by uppercase (e.g. 'GetCustomerList'), strip 'Get'
|
|
24
|
+
if (/^get[A-Z]/i.test(text)) {
|
|
25
|
+
text = text.slice(3);
|
|
26
|
+
}
|
|
27
|
+
// 4. Split snake_case and kebab-case
|
|
28
|
+
text = text.replace(/[_-]+/g, ' ');
|
|
29
|
+
// 5. Split PascalCase and camelCase (e.g. 'CustomerList' -> 'Customer List', 'BranchId' -> 'Branch Id')
|
|
30
|
+
text = text.replace(/([a-z0-9])([A-Z])/g, '$1 $2');
|
|
31
|
+
text = text.replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2');
|
|
32
|
+
// 6. Clean up trailing ' Id' if it's a parameter label (e.g. 'Branch Id' -> 'Branch')
|
|
33
|
+
// We keep it natural for parameters: 'Branch' is clearer than 'Branch Id' for non-technical users
|
|
34
|
+
if (text.endsWith(' Id') && text.length > 3) {
|
|
35
|
+
text = text.slice(0, -3);
|
|
36
|
+
}
|
|
37
|
+
// 7. Title-case each word
|
|
38
|
+
return text
|
|
39
|
+
.split(' ')
|
|
40
|
+
.filter(Boolean)
|
|
41
|
+
.map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())
|
|
42
|
+
.join(' ');
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Detects the most probable column to use as the value/key (e.g. ID, Code, Key, Guid).
|
|
46
|
+
*/
|
|
47
|
+
export function detectDefaultValueField(columns) {
|
|
48
|
+
if (!columns || columns.length === 0)
|
|
49
|
+
return undefined;
|
|
50
|
+
// 1. Check exact matches for 'id' or 'key' or 'code'
|
|
51
|
+
const exactMatch = columns.find((c) => ['id', 'key', 'code', 'guid', 'uuid'].includes(c.field.toLowerCase()));
|
|
52
|
+
if (exactMatch)
|
|
53
|
+
return exactMatch.field;
|
|
54
|
+
// 2. Check columns ending with 'id' or 'code' or 'key'
|
|
55
|
+
const suffixMatch = columns.find((c) => {
|
|
56
|
+
const f = c.field.toLowerCase();
|
|
57
|
+
return f.endsWith('_id') || f.endsWith('id') || f.endsWith('_code') || f.endsWith('code');
|
|
58
|
+
});
|
|
59
|
+
if (suffixMatch)
|
|
60
|
+
return suffixMatch.field;
|
|
61
|
+
// 3. Fallback to first column
|
|
62
|
+
return columns[0]?.field;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Detects the most probable column to use as the display text (e.g. Name, Title, Label, Description).
|
|
66
|
+
*/
|
|
67
|
+
export function detectDefaultDisplayField(columns) {
|
|
68
|
+
if (!columns || columns.length === 0)
|
|
69
|
+
return undefined;
|
|
70
|
+
// 1. Look for text fields containing 'name', 'title', 'label', 'desc'
|
|
71
|
+
const nameMatch = columns.find((c) => {
|
|
72
|
+
const f = c.field.toLowerCase();
|
|
73
|
+
return (f.includes('name') ||
|
|
74
|
+
f.includes('title') ||
|
|
75
|
+
f.includes('label') ||
|
|
76
|
+
f.includes('description') ||
|
|
77
|
+
f.includes('desc'));
|
|
78
|
+
});
|
|
79
|
+
if (nameMatch)
|
|
80
|
+
return nameMatch.field;
|
|
81
|
+
// 2. Look for any string dataType column
|
|
82
|
+
const stringMatch = columns.find((c) => c.dataType === 'string');
|
|
83
|
+
if (stringMatch)
|
|
84
|
+
return stringMatch.field;
|
|
85
|
+
// 3. Fallback to second column or first column
|
|
86
|
+
return columns.length > 1 ? columns[1].field : columns[0]?.field;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpZmllci1odW1hbml6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL3V0aWxzL2lkZW50aWZpZXItaHVtYW5pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEdBQVc7SUFDNUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFFL0MsaUNBQWlDO0lBQ2pDLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUUzRCwrRUFBK0U7SUFDL0UsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLE9BQU8sNEJBQTRCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDL0MsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsNEJBQTRCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELHlGQUF5RjtJQUN6RixJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM1QixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVuQyx3R0FBd0c7SUFDeEcsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsb0JB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QUFDLEtBQUssQ0FBQztJQUV0Qyx5Q0FBeUM7SUFDekMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQztJQUNqRSxJQUFJLFdBQVc7UUFBRSxPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUM7SUFFMUMsK0NBQStDO0lBQy9DLE9BQU8sT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7QUFDbkUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eUNvbHVtbk1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL3NjaGVtYS1kaXNjb3ZlcnkuY29udHJhY3QnO1xuXG4vKipcbiAqIFN0cmlwcyB0ZWNobmljYWwgU1FMIHByZWZpeGVzICh1c3BfLCBzcF8sIHRibF8sIHZ3XywgQCksIHJlbW92ZXMgc2NoZW1hIGlmIHByZXNlbnQsXG4gKiBhbmQgY29udmVydHMgc25ha2VfY2FzZSwgUGFzY2FsQ2FzZSwgb3IgY2FtZWxDYXNlIGludG8gY2xlYW4sIGh1bWFuLXJlYWRhYmxlIFRpdGxlIENhc2UuXG4gKlxuICogRXhhbXBsZXM6XG4gKiAtICdkYm8udXNwX0dldEN1c3RvbWVyTGlzdCcgLT4gJ0N1c3RvbWVyIExpc3QnXG4gKiAtICd1c3BfR2V0QnJhbmNoZXMnIC0+ICdCcmFuY2hlcydcbiAqIC0gJ0BCcmFuY2hJZCcgLT4gJ0JyYW5jaCdcbiAqIC0gJ0BBY3RpdmVPbmx5JyAtPiAnQWN0aXZlIE9ubHknXG4gKiAtICd0YmxfUHJvZHVjdHMnIC0+ICdQcm9kdWN0cydcbiAqIC0gJ2N1c3RvbWVyX25hbWVfZW4nIC0+ICdDdXN0b21lciBOYW1lIEVuJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gaHVtYW5pemVJZGVudGlmaWVyKHJhdzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gJ3N0cmluZycpIHJldHVybiAnJztcblxuICAvLyAxLiBSZW1vdmUgc2NoZW1hIChlLmcuICdkYm8uJylcbiAgbGV0IHRleHQgPSByYXcuaW5jbHVkZXMoJy4nKSA/IHJhdy5zcGxpdCgnLicpLnBvcCgpISA6IHJhdztcblxuICAvLyAyLiBSZW1vdmUgbGVhZGluZyBALCBhbmQgcHJlZml4ZXMgbGlrZSBzcF8sIHVzcF8sIHRibF8sIHZ3XywgZ2V0XyByZXBlYXRlZGx5XG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL15AKy8sICcnKTtcbiAgd2hpbGUgKC9eKHVzcF98c3BffHRibF98dndffGdldF8pL2kudGVzdCh0ZXh0KSkge1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL14odXNwX3xzcF98dGJsX3x2d198Z2V0XykvaSwgJycpO1xuICB9XG5cbiAgLy8gMy4gSWYgaXQgc3RhcnRzIHdpdGggJ0dldCcgZm9sbG93ZWQgYnkgdXBwZXJjYXNlIChlLmcuICdHZXRDdXN0b21lckxpc3QnKSwgc3RyaXAgJ0dldCdcbiAgaWYgKC9eZ2V0W0EtWl0vaS50ZXN0KHRleHQpKSB7XG4gICAgdGV4dCA9IHRleHQuc2xpY2UoMyk7XG4gIH1cblxuICAvLyA0LiBTcGxpdCBzbmFrZV9jYXNlIGFuZCBrZWJhYi1jYXNlXG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1tfLV0rL2csICcgJyk7XG5cbiAgLy8gNS4gU3BsaXQgUGFzY2FsQ2FzZSBhbmQgY2FtZWxDYXNlIChlLmcuICdDdXN0b21lckxpc3QnIC0+ICdDdXN0b21lciBMaXN0JywgJ0JyYW5jaElkJyAtPiAnQnJhbmNoIElkJylcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywgJyQxICQyJyk7XG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyhbQS1aXSspKFtBLVpdW2Etel0pL2csICckMSAkMicpO1xuXG4gIC8vIDYuIENsZWFuIHVwIHRyYWlsaW5nICcgSWQnIGlmIGl0J3MgYSBwYXJhbWV0ZXIgbGFiZWwgKGUuZy4gJ0JyYW5jaCBJZCcgLT4gJ0JyYW5jaCcpXG4gIC8vIFdlIGtlZXAgaXQgbmF0dXJhbCBmb3IgcGFyYW1ldGVyczogJ0JyYW5jaCcgaXMgY2xlYXJlciB0aGFuICdCcmFuY2ggSWQnIGZvciBub24tdGVjaG5pY2FsIHVzZXJzXG4gIGlmICh0ZXh0LmVuZHNXaXRoKCcgSWQnKSAmJiB0ZXh0Lmxlbmd0aCA+IDMpIHtcbiAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCAtMyk7XG4gIH1cblxuICAvLyA3LiBUaXRsZS1jYXNlIGVhY2ggd29yZFxuICByZXR1cm4gdGV4dFxuICAgIC5zcGxpdCgnICcpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5tYXAoKHcpID0+IHcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3LnNsaWNlKDEpLnRvTG93ZXJDYXNlKCkpXG4gICAgLmpvaW4oJyAnKTtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIHRoZSBtb3N0IHByb2JhYmxlIGNvbHVtbiB0byB1c2UgYXMgdGhlIHZhbHVlL2tleSAoZS5nLiBJRCwgQ29kZSwgS2V5LCBHdWlkKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdERlZmF1bHRWYWx1ZUZpZWxkKGNvbHVtbnM6IEVudGl0eUNvbHVtbk1ldGFkYXRhW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWNvbHVtbnMgfHwgY29sdW1ucy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgLy8gMS4gQ2hlY2sgZXhhY3QgbWF0Y2hlcyBmb3IgJ2lkJyBvciAna2V5JyBvciAnY29kZSdcbiAgY29uc3QgZXhhY3RNYXRjaCA9IGNvbHVtbnMuZmluZCgoYykgPT5cbiAgICBbJ2lkJywgJ2tleScsICdjb2RlJywgJ2d1aWQnLCAndXVpZCddLmluY2x1ZGVzKGMuZmllbGQudG9Mb3dlckNhc2UoKSlcbiAgKTtcbiAgaWYgKGV4YWN0TWF0Y2gpIHJldHVybiBleGFjdE1hdGNoLmZpZWxkO1xuXG4gIC8vIDIuIENoZWNrIGNvbHVtbnMgZW5kaW5nIHdpdGggJ2lkJyBvciAnY29kZScgb3IgJ2tleSdcbiAgY29uc3Qgc3VmZml4TWF0Y2ggPSBjb2x1bW5zLmZpbmQoKGMpID0+IHtcbiAgICBjb25zdCBmID0gYy5maWVsZC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBmLmVuZHNXaXRoKCdfaWQnKSB8fCBmLmVuZHNXaXRoKCdpZCcpIHx8IGYuZW5kc1dpdGgoJ19jb2RlJykgfHwgZi5lbmRzV2l0aCgnY29kZScpO1xuICB9KTtcbiAgaWYgKHN1ZmZpeE1hdGNoKSByZXR1cm4gc3VmZml4TWF0Y2guZmllbGQ7XG5cbiAgLy8gMy4gRmFsbGJhY2sgdG8gZmlyc3QgY29sdW1uXG4gIHJldHVybiBjb2x1bW5zWzBdPy5maWVsZDtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIHRoZSBtb3N0IHByb2JhYmxlIGNvbHVtbiB0byB1c2UgYXMgdGhlIGRpc3BsYXkgdGV4dCAoZS5nLiBOYW1lLCBUaXRsZSwgTGFiZWwsIERlc2NyaXB0aW9uKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdERlZmF1bHREaXNwbGF5RmllbGQoY29sdW1uczogRW50aXR5Q29sdW1uTWV0YWRhdGFbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghY29sdW1ucyB8fCBjb2x1bW5zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAvLyAxLiBMb29rIGZvciB0ZXh0IGZpZWxkcyBjb250YWluaW5nICduYW1lJywgJ3RpdGxlJywgJ2xhYmVsJywgJ2Rlc2MnXG4gIGNvbnN0IG5hbWVNYXRjaCA9IGNvbHVtbnMuZmluZCgoYykgPT4ge1xuICAgIGNvbnN0IGYgPSBjLmZpZWxkLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIGYuaW5jbHVkZXMoJ25hbWUnKSB8fFxuICAgICAgZi5pbmNsdWRlcygndGl0bGUnKSB8fFxuICAgICAgZi5pbmNsdWRlcygnbGFiZWwnKSB8fFxuICAgICAgZi5pbmNsdWRlcygnZGVzY3JpcHRpb24nKSB8fFxuICAgICAgZi5pbmNsdWRlcygnZGVzYycpXG4gICAgKTtcbiAgfSk7XG4gIGlmIChuYW1lTWF0Y2gpIHJldHVybiBuYW1lTWF0Y2guZmllbGQ7XG5cbiAgLy8gMi4gTG9vayBmb3IgYW55IHN0cmluZyBkYXRhVHlwZSBjb2x1bW5cbiAgY29uc3Qgc3RyaW5nTWF0Y2ggPSBjb2x1bW5zLmZpbmQoKGMpID0+IGMuZGF0YVR5cGUgPT09ICdzdHJpbmcnKTtcbiAgaWYgKHN0cmluZ01hdGNoKSByZXR1cm4gc3RyaW5nTWF0Y2guZmllbGQ7XG5cbiAgLy8gMy4gRmFsbGJhY2sgdG8gc2Vjb25kIGNvbHVtbiBvciBmaXJzdCBjb2x1bW5cbiAgcmV0dXJuIGNvbHVtbnMubGVuZ3RoID4gMSA/IGNvbHVtbnNbMV0uZmllbGQgOiBjb2x1bW5zWzBdPy5maWVsZDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { createValidators, getValidationMessage } from './validation-factory';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL3ZhbGlkYXRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBjcmVhdGVWYWxpZGF0b3JzLCBnZXRWYWxpZGF0aW9uTWVzc2FnZSB9IGZyb20gJy4vdmFsaWRhdGlvbi1mYWN0b3J5JztcbiJdfQ==
|