export const Reuse = Symbol.for("@opennetwork/progressive-merge/reuse"); export function isReuse(value: T): value is T & { [Reuse]: true } { function isReuseLike(value: object): value is { [Reuse]: unknown } { return !!value; } return isReuseLike(value) && value[Reuse] === true; } export function setReuse(value: T): asserts value is T & { [Reuse]: true } { if (isReuse(value)) { return; } Object.defineProperty(value, Reuse, { get() { return true; } }); }