{"version":3,"file":"runtime-reference-identity.cjs","sources":["../../../src/query/runtime-reference-identity.ts"],"sourcesContent":["export type RuntimeReferenceIdentity = [\n  `runtimeReference`,\n  namespace: string,\n  sequence: number,\n]\n\ntype ReferenceIdStore<TKey> = {\n  get: (key: TKey) => number | undefined\n  set: (key: TKey, value: number) => unknown\n}\n\nexport function createRuntimeReferenceIdentityFactory(): (\n  value: object | symbol,\n) => RuntimeReferenceIdentity {\n  const referenceIds = new WeakMap<object, number>()\n  let localSymbolIds: ReferenceIdStore<symbol> | undefined\n  let registeredSymbolIds: Map<string, number> | undefined\n  let namespace: string | undefined\n  let sequence = 0\n\n  const getReferenceId = <TKey>(\n    ids: ReferenceIdStore<TKey>,\n    key: TKey,\n  ): number => {\n    let referenceId = ids.get(key)\n    if (referenceId === undefined) {\n      referenceId = ++sequence\n      ids.set(key, referenceId)\n    }\n    return referenceId\n  }\n\n  return (value) => {\n    namespace ??= createRuntimeReferenceNamespace()\n    let referenceId: number\n    if (typeof value === `symbol`) {\n      const registeredKey = Symbol.keyFor(value)\n      if (registeredKey === undefined) {\n        localSymbolIds ??= createLocalSymbolIdStore()\n        referenceId = getReferenceId(localSymbolIds, value)\n      } else {\n        registeredSymbolIds ??= new Map<string, number>()\n        referenceId = getReferenceId(registeredSymbolIds, registeredKey)\n      }\n    } else {\n      referenceId = getReferenceId(referenceIds, value)\n    }\n    return [`runtimeReference`, namespace, referenceId]\n  }\n}\n\nfunction createLocalSymbolIdStore(): ReferenceIdStore<symbol> {\n  const weakIds = new WeakMap<\n    object,\n    number\n  >() as unknown as ReferenceIdStore<symbol>\n  const probe = Symbol()\n\n  try {\n    weakIds.set(probe, 0)\n    if (weakIds.get(probe) === 0) return weakIds\n  } catch {\n    // Older runtimes reject symbols as weak keys. Retain them rather than\n    // collapse distinct symbols and corrupt equality.\n  }\n\n  return new Map<symbol, number>()\n}\n\nlet runtimeReferenceIdentityFactory:\n  | ReturnType<typeof createRuntimeReferenceIdentityFactory>\n  | undefined\n\nexport function getRuntimeReferenceIdentity(\n  value: object | symbol,\n): RuntimeReferenceIdentity {\n  runtimeReferenceIdentityFactory ??= createRuntimeReferenceIdentityFactory()\n\n  return runtimeReferenceIdentityFactory(value)\n}\n\nfunction createRuntimeReferenceNamespace(): string {\n  const randomValues = new Uint32Array(4)\n  const runtimeCrypto = Reflect.get(globalThis, `crypto`) as\n    | { getRandomValues?: (values: Uint32Array) => Uint32Array }\n    | undefined\n  if (typeof runtimeCrypto?.getRandomValues === `function`) {\n    runtimeCrypto.getRandomValues(randomValues)\n    return Array.from(randomValues, (value) => value.toString(36)).join(`-`)\n  }\n\n  // Reference equality cannot survive a runtime boundary. A per-runtime nonce\n  // prevents a persisted key from matching an unrelated reference after a\n  // reload, even on platforms without Web Crypto.\n  return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}-${Math.random().toString(36).slice(2)}`\n}\n"],"names":[],"mappings":";;AAWO,SAAS,wCAEc;AAC5B,QAAM,mCAAmB,QAAA;AACzB,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI,WAAW;AAEf,QAAM,iBAAiB,CACrB,KACA,QACW;AACX,QAAI,cAAc,IAAI,IAAI,GAAG;AAC7B,QAAI,gBAAgB,QAAW;AAC7B,oBAAc,EAAE;AAChB,UAAI,IAAI,KAAK,WAAW;AAAA,IAC1B;AACA,WAAO;AAAA,EACT;AAEA,SAAO,CAAC,UAAU;AAChB,kBAAc,gCAAA;AACd,QAAI;AACJ,QAAI,OAAO,UAAU,UAAU;AAC7B,YAAM,gBAAgB,OAAO,OAAO,KAAK;AACzC,UAAI,kBAAkB,QAAW;AAC/B,2BAAmB,yBAAA;AACnB,sBAAc,eAAe,gBAAgB,KAAK;AAAA,MACpD,OAAO;AACL,oDAA4B,IAAA;AAC5B,sBAAc,eAAe,qBAAqB,aAAa;AAAA,MACjE;AAAA,IACF,OAAO;AACL,oBAAc,eAAe,cAAc,KAAK;AAAA,IAClD;AACA,WAAO,CAAC,oBAAoB,WAAW,WAAW;AAAA,EACpD;AACF;AAEA,SAAS,2BAAqD;AAC5D,QAAM,8BAAc,QAAA;AAIpB,QAAM,QAAQ,uBAAA;AAEd,MAAI;AACF,YAAQ,IAAI,OAAO,CAAC;AACpB,QAAI,QAAQ,IAAI,KAAK,MAAM,EAAG,QAAO;AAAA,EACvC,QAAQ;AAAA,EAGR;AAEA,6BAAW,IAAA;AACb;AAEA,IAAI;AAIG,SAAS,4BACd,OAC0B;AAC1B,sCAAoC,sCAAA;AAEpC,SAAO,gCAAgC,KAAK;AAC9C;AAEA,SAAS,kCAA0C;AACjD,QAAM,eAAe,IAAI,YAAY,CAAC;AACtC,QAAM,gBAAgB,QAAQ,IAAI,YAAY,QAAQ;AAGtD,MAAI,OAAO,eAAe,oBAAoB,YAAY;AACxD,kBAAc,gBAAgB,YAAY;AAC1C,WAAO,MAAM,KAAK,cAAc,CAAC,UAAU,MAAM,SAAS,EAAE,CAAC,EAAE,KAAK,GAAG;AAAA,EACzE;AAKA,SAAO,GAAG,KAAK,IAAA,EAAM,SAAS,EAAE,CAAC,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;AACjH;;;"}