Buckets:
| ; | |
| const reduxImpl = (reducer, initial) => (set, _get, api) => { | |
| api.dispatch = (action) => { | |
| set((state) => reducer(state, action), false, action); | |
| return action; | |
| }; | |
| api.dispatchFromDevtools = true; | |
| return { dispatch: (...args) => api.dispatch(...args), ...initial }; | |
| }; | |
| const redux = reduxImpl; | |
| const shouldDispatchFromDevtools = (api) => !!api.dispatchFromDevtools && typeof api.dispatch === "function"; | |
| const trackedConnections = /* @__PURE__ */ new Map(); | |
| const getTrackedConnectionState = (name) => { | |
| const api = trackedConnections.get(name); | |
| if (!api) return {}; | |
| return Object.fromEntries( | |
| Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()]) | |
| ); | |
| }; | |
| const extractConnectionInformation = (store, extensionConnector, options) => { | |
| if (store === void 0) { | |
| return { | |
| type: "untracked", | |
| connection: extensionConnector.connect(options) | |
| }; | |
| } | |
| const existingConnection = trackedConnections.get(options.name); | |
| if (existingConnection) { | |
| return { type: "tracked", store, ...existingConnection }; | |
| } | |
| const newConnection = { | |
| connection: extensionConnector.connect(options), | |
| stores: {} | |
| }; | |
| trackedConnections.set(options.name, newConnection); | |
| return { type: "tracked", store, ...newConnection }; | |
| }; | |
| const removeStoreFromTrackedConnections = (name, store) => { | |
| if (store === void 0) return; | |
| const connectionInfo = trackedConnections.get(name); | |
| if (!connectionInfo) return; | |
| delete connectionInfo.stores[store]; | |
| if (Object.keys(connectionInfo.stores).length === 0) { | |
| trackedConnections.delete(name); | |
| } | |
| }; | |
| const findCallerName = (stack) => { | |
| var _a, _b; | |
| if (!stack) return void 0; | |
| const traceLines = stack.split("\n"); | |
| const apiSetStateLineIndex = traceLines.findIndex( | |
| (traceLine) => traceLine.includes("api.setState") | |
| ); | |
| if (apiSetStateLineIndex < 0) return void 0; | |
| const callerLine = ((_a = traceLines[apiSetStateLineIndex + 1]) == null ? void 0 : _a.trim()) || ""; | |
| return (_b = /.+ (.+) .+/.exec(callerLine)) == null ? void 0 : _b[1]; | |
| }; | |
| const devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => { | |
| const { enabled, anonymousActionType, store, ...options } = devtoolsOptions; | |
| let extensionConnector; | |
| try { | |
| extensionConnector = (enabled != null ? enabled : process.env.NODE_ENV !== "production") && window.__REDUX_DEVTOOLS_EXTENSION__; | |
| } catch (e) { | |
| } | |
| if (!extensionConnector) { | |
| return fn(set, get, api); | |
| } | |
| const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options); | |
| let isRecording = true; | |
| api.setState = ((state, replace, nameOrAction) => { | |
| const r = set(state, replace); | |
| if (!isRecording) return r; | |
| const action = nameOrAction === void 0 ? { | |
| type: anonymousActionType || findCallerName(new Error().stack) || "anonymous" | |
| } : typeof nameOrAction === "string" ? { type: nameOrAction } : nameOrAction; | |
| if (store === void 0) { | |
| connection == null ? void 0 : connection.send(action, get()); | |
| return r; | |
| } | |
| connection == null ? void 0 : connection.send( | |
| { | |
| ...action, | |
| type: `${store}/${action.type}` | |
| }, | |
| { | |
| ...getTrackedConnectionState(options.name), | |
| [store]: api.getState() | |
| } | |
| ); | |
| return r; | |
| }); | |
| api.devtools = { | |
| cleanup: () => { | |
| if (connection && typeof connection.unsubscribe === "function") { | |
| connection.unsubscribe(); | |
| } | |
| removeStoreFromTrackedConnections(options.name, store); | |
| } | |
| }; | |
| const setStateFromDevtools = (...a) => { | |
| const originalIsRecording = isRecording; | |
| isRecording = false; | |
| set(...a); | |
| isRecording = originalIsRecording; | |
| }; | |
| const initialState = fn(api.setState, get, api); | |
| if (connectionInformation.type === "untracked") { | |
| connection == null ? void 0 : connection.init(initialState); | |
| } else { | |
| connectionInformation.stores[connectionInformation.store] = api; | |
| connection == null ? void 0 : connection.init( | |
| Object.fromEntries( | |
| Object.entries(connectionInformation.stores).map(([key, store2]) => [ | |
| key, | |
| key === connectionInformation.store ? initialState : store2.getState() | |
| ]) | |
| ) | |
| ); | |
| } | |
| if (shouldDispatchFromDevtools(api)) { | |
| let didWarnAboutReservedActionType = false; | |
| const originalDispatch = api.dispatch; | |
| api.dispatch = (...args) => { | |
| if (process.env.NODE_ENV !== "production" && args[0].type === "__setState" && !didWarnAboutReservedActionType) { | |
| console.warn( | |
| '[zustand devtools middleware] "__setState" action type is reserved to set state from the devtools. Avoid using it.' | |
| ); | |
| didWarnAboutReservedActionType = true; | |
| } | |
| originalDispatch(...args); | |
| }; | |
| } | |
| connection.subscribe((message) => { | |
| var _a; | |
| switch (message.type) { | |
| case "ACTION": | |
| if (typeof message.payload !== "string") { | |
| console.error( | |
| "[zustand devtools middleware] Unsupported action format" | |
| ); | |
| return; | |
| } | |
| return parseJsonThen( | |
| message.payload, | |
| (action) => { | |
| if (action.type === "__setState") { | |
| if (store === void 0) { | |
| setStateFromDevtools(action.state); | |
| return; | |
| } | |
| if (Object.keys(action.state).length !== 1) { | |
| console.error( | |
| ` | |
| [zustand devtools middleware] Unsupported __setState action format. | |
| When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(), | |
| and value of this only key should be a state object. Example: { "type": "__setState", "state": { "abc123Store": { "foo": "bar" } } } | |
| ` | |
| ); | |
| } | |
| const stateFromDevtools = action.state[store]; | |
| if (stateFromDevtools === void 0 || stateFromDevtools === null) { | |
| return; | |
| } | |
| if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) { | |
| setStateFromDevtools(stateFromDevtools); | |
| } | |
| return; | |
| } | |
| if (shouldDispatchFromDevtools(api)) { | |
| api.dispatch(action); | |
| } | |
| } | |
| ); | |
| case "DISPATCH": | |
| switch (message.payload.type) { | |
| case "RESET": | |
| setStateFromDevtools(initialState); | |
| if (store === void 0) { | |
| return connection == null ? void 0 : connection.init(api.getState()); | |
| } | |
| return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name)); | |
| case "COMMIT": | |
| if (store === void 0) { | |
| connection == null ? void 0 : connection.init(api.getState()); | |
| return; | |
| } | |
| return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name)); | |
| case "ROLLBACK": | |
| return parseJsonThen(message.state, (state) => { | |
| if (store === void 0) { | |
| setStateFromDevtools(state); | |
| connection == null ? void 0 : connection.init(api.getState()); | |
| return; | |
| } | |
| setStateFromDevtools(state[store]); | |
| connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name)); | |
| }); | |
| case "JUMP_TO_STATE": | |
| case "JUMP_TO_ACTION": | |
| return parseJsonThen(message.state, (state) => { | |
| if (store === void 0) { | |
| setStateFromDevtools(state); | |
| return; | |
| } | |
| if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) { | |
| setStateFromDevtools(state[store]); | |
| } | |
| }); | |
| case "IMPORT_STATE": { | |
| const { nextLiftedState } = message.payload; | |
| const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state; | |
| if (!lastComputedState) return; | |
| if (store === void 0) { | |
| setStateFromDevtools(lastComputedState); | |
| } else { | |
| setStateFromDevtools(lastComputedState[store]); | |
| } | |
| connection == null ? void 0 : connection.send( | |
| null, | |
| // FIXME no-any | |
| nextLiftedState | |
| ); | |
| return; | |
| } | |
| case "PAUSE_RECORDING": | |
| return isRecording = !isRecording; | |
| } | |
| return; | |
| } | |
| }); | |
| return initialState; | |
| }; | |
| const devtools = devtoolsImpl; | |
| const parseJsonThen = (stringified, fn) => { | |
| let parsed; | |
| try { | |
| parsed = JSON.parse(stringified); | |
| } catch (e) { | |
| console.error( | |
| "[zustand devtools middleware] Could not parse the received json", | |
| e | |
| ); | |
| } | |
| if (parsed !== void 0) fn(parsed); | |
| }; | |
| const subscribeWithSelectorImpl = (fn) => (set, get, api) => { | |
| const origSubscribe = api.subscribe; | |
| api.subscribe = ((selector, optListener, options) => { | |
| let listener = selector; | |
| if (optListener) { | |
| const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is; | |
| let currentSlice = selector(api.getState()); | |
| listener = (state) => { | |
| const nextSlice = selector(state); | |
| if (!equalityFn(currentSlice, nextSlice)) { | |
| const previousSlice = currentSlice; | |
| optListener(currentSlice = nextSlice, previousSlice); | |
| } | |
| }; | |
| if (options == null ? void 0 : options.fireImmediately) { | |
| optListener(currentSlice, currentSlice); | |
| } | |
| } | |
| return origSubscribe(listener); | |
| }); | |
| const initialState = fn(set, get, api); | |
| return initialState; | |
| }; | |
| const subscribeWithSelector = subscribeWithSelectorImpl; | |
| function combine(initialState, create) { | |
| return (...args) => Object.assign({}, initialState, create(...args)); | |
| } | |
| function createJSONStorage(getStorage, options) { | |
| let storage; | |
| try { | |
| storage = getStorage(); | |
| } catch (e) { | |
| return; | |
| } | |
| const persistStorage = { | |
| getItem: (name) => { | |
| var _a; | |
| const parse = (str2) => { | |
| if (str2 === null) { | |
| return null; | |
| } | |
| return JSON.parse(str2, options == null ? void 0 : options.reviver); | |
| }; | |
| const str = (_a = storage.getItem(name)) != null ? _a : null; | |
| if (str instanceof Promise) { | |
| return str.then(parse); | |
| } | |
| return parse(str); | |
| }, | |
| setItem: (name, newValue) => storage.setItem(name, JSON.stringify(newValue, options == null ? void 0 : options.replacer)), | |
| removeItem: (name) => storage.removeItem(name) | |
| }; | |
| return persistStorage; | |
| } | |
| const toThenable = (fn) => (input) => { | |
| try { | |
| const result = fn(input); | |
| if (result instanceof Promise) { | |
| return result; | |
| } | |
| return { | |
| then(onFulfilled) { | |
| return toThenable(onFulfilled)(result); | |
| }, | |
| catch(_onRejected) { | |
| return this; | |
| } | |
| }; | |
| } catch (e) { | |
| return { | |
| then(_onFulfilled) { | |
| return this; | |
| }, | |
| catch(onRejected) { | |
| return toThenable(onRejected)(e); | |
| } | |
| }; | |
| } | |
| }; | |
| const persistImpl = (config, baseOptions) => (set, get, api) => { | |
| let options = { | |
| storage: createJSONStorage(() => window.localStorage), | |
| partialize: (state) => state, | |
| version: 0, | |
| merge: (persistedState, currentState) => ({ | |
| ...currentState, | |
| ...persistedState | |
| }), | |
| ...baseOptions | |
| }; | |
| let hasHydrated = false; | |
| let hydrationVersion = 0; | |
| const hydrationListeners = /* @__PURE__ */ new Set(); | |
| const finishHydrationListeners = /* @__PURE__ */ new Set(); | |
| let storage = options.storage; | |
| if (!storage) { | |
| return config( | |
| (...args) => { | |
| console.warn( | |
| `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.` | |
| ); | |
| set(...args); | |
| }, | |
| get, | |
| api | |
| ); | |
| } | |
| const setItem = () => { | |
| const state = options.partialize({ ...get() }); | |
| return storage.setItem(options.name, { | |
| state, | |
| version: options.version | |
| }); | |
| }; | |
| const savedSetState = api.setState; | |
| api.setState = (state, replace) => { | |
| savedSetState(state, replace); | |
| return setItem(); | |
| }; | |
| const configResult = config( | |
| (...args) => { | |
| set(...args); | |
| return setItem(); | |
| }, | |
| get, | |
| api | |
| ); | |
| api.getInitialState = () => configResult; | |
| let stateFromStorage; | |
| const hydrate = () => { | |
| var _a, _b; | |
| if (!storage) return; | |
| const currentVersion = ++hydrationVersion; | |
| hasHydrated = false; | |
| hydrationListeners.forEach((cb) => { | |
| var _a2; | |
| return cb((_a2 = get()) != null ? _a2 : configResult); | |
| }); | |
| const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0; | |
| return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => { | |
| if (deserializedStorageValue) { | |
| if (typeof deserializedStorageValue.version === "number" && deserializedStorageValue.version !== options.version) { | |
| if (options.migrate) { | |
| const migration = options.migrate( | |
| deserializedStorageValue.state, | |
| deserializedStorageValue.version | |
| ); | |
| if (migration instanceof Promise) { | |
| return migration.then((result) => [true, result]); | |
| } | |
| return [true, migration]; | |
| } | |
| console.error( | |
| `State loaded from storage couldn't be migrated since no migrate function was provided` | |
| ); | |
| } else { | |
| return [false, deserializedStorageValue.state]; | |
| } | |
| } | |
| return [false, void 0]; | |
| }).then((migrationResult) => { | |
| var _a2; | |
| if (currentVersion !== hydrationVersion) { | |
| return; | |
| } | |
| const [migrated, migratedState] = migrationResult; | |
| stateFromStorage = options.merge( | |
| migratedState, | |
| (_a2 = get()) != null ? _a2 : configResult | |
| ); | |
| set(stateFromStorage, true); | |
| if (migrated) { | |
| return setItem(); | |
| } | |
| }).then(() => { | |
| if (currentVersion !== hydrationVersion) { | |
| return; | |
| } | |
| postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0); | |
| stateFromStorage = get(); | |
| hasHydrated = true; | |
| finishHydrationListeners.forEach((cb) => cb(stateFromStorage)); | |
| }).catch((e) => { | |
| if (currentVersion !== hydrationVersion) { | |
| return; | |
| } | |
| postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e); | |
| }); | |
| }; | |
| api.persist = { | |
| setOptions: (newOptions) => { | |
| options = { | |
| ...options, | |
| ...newOptions | |
| }; | |
| if (newOptions.storage) { | |
| storage = newOptions.storage; | |
| } | |
| }, | |
| clearStorage: () => { | |
| storage == null ? void 0 : storage.removeItem(options.name); | |
| }, | |
| getOptions: () => options, | |
| rehydrate: () => hydrate(), | |
| hasHydrated: () => hasHydrated, | |
| onHydrate: (cb) => { | |
| hydrationListeners.add(cb); | |
| return () => { | |
| hydrationListeners.delete(cb); | |
| }; | |
| }, | |
| onFinishHydration: (cb) => { | |
| finishHydrationListeners.add(cb); | |
| return () => { | |
| finishHydrationListeners.delete(cb); | |
| }; | |
| } | |
| }; | |
| if (!options.skipHydration) { | |
| hydrate(); | |
| } | |
| return stateFromStorage || configResult; | |
| }; | |
| const persist = persistImpl; | |
| function ssrSafe(config, isSSR = typeof window === "undefined") { | |
| return (set, get, api) => { | |
| if (!isSSR) { | |
| return config(set, get, api); | |
| } | |
| const ssrSet = () => { | |
| throw new Error("Cannot set state of Zustand store in SSR"); | |
| }; | |
| api.setState = ssrSet; | |
| return config(ssrSet, get, api); | |
| }; | |
| } | |
| exports.combine = combine; | |
| exports.createJSONStorage = createJSONStorage; | |
| exports.devtools = devtools; | |
| exports.persist = persist; | |
| exports.redux = redux; | |
| exports.subscribeWithSelector = subscribeWithSelector; | |
| exports.unstable_ssrSafe = ssrSafe; | |
Xet Storage Details
- Size:
- 16.2 kB
- Xet hash:
- 1da6e2d64cbd441905cd29b8aa8b054cce33ad19ca8da1009f08309824056665
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.