UNPKG

@shined/reactive

Version:

⚛️ Proxy-driven state library for JavaScript application, Intuitive, Flexible and Written in TypeScript.

866 lines 31.9 kB
"use strict"; function _array_like_to_array(arr, len) { if (len == null || len > arr.length) len = arr.length; for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i]; return arr2; } function _array_with_holes(arr) { if (Array.isArray(arr)) return arr; } function _array_without_holes(arr) { if (Array.isArray(arr)) return _array_like_to_array(arr); } function _define_property(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _instanceof(left, right) { if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) { return !!right[Symbol.hasInstance](left); } else { return left instanceof right; } } function _iterable_to_array(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _iterable_to_array_limit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){ _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally{ try { if (!_n && _i["return"] != null) _i["return"](); } finally{ if (_d) throw _e; } } return _arr; } function _non_iterable_rest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _non_iterable_spread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _object_spread(target) { for(var i = 1; i < arguments.length; i++){ var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === "function") { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function(key) { _define_property(target, key, source[key]); }); } return target; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function(sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _object_spread_props(target, source) { source = source != null ? source : {}; if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function(key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _sliced_to_array(arr, i) { return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest(); } function _to_consumable_array(arr) { return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread(); } function _type_of(obj) { "@swc/helpers - typeof"; return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; } function _unsupported_iterable_to_array(o, minLen) { if (!o) return; if (typeof o === "string") return _array_like_to_array(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen); } Object.defineProperty(exports, "__esModule", { value: true }); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { var lastAccessLHS = undefined; var value = ops[0]; var i = 1; while(i < ops.length){ var op = ops[i]; var fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { var _value; value = fn(function() { for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){ args[_key] = arguments[_key]; } return (_value = value).call.apply(_value, [ lastAccessLHS ].concat(_to_consumable_array(args))); }); lastAccessLHS = undefined; } } return value; } // src/vanilla/ref.ts var internal_refSet = /* @__PURE__ */ new WeakSet(); function ref(o) { internal_refSet.add(o); return o; } function isRef(k) { return internal_refSet.has(k); } function deepCloneWithRef(initialState) { var cloned = createObjectFromPrototype(initialState); for(var key in initialState){ var value = initialState[key]; if (isObject(value)) { if (isRef(value)) { cloned[key] = value; } else { cloned[key] = deepCloneWithRef(value); } } else { cloned[key] = value; } } return cloned; } // src/utils/react-fast-compare.ts var hasMap = typeof Map === "function"; var hasSet = typeof Set === "function"; var hasHTMLElementType = typeof HTMLElement !== "undefined"; var hasArrayBuffer = typeof ArrayBuffer === "function" && !!ArrayBuffer.isView; function reactFastCompare(objA, objB) { try { return equal(objA, objB); } catch (error) { if ((error.message || "").match(/stack|recursion/i)) { console.warn("react-fast-compare cannot handle circular refs"); return false; } throw error; } } function equal(objA, objB) { if (objA === objB) return true; if (objA && objB && (typeof objA === "undefined" ? "undefined" : _type_of(objA)) === "object" && (typeof objB === "undefined" ? "undefined" : _type_of(objB)) === "object") { if (objA.constructor !== objB.constructor) return false; var length; var i; var keys; if (Array.isArray(objA)) { length = objA.length; if (length !== objB.length) return false; for(i = length; i-- !== 0;)if (!equal(objA[i], objB[i])) return false; return true; } var it; if (hasMap && _instanceof(objA, Map) && _instanceof(objB, Map)) { if (objA.size !== objB.size) return false; it = objA.entries(); while(!(i = it.next()).done)if (!objB.has(i.value[0])) return false; it = objA.entries(); while(!(i = it.next()).done)if (!equal(i.value[1], objB.get(i.value[0]))) return false; return true; } if (hasSet && _instanceof(objA, Set) && _instanceof(objB, Set)) { if (objA.size !== objB.size) return false; it = objA.entries(); while(!(i = it.next()).done)if (!objB.has(i.value[0])) return false; return true; } if (hasArrayBuffer && ArrayBuffer.isView(objA) && ArrayBuffer.isView(objB)) { length = _optionalChain([ objA, 'optionalAccess', function(_) { return _.length; } ]); if (length !== _optionalChain([ objB, 'optionalAccess', function(_2) { return _2.length; } ])) return false; for(i = length; i-- !== 0;)if (objA[i] !== objB[i]) return false; return true; } if (objA.constructor === RegExp) return objA.source === objB.source && objA.flags === objB.flags; if (objA.valueOf !== Object.prototype.valueOf && typeof objA.valueOf === "function" && typeof objB.valueOf === "function") return objA.valueOf() === objB.valueOf(); if (objA.toString !== Object.prototype.toString && typeof objA.toString === "function" && typeof objB.toString === "function") return objA.toString() === objB.toString(); keys = Object.keys(objA); length = keys.length; if (length !== Object.keys(objB).length) return false; for(i = length; i-- !== 0;)if (!Object.prototype.hasOwnProperty.call(objB, keys[i])) return false; if (hasHTMLElementType && _instanceof(objA, HTMLElement)) return false; for(i = length; i-- !== 0;){ if ((keys[i] === "_owner" || keys[i] === "__v" || keys[i] === "__o") && objA.$$typeof) { continue; } if (!equal(objA[keys[i]], objB[keys[i]])) return false; } return true; } return objA !== objA && objB !== objB; } // src/utils/index.ts var SNAPSHOT = Symbol("SNAPSHOT"); var LISTENERS = Symbol("LISTENERS"); var REACTIVE = Symbol("REACTIVE"); var isProduction = process.env.NODE_ENV === "production"; var noop = function() {}; var hasOwn = Object.prototype.hasOwnProperty; var isObject = function(x) { return (typeof x === "undefined" ? "undefined" : _type_of(x)) === "object" && x !== null; }; var isBoolean = function(x) { return typeof x === "boolean"; }; var isFunction = function(x) { return typeof x === "function"; }; function createObjectFromPrototype(target) { return Array.isArray(target) ? [] : Object.create(Object.getPrototypeOf(target)); } function canProxy(x) { return isObject(x) && !isRef(x) && (Array.isArray(x) || !(Symbol.iterator in x)) && !_instanceof(x, WeakMap) && !_instanceof(x, WeakSet) && !_instanceof(x, Error) && !_instanceof(x, Number) && !_instanceof(x, Date) && !_instanceof(x, String) && !_instanceof(x, RegExp) && !_instanceof(x, ArrayBuffer); } var numberReg = /^\d+$/; function propertyKeysToPath(keys) { var path = ""; var length = keys.length; for(var i = 0; i < length; i++){ var key = keys[i]; if (typeof key === "number" || typeof key === "string" && numberReg.test(key)) { path += "[".concat(key, "]"); } else { path += (i === 0 ? "" : ".") + String(key); } } return path; } function get(object, path) { var defaultValue = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : void 0; var keys = Array.isArray(path) ? path : [ path ]; var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined; try { for(var _iterator = keys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){ var key = _step.value; if (!(key in object)) return defaultValue; object = object[key]; } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally{ try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally{ if (_didIteratorError) { throw _iteratorError; } } } return object; } function shallowEqual(objA, objB) { if (Object.is(objA, objB)) { return true; } if ((typeof objA === "undefined" ? "undefined" : _type_of(objA)) !== "object" || objA === null || (typeof objB === "undefined" ? "undefined" : _type_of(objB)) !== "object" || objB === null) { return false; } if (_instanceof(objA, Map) && _instanceof(objB, Map)) { if (objA.size !== objB.size) return false; var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined; try { for(var _iterator = objA[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){ var _step_value = _sliced_to_array(_step.value, 2), key = _step_value[0], value = _step_value[1]; if (!Object.is(value, objB.get(key))) { return false; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally{ try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally{ if (_didIteratorError) { throw _iteratorError; } } } return true; } if (_instanceof(objA, Set) && _instanceof(objB, Set)) { if (objA.size !== objB.size) return false; var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined; try { for(var _iterator1 = objA[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){ var value1 = _step1.value; if (!objB.has(value1)) { return false; } } } catch (err) { _didIteratorError1 = true; _iteratorError1 = err; } finally{ try { if (!_iteratorNormalCompletion1 && _iterator1.return != null) { _iterator1.return(); } } finally{ if (_didIteratorError1) { throw _iteratorError1; } } } return true; } var keysA = Object.keys(objA); if (keysA.length !== Object.keys(objB).length) { return false; } var keysLength = keysA.length; for(var i = 0; i < keysLength; i++){ if (!hasOwn.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) { return false; } } return true; } function deepEqual(objA, objB) { return reactFastCompare(objA, objB); } // src/vanilla/snapshot.ts function snapshot(proxyState) { var selector = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : function(s) { return s; }; return selector(proxyState[SNAPSHOT]); } var getSnapshot = snapshot; // src/enhancers/vanilla/with-snapshot.ts function withSnapshot(store) { var _snapshot = function() { var selector = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : function(s) { return s; }; return snapshot(store.mutate, selector); }; return _object_spread_props(_object_spread({}, store), { snapshot: _snapshot }); } // src/vanilla/subscribe.ts var globalNotifyInSync = false; function setGlobalNotifyInSync(value) { globalNotifyInSync = value; } function subscribe(proxyState, callback, notifyInSync) { var promise; var previousState = snapshot(proxyState); var callbacks = /* @__PURE__ */ new Set(); var runCallbacks = function() { var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined; try { for(var _iterator = callbacks[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){ var callback2 = _step.value; callback2(); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally{ try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally{ if (_didIteratorError) { throw _iteratorError; } } } callbacks.clear(); previousState = snapshot(proxyState); }; function listener(props, version) { var currentState = snapshot(proxyState); var changes = { props: props, propsPath: propertyKeysToPath(props), previous: get(previousState, props), current: get(currentState, props), snapshot: currentState }; callbacks.add(function() { return void callback(changes, version); }); var finalNotifyInSync = isBoolean(notifyInSync) ? notifyInSync : globalNotifyInSync; if (finalNotifyInSync) { return void runCallbacks(); } if (!promise) { promise = Promise.resolve().then(function() { promise = void 0; runCallbacks(); }); } } ; proxyState[LISTENERS].add(listener); return function() { ; proxyState[LISTENERS].delete(listener); }; } // src/enhancers/vanilla/with-subscribe.ts function withSubscribe(store) { function boundSubscribe(listener, sync) { var selector = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : function(s) { return s; }; return subscribe(selector(store.mutate), listener, sync); } return _object_spread_props(_object_spread({}, store), { subscribe: boundSubscribe }); } // src/vanilla/proxy.ts var globalVersion = 1; var snapshotCache = /* @__PURE__ */ new WeakMap(); function proxy(initState) { var parentProps = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : []; var version = globalVersion; var listeners = /* @__PURE__ */ new Set(); var propListenerMap = /* @__PURE__ */ new Map(); var notifyUpdate = function(props) { var nextVersion = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : ++globalVersion; if (version !== nextVersion) { version = nextVersion; var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined; try { for(var _iterator = listeners[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){ var callback = _step.value; callback(props, version); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally{ try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally{ if (_didIteratorError) { throw _iteratorError; } } } } }; var getPropListener = function(prop) { var listener = propListenerMap.get(prop); if (!listener) { listener = function(props) { return void notifyUpdate(props); }; propListenerMap.set(prop, listener); } return listener; }; var popPropListener = function(prop) { var listener = propListenerMap.get(prop); propListenerMap.delete(prop); return listener; }; var createSnapshot = function(target, receiver) { var cache = snapshotCache.get(receiver); if (_optionalChain([ cache, 'optionalAccess', function(_3) { return _3[0]; } ]) === version) return cache[1]; var nextSnapshot = createObjectFromPrototype(target); snapshotCache.set(receiver, [ version, nextSnapshot ]); var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined; try { for(var _iterator = Reflect.ownKeys(target)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){ var key = _step.value; if (key === REACTIVE) continue; var value = Reflect.get(target, key, receiver); if (isRef(value)) { nextSnapshot[key] = value; } else if (_optionalChain([ value, 'optionalAccess', function(_4) { return _4[REACTIVE]; } ])) { nextSnapshot[key] = snapshot(value); } else { nextSnapshot[key] = value; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally{ try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally{ if (_didIteratorError) { throw _iteratorError; } } } Object.preventExtensions(nextSnapshot); return nextSnapshot; }; var baseObject = createObjectFromPrototype(initState); var proxyState = new Proxy(baseObject, { get: function get(target, prop, receiver) { if (prop === LISTENERS) { return listeners; } if (prop === SNAPSHOT) { return createSnapshot(target, receiver); } return Reflect.get(target, prop, receiver); }, set: function set(target, prop, value, receiver) { var props = _to_consumable_array(parentProps).concat([ prop ]); var preValue = Reflect.get(target, prop, receiver); var childListeners = _optionalChain([ preValue, 'optionalAccess', function(_5) { return _5[LISTENERS]; } ]); if (childListeners) childListeners.delete(popPropListener(prop)); if (!isObject(value) && Object.is(preValue, value)) { return true; } var nextValue = value; if (_optionalChain([ nextValue, 'optionalAccess', function(_6) { return _6[LISTENERS]; } ])) { nextValue[LISTENERS].add(getPropListener(prop)); } else if (canProxy(value)) { nextValue = proxy(value, props); nextValue[LISTENERS].add(getPropListener(prop)); } var success = Reflect.set(target, prop, nextValue, receiver); success && notifyUpdate(props); return success; }, deleteProperty: function deleteProperty(target, prop) { var props = _to_consumable_array(parentProps).concat([ prop ]); var childListeners = _optionalChain([ Reflect, 'access', function(_7) { return _7.get; }, 'call', function(_8) { return _8(target, prop); }, 'optionalAccess', function(_9) { return _9[LISTENERS]; } ]); if (childListeners) childListeners.delete(popPropListener(prop)); var success = Reflect.deleteProperty(target, prop); success && notifyUpdate(props); return success; } }); var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined; try { for(var _iterator = Reflect.ownKeys(initState)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){ var key = _step.value; proxyState[key] = initState[key]; } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally{ try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally{ if (_didIteratorError) { throw _iteratorError; } } } Reflect.defineProperty(proxyState, REACTIVE, { value: true }); return proxyState; } // src/vanilla/create.ts function createVanilla(initState) { var _options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; var proxyState = proxy(initState); function restore() { var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; var _options_exclude = options.exclude, exclude = _options_exclude === void 0 ? [] : _options_exclude; var clonedState = deepCloneWithRef(initState); var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined; try { for(var _iterator = Object.keys(clonedState)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){ var key = _step.value; if (exclude.includes(key)) continue; proxyState[key] = clonedState[key]; } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally{ try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally{ if (_didIteratorError) { throw _iteratorError; } } } } var store = { mutate: proxyState, restore: restore }; return withSubscribe(withSnapshot(store)); } var create = createVanilla; // src/vanilla/devtools.ts function devtools(store, options) { if (isProduction) return noop; var ext = window.__REDUX_DEVTOOLS_EXTENSION__; var enable = _nullishCoalesce(_optionalChain([ options, 'optionalAccess', function(_10) { return _10.enable; } ]), function() { return true; }); var isMutatingStoreByDevtools = false; if (!enable) return noop; if (!ext) { var infos = [ "[Warning] to enable devtools, make sure you've installed Redux devtools extension \uD83D\uDC49", "https://github.com/reduxjs/redux-devtools#redux-devtools" ]; console.warn(infos.join(" ")); return noop; } var name = _nullishCoalesce(_optionalChain([ options, 'optionalAccess', function(_11) { return _11.name; } ]), function() { return "untitled"; }); var devtools2 = ext.connect(options); var initialState = snapshot(store.mutate); devtools2.init(initialState); devtools2.subscribe(function(message) { console.debug("[reactive] message from devtools: ", message); if (message.type !== "DISPATCH") return; if (!message.payload) return; if (message.payload.type === "RESET") devtools2.init(initialState); if (message.payload.type === "COMMIT") devtools2.init(snapshot(store.mutate)); var actions = [ "ROLLBACK", "JUMP_TO_ACTION" ]; var isAction = actions.includes(message.payload.type); var hasState = message.state && message.state !== "{}"; if (isAction && hasState) { try { isMutatingStoreByDevtools = true; var newState = JSON.parse(message.state || "{}"); Object.assign(store.mutate, newState); console.debug("[reactive] mutate state by devtools: ", newState); } catch (e) { devtools2.error(_optionalChain([ e, 'optionalAccess', function(_12) { return _12.message; } ]) || _optionalChain([ e, 'optionalAccess', function(_13) { return _13.toString; }, 'call', function(_14) { return _14(); } ]) || JSON.stringify(e || "")); } finally{ isMutatingStoreByDevtools = false; } } }); var unsubscribe = subscribe(store.mutate, function(changes, version) { var propsPath = changes.propsPath, previous = changes.previous, current = changes.current, snapshot2 = changes.snapshot; if (isMutatingStoreByDevtools) return; var payload = { type: "[".concat(canProxy(current) ? "replace" : "set", "] ").concat(propsPath), payload: current, _previousValue: previous, _updatedAt: /* @__PURE__ */ new Date().toLocaleString(), _innerVersion: version }; devtools2.send(payload, snapshot2); console.debug("[reactive] [".concat(name, "] [").concat(getActionType(current), "] ").concat(propsPath), current); }, true); console.debug("[reactive] [".concat(name, "] devtools is enabled")); return function() { devtools2.unsubscribe(); unsubscribe(); console.debug("[reactive] [".concat(name, "] devtools is disabled")); }; } function getActionType(state) { return canProxy(state) ? "replace" : "set"; } // src/vanilla/produce.ts function produce(obj, draftHandler) { var state = proxy(obj); draftHandler(state); var nextSnapshot = snapshot(state); state = null; return nextSnapshot; } // src/enhancers/vanilla/with-derived.ts function withDerived(store) { var mapFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : function(s) { return s; }; return _object_spread_props(_object_spread({}, store), { derived: function() { return mapFn(store.mutate); } }); } exports.ref = ref; exports.isRef = isRef; exports.deepCloneWithRef = deepCloneWithRef; exports.isFunction = isFunction; exports.shallowEqual = shallowEqual; exports.deepEqual = deepEqual; exports.snapshot = snapshot; exports.getSnapshot = getSnapshot; exports.withSnapshot = withSnapshot; exports.setGlobalNotifyInSync = setGlobalNotifyInSync; exports.subscribe = subscribe; exports.withSubscribe = withSubscribe; exports.proxy = proxy; exports.createVanilla = createVanilla; exports.create = create; exports.devtools = devtools; exports.produce = produce; exports.withDerived = withDerived; //# sourceMappingURL=chunk-7Y3UI2QQ.cjs.map