10LOC

#storage

Web Platformintermediate

Persist storage with navigator.storage.persist

export const ensurePersistentStorage = async (): Promise<boolean> => {
  if (!navigator.storage?.persist) return false;
  if (await navigator.storage.persisted()) return true;
  return navigator.storage.persist();
};

Ask the browser for persistent storage so your app can keep data around longer.

Web Platformadvanced

A tiny promise-based wrapper around IndexedDB

const dbPromise = new Promise<IDBDatabase>((resolve, reject) => {
  const request = indexedDB.open("app-cache", 1);
  request.onupgradeneeded = () => request.result.createObjectStore("kv");
  request.onsuccess = () => resolve(request.result);
  request.onerror = () => reject(request.error);

Turn IndexedDB's callback-and-event API into two functions, idbGet and idbSet, that behave like a normal async key-value store.