import type { BlockModel } from './block-model.js'; type PropsInDraft = 'version' | 'flavour' | 'role' | 'id' | 'keys' | 'text'; type ModelProps = Model extends BlockModel ? U : never; const draftModelSymbol = Symbol('draftModel'); export type DraftModel = Pick< Model, PropsInDraft > & { children: DraftModel[]; props: ModelProps; [draftModelSymbol]: true; }; export function toDraftModel( origin: Model ): DraftModel { const { id, version, flavour, role, keys, text, children } = origin; const props = origin.keys.reduce((acc, key) => { const target = origin.props; const value = target[key as keyof typeof target]; return { ...acc, [key]: value, }; }, {} as ModelProps); return { id, version, flavour, role, keys, text, children: children.map(toDraftModel), props, } as DraftModel; }