Skip to content

Instantly share code, notes, and snippets.

@Purexo
Created February 16, 2017 18:38
Show Gist options
  • Save Purexo/66342115679d6e8c8825162e6a662832 to your computer and use it in GitHub Desktop.
Save Purexo/66342115679d6e8c8825162e6a662832 to your computer and use it in GitHub Desktop.
const handlerStorage = {
get(target, key) {
const value = target.getItem(key);
try {
return JSON.parse(value);
} catch (e) {
return value;
}
},
set(target, key, value) {
try {
target.setItem(key, JSON.stringify(value));
} catch (e) {
target.setItem(key, new String(value));
}
return true;
},
ownKeys(target) {
return Array.from(target, (value, index) => target.key(index))
},
has(target, key) {
return target.getItem(key) != null
},
delete(target, key) {
target.removeItem(key);
return true;
}
};
const store = {
local: new Proxy(localStorage, handlerStorage),
session: new Proxy(sessionStorage, handlerStorage)
};
// set trap
store.local.test = {foo: 'bar'};
// get trap
console.log(store.local.test); // {foo: 'bar'}
// ownKeys trap
console.log(Object.keys(store.local)); // ['test']
// has trap
console.log('test' in store.local); // true
console.log('clé inexistante' in store.local); // false
// delete trap
delete store.local.test;
// has trap
console.log('test' in store.local); // false
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment