Warning
ClientStorage is deprecated on npm. Use @veliovgroup/client-storage going forward.
Bulletproof persistent browser storage. Drivers: localStorage > cookies > js (in-memory). TTL, JSON values (objects/arrays/booleans/null/undefined), Unicode. No deps. Meteor + NPM + full TS support.
- π· 100% Tests coverage;
- π¦ No external dependencies;
- πͺ Bulletproof persistent Client storage;
- γοΈ With Unicode support for values and keys;
- π¨βπ» With
String,Array,Object, andBooleansupport as values; - βΏ Works with disabled
localStorageandcookies; - βοΈ Meteor.js-specific docs
- π¦ Available via NPM and Atmosphere.
npm install @veliovgroup/client-storage// NPM / TS / ESM
import { ClientStorage } from '@veliovgroup/client-storage';
const storage = new ClientStorage(); // auto or 'localStorage' | 'cookies' | 'js'Values pass through JSON serialization when stored in persistent drivers.
const storage = new ClientStorage();
storage.set('locale', 'en');
storage.set('user', { id: 1, prefs: { theme: 'dark' } }, 3600);
storage.set('flags', ['beta', 'compact']);
storage.set('enabled', true);
storage.set('empty', null);
storage.set('void', undefined);
storage.get('user'); // { id: 1, prefs: { theme: 'dark' } }
storage.has('void'); // true
storage.get('void'); // undefined
storage.keys(); // non-expired keysstorage.set('session', 'secret', 30);
storage.get('session'); // 'secret'
// after 30 seconds:
storage.get('session'); // undefined, record removednew ClientStorage(); // auto: localStorage -> cookies -> js
new ClientStorage('localStorage');
new ClientStorage('cookies');
new ClientStorage('js'); // in-memory, per instanceImportant
Multiple instances: Persistent drivers (localStorage/cookies) share data; js has isolated context per each instance. Server-side code uses js because browser storage APIs do not exist there.
storage.set(key: string, value: any, ttl?: number): booleanβ Store. TTL in seconds.storage.get(key: string): any | undefinedβ Read. Auto-removes expired.undefinedif missing.storage.has(key: string): booleanβ Exists and not expired.storage.remove(key?: string): booleanβ Remove key or all (empty).storage.empty(): booleanβ Alias for remove(). Caution: clears tracked keys; may affect other cookies if no prefix.storage.keys(): string[]β Current keys.storage.driverNameβ Active driver.
storage.set(key: string, value: any, ttl?: number): boolean
storage.get(key: string): any
storage.has(key: string): boolean
storage.keys(): string[]
storage.remove(key?: string): boolean
storage.empty(): boolean
storage.driverName: 'localStorage' | 'cookies' | 'js'TS: Full types included. See index.d.ts. Use with import type { ClientStorage } from '@veliovgroup/client-storage';
ttlis seconds.get()andhas()remove expired records before returning.keys()returns non-expired keys.remove(key)removes one record.remove()andempty()remove all records known to selected backend.jsdriver is in-memory and isolated perClientStorageinstance.localStorageand cookies persist across instances on same origin.
Tip
Drivers exported: ClientStorage, BaseStorage, BrowserStorage, CookiesStorage, JSStorage.
const storage = new ClientStorage();
storage.set('locale', 'en');
storage.set('user', { id: 1, prefs: { theme: 'dark' } }, 3600); // 1hr TTL
storage.set('flag', true);
console.log(storage.get('user')); // {id:1, prefs:...}
console.log(storage.has('locale')); // true
console.log(storage.keys()); // ['locale', 'user', 'flag']
storage.remove('locale');
storage.empty(); // clears all- Jest (NPM):
npm testβ covers API, edges, errors, drivers, BaseStorage.
npm test100% functional coverage. See client-storage-tests.js, tests/client-storage.test.js.
- Upload and share files using βοΈ meteor-files.com β Continue interrupted file uploads without losing any progress. There is nothing that will stop Meteor from delivering your file to the desired destination
- Use β² ostr.io for Server Monitoring, Web Analytics, WebSec, Web-CRON and SEO Pre-rendering of a website
- Star on GitHub
- Star on NPM
- Star on Atmosphere
- Sponsor via GitHub
- Support via PayPal
