@blazes/data-visualization 1.0.0-alpha.0 → 1.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -0
- package/dist/.vite/manifest.json +26 -26
- package/dist/core/config/dashboard-config-schema.d.ts +13 -0
- package/dist/core/config/dashboard-config-schema.d.ts.map +1 -1
- package/dist/core/config/dashboard-config.d.ts +4 -0
- package/dist/core/config/dashboard-config.d.ts.map +1 -1
- package/dist/core/export/index.d.ts +1 -0
- package/dist/core/export/index.d.ts.map +1 -1
- package/dist/core/export/panel-export.d.ts +4 -0
- package/dist/core/export/panel-export.d.ts.map +1 -0
- package/dist/core/index.js +63 -61
- package/dist/core/runtime/dashboard-runtime.d.ts +4 -0
- package/dist/core/runtime/dashboard-runtime.d.ts.map +1 -1
- package/dist/{dashboard-runtime-8a-9P8Ku.js → dashboard-runtime-6VlVQIuQ.js} +27 -27
- package/dist/{dashboard-runtime-8a-9P8Ku.js.map → dashboard-runtime-6VlVQIuQ.js.map} +1 -1
- package/dist/experimental/s2/index.js +12 -12
- package/dist/index.css +1 -1
- package/dist/index.js +63 -61
- package/dist/{csv-Dyrr2yMA.js → panel-export-Di_5Frul.js} +24 -19
- package/dist/panel-export-Di_5Frul.js.map +1 -0
- package/dist/renderers/word-cloud/index.js +1 -1
- package/dist/{runtime-schema-BO2qLlvE.js → runtime-schema-BmeEvFU-.js} +42 -34
- package/dist/runtime-schema-BmeEvFU-.js.map +1 -0
- package/dist/{standard-definitions-DHtaLAf1.js → standard-definitions-hgJ-kOoz.js} +5 -5
- package/dist/{standard-definitions-DHtaLAf1.js.map → standard-definitions-hgJ-kOoz.js.map} +1 -1
- package/dist/vue/components/DashboardPanel.vue.d.ts.map +1 -1
- package/dist/vue/components/DashboardRenderer.vue.d.ts.map +1 -1
- package/dist/vue/index.js +620 -592
- package/dist/vue/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/csv-Dyrr2yMA.js.map +0 -1
- package/dist/runtime-schema-BO2qLlvE.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-runtime-8a-9P8Ku.js","sources":["../src/core/config/dashboard-config.ts","../src/core/config/config-validator.ts","../src/core/config/value-path.ts","../src/core/provider/resolve-request-input.ts","../src/core/provider/request-executor.ts","../src/core/registry/core-registries.ts","../src/core/registry/register-standard.ts","../src/core/provider/request-value-codec.ts","../src/core/dataset/normalize.ts","../src/core/dataset/types.ts","../src/core/dataset/dataset-runner.ts","../src/core/runtime/dashboard-data-runtime.ts","../src/core/runtime/dependency-graph.ts","../src/core/runtime/dashboard-runtime.ts"],"sourcesContent":["import { DashboardConfigSchema, JsonValueSchema, type DashboardConfig } from \"./dashboard-config-schema\";\nimport { createTypeBoxRuntimeSchema, RuntimeSchemaValidationError } from \"./runtime-schema\";\nimport { isJsonValue } from \"./serializable\";\n\nexport const dashboardConfigRuntimeSchema = createTypeBoxRuntimeSchema(DashboardConfigSchema, [JsonValueSchema]);\n\nexport function parseDashboardConfig(value: unknown): DashboardConfig {\n if (!isJsonValue(value)) {\n throw new RuntimeSchemaValidationError([\n {\n path: \"/\",\n keyword: \"jsonSerializable\",\n message: \"must contain only finite JSON values and must not contain cycles or class instances\",\n params: {}\n }\n ]);\n }\n return dashboardConfigRuntimeSchema.assert(value);\n}\n","import type { VisualizationRendererDefinition } from \"../adapter\";\nimport type { CoreRegistries } from \"../registry\";\nimport type { VisualizationTelemetrySink } from \"../telemetry\";\nimport { emitTelemetry } from \"../telemetry\";\nimport { dashboardConfigRuntimeSchema } from \"./dashboard-config\";\nimport type { DashboardConfig, DatasetFieldConfig, PanelBinding, PanelConfig } from \"./dashboard-config-schema\";\nimport { isJsonValue, stableSerializeJson } from \"./serializable\";\n\nexport interface ConfigDiagnostic {\n level: \"error\";\n code: string;\n message: string;\n path: string;\n}\n\nexport type DashboardConfigValidationResult =\n | { valid: true; config: DashboardConfig; diagnostics: readonly [] }\n | { valid: false; diagnostics: ReadonlyArray<ConfigDiagnostic> };\n\nexport interface ValidateDashboardConfigOptions {\n telemetry?: VisualizationTelemetrySink;\n}\n\nexport class DashboardConfigValidationError extends Error {\n readonly diagnostics: ReadonlyArray<ConfigDiagnostic>;\n\n constructor(diagnostics: ReadonlyArray<ConfigDiagnostic>) {\n super(diagnostics.map((diagnostic) => `${diagnostic.path}: ${diagnostic.message}`).join(\"\\n\"));\n this.name = \"DashboardConfigValidationError\";\n this.diagnostics = diagnostics;\n }\n}\n\nfunction findDuplicates(values: ReadonlyArray<string>): string[] {\n const seen = new Set<string>();\n const duplicates = new Set<string>();\n values.forEach((value) => (seen.has(value) ? duplicates.add(value) : seen.add(value)));\n return Array.from(duplicates);\n}\n\nfunction bindingFields(binding: PanelBinding): string[] {\n switch (binding.type) {\n case \"metric\":\n return [binding.valueField, binding.compareField].filter((field): field is string => Boolean(field));\n case \"line\":\n return [binding.xField, ...binding.yFields, binding.seriesField].filter((field): field is string =>\n Boolean(field)\n );\n case \"bar\":\n return [binding.categoryField, ...binding.valueFields, binding.seriesField].filter((field): field is string =>\n Boolean(field)\n );\n case \"pie\":\n return [binding.nameField, binding.valueField];\n case \"table\":\n return binding.columns;\n case \"wordCloud\":\n return [...binding.labelFields, binding.valueField, binding.semanticField].filter((field): field is string =>\n Boolean(field)\n );\n case \"pivotTableS2\":\n return [...binding.rowFields, ...binding.columnFields, ...binding.valueFields];\n }\n}\n\nfunction addFieldSemanticDiagnostic(\n diagnostics: ConfigDiagnostic[],\n panelIndex: number,\n field: DatasetFieldConfig | undefined,\n fieldId: string,\n expectation: string,\n predicate: (field: DatasetFieldConfig) => boolean\n): void {\n if (!field || predicate(field)) return;\n diagnostics.push({\n level: \"error\",\n code: \"panel_field_semantics_invalid\",\n message: `Field ${fieldId} must be ${expectation}; received ${field.role}/${field.dataType}.`,\n path: `/panels/${panelIndex}/binding`\n });\n}\n\nfunction addBindingSemanticDiagnostics(\n diagnostics: ConfigDiagnostic[],\n panel: PanelConfig,\n panelIndex: number,\n fieldsById: ReadonlyMap<string, DatasetFieldConfig>\n): void {\n const metricNumber = (field: DatasetFieldConfig) => field.role === \"metric\" && field.dataType === \"number\";\n const category = (field: DatasetFieldConfig) => field.role === \"dimension\" || field.role === \"time\";\n const dimension = (field: DatasetFieldConfig) => field.role === \"dimension\";\n const check = (fieldId: string, expectation: string, predicate: (field: DatasetFieldConfig) => boolean) =>\n addFieldSemanticDiagnostic(diagnostics, panelIndex, fieldsById.get(fieldId), fieldId, expectation, predicate);\n\n switch (panel.binding.type) {\n case \"metric\":\n check(panel.binding.valueField, \"a numeric metric\", metricNumber);\n if (panel.binding.compareField) check(panel.binding.compareField, \"a numeric metric\", metricNumber);\n break;\n case \"line\":\n check(panel.binding.xField, \"a dimension or time field\", category);\n panel.binding.yFields.forEach((fieldId) => check(fieldId, \"a numeric metric\", metricNumber));\n if (panel.binding.seriesField) {\n check(panel.binding.seriesField, \"a dimension field\", dimension);\n if (panel.binding.yFields.length !== 1) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_series_value_arity_invalid\",\n message: \"Line binding with seriesField must contain exactly one yField.\",\n path: `/panels/${panelIndex}/binding/yFields`\n });\n }\n }\n const axisKeys = new Set(\n panel.binding.yFields.flatMap((fieldId) => {\n const field = fieldsById.get(fieldId);\n if (!field) return [];\n const format = panel.enhancement?.common?.formatOverrides?.[fieldId] ?? field.format ?? { type: \"number\" };\n return [stableSerializeJson({ format, unit: field.unit ?? null })];\n })\n );\n if (axisKeys.size > 2) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_line_axis_count_invalid\",\n message: \"Line binding supports at most two distinct format and unit axis groups.\",\n path: `/panels/${panelIndex}/binding/yFields`\n });\n }\n break;\n case \"bar\":\n check(panel.binding.categoryField, \"a dimension or time field\", category);\n panel.binding.valueFields.forEach((fieldId) => check(fieldId, \"a numeric metric\", metricNumber));\n if (panel.binding.seriesField) {\n check(panel.binding.seriesField, \"a dimension field\", dimension);\n if (panel.binding.valueFields.length !== 1) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_series_value_arity_invalid\",\n message: \"Bar binding with seriesField must contain exactly one valueField.\",\n path: `/panels/${panelIndex}/binding/valueFields`\n });\n }\n }\n break;\n case \"pie\":\n check(panel.binding.nameField, \"a dimension or time field\", category);\n check(panel.binding.valueField, \"a numeric metric\", metricNumber);\n break;\n case \"wordCloud\":\n panel.binding.labelFields.forEach((fieldId) => check(fieldId, \"a dimension field\", dimension));\n check(panel.binding.valueField, \"a numeric metric\", metricNumber);\n if (panel.binding.semanticField) check(panel.binding.semanticField, \"a dimension field\", dimension);\n break;\n case \"pivotTableS2\": {\n panel.binding.rowFields.forEach((fieldId) => check(fieldId, \"a dimension or time field\", category));\n panel.binding.columnFields.forEach((fieldId) => check(fieldId, \"a dimension or time field\", category));\n panel.binding.valueFields.forEach((fieldId) => check(fieldId, \"a numeric metric\", metricNumber));\n const rowFields = new Set(panel.binding.rowFields);\n const duplicateDimension = panel.binding.columnFields.find((fieldId) => rowFields.has(fieldId));\n if (duplicateDimension) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_pivot_dimension_duplicate\",\n message: `Pivot table field ${duplicateDimension} cannot be used as both a row and column dimension.`,\n path: `/panels/${panelIndex}/binding`\n });\n }\n break;\n }\n case \"table\": {\n const columnDisplays = panel.enhancement?.type === \"table\" ? panel.enhancement.table?.columnDisplays : undefined;\n Object.entries(columnDisplays ?? {}).forEach(([fieldId, display]) => {\n if (display.type === \"progress\" || display.type === \"trend\") {\n check(fieldId, `a numeric field for ${display.type} display`, (field) => field.dataType === \"number\");\n }\n });\n break;\n }\n }\n}\n\nfunction addPluginSchemaDiagnostics(\n diagnostics: ConfigDiagnostic[],\n definition: VisualizationRendererDefinition,\n panel: DashboardConfig[\"panels\"][number],\n panelIndex: number\n): void {\n const bindingResult = definition.bindingSchema.validate(panel.binding);\n if (!bindingResult.success) {\n bindingResult.issues.forEach((issue) =>\n diagnostics.push({\n level: \"error\",\n code: \"panel_binding_schema_invalid\",\n message: issue.message,\n path: `/panels/${panelIndex}/binding${issue.path === \"/\" ? \"\" : issue.path}`\n })\n );\n }\n if (panel.enhancement) {\n const enhancementResult = definition.enhancementSchema.validate(panel.enhancement);\n if (!enhancementResult.success) {\n enhancementResult.issues.forEach((issue) =>\n diagnostics.push({\n level: \"error\",\n code: \"panel_enhancement_schema_invalid\",\n message: issue.message,\n path: `/panels/${panelIndex}/enhancement${issue.path === \"/\" ? \"\" : issue.path}`\n })\n );\n }\n }\n}\n\nexport function validateDashboardConfig(\n value: unknown,\n registries: CoreRegistries,\n options: ValidateDashboardConfigOptions = {}\n): DashboardConfigValidationResult {\n if (!isJsonValue(value)) {\n return {\n valid: false,\n diagnostics: [\n {\n level: \"error\",\n code: \"config_not_serializable\",\n message:\n \"DashboardConfig must contain only finite JSON values and must not contain cycles or class instances.\",\n path: \"/\"\n }\n ]\n };\n }\n\n const structureResult = dashboardConfigRuntimeSchema.validate(value);\n if (!structureResult.success) {\n return {\n valid: false,\n diagnostics: structureResult.issues.map((issue) => ({\n level: \"error\",\n code: \"config_schema_invalid\",\n message: issue.message,\n path: issue.path\n }))\n };\n }\n\n const config = structureResult.value;\n const diagnostics: ConfigDiagnostic[] = [];\n const variables = config.variables ?? [];\n const variableIds = new Set(variables.map((variable) => variable.id));\n const requestIds = new Set(config.requests.map((request) => request.id));\n const datasetsById = new Map(config.datasets.map((dataset) => [dataset.id, dataset]));\n\n const idGroups = [\n [\"variable_id_duplicate\", \"/variables\", variables.map((item) => item.id)],\n [\"filter_control_id_duplicate\", \"/filterBar/controls\", (config.filterBar?.controls ?? []).map((item) => item.id)],\n [\"request_id_duplicate\", \"/requests\", config.requests.map((item) => item.id)],\n [\"dataset_id_duplicate\", \"/datasets\", config.datasets.map((item) => item.id)],\n [\"panel_id_duplicate\", \"/panels\", config.panels.map((item) => item.id)]\n ] as const;\n idGroups.forEach(([code, path, ids]) =>\n findDuplicates(ids).forEach((id) =>\n diagnostics.push({ level: \"error\", code, message: `Duplicate ID: ${id}`, path })\n )\n );\n\n findDuplicates(variables.flatMap((variable) => (variable.urlKey ? [variable.urlKey] : []))).forEach((urlKey) =>\n diagnostics.push({\n level: \"error\",\n code: \"variable_url_key_duplicate\",\n message: `Duplicate variable URL key: ${urlKey}`,\n path: \"/variables\"\n })\n );\n\n (config.filterBar?.controls ?? []).forEach((control, index) => {\n const ids = control.type === \"date-range\" ? [control.startVariableId, control.endVariableId] : [control.variableId];\n ids.forEach((variableId) => {\n if (!variableIds.has(variableId)) {\n diagnostics.push({\n level: \"error\",\n code: \"filter_variable_not_found\",\n message: `Filter control ${control.id} references missing variable: ${variableId}`,\n path: `/filterBar/controls/${index}`\n });\n }\n });\n if (control.type === \"date-range\") {\n findDuplicates((control.presets ?? []).map((preset) => preset.id)).forEach((presetId) =>\n diagnostics.push({\n level: \"error\",\n code: \"filter_preset_id_duplicate\",\n message: `Duplicate preset ID in filter ${control.id}: ${presetId}`,\n path: `/filterBar/controls/${index}/presets`\n })\n );\n } else {\n const optionValues = control.options.map((option) => stableSerializeJson(option.value));\n findDuplicates(optionValues).forEach((optionValue) =>\n diagnostics.push({\n level: \"error\",\n code: \"filter_option_value_duplicate\",\n message: `Duplicate option value in filter ${control.id}: ${optionValue}`,\n path: `/filterBar/controls/${index}/options`\n })\n );\n }\n });\n\n config.requests.forEach((request, requestIndex) => {\n const provider = registries.providers.get(request.providerId);\n if (!provider) {\n diagnostics.push({\n level: \"error\",\n code: \"request_provider_not_found\",\n message: `Provider is not registered: ${request.providerId}`,\n path: `/requests/${requestIndex}/providerId`\n });\n } else if (!provider.operations[request.operationId]) {\n diagnostics.push({\n level: \"error\",\n code: \"request_operation_not_found\",\n message: `Provider operation is not registered: ${request.providerId}/${request.operationId}`,\n path: `/requests/${requestIndex}/operationId`\n });\n }\n\n Object.entries(request.input ?? {}).forEach(([inputName, binding]) => {\n if (binding.source !== \"variable\") return;\n if (!variableIds.has(binding.variableId)) {\n diagnostics.push({\n level: \"error\",\n code: \"request_variable_not_found\",\n message: `Request input references missing variable: ${binding.variableId}`,\n path: `/requests/${requestIndex}/input/${inputName}/variableId`\n });\n }\n if (binding.codecId && !registries.requestValueCodecs.has(binding.codecId)) {\n diagnostics.push({\n level: \"error\",\n code: \"request_codec_not_found\",\n message: `Request value codec is not registered: ${binding.codecId}`,\n path: `/requests/${requestIndex}/input/${inputName}/codecId`\n });\n }\n });\n });\n\n config.datasets.forEach((dataset, datasetIndex) => {\n findDuplicates(dataset.fields.map((field) => field.key)).forEach((fieldKey) =>\n diagnostics.push({\n level: \"error\",\n code: \"dataset_field_key_duplicate\",\n message: `Duplicate field key in dataset ${dataset.id}: ${fieldKey}`,\n path: `/datasets/${datasetIndex}/fields`\n })\n );\n const inputReferences =\n dataset.input.type === \"single\" ? ([[\"default\", dataset.input]] as const) : Object.entries(dataset.input.inputs);\n inputReferences.forEach(([inputName, input]) => {\n if (!requestIds.has(input.requestId)) {\n diagnostics.push({\n level: \"error\",\n code: \"dataset_request_not_found\",\n message: `Dataset input references missing request: ${input.requestId}`,\n path: `/datasets/${datasetIndex}/input/${inputName}`\n });\n }\n });\n if (dataset.input.type === \"multiple\" && !dataset.transformerId) {\n diagnostics.push({\n level: \"error\",\n code: \"dataset_transformer_required\",\n message: `Dataset ${dataset.id} has multiple inputs and requires a transformer.`,\n path: `/datasets/${datasetIndex}/transformerId`\n });\n }\n if (dataset.transformerId && !registries.transformers.has(dataset.transformerId)) {\n diagnostics.push({\n level: \"error\",\n code: \"dataset_transformer_not_found\",\n message: `Dataset transformer is not registered: ${dataset.transformerId}`,\n path: `/datasets/${datasetIndex}/transformerId`\n });\n }\n dataset.fields.forEach((field, fieldIndex) => {\n const expectedType =\n field.coerce === \"number-string\"\n ? \"number\"\n : field.coerce === \"boolean-string\"\n ? \"boolean\"\n : field.coerce === \"iso-date\"\n ? \"date-or-datetime\"\n : undefined;\n if (\n expectedType &&\n (expectedType === \"date-or-datetime\"\n ? field.dataType !== \"date\" && field.dataType !== \"datetime\"\n : field.dataType !== expectedType)\n ) {\n diagnostics.push({\n level: \"error\",\n code: \"dataset_coercion_type_mismatch\",\n message: `Coercion ${field.coerce} is not compatible with data type ${field.dataType}.`,\n path: `/datasets/${datasetIndex}/fields/${fieldIndex}/coerce`\n });\n }\n });\n });\n\n config.panels.forEach((panel, panelIndex) => {\n const dataset = datasetsById.get(panel.binding.datasetId);\n if (!dataset) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_dataset_not_found\",\n message: `Panel references missing dataset: ${panel.binding.datasetId}`,\n path: `/panels/${panelIndex}/binding/datasetId`\n });\n } else {\n const fieldsById = new Map(dataset.fields.map((field) => [field.key, field]));\n const fieldIds = new Set(fieldsById.keys());\n bindingFields(panel.binding).forEach((fieldId) => {\n if (!fieldIds.has(fieldId)) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_field_not_found\",\n message: `Panel binding references missing field ${fieldId} in dataset ${dataset.id}.`,\n path: `/panels/${panelIndex}/binding`\n });\n }\n });\n Object.keys(panel.enhancement?.common?.formatOverrides ?? {}).forEach((fieldId) => {\n if (!fieldIds.has(fieldId)) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_format_field_not_found\",\n message: `Panel format override references missing field ${fieldId} in dataset ${dataset.id}.`,\n path: `/panels/${panelIndex}/enhancement/common/formatOverrides/${fieldId}`\n });\n }\n });\n addBindingSemanticDiagnostics(diagnostics, panel, panelIndex, fieldsById);\n if (panel.enhancement?.type === \"table\") {\n const configuredFields = new Set([\n ...(panel.enhancement.table?.sortableFields ?? []),\n ...(panel.enhancement.table?.filterableFields ?? []),\n ...Object.keys(panel.enhancement.table?.columnWidths ?? {}),\n ...Object.keys(panel.enhancement.table?.columnDisplays ?? {})\n ]);\n configuredFields.forEach((fieldId) => {\n if (!panel.binding.type || panel.binding.type !== \"table\" || !panel.binding.columns.includes(fieldId)) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_table_enhancement_field_invalid\",\n message: `Table enhancement field ${fieldId} must be included in the table columns.`,\n path: `/panels/${panelIndex}/enhancement/table`\n });\n }\n });\n }\n if (panel.enhancement?.type === \"wordCloud\") {\n const minFontSize = panel.enhancement.wordCloud?.minFontSize;\n const maxFontSize = panel.enhancement.wordCloud?.maxFontSize;\n if (minFontSize !== undefined && maxFontSize !== undefined && minFontSize > maxFontSize) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_word_cloud_font_range_invalid\",\n message: \"Word cloud minFontSize cannot be greater than maxFontSize.\",\n path: `/panels/${panelIndex}/enhancement/wordCloud`\n });\n }\n }\n }\n\n if (panel.enhancement && panel.enhancement.type !== panel.binding.type) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_enhancement_type_mismatch\",\n message: `Panel enhancement type ${panel.enhancement.type} does not match binding type ${panel.binding.type}.`,\n path: `/panels/${panelIndex}/enhancement/type`\n });\n }\n\n const definition = registries.rendererDefinitions.get(panel.rendererId);\n if (!definition) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_renderer_not_found\",\n message: `Renderer definition is not registered: ${panel.rendererId}`,\n path: `/panels/${panelIndex}/rendererId`\n });\n } else {\n addPluginSchemaDiagnostics(diagnostics, definition, panel, panelIndex);\n const adapterId = panel.adapterId ?? definition.defaultAdapterId;\n if (!registries.adapters.has(adapterId)) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_adapter_not_found\",\n message: `Visualization adapter is not registered: ${adapterId}`,\n path: `/panels/${panelIndex}/adapterId`\n });\n }\n }\n\n (panel.enhancement?.common?.presetIds ?? []).forEach((presetId) => {\n const preset = registries.presets.get(presetId);\n if (!preset) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_preset_not_found\",\n message: `Visualization preset is not registered: ${presetId}`,\n path: `/panels/${panelIndex}/enhancement/common/presetIds`\n });\n } else if (preset.rendererId && preset.rendererId !== panel.rendererId) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_preset_renderer_mismatch\",\n message: `Preset ${presetId} belongs to renderer ${preset.rendererId}, not ${panel.rendererId}.`,\n path: `/panels/${panelIndex}/enhancement/common/presetIds`\n });\n }\n });\n (panel.enhancement?.common?.interactions ?? []).forEach((interaction) => {\n if (!registries.actions.has(interaction.actionId)) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_action_not_found\",\n message: `Visualization action is not registered: ${interaction.actionId}`,\n path: `/panels/${panelIndex}/enhancement/common/interactions`\n });\n }\n });\n findDuplicates((panel.actions ?? []).map((action) => action.id)).forEach((actionId) =>\n diagnostics.push({\n level: \"error\",\n code: \"panel_action_id_duplicate\",\n message: `Duplicate panel action ID: ${actionId}`,\n path: `/panels/${panelIndex}/actions`\n })\n );\n (panel.actions ?? []).forEach((action, actionIndex) => {\n if (!registries.actions.has(action.actionId)) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_action_not_found\",\n message: `Visualization action is not registered: ${action.actionId}`,\n path: `/panels/${panelIndex}/actions/${actionIndex}/actionId`\n });\n }\n });\n });\n\n emitTelemetry(options.telemetry, {\n name: \"config_validated\",\n dashboardId: config.id,\n ...(diagnostics.length ? { errorCode: \"config_reference_invalid\" } : {})\n });\n\n return diagnostics.length\n ? { valid: false, diagnostics: Object.freeze(diagnostics) }\n : { valid: true, config, diagnostics: [] };\n}\n\nexport function assertDashboardConfig(\n value: unknown,\n registries: CoreRegistries,\n options: ValidateDashboardConfigOptions = {}\n): DashboardConfig {\n const result = validateDashboardConfig(value, registries, options);\n if (!result.valid) {\n throw new DashboardConfigValidationError(result.diagnostics);\n }\n return result.config;\n}\n","const blockedPathSegments = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n\nexport function readValueAtPath(source: unknown, path?: string): unknown {\n if (!path) {\n return source;\n }\n\n return path.split(\".\").reduce<unknown>((current, segment) => {\n if (!segment || blockedPathSegments.has(segment) || current === null || typeof current !== \"object\") {\n return undefined;\n }\n\n return (current as Record<string, unknown>)[segment];\n }, source);\n}\n","import {\n cloneJsonValue,\n type DashboardConfig,\n isJsonValue,\n readValueAtPath,\n type DataRequestConfig,\n type JsonValue\n} from \"../config\";\nimport type { ReadonlyRegistry } from \"../registry\";\nimport { readDashboardVariable, type DashboardContext } from \"../variable\";\nimport type { RequestValueCodec } from \"./request-value-codec\";\n\nexport class RequestInputError extends Error {\n readonly code: \"request_input_missing\" | \"request_input_not_serializable\";\n readonly requestId: string;\n readonly inputName: string;\n\n constructor(code: RequestInputError[\"code\"], requestId: string, inputName: string, message: string) {\n super(message);\n this.name = \"RequestInputError\";\n this.code = code;\n this.requestId = requestId;\n this.inputName = inputName;\n }\n}\n\nfunction isEmptyValue(value: JsonValue): boolean {\n return value === null || value === \"\" || (Array.isArray(value) && value.length === 0);\n}\n\nexport function resolveDataRequestInput(\n request: DataRequestConfig,\n config: DashboardConfig,\n context: DashboardContext,\n codecs: ReadonlyRegistry<RequestValueCodec>\n): Readonly<Record<string, JsonValue>> {\n const result: Record<string, JsonValue> = {};\n\n for (const [inputName, binding] of Object.entries(request.input ?? {})) {\n if (binding.source === \"constant\") {\n result[inputName] = cloneJsonValue(binding.value);\n continue;\n }\n\n let value: unknown = readDashboardVariable(config, context, binding.variableId);\n value = readValueAtPath(value, binding.select);\n\n if (value === undefined) {\n if (binding.omitWhenEmpty) continue;\n throw new RequestInputError(\n \"request_input_missing\",\n request.id,\n inputName,\n `DataRequest ${request.id} input ${inputName} resolved to undefined.`\n );\n }\n if (!isJsonValue(value)) {\n throw new RequestInputError(\n \"request_input_not_serializable\",\n request.id,\n inputName,\n `DataRequest ${request.id} input ${inputName} is not JSON serializable.`\n );\n }\n if (binding.omitWhenEmpty && isEmptyValue(value)) {\n continue;\n }\n\n const encoded = binding.codecId ? codecs.require(binding.codecId).encode(value, context) : value;\n if (encoded === undefined) {\n if (binding.omitWhenEmpty) continue;\n throw new RequestInputError(\n \"request_input_missing\",\n request.id,\n inputName,\n `DataRequest ${request.id} input ${inputName} was omitted by codec ${binding.codecId}.`\n );\n }\n result[inputName] = cloneJsonValue(encoded);\n }\n\n return Object.freeze(result);\n}\n","import {\n stableSerializeJson,\n type DashboardConfig,\n type DataRequestConfig,\n type JsonValue,\n type RuntimeSchemaIssue\n} from \"../config\";\nimport type { ReadonlyRegistry } from \"../registry\";\nimport { emitTelemetry, type VisualizationTelemetrySink } from \"../telemetry\";\nimport type { DashboardContext } from \"../variable\";\nimport type { DataProvider } from \"./data-provider\";\nimport { resolveDataRequestInput } from \"./resolve-request-input\";\nimport type { RequestValueCodec } from \"./request-value-codec\";\n\ninterface RequestCacheEntry {\n response: unknown;\n version: number;\n updatedAt: string;\n}\n\ninterface InflightRequest {\n controller: AbortController;\n promise: Promise<RequestCacheEntry>;\n}\n\nexport interface RequestExecutionResult extends RequestCacheEntry {\n requestConfigId: string;\n executionId: string;\n cacheKey: string;\n input: Readonly<Record<string, JsonValue>>;\n fromCache: boolean;\n}\n\nexport interface ExecuteRequestOptions {\n signal?: AbortSignal;\n force?: boolean;\n isolated?: boolean;\n}\n\nexport interface RequestExecutorOptions {\n telemetry?: VisualizationTelemetrySink;\n}\n\nexport class ProviderInputValidationError extends Error {\n readonly code = \"provider_input_invalid\";\n readonly providerId: string;\n readonly operationId: string;\n readonly issues: ReadonlyArray<RuntimeSchemaIssue>;\n\n constructor(providerId: string, operationId: string, issues: ReadonlyArray<RuntimeSchemaIssue>) {\n super(`Provider input validation failed: ${providerId}/${operationId}`);\n this.name = \"ProviderInputValidationError\";\n this.providerId = providerId;\n this.operationId = operationId;\n this.issues = issues;\n }\n}\n\nfunction createAbortError(): DOMException {\n return new DOMException(\"The request was aborted.\", \"AbortError\");\n}\n\nfunction isAbortError(error: unknown, signal: AbortSignal): boolean {\n return signal.aborted || (error instanceof DOMException && error.name === \"AbortError\");\n}\n\nexport function createRequestCacheKey(\n request: Pick<DataRequestConfig, \"providerId\" | \"operationId\">,\n input: Readonly<Record<string, JsonValue>>\n): string {\n return `${request.providerId}:${request.operationId}:${stableSerializeJson(input)}`;\n}\n\nexport class RequestExecutor {\n readonly #cache = new Map<string, RequestCacheEntry>();\n readonly #inflight = new Map<string, InflightRequest>();\n readonly #isolatedControllers = new Set<AbortController>();\n readonly #keysByRequestId = new Map<string, Set<string>>();\n #version = 0;\n #executionSequence = 0;\n\n constructor(\n readonly config: DashboardConfig,\n readonly providers: ReadonlyRegistry<DataProvider>,\n readonly codecs: ReadonlyRegistry<RequestValueCodec>,\n readonly options: RequestExecutorOptions = {}\n ) {}\n\n async execute(\n requestConfigId: string,\n context: DashboardContext,\n options: ExecuteRequestOptions = {}\n ): Promise<RequestExecutionResult> {\n const request = this.config.requests.find((candidate) => candidate.id === requestConfigId);\n if (!request) {\n throw new Error(`DataRequest not found: ${requestConfigId}`);\n }\n\n const callerSignal = options.signal;\n if (callerSignal?.aborted) throw createAbortError();\n const input = resolveDataRequestInput(request, this.config, context, this.codecs);\n const cacheKey = createRequestCacheKey(request, input);\n const isolated = options.isolated ?? false;\n if (!isolated) this.trackCacheKey(request.id, cacheKey);\n const executionId = `${request.id}:${++this.#executionSequence}`;\n\n const cached = isolated ? undefined : this.#cache.get(cacheKey);\n if (!options.force && cached) {\n emitTelemetry(this.options.telemetry, {\n name: \"request_cache_hit\",\n dashboardId: context.dashboardId,\n requestId: executionId,\n providerId: request.providerId,\n operationId: request.operationId\n });\n return { ...cached, requestConfigId, executionId, cacheKey, input, fromCache: true };\n }\n\n let existing = isolated ? undefined : this.#inflight.get(cacheKey);\n if (options.force && existing) {\n existing.controller.abort();\n this.#inflight.delete(cacheKey);\n existing = undefined;\n }\n if (existing) {\n const abortExisting = () => existing.controller.abort();\n callerSignal?.addEventListener(\"abort\", abortExisting, { once: true });\n emitTelemetry(this.options.telemetry, {\n name: \"request_cache_hit\",\n dashboardId: context.dashboardId,\n requestId: executionId,\n providerId: request.providerId,\n operationId: request.operationId\n });\n try {\n const entry = await existing.promise;\n return { ...entry, requestConfigId, executionId, cacheKey, input, fromCache: true };\n } finally {\n callerSignal?.removeEventListener(\"abort\", abortExisting);\n }\n }\n\n const provider = this.providers.require(request.providerId);\n const operation = provider.operations[request.operationId];\n if (!operation) {\n throw new Error(`Provider operation not found: ${request.providerId}/${request.operationId}`);\n }\n const inputValidation = operation.inputSchema?.validate(input);\n if (inputValidation && !inputValidation.success) {\n throw new ProviderInputValidationError(request.providerId, request.operationId, inputValidation.issues);\n }\n\n const startedAt = Date.now();\n const controller = new AbortController();\n if (isolated) this.#isolatedControllers.add(controller);\n const abortRequest = () => controller.abort();\n callerSignal?.addEventListener(\"abort\", abortRequest, { once: true });\n emitTelemetry(this.options.telemetry, {\n name: \"request_started\",\n dashboardId: context.dashboardId,\n requestId: executionId,\n providerId: request.providerId,\n operationId: request.operationId\n });\n\n const promise = Promise.resolve()\n .then(() =>\n operation.execute(input, {\n signal: controller.signal,\n requestId: executionId,\n timezone: context.timezone,\n locale: context.locale,\n emit: (event) => emitTelemetry(this.options.telemetry, event)\n })\n )\n .then((response): RequestCacheEntry => {\n if (controller.signal.aborted) throw createAbortError();\n const entry = {\n response,\n version: ++this.#version,\n updatedAt: new Date().toISOString()\n };\n if (!isolated) this.#cache.set(cacheKey, entry);\n emitTelemetry(this.options.telemetry, {\n name: \"request_succeeded\",\n dashboardId: context.dashboardId,\n requestId: executionId,\n providerId: request.providerId,\n operationId: request.operationId,\n durationMs: Date.now() - startedAt\n });\n return entry;\n })\n .catch((error: unknown) => {\n const aborted = isAbortError(error, controller.signal);\n emitTelemetry(this.options.telemetry, {\n name: aborted ? \"request_cancelled\" : \"request_failed\",\n dashboardId: context.dashboardId,\n requestId: executionId,\n providerId: request.providerId,\n operationId: request.operationId,\n durationMs: Date.now() - startedAt,\n errorCode: aborted ? \"request_cancelled\" : \"request_failed\"\n });\n throw error;\n })\n .finally(() => {\n callerSignal?.removeEventListener(\"abort\", abortRequest);\n if (isolated) {\n this.#isolatedControllers.delete(controller);\n } else if (this.#inflight.get(cacheKey)?.promise === promise) {\n this.#inflight.delete(cacheKey);\n }\n });\n\n if (!isolated) this.#inflight.set(cacheKey, { controller, promise });\n const entry = await promise;\n return { ...entry, requestConfigId, executionId, cacheKey, input, fromCache: false };\n }\n\n invalidateRequest(requestConfigId: string): void {\n for (const key of this.#keysByRequestId.get(requestConfigId) ?? []) {\n this.#cache.delete(key);\n this.#inflight.get(key)?.controller.abort();\n this.#inflight.delete(key);\n }\n this.#keysByRequestId.delete(requestConfigId);\n }\n\n clear(): void {\n this.#inflight.forEach(({ controller }) => controller.abort());\n this.#isolatedControllers.forEach((controller) => controller.abort());\n this.#inflight.clear();\n this.#isolatedControllers.clear();\n this.#cache.clear();\n this.#keysByRequestId.clear();\n }\n\n private trackCacheKey(requestConfigId: string, cacheKey: string): void {\n const keys = this.#keysByRequestId.get(requestConfigId) ?? new Set<string>();\n keys.add(cacheKey);\n this.#keysByRequestId.set(requestConfigId, keys);\n }\n}\n","import type {\n VisualizationAction,\n VisualizationAdapter,\n VisualizationPreset,\n VisualizationRendererDefinition\n} from \"../adapter\";\nimport type { DatasetTransformer } from \"../dataset\";\nimport type { DataProvider, RequestValueCodec } from \"../provider\";\nimport { createRequestValueCodecRegistry } from \"../provider\";\nimport { PluginRegistry } from \"./plugin-registry\";\n\nexport interface CoreRegistries {\n providers: PluginRegistry<DataProvider>;\n transformers: PluginRegistry<DatasetTransformer>;\n adapters: PluginRegistry<VisualizationAdapter>;\n rendererDefinitions: PluginRegistry<VisualizationRendererDefinition>;\n presets: PluginRegistry<VisualizationPreset>;\n actions: PluginRegistry<VisualizationAction>;\n requestValueCodecs: PluginRegistry<RequestValueCodec>;\n}\n\nexport function createCoreRegistries(): CoreRegistries {\n return {\n providers: new PluginRegistry<DataProvider>(\"DataProvider\"),\n transformers: new PluginRegistry<DatasetTransformer>(\"DatasetTransformer\"),\n adapters: new PluginRegistry<VisualizationAdapter>(\"VisualizationAdapter\"),\n rendererDefinitions: new PluginRegistry<VisualizationRendererDefinition>(\"VisualizationRendererDefinition\"),\n presets: new PluginRegistry<VisualizationPreset>(\"VisualizationPreset\"),\n actions: new PluginRegistry<VisualizationAction>(\"VisualizationAction\"),\n requestValueCodecs: createRequestValueCodecRegistry()\n };\n}\n","import { STANDARD_ADAPTERS, STANDARD_RENDERER_DEFINITIONS } from \"../adapter\";\nimport { createCoreRegistries, type CoreRegistries } from \"./core-registries\";\n\nexport function registerStandardCore(registries: CoreRegistries): CoreRegistries {\n registries.adapters.registerMany(STANDARD_ADAPTERS);\n registries.rendererDefinitions.registerMany(STANDARD_RENDERER_DEFINITIONS);\n return registries;\n}\n\nexport function createStandardCoreRegistries(): CoreRegistries {\n return registerStandardCore(createCoreRegistries());\n}\n","import { isJsonValue, type JsonValue } from \"../config\";\nimport { PluginRegistry } from \"../registry\";\nimport type { DashboardContext } from \"../variable\";\n\nexport interface RequestValueCodec {\n id: string;\n encode(value: JsonValue, context: DashboardContext): JsonValue | undefined;\n}\n\nexport class RequestValueCodecError extends Error {\n readonly code = \"request_value_codec_failed\";\n readonly codecId: string;\n\n constructor(codecId: string, message: string) {\n super(message);\n this.name = \"RequestValueCodecError\";\n this.codecId = codecId;\n }\n}\n\nfunction requireFiniteNumber(value: JsonValue, codecId: string): number {\n const result =\n typeof value === \"number\" ? value : typeof value === \"string\" && value.trim() !== \"\" ? Number(value) : Number.NaN;\n if (!Number.isFinite(result)) {\n throw new RequestValueCodecError(codecId, `Value cannot be encoded as a finite number by ${codecId}.`);\n }\n return result;\n}\n\nfunction isValidDateOnly(value: string): boolean {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value);\n if (!match) return false;\n const year = Number(match[1]);\n const month = Number(match[2]);\n const day = Number(match[3]);\n const date = new Date(Date.UTC(year, month - 1, day));\n return date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day;\n}\n\nexport const BUILT_IN_REQUEST_VALUE_CODECS: ReadonlyArray<RequestValueCodec> = Object.freeze([\n {\n id: \"string\",\n encode(value) {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n throw new RequestValueCodecError(\"string\", \"Value cannot be encoded as a string.\");\n }\n },\n {\n id: \"number\",\n encode(value) {\n return requireFiniteNumber(value, \"number\");\n }\n },\n {\n id: \"boolean\",\n encode(value) {\n if (typeof value === \"boolean\") return value;\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n throw new RequestValueCodecError(\"boolean\", \"Value cannot be encoded as a boolean.\");\n }\n },\n {\n id: \"string-array\",\n encode(value) {\n if (!Array.isArray(value)) {\n throw new RequestValueCodecError(\"string-array\", \"Value must be an array.\");\n }\n return value.map((item) => {\n if (typeof item === \"string\" || typeof item === \"number\" || typeof item === \"boolean\") {\n return String(item);\n }\n throw new RequestValueCodecError(\"string-array\", \"Array entries must be primitive values.\");\n });\n }\n },\n {\n id: \"number-array\",\n encode(value) {\n if (!Array.isArray(value)) {\n throw new RequestValueCodecError(\"number-array\", \"Value must be an array.\");\n }\n return value.map((item) => requireFiniteNumber(item, \"number-array\"));\n }\n },\n {\n id: \"iso-date\",\n encode(value) {\n if (typeof value !== \"string\") {\n throw new RequestValueCodecError(\"iso-date\", \"ISO date input must be a string.\");\n }\n const dateOnly = /^(\\d{4}-\\d{2}-\\d{2})/.exec(value)?.[1];\n if (dateOnly) {\n if (isValidDateOnly(dateOnly)) return dateOnly;\n throw new RequestValueCodecError(\"iso-date\", \"Value contains an invalid calendar date.\");\n }\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n throw new RequestValueCodecError(\"iso-date\", \"Value cannot be encoded as an ISO date.\");\n }\n return parsed.toISOString().slice(0, 10);\n }\n },\n {\n id: \"json\",\n encode(value) {\n if (!isJsonValue(value)) {\n throw new RequestValueCodecError(\"json\", \"Value is not JSON serializable.\");\n }\n return value;\n }\n }\n]);\n\nexport function createRequestValueCodecRegistry(): PluginRegistry<RequestValueCodec> {\n return new PluginRegistry<RequestValueCodec>(\"RequestValueCodec\").registerMany(BUILT_IN_REQUEST_VALUE_CODECS);\n}\n","import { readValueAtPath, type DatasetConfig, type DatasetFieldConfig } from \"../config\";\nimport type { DatasetDiagnostic } from \"./types\";\n\nexport interface NormalizeDatasetRowsResult {\n rows: ReadonlyArray<Readonly<Record<string, unknown>>>;\n diagnostics: ReadonlyArray<DatasetDiagnostic>;\n}\n\nfunction isValidDateOnly(value: string): boolean {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value);\n if (!match) return false;\n const year = Number(match[1]);\n const month = Number(match[2]);\n const day = Number(match[3]);\n const date = new Date(Date.UTC(year, month - 1, day));\n return date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day;\n}\n\nfunction normalizeDate(value: unknown, dataType: \"date\" | \"datetime\"): string | undefined {\n if (typeof value !== \"string\") return undefined;\n if (dataType === \"date\" && isValidDateOnly(value)) return value;\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) return undefined;\n return dataType === \"date\" ? parsed.toISOString().slice(0, 10) : parsed.toISOString();\n}\n\nfunction normalizeFieldValue(value: unknown, field: DatasetFieldConfig): unknown | undefined {\n if (value === null || value === undefined || value === \"\") {\n return undefined;\n }\n\n switch (field.coerce) {\n case \"number-string\": {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value !== \"string\") return undefined;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n case \"boolean-string\":\n if (typeof value === \"boolean\") return value;\n return value === \"true\" ? true : value === \"false\" ? false : undefined;\n case \"iso-date\":\n return field.dataType === \"date\" || field.dataType === \"datetime\"\n ? normalizeDate(value, field.dataType)\n : undefined;\n }\n\n switch (field.dataType) {\n case \"string\":\n return typeof value === \"string\" ? value : undefined;\n case \"number\":\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n case \"boolean\":\n return typeof value === \"boolean\" ? value : undefined;\n case \"date\":\n case \"datetime\":\n return normalizeDate(value, field.dataType);\n }\n}\n\nexport function normalizeDatasetRows(\n candidateRows: ReadonlyArray<unknown>,\n dataset: DatasetConfig,\n initialDiagnostics: ReadonlyArray<DatasetDiagnostic> = []\n): NormalizeDatasetRowsResult {\n const diagnostics: DatasetDiagnostic[] = [...initialDiagnostics];\n const rows = candidateRows.map((candidate, rowIndex) => {\n const source =\n candidate !== null && typeof candidate === \"object\" && !Array.isArray(candidate) ? candidate : undefined;\n const output: Record<string, unknown> = {};\n\n for (const field of dataset.fields) {\n const rawValue = source ? readValueAtPath(source, field.sourcePath ?? field.key) : undefined;\n const value = normalizeFieldValue(rawValue, field);\n if (value === undefined) {\n diagnostics.push({\n level: field.required ? \"error\" : \"warning\",\n code: field.required ? \"dataset_required_field_invalid\" : \"dataset_optional_field_invalid\",\n message: `Dataset ${dataset.id} row ${rowIndex + 1} has an invalid value for ${field.key}.`,\n field: field.key,\n rowIndex\n });\n output[field.key] = null;\n } else {\n output[field.key] = value;\n }\n }\n\n return Object.freeze(output);\n });\n\n return {\n rows: Object.freeze(rows),\n diagnostics: Object.freeze(diagnostics)\n };\n}\n","import type { DatasetFieldConfig } from \"../config\";\n\nexport interface DatasetDiagnostic {\n level: \"info\" | \"warning\" | \"error\";\n code: string;\n message: string;\n field?: string;\n rowIndex?: number;\n inputName?: string;\n}\n\nexport interface DatasetResult {\n datasetId: string;\n fields: ReadonlyArray<DatasetFieldConfig>;\n rows: ReadonlyArray<Readonly<Record<string, unknown>>>;\n updatedAt: string;\n requestVersions: Readonly<Record<string, number>>;\n diagnostics: ReadonlyArray<DatasetDiagnostic>;\n}\n\nexport interface DatasetTransformOutput {\n rows: ReadonlyArray<Record<string, unknown>>;\n diagnostics?: ReadonlyArray<DatasetDiagnostic>;\n}\n\nexport interface DatasetTransformContext {\n datasetId: string;\n timezone: string;\n locale: string;\n}\n\nexport interface DatasetTransformer {\n id: string;\n transform(\n inputs: Readonly<Record<string, unknown>>,\n context: Readonly<DatasetTransformContext>\n ): DatasetTransformOutput;\n}\n\nexport class DatasetExecutionError extends Error {\n readonly code: string;\n readonly datasetId: string;\n readonly diagnostics: ReadonlyArray<DatasetDiagnostic>;\n\n constructor(datasetId: string, code: string, message: string, diagnostics: ReadonlyArray<DatasetDiagnostic> = []) {\n super(message);\n this.name = \"DatasetExecutionError\";\n this.datasetId = datasetId;\n this.code = code;\n this.diagnostics = diagnostics;\n }\n}\n","import {\n readValueAtPath,\n stableSerializeJson,\n type DashboardConfig,\n type DatasetConfig,\n type JsonValue\n} from \"../config\";\nimport type { ReadonlyRegistry } from \"../registry\";\nimport { RequestExecutor, type RequestExecutionResult } from \"../provider\";\nimport { emitTelemetry, type VisualizationTelemetrySink } from \"../telemetry\";\nimport type { DashboardContext } from \"../variable\";\nimport { normalizeDatasetRows } from \"./normalize\";\nimport { DatasetExecutionError, type DatasetDiagnostic, type DatasetResult, type DatasetTransformer } from \"./types\";\n\nexport interface RunDatasetOptions {\n signal?: AbortSignal;\n force?: boolean;\n isolated?: boolean;\n}\n\nexport interface DatasetRunnerOptions {\n telemetry?: VisualizationTelemetrySink;\n}\n\ninterface ResolvedDatasetInput {\n name: string;\n requestId: string;\n responsePath?: string;\n execution: RequestExecutionResult;\n value: unknown;\n}\n\nfunction getInputDefinitions(dataset: DatasetConfig) {\n if (dataset.input.type === \"single\") {\n return [[\"default\", dataset.input]] as const;\n }\n return Object.entries(dataset.input.inputs);\n}\n\nfunction toCandidateRows(value: unknown, datasetId: string): ReadonlyArray<unknown> {\n if (value === null || value === undefined) return [];\n if (Array.isArray(value)) return value;\n if (typeof value === \"object\") return [value];\n throw new DatasetExecutionError(\n datasetId,\n \"dataset_input_invalid\",\n `Dataset ${datasetId} input must resolve to an object or an array of objects.`\n );\n}\n\nfunction latestUpdatedAt(inputs: ReadonlyArray<ResolvedDatasetInput>): string {\n const timestamps = inputs.map((input) => Date.parse(input.execution.updatedAt)).filter(Number.isFinite);\n return timestamps.length ? new Date(Math.max(...timestamps)).toISOString() : new Date().toISOString();\n}\n\nexport class DatasetRunner {\n readonly #datasetCache = new Map<string, DatasetResult>();\n readonly #cacheKeysByDatasetId = new Map<string, Set<string>>();\n\n constructor(\n readonly config: DashboardConfig,\n readonly requestExecutor: RequestExecutor,\n readonly transformers: ReadonlyRegistry<DatasetTransformer>,\n readonly options: DatasetRunnerOptions = {}\n ) {}\n\n async run(datasetId: string, context: DashboardContext, options: RunDatasetOptions = {}): Promise<DatasetResult> {\n if (context.dashboardId !== this.config.id) {\n throw new DatasetExecutionError(\n datasetId,\n \"dashboard_context_mismatch\",\n `DashboardContext ${context.dashboardId} cannot be used with dashboard ${this.config.id}.`\n );\n }\n const dataset = this.config.datasets.find((candidate) => candidate.id === datasetId);\n if (!dataset) {\n throw new DatasetExecutionError(datasetId, \"dataset_not_found\", `Dataset not found: ${datasetId}`);\n }\n\n const startedAt = Date.now();\n const isolated = options.isolated ?? false;\n try {\n const resolvedInputs = await Promise.all(\n getInputDefinitions(dataset).map(async ([name, input]): Promise<ResolvedDatasetInput> => {\n const execution = await this.requestExecutor.execute(input.requestId, context, options);\n const value = readValueAtPath(execution.response, input.responsePath);\n if (input.responsePath && value === undefined) {\n throw new DatasetExecutionError(\n dataset.id,\n \"dataset_input_path_missing\",\n `Dataset ${dataset.id} input ${name} path was not found: ${input.responsePath}`,\n [\n {\n level: \"error\",\n code: \"dataset_input_path_missing\",\n message: `Response path was not found: ${input.responsePath}`,\n inputName: name\n }\n ]\n );\n }\n return {\n name,\n requestId: input.requestId,\n ...(input.responsePath ? { responsePath: input.responsePath } : {}),\n execution,\n value\n };\n })\n );\n\n const requestVersions = Object.freeze(\n Object.fromEntries(resolvedInputs.map((input) => [input.requestId, input.execution.version]))\n );\n const cacheKey = stableSerializeJson({\n datasetId: dataset.id,\n requestVersions,\n transformerId: dataset.transformerId ?? null\n } as JsonValue);\n if (!isolated) this.trackCacheKey(dataset.id, cacheKey);\n\n const cached = isolated ? undefined : this.#datasetCache.get(cacheKey);\n if (!options.force && cached) {\n emitTelemetry(this.options.telemetry, {\n name: \"dataset_cache_hit\",\n dashboardId: context.dashboardId,\n datasetId: dataset.id\n });\n return cached;\n }\n\n const namedInputs = Object.freeze(Object.fromEntries(resolvedInputs.map((input) => [input.name, input.value])));\n let candidateRows: ReadonlyArray<unknown>;\n let transformerDiagnostics: ReadonlyArray<DatasetDiagnostic> = [];\n\n if (dataset.transformerId) {\n const transformed = this.transformers.require(dataset.transformerId).transform(namedInputs, {\n datasetId: dataset.id,\n timezone: context.timezone,\n locale: context.locale\n });\n if (!Array.isArray(transformed.rows)) {\n throw new DatasetExecutionError(\n dataset.id,\n \"dataset_transform_invalid\",\n `Dataset transformer ${dataset.transformerId} did not return a rows array.`\n );\n }\n candidateRows = transformed.rows;\n transformerDiagnostics = transformed.diagnostics ?? [];\n } else {\n if (dataset.input.type === \"multiple\") {\n throw new DatasetExecutionError(\n dataset.id,\n \"dataset_transformer_required\",\n `Dataset ${dataset.id} has multiple inputs and requires a transformer.`\n );\n }\n candidateRows = toCandidateRows(resolvedInputs[0]?.value, dataset.id);\n }\n\n const normalized = normalizeDatasetRows(candidateRows, dataset, transformerDiagnostics);\n if (normalized.diagnostics.some((diagnostic) => diagnostic.level === \"error\")) {\n throw new DatasetExecutionError(\n dataset.id,\n \"dataset_validation_failed\",\n `Dataset ${dataset.id} failed field validation.`,\n normalized.diagnostics\n );\n }\n\n const result: DatasetResult = Object.freeze({\n datasetId: dataset.id,\n fields: Object.freeze([...dataset.fields]),\n rows: normalized.rows,\n updatedAt: latestUpdatedAt(resolvedInputs),\n requestVersions,\n diagnostics: normalized.diagnostics\n });\n if (!isolated) this.#datasetCache.set(cacheKey, result);\n emitTelemetry(this.options.telemetry, {\n name: \"dataset_succeeded\",\n dashboardId: context.dashboardId,\n datasetId: dataset.id,\n durationMs: Date.now() - startedAt\n });\n return result;\n } catch (error) {\n emitTelemetry(this.options.telemetry, {\n name: \"dataset_failed\",\n dashboardId: context.dashboardId,\n datasetId,\n durationMs: Date.now() - startedAt,\n errorCode: error instanceof DatasetExecutionError ? error.code : \"dataset_failed\"\n });\n throw error;\n }\n }\n\n async refresh(datasetId: string, context: DashboardContext, signal?: AbortSignal): Promise<DatasetResult> {\n const dataset = this.config.datasets.find((candidate) => candidate.id === datasetId);\n if (!dataset) {\n throw new DatasetExecutionError(datasetId, \"dataset_not_found\", `Dataset not found: ${datasetId}`);\n }\n this.invalidateDataset(datasetId);\n for (const [, input] of getInputDefinitions(dataset)) {\n this.requestExecutor.invalidateRequest(input.requestId);\n }\n return this.run(datasetId, context, { ...(signal ? { signal } : {}), force: true });\n }\n\n invalidateDataset(datasetId: string): void {\n for (const key of this.#cacheKeysByDatasetId.get(datasetId) ?? []) {\n this.#datasetCache.delete(key);\n }\n this.#cacheKeysByDatasetId.delete(datasetId);\n }\n\n clear(): void {\n this.#datasetCache.clear();\n this.#cacheKeysByDatasetId.clear();\n this.requestExecutor.clear();\n }\n\n private trackCacheKey(datasetId: string, cacheKey: string): void {\n const keys = this.#cacheKeysByDatasetId.get(datasetId) ?? new Set<string>();\n keys.add(cacheKey);\n this.#cacheKeysByDatasetId.set(datasetId, keys);\n }\n}\n","import { assertDashboardConfig, type DashboardConfig } from \"../config\";\nimport { DatasetRunner, type DatasetResult, type RunDatasetOptions } from \"../dataset\";\nimport { RequestExecutor } from \"../provider\";\nimport type { CoreRegistries } from \"../registry\";\nimport type { VisualizationTelemetrySink } from \"../telemetry\";\nimport {\n createDashboardContext,\n restoreDashboardContextFromSearch,\n type CreateDashboardContextOptions,\n type DashboardContext,\n type RestoreDashboardContextResult\n} from \"../variable\";\n\nexport interface DashboardDataRuntimeOptions {\n config: unknown;\n registries: CoreRegistries;\n timezone: string;\n locale: string;\n telemetry?: VisualizationTelemetrySink;\n}\n\nexport class DashboardDataRuntime {\n readonly config: DashboardConfig;\n readonly datasetRunner: DatasetRunner;\n readonly #registries: CoreRegistries;\n readonly #contextDefaults: Pick<CreateDashboardContextOptions, \"timezone\" | \"locale\">;\n readonly #telemetry: VisualizationTelemetrySink | undefined;\n\n constructor(options: DashboardDataRuntimeOptions) {\n try {\n new Intl.DateTimeFormat(options.locale, { timeZone: options.timezone }).format(0);\n } catch {\n throw new TypeError(`Invalid locale or timezone: ${options.locale}/${options.timezone}`);\n }\n this.#registries = options.registries;\n this.#telemetry = options.telemetry;\n const telemetryOptions = options.telemetry ? { telemetry: options.telemetry } : {};\n this.config = assertDashboardConfig(options.config, options.registries, telemetryOptions);\n this.#contextDefaults = { timezone: options.timezone, locale: options.locale };\n const requestExecutor = new RequestExecutor(\n this.config,\n options.registries.providers,\n options.registries.requestValueCodecs,\n telemetryOptions\n );\n this.datasetRunner = new DatasetRunner(\n this.config,\n requestExecutor,\n options.registries.transformers,\n telemetryOptions\n );\n }\n\n createContext(variables?: CreateDashboardContextOptions[\"variables\"]): DashboardContext {\n return createDashboardContext(this.config, {\n ...this.#contextDefaults,\n ...(variables ? { variables } : {})\n });\n }\n\n restoreContext(\n search: string,\n variables?: CreateDashboardContextOptions[\"variables\"]\n ): RestoreDashboardContextResult {\n return restoreDashboardContextFromSearch(\n this.config,\n search,\n { ...this.#contextDefaults, ...(variables ? { variables } : {}) },\n this.#telemetry\n );\n }\n\n runDataset(datasetId: string, context: DashboardContext, options?: RunDatasetOptions): Promise<DatasetResult> {\n return this.datasetRunner.run(datasetId, context, options);\n }\n\n refreshDataset(datasetId: string, context: DashboardContext, signal?: AbortSignal): Promise<DatasetResult> {\n return this.datasetRunner.refresh(datasetId, context, signal);\n }\n\n clear(): void {\n this.datasetRunner.clear();\n }\n\n get registries(): CoreRegistries {\n return this.#registries;\n }\n}\n\nexport function createDashboardDataRuntime(options: DashboardDataRuntimeOptions): DashboardDataRuntime {\n return new DashboardDataRuntime(options);\n}\n","import type { DashboardConfig, DatasetConfig } from \"../config\";\n\nexport interface DashboardDependencyGraph {\n readonly requestIdsByDatasetId: ReadonlyMap<string, ReadonlySet<string>>;\n readonly datasetIdsByRequestId: ReadonlyMap<string, ReadonlySet<string>>;\n readonly panelIdsByDatasetId: ReadonlyMap<string, ReadonlySet<string>>;\n readonly datasetIdByPanelId: ReadonlyMap<string, string>;\n}\n\nfunction requestIdsForDataset(dataset: DatasetConfig): string[] {\n return dataset.input.type === \"single\"\n ? [dataset.input.requestId]\n : Object.values(dataset.input.inputs).map((input) => input.requestId);\n}\n\nfunction addToSetMap(map: Map<string, Set<string>>, key: string, value: string): void {\n const values = map.get(key) ?? new Set<string>();\n values.add(value);\n map.set(key, values);\n}\n\nexport function createDashboardDependencyGraph(config: DashboardConfig): DashboardDependencyGraph {\n const requestIdsByDatasetId = new Map<string, ReadonlySet<string>>();\n const datasetIdsByRequestId = new Map<string, Set<string>>();\n const panelIdsByDatasetId = new Map<string, Set<string>>();\n const datasetIdByPanelId = new Map<string, string>();\n\n config.datasets.forEach((dataset) => {\n const requestIds = new Set(requestIdsForDataset(dataset));\n requestIdsByDatasetId.set(dataset.id, requestIds);\n requestIds.forEach((requestId) => addToSetMap(datasetIdsByRequestId, requestId, dataset.id));\n });\n config.panels.forEach((panel) => {\n datasetIdByPanelId.set(panel.id, panel.binding.datasetId);\n addToSetMap(panelIdsByDatasetId, panel.binding.datasetId, panel.id);\n });\n\n return Object.freeze({\n requestIdsByDatasetId,\n datasetIdsByRequestId,\n panelIdsByDatasetId,\n datasetIdByPanelId\n });\n}\n\nexport function collectDownstreamDatasetIds(\n graph: DashboardDependencyGraph,\n requestIds: ReadonlySet<string>\n): Set<string> {\n const datasetIds = new Set<string>();\n requestIds.forEach((requestId) =>\n graph.datasetIdsByRequestId.get(requestId)?.forEach((datasetId) => datasetIds.add(datasetId))\n );\n return datasetIds;\n}\n\nexport function collectDownstreamPanelIds(\n graph: DashboardDependencyGraph,\n datasetIds: ReadonlySet<string>\n): Set<string> {\n const panelIds = new Set<string>();\n datasetIds.forEach((datasetId) =>\n graph.panelIdsByDatasetId.get(datasetId)?.forEach((panelId) => panelIds.add(panelId))\n );\n return panelIds;\n}\n","import type { PanelBinding, PanelConfig, VisualizationEnhancement } from \"../config\";\nimport type { VisualizationAdapter, VisualizationEvent, VisualizationViewModelBase } from \"../adapter\";\nimport type { DatasetResult } from \"../dataset\";\nimport { emitTelemetry } from \"../telemetry\";\nimport { writeDashboardVariable, type DashboardContext } from \"../variable\";\nimport { DashboardDataRuntime, type DashboardDataRuntimeOptions } from \"./dashboard-data-runtime\";\nimport {\n collectDownstreamDatasetIds,\n collectDownstreamPanelIds,\n createDashboardDependencyGraph,\n type DashboardDependencyGraph\n} from \"./dependency-graph\";\nimport type {\n DashboardRuntimeListener,\n DashboardRuntimeSnapshot,\n DashboardVariablePatch,\n DatasetRuntimeState,\n LoadStatus,\n PanelRuntimeState,\n RequestRuntimeState,\n RuntimeError\n} from \"./types\";\n\nexport interface DashboardRuntimeOptions extends DashboardDataRuntimeOptions {\n variables?: DashboardVariablePatch;\n}\n\nexport interface RefreshPanelsOptions {\n deferUnselected?: boolean;\n}\n\nfunction now(): string {\n return new Date().toISOString();\n}\n\nfunction toRuntimeError(error: unknown, fallbackCode: string): RuntimeError {\n const candidate = error as { code?: unknown; message?: unknown };\n return Object.freeze({\n code: typeof candidate?.code === \"string\" ? candidate.code : fallbackCode,\n message: typeof candidate?.message === \"string\" ? candidate.message : String(error),\n cause: error\n });\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof DOMException && error.name === \"AbortError\";\n}\n\nfunction toRecord<T extends { id: string }>(states: ReadonlyMap<string, T>): Readonly<Record<string, T>> {\n return Object.freeze(Object.fromEntries(states));\n}\n\ninterface PanelRefreshOperation {\n controller: AbortController;\n generation: number;\n previousState: PanelRuntimeState;\n}\n\ninterface DatasetLoadOperation {\n controller: AbortController;\n context: DashboardContext;\n generation: number;\n startedAt: string;\n promise: Promise<void>;\n}\n\nexport class DashboardRuntime {\n readonly dataRuntime: DashboardDataRuntime;\n readonly graph: DashboardDependencyGraph;\n readonly #listeners = new Set<DashboardRuntimeListener>();\n readonly #requestStates = new Map<string, RequestRuntimeState>();\n readonly #datasetStates = new Map<string, DatasetRuntimeState>();\n readonly #panelStates = new Map<string, PanelRuntimeState>();\n readonly #panelRefreshes = new Map<string, PanelRefreshOperation>();\n readonly #panelLoads = new Map<string, DatasetLoadOperation>();\n #context: DashboardContext;\n #generation = 0;\n #panelGeneration = 0;\n #activeController: AbortController | undefined;\n #activeDatasetIds = new Set<string>();\n #activeShowsGlobalLoading = false;\n #destroyed = false;\n\n constructor(readonly options: DashboardRuntimeOptions) {\n this.dataRuntime = new DashboardDataRuntime(options);\n this.graph = createDashboardDependencyGraph(this.dataRuntime.config);\n this.#context = this.dataRuntime.createContext(options.variables);\n this.dataRuntime.config.requests.forEach((request) =>\n this.#requestStates.set(request.id, { id: request.id, status: \"idle\", generation: 0 })\n );\n this.dataRuntime.config.datasets.forEach((dataset) =>\n this.#datasetStates.set(dataset.id, { id: dataset.id, status: \"idle\", generation: 0 })\n );\n this.dataRuntime.config.panels.forEach((panel) =>\n this.#panelStates.set(panel.id, { id: panel.id, status: \"idle\", generation: 0, isRefreshing: false })\n );\n }\n\n get config() {\n return this.dataRuntime.config;\n }\n\n get context(): DashboardContext {\n return this.#context;\n }\n\n get snapshot(): DashboardRuntimeSnapshot {\n return Object.freeze({\n generation: this.#generation,\n isGlobalLoading: Boolean(this.#activeController && this.#activeShowsGlobalLoading),\n context: this.#context,\n requestStates: toRecord(this.#requestStates),\n datasetStates: toRecord(this.#datasetStates),\n panelStates: toRecord(this.#panelStates)\n });\n }\n\n subscribe(listener: DashboardRuntimeListener): () => void {\n this.#listeners.add(listener);\n return () => this.#listeners.delete(listener);\n }\n\n load(): Promise<DashboardRuntimeSnapshot> {\n return this.schedule(new Set(this.config.datasets.map((dataset) => dataset.id)), false);\n }\n\n refreshAll(): Promise<DashboardRuntimeSnapshot> {\n return this.schedule(new Set(this.config.datasets.map((dataset) => dataset.id)), true);\n }\n\n refreshDataset(datasetId: string): Promise<DashboardRuntimeSnapshot> {\n const requestIds = this.graph.requestIdsByDatasetId.get(datasetId);\n if (!requestIds) throw new Error(`Dataset not found: ${datasetId}`);\n return this.schedule(collectDownstreamDatasetIds(this.graph, requestIds), true);\n }\n\n loadPanels(panelIds: Iterable<string>): Promise<DashboardRuntimeSnapshot> {\n return this.loadPanelDatasets(this.datasetIdsForPanels(panelIds));\n }\n\n refreshPanels(panelIds: Iterable<string>, options: RefreshPanelsOptions = {}): Promise<DashboardRuntimeSnapshot> {\n const datasetIds = this.datasetIdsForPanels(panelIds);\n if (!datasetIds.size && !options.deferUnselected) return Promise.resolve(this.snapshot);\n this.#activeDatasetIds.forEach((datasetId) => datasetIds.add(datasetId));\n const deferredDatasetIds = options.deferUnselected\n ? this.deferUnselectedDatasets(datasetIds, this.#generation + 1)\n : new Set<string>();\n if (!datasetIds.size) {\n if (deferredDatasetIds.size) {\n this.#generation += 1;\n this.notify();\n }\n return Promise.resolve(this.snapshot);\n }\n const requestIds = this.requestIdsForDatasets(datasetIds);\n const inactiveSharedDatasetIds = collectDownstreamDatasetIds(this.graph, requestIds);\n datasetIds.forEach((datasetId) => inactiveSharedDatasetIds.delete(datasetId));\n this.resetDatasets(inactiveSharedDatasetIds);\n return this.schedule(datasetIds, true);\n }\n\n refreshPanel(panelId: string): Promise<DashboardRuntimeSnapshot> {\n const panel = this.requirePanel(panelId);\n if (this.#activeController || this.#panelLoads.has(panel.binding.datasetId)) return Promise.resolve(this.snapshot);\n return this.schedulePanel(panel);\n }\n\n retryPanel(panelId: string): Promise<DashboardRuntimeSnapshot> {\n return this.refreshPanel(panelId);\n }\n\n setVariables(patch: DashboardVariablePatch, panelIds?: Iterable<string>): Promise<DashboardRuntimeSnapshot> {\n let context = this.#context;\n Object.entries(patch).forEach(([variableId, value]) => {\n context = writeDashboardVariable(this.config, context, variableId, value);\n });\n this.#context = context;\n if (panelIds === undefined) return this.refreshAll();\n\n const activeDatasetIds = this.datasetIdsForPanels(panelIds);\n this.cancelPanelRefreshes(new Set(this.#panelRefreshes.keys()));\n this.cancelPanelLoads(new Set(this.#panelLoads.keys()));\n this.#activeController?.abort();\n this.#activeController = undefined;\n this.#activeDatasetIds.clear();\n this.#activeShowsGlobalLoading = false;\n const generation = ++this.#generation;\n this.#requestStates.forEach((state, requestId) => {\n this.#requestStates.set(requestId, Object.freeze({ id: state.id, status: \"idle\", generation }));\n });\n const inactiveDatasetIds = new Set(this.config.datasets.map((dataset) => dataset.id));\n activeDatasetIds.forEach((datasetId) => inactiveDatasetIds.delete(datasetId));\n this.resetDatasets(inactiveDatasetIds, generation);\n\n if (!activeDatasetIds.size) {\n this.notify();\n return Promise.resolve(this.snapshot);\n }\n return this.schedule(activeDatasetIds, true);\n }\n\n restoreContext(search: string, variables?: DashboardVariablePatch): DashboardRuntimeSnapshot {\n this.cancelPanelRefreshes(new Set(this.#panelRefreshes.keys()), true);\n this.resetDatasets(new Set(this.#panelLoads.keys()));\n this.#context = this.dataRuntime.restoreContext(search, variables).context;\n this.notify();\n return this.snapshot;\n }\n\n async dispatchEvent(event: VisualizationEvent): Promise<void> {\n const panel = this.requirePanel(event.panelId);\n const actions = panel.enhancement?.common?.interactions?.filter((item) => item.event === event.type) ?? [];\n await Promise.all(\n actions.map((item) => this.dataRuntime.registries.actions.require(item.actionId).execute(event, this.#context))\n );\n }\n\n async executePanelAction(panelId: string, actionItemId: string): Promise<void> {\n const panel = this.requirePanel(panelId);\n const action = panel.actions?.find((item) => item.id === actionItemId);\n if (!action) throw new Error(`Panel action not found: ${panelId}/${actionItemId}`);\n await this.dataRuntime.registries.actions.require(action.actionId).execute(\n {\n type: \"dataPointClick\",\n panelId,\n datasetId: panel.binding.datasetId,\n fields: Object.freeze({})\n },\n this.#context\n );\n }\n\n destroy(): void {\n this.#destroyed = true;\n this.#activeController?.abort();\n this.#activeController = undefined;\n this.#activeDatasetIds.clear();\n this.#activeShowsGlobalLoading = false;\n this.cancelPanelLoads(new Set(this.#panelLoads.keys()));\n this.cancelPanelRefreshes(new Set(this.#panelRefreshes.keys()));\n this.#listeners.clear();\n this.dataRuntime.clear();\n }\n\n private requirePanel(panelId: string): PanelConfig {\n const panel = this.config.panels.find((candidate) => candidate.id === panelId);\n if (!panel) throw new Error(`Panel not found: ${panelId}`);\n return panel;\n }\n\n private notify(): void {\n if (this.#destroyed) return;\n const snapshot = this.snapshot;\n this.#listeners.forEach((listener) => listener(snapshot));\n }\n\n private requestIdsForDatasets(datasetIds: ReadonlySet<string>): Set<string> {\n const requestIds = new Set<string>();\n datasetIds.forEach((datasetId) =>\n this.graph.requestIdsByDatasetId.get(datasetId)?.forEach((requestId) => requestIds.add(requestId))\n );\n return requestIds;\n }\n\n private datasetIdsForPanels(panelIds: Iterable<string>): Set<string> {\n const datasetIds = new Set<string>();\n for (const panelId of panelIds) {\n this.requirePanel(panelId);\n const datasetId = this.graph.datasetIdByPanelId.get(panelId);\n if (datasetId) datasetIds.add(datasetId);\n }\n return datasetIds;\n }\n\n private resetDatasets(datasetIds: ReadonlySet<string>, generation = this.#generation): void {\n const panelIds = collectDownstreamPanelIds(this.graph, datasetIds);\n this.cancelPanelRefreshes(panelIds);\n this.cancelPanelLoads(datasetIds);\n datasetIds.forEach((datasetId) => {\n this.#datasetStates.set(datasetId, Object.freeze({ id: datasetId, status: \"idle\", generation }));\n });\n panelIds.forEach((panelId) => {\n this.#panelStates.set(panelId, Object.freeze({ id: panelId, status: \"idle\", generation, isRefreshing: false }));\n });\n }\n\n private deferUnselectedDatasets(selectedDatasetIds: ReadonlySet<string>, generation: number): Set<string> {\n const deferredDatasetIds = new Set(this.config.datasets.map((dataset) => dataset.id));\n selectedDatasetIds.forEach((datasetId) => deferredDatasetIds.delete(datasetId));\n if (!deferredDatasetIds.size) return deferredDatasetIds;\n\n const selectedRequestIds = this.requestIdsForDatasets(selectedDatasetIds);\n const deferredRequestIds = this.requestIdsForDatasets(deferredDatasetIds);\n deferredRequestIds.forEach((requestId) => {\n this.dataRuntime.datasetRunner.requestExecutor.invalidateRequest(requestId);\n if (!selectedRequestIds.has(requestId)) {\n this.#requestStates.set(requestId, Object.freeze({ id: requestId, status: \"idle\", generation }));\n }\n });\n deferredDatasetIds.forEach((datasetId) => {\n this.dataRuntime.datasetRunner.invalidateDataset(datasetId);\n });\n this.resetDatasets(deferredDatasetIds, generation);\n return deferredDatasetIds;\n }\n\n private loadPanelDatasets(datasetIds: ReadonlySet<string>): Promise<DashboardRuntimeSnapshot> {\n if (this.#destroyed) return Promise.reject(new Error(\"DashboardRuntime has been destroyed.\"));\n const operations: Promise<void>[] = [];\n datasetIds.forEach((datasetId) => {\n const existing = this.#panelLoads.get(datasetId);\n if (existing) {\n operations.push(existing.promise);\n return;\n }\n const status = this.#datasetStates.get(datasetId)?.status;\n if (status !== \"idle\" && status !== \"cancelled\") return;\n operations.push(this.schedulePanelLoad(datasetId));\n });\n if (!operations.length) return Promise.resolve(this.snapshot);\n return Promise.all(operations).then(() => this.snapshot);\n }\n\n private schedulePanelLoad(datasetId: string): Promise<void> {\n const controller = new AbortController();\n const generation = ++this.#panelGeneration;\n const context = this.#context;\n const startedAt = now();\n const operation: DatasetLoadOperation = {\n controller,\n context,\n generation,\n startedAt,\n promise: Promise.resolve()\n };\n this.#panelLoads.set(datasetId, operation);\n\n const requestIds = this.graph.requestIdsByDatasetId.get(datasetId) ?? new Set<string>();\n const panelIds = this.graph.panelIdsByDatasetId.get(datasetId) ?? new Set<string>();\n requestIds.forEach((requestId) => {\n this.#requestStates.set(requestId, Object.freeze({ id: requestId, status: \"loading\", generation, startedAt }));\n });\n const previousDataset = this.#datasetStates.get(datasetId)!;\n const { error: _datasetError, ...datasetWithoutError } = previousDataset;\n this.#datasetStates.set(datasetId, Object.freeze({ ...datasetWithoutError, status: \"loading\", generation }));\n panelIds.forEach((panelId) => {\n const previous = this.#panelStates.get(panelId)!;\n const { error: _panelError, ...stateWithoutError } = previous;\n this.#panelStates.set(\n panelId,\n Object.freeze({\n ...stateWithoutError,\n status: previous.viewModel ? previous.status : \"loading\",\n generation,\n isRefreshing: Boolean(previous.viewModel)\n })\n );\n });\n this.notify();\n\n operation.promise = this.executePanelLoad(datasetId, operation, requestIds, panelIds);\n return operation.promise;\n }\n\n private async executePanelLoad(\n datasetId: string,\n operation: DatasetLoadOperation,\n requestIds: ReadonlySet<string>,\n panelIds: ReadonlySet<string>\n ): Promise<void> {\n try {\n const result = await this.dataRuntime.runDataset(datasetId, operation.context, {\n signal: operation.controller.signal\n });\n if (this.#panelLoads.get(datasetId) !== operation || this.#destroyed) return;\n this.#datasetStates.set(\n datasetId,\n Object.freeze({\n id: datasetId,\n status: result.rows.length ? \"success\" : \"empty\",\n generation: operation.generation,\n result,\n lastSuccessfulAt: result.updatedAt\n })\n );\n requestIds.forEach((requestId) => {\n this.#requestStates.set(\n requestId,\n Object.freeze({\n id: requestId,\n status: \"success\",\n generation: operation.generation,\n startedAt: operation.startedAt,\n completedAt: now()\n })\n );\n });\n this.config.panels\n .filter((panel) => panel.binding.datasetId === datasetId && panelIds.has(panel.id))\n .forEach((panel) => this.adaptPanel(panel, result, operation.generation, operation.context));\n } catch (error) {\n if (this.#panelLoads.get(datasetId) !== operation || this.#destroyed || operation.controller.signal.aborted) {\n return;\n }\n const status: LoadStatus = isAbortError(error) ? \"cancelled\" : \"error\";\n const previous = this.#datasetStates.get(datasetId)!;\n this.#datasetStates.set(\n datasetId,\n Object.freeze({\n ...previous,\n status: previous.result && !isAbortError(error) ? \"stale\" : status,\n generation: operation.generation,\n error: toRuntimeError(error, \"dataset_failed\")\n })\n );\n requestIds.forEach((requestId) => {\n this.#requestStates.set(\n requestId,\n Object.freeze({\n id: requestId,\n status,\n generation: operation.generation,\n startedAt: operation.startedAt,\n completedAt: now(),\n error: toRuntimeError(error, \"request_failed\")\n })\n );\n });\n panelIds.forEach((panelId) => this.failPanel(panelId, operation.generation, error, \"dataset_failed\"));\n } finally {\n if (this.#panelLoads.get(datasetId) === operation) {\n this.#panelLoads.delete(datasetId);\n this.notify();\n }\n }\n }\n\n private cancelPanelLoads(datasetIds: ReadonlySet<string>): void {\n datasetIds.forEach((datasetId) => {\n const operation = this.#panelLoads.get(datasetId);\n if (!operation) return;\n this.#panelLoads.delete(datasetId);\n operation.controller.abort();\n });\n }\n\n private applyPresets(panel: PanelConfig): VisualizationEnhancement | undefined {\n let enhancement = panel.enhancement;\n panel.enhancement?.common?.presetIds?.forEach((presetId) => {\n enhancement = this.dataRuntime.registries.presets.require(presetId).apply(enhancement);\n });\n return enhancement;\n }\n\n private adaptPanel(\n panel: PanelConfig,\n dataset: DatasetResult,\n generation: number,\n context: DashboardContext = this.#context\n ): void {\n try {\n const definition = this.dataRuntime.registries.rendererDefinitions.require(panel.rendererId);\n const adapter = this.dataRuntime.registries.adapters.require(\n panel.adapterId ?? definition.defaultAdapterId\n ) as VisualizationAdapter<PanelBinding, VisualizationEnhancement, VisualizationViewModelBase>;\n const enhancement = this.applyPresets(panel);\n const viewModel = adapter.adapt({\n dataset,\n binding: panel.binding,\n ...(enhancement ? { enhancement } : {}),\n context\n });\n const status: LoadStatus = viewModel.empty ? \"empty\" : \"success\";\n this.#panelStates.set(\n panel.id,\n Object.freeze({\n id: panel.id,\n status,\n generation,\n isRefreshing: false,\n viewModel,\n dataset,\n lastSuccessfulAt: dataset.updatedAt\n })\n );\n } catch (error) {\n emitTelemetry(this.options.telemetry, {\n name: \"adapter_failed\",\n dashboardId: this.config.id,\n panelId: panel.id,\n datasetId: panel.binding.datasetId,\n errorCode: \"adapter_failed\"\n });\n this.failPanel(panel.id, generation, error, \"adapter_failed\");\n }\n }\n\n private failPanel(panelId: string, generation: number, error: unknown, code: string): void {\n const previous = this.#panelStates.get(panelId)!;\n this.#panelStates.set(\n panelId,\n Object.freeze({\n ...previous,\n status: previous.viewModel ? \"stale\" : isAbortError(error) ? \"cancelled\" : \"error\",\n generation,\n isRefreshing: false,\n error: toRuntimeError(error, code)\n })\n );\n }\n\n private cancelPanelRefreshes(panelIds: ReadonlySet<string>, restore = false): void {\n panelIds.forEach((panelId) => {\n const operation = this.#panelRefreshes.get(panelId);\n if (!operation) return;\n this.#panelRefreshes.delete(panelId);\n operation.controller.abort();\n if (restore && this.#panelStates.get(panelId)?.generation === operation.generation) {\n this.#panelStates.set(panelId, operation.previousState);\n }\n });\n }\n\n private async schedulePanel(panel: PanelConfig): Promise<DashboardRuntimeSnapshot> {\n if (this.#destroyed) throw new Error(\"DashboardRuntime has been destroyed.\");\n const datasetId = panel.binding.datasetId;\n const previousOperation = this.#panelRefreshes.get(panel.id);\n const previousState = previousOperation?.previousState ?? this.#panelStates.get(panel.id)!;\n if (previousOperation) {\n this.#panelRefreshes.delete(panel.id);\n previousOperation.controller.abort();\n }\n\n const controller = new AbortController();\n const generation = ++this.#panelGeneration;\n const context = this.#context;\n const operation = { controller, generation, previousState };\n this.#panelRefreshes.set(panel.id, operation);\n\n const { error: _error, viewModel, dataset, ...stateWithoutResult } = previousState;\n const hasVisibleViewModel = Boolean(viewModel && !viewModel.empty);\n this.#panelStates.set(\n panel.id,\n Object.freeze({\n ...stateWithoutResult,\n ...(hasVisibleViewModel && viewModel ? { viewModel } : {}),\n ...(hasVisibleViewModel && dataset ? { dataset } : {}),\n status: hasVisibleViewModel ? (previousState.status === \"stale\" ? \"success\" : previousState.status) : \"loading\",\n generation,\n isRefreshing: hasVisibleViewModel\n })\n );\n this.notify();\n\n try {\n const result = await this.dataRuntime.runDataset(datasetId, context, {\n signal: controller.signal,\n force: true,\n isolated: true\n });\n if (this.#panelRefreshes.get(panel.id) !== operation || this.#destroyed) return this.snapshot;\n this.adaptPanel(panel, result, generation, context);\n } catch (error) {\n if (this.#panelRefreshes.get(panel.id) !== operation || this.#destroyed || controller.signal.aborted) {\n return this.snapshot;\n }\n this.failPanel(panel.id, generation, error, \"dataset_failed\");\n } finally {\n if (this.#panelRefreshes.get(panel.id) === operation) {\n this.#panelRefreshes.delete(panel.id);\n this.notify();\n }\n }\n return this.snapshot;\n }\n\n private async schedule(\n datasetIds: Set<string>,\n invalidate: boolean,\n showGlobalLoading = true\n ): Promise<DashboardRuntimeSnapshot> {\n if (this.#destroyed) throw new Error(\"DashboardRuntime has been destroyed.\");\n const requestIds = this.requestIdsForDatasets(datasetIds);\n const panelIds = collectDownstreamPanelIds(this.graph, datasetIds);\n this.cancelPanelRefreshes(panelIds);\n this.cancelPanelLoads(datasetIds);\n this.#activeController?.abort();\n const controller = new AbortController();\n this.#activeController = controller;\n this.#activeDatasetIds = new Set(datasetIds);\n this.#activeShowsGlobalLoading = showGlobalLoading;\n const generation = ++this.#generation;\n const startedAt = now();\n\n if (invalidate) {\n requestIds.forEach((requestId) => this.dataRuntime.datasetRunner.requestExecutor.invalidateRequest(requestId));\n datasetIds.forEach((datasetId) => this.dataRuntime.datasetRunner.invalidateDataset(datasetId));\n }\n\n requestIds.forEach((requestId) => {\n this.#requestStates.set(requestId, Object.freeze({ id: requestId, status: \"loading\", generation, startedAt }));\n });\n datasetIds.forEach((datasetId) => {\n const previous = this.#datasetStates.get(datasetId)!;\n const { error: _error, ...stateWithoutError } = previous;\n this.#datasetStates.set(\n datasetId,\n Object.freeze({\n ...stateWithoutError,\n status: \"loading\",\n generation\n })\n );\n });\n panelIds.forEach((panelId) => {\n const previous = this.#panelStates.get(panelId)!;\n const { error: _error, viewModel, dataset, ...stateWithoutResult } = previous;\n const hasVisibleViewModel = Boolean(viewModel && !viewModel.empty);\n this.#panelStates.set(\n panelId,\n Object.freeze({\n ...stateWithoutResult,\n ...(hasVisibleViewModel && viewModel ? { viewModel } : {}),\n ...(hasVisibleViewModel && dataset ? { dataset } : {}),\n status: hasVisibleViewModel ? previous.status : \"loading\",\n generation,\n isRefreshing: hasVisibleViewModel\n })\n );\n });\n this.notify();\n\n await Promise.all(\n Array.from(datasetIds, async (datasetId) => {\n try {\n const result = await this.dataRuntime.runDataset(datasetId, this.#context, { signal: controller.signal });\n if (generation !== this.#generation || this.#destroyed) return;\n this.#datasetStates.set(\n datasetId,\n Object.freeze({\n id: datasetId,\n status: result.rows.length ? \"success\" : \"empty\",\n generation,\n result,\n lastSuccessfulAt: result.updatedAt\n })\n );\n this.graph.requestIdsByDatasetId.get(datasetId)?.forEach((requestId) => {\n this.#requestStates.set(\n requestId,\n Object.freeze({\n id: requestId,\n status: \"success\",\n generation,\n startedAt,\n completedAt: now()\n })\n );\n });\n this.config.panels\n .filter((panel) => panel.binding.datasetId === datasetId && panelIds.has(panel.id))\n .forEach((panel) => this.adaptPanel(panel, result, generation));\n } catch (error) {\n if (generation !== this.#generation || this.#destroyed) return;\n const status: LoadStatus = isAbortError(error) ? \"cancelled\" : \"error\";\n const previous = this.#datasetStates.get(datasetId)!;\n this.#datasetStates.set(\n datasetId,\n Object.freeze({\n ...previous,\n status: previous.result && !isAbortError(error) ? \"stale\" : status,\n generation,\n error: toRuntimeError(error, \"dataset_failed\")\n })\n );\n this.graph.requestIdsByDatasetId.get(datasetId)?.forEach((requestId) => {\n this.#requestStates.set(\n requestId,\n Object.freeze({\n id: requestId,\n status,\n generation,\n startedAt,\n completedAt: now(),\n error: toRuntimeError(error, \"request_failed\")\n })\n );\n });\n this.config.panels\n .filter((panel) => panel.binding.datasetId === datasetId && panelIds.has(panel.id))\n .forEach((panel) => this.failPanel(panel.id, generation, error, \"dataset_failed\"));\n } finally {\n if (generation === this.#generation && this.#activeController === controller && !this.#destroyed) {\n this.notify();\n }\n }\n })\n );\n\n if (generation === this.#generation && this.#activeController === controller) {\n this.#activeController = undefined;\n this.#activeDatasetIds.clear();\n this.#activeShowsGlobalLoading = false;\n this.notify();\n }\n return this.snapshot;\n }\n}\n\nexport function createDashboardRuntime(options: DashboardRuntimeOptions): DashboardRuntime {\n return new DashboardRuntime(options);\n}\n"],"names":["dashboardConfigRuntimeSchema","createTypeBoxRuntimeSchema","DashboardConfigSchema","JsonValueSchema","parseDashboardConfig","value","isJsonValue","RuntimeSchemaValidationError","DashboardConfigValidationError","diagnostics","diagnostic","__publicField","findDuplicates","values","seen","duplicates","bindingFields","binding","field","addFieldSemanticDiagnostic","panelIndex","fieldId","expectation","predicate","addBindingSemanticDiagnostics","panel","fieldsById","metricNumber","category","dimension","check","format","_c","_b","_a","stableSerializeJson","rowFields","duplicateDimension","columnDisplays","display","addPluginSchemaDiagnostics","definition","bindingResult","issue","enhancementResult","validateDashboardConfig","registries","options","structureResult","config","variables","variableIds","variable","requestIds","request","datasetsById","dataset","item","code","path","ids","id","urlKey","control","index","variableId","preset","presetId","optionValues","option","optionValue","requestIndex","provider","inputName","datasetIndex","fieldKey","input","fieldIndex","expectedType","fieldIds","_d","_e","_f","_g","_h","minFontSize","_i","maxFontSize","_j","adapterId","_l","_k","_n","_m","interaction","action","actionId","actionIndex","emitTelemetry","assertDashboardConfig","result","blockedPathSegments","readValueAtPath","source","current","segment","RequestInputError","requestId","message","isEmptyValue","resolveDataRequestInput","context","codecs","cloneJsonValue","readDashboardVariable","encoded","ProviderInputValidationError","providerId","operationId","issues","createAbortError","isAbortError","error","signal","createRequestCacheKey","RequestExecutor","providers","__privateAdd","_cache","_inflight","_isolatedControllers","_keysByRequestId","_version","_executionSequence","requestConfigId","candidate","callerSignal","cacheKey","isolated","executionId","__privateWrapper","cached","__privateGet","existing","abortExisting","operation","inputValidation","startedAt","controller","abortRequest","promise","event","response","entry","aborted","key","keys","createCoreRegistries","PluginRegistry","createRequestValueCodecRegistry","registerStandardCore","STANDARD_ADAPTERS","STANDARD_RENDERER_DEFINITIONS","createStandardCoreRegistries","RequestValueCodecError","codecId","requireFiniteNumber","isValidDateOnly","match","year","month","day","date","BUILT_IN_REQUEST_VALUE_CODECS","dateOnly","parsed","normalizeDate","dataType","normalizeFieldValue","normalizeDatasetRows","candidateRows","initialDiagnostics","rows","rowIndex","output","rawValue","DatasetExecutionError","datasetId","getInputDefinitions","toCandidateRows","latestUpdatedAt","inputs","timestamps","DatasetRunner","requestExecutor","transformers","_datasetCache","_cacheKeysByDatasetId","resolvedInputs","name","execution","requestVersions","namedInputs","transformerDiagnostics","transformed","normalized","DashboardDataRuntime","_registries","_contextDefaults","_telemetry","__privateSet","telemetryOptions","createDashboardContext","search","restoreDashboardContextFromSearch","createDashboardDataRuntime","requestIdsForDataset","addToSetMap","map","createDashboardDependencyGraph","requestIdsByDatasetId","datasetIdsByRequestId","panelIdsByDatasetId","datasetIdByPanelId","collectDownstreamDatasetIds","graph","datasetIds","collectDownstreamPanelIds","panelIds","panelId","now","toRuntimeError","fallbackCode","toRecord","states","DashboardRuntime","_listeners","_requestStates","_datasetStates","_panelStates","_panelRefreshes","_panelLoads","_context","_generation","_panelGeneration","_activeController","_activeDatasetIds","_activeShowsGlobalLoading","_destroyed","listener","deferredDatasetIds","inactiveSharedDatasetIds","patch","writeDashboardVariable","activeDatasetIds","generation","state","inactiveDatasetIds","actions","actionItemId","snapshot","selectedDatasetIds","selectedRequestIds","operations","status","previousDataset","_datasetError","datasetWithoutError","previous","_panelError","stateWithoutError","enhancement","adapter","viewModel","restore","previousOperation","previousState","_error","stateWithoutResult","hasVisibleViewModel","invalidate","showGlobalLoading","createDashboardRuntime"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dashboard-runtime-6VlVQIuQ.js","sources":["../src/core/config/dashboard-config.ts","../src/core/config/config-validator.ts","../src/core/config/value-path.ts","../src/core/provider/resolve-request-input.ts","../src/core/provider/request-executor.ts","../src/core/registry/core-registries.ts","../src/core/registry/register-standard.ts","../src/core/provider/request-value-codec.ts","../src/core/dataset/normalize.ts","../src/core/dataset/types.ts","../src/core/dataset/dataset-runner.ts","../src/core/runtime/dashboard-data-runtime.ts","../src/core/runtime/dependency-graph.ts","../src/core/runtime/dashboard-runtime.ts"],"sourcesContent":["import { DashboardConfigSchema, JsonValueSchema, type DashboardConfig } from \"./dashboard-config-schema\";\nimport { createTypeBoxRuntimeSchema, RuntimeSchemaValidationError } from \"./runtime-schema\";\nimport { isJsonValue } from \"./serializable\";\n\nexport const dashboardConfigRuntimeSchema = createTypeBoxRuntimeSchema(DashboardConfigSchema, [JsonValueSchema]);\n\nexport function parseDashboardConfig(value: unknown): DashboardConfig {\n if (!isJsonValue(value)) {\n throw new RuntimeSchemaValidationError([\n {\n path: \"/\",\n keyword: \"jsonSerializable\",\n message: \"must contain only finite JSON values and must not contain cycles or class instances\",\n params: {}\n }\n ]);\n }\n return dashboardConfigRuntimeSchema.assert(value);\n}\n","import type { VisualizationRendererDefinition } from \"../adapter\";\nimport type { CoreRegistries } from \"../registry\";\nimport type { VisualizationTelemetrySink } from \"../telemetry\";\nimport { emitTelemetry } from \"../telemetry\";\nimport { dashboardConfigRuntimeSchema } from \"./dashboard-config\";\nimport type { DashboardConfig, DatasetFieldConfig, PanelBinding, PanelConfig } from \"./dashboard-config-schema\";\nimport { isJsonValue, stableSerializeJson } from \"./serializable\";\n\nexport interface ConfigDiagnostic {\n level: \"error\";\n code: string;\n message: string;\n path: string;\n}\n\nexport type DashboardConfigValidationResult =\n | { valid: true; config: DashboardConfig; diagnostics: readonly [] }\n | { valid: false; diagnostics: ReadonlyArray<ConfigDiagnostic> };\n\nexport interface ValidateDashboardConfigOptions {\n telemetry?: VisualizationTelemetrySink;\n}\n\nexport class DashboardConfigValidationError extends Error {\n readonly diagnostics: ReadonlyArray<ConfigDiagnostic>;\n\n constructor(diagnostics: ReadonlyArray<ConfigDiagnostic>) {\n super(diagnostics.map((diagnostic) => `${diagnostic.path}: ${diagnostic.message}`).join(\"\\n\"));\n this.name = \"DashboardConfigValidationError\";\n this.diagnostics = diagnostics;\n }\n}\n\nfunction findDuplicates(values: ReadonlyArray<string>): string[] {\n const seen = new Set<string>();\n const duplicates = new Set<string>();\n values.forEach((value) => (seen.has(value) ? duplicates.add(value) : seen.add(value)));\n return Array.from(duplicates);\n}\n\nfunction bindingFields(binding: PanelBinding): string[] {\n switch (binding.type) {\n case \"metric\":\n return [binding.valueField, binding.compareField].filter((field): field is string => Boolean(field));\n case \"line\":\n return [binding.xField, ...binding.yFields, binding.seriesField].filter((field): field is string =>\n Boolean(field)\n );\n case \"bar\":\n return [binding.categoryField, ...binding.valueFields, binding.seriesField].filter((field): field is string =>\n Boolean(field)\n );\n case \"pie\":\n return [binding.nameField, binding.valueField];\n case \"table\":\n return binding.columns;\n case \"wordCloud\":\n return [...binding.labelFields, binding.valueField, binding.semanticField].filter((field): field is string =>\n Boolean(field)\n );\n case \"pivotTableS2\":\n return [...binding.rowFields, ...binding.columnFields, ...binding.valueFields];\n }\n}\n\nfunction addFieldSemanticDiagnostic(\n diagnostics: ConfigDiagnostic[],\n panelIndex: number,\n field: DatasetFieldConfig | undefined,\n fieldId: string,\n expectation: string,\n predicate: (field: DatasetFieldConfig) => boolean\n): void {\n if (!field || predicate(field)) return;\n diagnostics.push({\n level: \"error\",\n code: \"panel_field_semantics_invalid\",\n message: `Field ${fieldId} must be ${expectation}; received ${field.role}/${field.dataType}.`,\n path: `/panels/${panelIndex}/binding`\n });\n}\n\nfunction addBindingSemanticDiagnostics(\n diagnostics: ConfigDiagnostic[],\n panel: PanelConfig,\n panelIndex: number,\n fieldsById: ReadonlyMap<string, DatasetFieldConfig>\n): void {\n const metricNumber = (field: DatasetFieldConfig) => field.role === \"metric\" && field.dataType === \"number\";\n const category = (field: DatasetFieldConfig) => field.role === \"dimension\" || field.role === \"time\";\n const dimension = (field: DatasetFieldConfig) => field.role === \"dimension\";\n const check = (fieldId: string, expectation: string, predicate: (field: DatasetFieldConfig) => boolean) =>\n addFieldSemanticDiagnostic(diagnostics, panelIndex, fieldsById.get(fieldId), fieldId, expectation, predicate);\n\n switch (panel.binding.type) {\n case \"metric\":\n check(panel.binding.valueField, \"a numeric metric\", metricNumber);\n if (panel.binding.compareField) check(panel.binding.compareField, \"a numeric metric\", metricNumber);\n break;\n case \"line\":\n check(panel.binding.xField, \"a dimension or time field\", category);\n panel.binding.yFields.forEach((fieldId) => check(fieldId, \"a numeric metric\", metricNumber));\n if (panel.binding.seriesField) {\n check(panel.binding.seriesField, \"a dimension field\", dimension);\n if (panel.binding.yFields.length !== 1) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_series_value_arity_invalid\",\n message: \"Line binding with seriesField must contain exactly one yField.\",\n path: `/panels/${panelIndex}/binding/yFields`\n });\n }\n }\n const axisKeys = new Set(\n panel.binding.yFields.flatMap((fieldId) => {\n const field = fieldsById.get(fieldId);\n if (!field) return [];\n const format = panel.enhancement?.common?.formatOverrides?.[fieldId] ?? field.format ?? { type: \"number\" };\n return [stableSerializeJson({ format, unit: field.unit ?? null })];\n })\n );\n if (axisKeys.size > 2) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_line_axis_count_invalid\",\n message: \"Line binding supports at most two distinct format and unit axis groups.\",\n path: `/panels/${panelIndex}/binding/yFields`\n });\n }\n break;\n case \"bar\":\n check(panel.binding.categoryField, \"a dimension or time field\", category);\n panel.binding.valueFields.forEach((fieldId) => check(fieldId, \"a numeric metric\", metricNumber));\n if (panel.binding.seriesField) {\n check(panel.binding.seriesField, \"a dimension field\", dimension);\n if (panel.binding.valueFields.length !== 1) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_series_value_arity_invalid\",\n message: \"Bar binding with seriesField must contain exactly one valueField.\",\n path: `/panels/${panelIndex}/binding/valueFields`\n });\n }\n }\n break;\n case \"pie\":\n check(panel.binding.nameField, \"a dimension or time field\", category);\n check(panel.binding.valueField, \"a numeric metric\", metricNumber);\n break;\n case \"wordCloud\":\n panel.binding.labelFields.forEach((fieldId) => check(fieldId, \"a dimension field\", dimension));\n check(panel.binding.valueField, \"a numeric metric\", metricNumber);\n if (panel.binding.semanticField) check(panel.binding.semanticField, \"a dimension field\", dimension);\n break;\n case \"pivotTableS2\": {\n panel.binding.rowFields.forEach((fieldId) => check(fieldId, \"a dimension or time field\", category));\n panel.binding.columnFields.forEach((fieldId) => check(fieldId, \"a dimension or time field\", category));\n panel.binding.valueFields.forEach((fieldId) => check(fieldId, \"a numeric metric\", metricNumber));\n const rowFields = new Set(panel.binding.rowFields);\n const duplicateDimension = panel.binding.columnFields.find((fieldId) => rowFields.has(fieldId));\n if (duplicateDimension) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_pivot_dimension_duplicate\",\n message: `Pivot table field ${duplicateDimension} cannot be used as both a row and column dimension.`,\n path: `/panels/${panelIndex}/binding`\n });\n }\n break;\n }\n case \"table\": {\n const columnDisplays = panel.enhancement?.type === \"table\" ? panel.enhancement.table?.columnDisplays : undefined;\n Object.entries(columnDisplays ?? {}).forEach(([fieldId, display]) => {\n if (display.type === \"progress\" || display.type === \"trend\") {\n check(fieldId, `a numeric field for ${display.type} display`, (field) => field.dataType === \"number\");\n }\n });\n break;\n }\n }\n}\n\nfunction addPluginSchemaDiagnostics(\n diagnostics: ConfigDiagnostic[],\n definition: VisualizationRendererDefinition,\n panel: DashboardConfig[\"panels\"][number],\n panelIndex: number\n): void {\n const bindingResult = definition.bindingSchema.validate(panel.binding);\n if (!bindingResult.success) {\n bindingResult.issues.forEach((issue) =>\n diagnostics.push({\n level: \"error\",\n code: \"panel_binding_schema_invalid\",\n message: issue.message,\n path: `/panels/${panelIndex}/binding${issue.path === \"/\" ? \"\" : issue.path}`\n })\n );\n }\n if (panel.enhancement) {\n const enhancementResult = definition.enhancementSchema.validate(panel.enhancement);\n if (!enhancementResult.success) {\n enhancementResult.issues.forEach((issue) =>\n diagnostics.push({\n level: \"error\",\n code: \"panel_enhancement_schema_invalid\",\n message: issue.message,\n path: `/panels/${panelIndex}/enhancement${issue.path === \"/\" ? \"\" : issue.path}`\n })\n );\n }\n }\n}\n\nexport function validateDashboardConfig(\n value: unknown,\n registries: CoreRegistries,\n options: ValidateDashboardConfigOptions = {}\n): DashboardConfigValidationResult {\n if (!isJsonValue(value)) {\n return {\n valid: false,\n diagnostics: [\n {\n level: \"error\",\n code: \"config_not_serializable\",\n message:\n \"DashboardConfig must contain only finite JSON values and must not contain cycles or class instances.\",\n path: \"/\"\n }\n ]\n };\n }\n\n const structureResult = dashboardConfigRuntimeSchema.validate(value);\n if (!structureResult.success) {\n return {\n valid: false,\n diagnostics: structureResult.issues.map((issue) => ({\n level: \"error\",\n code: \"config_schema_invalid\",\n message: issue.message,\n path: issue.path\n }))\n };\n }\n\n const config = structureResult.value;\n const diagnostics: ConfigDiagnostic[] = [];\n const variables = config.variables ?? [];\n const variableIds = new Set(variables.map((variable) => variable.id));\n const requestIds = new Set(config.requests.map((request) => request.id));\n const datasetsById = new Map(config.datasets.map((dataset) => [dataset.id, dataset]));\n\n const idGroups = [\n [\"variable_id_duplicate\", \"/variables\", variables.map((item) => item.id)],\n [\"filter_control_id_duplicate\", \"/filterBar/controls\", (config.filterBar?.controls ?? []).map((item) => item.id)],\n [\"request_id_duplicate\", \"/requests\", config.requests.map((item) => item.id)],\n [\"dataset_id_duplicate\", \"/datasets\", config.datasets.map((item) => item.id)],\n [\"panel_id_duplicate\", \"/panels\", config.panels.map((item) => item.id)]\n ] as const;\n idGroups.forEach(([code, path, ids]) =>\n findDuplicates(ids).forEach((id) =>\n diagnostics.push({ level: \"error\", code, message: `Duplicate ID: ${id}`, path })\n )\n );\n\n findDuplicates(variables.flatMap((variable) => (variable.urlKey ? [variable.urlKey] : []))).forEach((urlKey) =>\n diagnostics.push({\n level: \"error\",\n code: \"variable_url_key_duplicate\",\n message: `Duplicate variable URL key: ${urlKey}`,\n path: \"/variables\"\n })\n );\n\n (config.filterBar?.controls ?? []).forEach((control, index) => {\n const ids = control.type === \"date-range\" ? [control.startVariableId, control.endVariableId] : [control.variableId];\n ids.forEach((variableId) => {\n if (!variableIds.has(variableId)) {\n diagnostics.push({\n level: \"error\",\n code: \"filter_variable_not_found\",\n message: `Filter control ${control.id} references missing variable: ${variableId}`,\n path: `/filterBar/controls/${index}`\n });\n }\n });\n if (control.type === \"date-range\") {\n findDuplicates((control.presets ?? []).map((preset) => preset.id)).forEach((presetId) =>\n diagnostics.push({\n level: \"error\",\n code: \"filter_preset_id_duplicate\",\n message: `Duplicate preset ID in filter ${control.id}: ${presetId}`,\n path: `/filterBar/controls/${index}/presets`\n })\n );\n } else {\n const optionValues = control.options.map((option) => stableSerializeJson(option.value));\n findDuplicates(optionValues).forEach((optionValue) =>\n diagnostics.push({\n level: \"error\",\n code: \"filter_option_value_duplicate\",\n message: `Duplicate option value in filter ${control.id}: ${optionValue}`,\n path: `/filterBar/controls/${index}/options`\n })\n );\n }\n });\n\n config.requests.forEach((request, requestIndex) => {\n const provider = registries.providers.get(request.providerId);\n if (!provider) {\n diagnostics.push({\n level: \"error\",\n code: \"request_provider_not_found\",\n message: `Provider is not registered: ${request.providerId}`,\n path: `/requests/${requestIndex}/providerId`\n });\n } else if (!provider.operations[request.operationId]) {\n diagnostics.push({\n level: \"error\",\n code: \"request_operation_not_found\",\n message: `Provider operation is not registered: ${request.providerId}/${request.operationId}`,\n path: `/requests/${requestIndex}/operationId`\n });\n }\n\n Object.entries(request.input ?? {}).forEach(([inputName, binding]) => {\n if (binding.source !== \"variable\") return;\n if (!variableIds.has(binding.variableId)) {\n diagnostics.push({\n level: \"error\",\n code: \"request_variable_not_found\",\n message: `Request input references missing variable: ${binding.variableId}`,\n path: `/requests/${requestIndex}/input/${inputName}/variableId`\n });\n }\n if (binding.codecId && !registries.requestValueCodecs.has(binding.codecId)) {\n diagnostics.push({\n level: \"error\",\n code: \"request_codec_not_found\",\n message: `Request value codec is not registered: ${binding.codecId}`,\n path: `/requests/${requestIndex}/input/${inputName}/codecId`\n });\n }\n });\n });\n\n config.datasets.forEach((dataset, datasetIndex) => {\n findDuplicates(dataset.fields.map((field) => field.key)).forEach((fieldKey) =>\n diagnostics.push({\n level: \"error\",\n code: \"dataset_field_key_duplicate\",\n message: `Duplicate field key in dataset ${dataset.id}: ${fieldKey}`,\n path: `/datasets/${datasetIndex}/fields`\n })\n );\n const inputReferences =\n dataset.input.type === \"single\" ? ([[\"default\", dataset.input]] as const) : Object.entries(dataset.input.inputs);\n inputReferences.forEach(([inputName, input]) => {\n if (!requestIds.has(input.requestId)) {\n diagnostics.push({\n level: \"error\",\n code: \"dataset_request_not_found\",\n message: `Dataset input references missing request: ${input.requestId}`,\n path: `/datasets/${datasetIndex}/input/${inputName}`\n });\n }\n });\n if (dataset.input.type === \"multiple\" && !dataset.transformerId) {\n diagnostics.push({\n level: \"error\",\n code: \"dataset_transformer_required\",\n message: `Dataset ${dataset.id} has multiple inputs and requires a transformer.`,\n path: `/datasets/${datasetIndex}/transformerId`\n });\n }\n if (dataset.transformerId && !registries.transformers.has(dataset.transformerId)) {\n diagnostics.push({\n level: \"error\",\n code: \"dataset_transformer_not_found\",\n message: `Dataset transformer is not registered: ${dataset.transformerId}`,\n path: `/datasets/${datasetIndex}/transformerId`\n });\n }\n dataset.fields.forEach((field, fieldIndex) => {\n const expectedType =\n field.coerce === \"number-string\"\n ? \"number\"\n : field.coerce === \"boolean-string\"\n ? \"boolean\"\n : field.coerce === \"iso-date\"\n ? \"date-or-datetime\"\n : undefined;\n if (\n expectedType &&\n (expectedType === \"date-or-datetime\"\n ? field.dataType !== \"date\" && field.dataType !== \"datetime\"\n : field.dataType !== expectedType)\n ) {\n diagnostics.push({\n level: \"error\",\n code: \"dataset_coercion_type_mismatch\",\n message: `Coercion ${field.coerce} is not compatible with data type ${field.dataType}.`,\n path: `/datasets/${datasetIndex}/fields/${fieldIndex}/coerce`\n });\n }\n });\n });\n\n config.panels.forEach((panel, panelIndex) => {\n const dataset = datasetsById.get(panel.binding.datasetId);\n if (!dataset) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_dataset_not_found\",\n message: `Panel references missing dataset: ${panel.binding.datasetId}`,\n path: `/panels/${panelIndex}/binding/datasetId`\n });\n } else {\n const fieldsById = new Map(dataset.fields.map((field) => [field.key, field]));\n const fieldIds = new Set(fieldsById.keys());\n bindingFields(panel.binding).forEach((fieldId) => {\n if (!fieldIds.has(fieldId)) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_field_not_found\",\n message: `Panel binding references missing field ${fieldId} in dataset ${dataset.id}.`,\n path: `/panels/${panelIndex}/binding`\n });\n }\n });\n Object.keys(panel.enhancement?.common?.formatOverrides ?? {}).forEach((fieldId) => {\n if (!fieldIds.has(fieldId)) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_format_field_not_found\",\n message: `Panel format override references missing field ${fieldId} in dataset ${dataset.id}.`,\n path: `/panels/${panelIndex}/enhancement/common/formatOverrides/${fieldId}`\n });\n }\n });\n addBindingSemanticDiagnostics(diagnostics, panel, panelIndex, fieldsById);\n if (panel.enhancement?.type === \"table\") {\n const configuredFields = new Set([\n ...(panel.enhancement.table?.sortableFields ?? []),\n ...(panel.enhancement.table?.filterableFields ?? []),\n ...Object.keys(panel.enhancement.table?.columnWidths ?? {}),\n ...Object.keys(panel.enhancement.table?.columnDisplays ?? {})\n ]);\n configuredFields.forEach((fieldId) => {\n if (!panel.binding.type || panel.binding.type !== \"table\" || !panel.binding.columns.includes(fieldId)) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_table_enhancement_field_invalid\",\n message: `Table enhancement field ${fieldId} must be included in the table columns.`,\n path: `/panels/${panelIndex}/enhancement/table`\n });\n }\n });\n }\n if (panel.enhancement?.type === \"wordCloud\") {\n const minFontSize = panel.enhancement.wordCloud?.minFontSize;\n const maxFontSize = panel.enhancement.wordCloud?.maxFontSize;\n if (minFontSize !== undefined && maxFontSize !== undefined && minFontSize > maxFontSize) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_word_cloud_font_range_invalid\",\n message: \"Word cloud minFontSize cannot be greater than maxFontSize.\",\n path: `/panels/${panelIndex}/enhancement/wordCloud`\n });\n }\n }\n }\n\n if (panel.enhancement && panel.enhancement.type !== panel.binding.type) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_enhancement_type_mismatch\",\n message: `Panel enhancement type ${panel.enhancement.type} does not match binding type ${panel.binding.type}.`,\n path: `/panels/${panelIndex}/enhancement/type`\n });\n }\n\n const definition = registries.rendererDefinitions.get(panel.rendererId);\n if (!definition) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_renderer_not_found\",\n message: `Renderer definition is not registered: ${panel.rendererId}`,\n path: `/panels/${panelIndex}/rendererId`\n });\n } else {\n addPluginSchemaDiagnostics(diagnostics, definition, panel, panelIndex);\n const adapterId = panel.adapterId ?? definition.defaultAdapterId;\n if (!registries.adapters.has(adapterId)) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_adapter_not_found\",\n message: `Visualization adapter is not registered: ${adapterId}`,\n path: `/panels/${panelIndex}/adapterId`\n });\n }\n }\n\n (panel.enhancement?.common?.presetIds ?? []).forEach((presetId) => {\n const preset = registries.presets.get(presetId);\n if (!preset) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_preset_not_found\",\n message: `Visualization preset is not registered: ${presetId}`,\n path: `/panels/${panelIndex}/enhancement/common/presetIds`\n });\n } else if (preset.rendererId && preset.rendererId !== panel.rendererId) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_preset_renderer_mismatch\",\n message: `Preset ${presetId} belongs to renderer ${preset.rendererId}, not ${panel.rendererId}.`,\n path: `/panels/${panelIndex}/enhancement/common/presetIds`\n });\n }\n });\n (panel.enhancement?.common?.interactions ?? []).forEach((interaction) => {\n if (!registries.actions.has(interaction.actionId)) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_action_not_found\",\n message: `Visualization action is not registered: ${interaction.actionId}`,\n path: `/panels/${panelIndex}/enhancement/common/interactions`\n });\n }\n });\n findDuplicates((panel.actions ?? []).map((action) => action.id)).forEach((actionId) =>\n diagnostics.push({\n level: \"error\",\n code: \"panel_action_id_duplicate\",\n message: `Duplicate panel action ID: ${actionId}`,\n path: `/panels/${panelIndex}/actions`\n })\n );\n (panel.actions ?? []).forEach((action, actionIndex) => {\n if (!registries.actions.has(action.actionId)) {\n diagnostics.push({\n level: \"error\",\n code: \"panel_action_not_found\",\n message: `Visualization action is not registered: ${action.actionId}`,\n path: `/panels/${panelIndex}/actions/${actionIndex}/actionId`\n });\n }\n });\n });\n\n emitTelemetry(options.telemetry, {\n name: \"config_validated\",\n dashboardId: config.id,\n ...(diagnostics.length ? { errorCode: \"config_reference_invalid\" } : {})\n });\n\n return diagnostics.length\n ? { valid: false, diagnostics: Object.freeze(diagnostics) }\n : { valid: true, config, diagnostics: [] };\n}\n\nexport function assertDashboardConfig(\n value: unknown,\n registries: CoreRegistries,\n options: ValidateDashboardConfigOptions = {}\n): DashboardConfig {\n const result = validateDashboardConfig(value, registries, options);\n if (!result.valid) {\n throw new DashboardConfigValidationError(result.diagnostics);\n }\n return result.config;\n}\n","const blockedPathSegments = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n\nexport function readValueAtPath(source: unknown, path?: string): unknown {\n if (!path) {\n return source;\n }\n\n return path.split(\".\").reduce<unknown>((current, segment) => {\n if (!segment || blockedPathSegments.has(segment) || current === null || typeof current !== \"object\") {\n return undefined;\n }\n\n return (current as Record<string, unknown>)[segment];\n }, source);\n}\n","import {\n cloneJsonValue,\n type DashboardConfig,\n isJsonValue,\n readValueAtPath,\n type DataRequestConfig,\n type JsonValue\n} from \"../config\";\nimport type { ReadonlyRegistry } from \"../registry\";\nimport { readDashboardVariable, type DashboardContext } from \"../variable\";\nimport type { RequestValueCodec } from \"./request-value-codec\";\n\nexport class RequestInputError extends Error {\n readonly code: \"request_input_missing\" | \"request_input_not_serializable\";\n readonly requestId: string;\n readonly inputName: string;\n\n constructor(code: RequestInputError[\"code\"], requestId: string, inputName: string, message: string) {\n super(message);\n this.name = \"RequestInputError\";\n this.code = code;\n this.requestId = requestId;\n this.inputName = inputName;\n }\n}\n\nfunction isEmptyValue(value: JsonValue): boolean {\n return value === null || value === \"\" || (Array.isArray(value) && value.length === 0);\n}\n\nexport function resolveDataRequestInput(\n request: DataRequestConfig,\n config: DashboardConfig,\n context: DashboardContext,\n codecs: ReadonlyRegistry<RequestValueCodec>\n): Readonly<Record<string, JsonValue>> {\n const result: Record<string, JsonValue> = {};\n\n for (const [inputName, binding] of Object.entries(request.input ?? {})) {\n if (binding.source === \"constant\") {\n result[inputName] = cloneJsonValue(binding.value);\n continue;\n }\n\n let value: unknown = readDashboardVariable(config, context, binding.variableId);\n value = readValueAtPath(value, binding.select);\n\n if (value === undefined) {\n if (binding.omitWhenEmpty) continue;\n throw new RequestInputError(\n \"request_input_missing\",\n request.id,\n inputName,\n `DataRequest ${request.id} input ${inputName} resolved to undefined.`\n );\n }\n if (!isJsonValue(value)) {\n throw new RequestInputError(\n \"request_input_not_serializable\",\n request.id,\n inputName,\n `DataRequest ${request.id} input ${inputName} is not JSON serializable.`\n );\n }\n if (binding.omitWhenEmpty && isEmptyValue(value)) {\n continue;\n }\n\n const encoded = binding.codecId ? codecs.require(binding.codecId).encode(value, context) : value;\n if (encoded === undefined) {\n if (binding.omitWhenEmpty) continue;\n throw new RequestInputError(\n \"request_input_missing\",\n request.id,\n inputName,\n `DataRequest ${request.id} input ${inputName} was omitted by codec ${binding.codecId}.`\n );\n }\n result[inputName] = cloneJsonValue(encoded);\n }\n\n return Object.freeze(result);\n}\n","import {\n stableSerializeJson,\n type DashboardConfig,\n type DataRequestConfig,\n type JsonValue,\n type RuntimeSchemaIssue\n} from \"../config\";\nimport type { ReadonlyRegistry } from \"../registry\";\nimport { emitTelemetry, type VisualizationTelemetrySink } from \"../telemetry\";\nimport type { DashboardContext } from \"../variable\";\nimport type { DataProvider } from \"./data-provider\";\nimport { resolveDataRequestInput } from \"./resolve-request-input\";\nimport type { RequestValueCodec } from \"./request-value-codec\";\n\ninterface RequestCacheEntry {\n response: unknown;\n version: number;\n updatedAt: string;\n}\n\ninterface InflightRequest {\n controller: AbortController;\n promise: Promise<RequestCacheEntry>;\n}\n\nexport interface RequestExecutionResult extends RequestCacheEntry {\n requestConfigId: string;\n executionId: string;\n cacheKey: string;\n input: Readonly<Record<string, JsonValue>>;\n fromCache: boolean;\n}\n\nexport interface ExecuteRequestOptions {\n signal?: AbortSignal;\n force?: boolean;\n isolated?: boolean;\n}\n\nexport interface RequestExecutorOptions {\n telemetry?: VisualizationTelemetrySink;\n}\n\nexport class ProviderInputValidationError extends Error {\n readonly code = \"provider_input_invalid\";\n readonly providerId: string;\n readonly operationId: string;\n readonly issues: ReadonlyArray<RuntimeSchemaIssue>;\n\n constructor(providerId: string, operationId: string, issues: ReadonlyArray<RuntimeSchemaIssue>) {\n super(`Provider input validation failed: ${providerId}/${operationId}`);\n this.name = \"ProviderInputValidationError\";\n this.providerId = providerId;\n this.operationId = operationId;\n this.issues = issues;\n }\n}\n\nfunction createAbortError(): DOMException {\n return new DOMException(\"The request was aborted.\", \"AbortError\");\n}\n\nfunction isAbortError(error: unknown, signal: AbortSignal): boolean {\n return signal.aborted || (error instanceof DOMException && error.name === \"AbortError\");\n}\n\nexport function createRequestCacheKey(\n request: Pick<DataRequestConfig, \"providerId\" | \"operationId\">,\n input: Readonly<Record<string, JsonValue>>\n): string {\n return `${request.providerId}:${request.operationId}:${stableSerializeJson(input)}`;\n}\n\nexport class RequestExecutor {\n readonly #cache = new Map<string, RequestCacheEntry>();\n readonly #inflight = new Map<string, InflightRequest>();\n readonly #isolatedControllers = new Set<AbortController>();\n readonly #keysByRequestId = new Map<string, Set<string>>();\n #version = 0;\n #executionSequence = 0;\n\n constructor(\n readonly config: DashboardConfig,\n readonly providers: ReadonlyRegistry<DataProvider>,\n readonly codecs: ReadonlyRegistry<RequestValueCodec>,\n readonly options: RequestExecutorOptions = {}\n ) {}\n\n async execute(\n requestConfigId: string,\n context: DashboardContext,\n options: ExecuteRequestOptions = {}\n ): Promise<RequestExecutionResult> {\n const request = this.config.requests.find((candidate) => candidate.id === requestConfigId);\n if (!request) {\n throw new Error(`DataRequest not found: ${requestConfigId}`);\n }\n\n const callerSignal = options.signal;\n if (callerSignal?.aborted) throw createAbortError();\n const input = resolveDataRequestInput(request, this.config, context, this.codecs);\n const cacheKey = createRequestCacheKey(request, input);\n const isolated = options.isolated ?? false;\n if (!isolated) this.trackCacheKey(request.id, cacheKey);\n const executionId = `${request.id}:${++this.#executionSequence}`;\n\n const cached = isolated ? undefined : this.#cache.get(cacheKey);\n if (!options.force && cached) {\n emitTelemetry(this.options.telemetry, {\n name: \"request_cache_hit\",\n dashboardId: context.dashboardId,\n requestId: executionId,\n providerId: request.providerId,\n operationId: request.operationId\n });\n return { ...cached, requestConfigId, executionId, cacheKey, input, fromCache: true };\n }\n\n let existing = isolated ? undefined : this.#inflight.get(cacheKey);\n if (options.force && existing) {\n existing.controller.abort();\n this.#inflight.delete(cacheKey);\n existing = undefined;\n }\n if (existing) {\n const abortExisting = () => existing.controller.abort();\n callerSignal?.addEventListener(\"abort\", abortExisting, { once: true });\n emitTelemetry(this.options.telemetry, {\n name: \"request_cache_hit\",\n dashboardId: context.dashboardId,\n requestId: executionId,\n providerId: request.providerId,\n operationId: request.operationId\n });\n try {\n const entry = await existing.promise;\n return { ...entry, requestConfigId, executionId, cacheKey, input, fromCache: true };\n } finally {\n callerSignal?.removeEventListener(\"abort\", abortExisting);\n }\n }\n\n const provider = this.providers.require(request.providerId);\n const operation = provider.operations[request.operationId];\n if (!operation) {\n throw new Error(`Provider operation not found: ${request.providerId}/${request.operationId}`);\n }\n const inputValidation = operation.inputSchema?.validate(input);\n if (inputValidation && !inputValidation.success) {\n throw new ProviderInputValidationError(request.providerId, request.operationId, inputValidation.issues);\n }\n\n const startedAt = Date.now();\n const controller = new AbortController();\n if (isolated) this.#isolatedControllers.add(controller);\n const abortRequest = () => controller.abort();\n callerSignal?.addEventListener(\"abort\", abortRequest, { once: true });\n emitTelemetry(this.options.telemetry, {\n name: \"request_started\",\n dashboardId: context.dashboardId,\n requestId: executionId,\n providerId: request.providerId,\n operationId: request.operationId\n });\n\n const promise = Promise.resolve()\n .then(() =>\n operation.execute(input, {\n signal: controller.signal,\n requestId: executionId,\n timezone: context.timezone,\n locale: context.locale,\n emit: (event) => emitTelemetry(this.options.telemetry, event)\n })\n )\n .then((response): RequestCacheEntry => {\n if (controller.signal.aborted) throw createAbortError();\n const entry = {\n response,\n version: ++this.#version,\n updatedAt: new Date().toISOString()\n };\n if (!isolated) this.#cache.set(cacheKey, entry);\n emitTelemetry(this.options.telemetry, {\n name: \"request_succeeded\",\n dashboardId: context.dashboardId,\n requestId: executionId,\n providerId: request.providerId,\n operationId: request.operationId,\n durationMs: Date.now() - startedAt\n });\n return entry;\n })\n .catch((error: unknown) => {\n const aborted = isAbortError(error, controller.signal);\n emitTelemetry(this.options.telemetry, {\n name: aborted ? \"request_cancelled\" : \"request_failed\",\n dashboardId: context.dashboardId,\n requestId: executionId,\n providerId: request.providerId,\n operationId: request.operationId,\n durationMs: Date.now() - startedAt,\n errorCode: aborted ? \"request_cancelled\" : \"request_failed\"\n });\n throw error;\n })\n .finally(() => {\n callerSignal?.removeEventListener(\"abort\", abortRequest);\n if (isolated) {\n this.#isolatedControllers.delete(controller);\n } else if (this.#inflight.get(cacheKey)?.promise === promise) {\n this.#inflight.delete(cacheKey);\n }\n });\n\n if (!isolated) this.#inflight.set(cacheKey, { controller, promise });\n const entry = await promise;\n return { ...entry, requestConfigId, executionId, cacheKey, input, fromCache: false };\n }\n\n invalidateRequest(requestConfigId: string): void {\n for (const key of this.#keysByRequestId.get(requestConfigId) ?? []) {\n this.#cache.delete(key);\n this.#inflight.get(key)?.controller.abort();\n this.#inflight.delete(key);\n }\n this.#keysByRequestId.delete(requestConfigId);\n }\n\n clear(): void {\n this.#inflight.forEach(({ controller }) => controller.abort());\n this.#isolatedControllers.forEach((controller) => controller.abort());\n this.#inflight.clear();\n this.#isolatedControllers.clear();\n this.#cache.clear();\n this.#keysByRequestId.clear();\n }\n\n private trackCacheKey(requestConfigId: string, cacheKey: string): void {\n const keys = this.#keysByRequestId.get(requestConfigId) ?? new Set<string>();\n keys.add(cacheKey);\n this.#keysByRequestId.set(requestConfigId, keys);\n }\n}\n","import type {\n VisualizationAction,\n VisualizationAdapter,\n VisualizationPreset,\n VisualizationRendererDefinition\n} from \"../adapter\";\nimport type { DatasetTransformer } from \"../dataset\";\nimport type { DataProvider, RequestValueCodec } from \"../provider\";\nimport { createRequestValueCodecRegistry } from \"../provider\";\nimport { PluginRegistry } from \"./plugin-registry\";\n\nexport interface CoreRegistries {\n providers: PluginRegistry<DataProvider>;\n transformers: PluginRegistry<DatasetTransformer>;\n adapters: PluginRegistry<VisualizationAdapter>;\n rendererDefinitions: PluginRegistry<VisualizationRendererDefinition>;\n presets: PluginRegistry<VisualizationPreset>;\n actions: PluginRegistry<VisualizationAction>;\n requestValueCodecs: PluginRegistry<RequestValueCodec>;\n}\n\nexport function createCoreRegistries(): CoreRegistries {\n return {\n providers: new PluginRegistry<DataProvider>(\"DataProvider\"),\n transformers: new PluginRegistry<DatasetTransformer>(\"DatasetTransformer\"),\n adapters: new PluginRegistry<VisualizationAdapter>(\"VisualizationAdapter\"),\n rendererDefinitions: new PluginRegistry<VisualizationRendererDefinition>(\"VisualizationRendererDefinition\"),\n presets: new PluginRegistry<VisualizationPreset>(\"VisualizationPreset\"),\n actions: new PluginRegistry<VisualizationAction>(\"VisualizationAction\"),\n requestValueCodecs: createRequestValueCodecRegistry()\n };\n}\n","import { STANDARD_ADAPTERS, STANDARD_RENDERER_DEFINITIONS } from \"../adapter\";\nimport { createCoreRegistries, type CoreRegistries } from \"./core-registries\";\n\nexport function registerStandardCore(registries: CoreRegistries): CoreRegistries {\n registries.adapters.registerMany(STANDARD_ADAPTERS);\n registries.rendererDefinitions.registerMany(STANDARD_RENDERER_DEFINITIONS);\n return registries;\n}\n\nexport function createStandardCoreRegistries(): CoreRegistries {\n return registerStandardCore(createCoreRegistries());\n}\n","import { isJsonValue, type JsonValue } from \"../config\";\nimport { PluginRegistry } from \"../registry\";\nimport type { DashboardContext } from \"../variable\";\n\nexport interface RequestValueCodec {\n id: string;\n encode(value: JsonValue, context: DashboardContext): JsonValue | undefined;\n}\n\nexport class RequestValueCodecError extends Error {\n readonly code = \"request_value_codec_failed\";\n readonly codecId: string;\n\n constructor(codecId: string, message: string) {\n super(message);\n this.name = \"RequestValueCodecError\";\n this.codecId = codecId;\n }\n}\n\nfunction requireFiniteNumber(value: JsonValue, codecId: string): number {\n const result =\n typeof value === \"number\" ? value : typeof value === \"string\" && value.trim() !== \"\" ? Number(value) : Number.NaN;\n if (!Number.isFinite(result)) {\n throw new RequestValueCodecError(codecId, `Value cannot be encoded as a finite number by ${codecId}.`);\n }\n return result;\n}\n\nfunction isValidDateOnly(value: string): boolean {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value);\n if (!match) return false;\n const year = Number(match[1]);\n const month = Number(match[2]);\n const day = Number(match[3]);\n const date = new Date(Date.UTC(year, month - 1, day));\n return date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day;\n}\n\nexport const BUILT_IN_REQUEST_VALUE_CODECS: ReadonlyArray<RequestValueCodec> = Object.freeze([\n {\n id: \"string\",\n encode(value) {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n throw new RequestValueCodecError(\"string\", \"Value cannot be encoded as a string.\");\n }\n },\n {\n id: \"number\",\n encode(value) {\n return requireFiniteNumber(value, \"number\");\n }\n },\n {\n id: \"boolean\",\n encode(value) {\n if (typeof value === \"boolean\") return value;\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n throw new RequestValueCodecError(\"boolean\", \"Value cannot be encoded as a boolean.\");\n }\n },\n {\n id: \"string-array\",\n encode(value) {\n if (!Array.isArray(value)) {\n throw new RequestValueCodecError(\"string-array\", \"Value must be an array.\");\n }\n return value.map((item) => {\n if (typeof item === \"string\" || typeof item === \"number\" || typeof item === \"boolean\") {\n return String(item);\n }\n throw new RequestValueCodecError(\"string-array\", \"Array entries must be primitive values.\");\n });\n }\n },\n {\n id: \"number-array\",\n encode(value) {\n if (!Array.isArray(value)) {\n throw new RequestValueCodecError(\"number-array\", \"Value must be an array.\");\n }\n return value.map((item) => requireFiniteNumber(item, \"number-array\"));\n }\n },\n {\n id: \"iso-date\",\n encode(value) {\n if (typeof value !== \"string\") {\n throw new RequestValueCodecError(\"iso-date\", \"ISO date input must be a string.\");\n }\n const dateOnly = /^(\\d{4}-\\d{2}-\\d{2})/.exec(value)?.[1];\n if (dateOnly) {\n if (isValidDateOnly(dateOnly)) return dateOnly;\n throw new RequestValueCodecError(\"iso-date\", \"Value contains an invalid calendar date.\");\n }\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n throw new RequestValueCodecError(\"iso-date\", \"Value cannot be encoded as an ISO date.\");\n }\n return parsed.toISOString().slice(0, 10);\n }\n },\n {\n id: \"json\",\n encode(value) {\n if (!isJsonValue(value)) {\n throw new RequestValueCodecError(\"json\", \"Value is not JSON serializable.\");\n }\n return value;\n }\n }\n]);\n\nexport function createRequestValueCodecRegistry(): PluginRegistry<RequestValueCodec> {\n return new PluginRegistry<RequestValueCodec>(\"RequestValueCodec\").registerMany(BUILT_IN_REQUEST_VALUE_CODECS);\n}\n","import { readValueAtPath, type DatasetConfig, type DatasetFieldConfig } from \"../config\";\nimport type { DatasetDiagnostic } from \"./types\";\n\nexport interface NormalizeDatasetRowsResult {\n rows: ReadonlyArray<Readonly<Record<string, unknown>>>;\n diagnostics: ReadonlyArray<DatasetDiagnostic>;\n}\n\nfunction isValidDateOnly(value: string): boolean {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value);\n if (!match) return false;\n const year = Number(match[1]);\n const month = Number(match[2]);\n const day = Number(match[3]);\n const date = new Date(Date.UTC(year, month - 1, day));\n return date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day;\n}\n\nfunction normalizeDate(value: unknown, dataType: \"date\" | \"datetime\"): string | undefined {\n if (typeof value !== \"string\") return undefined;\n if (dataType === \"date\" && isValidDateOnly(value)) return value;\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) return undefined;\n return dataType === \"date\" ? parsed.toISOString().slice(0, 10) : parsed.toISOString();\n}\n\nfunction normalizeFieldValue(value: unknown, field: DatasetFieldConfig): unknown | undefined {\n if (value === null || value === undefined || value === \"\") {\n return undefined;\n }\n\n switch (field.coerce) {\n case \"number-string\": {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value !== \"string\") return undefined;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n case \"boolean-string\":\n if (typeof value === \"boolean\") return value;\n return value === \"true\" ? true : value === \"false\" ? false : undefined;\n case \"iso-date\":\n return field.dataType === \"date\" || field.dataType === \"datetime\"\n ? normalizeDate(value, field.dataType)\n : undefined;\n }\n\n switch (field.dataType) {\n case \"string\":\n return typeof value === \"string\" ? value : undefined;\n case \"number\":\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n case \"boolean\":\n return typeof value === \"boolean\" ? value : undefined;\n case \"date\":\n case \"datetime\":\n return normalizeDate(value, field.dataType);\n }\n}\n\nexport function normalizeDatasetRows(\n candidateRows: ReadonlyArray<unknown>,\n dataset: DatasetConfig,\n initialDiagnostics: ReadonlyArray<DatasetDiagnostic> = []\n): NormalizeDatasetRowsResult {\n const diagnostics: DatasetDiagnostic[] = [...initialDiagnostics];\n const rows = candidateRows.map((candidate, rowIndex) => {\n const source =\n candidate !== null && typeof candidate === \"object\" && !Array.isArray(candidate) ? candidate : undefined;\n const output: Record<string, unknown> = {};\n\n for (const field of dataset.fields) {\n const rawValue = source ? readValueAtPath(source, field.sourcePath ?? field.key) : undefined;\n const value = normalizeFieldValue(rawValue, field);\n if (value === undefined) {\n diagnostics.push({\n level: field.required ? \"error\" : \"warning\",\n code: field.required ? \"dataset_required_field_invalid\" : \"dataset_optional_field_invalid\",\n message: `Dataset ${dataset.id} row ${rowIndex + 1} has an invalid value for ${field.key}.`,\n field: field.key,\n rowIndex\n });\n output[field.key] = null;\n } else {\n output[field.key] = value;\n }\n }\n\n return Object.freeze(output);\n });\n\n return {\n rows: Object.freeze(rows),\n diagnostics: Object.freeze(diagnostics)\n };\n}\n","import type { DatasetFieldConfig } from \"../config\";\n\nexport interface DatasetDiagnostic {\n level: \"info\" | \"warning\" | \"error\";\n code: string;\n message: string;\n field?: string;\n rowIndex?: number;\n inputName?: string;\n}\n\nexport interface DatasetResult {\n datasetId: string;\n fields: ReadonlyArray<DatasetFieldConfig>;\n rows: ReadonlyArray<Readonly<Record<string, unknown>>>;\n updatedAt: string;\n requestVersions: Readonly<Record<string, number>>;\n diagnostics: ReadonlyArray<DatasetDiagnostic>;\n}\n\nexport interface DatasetTransformOutput {\n rows: ReadonlyArray<Record<string, unknown>>;\n diagnostics?: ReadonlyArray<DatasetDiagnostic>;\n}\n\nexport interface DatasetTransformContext {\n datasetId: string;\n timezone: string;\n locale: string;\n}\n\nexport interface DatasetTransformer {\n id: string;\n transform(\n inputs: Readonly<Record<string, unknown>>,\n context: Readonly<DatasetTransformContext>\n ): DatasetTransformOutput;\n}\n\nexport class DatasetExecutionError extends Error {\n readonly code: string;\n readonly datasetId: string;\n readonly diagnostics: ReadonlyArray<DatasetDiagnostic>;\n\n constructor(datasetId: string, code: string, message: string, diagnostics: ReadonlyArray<DatasetDiagnostic> = []) {\n super(message);\n this.name = \"DatasetExecutionError\";\n this.datasetId = datasetId;\n this.code = code;\n this.diagnostics = diagnostics;\n }\n}\n","import {\n readValueAtPath,\n stableSerializeJson,\n type DashboardConfig,\n type DatasetConfig,\n type JsonValue\n} from \"../config\";\nimport type { ReadonlyRegistry } from \"../registry\";\nimport { RequestExecutor, type RequestExecutionResult } from \"../provider\";\nimport { emitTelemetry, type VisualizationTelemetrySink } from \"../telemetry\";\nimport type { DashboardContext } from \"../variable\";\nimport { normalizeDatasetRows } from \"./normalize\";\nimport { DatasetExecutionError, type DatasetDiagnostic, type DatasetResult, type DatasetTransformer } from \"./types\";\n\nexport interface RunDatasetOptions {\n signal?: AbortSignal;\n force?: boolean;\n isolated?: boolean;\n}\n\nexport interface DatasetRunnerOptions {\n telemetry?: VisualizationTelemetrySink;\n}\n\ninterface ResolvedDatasetInput {\n name: string;\n requestId: string;\n responsePath?: string;\n execution: RequestExecutionResult;\n value: unknown;\n}\n\nfunction getInputDefinitions(dataset: DatasetConfig) {\n if (dataset.input.type === \"single\") {\n return [[\"default\", dataset.input]] as const;\n }\n return Object.entries(dataset.input.inputs);\n}\n\nfunction toCandidateRows(value: unknown, datasetId: string): ReadonlyArray<unknown> {\n if (value === null || value === undefined) return [];\n if (Array.isArray(value)) return value;\n if (typeof value === \"object\") return [value];\n throw new DatasetExecutionError(\n datasetId,\n \"dataset_input_invalid\",\n `Dataset ${datasetId} input must resolve to an object or an array of objects.`\n );\n}\n\nfunction latestUpdatedAt(inputs: ReadonlyArray<ResolvedDatasetInput>): string {\n const timestamps = inputs.map((input) => Date.parse(input.execution.updatedAt)).filter(Number.isFinite);\n return timestamps.length ? new Date(Math.max(...timestamps)).toISOString() : new Date().toISOString();\n}\n\nexport class DatasetRunner {\n readonly #datasetCache = new Map<string, DatasetResult>();\n readonly #cacheKeysByDatasetId = new Map<string, Set<string>>();\n\n constructor(\n readonly config: DashboardConfig,\n readonly requestExecutor: RequestExecutor,\n readonly transformers: ReadonlyRegistry<DatasetTransformer>,\n readonly options: DatasetRunnerOptions = {}\n ) {}\n\n async run(datasetId: string, context: DashboardContext, options: RunDatasetOptions = {}): Promise<DatasetResult> {\n if (context.dashboardId !== this.config.id) {\n throw new DatasetExecutionError(\n datasetId,\n \"dashboard_context_mismatch\",\n `DashboardContext ${context.dashboardId} cannot be used with dashboard ${this.config.id}.`\n );\n }\n const dataset = this.config.datasets.find((candidate) => candidate.id === datasetId);\n if (!dataset) {\n throw new DatasetExecutionError(datasetId, \"dataset_not_found\", `Dataset not found: ${datasetId}`);\n }\n\n const startedAt = Date.now();\n const isolated = options.isolated ?? false;\n try {\n const resolvedInputs = await Promise.all(\n getInputDefinitions(dataset).map(async ([name, input]): Promise<ResolvedDatasetInput> => {\n const execution = await this.requestExecutor.execute(input.requestId, context, options);\n const value = readValueAtPath(execution.response, input.responsePath);\n if (input.responsePath && value === undefined) {\n throw new DatasetExecutionError(\n dataset.id,\n \"dataset_input_path_missing\",\n `Dataset ${dataset.id} input ${name} path was not found: ${input.responsePath}`,\n [\n {\n level: \"error\",\n code: \"dataset_input_path_missing\",\n message: `Response path was not found: ${input.responsePath}`,\n inputName: name\n }\n ]\n );\n }\n return {\n name,\n requestId: input.requestId,\n ...(input.responsePath ? { responsePath: input.responsePath } : {}),\n execution,\n value\n };\n })\n );\n\n const requestVersions = Object.freeze(\n Object.fromEntries(resolvedInputs.map((input) => [input.requestId, input.execution.version]))\n );\n const cacheKey = stableSerializeJson({\n datasetId: dataset.id,\n requestVersions,\n transformerId: dataset.transformerId ?? null\n } as JsonValue);\n if (!isolated) this.trackCacheKey(dataset.id, cacheKey);\n\n const cached = isolated ? undefined : this.#datasetCache.get(cacheKey);\n if (!options.force && cached) {\n emitTelemetry(this.options.telemetry, {\n name: \"dataset_cache_hit\",\n dashboardId: context.dashboardId,\n datasetId: dataset.id\n });\n return cached;\n }\n\n const namedInputs = Object.freeze(Object.fromEntries(resolvedInputs.map((input) => [input.name, input.value])));\n let candidateRows: ReadonlyArray<unknown>;\n let transformerDiagnostics: ReadonlyArray<DatasetDiagnostic> = [];\n\n if (dataset.transformerId) {\n const transformed = this.transformers.require(dataset.transformerId).transform(namedInputs, {\n datasetId: dataset.id,\n timezone: context.timezone,\n locale: context.locale\n });\n if (!Array.isArray(transformed.rows)) {\n throw new DatasetExecutionError(\n dataset.id,\n \"dataset_transform_invalid\",\n `Dataset transformer ${dataset.transformerId} did not return a rows array.`\n );\n }\n candidateRows = transformed.rows;\n transformerDiagnostics = transformed.diagnostics ?? [];\n } else {\n if (dataset.input.type === \"multiple\") {\n throw new DatasetExecutionError(\n dataset.id,\n \"dataset_transformer_required\",\n `Dataset ${dataset.id} has multiple inputs and requires a transformer.`\n );\n }\n candidateRows = toCandidateRows(resolvedInputs[0]?.value, dataset.id);\n }\n\n const normalized = normalizeDatasetRows(candidateRows, dataset, transformerDiagnostics);\n if (normalized.diagnostics.some((diagnostic) => diagnostic.level === \"error\")) {\n throw new DatasetExecutionError(\n dataset.id,\n \"dataset_validation_failed\",\n `Dataset ${dataset.id} failed field validation.`,\n normalized.diagnostics\n );\n }\n\n const result: DatasetResult = Object.freeze({\n datasetId: dataset.id,\n fields: Object.freeze([...dataset.fields]),\n rows: normalized.rows,\n updatedAt: latestUpdatedAt(resolvedInputs),\n requestVersions,\n diagnostics: normalized.diagnostics\n });\n if (!isolated) this.#datasetCache.set(cacheKey, result);\n emitTelemetry(this.options.telemetry, {\n name: \"dataset_succeeded\",\n dashboardId: context.dashboardId,\n datasetId: dataset.id,\n durationMs: Date.now() - startedAt\n });\n return result;\n } catch (error) {\n emitTelemetry(this.options.telemetry, {\n name: \"dataset_failed\",\n dashboardId: context.dashboardId,\n datasetId,\n durationMs: Date.now() - startedAt,\n errorCode: error instanceof DatasetExecutionError ? error.code : \"dataset_failed\"\n });\n throw error;\n }\n }\n\n async refresh(datasetId: string, context: DashboardContext, signal?: AbortSignal): Promise<DatasetResult> {\n const dataset = this.config.datasets.find((candidate) => candidate.id === datasetId);\n if (!dataset) {\n throw new DatasetExecutionError(datasetId, \"dataset_not_found\", `Dataset not found: ${datasetId}`);\n }\n this.invalidateDataset(datasetId);\n for (const [, input] of getInputDefinitions(dataset)) {\n this.requestExecutor.invalidateRequest(input.requestId);\n }\n return this.run(datasetId, context, { ...(signal ? { signal } : {}), force: true });\n }\n\n invalidateDataset(datasetId: string): void {\n for (const key of this.#cacheKeysByDatasetId.get(datasetId) ?? []) {\n this.#datasetCache.delete(key);\n }\n this.#cacheKeysByDatasetId.delete(datasetId);\n }\n\n clear(): void {\n this.#datasetCache.clear();\n this.#cacheKeysByDatasetId.clear();\n this.requestExecutor.clear();\n }\n\n private trackCacheKey(datasetId: string, cacheKey: string): void {\n const keys = this.#cacheKeysByDatasetId.get(datasetId) ?? new Set<string>();\n keys.add(cacheKey);\n this.#cacheKeysByDatasetId.set(datasetId, keys);\n }\n}\n","import { assertDashboardConfig, type DashboardConfig } from \"../config\";\nimport { DatasetRunner, type DatasetResult, type RunDatasetOptions } from \"../dataset\";\nimport { RequestExecutor } from \"../provider\";\nimport type { CoreRegistries } from \"../registry\";\nimport type { VisualizationTelemetrySink } from \"../telemetry\";\nimport {\n createDashboardContext,\n restoreDashboardContextFromSearch,\n type CreateDashboardContextOptions,\n type DashboardContext,\n type RestoreDashboardContextResult\n} from \"../variable\";\n\nexport interface DashboardDataRuntimeOptions {\n config: unknown;\n registries: CoreRegistries;\n timezone: string;\n locale: string;\n telemetry?: VisualizationTelemetrySink;\n}\n\nexport class DashboardDataRuntime {\n readonly config: DashboardConfig;\n readonly datasetRunner: DatasetRunner;\n readonly #registries: CoreRegistries;\n readonly #contextDefaults: Pick<CreateDashboardContextOptions, \"timezone\" | \"locale\">;\n readonly #telemetry: VisualizationTelemetrySink | undefined;\n\n constructor(options: DashboardDataRuntimeOptions) {\n try {\n new Intl.DateTimeFormat(options.locale, { timeZone: options.timezone }).format(0);\n } catch {\n throw new TypeError(`Invalid locale or timezone: ${options.locale}/${options.timezone}`);\n }\n this.#registries = options.registries;\n this.#telemetry = options.telemetry;\n const telemetryOptions = options.telemetry ? { telemetry: options.telemetry } : {};\n this.config = assertDashboardConfig(options.config, options.registries, telemetryOptions);\n this.#contextDefaults = { timezone: options.timezone, locale: options.locale };\n const requestExecutor = new RequestExecutor(\n this.config,\n options.registries.providers,\n options.registries.requestValueCodecs,\n telemetryOptions\n );\n this.datasetRunner = new DatasetRunner(\n this.config,\n requestExecutor,\n options.registries.transformers,\n telemetryOptions\n );\n }\n\n createContext(variables?: CreateDashboardContextOptions[\"variables\"]): DashboardContext {\n return createDashboardContext(this.config, {\n ...this.#contextDefaults,\n ...(variables ? { variables } : {})\n });\n }\n\n restoreContext(\n search: string,\n variables?: CreateDashboardContextOptions[\"variables\"]\n ): RestoreDashboardContextResult {\n return restoreDashboardContextFromSearch(\n this.config,\n search,\n { ...this.#contextDefaults, ...(variables ? { variables } : {}) },\n this.#telemetry\n );\n }\n\n runDataset(datasetId: string, context: DashboardContext, options?: RunDatasetOptions): Promise<DatasetResult> {\n return this.datasetRunner.run(datasetId, context, options);\n }\n\n refreshDataset(datasetId: string, context: DashboardContext, signal?: AbortSignal): Promise<DatasetResult> {\n return this.datasetRunner.refresh(datasetId, context, signal);\n }\n\n clear(): void {\n this.datasetRunner.clear();\n }\n\n get registries(): CoreRegistries {\n return this.#registries;\n }\n}\n\nexport function createDashboardDataRuntime(options: DashboardDataRuntimeOptions): DashboardDataRuntime {\n return new DashboardDataRuntime(options);\n}\n","import type { DashboardConfig, DatasetConfig } from \"../config\";\n\nexport interface DashboardDependencyGraph {\n readonly requestIdsByDatasetId: ReadonlyMap<string, ReadonlySet<string>>;\n readonly datasetIdsByRequestId: ReadonlyMap<string, ReadonlySet<string>>;\n readonly panelIdsByDatasetId: ReadonlyMap<string, ReadonlySet<string>>;\n readonly datasetIdByPanelId: ReadonlyMap<string, string>;\n}\n\nfunction requestIdsForDataset(dataset: DatasetConfig): string[] {\n return dataset.input.type === \"single\"\n ? [dataset.input.requestId]\n : Object.values(dataset.input.inputs).map((input) => input.requestId);\n}\n\nfunction addToSetMap(map: Map<string, Set<string>>, key: string, value: string): void {\n const values = map.get(key) ?? new Set<string>();\n values.add(value);\n map.set(key, values);\n}\n\nexport function createDashboardDependencyGraph(config: DashboardConfig): DashboardDependencyGraph {\n const requestIdsByDatasetId = new Map<string, ReadonlySet<string>>();\n const datasetIdsByRequestId = new Map<string, Set<string>>();\n const panelIdsByDatasetId = new Map<string, Set<string>>();\n const datasetIdByPanelId = new Map<string, string>();\n\n config.datasets.forEach((dataset) => {\n const requestIds = new Set(requestIdsForDataset(dataset));\n requestIdsByDatasetId.set(dataset.id, requestIds);\n requestIds.forEach((requestId) => addToSetMap(datasetIdsByRequestId, requestId, dataset.id));\n });\n config.panels.forEach((panel) => {\n datasetIdByPanelId.set(panel.id, panel.binding.datasetId);\n addToSetMap(panelIdsByDatasetId, panel.binding.datasetId, panel.id);\n });\n\n return Object.freeze({\n requestIdsByDatasetId,\n datasetIdsByRequestId,\n panelIdsByDatasetId,\n datasetIdByPanelId\n });\n}\n\nexport function collectDownstreamDatasetIds(\n graph: DashboardDependencyGraph,\n requestIds: ReadonlySet<string>\n): Set<string> {\n const datasetIds = new Set<string>();\n requestIds.forEach((requestId) =>\n graph.datasetIdsByRequestId.get(requestId)?.forEach((datasetId) => datasetIds.add(datasetId))\n );\n return datasetIds;\n}\n\nexport function collectDownstreamPanelIds(\n graph: DashboardDependencyGraph,\n datasetIds: ReadonlySet<string>\n): Set<string> {\n const panelIds = new Set<string>();\n datasetIds.forEach((datasetId) =>\n graph.panelIdsByDatasetId.get(datasetId)?.forEach((panelId) => panelIds.add(panelId))\n );\n return panelIds;\n}\n","import type { PanelBinding, PanelConfig, VisualizationEnhancement } from \"../config\";\nimport type { VisualizationAdapter, VisualizationEvent, VisualizationViewModelBase } from \"../adapter\";\nimport type { DatasetResult } from \"../dataset\";\nimport { emitTelemetry } from \"../telemetry\";\nimport { writeDashboardVariable, type DashboardContext } from \"../variable\";\nimport { DashboardDataRuntime, type DashboardDataRuntimeOptions } from \"./dashboard-data-runtime\";\nimport {\n collectDownstreamDatasetIds,\n collectDownstreamPanelIds,\n createDashboardDependencyGraph,\n type DashboardDependencyGraph\n} from \"./dependency-graph\";\nimport type {\n DashboardRuntimeListener,\n DashboardRuntimeSnapshot,\n DashboardVariablePatch,\n DatasetRuntimeState,\n LoadStatus,\n PanelRuntimeState,\n RequestRuntimeState,\n RuntimeError\n} from \"./types\";\n\nexport interface DashboardRuntimeOptions extends DashboardDataRuntimeOptions {\n variables?: DashboardVariablePatch;\n}\n\nexport interface RefreshPanelsOptions {\n deferUnselected?: boolean;\n}\n\nfunction now(): string {\n return new Date().toISOString();\n}\n\nfunction toRuntimeError(error: unknown, fallbackCode: string): RuntimeError {\n const candidate = error as { code?: unknown; message?: unknown };\n return Object.freeze({\n code: typeof candidate?.code === \"string\" ? candidate.code : fallbackCode,\n message: typeof candidate?.message === \"string\" ? candidate.message : String(error),\n cause: error\n });\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof DOMException && error.name === \"AbortError\";\n}\n\nfunction toRecord<T extends { id: string }>(states: ReadonlyMap<string, T>): Readonly<Record<string, T>> {\n return Object.freeze(Object.fromEntries(states));\n}\n\ninterface PanelRefreshOperation {\n controller: AbortController;\n generation: number;\n previousState: PanelRuntimeState;\n}\n\ninterface DatasetLoadOperation {\n controller: AbortController;\n context: DashboardContext;\n generation: number;\n startedAt: string;\n promise: Promise<void>;\n}\n\nexport class DashboardRuntime {\n readonly dataRuntime: DashboardDataRuntime;\n readonly graph: DashboardDependencyGraph;\n readonly #listeners = new Set<DashboardRuntimeListener>();\n readonly #requestStates = new Map<string, RequestRuntimeState>();\n readonly #datasetStates = new Map<string, DatasetRuntimeState>();\n readonly #panelStates = new Map<string, PanelRuntimeState>();\n readonly #panelRefreshes = new Map<string, PanelRefreshOperation>();\n readonly #panelLoads = new Map<string, DatasetLoadOperation>();\n #context: DashboardContext;\n #generation = 0;\n #panelGeneration = 0;\n #activeController: AbortController | undefined;\n #activeDatasetIds = new Set<string>();\n #activeShowsGlobalLoading = false;\n #destroyed = false;\n\n constructor(readonly options: DashboardRuntimeOptions) {\n this.dataRuntime = new DashboardDataRuntime(options);\n this.graph = createDashboardDependencyGraph(this.dataRuntime.config);\n this.#context = this.dataRuntime.createContext(options.variables);\n this.dataRuntime.config.requests.forEach((request) =>\n this.#requestStates.set(request.id, { id: request.id, status: \"idle\", generation: 0 })\n );\n this.dataRuntime.config.datasets.forEach((dataset) =>\n this.#datasetStates.set(dataset.id, { id: dataset.id, status: \"idle\", generation: 0 })\n );\n this.dataRuntime.config.panels.forEach((panel) =>\n this.#panelStates.set(panel.id, { id: panel.id, status: \"idle\", generation: 0, isRefreshing: false })\n );\n }\n\n get config() {\n return this.dataRuntime.config;\n }\n\n get context(): DashboardContext {\n return this.#context;\n }\n\n get snapshot(): DashboardRuntimeSnapshot {\n return Object.freeze({\n generation: this.#generation,\n isGlobalLoading: Boolean(this.#activeController && this.#activeShowsGlobalLoading),\n context: this.#context,\n requestStates: toRecord(this.#requestStates),\n datasetStates: toRecord(this.#datasetStates),\n panelStates: toRecord(this.#panelStates)\n });\n }\n\n subscribe(listener: DashboardRuntimeListener): () => void {\n this.#listeners.add(listener);\n return () => this.#listeners.delete(listener);\n }\n\n load(): Promise<DashboardRuntimeSnapshot> {\n return this.schedule(new Set(this.config.datasets.map((dataset) => dataset.id)), false);\n }\n\n refreshAll(): Promise<DashboardRuntimeSnapshot> {\n return this.schedule(new Set(this.config.datasets.map((dataset) => dataset.id)), true);\n }\n\n refreshDataset(datasetId: string): Promise<DashboardRuntimeSnapshot> {\n const requestIds = this.graph.requestIdsByDatasetId.get(datasetId);\n if (!requestIds) throw new Error(`Dataset not found: ${datasetId}`);\n return this.schedule(collectDownstreamDatasetIds(this.graph, requestIds), true);\n }\n\n loadPanels(panelIds: Iterable<string>): Promise<DashboardRuntimeSnapshot> {\n return this.loadPanelDatasets(this.datasetIdsForPanels(panelIds));\n }\n\n refreshPanels(panelIds: Iterable<string>, options: RefreshPanelsOptions = {}): Promise<DashboardRuntimeSnapshot> {\n const datasetIds = this.datasetIdsForPanels(panelIds);\n if (!datasetIds.size && !options.deferUnselected) return Promise.resolve(this.snapshot);\n this.#activeDatasetIds.forEach((datasetId) => datasetIds.add(datasetId));\n const deferredDatasetIds = options.deferUnselected\n ? this.deferUnselectedDatasets(datasetIds, this.#generation + 1)\n : new Set<string>();\n if (!datasetIds.size) {\n if (deferredDatasetIds.size) {\n this.#generation += 1;\n this.notify();\n }\n return Promise.resolve(this.snapshot);\n }\n const requestIds = this.requestIdsForDatasets(datasetIds);\n const inactiveSharedDatasetIds = collectDownstreamDatasetIds(this.graph, requestIds);\n datasetIds.forEach((datasetId) => inactiveSharedDatasetIds.delete(datasetId));\n this.resetDatasets(inactiveSharedDatasetIds);\n return this.schedule(datasetIds, true);\n }\n\n refreshPanel(panelId: string): Promise<DashboardRuntimeSnapshot> {\n const panel = this.requirePanel(panelId);\n if (this.#activeController || this.#panelLoads.has(panel.binding.datasetId)) return Promise.resolve(this.snapshot);\n return this.schedulePanel(panel);\n }\n\n retryPanel(panelId: string): Promise<DashboardRuntimeSnapshot> {\n return this.refreshPanel(panelId);\n }\n\n setVariables(patch: DashboardVariablePatch, panelIds?: Iterable<string>): Promise<DashboardRuntimeSnapshot> {\n let context = this.#context;\n Object.entries(patch).forEach(([variableId, value]) => {\n context = writeDashboardVariable(this.config, context, variableId, value);\n });\n this.#context = context;\n if (panelIds === undefined) return this.refreshAll();\n\n const activeDatasetIds = this.datasetIdsForPanels(panelIds);\n this.cancelPanelRefreshes(new Set(this.#panelRefreshes.keys()));\n this.cancelPanelLoads(new Set(this.#panelLoads.keys()));\n this.#activeController?.abort();\n this.#activeController = undefined;\n this.#activeDatasetIds.clear();\n this.#activeShowsGlobalLoading = false;\n const generation = ++this.#generation;\n this.#requestStates.forEach((state, requestId) => {\n this.#requestStates.set(requestId, Object.freeze({ id: state.id, status: \"idle\", generation }));\n });\n const inactiveDatasetIds = new Set(this.config.datasets.map((dataset) => dataset.id));\n activeDatasetIds.forEach((datasetId) => inactiveDatasetIds.delete(datasetId));\n this.resetDatasets(inactiveDatasetIds, generation);\n\n if (!activeDatasetIds.size) {\n this.notify();\n return Promise.resolve(this.snapshot);\n }\n return this.schedule(activeDatasetIds, true);\n }\n\n restoreContext(search: string, variables?: DashboardVariablePatch): DashboardRuntimeSnapshot {\n this.cancelPanelRefreshes(new Set(this.#panelRefreshes.keys()), true);\n this.resetDatasets(new Set(this.#panelLoads.keys()));\n this.#context = this.dataRuntime.restoreContext(search, variables).context;\n this.notify();\n return this.snapshot;\n }\n\n async dispatchEvent(event: VisualizationEvent): Promise<void> {\n const panel = this.requirePanel(event.panelId);\n const actions = panel.enhancement?.common?.interactions?.filter((item) => item.event === event.type) ?? [];\n await Promise.all(\n actions.map((item) => this.dataRuntime.registries.actions.require(item.actionId).execute(event, this.#context))\n );\n }\n\n async executePanelAction(panelId: string, actionItemId: string): Promise<void> {\n const panel = this.requirePanel(panelId);\n const action = panel.actions?.find((item) => item.id === actionItemId);\n if (!action) throw new Error(`Panel action not found: ${panelId}/${actionItemId}`);\n await this.dataRuntime.registries.actions.require(action.actionId).execute(\n {\n type: \"dataPointClick\",\n panelId,\n datasetId: panel.binding.datasetId,\n fields: Object.freeze({})\n },\n this.#context\n );\n }\n\n destroy(): void {\n this.#destroyed = true;\n this.#activeController?.abort();\n this.#activeController = undefined;\n this.#activeDatasetIds.clear();\n this.#activeShowsGlobalLoading = false;\n this.cancelPanelLoads(new Set(this.#panelLoads.keys()));\n this.cancelPanelRefreshes(new Set(this.#panelRefreshes.keys()));\n this.#listeners.clear();\n this.dataRuntime.clear();\n }\n\n private requirePanel(panelId: string): PanelConfig {\n const panel = this.config.panels.find((candidate) => candidate.id === panelId);\n if (!panel) throw new Error(`Panel not found: ${panelId}`);\n return panel;\n }\n\n private notify(): void {\n if (this.#destroyed) return;\n const snapshot = this.snapshot;\n this.#listeners.forEach((listener) => listener(snapshot));\n }\n\n private requestIdsForDatasets(datasetIds: ReadonlySet<string>): Set<string> {\n const requestIds = new Set<string>();\n datasetIds.forEach((datasetId) =>\n this.graph.requestIdsByDatasetId.get(datasetId)?.forEach((requestId) => requestIds.add(requestId))\n );\n return requestIds;\n }\n\n private datasetIdsForPanels(panelIds: Iterable<string>): Set<string> {\n const datasetIds = new Set<string>();\n for (const panelId of panelIds) {\n this.requirePanel(panelId);\n const datasetId = this.graph.datasetIdByPanelId.get(panelId);\n if (datasetId) datasetIds.add(datasetId);\n }\n return datasetIds;\n }\n\n private resetDatasets(datasetIds: ReadonlySet<string>, generation = this.#generation): void {\n const panelIds = collectDownstreamPanelIds(this.graph, datasetIds);\n this.cancelPanelRefreshes(panelIds);\n this.cancelPanelLoads(datasetIds);\n datasetIds.forEach((datasetId) => {\n this.#datasetStates.set(datasetId, Object.freeze({ id: datasetId, status: \"idle\", generation }));\n });\n panelIds.forEach((panelId) => {\n this.#panelStates.set(panelId, Object.freeze({ id: panelId, status: \"idle\", generation, isRefreshing: false }));\n });\n }\n\n private deferUnselectedDatasets(selectedDatasetIds: ReadonlySet<string>, generation: number): Set<string> {\n const deferredDatasetIds = new Set(this.config.datasets.map((dataset) => dataset.id));\n selectedDatasetIds.forEach((datasetId) => deferredDatasetIds.delete(datasetId));\n if (!deferredDatasetIds.size) return deferredDatasetIds;\n\n const selectedRequestIds = this.requestIdsForDatasets(selectedDatasetIds);\n const deferredRequestIds = this.requestIdsForDatasets(deferredDatasetIds);\n deferredRequestIds.forEach((requestId) => {\n this.dataRuntime.datasetRunner.requestExecutor.invalidateRequest(requestId);\n if (!selectedRequestIds.has(requestId)) {\n this.#requestStates.set(requestId, Object.freeze({ id: requestId, status: \"idle\", generation }));\n }\n });\n deferredDatasetIds.forEach((datasetId) => {\n this.dataRuntime.datasetRunner.invalidateDataset(datasetId);\n });\n this.resetDatasets(deferredDatasetIds, generation);\n return deferredDatasetIds;\n }\n\n private loadPanelDatasets(datasetIds: ReadonlySet<string>): Promise<DashboardRuntimeSnapshot> {\n if (this.#destroyed) return Promise.reject(new Error(\"DashboardRuntime has been destroyed.\"));\n const operations: Promise<void>[] = [];\n datasetIds.forEach((datasetId) => {\n const existing = this.#panelLoads.get(datasetId);\n if (existing) {\n operations.push(existing.promise);\n return;\n }\n const status = this.#datasetStates.get(datasetId)?.status;\n if (status !== \"idle\" && status !== \"cancelled\") return;\n operations.push(this.schedulePanelLoad(datasetId));\n });\n if (!operations.length) return Promise.resolve(this.snapshot);\n return Promise.all(operations).then(() => this.snapshot);\n }\n\n private schedulePanelLoad(datasetId: string): Promise<void> {\n const controller = new AbortController();\n const generation = ++this.#panelGeneration;\n const context = this.#context;\n const startedAt = now();\n const operation: DatasetLoadOperation = {\n controller,\n context,\n generation,\n startedAt,\n promise: Promise.resolve()\n };\n this.#panelLoads.set(datasetId, operation);\n\n const requestIds = this.graph.requestIdsByDatasetId.get(datasetId) ?? new Set<string>();\n const panelIds = this.graph.panelIdsByDatasetId.get(datasetId) ?? new Set<string>();\n requestIds.forEach((requestId) => {\n this.#requestStates.set(requestId, Object.freeze({ id: requestId, status: \"loading\", generation, startedAt }));\n });\n const previousDataset = this.#datasetStates.get(datasetId)!;\n const { error: _datasetError, ...datasetWithoutError } = previousDataset;\n this.#datasetStates.set(datasetId, Object.freeze({ ...datasetWithoutError, status: \"loading\", generation }));\n panelIds.forEach((panelId) => {\n const previous = this.#panelStates.get(panelId)!;\n const { error: _panelError, ...stateWithoutError } = previous;\n this.#panelStates.set(\n panelId,\n Object.freeze({\n ...stateWithoutError,\n status: previous.viewModel ? previous.status : \"loading\",\n generation,\n isRefreshing: Boolean(previous.viewModel)\n })\n );\n });\n this.notify();\n\n operation.promise = this.executePanelLoad(datasetId, operation, requestIds, panelIds);\n return operation.promise;\n }\n\n private async executePanelLoad(\n datasetId: string,\n operation: DatasetLoadOperation,\n requestIds: ReadonlySet<string>,\n panelIds: ReadonlySet<string>\n ): Promise<void> {\n try {\n const result = await this.dataRuntime.runDataset(datasetId, operation.context, {\n signal: operation.controller.signal\n });\n if (this.#panelLoads.get(datasetId) !== operation || this.#destroyed) return;\n this.#datasetStates.set(\n datasetId,\n Object.freeze({\n id: datasetId,\n status: result.rows.length ? \"success\" : \"empty\",\n generation: operation.generation,\n result,\n lastSuccessfulAt: result.updatedAt\n })\n );\n requestIds.forEach((requestId) => {\n this.#requestStates.set(\n requestId,\n Object.freeze({\n id: requestId,\n status: \"success\",\n generation: operation.generation,\n startedAt: operation.startedAt,\n completedAt: now()\n })\n );\n });\n this.config.panels\n .filter((panel) => panel.binding.datasetId === datasetId && panelIds.has(panel.id))\n .forEach((panel) => this.adaptPanel(panel, result, operation.generation, operation.context));\n } catch (error) {\n if (this.#panelLoads.get(datasetId) !== operation || this.#destroyed || operation.controller.signal.aborted) {\n return;\n }\n const status: LoadStatus = isAbortError(error) ? \"cancelled\" : \"error\";\n const previous = this.#datasetStates.get(datasetId)!;\n this.#datasetStates.set(\n datasetId,\n Object.freeze({\n ...previous,\n status: previous.result && !isAbortError(error) ? \"stale\" : status,\n generation: operation.generation,\n error: toRuntimeError(error, \"dataset_failed\")\n })\n );\n requestIds.forEach((requestId) => {\n this.#requestStates.set(\n requestId,\n Object.freeze({\n id: requestId,\n status,\n generation: operation.generation,\n startedAt: operation.startedAt,\n completedAt: now(),\n error: toRuntimeError(error, \"request_failed\")\n })\n );\n });\n panelIds.forEach((panelId) => this.failPanel(panelId, operation.generation, error, \"dataset_failed\"));\n } finally {\n if (this.#panelLoads.get(datasetId) === operation) {\n this.#panelLoads.delete(datasetId);\n this.notify();\n }\n }\n }\n\n private cancelPanelLoads(datasetIds: ReadonlySet<string>): void {\n datasetIds.forEach((datasetId) => {\n const operation = this.#panelLoads.get(datasetId);\n if (!operation) return;\n this.#panelLoads.delete(datasetId);\n operation.controller.abort();\n });\n }\n\n private applyPresets(panel: PanelConfig): VisualizationEnhancement | undefined {\n let enhancement = panel.enhancement;\n panel.enhancement?.common?.presetIds?.forEach((presetId) => {\n enhancement = this.dataRuntime.registries.presets.require(presetId).apply(enhancement);\n });\n return enhancement;\n }\n\n private adaptPanel(\n panel: PanelConfig,\n dataset: DatasetResult,\n generation: number,\n context: DashboardContext = this.#context\n ): void {\n try {\n const definition = this.dataRuntime.registries.rendererDefinitions.require(panel.rendererId);\n const adapter = this.dataRuntime.registries.adapters.require(\n panel.adapterId ?? definition.defaultAdapterId\n ) as VisualizationAdapter<PanelBinding, VisualizationEnhancement, VisualizationViewModelBase>;\n const enhancement = this.applyPresets(panel);\n const viewModel = adapter.adapt({\n dataset,\n binding: panel.binding,\n ...(enhancement ? { enhancement } : {}),\n context\n });\n const status: LoadStatus = viewModel.empty ? \"empty\" : \"success\";\n this.#panelStates.set(\n panel.id,\n Object.freeze({\n id: panel.id,\n status,\n generation,\n isRefreshing: false,\n viewModel,\n dataset,\n lastSuccessfulAt: dataset.updatedAt\n })\n );\n } catch (error) {\n emitTelemetry(this.options.telemetry, {\n name: \"adapter_failed\",\n dashboardId: this.config.id,\n panelId: panel.id,\n datasetId: panel.binding.datasetId,\n errorCode: \"adapter_failed\"\n });\n this.failPanel(panel.id, generation, error, \"adapter_failed\");\n }\n }\n\n private failPanel(panelId: string, generation: number, error: unknown, code: string): void {\n const previous = this.#panelStates.get(panelId)!;\n this.#panelStates.set(\n panelId,\n Object.freeze({\n ...previous,\n status: previous.viewModel ? \"stale\" : isAbortError(error) ? \"cancelled\" : \"error\",\n generation,\n isRefreshing: false,\n error: toRuntimeError(error, code)\n })\n );\n }\n\n private cancelPanelRefreshes(panelIds: ReadonlySet<string>, restore = false): void {\n panelIds.forEach((panelId) => {\n const operation = this.#panelRefreshes.get(panelId);\n if (!operation) return;\n this.#panelRefreshes.delete(panelId);\n operation.controller.abort();\n if (restore && this.#panelStates.get(panelId)?.generation === operation.generation) {\n this.#panelStates.set(panelId, operation.previousState);\n }\n });\n }\n\n private async schedulePanel(panel: PanelConfig): Promise<DashboardRuntimeSnapshot> {\n if (this.#destroyed) throw new Error(\"DashboardRuntime has been destroyed.\");\n const datasetId = panel.binding.datasetId;\n const previousOperation = this.#panelRefreshes.get(panel.id);\n const previousState = previousOperation?.previousState ?? this.#panelStates.get(panel.id)!;\n if (previousOperation) {\n this.#panelRefreshes.delete(panel.id);\n previousOperation.controller.abort();\n }\n\n const controller = new AbortController();\n const generation = ++this.#panelGeneration;\n const context = this.#context;\n const operation = { controller, generation, previousState };\n this.#panelRefreshes.set(panel.id, operation);\n\n const { error: _error, viewModel, dataset, ...stateWithoutResult } = previousState;\n const hasVisibleViewModel = Boolean(viewModel && !viewModel.empty);\n this.#panelStates.set(\n panel.id,\n Object.freeze({\n ...stateWithoutResult,\n ...(hasVisibleViewModel && viewModel ? { viewModel } : {}),\n ...(hasVisibleViewModel && dataset ? { dataset } : {}),\n status: hasVisibleViewModel ? (previousState.status === \"stale\" ? \"success\" : previousState.status) : \"loading\",\n generation,\n isRefreshing: hasVisibleViewModel\n })\n );\n this.notify();\n\n try {\n const result = await this.dataRuntime.runDataset(datasetId, context, {\n signal: controller.signal,\n force: true,\n isolated: true\n });\n if (this.#panelRefreshes.get(panel.id) !== operation || this.#destroyed) return this.snapshot;\n this.adaptPanel(panel, result, generation, context);\n } catch (error) {\n if (this.#panelRefreshes.get(panel.id) !== operation || this.#destroyed || controller.signal.aborted) {\n return this.snapshot;\n }\n this.failPanel(panel.id, generation, error, \"dataset_failed\");\n } finally {\n if (this.#panelRefreshes.get(panel.id) === operation) {\n this.#panelRefreshes.delete(panel.id);\n this.notify();\n }\n }\n return this.snapshot;\n }\n\n private async schedule(\n datasetIds: Set<string>,\n invalidate: boolean,\n showGlobalLoading = true\n ): Promise<DashboardRuntimeSnapshot> {\n if (this.#destroyed) throw new Error(\"DashboardRuntime has been destroyed.\");\n const requestIds = this.requestIdsForDatasets(datasetIds);\n const panelIds = collectDownstreamPanelIds(this.graph, datasetIds);\n this.cancelPanelRefreshes(panelIds);\n this.cancelPanelLoads(datasetIds);\n this.#activeController?.abort();\n const controller = new AbortController();\n this.#activeController = controller;\n this.#activeDatasetIds = new Set(datasetIds);\n this.#activeShowsGlobalLoading = showGlobalLoading;\n const generation = ++this.#generation;\n const startedAt = now();\n\n if (invalidate) {\n requestIds.forEach((requestId) => this.dataRuntime.datasetRunner.requestExecutor.invalidateRequest(requestId));\n datasetIds.forEach((datasetId) => this.dataRuntime.datasetRunner.invalidateDataset(datasetId));\n }\n\n requestIds.forEach((requestId) => {\n this.#requestStates.set(requestId, Object.freeze({ id: requestId, status: \"loading\", generation, startedAt }));\n });\n datasetIds.forEach((datasetId) => {\n const previous = this.#datasetStates.get(datasetId)!;\n const { error: _error, ...stateWithoutError } = previous;\n this.#datasetStates.set(\n datasetId,\n Object.freeze({\n ...stateWithoutError,\n status: \"loading\",\n generation\n })\n );\n });\n panelIds.forEach((panelId) => {\n const previous = this.#panelStates.get(panelId)!;\n const { error: _error, viewModel, dataset, ...stateWithoutResult } = previous;\n const hasVisibleViewModel = Boolean(viewModel && !viewModel.empty);\n this.#panelStates.set(\n panelId,\n Object.freeze({\n ...stateWithoutResult,\n ...(hasVisibleViewModel && viewModel ? { viewModel } : {}),\n ...(hasVisibleViewModel && dataset ? { dataset } : {}),\n status: hasVisibleViewModel ? previous.status : \"loading\",\n generation,\n isRefreshing: hasVisibleViewModel\n })\n );\n });\n this.notify();\n\n await Promise.all(\n Array.from(datasetIds, async (datasetId) => {\n try {\n const result = await this.dataRuntime.runDataset(datasetId, this.#context, { signal: controller.signal });\n if (generation !== this.#generation || this.#destroyed) return;\n this.#datasetStates.set(\n datasetId,\n Object.freeze({\n id: datasetId,\n status: result.rows.length ? \"success\" : \"empty\",\n generation,\n result,\n lastSuccessfulAt: result.updatedAt\n })\n );\n this.graph.requestIdsByDatasetId.get(datasetId)?.forEach((requestId) => {\n this.#requestStates.set(\n requestId,\n Object.freeze({\n id: requestId,\n status: \"success\",\n generation,\n startedAt,\n completedAt: now()\n })\n );\n });\n this.config.panels\n .filter((panel) => panel.binding.datasetId === datasetId && panelIds.has(panel.id))\n .forEach((panel) => this.adaptPanel(panel, result, generation));\n } catch (error) {\n if (generation !== this.#generation || this.#destroyed) return;\n const status: LoadStatus = isAbortError(error) ? \"cancelled\" : \"error\";\n const previous = this.#datasetStates.get(datasetId)!;\n this.#datasetStates.set(\n datasetId,\n Object.freeze({\n ...previous,\n status: previous.result && !isAbortError(error) ? \"stale\" : status,\n generation,\n error: toRuntimeError(error, \"dataset_failed\")\n })\n );\n this.graph.requestIdsByDatasetId.get(datasetId)?.forEach((requestId) => {\n this.#requestStates.set(\n requestId,\n Object.freeze({\n id: requestId,\n status,\n generation,\n startedAt,\n completedAt: now(),\n error: toRuntimeError(error, \"request_failed\")\n })\n );\n });\n this.config.panels\n .filter((panel) => panel.binding.datasetId === datasetId && panelIds.has(panel.id))\n .forEach((panel) => this.failPanel(panel.id, generation, error, \"dataset_failed\"));\n } finally {\n if (generation === this.#generation && this.#activeController === controller && !this.#destroyed) {\n this.notify();\n }\n }\n })\n );\n\n if (generation === this.#generation && this.#activeController === controller) {\n this.#activeController = undefined;\n this.#activeDatasetIds.clear();\n this.#activeShowsGlobalLoading = false;\n this.notify();\n }\n return this.snapshot;\n }\n}\n\nexport function createDashboardRuntime(options: DashboardRuntimeOptions): DashboardRuntime {\n return new DashboardRuntime(options);\n}\n"],"names":["dashboardConfigRuntimeSchema","createTypeBoxRuntimeSchema","DashboardConfigSchema","JsonValueSchema","parseDashboardConfig","value","isJsonValue","RuntimeSchemaValidationError","DashboardConfigValidationError","diagnostics","diagnostic","__publicField","findDuplicates","values","seen","duplicates","bindingFields","binding","field","addFieldSemanticDiagnostic","panelIndex","fieldId","expectation","predicate","addBindingSemanticDiagnostics","panel","fieldsById","metricNumber","category","dimension","check","format","_c","_b","_a","stableSerializeJson","rowFields","duplicateDimension","columnDisplays","display","addPluginSchemaDiagnostics","definition","bindingResult","issue","enhancementResult","validateDashboardConfig","registries","options","structureResult","config","variables","variableIds","variable","requestIds","request","datasetsById","dataset","item","code","path","ids","id","urlKey","control","index","variableId","preset","presetId","optionValues","option","optionValue","requestIndex","provider","inputName","datasetIndex","fieldKey","input","fieldIndex","expectedType","fieldIds","_d","_e","_f","_g","_h","minFontSize","_i","maxFontSize","_j","adapterId","_l","_k","_n","_m","interaction","action","actionId","actionIndex","emitTelemetry","assertDashboardConfig","result","blockedPathSegments","readValueAtPath","source","current","segment","RequestInputError","requestId","message","isEmptyValue","resolveDataRequestInput","context","codecs","cloneJsonValue","readDashboardVariable","encoded","ProviderInputValidationError","providerId","operationId","issues","createAbortError","isAbortError","error","signal","createRequestCacheKey","RequestExecutor","providers","__privateAdd","_cache","_inflight","_isolatedControllers","_keysByRequestId","_version","_executionSequence","requestConfigId","candidate","callerSignal","cacheKey","isolated","executionId","__privateWrapper","cached","__privateGet","existing","abortExisting","operation","inputValidation","startedAt","controller","abortRequest","promise","event","response","entry","aborted","key","keys","createCoreRegistries","PluginRegistry","createRequestValueCodecRegistry","registerStandardCore","STANDARD_ADAPTERS","STANDARD_RENDERER_DEFINITIONS","createStandardCoreRegistries","RequestValueCodecError","codecId","requireFiniteNumber","isValidDateOnly","match","year","month","day","date","BUILT_IN_REQUEST_VALUE_CODECS","dateOnly","parsed","normalizeDate","dataType","normalizeFieldValue","normalizeDatasetRows","candidateRows","initialDiagnostics","rows","rowIndex","output","rawValue","DatasetExecutionError","datasetId","getInputDefinitions","toCandidateRows","latestUpdatedAt","inputs","timestamps","DatasetRunner","requestExecutor","transformers","_datasetCache","_cacheKeysByDatasetId","resolvedInputs","name","execution","requestVersions","namedInputs","transformerDiagnostics","transformed","normalized","DashboardDataRuntime","_registries","_contextDefaults","_telemetry","__privateSet","telemetryOptions","createDashboardContext","search","restoreDashboardContextFromSearch","createDashboardDataRuntime","requestIdsForDataset","addToSetMap","map","createDashboardDependencyGraph","requestIdsByDatasetId","datasetIdsByRequestId","panelIdsByDatasetId","datasetIdByPanelId","collectDownstreamDatasetIds","graph","datasetIds","collectDownstreamPanelIds","panelIds","panelId","now","toRuntimeError","fallbackCode","toRecord","states","DashboardRuntime","_listeners","_requestStates","_datasetStates","_panelStates","_panelRefreshes","_panelLoads","_context","_generation","_panelGeneration","_activeController","_activeDatasetIds","_activeShowsGlobalLoading","_destroyed","listener","deferredDatasetIds","inactiveSharedDatasetIds","patch","writeDashboardVariable","activeDatasetIds","generation","state","inactiveDatasetIds","actions","actionItemId","snapshot","selectedDatasetIds","selectedRequestIds","operations","status","previousDataset","_datasetError","datasetWithoutError","previous","_panelError","stateWithoutError","enhancement","adapter","viewModel","restore","previousOperation","previousState","_error","stateWithoutResult","hasVisibleViewModel","invalidate","showGlobalLoading","createDashboardRuntime"],"mappings":"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"}
|