one
Version:
One is a React framework for web, iOS, and Android apps.
108 lines (105 loc) • 3.08 kB
JavaScript
;
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,
publishNativeSyncState: () => publishNativeSyncState
});
module.exports = __toCommonJS(syncStore_exports);
var import_syncNative = require("./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[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];
}
var PUBLISH_NATIVE = /* @__PURE__ */ Symbol("publishNative");
function publishNativeSyncState(state) {
;
state === null || state === void 0 ? void 0 : state[PUBLISH_NATIVE]();
}
function createSyncState(initial) {
var host = (0, import_syncNative.getNativeSyncFactory)().create(initial);
var onChange = null;
var listeners = /* @__PURE__ */ new Set();
var published = host.get();
var publish = function publish2(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);
}
};
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);
publish(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,
[PUBLISH_NATIVE]: function() {
return publish(host.get());
}
};
return state;
}
//# sourceMappingURL=syncStore.native.js.map