UNPKG

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
// 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