@shined/reactive
Version:
⚛️ Proxy-driven state library for JavaScript application, Intuitive, Flexible and Written in TypeScript.
866 lines • 31.9 kB
JavaScript
"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