UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

73 lines (70 loc) • 1.86 kB
import { getNativeSyncFactory } from "./syncNative.mjs"; const SYNC_STATE_ID_KEY = "__one_sync_state_id__"; const SYNC_STATE_BRAND = "__one_sync_state__"; function isSyncState(value) { if (value == null || typeof value !== "object") return false; const obj = value; return obj["__one_sync_state__"] === true && typeof obj["__one_sync_state_id__"] === "number" && obj["__one_sync_state_id__"] !== 0; } function getSyncStateId(state) { if (!state) return void 0; return state[SYNC_STATE_ID_KEY]; } const PUBLISH_NATIVE = /* @__PURE__ */ Symbol("publishNative"); function publishNativeSyncState(state) { ; state?.[PUBLISH_NATIVE](); } function createSyncState(initial) { const host = getNativeSyncFactory().create(initial); let onChange = null; const listeners = /* @__PURE__ */ new Set(); let published = host.get(); const publish = (next) => { if (Object.is(published, next)) return; published = next; for (const listener of [...listeners]) listener(next); }; const state = { get value() { return host.get(); }, set value(next) { state.set(next); }, get() { return host.get(); }, set(next) { if (!Object.is(host.get(), next)) host.set(next); publish(next); }, get onChange() { return onChange; }, set onChange(next) { onChange = next ?? null; host.setOnChange(onChange); }, subscribe(listener) { listeners.add(listener); return () => { listeners.delete(listener); }; }, release() { listeners.clear(); onChange = null; host.release(); }, getSnapshot() { return host.get(); }, [SYNC_STATE_BRAND]: true, [SYNC_STATE_ID_KEY]: host.id, [PUBLISH_NATIVE]: () => publish(host.get()) }; return state; } export { SYNC_STATE_BRAND, SYNC_STATE_ID_KEY, createSyncState, getSyncStateId, isSyncState, publishNativeSyncState }; //# sourceMappingURL=syncStore.mjs.map