Socket
Socket
Sign inDemoInstall

reactive-localstorage

Package Overview
Dependencies
0
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.0.2 to 0.1.0-alpha.1

11

es/localstorage.d.ts
export declare class LocalStorage implements Storage {
readonly supported: boolean;
protected storage: Storage;
readonly native: Storage;
protected _events: {
[P in keyof ReactiveLocalStorageEventMap]?: Set<ReactiveLocalStorageEventMap[P]>;
};
protected _cache: Map<string, string | null>;
protected _length: number;
protected _injected: boolean;
constructor(window?: Window, storage?: Storage);

@@ -16,8 +19,10 @@ readonly length: number;

off<K extends keyof ReactiveLocalStorageEventMap>(name: K, fn: ReactiveLocalStorageEventMap[K]): void;
feed(key: string, newValue: string | null): void;
feed(key: string, newValue: string | null, oldValue: string | null): void;
protected set(key: string, value: string | null): void;
protected emit<K extends keyof ReactiveLocalStorageEventMap>(name: K, ...args: ReactiveLocalStorageEventMap[K] extends (...args: infer T) => any ? T : any[]): void;
protected inject(target: Window, storage: Storage): void;
}
export interface ReactiveLocalStorageEventMap {
change(key: string, newValue: string | null): any;
change(key: string, newValue: string | null, oldValue: string | null): any;
}
export declare function listen(target: Window, cb: (this: Window, ev: WindowEventMap['storage']) => any): boolean;
export class LocalStorage {
constructor(window, storage) {
this._events = {};
this._length = 0;
this._injected = false;
if (window) {

@@ -11,28 +13,37 @@ this.supported = true;

}
this.storage = storage || window.localStorage;
listen(window, ({ key, newValue }) => {
this.native = storage || window.localStorage;
this._cache = new Map();
this.inject(window, this.native);
listen(window, ({ key, newValue, oldValue }) => {
if (!key)
return;
this.feed(key, newValue);
this.feed(key, newValue, oldValue);
});
}
get length() {
return this.storage.length;
return this.native.length;
}
key(index) {
return this.storage.key(index);
return this.native.key(index);
}
getItem(key) {
return this.storage.getItem(key);
const cache = this._cache;
if (cache.has(key))
return cache.get(key);
const value = this.native.getItem(key);
cache.set(key, value);
return value;
}
setItem(key, value) {
this.storage.setItem(key, value);
this.emit('change', key, value);
return this.set(key, value);
}
removeItem(key) {
this.storage.removeItem(key);
this.emit('change', key, null);
return this.set(key, null);
}
clear() {
this.storage.clear();
this.native.clear();
const cache = this._cache;
for (const key of cache.keys()) {
cache.set(key, null);
}
}

@@ -52,5 +63,18 @@ on(name, fn) {

}
feed(key, newValue) {
this.emit('change', key, newValue);
feed(key, newValue, oldValue) {
this._cache.set(key, newValue);
this.emit('change', key, newValue, oldValue);
}
set(key, value) {
const cache = this._cache;
const oldValue = cache.has(key) ? cache.get(key) : this.native.getItem(key);
if (typeof value === 'string') {
this.native.setItem(key, value);
}
else {
this.native.removeItem(key);
}
cache.set(key, value);
this.emit('change', key, value, oldValue);
}
emit(name, ...args) {

@@ -64,2 +88,70 @@ const set = this._events[name];

}
inject(target, storage) {
const me = this;
const cache = this._cache;
const injected = Object.create(storage);
Object.defineProperties(injected, {
getItem: {
configurable: true,
enumerable: false,
writable: true,
value(key) {
const value = storage.getItem(key);
cache.set(key, value);
},
},
setItem: {
configurable: true,
enumerable: false,
writable: true,
value(key, value) {
set(key, String(value));
},
},
removeItem: {
configurable: true,
enumerable: false,
writable: true,
value(key) {
set(key, null);
},
}
});
Object.defineProperty(target, 'localStorage', {
...Object.getOwnPropertyDescriptor(window, 'localStorage'),
get: () => injected,
});
this._injected = true;
function set(key, newValue) {
let oldValue;
let error;
let hasError = false;
try {
oldValue = me.getItem(key);
}
catch (e) {
hasError = true;
error = e;
}
if (newValue === null) {
storage.removeItem(key);
}
else {
storage.setItem(key, newValue);
}
if (hasError) {
// tslint:disable-next-line no-console
console.error(error);
return;
}
try {
cache.set(key, newValue);
me.feed(key, newValue, oldValue);
}
catch (e) {
// tslint:disable-next-line no-console
console.error(e);
}
}
}
}

@@ -78,2 +170,2 @@ export function listen(target, cb) {

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxzdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvY2Fsc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sWUFBWTtJQVF2QixZQUFZLE1BQWUsRUFBRSxPQUFpQjtRQUpwQyxZQUFPLEdBRWIsRUFBRSxDQUFBO1FBR0osSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtTQUN0QjthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUE7WUFDdEIsTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUE7U0FDdEI7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFBO1FBQzdDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxHQUFHO2dCQUFFLE9BQU07WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDMUIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQTtJQUM1QixDQUFDO0lBRUQsR0FBRyxDQUFDLEtBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hDLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBVztRQUNqQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBVyxFQUFFLEtBQWE7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUNqQyxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQVc7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ2hDLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUN0QixDQUFDO0lBRUQsRUFBRSxDQUErQyxJQUFPLEVBQUUsRUFBbUM7UUFDM0YsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM1QixJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtTQUNyQztRQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDYixDQUFDO0lBRUQsR0FBRyxDQUErQyxJQUFPLEVBQUUsRUFBbUM7UUFDNUYsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM5QixJQUFJLEdBQUcsRUFBRTtZQUNQLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUE7U0FDZjtJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsR0FBVyxFQUFFLFFBQXVCO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUNwQyxDQUFDO0lBRVMsSUFBSSxDQUNaLElBQU8sRUFDUCxHQUFHLElBQW1GO1FBRXRGLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUIsSUFBSSxHQUFHLEVBQUU7WUFDUCxLQUFLLE1BQU0sRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDN0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7YUFDckI7U0FDRjtJQUNILENBQUM7Q0FDRjtBQU1ELE1BQU0sVUFBVSxNQUFNLENBQUMsTUFBYyxFQUFFLEVBQXdEO0lBQzdGLElBQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFO1FBQzNCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFBO0tBQzdDO1NBQU0sSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO1FBQzdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0tBQ2xDO1NBQU07UUFDTCxPQUFPLEtBQUssQ0FBQTtLQUNiO0lBQ0QsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDIn0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxzdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvY2Fsc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sWUFBWTtJQVd2QixZQUFZLE1BQWUsRUFBRSxPQUFpQjtRQVBwQyxZQUFPLEdBRWIsRUFBRSxDQUFBO1FBRUksWUFBTyxHQUFHLENBQUMsQ0FBQTtRQUNYLGNBQVMsR0FBRyxLQUFLLENBQUE7UUFHekIsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtTQUN0QjthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUE7WUFDdEIsTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUE7U0FDdEI7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFBO1FBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDaEMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO1lBQzdDLElBQUksQ0FBQyxHQUFHO2dCQUFFLE9BQU07WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3BDLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUE7SUFDM0IsQ0FBQztJQUVELEdBQUcsQ0FBQyxLQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMvQixDQUFDO0lBRUQs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
export declare class LocalStorage implements Storage {
readonly supported: boolean;
protected storage: Storage;
readonly native: Storage;
protected _events: {
[P in keyof ReactiveLocalStorageEventMap]?: Set<ReactiveLocalStorageEventMap[P]>;
};
protected _cache: Map<string, string | null>;
protected _length: number;
protected _injected: boolean;
constructor(window?: Window, storage?: Storage);

@@ -16,8 +19,10 @@ readonly length: number;

off<K extends keyof ReactiveLocalStorageEventMap>(name: K, fn: ReactiveLocalStorageEventMap[K]): void;
feed(key: string, newValue: string | null): void;
feed(key: string, newValue: string | null, oldValue: string | null): void;
protected set(key: string, value: string | null): void;
protected emit<K extends keyof ReactiveLocalStorageEventMap>(name: K, ...args: ReactiveLocalStorageEventMap[K] extends (...args: infer T) => any ? T : any[]): void;
protected inject(target: Window, storage: Storage): void;
}
export interface ReactiveLocalStorageEventMap {
change(key: string, newValue: string | null): any;
change(key: string, newValue: string | null, oldValue: string | null): any;
}
export declare function listen(target: Window, cb: (this: Window, ev: WindowEventMap['storage']) => any): boolean;
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __values = (this && this.__values) || function (o) {

@@ -17,2 +28,4 @@ var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;

this._events = {};
this._length = 0;
this._injected = false;
if (window) {

@@ -25,8 +38,10 @@ this.supported = true;

}
this.storage = storage || window.localStorage;
this.native = storage || window.localStorage;
this._cache = new Map();
this.inject(window, this.native);
listen(window, function (_a) {
var key = _a.key, newValue = _a.newValue;
var key = _a.key, newValue = _a.newValue, oldValue = _a.oldValue;
if (!key)
return;
_this.feed(key, newValue);
_this.feed(key, newValue, oldValue);
});

@@ -36,3 +51,3 @@ }

get: function () {
return this.storage.length;
return this.native.length;
},

@@ -43,17 +58,35 @@ enumerable: true,

LocalStorage.prototype.key = function (index) {
return this.storage.key(index);
return this.native.key(index);
};
LocalStorage.prototype.getItem = function (key) {
return this.storage.getItem(key);
var cache = this._cache;
if (cache.has(key))
return cache.get(key);
var value = this.native.getItem(key);
cache.set(key, value);
return value;
};
LocalStorage.prototype.setItem = function (key, value) {
this.storage.setItem(key, value);
this.emit('change', key, value);
return this.set(key, value);
};
LocalStorage.prototype.removeItem = function (key) {
this.storage.removeItem(key);
this.emit('change', key, null);
return this.set(key, null);
};
LocalStorage.prototype.clear = function () {
this.storage.clear();
var e_1, _a;
this.native.clear();
var cache = this._cache;
try {
for (var _b = __values(cache.keys()), _c = _b.next(); !_c.done; _c = _b.next()) {
var key = _c.value;
cache.set(key, null);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
};

@@ -73,5 +106,18 @@ LocalStorage.prototype.on = function (name, fn) {

};
LocalStorage.prototype.feed = function (key, newValue) {
this.emit('change', key, newValue);
LocalStorage.prototype.feed = function (key, newValue, oldValue) {
this._cache.set(key, newValue);
this.emit('change', key, newValue, oldValue);
};
LocalStorage.prototype.set = function (key, value) {
var cache = this._cache;
var oldValue = cache.has(key) ? cache.get(key) : this.native.getItem(key);
if (typeof value === 'string') {
this.native.setItem(key, value);
}
else {
this.native.removeItem(key);
}
cache.set(key, value);
this.emit('change', key, value, oldValue);
};
LocalStorage.prototype.emit = function (name) {

@@ -82,3 +128,3 @@ var args = [];

}
var e_1, _a;
var e_2, _a;
var set = this._events[name];

@@ -92,3 +138,3 @@ if (set) {

}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {

@@ -98,6 +144,71 @@ try {

}
finally { if (e_1) throw e_1.error; }
finally { if (e_2) throw e_2.error; }
}
}
};
LocalStorage.prototype.inject = function (target, storage) {
var me = this;
var cache = this._cache;
var injected = Object.create(storage);
Object.defineProperties(injected, {
getItem: {
configurable: true,
enumerable: false,
writable: true,
value: function (key) {
var value = storage.getItem(key);
cache.set(key, value);
},
},
setItem: {
configurable: true,
enumerable: false,
writable: true,
value: function (key, value) {
set(key, String(value));
},
},
removeItem: {
configurable: true,
enumerable: false,
writable: true,
value: function (key) {
set(key, null);
},
}
});
Object.defineProperty(target, 'localStorage', __assign({}, Object.getOwnPropertyDescriptor(window, 'localStorage'), { get: function () { return injected; } }));
this._injected = true;
function set(key, newValue) {
var oldValue;
var error;
var hasError = false;
try {
oldValue = me.getItem(key);
}
catch (e) {
hasError = true;
error = e;
}
if (newValue === null) {
storage.removeItem(key);
}
else {
storage.setItem(key, newValue);
}
if (hasError) {
// tslint:disable-next-line no-console
console.error(error);
return;
}
try {
cache.set(key, newValue);
me.feed(key, newValue, oldValue);
}
catch (e) {
// tslint:disable-next-line no-console
console.error(e);
}
}
};
return LocalStorage;

@@ -119,2 +230,2 @@ }());

exports.listen = listen;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxzdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvY2Fsc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTtJQVFFLHNCQUFZLE1BQWUsRUFBRSxPQUFpQjtRQUE5QyxpQkFZQztRQWhCUyxZQUFPLEdBRWIsRUFBRSxDQUFBO1FBR0osSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtTQUN0QjthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUE7WUFDdEIsTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUE7U0FDdEI7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFBO1FBQzdDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBQyxFQUFpQjtnQkFBZixZQUFHLEVBQUUsc0JBQVE7WUFDN0IsSUFBSSxDQUFDLEdBQUc7Z0JBQUUsT0FBTTtZQUNoQixLQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUMxQixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxzQkFBSSxnQ0FBTTthQUFWO1lBQ0UsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQTtRQUM1QixDQUFDOzs7T0FBQTtJQUVELDBCQUFHLEdBQUgsVUFBSSxLQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNoQyxDQUFDO0lBRUQsOEJBQU8sR0FBUCxVQUFRLEdBQVc7UUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQsOEJBQU8sR0FBUCxVQUFRLEdBQVcsRUFBRSxLQUFhO1FBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxD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
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxzdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvY2Fsc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0lBV0Usc0JBQVksTUFBZSxFQUFFLE9BQWlCO1FBQTlDLGlCQWNDO1FBckJTLFlBQU8sR0FFYixFQUFFLENBQUE7UUFFSSxZQUFPLEdBQUcsQ0FBQyxDQUFBO1FBQ1gsY0FBUyxHQUFHLEtBQUssQ0FBQTtRQUd6QixJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO1NBQ3RCO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtZQUN0QixNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQTtTQUN0QjtRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUE7UUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNoQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQUMsRUFBMkI7Z0JBQXpCLFlBQUcsRUFBRSxzQkFBUSxFQUFFLHNCQUFRO1lBQ3ZDLElBQUksQ0FBQyxHQUFHO2dCQUFFLE9BQU07WUFDaEIsS0FBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3BDLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELHNCQUFJLGdDQUFNO2FBQVY7WUFDRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFBO1FBQzNCLENBQUM7OztPQUFBO0lBRUQsMEJBQUcsR0FBSCxVQUFJLEtBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxD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
{
"name": "reactive-localstorage",
"version": "0.0.2",
"version": "0.1.0-alpha.1",
"description": "A reactive localStorage with no dependency",

@@ -5,0 +5,0 @@ "main": "lib/index.js",

@@ -13,2 +13,3 @@ # reactive-localstorage

#### Features
* inject window.localStorage
* Emit changes from same window

@@ -32,6 +33,6 @@ * Emit external changes

You can also trigger changes manually, especially when you have other sources that manage localStorage.
It also works with window.localStorage
```js
localStorage.feed('foo', 'alice');
window.localStorage.setItem('foo', 'alice');

@@ -41,11 +42,8 @@ // print key foo changed to alice

You can also use injection to override `window.localStorage`
You can also trigger changes manually, especially when you have other sources that manage localStorage.
```js
import 'reactive-localstorage/lib/inject';
import localStorage from 'reactive-localstorage';
localStorage.feed('foo', 'bob');
console.log(window.localStorage === localStorage);
// print true
// print key foo changed to bob
```

@@ -52,0 +50,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc