@tanstack/db
Version:
A reactive client store for building super fast apps on sync
26 lines (22 loc) • 859 B
text/typescript
import type { RefProxy } from './ref-proxy.js'
/**
* Ref proxy traps answer this module-private key, so a user object shaped
* like a ref proxy is never mistaken for one.
*/
export const REF_PROXY_BRAND: unique symbol = Symbol(`refProxy`)
/** The brand a ref proxy answers, or undefined for any other value. */
export function readRefProxyBrand(value: unknown): unknown {
if (!value || typeof value !== `object`) return undefined
try {
const brand = (value as Record<symbol, unknown>)[REF_PROXY_BRAND]
return brand === true || Array.isArray(brand) ? brand : undefined
} catch {
// A revoked proxy, such as a finished Immer draft, is not a ref proxy.
return undefined
}
}
export function isRefProxy(value: any): value is RefProxy {
return (
value && typeof value === `object` && readRefProxyBrand(value) !== undefined
)
}