1import { compile, type TopLevelSpec } from 'vega-lite'2import { RenderError } from '../runtime/errors'3import type { RendererAdapter } from '../runtime/types'4import { containsUrl, parsedSpecification, renderVegaSpecification } from './vega-common'5import { edgeFailure, edgeResult } from './types'67const VERSION = 'vega-lite@6.4.3'89const viewKeys = ['mark', 'layer', 'facet', 'repeat', 'concat', 'hconcat', 'vconcat']1011export const vegaliteAdapter: RendererAdapter = {12 id: 'vegalite',13 runtime: 'edge-js',14 version: VERSION,15 async render(request, signal) {16 if (signal.aborted) throw signal.reason17 try {18 const input = parsedSpecification(request.source)19 if (!viewKeys.some(name => name in input)) {20 throw new RenderError(422, 'render_failed', 'Vega-Lite source has no top-level view specification.')21 }22 if (containsUrl(input)) {23 throw new RenderError(422, 'unsafe_include', 'URL-backed Vega data and images are disabled; embed data as values.')24 }25 return edgeResult('vegalite', VERSION, await renderVegaSpecification(compile(input as unknown as TopLevelSpec).spec))26 } catch (error) {27 return edgeFailure('vegalite', error)28 }29 },30}