Changelog
Todos los cambios notables de vali-storages están documentados aquí.
Formato: Keep a Changelog — versionado con Semantic Versioning.
[2.1.0] — 2026-04-07
Refactorización
- La sincronización cross-tab fue extraída a una clase dedicada
CrossTabSync(SRP).
ValiStoragesdelega todo el manejo de eventosstorage— registro, desprefijar claves, despacho plain/cifrado y destrucción — a esta clase interna. Sin cambios en la API pública.
Corregido
updateExpiryahora usasafeStorageSet(manejo consistente de quota excedida).- El campo
cryptoInstancees tipado comoICrypto | null; el acceso está protegido en cada punto de uso, eliminando la aserciónnull!anterior. - El path de descifrado cross-tab maneja correctamente un item cifrado que llega a una instancia no cifrada (retorna
nullen lugar de lanzar excepción).
[2.0.0] — 2024-12-01
Cambios que rompen compatibilidad
setItemahora es async — devuelvePromise<void>en lugar devoid. Agregaawaita todas las llamadas.getItemya no usa callback — devuelvePromise<T | null>directamente.
// v1.x
storage.setItem('clave', valor);
storage.getItem('clave', (item) => console.log(item));
// v2.0.0
await storage.setItem('clave', valor);
const item = await storage.getItem('clave');
Agregado
setItems(items)— escritura batch de múltiples claves en paralelogetItems(keys)— lectura batch de múltiples claves en paralelogetAll()— retorna todos los items no expirados del namespacegetOrSet(key, factory)— patrón cache: retorna existente o calcula y guardahas(key)— verifica existencia de clave sin desencriptarremoveExpired()— elimina todas las claves expiradas del namespaceupdateExpiry(key)— reinicia el TTL de una clave existente manualmentesize()— cantidad de items en el namespace- Opción
prefix— aislamiento de namespace entre instancias - Opción
slidingExpiration— reinicia el TTL en cada lectura exitosa - Opción
onError—'throw'|'silent'| manejador personalizado - Opción
onChange— callback de sincronización cross-tab createTypedStorage<Schema>()— factory con tipos estrictos en compilaciónValiStorages.isAvailable()— método estático de guardia para SSRdestroy()— elimina el listener de eventos cross-tab
Corregido
- Los errores en
setItemse perdían silenciosamente en v1.x — ahora se propagan al caller
[1.1.0] — 2024-09-15
Agregado
- Opción
useSessionStorage— usarsessionStorageen lugar delocalStorage - Tamaño de clave
AES.AES_192
Corregido
- Colisión de claves cuando dos instancias compartían el mismo
prefixcon diferentekeySize
[1.0.0] — 2024-07-01
Agregado
- Clase
ValiStoragescon encriptación AES-GCM via Web Crypto API - Tamaños de clave
AES.AES_128yAES.AES_256 - Expiración TTL con
timeExpiration+TimeUnit(SECONDS,MINUTES,HOURS,DAYS) setItem/getItem/removeItem/clear/getAllKeyspredefinedKeypara derivación de clave determinista