{"version":3,"file":"index.cjs","names":["noop","timeoutManager"],"sources":["../../src/index.ts"],"sourcesContent":["import { timeoutManager } from '@tanstack/query-core'\nimport { noop } from './utils'\nimport type { ManagedTimerId } from '@tanstack/query-core'\nimport type {\n  PersistRetryer,\n  PersistedClient,\n  Persister,\n} from '@tanstack/query-persist-client-core'\n\ninterface Storage {\n  getItem: (key: string) => string | null\n  setItem: (key: string, value: string) => void\n  removeItem: (key: string) => void\n}\n\ninterface CreateSyncStoragePersisterOptions {\n  /** The storage client used for setting and retrieving items from cache.\n   * For SSR pass in `undefined`. Note that window.localStorage can be\n   * `null` in Android WebViews depending on how they are configured.\n   */\n  storage: Storage | undefined | null\n  /** The key to use when storing the cache */\n  key?: string\n  /** To avoid spamming,\n   * pass a time in ms to throttle saving the cache to disk */\n  throttleTime?: number\n  /**\n   * How to serialize the data to storage.\n   * @default `JSON.stringify`\n   */\n  serialize?: (client: PersistedClient) => string\n  /**\n   * How to deserialize the data from storage.\n   * @default `JSON.parse`\n   */\n  deserialize?: (cachedString: string) => PersistedClient\n\n  retry?: PersistRetryer\n}\n\n/**\n * @deprecated use `createAsyncStoragePersister` from `@tanstack/query-async-storage-persister` instead.\n */\nexport function createSyncStoragePersister({\n  storage,\n  key = `REACT_QUERY_OFFLINE_CACHE`,\n  throttleTime = 1000,\n  serialize = JSON.stringify,\n  deserialize = JSON.parse,\n  retry,\n}: CreateSyncStoragePersisterOptions): Persister {\n  if (storage) {\n    const trySave = (persistedClient: PersistedClient): Error | undefined => {\n      try {\n        storage.setItem(key, serialize(persistedClient))\n        return\n      } catch (error) {\n        return error as Error\n      }\n    }\n    return {\n      persistClient: throttle((persistedClient) => {\n        let client: PersistedClient | undefined = persistedClient\n        let error = trySave(client)\n        let errorCount = 0\n        while (error && client) {\n          errorCount++\n          client = retry?.({\n            persistedClient: client,\n            error,\n            errorCount,\n          })\n\n          if (client) {\n            error = trySave(client)\n          }\n        }\n      }, throttleTime),\n      restoreClient: () => {\n        const cacheString = storage.getItem(key)\n\n        if (!cacheString) {\n          return\n        }\n\n        return deserialize(cacheString)\n      },\n      removeClient: () => {\n        storage.removeItem(key)\n      },\n    }\n  }\n\n  return {\n    persistClient: noop,\n    restoreClient: noop,\n    removeClient: noop,\n  }\n}\n\nfunction throttle<TArgs extends Array<any>>(\n  func: (...args: TArgs) => any,\n  wait = 100,\n) {\n  let timer: ManagedTimerId | null = null\n  let params: TArgs\n  return function (...args: TArgs) {\n    params = args\n    if (timer === null) {\n      timer = timeoutManager.setTimeout(() => {\n        func(...params)\n        timer = null\n      }, wait)\n    }\n  }\n}\n"],"mappings":";;;;;;;AA2CA,SAAgB,2BAA2B,EACzC,SACA,MAAM,6BACN,eAAe,KACf,YAAY,KAAK,WACjB,cAAc,KAAK,OACnB,SAC+C;CAC/C,IAAI,SAAS;EACX,MAAM,WAAW,oBAAwD;GACvE,IAAI;IACF,QAAQ,QAAQ,KAAK,UAAU,eAAe,CAAC;IAC/C;GACF,SAAS,OAAO;IACd,OAAO;GACT;EACF;EACA,OAAO;GACL,eAAe,UAAU,oBAAoB;IAC3C,IAAI,SAAsC;IAC1C,IAAI,QAAQ,QAAQ,MAAM;IAC1B,IAAI,aAAa;IACjB,OAAO,SAAS,QAAQ;KACtB;KACA,SAAS,QAAQ;MACf,iBAAiB;MACjB;MACA;KACF,CAAC;KAED,IAAI,QACF,QAAQ,QAAQ,MAAM;IAE1B;GACF,GAAG,YAAY;GACf,qBAAqB;IACnB,MAAM,cAAc,QAAQ,QAAQ,GAAG;IAEvC,IAAI,CAAC,aACH;IAGF,OAAO,YAAY,WAAW;GAChC;GACA,oBAAoB;IAClB,QAAQ,WAAW,GAAG;GACxB;EACF;CACF;CAEA,OAAO;EACL,eAAeA,cAAAA;EACf,eAAeA,cAAAA;EACf,cAAcA,cAAAA;CAChB;AACF;AAEA,SAAS,SACP,MACA,OAAO,KACP;CACA,IAAI,QAA+B;CACnC,IAAI;CACJ,OAAO,SAAU,GAAG,MAAa;EAC/B,SAAS;EACT,IAAI,UAAU,MACZ,QAAQC,qBAAAA,eAAe,iBAAiB;GACtC,KAAK,GAAG,MAAM;GACd,QAAQ;EACV,GAAG,IAAI;CAEX;AACF"}