@blazes/data-visualization 0.0.0-stage → 1.0.0-alpha.1

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 (170) hide show
  1. package/README.md +238 -2
  2. package/dist/.vite/manifest.json +129 -0
  3. package/dist/PivotTableS2Renderer-C-Urwhuv.js +109 -0
  4. package/dist/PivotTableS2Renderer-C-Urwhuv.js.map +1 -0
  5. package/dist/WordCloudRenderer-7tzJz57a.js +96 -0
  6. package/dist/WordCloudRenderer-7tzJz57a.js.map +1 -0
  7. package/dist/core/adapter/index.d.ts +5 -0
  8. package/dist/core/adapter/index.d.ts.map +1 -0
  9. package/dist/core/adapter/standard-adapters.d.ts +211 -0
  10. package/dist/core/adapter/standard-adapters.d.ts.map +1 -0
  11. package/dist/core/adapter/standard-definitions.d.ts +230 -0
  12. package/dist/core/adapter/standard-definitions.d.ts.map +1 -0
  13. package/dist/core/adapter/types.d.ts +44 -0
  14. package/dist/core/adapter/types.d.ts.map +1 -0
  15. package/dist/core/adapter/view-models.d.ts +101 -0
  16. package/dist/core/adapter/view-models.d.ts.map +1 -0
  17. package/dist/core/config/config-validator.d.ts +27 -0
  18. package/dist/core/config/config-validator.d.ts.map +1 -0
  19. package/dist/core/config/dashboard-config-schema.d.ts +1360 -0
  20. package/dist/core/config/dashboard-config-schema.d.ts.map +1 -0
  21. package/dist/core/config/dashboard-config.d.ts +410 -0
  22. package/dist/core/config/dashboard-config.d.ts.map +1 -0
  23. package/dist/core/config/index.d.ts +9 -0
  24. package/dist/core/config/index.d.ts.map +1 -0
  25. package/dist/core/config/json-value.d.ts +5 -0
  26. package/dist/core/config/json-value.d.ts.map +1 -0
  27. package/dist/core/config/runtime-schema.d.ts +28 -0
  28. package/dist/core/config/runtime-schema.d.ts.map +1 -0
  29. package/dist/core/config/schema-version.d.ts +3 -0
  30. package/dist/core/config/schema-version.d.ts.map +1 -0
  31. package/dist/core/config/serializable.d.ts +6 -0
  32. package/dist/core/config/serializable.d.ts.map +1 -0
  33. package/dist/core/config/value-path.d.ts +2 -0
  34. package/dist/core/config/value-path.d.ts.map +1 -0
  35. package/dist/core/dataset/dataset-runner.d.ts +28 -0
  36. package/dist/core/dataset/dataset-runner.d.ts.map +1 -0
  37. package/dist/core/dataset/index.d.ts +4 -0
  38. package/dist/core/dataset/index.d.ts.map +1 -0
  39. package/dist/core/dataset/normalize.d.ts +8 -0
  40. package/dist/core/dataset/normalize.d.ts.map +1 -0
  41. package/dist/core/dataset/types.d.ts +37 -0
  42. package/dist/core/dataset/types.d.ts.map +1 -0
  43. package/dist/core/export/csv.d.ts +11 -0
  44. package/dist/core/export/csv.d.ts.map +1 -0
  45. package/dist/core/export/index.d.ts +2 -0
  46. package/dist/core/export/index.d.ts.map +1 -0
  47. package/dist/core/formatter/index.d.ts +2 -0
  48. package/dist/core/formatter/index.d.ts.map +1 -0
  49. package/dist/core/formatter/value-formatter.d.ts +14 -0
  50. package/dist/core/formatter/value-formatter.d.ts.map +1 -0
  51. package/dist/core/index.d.ts +11 -0
  52. package/dist/core/index.d.ts.map +1 -0
  53. package/dist/core/index.js +111 -0
  54. package/dist/core/index.js.map +1 -0
  55. package/dist/core/provider/data-provider.d.ts +18 -0
  56. package/dist/core/provider/data-provider.d.ts.map +1 -0
  57. package/dist/core/provider/index.d.ts +5 -0
  58. package/dist/core/provider/index.d.ts.map +1 -0
  59. package/dist/core/provider/request-executor.d.ts +48 -0
  60. package/dist/core/provider/request-executor.d.ts.map +1 -0
  61. package/dist/core/provider/request-value-codec.d.ts +15 -0
  62. package/dist/core/provider/request-value-codec.d.ts.map +1 -0
  63. package/dist/core/provider/resolve-request-input.d.ts +12 -0
  64. package/dist/core/provider/resolve-request-input.d.ts.map +1 -0
  65. package/dist/core/registry/core-registries.d.ts +15 -0
  66. package/dist/core/registry/core-registries.d.ts.map +1 -0
  67. package/dist/core/registry/index.d.ts +4 -0
  68. package/dist/core/registry/index.d.ts.map +1 -0
  69. package/dist/core/registry/plugin-registry.d.ts +28 -0
  70. package/dist/core/registry/plugin-registry.d.ts.map +1 -0
  71. package/dist/core/registry/register-standard.d.ts +4 -0
  72. package/dist/core/registry/register-standard.d.ts.map +1 -0
  73. package/dist/core/runtime/dashboard-data-runtime.d.ts +26 -0
  74. package/dist/core/runtime/dashboard-data-runtime.d.ts.map +1 -0
  75. package/dist/core/runtime/dashboard-runtime.d.ts +458 -0
  76. package/dist/core/runtime/dashboard-runtime.d.ts.map +1 -0
  77. package/dist/core/runtime/dependency-graph.d.ts +11 -0
  78. package/dist/core/runtime/dependency-graph.d.ts.map +1 -0
  79. package/dist/core/runtime/index.d.ts +5 -0
  80. package/dist/core/runtime/index.d.ts.map +1 -0
  81. package/dist/core/runtime/types.d.ts +47 -0
  82. package/dist/core/runtime/types.d.ts.map +1 -0
  83. package/dist/core/telemetry/index.d.ts +2 -0
  84. package/dist/core/telemetry/index.d.ts.map +1 -0
  85. package/dist/core/telemetry/telemetry.d.ts +15 -0
  86. package/dist/core/telemetry/telemetry.d.ts.map +1 -0
  87. package/dist/core/variable/dashboard-context.d.ts +22 -0
  88. package/dist/core/variable/dashboard-context.d.ts.map +1 -0
  89. package/dist/core/variable/index.d.ts +3 -0
  90. package/dist/core/variable/index.d.ts.map +1 -0
  91. package/dist/core/variable/url-state.d.ts +17 -0
  92. package/dist/core/variable/url-state.d.ts.map +1 -0
  93. package/dist/csv-Dyrr2yMA.js +254 -0
  94. package/dist/csv-Dyrr2yMA.js.map +1 -0
  95. package/dist/dashboard-runtime-8a-9P8Ku.js +1540 -0
  96. package/dist/dashboard-runtime-8a-9P8Ku.js.map +1 -0
  97. package/dist/experimental/s2/PivotTableS2Renderer.vue.d.ts +18 -0
  98. package/dist/experimental/s2/PivotTableS2Renderer.vue.d.ts.map +1 -0
  99. package/dist/experimental/s2/index.d.ts +13 -0
  100. package/dist/experimental/s2/index.d.ts.map +1 -0
  101. package/dist/experimental/s2/index.js +66 -0
  102. package/dist/experimental/s2/index.js.map +1 -0
  103. package/dist/experimental/s2/pivot-table-s2.d.ts +23 -0
  104. package/dist/experimental/s2/pivot-table-s2.d.ts.map +1 -0
  105. package/dist/index.css +1 -0
  106. package/dist/index.d.ts +2 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/index.js +111 -0
  109. package/dist/index.js.map +1 -0
  110. package/dist/renderers/word-cloud/WordCloudRenderer.vue.d.ts +20 -0
  111. package/dist/renderers/word-cloud/WordCloudRenderer.vue.d.ts.map +1 -0
  112. package/dist/renderers/word-cloud/index.d.ts +8 -0
  113. package/dist/renderers/word-cloud/index.d.ts.map +1 -0
  114. package/dist/renderers/word-cloud/index.js +17 -0
  115. package/dist/renderers/word-cloud/index.js.map +1 -0
  116. package/dist/runtime-schema-BO2qLlvE.js +580 -0
  117. package/dist/runtime-schema-BO2qLlvE.js.map +1 -0
  118. package/dist/serializable-DOOpLZyk.js +36 -0
  119. package/dist/serializable-DOOpLZyk.js.map +1 -0
  120. package/dist/standard-definitions-DHtaLAf1.js +351 -0
  121. package/dist/standard-definitions-DHtaLAf1.js.map +1 -0
  122. package/dist/value-formatter-D5QmLSMG.js +47 -0
  123. package/dist/value-formatter-D5QmLSMG.js.map +1 -0
  124. package/dist/visual-theme-DH-k3L51.js +23 -0
  125. package/dist/visual-theme-DH-k3L51.js.map +1 -0
  126. package/dist/vue/components/DashboardFilterBar.vue.d.ts +23 -0
  127. package/dist/vue/components/DashboardFilterBar.vue.d.ts.map +1 -0
  128. package/dist/vue/components/DashboardPanel.vue.d.ts +39 -0
  129. package/dist/vue/components/DashboardPanel.vue.d.ts.map +1 -0
  130. package/dist/vue/components/DashboardRenderer.vue.d.ts +57 -0
  131. package/dist/vue/components/DashboardRenderer.vue.d.ts.map +1 -0
  132. package/dist/vue/components/index.d.ts +4 -0
  133. package/dist/vue/components/index.d.ts.map +1 -0
  134. package/dist/vue/composables/index.d.ts +2 -0
  135. package/dist/vue/composables/index.d.ts.map +1 -0
  136. package/dist/vue/composables/use-dashboard-runtime.d.ts +17 -0
  137. package/dist/vue/composables/use-dashboard-runtime.d.ts.map +1 -0
  138. package/dist/vue/export/browser-download.d.ts +3 -0
  139. package/dist/vue/export/browser-download.d.ts.map +1 -0
  140. package/dist/vue/export/index.d.ts +2 -0
  141. package/dist/vue/export/index.d.ts.map +1 -0
  142. package/dist/vue/index.d.ts +7 -0
  143. package/dist/vue/index.d.ts.map +1 -0
  144. package/dist/vue/index.js +1075 -0
  145. package/dist/vue/index.js.map +1 -0
  146. package/dist/vue/registry/index.d.ts +3 -0
  147. package/dist/vue/registry/index.d.ts.map +1 -0
  148. package/dist/vue/registry/register-standard.d.ts +3 -0
  149. package/dist/vue/registry/register-standard.d.ts.map +1 -0
  150. package/dist/vue/registry/renderer-registry.d.ts +12 -0
  151. package/dist/vue/registry/renderer-registry.d.ts.map +1 -0
  152. package/dist/vue/renderers/BarRenderer.vue.d.ts +24 -0
  153. package/dist/vue/renderers/BarRenderer.vue.d.ts.map +1 -0
  154. package/dist/vue/renderers/LineRenderer.vue.d.ts +24 -0
  155. package/dist/vue/renderers/LineRenderer.vue.d.ts.map +1 -0
  156. package/dist/vue/renderers/MetricRenderer.vue.d.ts +17 -0
  157. package/dist/vue/renderers/MetricRenderer.vue.d.ts.map +1 -0
  158. package/dist/vue/renderers/PieRenderer.vue.d.ts +24 -0
  159. package/dist/vue/renderers/PieRenderer.vue.d.ts.map +1 -0
  160. package/dist/vue/renderers/TableRenderer.vue.d.ts +21 -0
  161. package/dist/vue/renderers/TableRenderer.vue.d.ts.map +1 -0
  162. package/dist/vue/renderers/chart-format.d.ts +8 -0
  163. package/dist/vue/renderers/chart-format.d.ts.map +1 -0
  164. package/dist/vue/renderers/index.d.ts +7 -0
  165. package/dist/vue/renderers/index.d.ts.map +1 -0
  166. package/dist/vue/theme/index.d.ts +2 -0
  167. package/dist/vue/theme/index.d.ts.map +1 -0
  168. package/dist/vue/theme/visual-theme.d.ts +46 -0
  169. package/dist/vue/theme/visual-theme.d.ts.map +1 -0
  170. package/package.json +129 -4
@@ -0,0 +1,14 @@
1
+ import type { ValueFormat } from "../config";
2
+ export interface FormatterContext {
3
+ locale: string;
4
+ timezone: string;
5
+ }
6
+ export type ExportValue = string | number | boolean;
7
+ export declare class ValueFormatter {
8
+ formatDisplay(value: unknown, format: ValueFormat, context: FormatterContext): string;
9
+ formatTooltip(value: unknown, format: ValueFormat, context: FormatterContext): string;
10
+ formatAxis(value: unknown, format: ValueFormat, context: FormatterContext): string;
11
+ formatExport(value: unknown, format: ValueFormat): ExportValue;
12
+ }
13
+ export declare const valueFormatter: ValueFormatter;
14
+ //# sourceMappingURL=value-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value-formatter.d.ts","sourceRoot":"","sources":["../../../src/core/formatter/value-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AA8CpD,qBAAa,cAAc;IACzB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM;IAarF,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM;IAIrF,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM;IAIlF,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,WAAW;CAO/D;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
@@ -0,0 +1,11 @@
1
+ export * from "./adapter";
2
+ export * from "./config";
3
+ export * from "./dataset";
4
+ export * from "./export";
5
+ export * from "./formatter";
6
+ export * from "./provider";
7
+ export * from "./registry";
8
+ export * from "./runtime";
9
+ export * from "./telemetry";
10
+ export * from "./variable";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,111 @@
1
+ import { B as s, D as n, a as r, b as t, c as i, d as o, P as c, R as m, e as h, f as l, g as d, h as S, i as D, j as u, k as b, l as R, m as E, n as C, o as g, p as f, q as V, r as p, s as P, t as A, u as B, v as T, w as I } from "../dashboard-runtime-8a-9P8Ku.js";
2
+ import { B as v, a as z, b as q, C as F, D as w, c as y, d as _, e as N, f as J, g as L, h as M, i as j, j as O, I as W, J as H, L as U, k, l as G, M as K, m as Q, n as X, P as Y, o as Z, p as $, q as aa, r as ea, s as sa, t as na, u as ra, R as ta, v as ia, T as oa, w as ca, x as ma, y as ha, z as la, V as da, A as Sa, W as Da, E as ua, F as ba, G as Ra, H as Ea } from "../runtime-schema-BO2qLlvE.js";
3
+ import { D as ga, P as fa, R as Va, b as pa, c as Pa, a as Aa, e as Ba, g as Ta, r as Ia, d as xa, s as va, w as za } from "../csv-Dyrr2yMA.js";
4
+ import { S as Fa, a as wa, b as ya, c as _a, l as Na, d as Ja, m as La, e as Ma, p as ja, f as Oa, t as Wa, g as Ha, w as Ua, h as ka } from "../standard-definitions-DHtaLAf1.js";
5
+ import { V as Ka, v as Qa } from "../value-formatter-D5QmLSMG.js";
6
+ import { c as Ya, i as Za, j as $a, s as ae } from "../serializable-DOOpLZyk.js";
7
+ export {
8
+ s as BUILT_IN_REQUEST_VALUE_CODECS,
9
+ v as BarBindingSchema,
10
+ z as BarEnhancementSchema,
11
+ q as BarVisualizationEnhancementSchema,
12
+ F as CommonEnhancementSchema,
13
+ w as DASHBOARD_SCHEMA_VERSION,
14
+ y as DashboardConfigSchema,
15
+ n as DashboardConfigValidationError,
16
+ r as DashboardDataRuntime,
17
+ _ as DashboardFilterBarConfigSchema,
18
+ N as DashboardFilterControlConfigSchema,
19
+ t as DashboardRuntime,
20
+ J as DashboardVariableConfigSchema,
21
+ ga as DashboardVariableError,
22
+ L as DataRequestConfigSchema,
23
+ M as DatasetConfigSchema,
24
+ i as DatasetExecutionError,
25
+ j as DatasetFieldConfigSchema,
26
+ O as DatasetInputSchema,
27
+ o as DatasetRunner,
28
+ W as IdentifierSchema,
29
+ H as JsonValueSchema,
30
+ U as LineBindingSchema,
31
+ k as LineEnhancementSchema,
32
+ G as LineVisualizationEnhancementSchema,
33
+ K as MetricBindingSchema,
34
+ Q as MetricEnhancementSchema,
35
+ X as MetricVisualizationEnhancementSchema,
36
+ Y as PanelBindingSchema,
37
+ Z as PanelConfigSchema,
38
+ $ as PieBindingSchema,
39
+ aa as PieEnhancementSchema,
40
+ ea as PieVisualizationEnhancementSchema,
41
+ sa as PivotTableS2BindingSchema,
42
+ na as PivotTableS2EnhancementSchema,
43
+ ra as PivotTableS2VisualizationEnhancementSchema,
44
+ fa as PluginRegistry,
45
+ c as ProviderInputValidationError,
46
+ Va as RegistryError,
47
+ m as RequestExecutor,
48
+ h as RequestInputError,
49
+ ta as RequestValueBindingSchema,
50
+ l as RequestValueCodecError,
51
+ ia as RuntimeSchemaValidationError,
52
+ Fa as STANDARD_ADAPTERS,
53
+ wa as STANDARD_RENDERER_DEFINITIONS,
54
+ oa as TableBindingSchema,
55
+ ca as TableCellDisplaySchema,
56
+ ma as TableCellToneSchema,
57
+ ha as TableEnhancementSchema,
58
+ la as TableVisualizationEnhancementSchema,
59
+ da as ValueFormatSchema,
60
+ Ka as ValueFormatter,
61
+ Sa as VisualizationEnhancementSchema,
62
+ Da as WordCloudBindingSchema,
63
+ ua as WordCloudEnhancementSchema,
64
+ ba as WordCloudVisualizationEnhancementSchema,
65
+ d as assertDashboardConfig,
66
+ ya as barAdapter,
67
+ _a as barRendererDefinition,
68
+ pa as buildDashboardSearch,
69
+ Ya as cloneJsonValue,
70
+ S as collectDownstreamDatasetIds,
71
+ D as collectDownstreamPanelIds,
72
+ u as createCoreRegistries,
73
+ Pa as createDashboardContext,
74
+ b as createDashboardDataRuntime,
75
+ R as createDashboardDependencyGraph,
76
+ E as createDashboardRuntime,
77
+ Ra as createJsonSchemaRuntimeSchema,
78
+ Aa as createPanelCsvFilename,
79
+ C as createRequestCacheKey,
80
+ g as createRequestValueCodecRegistry,
81
+ f as createStandardCoreRegistries,
82
+ Ea as createTypeBoxRuntimeSchema,
83
+ V as dashboardConfigRuntimeSchema,
84
+ Ba as emitTelemetry,
85
+ Ta as getPanelExportFields,
86
+ Za as isJsonValue,
87
+ $a as jsonValuesEqual,
88
+ Na as lineAdapter,
89
+ Ja as lineRendererDefinition,
90
+ La as metricAdapter,
91
+ Ma as metricRendererDefinition,
92
+ p as normalizeDatasetRows,
93
+ P as parseDashboardConfig,
94
+ ja as pieAdapter,
95
+ Oa as pieRendererDefinition,
96
+ Ia as readDashboardVariable,
97
+ A as readValueAtPath,
98
+ B as registerStandardCore,
99
+ T as resolveDataRequestInput,
100
+ xa as restoreDashboardContextFromSearch,
101
+ va as serializePanelCsv,
102
+ ae as stableSerializeJson,
103
+ Wa as tableAdapter,
104
+ Ha as tableRendererDefinition,
105
+ I as validateDashboardConfig,
106
+ Qa as valueFormatter,
107
+ Ua as wordCloudAdapter,
108
+ ka as wordCloudRendererDefinition,
109
+ za as writeDashboardVariable
110
+ };
111
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,18 @@
1
+ import type { RuntimeSchema } from "../config";
2
+ import type { VisualizationTelemetryEvent } from "../telemetry";
3
+ export interface ProviderExecuteContext {
4
+ signal: AbortSignal;
5
+ requestId: string;
6
+ timezone: string;
7
+ locale: string;
8
+ emit(event: VisualizationTelemetryEvent): void;
9
+ }
10
+ export interface DataProviderOperation {
11
+ inputSchema?: RuntimeSchema<Record<string, unknown>>;
12
+ execute(input: Readonly<Record<string, unknown>>, context: ProviderExecuteContext): Promise<unknown>;
13
+ }
14
+ export interface DataProvider {
15
+ id: string;
16
+ operations: Readonly<Record<string, DataProviderOperation>>;
17
+ }
18
+ //# sourceMappingURL=data-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-provider.d.ts","sourceRoot":"","sources":["../../../src/core/provider/data-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAEhE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,KAAK,EAAE,2BAA2B,GAAG,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtG;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;CAC7D"}
@@ -0,0 +1,5 @@
1
+ export * from "./data-provider";
2
+ export * from "./request-executor";
3
+ export * from "./request-value-codec";
4
+ export * from "./resolve-request-input";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/provider/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { type DashboardConfig, type DataRequestConfig, type JsonValue, type RuntimeSchemaIssue } from "../config";
2
+ import type { ReadonlyRegistry } from "../registry";
3
+ import { type VisualizationTelemetrySink } from "../telemetry";
4
+ import type { DashboardContext } from "../variable";
5
+ import type { DataProvider } from "./data-provider";
6
+ import type { RequestValueCodec } from "./request-value-codec";
7
+ interface RequestCacheEntry {
8
+ response: unknown;
9
+ version: number;
10
+ updatedAt: string;
11
+ }
12
+ export interface RequestExecutionResult extends RequestCacheEntry {
13
+ requestConfigId: string;
14
+ executionId: string;
15
+ cacheKey: string;
16
+ input: Readonly<Record<string, JsonValue>>;
17
+ fromCache: boolean;
18
+ }
19
+ export interface ExecuteRequestOptions {
20
+ signal?: AbortSignal;
21
+ force?: boolean;
22
+ isolated?: boolean;
23
+ }
24
+ export interface RequestExecutorOptions {
25
+ telemetry?: VisualizationTelemetrySink;
26
+ }
27
+ export declare class ProviderInputValidationError extends Error {
28
+ readonly code = "provider_input_invalid";
29
+ readonly providerId: string;
30
+ readonly operationId: string;
31
+ readonly issues: ReadonlyArray<RuntimeSchemaIssue>;
32
+ constructor(providerId: string, operationId: string, issues: ReadonlyArray<RuntimeSchemaIssue>);
33
+ }
34
+ export declare function createRequestCacheKey(request: Pick<DataRequestConfig, "providerId" | "operationId">, input: Readonly<Record<string, JsonValue>>): string;
35
+ export declare class RequestExecutor {
36
+ #private;
37
+ readonly config: DashboardConfig;
38
+ readonly providers: ReadonlyRegistry<DataProvider>;
39
+ readonly codecs: ReadonlyRegistry<RequestValueCodec>;
40
+ readonly options: RequestExecutorOptions;
41
+ constructor(config: DashboardConfig, providers: ReadonlyRegistry<DataProvider>, codecs: ReadonlyRegistry<RequestValueCodec>, options?: RequestExecutorOptions);
42
+ execute(requestConfigId: string, context: DashboardContext, options?: ExecuteRequestOptions): Promise<RequestExecutionResult>;
43
+ invalidateRequest(requestConfigId: string): void;
44
+ clear(): void;
45
+ private trackCacheKey;
46
+ }
47
+ export {};
48
+ //# sourceMappingURL=request-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-executor.d.ts","sourceRoot":"","sources":["../../../src/core/provider/request-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,kBAAkB,EACxB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAiB,KAAK,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,UAAU,iBAAiB;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAOD,MAAM,WAAW,sBAAuB,SAAQ,iBAAiB;IAC/D,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAC3C,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,0BAA0B,CAAC;CACxC;AAED,qBAAa,4BAA6B,SAAQ,KAAK;IACrD,QAAQ,CAAC,IAAI,4BAA4B;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;gBAEvC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,kBAAkB,CAAC;CAO/F;AAUD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,aAAa,CAAC,EAC9D,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GACzC,MAAM,CAER;AAED,qBAAa,eAAe;;IASxB,QAAQ,CAAC,MAAM,EAAE,eAAe;IAChC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC,YAAY,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,iBAAiB,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,sBAAsB;gBAH/B,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,gBAAgB,CAAC,YAAY,CAAC,EACzC,MAAM,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,EAC3C,OAAO,GAAE,sBAA2B;IAGzC,OAAO,CACX,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,gBAAgB,EACzB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,sBAAsB,CAAC;IAgIlC,iBAAiB,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI;IAShD,KAAK,IAAI,IAAI;IASb,OAAO,CAAC,aAAa;CAKtB"}
@@ -0,0 +1,15 @@
1
+ import { type JsonValue } from "../config";
2
+ import { PluginRegistry } from "../registry";
3
+ import type { DashboardContext } from "../variable";
4
+ export interface RequestValueCodec {
5
+ id: string;
6
+ encode(value: JsonValue, context: DashboardContext): JsonValue | undefined;
7
+ }
8
+ export declare class RequestValueCodecError extends Error {
9
+ readonly code = "request_value_codec_failed";
10
+ readonly codecId: string;
11
+ constructor(codecId: string, message: string);
12
+ }
13
+ export declare const BUILT_IN_REQUEST_VALUE_CODECS: ReadonlyArray<RequestValueCodec>;
14
+ export declare function createRequestValueCodecRegistry(): PluginRegistry<RequestValueCodec>;
15
+ //# sourceMappingURL=request-value-codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-value-codec.d.ts","sourceRoot":"","sources":["../../../src/core/provider/request-value-codec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC;CAC5E;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,IAAI,gCAAgC;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEb,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK7C;AAqBD,eAAO,MAAM,6BAA6B,EAAE,aAAa,CAAC,iBAAiB,CA0EzE,CAAC;AAEH,wBAAgB,+BAA+B,IAAI,cAAc,CAAC,iBAAiB,CAAC,CAEnF"}
@@ -0,0 +1,12 @@
1
+ import { type DashboardConfig, type DataRequestConfig, type JsonValue } from "../config";
2
+ import type { ReadonlyRegistry } from "../registry";
3
+ import { type DashboardContext } from "../variable";
4
+ import type { RequestValueCodec } from "./request-value-codec";
5
+ export declare class RequestInputError extends Error {
6
+ readonly code: "request_input_missing" | "request_input_not_serializable";
7
+ readonly requestId: string;
8
+ readonly inputName: string;
9
+ constructor(code: RequestInputError["code"], requestId: string, inputName: string, message: string);
10
+ }
11
+ export declare function resolveDataRequestInput(request: DataRequestConfig, config: DashboardConfig, context: DashboardContext, codecs: ReadonlyRegistry<RequestValueCodec>): Readonly<Record<string, JsonValue>>;
12
+ //# sourceMappingURL=resolve-request-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-request-input.d.ts","sourceRoot":"","sources":["../../../src/core/provider/resolve-request-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EAGpB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACf,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAyB,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAE,uBAAuB,GAAG,gCAAgC,CAAC;IAC1E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAOnG;AAMD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,GAC1C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CA+CrC"}
@@ -0,0 +1,15 @@
1
+ import type { VisualizationAction, VisualizationAdapter, VisualizationPreset, VisualizationRendererDefinition } from "../adapter";
2
+ import type { DatasetTransformer } from "../dataset";
3
+ import type { DataProvider, RequestValueCodec } from "../provider";
4
+ import { PluginRegistry } from "./plugin-registry";
5
+ export interface CoreRegistries {
6
+ providers: PluginRegistry<DataProvider>;
7
+ transformers: PluginRegistry<DatasetTransformer>;
8
+ adapters: PluginRegistry<VisualizationAdapter>;
9
+ rendererDefinitions: PluginRegistry<VisualizationRendererDefinition>;
10
+ presets: PluginRegistry<VisualizationPreset>;
11
+ actions: PluginRegistry<VisualizationAction>;
12
+ requestValueCodecs: PluginRegistry<RequestValueCodec>;
13
+ }
14
+ export declare function createCoreRegistries(): CoreRegistries;
15
+ //# sourceMappingURL=core-registries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-registries.d.ts","sourceRoot":"","sources":["../../../src/core/registry/core-registries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,+BAA+B,EAChC,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;IACxC,YAAY,EAAE,cAAc,CAAC,kBAAkB,CAAC,CAAC;IACjD,QAAQ,EAAE,cAAc,CAAC,oBAAoB,CAAC,CAAC;IAC/C,mBAAmB,EAAE,cAAc,CAAC,+BAA+B,CAAC,CAAC;IACrE,OAAO,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;IAC7C,OAAO,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;IAC7C,kBAAkB,EAAE,cAAc,CAAC,iBAAiB,CAAC,CAAC;CACvD;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAUrD"}
@@ -0,0 +1,4 @@
1
+ export * from "./core-registries";
2
+ export * from "./plugin-registry";
3
+ export * from "./register-standard";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/registry/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,28 @@
1
+ export interface RegistryEntry {
2
+ id: string;
3
+ }
4
+ export interface ReadonlyRegistry<T extends RegistryEntry> {
5
+ get(id: string): T | undefined;
6
+ require(id: string): T;
7
+ has(id: string): boolean;
8
+ values(): ReadonlyArray<T>;
9
+ }
10
+ export declare class RegistryError extends Error {
11
+ readonly code: "duplicate_registry_id" | "invalid_registry_id" | "registry_entry_not_found";
12
+ readonly registryName: string;
13
+ readonly entryId: string;
14
+ constructor(code: RegistryError["code"], registryName: string, entryId: string, message: string);
15
+ }
16
+ export declare class PluginRegistry<T extends RegistryEntry> implements ReadonlyRegistry<T> {
17
+ #private;
18
+ readonly name: string;
19
+ constructor(name: string);
20
+ register(entry: T): this;
21
+ registerMany(entries: ReadonlyArray<T>): this;
22
+ get(id: string): T | undefined;
23
+ require(id: string): T;
24
+ has(id: string): boolean;
25
+ values(): ReadonlyArray<T>;
26
+ clear(): void;
27
+ }
28
+ //# sourceMappingURL=plugin-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-registry.d.ts","sourceRoot":"","sources":["../../../src/core/registry/plugin-registry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,aAAa;IACvD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;IACvB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;CAC5B;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,GAAG,qBAAqB,GAAG,0BAA0B,CAAC;IAC5F,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEb,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAOhG;AAED,qBAAa,cAAc,CAAC,CAAC,SAAS,aAAa,CAAE,YAAW,gBAAgB,CAAC,CAAC,CAAC;;IAGrE,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;IAEjC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAiBxB,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI;IAK7C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI9B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC;IAQtB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC;IAI1B,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,4 @@
1
+ import { type CoreRegistries } from "./core-registries";
2
+ export declare function registerStandardCore(registries: CoreRegistries): CoreRegistries;
3
+ export declare function createStandardCoreRegistries(): CoreRegistries;
4
+ //# sourceMappingURL=register-standard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-standard.d.ts","sourceRoot":"","sources":["../../../src/core/registry/register-standard.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE9E,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,cAAc,GAAG,cAAc,CAI/E;AAED,wBAAgB,4BAA4B,IAAI,cAAc,CAE7D"}
@@ -0,0 +1,26 @@
1
+ import { type DashboardConfig } from "../config";
2
+ import { DatasetRunner, type DatasetResult, type RunDatasetOptions } from "../dataset";
3
+ import type { CoreRegistries } from "../registry";
4
+ import type { VisualizationTelemetrySink } from "../telemetry";
5
+ import { type CreateDashboardContextOptions, type DashboardContext, type RestoreDashboardContextResult } from "../variable";
6
+ export interface DashboardDataRuntimeOptions {
7
+ config: unknown;
8
+ registries: CoreRegistries;
9
+ timezone: string;
10
+ locale: string;
11
+ telemetry?: VisualizationTelemetrySink;
12
+ }
13
+ export declare class DashboardDataRuntime {
14
+ #private;
15
+ readonly config: DashboardConfig;
16
+ readonly datasetRunner: DatasetRunner;
17
+ constructor(options: DashboardDataRuntimeOptions);
18
+ createContext(variables?: CreateDashboardContextOptions["variables"]): DashboardContext;
19
+ restoreContext(search: string, variables?: CreateDashboardContextOptions["variables"]): RestoreDashboardContextResult;
20
+ runDataset(datasetId: string, context: DashboardContext, options?: RunDatasetOptions): Promise<DatasetResult>;
21
+ refreshDataset(datasetId: string, context: DashboardContext, signal?: AbortSignal): Promise<DatasetResult>;
22
+ clear(): void;
23
+ get registries(): CoreRegistries;
24
+ }
25
+ export declare function createDashboardDataRuntime(options: DashboardDataRuntimeOptions): DashboardDataRuntime;
26
+ //# sourceMappingURL=dashboard-data-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-data-runtime.d.ts","sourceRoot":"","sources":["../../../src/core/runtime/dashboard-data-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAGL,KAAK,6BAA6B,EAClC,KAAK,gBAAgB,EACrB,KAAK,6BAA6B,EACnC,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,cAAc,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,0BAA0B,CAAC;CACxC;AAED,qBAAa,oBAAoB;;IAC/B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;gBAK1B,OAAO,EAAE,2BAA2B;IAyBhD,aAAa,CAAC,SAAS,CAAC,EAAE,6BAA6B,CAAC,WAAW,CAAC,GAAG,gBAAgB;IAOvF,cAAc,CACZ,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,6BAA6B,CAAC,WAAW,CAAC,GACrD,6BAA6B;IAShC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;IAI7G,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;IAI1G,KAAK,IAAI,IAAI;IAIb,IAAI,UAAU,IAAI,cAAc,CAE/B;CACF;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,2BAA2B,GAAG,oBAAoB,CAErG"}