one
Version:
One is a React framework for web, iOS, and Android apps.
67 lines (64 loc) • 1.72 kB
JavaScript
import { getNativeSyncFactory } from "./syncNative.native.js";
var SYNC_STATE_ID_KEY = "__one_sync_state_id__";
var SYNC_STATE_BRAND = "__one_sync_state__";
function isSyncState(value) {
if (value == null || typeof value !== "object") return false;
var 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];
}
function createSyncState(initial) {
var host = getNativeSyncFactory().create(initial);
var onChange = null;
var listeners = /* @__PURE__ */ new Set();
var published = host.get();
var 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 (var _i = 0, _iter = [...listeners]; _i < _iter.length; _i++) {
var listener = _iter[_i];
listener(next);
}
},
get onChange() {
return onChange;
},
set onChange(next) {
onChange = next !== null && next !== void 0 ? next : null;
host.setOnChange(onChange);
},
subscribe(listener) {
listeners.add(listener);
return function() {
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;
}
export { SYNC_STATE_BRAND, SYNC_STATE_ID_KEY, createSyncState, getSyncStateId, isSyncState };
//# sourceMappingURL=syncStore.native.js.map