Skip to content

ultimatecourses/vault

Repository files navigation

🔒 @ultimate/vault

1KB typed localStorage and sessionStorage utility with data structure and prefix support.

Installation

Install via npm i @ultimate/vault.

Documentation

ESModule: Import Vault into your TypeScript or JavaScript project and create a new instance:

import { Vault } from '@ultimate/vault';

const localStorage = new Vault();

Global: Access window.Vault if you are not using a module system:

<script src="vault.min.js"></script>
<script>
  // implicitly uses localStorage until specified
const localStorage = new Vault();
</script>

Local or Session Storage

By default new Vault() will use localStorage. You may specify the type of storage:

const localStorage = new Vault({ type: 'local' });
const sessionStorage = new Vault({ type: 'session' });

As Vault is a class each instance works independently.

Key Prefixes

Create a prefix for each Vault instance:

const localStorage = new Vault({ prefix: 'x9ea45' });

All keys set into storage via this instance will be stored as x9ea45-<key>.

isSupported property

Browser support is IE8+ so this shouldn't be wildly needed, but it's there anyway:

const localStorage = new Vault();

if (localStorage.isSupported) {
  // initialize...
}

set<T>(key: string, value: T): void

Set a key and value into storage using the typed set method:

// TypeScript
const localStorage = new Vault();

interface User {
  name: string
}

localStorage.set<User>('user', { name: 'Todd Motto' });

All methods are available to use without TypeScript:

const localStorage = new Vault();

localStorage.set('user', { name: 'Todd Motto' });

get<T>(key: string): T | undefined

Get a value from storage using the typed get method:

const localStorage = new Vault();

interface User {
  name: string
}

localStorage.get<User>('user');

remove(key: string): void

Remove an item from storage using the remove method:

const localStorage = new Vault();

localStorage.remove('user');

removeAll(): void

Remove all items from storage:

const localStorage = new Vault();

localStorage.removeAll();

onChange(key: string, fn: (e: StorageEvent) => void): () => void

Listen to the storage change event from another tab, which is emitted when any storage value is changed. Here we can specify to only listen to specific property changes:

const localStorage = new Vault();

const unsubscribe = localStorage.onChange('user', (e: StorageEvent) => {
  // `user` was changed in another tab
  // we could use this new data to sync our UI
  console.log(e);
});

// remove the event listener when you're ready
unsubscribe();

Get all values

Obtain all storage values by accessing the value getter:

const localStorage = new Vault();

console.log(localStorage.value); // { "user": "Todd Motto", ... }

Returns an object with all keys and values. Values will remain a string type and will need parsing with JSON.parse() if you need to access the value.

Length of Storage

Access how many items are currently in storage with length:

const localStorage = new Vault();

console.log(localStorage.length); // 3