1import { describe, expect, it } from 'vitest'2import { edgeAdapter } from '../src/adapters/index'3import type { RenderRequest } from '../src/runtime/types'45const fixtures = {6 graphviz: 'digraph { a -> b }',7 dbml: 'Table users { id integer [primary key] }',8 erd: '[Person]\n*name\n\n[Place]\n*id\n\nPerson *--1 Place',9 nomnoml: '[Alice]->[Bob]',10 bytefield: '[{:bits 8 :name "field"}]',11 squaring: 'rectangle 3 x 2\nsquares 2 1 1',12 trn: 'ingredient flour\noutcome bread {\n + flour 500 g\n -> bake\n}',13 vega: '{"width":100,"height":50,"marks":[{"type":"rect","encode":{"enter":{"x":{"value":0},"y":{"value":0},"width":{"value":100},"height":{"value":50}}}}]}',14 vegalite: '{"data":{"values":[{"x":"A","y":2}]},"mark":"bar","encoding":{"x":{"field":"x"},"y":{"field":"y","type":"quantitative"}}}',15 wavedrom: '{ signal: [{ name: "clock", wave: "p..." }] }',16} as const1718type FixtureEngine = keyof typeof fixtures1920function request(engine: FixtureEngine): RenderRequest {21 return {22 engine,23 source: fixtures[engine]!,24 format: 'svg',25 options: {},26 metadata: { title: '', description: '' },27 presentation: { background: '', padding: 0, frame: false },28 }29}3031describe('edge renderers', () => {32 for (const engine of Object.keys(fixtures) as FixtureEngine[]) {33 it(`renders ${engine} as SVG`, async () => {34 const result = await edgeAdapter(engine).render(request(engine), new AbortController().signal)35 expect(result.contentType).toBe('image/svg+xml')36 expect(result.body).toMatch(/<svg[\s>]/i)37 })38 }39})