{"version":3,"sources":["../src/throttle.js","../src/createSyncStoragePersister.js","../src/noopPersister.js"],"names":[],"mappings":";;;AAKO,IAAM,QAAA,GAAW,CAAC,IAAA,EAAM,IAAA,GAAO,GAAA,KAAQ;AAI7C,EAAA,IAAI,KAAA,GAAQ,IAAA;AAIZ,EAAA,IAAI,MAAA;AAIJ,EAAA,MAAM,WAAA,GAAc,IAAI,IAAA,KAAS;AAEhC,IAAA,MAAA,GAAS,IAAA;AACT,IAAA,IAAI,UAAU,IAAA,EAAM;AAEnB,MAAA,KAAA,GAAQ,WAAW,MAAM;AACxB,QAAA,MAAM,CAAA;AAAA;AAAA,UAAuB;AAAA,SAAA;AAC7B,QAAA,MAAM,GAAA,GAAM,CAAA,CAAE,GAAG,MAAM,CAAA;AACvB,QAAA,KAAA,GAAQ,IAAA;AACR,QAAA,OAAO,GAAA;AAAA,MACR,GAAG,IAAI,CAAA;AAAA,IACR;AAAA,EACD,CAAA;AACA,EAAA;AAAA;AAAA,IAAwB;AAAA;AACzB,CAAA;;;ACxBO,IAAM,6BAA6B,CAAC;AAAA,EAC1C,OAAA;AAAA,EACA,GAAA,GAAM,2BAAA;AAAA,EACN,YAAA,GAAe,GAAA;AAAA,EACf,YAAY,IAAA,CAAK,SAAA;AAAA,EACjB,cAAc,IAAA,CAAK;AACpB,CAAA,KAAM;AAKL,EAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAAU;AAC1B,IAAA,IAAI;AACH,MAAA,MAAM,eAAA,GAAkB,UAAU,KAAK,CAAA;AACvC,MAAA,OAAA,CAAQ,OAAA,CAAQ,KAAK,eAAe,CAAA;AACpC,MAAA,IAAI,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA,KAAM,eAAA,EAAiB;AAC7C,QAAA,MAAM,IAAI,KAAA;AAAA,UACT;AAAA,SACD;AAAA,MACD;AACA,MAAA,OAAO,KAAA,CAAA;AAAA,IACR,SAAS,KAAA,EAAO;AACf,MAAA;AAAA;AAAA,QAA4B;AAAA;AAAA,IAC7B;AAAA,EACD,CAAA;AACA,EAAA,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMN,gBAAA,EAAkB,QAAA,CAAS,CAAC,cAAA,EAAgB,OAAA,KAAY;AACvD,MAAA,IAAI,CAAC,cAAA,EAAgB;AACpB,QAAA;AAAA,MACD;AAEA,MAAA,MAAM,OAAA,GAAU,CAAA;AAChB,MAAA,IAAI,KAAA,GAAQ,QAAQ,cAAc,CAAA;AAClC,MAAA,IAAI,UAAA,GAAa,CAAA;AACjB,MAAA,OAAO,KAAA,IAAS,aAAa,OAAA,EAAS;AACrC,QAAA,UAAA,EAAA;AACA,QAAA,KAAA,GAAQ,QAAQ,cAAc,CAAA;AAAA,MAC/B;AACA,MAAA,IAAI,WAAW,KAAA,EAAO;AACrB,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACd;AACA,MAAA,OAAO,KAAA;AAAA,IACR,GAAG,YAAY,CAAA;AAAA;AAAA;AAAA;AAAA,IAIf,cAAc,MAAM;AACnB,MAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACvC,MAAA,IAAI,CAAC,WAAA,EAAa;AACjB,QAAA;AAAA,MACD;AACA,MAAA,OAAO,YAAY,WAAW,CAAA;AAAA,IAC/B,CAAA;AAAA;AAAA;AAAA;AAAA,IAIA,sBAAsB,MAAM;AAC3B,MAAA,IAAI;AACH,QAAA,OAAA,CAAQ,WAAW,GAAG,CAAA;AACtB,QAAA,OAAO,KAAA,CAAA;AAAA,MACR,SAAS,CAAA,EAAG;AACX,QAAA;AAAA;AAAA,UAA6B;AAAA;AAAA,MAC9B;AAAA,IACD;AAAA,GACD;AACD;;;ACzEO,IAAM,aAAA,GAAgB;AAAA,EAC5B,kBAAkB,MAAM,MAAA;AAAA,EACxB,cAAc,MAAM,MAAA;AAAA,EACpB,sBAAsB,MAAM;AAC7B","file":"index.cjs","sourcesContent":["/**\n * @internal\n * A simple throttle function\n * @type {import('./ThrottleFn.ts').ThrottleFn}\n */\nexport const throttle = (func, wait = 100) => {\n\t/**\n\t * @type {ReturnType<typeof setTimeout> | null}\n\t */\n\tlet timer = null\n\t/**\n\t * @type {Array<any>}\n\t */\n\tlet params\n\t/**\n\t * @param {...any[]} args\n\t */\n\tconst throttledFn = (...args) => {\n\t\t// set the latest args\n\t\tparams = args\n\t\tif (timer === null) {\n\t\t\t// wait til wait time after first call to run the function\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tconst f = /** @type {any}*/ (func)\n\t\t\t\tconst res = f(...params)\n\t\t\t\ttimer = null\n\t\t\t\treturn res\n\t\t\t}, wait)\n\t\t}\n\t}\n\treturn /** @type any*/ (throttledFn)\n}\n","import { throttle } from './throttle.js'\n\n/**\n * Creates a syncronous storage persister to be used in tevm clients\n * @param {import('./CreateSyncStoragePersisterOptions.js').CreateSyncStoragePersisterOptions} options\n * @returns {import('./SyncStoragePersister.js').SyncStoragePersister}\n */\nexport const createSyncStoragePersister = ({\n\tstorage,\n\tkey = 'REACT_QUERY_OFFLINE_CACHE',\n\tthrottleTime = 1000,\n\tserialize = JSON.stringify,\n\tdeserialize = JSON.parse,\n}) => {\n\t/**\n\t * @param {import('@tevm/state').SerializableTevmState} state\n\t * @returns {Error | undefined}\n\t */\n\tconst trySave = (state) => {\n\t\ttry {\n\t\t\tconst serializedState = serialize(state)\n\t\t\tstorage.setItem(key, serializedState)\n\t\t\tif (storage.getItem(key) !== serializedState) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Detected a failure to save state. There appears to be a problem with the provided state persister',\n\t\t\t\t)\n\t\t\t}\n\t\t\treturn undefined\n\t\t} catch (error) {\n\t\t\treturn /** @type {Error}*/ (error)\n\t\t}\n\t}\n\treturn {\n\t\t/**\n\t\t * @param {import('@tevm/state').SerializableTevmState | undefined} persistedState\n\t\t * @param {(error: Error | undefined) => void} [onError]\n\t\t * @returns {Error | undefined}\n\t\t */\n\t\tpersistTevmState: throttle((persistedState, onError) => {\n\t\t\tif (!persistedState) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// TODO make this configurable\n\t\t\tconst retries = 3\n\t\t\tlet error = trySave(persistedState)\n\t\t\tlet errorCount = 0\n\t\t\twhile (error && errorCount < retries) {\n\t\t\t\terrorCount++\n\t\t\t\terror = trySave(persistedState)\n\t\t\t}\n\t\t\tif (onError && error) {\n\t\t\t\tonError(error)\n\t\t\t}\n\t\t\treturn error\n\t\t}, throttleTime),\n\t\t/**\n\t\t * @returns {import('@tevm/state').SerializableTevmState | undefined}\n\t\t */\n\t\trestoreState: () => {\n\t\t\tconst cacheString = storage.getItem(key)\n\t\t\tif (!cacheString) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\treturn deserialize(cacheString)\n\t\t},\n\t\t/**\n\t\t * @returns {Error | undefined}\n\t\t */\n\t\tremovePersistedState: () => {\n\t\t\ttry {\n\t\t\t\tstorage.removeItem(key)\n\t\t\t\treturn undefined\n\t\t\t} catch (e) {\n\t\t\t\treturn /** @type {Error} */ (e)\n\t\t\t}\n\t\t},\n\t}\n}\n","/**\n * A persister that does nothing, useful as a default\n * @type {import('./SyncStoragePersister.js').SyncStoragePersister}\n */\nexport const noopPersister = {\n\tpersistTevmState: () => undefined,\n\trestoreState: () => undefined,\n\tremovePersistedState: () => undefined,\n}\n"]}