JavaScript

Обёртка над localStorage с TTL

Algonexys · 07.08.2026 · 👁 0

Хранилище со сроком жизни записей и защитой от переполнения квоты и битого JSON.

Код

const storage = {
  set(key, value, ttlSeconds) {
    const payload = {
      value,
      expires: ttlSeconds ? Date.now() + ttlSeconds * 1000 : null,
    };
    try {
      localStorage.setItem(key, JSON.stringify(payload));
      return true;
    } catch (error) {
      console.warn('Хранилище недоступно или переполнено:', error.name);
      return false;
    }
  },

  get(key, fallback = null) {
    try {
      const raw = localStorage.getItem(key);
      if (!raw) return fallback;
      const { value, expires } = JSON.parse(raw);
      if (expires && Date.now() > expires) {
        localStorage.removeItem(key);
        return fallback;
      }
      return value;
    } catch {
      return fallback;
    }
  },

  remove: (key) => localStorage.removeItem(key),
};

storage.set('theme', 'dark');
storage.set('token', 'abc123', 3600);          // истечёт через час
console.log(storage.get('theme', 'light'));