UNPKG

bankcode-bic

Version:

Convert bank codes from IBAN to BICs, Name of bank. Currently supports only some selected EU countries.

62 lines (61 loc) 1.83 kB
//#region src/libs/cache.browser.ts const META_KEY = "localcache-meta"; function getMeta(localStorage) { const raw = localStorage.getItem(META_KEY); if (!raw) return {}; try { return JSON.parse(raw); } catch { return {}; } } function setMeta(meta, localStorage) { localStorage.setItem(META_KEY, JSON.stringify(meta)); } function clearMeta(localStorage) { localStorage.removeItem(META_KEY); } async function hashKey(key) { const encoder = new TextEncoder(); const data = encoder.encode(key); const hashBuffer = await (globalThis.crypto?.subtle?.digest("SHA-256", data) ?? Promise.resolve(/* @__PURE__ */ new ArrayBuffer(0))); const hashArray = Array.from(new Uint8Array(hashBuffer)); const hashHex = hashArray.map((b) => b.toString(16).padStart(2, "0")).join(""); return `cache_${hashHex}`; } var LocalStorageCache = class { localStorage; constructor(win) { this.localStorage = win?.localStorage ?? globalThis.localStorage; } async get(key, transformer) { const meta = getMeta(this.localStorage); const entry = meta[key]; if (!entry) return null; if (Date.now() > entry.expiry) { delete meta[key]; setMeta(meta, this.localStorage); this.localStorage.removeItem(entry.file); return null; } const file = entry.file ?? await hashKey(key); const value = this.localStorage.getItem(file); if (value === null) return null; return transformer ? transformer(value) : value; } async set(key, value, ttlMs, transformer) { const meta = getMeta(this.localStorage); const file = await hashKey(key); this.localStorage.setItem(file, transformer ? transformer(value) : value); meta[key] = { file, expiry: Date.now() + ttlMs }; setMeta(meta, this.localStorage); } async clear() { await clearMeta(this.localStorage); } }; //#endregion export { LocalStorageCache, hashKey };