UNPKG

d3-no-dom

Version:

Fully use d3 in environments without DOM

37 lines (36 loc) 1.52 kB
import type { PartialDeep, Promisable } from "type-fest"; import type { BaseType as D3BaseType } from "d3"; type WindowLike = { document: Document & { body: HTMLElement; }; } & Record<string, unknown>; type DomWithBody = { window: WindowLike; }; type DomProvider<T extends DomWithBody> = new (html: string) => T; type PrepareSvgServerSideRendererParams<T extends DomWithBody> = { domProvider: DomProvider<T>; d3Instance: typeof import("d3"); }; type D3Selection<T extends D3BaseType> = import("d3").Selection<T, unknown, null, undefined>; type PrepareSvgServerSideRender<T extends DomWithBody> = ({ currentDom, d3Selection, svgNode, }: { currentDom: T; d3Selection: D3Selection<SVGSVGElement>; svgNode: SVGSVGElement; }) => Promisable<void> | Promisable<string>; type NumericString = `${number}` | `${number}e${number}` | `${number}E${number}`; type SvgViewbox = `${NumericString},${NumericString},${NumericString},${NumericString}` | `${NumericString} ${NumericString} ${NumericString} ${NumericString}`; type PrepareSvgServerSideRenderOptions = PartialDeep<{ svg: { width: number; height: number; viewBox: SvgViewbox; }; safe: boolean; asBase64: boolean; }>; export declare function prepareSvgServerSideRenderer<T extends DomWithBody>({ d3Instance, domProvider, }: PrepareSvgServerSideRendererParams<T>): { render: (fn: PrepareSvgServerSideRender<T>, options?: PrepareSvgServerSideRenderOptions) => Promise<string>; }; export {};