docs(canvas): explain registry contracts and editor publication flow

This commit is contained in:
2026-11-11 23:41:13 +08:00
parent aaeb5acf6e
commit afa30d4b35
8 changed files with 188 additions and 3 deletions
+7
View File
@@ -1,11 +1,18 @@
/**
* 对已适合 JSON 往返的数据做脱离与冻结,并记录该次捕获的来源。
* 输入是否合法由调用边界负责;来源证明不等于组件 schema、owner 或引用已合法。
*/
import {clone,freeze} from './values.ts';
// Private provenance for a fresh, recursively frozen JSON clone. A caller can
// request a detached copy, but cannot grant this fact to an existing object.
const detached=new WeakSet<object>();
/** JSON 复制后递归冻结;对象结果记录到 WeakSet,原始值直接返回。
* clone 会按 JSON 规则处理数据,所以不可用它代替迁移输入的严格捕获校验。 */
export function detachJsonData<T>(input:T):T {
const value=freeze(clone(input));
if(value&&typeof value==='object')detached.add(value);
return value;
}
/** 只查询本模块产生的对象身份,不从外部 frozen 状态反推来源。 */
export const hasDetachedJsonData=(value:object)=>detached.has(value);