UNPKG

@tevm/sync-storage-persister

Version:

A package for persisting the state of the EVM to a sync storage

108 lines (105 loc) 2.55 kB
// src/throttle.js var throttle = (func, wait = 100) => { let timer = null; let params; const throttledFn = (...args) => { params = args; if (timer === null) { timer = setTimeout(() => { const f = ( /** @type {any}*/ func ); const res = f(...params); timer = null; return res; }, wait); } }; return ( /** @type any*/ throttledFn ); }; // src/createSyncStoragePersister.js var createSyncStoragePersister = ({ storage, key = "REACT_QUERY_OFFLINE_CACHE", throttleTime = 1e3, serialize = JSON.stringify, deserialize = JSON.parse }) => { const trySave = (state) => { try { const serializedState = serialize(state); storage.setItem(key, serializedState); if (storage.getItem(key) !== serializedState) { throw new Error( "Detected a failure to save state. There appears to be a problem with the provided state persister" ); } return void 0; } catch (error) { return ( /** @type {Error}*/ error ); } }; return { /** * @param {import('@tevm/state').SerializableTevmState | undefined} persistedState * @param {(error: Error | undefined) => void} [onError] * @returns {Error | undefined} */ persistTevmState: throttle((persistedState, onError) => { if (!persistedState) { return; } const retries = 3; let error = trySave(persistedState); let errorCount = 0; while (error && errorCount < retries) { errorCount++; error = trySave(persistedState); } if (onError && error) { onError(error); } return error; }, throttleTime), /** * @returns {import('@tevm/state').SerializableTevmState | undefined} */ restoreState: () => { const cacheString = storage.getItem(key); if (!cacheString) { return; } return deserialize(cacheString); }, /** * @returns {Error | undefined} */ removePersistedState: () => { try { storage.removeItem(key); return void 0; } catch (e) { return ( /** @type {Error} */ e ); } } }; }; // src/noopPersister.js var noopPersister = { persistTevmState: () => void 0, restoreState: () => void 0, removePersistedState: () => void 0 }; export { createSyncStoragePersister, noopPersister }; //# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map