ngx-store
Version:
Angular decorators to automagically keep variables in HTML5 LocalStorage, SessionStorage, cookies; injectable services for managing and listening to data changes and a bit more.
58 lines • 9.53 kB
JavaScript
// tslint:disable:only-arrow-functions
import { LocalStorageService } from '../service/local-storage.service';
import { SessionStorageService } from '../service/session-storage.service';
import { CookiesStorageService } from '../service/cookies-storage.service';
import { cookiesStorageUtility, localStorageUtility, sessionStorageUtility, sharedStorageUtility } from '../utility';
import { SharedStorageService } from '../service/shared-storage.service';
import { Cache } from './cache';
export function LocalStorage(keyOrConfig, config) {
return WebStorage(localStorageUtility, LocalStorageService, keyOrConfig, config);
}
export function SessionStorage(keyOrConfig, config) {
return WebStorage(sessionStorageUtility, SessionStorageService, keyOrConfig, config);
}
export function CookieStorage(keyOrConfig, config) {
return WebStorage(cookiesStorageUtility, CookiesStorageService, keyOrConfig, config);
}
export function SharedStorage(keyOrConfig, config) {
return WebStorage(sharedStorageUtility, SharedStorageService, keyOrConfig, config);
}
function WebStorage(webStorageUtility, service, keyOrConfig, config = {}) {
return (target, propertyName) => {
let key = '';
if (typeof keyOrConfig === 'object') {
key = keyOrConfig.key || '';
config = keyOrConfig;
}
else if (typeof keyOrConfig === 'string') {
key = keyOrConfig;
}
key = key || config.key || propertyName;
let cacheItem = Cache.getCacheFor({
key,
name: propertyName,
targets: [target],
services: [service],
utilities: [{
utility: webStorageUtility,
config,
}],
});
Object.defineProperty(target, propertyName, {
get: function () {
return cacheItem.getProxy(undefined, config);
},
set: function (value) {
if (!Cache.get(cacheItem.key)) {
cacheItem = Cache.getCacheFor(cacheItem);
}
cacheItem.addTargets([target]);
cacheItem.currentTarget = target;
cacheItem.saveValue(value, config);
},
configurable: true,
});
return target;
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdG9yZS9zcmMvbGliL2RlY29yYXRvci93ZWJzdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNDQUFzQztBQUN0QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUUzRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFekUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQVdoQyxNQUFNLFVBQVUsWUFBWSxDQUFDLFdBQWtELEVBQ2xELE1BQW9DO0lBQy9ELE9BQU8sVUFBVSxDQUFDLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLFdBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNwRixDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxXQUFvRCxFQUNwRCxNQUFzQztJQUNuRSxPQUFPLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxXQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDeEYsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsV0FBbUQsRUFDbkQsTUFBcUM7SUFDakUsT0FBTyxVQUFVLENBQUMscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsV0FBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hGLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLFdBQWdELEVBQ2hELE1BQWtDO0lBQzlELE9BQU8sVUFBVSxDQUFDLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLFdBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0RixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQ2pCLGlCQUFvQyxFQUNwQyxPQUFtQyxFQUNuQyxXQUFxQyxFQUNyQyxTQUEwQixFQUFFO0lBRTVCLE9BQU8sQ0FBQyxNQUFXLEVBQUUsWUFBb0IsRUFBUSxFQUFFO1FBQ2pELElBQUksR0FBRyxHQUFXLEVBQUUsQ0FBQztRQUNyQixJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsRUFBRTtZQUNuQyxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDNUIsTUFBTSxHQUFHLFdBQVcsQ0FBQztTQUN0QjthQUFNLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFO1lBQzFDLEdBQUcsR0FBRyxXQUFXLENBQUM7U0FDbkI7UUFDRCxHQUFHLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDO1FBRXhDLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFDaEMsR0FBRztZQUNILElBQUksRUFBRSxZQUFZO1lBQ2xCLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFDbkIsU0FBUyxFQUFFLENBQUM7b0JBQ1YsT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsTUFBTTtpQkFDUCxDQUFDO1NBQ0gsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFO1lBQzFDLEdBQUcsRUFBRTtnQkFDSCxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLENBQUM7WUFDRCxHQUFHLEVBQUUsVUFBUyxLQUFVO2dCQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQzdCLFNBQVMsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUMxQztnQkFDRCxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDL0IsU0FBUyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7Z0JBQ2pDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFDRCxZQUFZLEVBQUUsSUFBSTtTQUNuQixDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHNsaW50OmRpc2FibGU6b25seS1hcnJvdy1mdW5jdGlvbnNcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL2xvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvb2tpZXNTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvY29va2llcy1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2ViU3RvcmFnZVNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3dlYnN0b3JhZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IGNvb2tpZXNTdG9yYWdlVXRpbGl0eSwgbG9jYWxTdG9yYWdlVXRpbGl0eSwgc2Vzc2lvblN0b3JhZ2VVdGlsaXR5LCBzaGFyZWRTdG9yYWdlVXRpbGl0eSB9IGZyb20gJy4uL3V0aWxpdHknO1xuaW1wb3J0IHsgU2hhcmVkU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3NoYXJlZC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2ViU3RvcmFnZVV0aWxpdHkgfSBmcm9tICcuLi91dGlsaXR5L3dlYnN0b3JhZ2UudXRpbGl0eSc7XG5pbXBvcnQgeyBDYWNoZSB9IGZyb20gJy4vY2FjaGUnO1xuaW1wb3J0IHtcbiAgQ29va2llU3RvcmFnZURlY29yYXRvckNvbmZpZyxcbiAgRGVjb3JhdG9yQ29uZmlnLFxuICBMb2NhbFN0b3JhZ2VEZWNvcmF0b3JDb25maWcsXG4gIFNlc3Npb25TdG9yYWdlRGVjb3JhdG9yQ29uZmlnLFxuICBXZWJTdG9yYWdlRGVjb3JhdG9yQ29uZmlnLFxufSBmcm9tICcuLi9uZ3gtc3RvcmUudHlwZXMnO1xuXG5leHBvcnQgdHlwZSBEZWNvcmF0b3JSZXR1cm4gPSAodGFyZ2V0OiBhbnksIHByb3BlcnR5TmFtZTogc3RyaW5nKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gTG9jYWxTdG9yYWdlKGtleU9yQ29uZmlnPzogc3RyaW5nIHwgTG9jYWxTdG9yYWdlRGVjb3JhdG9yQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc/OiBMb2NhbFN0b3JhZ2VEZWNvcmF0b3JDb25maWcpOiBEZWNvcmF0b3JSZXR1cm4ge1xuICByZXR1cm4gV2ViU3RvcmFnZShsb2NhbFN0b3JhZ2VVdGlsaXR5LCBMb2NhbFN0b3JhZ2VTZXJ2aWNlLCBrZXlPckNvbmZpZyEsIGNvbmZpZyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTZXNzaW9uU3RvcmFnZShrZXlPckNvbmZpZz86IHN0cmluZyB8IFNlc3Npb25TdG9yYWdlRGVjb3JhdG9yQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZz86IFNlc3Npb25TdG9yYWdlRGVjb3JhdG9yQ29uZmlnKTogRGVjb3JhdG9yUmV0dXJuIHtcbiAgcmV0dXJuIFdlYlN0b3JhZ2Uoc2Vzc2lvblN0b3JhZ2VVdGlsaXR5LCBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsIGtleU9yQ29uZmlnISwgY29uZmlnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvb2tpZVN0b3JhZ2Uoa2V5T3JDb25maWc/OiBzdHJpbmcgfCBDb29raWVTdG9yYWdlRGVjb3JhdG9yQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPzogQ29va2llU3RvcmFnZURlY29yYXRvckNvbmZpZyk6IERlY29yYXRvclJldHVybiB7XG4gIHJldHVybiBXZWJTdG9yYWdlKGNvb2tpZXNTdG9yYWdlVXRpbGl0eSwgQ29va2llc1N0b3JhZ2VTZXJ2aWNlLCBrZXlPckNvbmZpZyEsIGNvbmZpZyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTaGFyZWRTdG9yYWdlKGtleU9yQ29uZmlnPzogc3RyaW5nIHwgV2ViU3RvcmFnZURlY29yYXRvckNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZz86IFdlYlN0b3JhZ2VEZWNvcmF0b3JDb25maWcpOiBEZWNvcmF0b3JSZXR1cm4ge1xuICByZXR1cm4gV2ViU3RvcmFnZShzaGFyZWRTdG9yYWdlVXRpbGl0eSwgU2hhcmVkU3RvcmFnZVNlcnZpY2UsIGtleU9yQ29uZmlnISwgY29uZmlnKTtcbn1cblxuZnVuY3Rpb24gV2ViU3RvcmFnZShcbiAgd2ViU3RvcmFnZVV0aWxpdHk6IFdlYlN0b3JhZ2VVdGlsaXR5LFxuICBzZXJ2aWNlOiBXZWJTdG9yYWdlU2VydmljZUludGVyZmFjZSxcbiAga2V5T3JDb25maWc6IHN0cmluZyB8IERlY29yYXRvckNvbmZpZyxcbiAgY29uZmlnOiBEZWNvcmF0b3JDb25maWcgPSB7fSxcbik6IERlY29yYXRvclJldHVybiB7XG4gIHJldHVybiAodGFyZ2V0OiBhbnksIHByb3BlcnR5TmFtZTogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgbGV0IGtleTogc3RyaW5nID0gJyc7XG4gICAgaWYgKHR5cGVvZiBrZXlPckNvbmZpZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGtleSA9IGtleU9yQ29uZmlnLmtleSB8fCAnJztcbiAgICAgIGNvbmZpZyA9IGtleU9yQ29uZmlnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGtleU9yQ29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAga2V5ID0ga2V5T3JDb25maWc7XG4gICAgfVxuICAgIGtleSA9IGtleSB8fCBjb25maWcua2V5IHx8IHByb3BlcnR5TmFtZTtcblxuICAgIGxldCBjYWNoZUl0ZW0gPSBDYWNoZS5nZXRDYWNoZUZvcih7XG4gICAgICBrZXksXG4gICAgICBuYW1lOiBwcm9wZXJ0eU5hbWUsXG4gICAgICB0YXJnZXRzOiBbdGFyZ2V0XSxcbiAgICAgIHNlcnZpY2VzOiBbc2VydmljZV0sXG4gICAgICB1dGlsaXRpZXM6IFt7XG4gICAgICAgIHV0aWxpdHk6IHdlYlN0b3JhZ2VVdGlsaXR5LFxuICAgICAgICBjb25maWcsXG4gICAgICB9XSxcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5TmFtZSwge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpOiBhbnkgeyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lXG4gICAgICAgIHJldHVybiBjYWNoZUl0ZW0uZ2V0UHJveHkodW5kZWZpbmVkLCBjb25maWcpO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odmFsdWU6IGFueSk6IHZvaWQgeyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lXG4gICAgICAgIGlmICghQ2FjaGUuZ2V0KGNhY2hlSXRlbS5rZXkpKSB7XG4gICAgICAgICAgY2FjaGVJdGVtID0gQ2FjaGUuZ2V0Q2FjaGVGb3IoY2FjaGVJdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBjYWNoZUl0ZW0uYWRkVGFyZ2V0cyhbdGFyZ2V0XSk7XG4gICAgICAgIGNhY2hlSXRlbS5jdXJyZW50VGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICBjYWNoZUl0ZW0uc2F2ZVZhbHVlKHZhbHVlLCBjb25maWcpO1xuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xufVxuIl19