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.
Files changed (185) hide show
  1. package/LICENSE +26 -0
  2. package/README.md +477 -0
  3. package/esm2022/bways-report.mjs +5 -0
  4. package/esm2022/lib/core/errors/index.mjs +2 -0
  5. package/esm2022/lib/core/errors/reporting-errors.mjs +65 -0
  6. package/esm2022/lib/core/index.mjs +8 -0
  7. package/esm2022/lib/core/models/component-event.model.mjs +8 -0
  8. package/esm2022/lib/core/models/index.mjs +5 -0
  9. package/esm2022/lib/core/models/report-component.model.mjs +10 -0
  10. package/esm2022/lib/core/models/report-datasource.model.mjs +9 -0
  11. package/esm2022/lib/core/models/report-definition.model.mjs +13 -0
  12. package/esm2022/lib/core/models/report-grid.model.mjs +10 -0
  13. package/esm2022/lib/core/models/report-layout.model.mjs +9 -0
  14. package/esm2022/lib/core/models/report-parameter.model.mjs +9 -0
  15. package/esm2022/lib/core/models/validation.model.mjs +8 -0
  16. package/esm2022/lib/core/registry/component-category.mjs +8 -0
  17. package/esm2022/lib/core/registry/component-registry.mjs +90 -0
  18. package/esm2022/lib/core/registry/index.mjs +2 -0
  19. package/esm2022/lib/core/registry/property-definition.model.mjs +10 -0
  20. package/esm2022/lib/core/services/dynamic-form-builder.service.mjs +55 -0
  21. package/esm2022/lib/core/services/index.mjs +3 -0
  22. package/esm2022/lib/core/services/report-session-context.service.mjs +314 -0
  23. package/esm2022/lib/core/tokens/index.mjs +3 -0
  24. package/esm2022/lib/core/tokens/reporting-config.token.mjs +26 -0
  25. package/esm2022/lib/core/tokens/session-context.token.mjs +18 -0
  26. package/esm2022/lib/core/utilities/id-generator.mjs +17 -0
  27. package/esm2022/lib/core/utilities/index.mjs +3 -0
  28. package/esm2022/lib/core/utilities/schema-migration.mjs +38 -0
  29. package/esm2022/lib/core/utils/identifier-humanizer.mjs +88 -0
  30. package/esm2022/lib/core/validation/index.mjs +2 -0
  31. package/esm2022/lib/core/validation/validation-factory.mjs +70 -0
  32. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +107 -0
  33. package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +119 -0
  34. package/esm2022/lib/data-access/adapters/index.mjs +3 -0
  35. package/esm2022/lib/data-access/contracts/data-source.contract.mjs +28 -0
  36. package/esm2022/lib/data-access/contracts/index.mjs +7 -0
  37. package/esm2022/lib/data-access/contracts/lookup.contract.mjs +6 -0
  38. package/esm2022/lib/data-access/contracts/master-data.provider.mjs +24 -0
  39. package/esm2022/lib/data-access/contracts/report-persistence.contract.mjs +25 -0
  40. package/esm2022/lib/data-access/contracts/schema-discovery.contract.mjs +7 -0
  41. package/esm2022/lib/data-access/contracts/translation.contract.mjs +9 -0
  42. package/esm2022/lib/data-access/index.mjs +3 -0
  43. package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +542 -0
  44. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +843 -0
  45. package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +556 -0
  46. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +845 -0
  47. package/esm2022/lib/features/designer/components/property-editor/property-editor-general.component.mjs +185 -0
  48. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +452 -0
  49. package/esm2022/lib/features/designer/components/property-editor/property-editor-layout.component.mjs +350 -0
  50. package/esm2022/lib/features/designer/components/property-editor/property-editor-report.component.mjs +175 -0
  51. package/esm2022/lib/features/designer/components/property-editor/property-editor-validation.component.mjs +137 -0
  52. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +608 -0
  53. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +225 -0
  54. package/esm2022/lib/features/designer/designer.component.mjs +285 -0
  55. package/esm2022/lib/features/designer/index.mjs +7 -0
  56. package/esm2022/lib/features/designer/services/designer-state.service.mjs +310 -0
  57. package/esm2022/lib/features/designer/services/index.mjs +2 -0
  58. package/esm2022/lib/features/designer/utilities/canvas-layout.util.mjs +124 -0
  59. package/esm2022/lib/features/export/index.mjs +2 -0
  60. package/esm2022/lib/features/export/models/export.models.mjs +2 -0
  61. package/esm2022/lib/features/export/services/report-export.service.mjs +107 -0
  62. package/esm2022/lib/features/index.mjs +6 -0
  63. package/esm2022/lib/features/persistence/index.mjs +2 -0
  64. package/esm2022/lib/features/persistence/services/index.mjs +4 -0
  65. package/esm2022/lib/features/persistence/services/report-store.service.mjs +183 -0
  66. package/esm2022/lib/features/persistence/services/report-versioning.service.mjs +81 -0
  67. package/esm2022/lib/features/persistence/services/schema-validator.service.mjs +102 -0
  68. package/esm2022/lib/features/routing/components/routed-report-designer.component.mjs +156 -0
  69. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +163 -0
  70. package/esm2022/lib/features/routing/index.mjs +6 -0
  71. package/esm2022/lib/features/routing/models/report-route.models.mjs +2 -0
  72. package/esm2022/lib/features/routing/report-routes.mjs +49 -0
  73. package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +22 -0
  74. package/esm2022/lib/features/routing/services/report-menu.service.mjs +77 -0
  75. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +222 -0
  76. package/esm2022/lib/features/runtime/index.mjs +4 -0
  77. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +409 -0
  78. package/esm2022/lib/features/runtime/report-runtime.component.mjs +147 -0
  79. package/esm2022/lib/primitives/components/button/rpt-button.component.mjs +88 -0
  80. package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +361 -0
  81. package/esm2022/lib/primitives/components/checkbox/rpt-checkbox.component.mjs +86 -0
  82. package/esm2022/lib/primitives/components/date/rpt-date.component.mjs +91 -0
  83. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +204 -0
  84. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +476 -0
  85. package/esm2022/lib/primitives/components/index.mjs +10 -0
  86. package/esm2022/lib/primitives/components/input/rpt-input.component.mjs +88 -0
  87. package/esm2022/lib/primitives/components/kpi-card/rpt-kpi-card.component.mjs +197 -0
  88. package/esm2022/lib/primitives/components/number/rpt-number.component.mjs +110 -0
  89. package/esm2022/lib/primitives/index.mjs +3 -0
  90. package/esm2022/lib/primitives/register-builtins.mjs +328 -0
  91. package/esm2022/lib/provide-reporting.mjs +92 -0
  92. package/esm2022/public-api.mjs +9 -0
  93. package/fesm2022/bways-report.mjs +10360 -0
  94. package/fesm2022/bways-report.mjs.map +1 -0
  95. package/index.d.ts +5 -0
  96. package/lib/core/errors/index.d.ts +1 -0
  97. package/lib/core/errors/reporting-errors.d.ts +42 -0
  98. package/lib/core/index.d.ts +7 -0
  99. package/lib/core/models/component-event.model.d.ts +37 -0
  100. package/lib/core/models/index.d.ts +11 -0
  101. package/lib/core/models/report-component.model.d.ts +95 -0
  102. package/lib/core/models/report-datasource.model.d.ts +39 -0
  103. package/lib/core/models/report-definition.model.d.ts +100 -0
  104. package/lib/core/models/report-grid.model.d.ts +73 -0
  105. package/lib/core/models/report-layout.model.d.ts +43 -0
  106. package/lib/core/models/report-parameter.model.d.ts +22 -0
  107. package/lib/core/models/validation.model.d.ts +30 -0
  108. package/lib/core/registry/component-category.d.ts +16 -0
  109. package/lib/core/registry/component-registry.d.ts +101 -0
  110. package/lib/core/registry/index.d.ts +4 -0
  111. package/lib/core/registry/property-definition.model.d.ts +38 -0
  112. package/lib/core/services/dynamic-form-builder.service.d.ts +30 -0
  113. package/lib/core/services/index.d.ts +3 -0
  114. package/lib/core/services/report-session-context.service.d.ts +87 -0
  115. package/lib/core/tokens/index.d.ts +4 -0
  116. package/lib/core/tokens/reporting-config.token.d.ts +42 -0
  117. package/lib/core/tokens/session-context.token.d.ts +36 -0
  118. package/lib/core/utilities/id-generator.d.ts +9 -0
  119. package/lib/core/utilities/index.d.ts +3 -0
  120. package/lib/core/utilities/schema-migration.d.ts +10 -0
  121. package/lib/core/utils/identifier-humanizer.d.ts +22 -0
  122. package/lib/core/validation/index.d.ts +1 -0
  123. package/lib/core/validation/validation-factory.d.ts +31 -0
  124. package/lib/data-access/adapters/http-lookup.adapter.d.ts +19 -0
  125. package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +20 -0
  126. package/lib/data-access/adapters/index.d.ts +2 -0
  127. package/lib/data-access/contracts/data-source.contract.d.ts +37 -0
  128. package/lib/data-access/contracts/index.d.ts +9 -0
  129. package/lib/data-access/contracts/lookup.contract.d.ts +32 -0
  130. package/lib/data-access/contracts/master-data.provider.d.ts +54 -0
  131. package/lib/data-access/contracts/report-persistence.contract.d.ts +36 -0
  132. package/lib/data-access/contracts/schema-discovery.contract.d.ts +52 -0
  133. package/lib/data-access/contracts/translation.contract.d.ts +16 -0
  134. package/lib/data-access/index.d.ts +2 -0
  135. package/lib/features/designer/components/component-palette/component-palette.component.d.ts +39 -0
  136. package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +42 -0
  137. package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +36 -0
  138. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +68 -0
  139. package/lib/features/designer/components/property-editor/property-editor-general.component.d.ts +20 -0
  140. package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +20 -0
  141. package/lib/features/designer/components/property-editor/property-editor-layout.component.d.ts +18 -0
  142. package/lib/features/designer/components/property-editor/property-editor-report.component.d.ts +15 -0
  143. package/lib/features/designer/components/property-editor/property-editor-validation.component.d.ts +12 -0
  144. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +44 -0
  145. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +18 -0
  146. package/lib/features/designer/designer.component.d.ts +36 -0
  147. package/lib/features/designer/index.d.ts +7 -0
  148. package/lib/features/designer/services/designer-state.service.d.ts +103 -0
  149. package/lib/features/designer/services/index.d.ts +2 -0
  150. package/lib/features/designer/utilities/canvas-layout.util.d.ts +55 -0
  151. package/lib/features/export/index.d.ts +2 -0
  152. package/lib/features/export/models/export.models.d.ts +16 -0
  153. package/lib/features/export/services/report-export.service.d.ts +27 -0
  154. package/lib/features/index.d.ts +5 -0
  155. package/lib/features/persistence/index.d.ts +1 -0
  156. package/lib/features/persistence/services/index.d.ts +5 -0
  157. package/lib/features/persistence/services/report-store.service.d.ts +53 -0
  158. package/lib/features/persistence/services/report-versioning.service.d.ts +29 -0
  159. package/lib/features/persistence/services/schema-validator.service.d.ts +34 -0
  160. package/lib/features/routing/components/routed-report-designer.component.d.ts +18 -0
  161. package/lib/features/routing/components/routed-report-runtime.component.d.ts +18 -0
  162. package/lib/features/routing/index.d.ts +6 -0
  163. package/lib/features/routing/models/report-route.models.d.ts +41 -0
  164. package/lib/features/routing/report-routes.d.ts +16 -0
  165. package/lib/features/routing/resolvers/report.resolver.d.ts +7 -0
  166. package/lib/features/routing/services/report-menu.service.d.ts +30 -0
  167. package/lib/features/runtime/dynamic-renderer.component.d.ts +30 -0
  168. package/lib/features/runtime/index.d.ts +3 -0
  169. package/lib/features/runtime/report-grid-bridge.component.d.ts +94 -0
  170. package/lib/features/runtime/report-runtime.component.d.ts +26 -0
  171. package/lib/primitives/components/button/rpt-button.component.d.ts +19 -0
  172. package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +45 -0
  173. package/lib/primitives/components/checkbox/rpt-checkbox.component.d.ts +14 -0
  174. package/lib/primitives/components/date/rpt-date.component.d.ts +17 -0
  175. package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +32 -0
  176. package/lib/primitives/components/icon/rpt-icon.component.d.ts +41 -0
  177. package/lib/primitives/components/index.d.ts +12 -0
  178. package/lib/primitives/components/input/rpt-input.component.d.ts +16 -0
  179. package/lib/primitives/components/kpi-card/rpt-kpi-card.component.d.ts +43 -0
  180. package/lib/primitives/components/number/rpt-number.component.d.ts +20 -0
  181. package/lib/primitives/index.d.ts +2 -0
  182. package/lib/primitives/register-builtins.d.ts +11 -0
  183. package/lib/provide-reporting.d.ts +75 -0
  184. package/package.json +55 -0
  185. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUVWLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix1QkFBdUIsR0FLeEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFrQm5FOzs7Ozs7R0FNRztBQUlILE1BQU0sT0FBTywyQkFBMkI7SUFDckIsU0FBUyxHQUFHLE1BQU0sQ0FBOEIsc0JBQXNCLEVBQUU7UUFDdkYsUUFBUSxFQUFFLElBQUk7S0FDZixDQUFDLENBQUM7SUFDYyxlQUFlLEdBQUcsTUFBTSxDQUFnQyx1QkFBdUIsRUFBRTtRQUNoRyxRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FBQztJQUVILHdHQUF3RztJQUN2RixvQkFBb0IsR0FBRyxNQUFNLENBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELHFCQUFxQixHQUFHLE1BQU0sQ0FBb0IsRUFBRSxDQUFDLENBQUM7SUFDdEQsdUJBQXVCLEdBQUcsTUFBTSxDQUFvQixFQUFFLENBQUMsQ0FBQztJQUVqRSxhQUFhLENBQWdCO0lBQzdCLFdBQVcsQ0FBZ0I7SUFFbkM7Ozs7T0FJRztJQUNNLGNBQWMsR0FBOEIsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNqRSxJQUFJLFdBQVcsR0FBc0IsRUFBRSxDQUFDO1FBQ3hDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQztnQkFDSCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3JELElBQUksT0FBTyxHQUFHLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQzlCLE1BQU0sR0FBRyxHQUFJLEdBQStCLEVBQUUsQ0FBQztvQkFDL0MsSUFBSSxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQ25DLFdBQVcsR0FBRyxHQUFHLENBQUM7b0JBQ3BCLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM3QixXQUFXLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQy9DLENBQUM7cUJBQU0sSUFBSSxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDOUQsV0FBVyxHQUFHLEdBQXdCLENBQUM7Z0JBQ3pDLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixPQUFPLENBQUMsSUFBSSxDQUFDLHFFQUFxRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzNGLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxRQUFRLEdBQXNCLEVBQUUsQ0FBQztRQUNyQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUM7Z0JBQ0gsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7b0JBQ2pDLFFBQVEsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDMUMsQ0FBQztxQkFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDaEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUM3QixJQUFJLE9BQU8sR0FBRyxLQUFLLFVBQVUsRUFBRSxDQUFDO3dCQUM5QixNQUFNLFFBQVEsR0FBSSxHQUFxQixFQUFFLENBQUM7d0JBQzFDLFFBQVEsR0FBRyxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBRSxRQUE4QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzdGLENBQUM7eUJBQU0sSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDN0IsUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO29CQUMxQyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sUUFBUSxHQUFHLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFFLEdBQXlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDOUUsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO29CQUN6RSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDNUIsQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDMUYsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUU5QyxPQUFPO1lBQ0wsR0FBRyxXQUFXO1lBQ2QsR0FBRyxRQUFRO1lBQ1gsR0FBRyxTQUFTO1NBQ2IsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUg7O09BRUc7SUFDTSxlQUFlLEdBQWtDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFNUY7UUFDRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztnQkFDNUMsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ1osSUFBSSxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQ25DLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQzdDLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDYixPQUFPLENBQUMsSUFBSSxDQUFDLHNFQUFzRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUM1RixDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQztnQkFDSCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3JELElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQzt3QkFDL0IsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7NEJBQ1osSUFBSSxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7Z0NBQ25DLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7NEJBQy9DLENBQUM7d0JBQ0gsQ0FBQzt3QkFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTs0QkFDYixPQUFPLENBQUMsSUFBSSxDQUFDLHVFQUF1RSxFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUM3RixDQUFDO3FCQUNGLENBQUMsQ0FBQztnQkFDTCxDQUFDO3FCQUFNLElBQ0wsR0FBRztvQkFDSCxPQUFPLEdBQUcsS0FBSyxRQUFRO29CQUN2QixNQUFNLElBQUksR0FBRztvQkFDYixPQUFRLEdBQXdCLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFDcEQsQ0FBQztvQkFDQSxHQUFrQzt5QkFDaEMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQ1osSUFBSSxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7NEJBQ25DLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7d0JBQy9DLENBQUM7b0JBQ0gsQ0FBQyxDQUFDO3lCQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQzFGLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixPQUFPLENBQUMsSUFBSSxDQUFDLG9FQUFvRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzFGLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLE9BQTBCO1FBQzFDLElBQUksT0FBTyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUIsQ0FBQyxHQUFXLEVBQUUsS0FBNEI7UUFDM0QsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBQ2pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0MsR0FBRyxPQUFPO1lBQ1YsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLO1NBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsd0JBQXdCO1FBQ3RCLElBQUksQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQy9CLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyxtRUFBbUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN2RixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFlBQVksQ0FBQyxHQUFXO1FBQ3RCLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQy9DLE9BQU8sR0FBRzthQUNQLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO2FBQ2xCLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2FBQ3hCLFdBQVcsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsU0FBaUI7UUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRTFDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFckQsNkJBQTZCO1FBQzdCLElBQUksU0FBUyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLE9BQU87Z0JBQ0wsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLEtBQUssRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO2dCQUN6QixhQUFhLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxDQUFDO2FBQzdDLENBQUM7UUFDSixDQUFDO1FBRUQsNkJBQTZCO1FBQzdCLEtBQUssTUFBTSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7WUFDOUIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLGVBQWUsRUFBRSxDQUFDO2dCQUMvQyxPQUFPO29CQUNMLFNBQVMsRUFBRSxJQUFJO29CQUNmLFVBQVUsRUFBRSxHQUFHO29CQUNmLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDO29CQUNuQixhQUFhLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDO2lCQUN2QyxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCx3REFBd0Q7UUFDeEQsTUFBTSxhQUFhLEdBQWU7WUFDaEMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQztZQUNyRSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDO1lBQ3BFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUM7WUFDaEUsQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUM7WUFDckUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQztTQUNuRCxDQUFDO1FBRUYsS0FBSyxNQUFNLEtBQUssSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUMzQyxPQUFPOzRCQUNMLFNBQVMsRUFBRSxJQUFJOzRCQUNmLFVBQVUsRUFBRSxHQUFHOzRCQUNmLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDOzRCQUNuQixhQUFhLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDO3lCQUN2QyxDQUFDO29CQUNKLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxnQkFBZ0IsQ0FDZCxRQUFzQyxFQUN0QyxtQkFBNEMsRUFBRTtRQUU5QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNoRCxNQUFNLFdBQVcsR0FBNEIsRUFBRSxDQUFDO1FBQ2hELE1BQU0sV0FBVyxHQUFzQyxFQUFFLENBQUM7UUFDMUQsTUFBTSxrQkFBa0IsR0FBaUMsRUFBRSxDQUFDO1FBRTVELEtBQUssTUFBTSxLQUFLLElBQUksUUFBUSxFQUFFLENBQUM7WUFDN0IsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztZQUM3QixNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVoRCxxRkFBcUY7WUFDckYsTUFBTSxXQUFXLEdBQUcsV0FBVyxLQUFLLFNBQVMsSUFBSSxXQUFXLEtBQUssRUFBRSxJQUFJLFdBQVcsS0FBSyxJQUFJLENBQUM7WUFFNUYsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztnQkFDckMsU0FBUztZQUNYLENBQUM7WUFFRCxrQ0FBa0M7WUFDbEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwRCxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxZQUFZLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNwRixXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztnQkFDNUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFlBQVksQ0FBQztnQkFDdEMsU0FBUztZQUNYLENBQUM7WUFFRCw4Q0FBOEM7WUFDOUMsSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNwRSxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztnQkFDNUMsU0FBUztZQUNYLENBQUM7WUFFRCxnQ0FBZ0M7WUFDaEMsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ25CLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQztRQUVELDRFQUE0RTtRQUM1RSxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQzdFLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPO1lBQ0wsVUFBVSxFQUFFLFdBQVc7WUFDdkIsaUJBQWlCLEVBQUUsV0FBVztZQUM5Qix3QkFBd0IsRUFBRSxrQkFBa0I7U0FDN0MsQ0FBQztJQUNKLENBQUM7d0dBeFRVLDJCQUEyQjs0R0FBM0IsMkJBQTJCLGNBRjFCLE1BQU07OzRGQUVQLDJCQUEyQjtrQkFIdkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBJbmplY3RhYmxlLFxuICBPbkRlc3Ryb3ksXG4gIHNpZ25hbCxcbiAgU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBSRVBPUlRfU0VTU0lPTl9DT05URVhULFxuICBSRVBPUlRfU0VTU0lPTl9QUk9WSURFUixcbiAgU2Vzc2lvbkNvbnRleHRNYXAsXG4gIFNlc3Npb25Db250ZXh0UHJvdmlkZXIsXG4gIFNlc3Npb25Db250ZXh0U291cmNlLFxuICBTZXNzaW9uUGFyYW1QcmltaXRpdmUsXG59IGZyb20gJy4uL3Rva2Vucy9zZXNzaW9uLWNvbnRleHQudG9rZW4nO1xuaW1wb3J0IHsgUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvc2NoZW1hLWRpc2NvdmVyeS5jb250cmFjdCc7XG5pbXBvcnQgeyBodW1hbml6ZUlkZW50aWZpZXIgfSBmcm9tICcuLi91dGlscy9pZGVudGlmaWVyLWh1bWFuaXplcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvblBhcmFtTWF0Y2gge1xuICBpc01hdGNoZWQ6IGJvb2xlYW47XG4gIHNlc3Npb25LZXk6IHN0cmluZztcbiAgdmFsdWU6IFNlc3Npb25QYXJhbVByaW1pdGl2ZTtcbiAgZnJpZW5kbHlMYWJlbDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlcml2ZWRQYXJhbWV0ZXJzUmVzdWx0IHtcbiAgLyoqIFRoZSBjb25zb2xpZGF0ZWQgcGFyYW1ldGVyIHBheWxvYWQgZm9yIHN0b3JlZCBwcm9jZWR1cmUgZXhlY3V0aW9uICovXG4gIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+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==