UNPKG

@shined/reactive

Version:

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

171 lines 6.61 kB
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_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 _iterable_to_array(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } 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 _to_consumable_array(arr) { return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread(); } 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); } import { createVanilla, isFunction, shallowEqual, snapshot, subscribe } from "./chunk-W2YTH3FF.js"; // src/react/use-snapshot.ts import { useCallback, useEffect, useRef } from "react"; import { useSyncExternalStoreWithSelector } from "use-sync-external-store/shim/with-selector.js"; function useSnapshot(proxyState, selectorOrOption, maybeOptions) { var isUnmountedRef = useRef(false); useEffect(function() { return function() { isUnmountedRef.current = true; }; }, []); var options; var selector; if (selectorOrOption && !isFunction(selectorOrOption)) { options = selectorOrOption; selector = void 0; } else { options = maybeOptions; selector = selectorOrOption; } var _ref = options !== null && options !== void 0 ? options : {}, updateInSync = _ref.sync, _ref_isEqual = _ref.isEqual, isEqual = _ref_isEqual === void 0 ? shallowEqual : _ref_isEqual; var _subscribe = useCallback(function(callback) { return subscribe(proxyState, callback, updateInSync); }, [ proxyState, updateInSync ]); var _getSnapshot = useCallback(function() { return snapshot(proxyState); }, [ proxyState ]); var _selector = selector || function(s) { return s; }; var _snapshot = useSyncExternalStoreWithSelector(_subscribe, _getSnapshot, _getSnapshot, _selector, function(a, b) { if (isUnmountedRef.current) return true; return isEqual(a, b); }); return _snapshot; } // src/enhancers/react/with-use-snapshot.ts function withUseSnapshot(store) { var boundUseSnapshot = function(selectorOrOption, maybeOptions) { var options; var selector; if (selectorOrOption && !isFunction(selectorOrOption)) { options = selectorOrOption; selector = void 0; } else { options = maybeOptions; selector = selectorOrOption; } return useSnapshot(store.mutate, selector, options); }; return _object_spread_props(_object_spread({}, store), { useSnapshot: boundUseSnapshot }); } // src/react/use-subscribe.ts import { useEffect as useEffect2, useRef as useRef2 } from "react"; function useSubscribe(proxyState, listener, notifyInSync) { var listenerRef = useRef2(listener); listenerRef.current = listener; useEffect2(function() { var _listenerRef; var unsubscribe = subscribe(proxyState, function() { for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){ args[_key] = arguments[_key]; } return (_listenerRef = listenerRef).current.apply(_listenerRef, _to_consumable_array(args)); }, notifyInSync); return unsubscribe; }, [ proxyState, notifyInSync ]); } // src/enhancers/react/with-use-subscribe.ts function withUseSubscribe(store) { var boundUseSubscribe = function(listener, notifyInSync) { return useSubscribe(store.mutate, listener, notifyInSync); }; return _object_spread_props(_object_spread({}, store), { useSubscribe: boundUseSubscribe }); } // src/react/create-with-hooks.ts function createWithHooks(initialState) { var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; return withUseSnapshot(withUseSubscribe(createVanilla(initialState, options))); } export { useSnapshot, withUseSnapshot, useSubscribe, withUseSubscribe, createWithHooks }; //# sourceMappingURL=chunk-SADGDJAJ.js.map