docs(core): clarify capture validation and replay guarantees
This commit is contained in:
@@ -4,12 +4,14 @@
|
||||
*/
|
||||
// Private shape provenance: values may still be mutable and require capture.
|
||||
// Always copy; external Object.freeze is never accepted as ownership evidence.
|
||||
// WeakSet 以新容器身份为键,不按内容相等判断;容器不再被外部引用时,标记不会单独阻止回收。
|
||||
const owned = new WeakSet<object>();
|
||||
/** 消费 iterable 得到新数组并浅冻结;不会冻结数组中的业务值。 */
|
||||
export function dataArray<T>(values: Iterable<T>): readonly T[] {
|
||||
const result = Object.freeze(Array.from(values)); owned.add(result); return result;
|
||||
}
|
||||
/** 浅复制对象的可枚举自有属性再冻结外壳;不是任意对象的深复制器。 */
|
||||
/** 浅复制对象的可枚举自有属性再冻结外壳;不是任意对象的深复制器。
|
||||
* 对象展开会读取 getter 并保留嵌套值引用,也不保留原对象原型或属性描述符。 */
|
||||
export function dataRecord<T extends object>(value: T): Readonly<T> {
|
||||
const result = Object.freeze({...value}); owned.add(result); return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user