UNPKG

one

Version:

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

89 lines (88 loc) • 2.56 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var syncStore_exports = {}; __export(syncStore_exports, { SYNC_STATE_BRAND: () => SYNC_STATE_BRAND, SYNC_STATE_ID_KEY: () => SYNC_STATE_ID_KEY, createSyncState: () => createSyncState, getSyncStateId: () => getSyncStateId, isSyncState: () => isSyncState }); module.exports = __toCommonJS(syncStore_exports); var import_syncNative = require("./syncNative.cjs"); 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[SYNC_STATE_BRAND] === true && typeof obj[SYNC_STATE_ID_KEY] === "number" && obj[SYNC_STATE_ID_KEY] !== 0; } function getSyncStateId(state) { if (!state) return void 0; return state[SYNC_STATE_ID_KEY]; } function createSyncState(initial) { const host = (0, import_syncNative.getNativeSyncFactory)().create(initial); let onChange = null; const listeners = /* @__PURE__ */ new Set(); let published = host.get(); 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); if (Object.is(published, next)) return; published = next; for (const listener of [...listeners]) listener(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 }; return state; }