{"version":3,"file":"syncStore.js","names":[],"sources":["esm/platform/syncStore.js"],"sourcesContent":["import { getNativeSyncFactory } from \"./syncNative\";\nconst SYNC_STATE_ID_KEY = \"__one_sync_state_id__\";\nconst SYNC_STATE_BRAND = \"__one_sync_state__\";\nfunction isSyncState(value) {\n  if (value == null || typeof value !== \"object\") return false;\n  const obj = value;\n  return obj[SYNC_STATE_BRAND] === true && typeof obj[SYNC_STATE_ID_KEY] === \"number\" && obj[SYNC_STATE_ID_KEY] !== 0;\n}\nfunction getSyncStateId(state) {\n  if (!state) return void 0;\n  return state[SYNC_STATE_ID_KEY];\n}\nconst PUBLISH_NATIVE = /* @__PURE__ */ Symbol(\"publishNative\");\nfunction publishNativeSyncState(state) {\n  ;\n  state?.[PUBLISH_NATIVE]();\n}\nfunction createSyncState(initial) {\n  const host = getNativeSyncFactory().create(initial);\n  let onChange = null;\n  const listeners = /* @__PURE__ */ new Set();\n  let published = host.get();\n  const publish = (next) => {\n    if (Object.is(published, next)) return;\n    published = next;\n    for (const listener of [...listeners]) listener(next);\n  };\n  const state = {\n    get value() {\n      return host.get();\n    },\n    set value(next) {\n      state.set(next);\n    },\n    get() {\n      return host.get();\n    },\n    set(next) {\n      if (!Object.is(host.get(), next)) host.set(next);\n      publish(next);\n    },\n    get onChange() {\n      return onChange;\n    },\n    set onChange(next) {\n      onChange = next ?? null;\n      host.setOnChange(onChange);\n    },\n    subscribe(listener) {\n      listeners.add(listener);\n      return () => {\n        listeners.delete(listener);\n      };\n    },\n    release() {\n      listeners.clear();\n      onChange = null;\n      host.release();\n    },\n    getSnapshot() {\n      return host.get();\n    },\n    [SYNC_STATE_BRAND]: true,\n    [SYNC_STATE_ID_KEY]: host.id,\n    [PUBLISH_NATIVE]: () => publish(host.get())\n  };\n  return state;\n}\nexport {\n  SYNC_STATE_BRAND,\n  SYNC_STATE_ID_KEY,\n  createSyncState,\n  getSyncStateId,\n  isSyncState,\n  publishNativeSyncState\n};\n//# sourceMappingURL=syncStore.js.map\n"],"mappings":";;;AACA,MAAM,oBAAoB;AAC1B,MAAM,mBAAmB;AACzB,SAAS,YAAY,OAAO;CAC1B,IAAI,SAAS,QAAQ,OAAO,UAAU,UAAU,OAAO;CACvD,MAAM,MAAM;CACZ,OAAO,8BAA0B,QAAQ,OAAO,iCAA2B,YAAY,iCAA2B;AACpH;AACA,SAAS,eAAe,OAAO;CAC7B,IAAI,CAAC,OAAO,OAAO,KAAK;CACxB,OAAO,MAAM;AACf;AACA,MAAM,iBAAiC,uBAAO,eAAe;AAC7D,SAAS,uBAAuB,OAAO;CACrC;CACA,QAAQ,eAAe,CAAC;AAC1B;AACA,SAAS,gBAAgB,SAAS;CAChC,MAAM,OAAO,qBAAqB,CAAC,CAAC,OAAO,OAAO;CAClD,IAAI,WAAW;CACf,MAAM,4BAA4B,IAAI,IAAI;CAC1C,IAAI,YAAY,KAAK,IAAI;CACzB,MAAM,WAAW,SAAS;EACxB,IAAI,OAAO,GAAG,WAAW,IAAI,GAAG;EAChC,YAAY;EACZ,KAAK,MAAM,YAAY,CAAC,GAAG,SAAS,GAAG,SAAS,IAAI;CACtD;CACA,MAAM,QAAQ;EACZ,IAAI,QAAQ;GACV,OAAO,KAAK,IAAI;EAClB;EACA,IAAI,MAAM,MAAM;GACd,MAAM,IAAI,IAAI;EAChB;EACA,MAAM;GACJ,OAAO,KAAK,IAAI;EAClB;EACA,IAAI,MAAM;GACR,IAAI,CAAC,OAAO,GAAG,KAAK,IAAI,GAAG,IAAI,GAAG,KAAK,IAAI,IAAI;GAC/C,QAAQ,IAAI;EACd;EACA,IAAI,WAAW;GACb,OAAO;EACT;EACA,IAAI,SAAS,MAAM;GACjB,WAAW,QAAQ;GACnB,KAAK,YAAY,QAAQ;EAC3B;EACA,UAAU,UAAU;GAClB,UAAU,IAAI,QAAQ;GACtB,aAAa;IACX,UAAU,OAAO,QAAQ;GAC3B;EACF;EACA,UAAU;GACR,UAAU,MAAM;GAChB,WAAW;GACX,KAAK,QAAQ;EACf;EACA,cAAc;GACZ,OAAO,KAAK,IAAI;EAClB;GACC,mBAAmB;GACnB,oBAAoB,KAAK;GACzB,uBAAuB,QAAQ,KAAK,IAAI,CAAC;CAC5C;CACA,OAAO;AACT"}