Share core-owned immutable elements and validation facts

This commit is contained in:
2026-11-10 16:07:02 +08:00
parent c8e5f6ac49
commit a6092e61cd
7 changed files with 128 additions and 35 deletions
+2 -1
View File
@@ -1,3 +1,4 @@
import {detachElementData} from './element-data.ts';
import type {CanvasRecord,Change,Document,ElementRecord,Id} from './types.ts';
import {applyChanges} from './document.ts';
import {clone,fault,freeze,readMap,validJson} from './values.ts';
@@ -23,7 +24,7 @@ export function stageCreation(document:Document,change:Extract<Change,{kind:'can
if(change.before!==null||!change.after)throw fault('invalid_creation_draft');
if(!validJson(change.after))throw fault(change.kind==='canvas'?'invalid_canvas':'invalid_element',[change.id]);
if(change.after.id!==change.id)throw fault('identity_mismatch',[change.id]);
const value=freeze(clone(change.after));
const value=change.kind==='element'?detachElementData(change.after as ElementRecord):freeze(clone(change.after));
const next=Object.freeze({...document,...(change.kind==='canvas'?{canvases:append(document.canvases,change.id,value as CanvasRecord)}:{elements:append(document.elements,change.id,value as ElementRecord)})});drafts.add(next);return next;
}
/** Only published documents use the core's owned table envelopes. */