clone

a browser-first diagram editor with live svg previews, local drafts and encrypted, accountless sharing

main
diagramzip / renderers / edge / src / adapters / wavedrom.ts
wavedrom.ts 1.8K
1import JSON5 from 'json5'2import { s as serializeOnml } from 'onml'3import { renderAny } from 'wavedrom'4import darkSkins from 'wavedrom/skins/dark.js'5import defaultSkins from 'wavedrom/skins/default.js'6import lowkeySkins from 'wavedrom/skins/lowkey.js'7import narrowSkins from 'wavedrom/skins/narrow.js'8import narrowerSkins from 'wavedrom/skins/narrower.js'9import narrowererSkins from 'wavedrom/skins/narrowerer.js'10import { RenderError } from '../runtime/errors'11import type { RendererAdapter } from '../runtime/types'12import { edgeFailure, edgeResult } from './types'1314const VERSION = 'wavedrom@3.6.2'1516const skins = {17 dark: darkSkins.dark,18 default: defaultSkins.default,19 lowkey: lowkeySkins.lowkey,20 narrow: narrowSkins.narrow,21 narrower: narrowerSkins.narrower,22 narrowerer: narrowererSkins.narrowerer,23}2425export const wavedromAdapter: RendererAdapter = {26 id: 'wavedrom',27 runtime: 'edge-js',28 version: VERSION,29 render(request, signal) {30 if (signal.aborted) throw signal.reason31 try {32 const specification: unknown = JSON5.parse(request.source)33 const skin = request.options.skin34 if (skin !== undefined && !(skin in skins)) {35 throw new RenderError(400, 'invalid_options', `Unknown WaveDrom skin: ${skin}.`)36 }37 if (skin !== undefined && typeof specification === 'object' && specification !== null) {38 const currentConfig = 'config' in specification && typeof specification.config === 'object' && specification.config !== null39 ? specification.config40 : {}41 Object.assign(specification, { config: { ...currentConfig, skin } })42 }43 return Promise.resolve(edgeResult('wavedrom', VERSION, serializeOnml(renderAny(0, specification, skins))))44 } catch (error) {45 return edgeFailure('wavedrom', error)46 }47 },48}