import { G2Spec } from '../spec'; import { G2Library } from '../runtime'; import { Runtime, RuntimeOptions } from './runtime'; import { MarkOf, CompositionOf as Of } from './types'; import { MarkNode } from './mark'; import { CompositionNode } from './composition'; type BuiltinComposition = { 'composition.mark': any; 'composition.view': any; }; export type CompositionOf = Of< Library, (composite?) => CompositionAPI >; export type CompositionAPI = CompositionNode< CompositionOf & MarkOf MarkNode> > & MarkOf MarkNode> & CompositionOf; export type API = Runtime & MarkOf MarkNode> & CompositionOf; export function extend< Spec extends G2Spec = G2Spec, Library extends G2Library = G2Library, >( Runtime: new (options: RuntimeOptions) => Runtime, library: Library, ): new (options?: RuntimeOptions) => API { class Chart extends Runtime { constructor(options: Omit) { super({ ...options, lib: library }); } } return Chart as any; }