{"version":3,"file":"pscoped-ng2-cache.mjs","sources":["../../../lib/src/lib/ng2-cache.module.ts","../../../lib/src/lib/enums/cache-storages.enum.ts","../../../lib/src/lib/services/storage/cache-storage-abstract.service.ts","../../../lib/src/lib/services/storage/session-storage/cache-session-storage.service.ts","../../../lib/src/lib/services/storage/local-storage/cache-local-storage.service.ts","../../../lib/src/lib/services/storage/memory/cache-memory.service.ts","../../../lib/src/lib/services/cache.service.ts","../../../lib/src/pscoped-ng2-cache.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n  imports: [CommonModule],\n})\nexport class Ng2CacheModule {}\n","export enum CacheStoragesEnum {\n    LOCAL_STORAGE,\n    SESSION_STORAGE,\n    MEMORY\n}\n","import {CacheStoragesEnum} from '../../enums/cache-storages.enum';\nimport {StorageValueInterface} from '../../interfaces/storage-value.interface';\n\n/**\n * Abstract cache storage\n */\nexport abstract class CacheStorageAbstract {\n\n    /**\n     * Get item from storage\n     * @param key\n     */\n    public abstract getItem(key: string): StorageValueInterface;\n\n    /**\n     * Set item to storage\n     * @param key\n     * @param value\n     */\n    public abstract setItem(key: string, value: StorageValueInterface): boolean;\n\n    /**\n     * Remove item from storage\n     * @param key\n     */\n    public abstract removeItem(key: string): void;\n\n    /**\n     * Clear item in storage\n     */\n    public abstract clear(): void;\n\n    /**\n     * Get current storage type\n     */\n    public abstract type(): CacheStoragesEnum;\n\n    /**\n     * Check if storage is enabled\n     */\n    public abstract isEnabled(): boolean;\n\n}\n","import {Injectable} from '@angular/core';\nimport {CacheStorageAbstract} from '../cache-storage-abstract.service';\nimport {CacheStoragesEnum} from '../../../enums/cache-storages.enum';\nimport {StorageValueInterface} from '../../../interfaces/storage-value.interface';\n\n/**\n * Service for storing data in session storage\n */\n@Injectable()\nexport class CacheSessionStorage extends CacheStorageAbstract {\n\n    public getItem(key: string) {\n        let value = sessionStorage.getItem(key);\n        return value ? JSON.parse(value) : null;\n    }\n\n    public setItem(key: string, value: StorageValueInterface) {\n        try {\n            sessionStorage.setItem(key, JSON.stringify(value));\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }\n\n    public removeItem(key: string) {\n        sessionStorage.removeItem(key);\n    }\n\n    public clear() {\n        sessionStorage.clear();\n    }\n\n    public type() {\n        return CacheStoragesEnum.SESSION_STORAGE;\n    }\n\n    public isEnabled() {\n        try {\n            sessionStorage.setItem('test', 'test');\n            sessionStorage.removeItem('test');\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }\n}\n","import {Injectable} from '@angular/core';\nimport {CacheStorageAbstract} from '../cache-storage-abstract.service';\nimport {CacheStoragesEnum} from '../../../enums/cache-storages.enum';\nimport {StorageValueInterface} from '../../../interfaces/storage-value.interface';\n\n/**\n * Service for storing data in local storage\n */\n@Injectable()\nexport class CacheLocalStorage extends CacheStorageAbstract {\n\n    public getItem(key: string) {\n        const value = localStorage.getItem(key);\n        return value ? JSON.parse(value) : null;\n    }\n\n    public setItem(key: string, value: StorageValueInterface) {\n        try {\n            localStorage.setItem(key, JSON.stringify(value));\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }\n\n    public removeItem(key: string) {\n        localStorage.removeItem(key);\n    }\n\n    public clear() {\n        localStorage.clear();\n    }\n\n    public type() {\n        return CacheStoragesEnum.LOCAL_STORAGE;\n    }\n\n    public isEnabled() {\n        try {\n            localStorage.setItem('test', 'test');\n            localStorage.removeItem('test');\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }\n}\n","import {Injectable} from '@angular/core';\nimport {CacheStorageAbstract} from '../cache-storage-abstract.service';\nimport {CacheStoragesEnum} from '../../../enums/cache-storages.enum';\nimport {StorageValueInterface} from '../../../interfaces/storage-value.interface';\n\n/**\n * Service for storing data in local storage\n */\n@Injectable()\nexport class CacheMemoryStorage extends CacheStorageAbstract {\n\n    private _data: {[key: string]: any} = {};\n\n    public getItem(key: string) {\n        return this._data[key] ? this._data[key] : null;\n    }\n\n    public setItem(key: string, value: StorageValueInterface) {\n        this._data[key] = value;\n        return true;\n    }\n\n    public removeItem(key: string) {\n        delete this._data[key];\n    }\n\n    public clear() {\n        this._data = [];\n    }\n\n    public type() {\n        return CacheStoragesEnum.MEMORY;\n    }\n\n    public isEnabled() {\n        return true;\n    }\n}\n","import {Injectable, Optional} from '@angular/core';\nimport {CacheOptionsInterface} from '../interfaces/cache-options.interface';\nimport {CacheStoragesEnum} from '../enums/cache-storages.enum';\nimport {CacheStorageAbstract} from './storage/cache-storage-abstract.service';\nimport {CacheSessionStorage} from './storage/session-storage/cache-session-storage.service';\nimport {CacheLocalStorage} from './storage/local-storage/cache-local-storage.service';\nimport {CacheMemoryStorage} from './storage/memory/cache-memory.service';\nimport {StorageValueInterface} from '../interfaces/storage-value.interface';\n\nconst CACHE_PREFIX = 'CacheService';\n\nconst DEFAULT_STORAGE = CacheStoragesEnum.SESSION_STORAGE;\nconst DEFAULT_ENABLED_STORAGE = CacheStoragesEnum.MEMORY;\n\n@Injectable()\nexport class CacheService {\n\n    /**\n     * Default cache options\n     */\n    private _defaultOptions: CacheOptionsInterface = {\n        expires: Number.MAX_VALUE,\n        maxAge : Number.MAX_VALUE\n    };\n\n    /**\n     * Cache prefix\n     */\n    private _prefix: string = CACHE_PREFIX;\n\n    public constructor(@Optional() private _storage: CacheStorageAbstract) {\n        this._validateStorage();\n    }\n\n    /**\n     * Set data to cache\n     * @param key\n     * @param value\n     * @param options\n     */\n    public set(key: string, value: any, options?: CacheOptionsInterface) {\n        let storageKey = this._toStorageKey(key);\n        options = options ? options : this._defaultOptions;\n        if (this._storage.setItem(storageKey, this._toStorageValue(value, options))) {\n            if (!this._isSystemKey(key) && options.tag) {\n                this._saveTag(options.tag, storageKey);\n            }\n            return true;\n        }\n        return false;\n    }\n\n\n    /**\n     * Get data from cache\n     * @param key\n     * @returns any\n     */\n    public get(key: string): any {\n        let storageValue = this._storage.getItem(this._toStorageKey(key)),\n            value: any = null;\n        if (storageValue) {\n            if (this._validateStorageValue(storageValue)) {\n                value = storageValue.value;\n            } else {\n                this.remove(key);\n            }\n        }\n        return value;\n    }\n\n    /**\n     * Check if value exists\n     * @param key\n     * @returns boolean\n     */\n    public exists(key: string): boolean {\n        return !!this.get(key);\n    }\n\n    /**\n     * Remove item from cache\n     * @param key\n     */\n    public remove(key: string) {\n        this._storage.removeItem(this._toStorageKey(key));\n        this._removeFromTag(this._toStorageKey(key));\n    }\n\n    /**\n     * Remove all from cache\n     */\n    public removeAll() {\n        this._storage.clear();\n    }\n\n    /**\n     * Get all tag data\n     * @param tag\n     * @returns Array\n     */\n    public getTagData(tag: string) {\n        let tags = this.get(this._tagsStorageKey()) || {},\n            result : {[key: string]: any} = {};\n        if (tags[tag]) {\n            tags[tag].forEach((key: string) => {\n                let data = this.get(this._fromStorageKey(key));\n                if (data) {\n                    result[this._fromStorageKey(key)] = data;\n                }\n            });\n        }\n        return result;\n    }\n\n    /**\n     * Create a new instance of cache with needed storage\n     * @param type\n     * returns CacheService\n     */\n    public useStorage(type: CacheStoragesEnum) {\n        let service = new CacheService(this._initStorage(type));\n        service.setGlobalPrefix(this._getCachePrefix());\n        return service;\n    }\n\n    /**\n     * Remove all by tag\n     * @param tag\n     */\n    public removeTag(tag: string) {\n        let tags = this.get(this._tagsStorageKey()) || {};\n        if (tags[tag]) {\n            tags[tag].forEach((key: string) => {\n                this._storage.removeItem(key);\n            });\n            delete tags[tag];\n            this.set(this._tagsStorageKey(), tags);\n        }\n    }\n\n    /**\n     * Set global cache key prefix\n     * @param prefix\n     */\n    public setGlobalPrefix(prefix: string) {\n        this._prefix = prefix;\n    }\n\n    /**\n     * Validate cache storage\n     */\n    private _validateStorage() {\n        if (!this._storage) {\n            this._storage = this._initStorage(DEFAULT_STORAGE);\n        }\n        if (!this._storage.isEnabled()) {\n            this._storage = this._initStorage(DEFAULT_ENABLED_STORAGE);\n        }\n    }\n\n    /**\n     * Remove key from tags keys list\n     * @param key\n     */\n    private _removeFromTag(key: string) {\n        let tags = this.get(this._tagsStorageKey()) || {},\n            index: number;\n        for (let tag in tags) {\n            index = tags[tag].indexOf(key);\n            if (index !== -1) {\n                tags[tag].splice(index, 1);\n                this.set(this._tagsStorageKey(), tags);\n                break;\n            }\n        }\n    }\n\n    /**\n     * Init storage by type\n     * @param type\n     * @returns CacheStorageAbstract\n     */\n    private _initStorage(type: CacheStoragesEnum) {\n        let storage: CacheStorageAbstract;\n        switch (type) {\n            case CacheStoragesEnum.SESSION_STORAGE:\n                storage = new CacheSessionStorage();\n                break;\n            case CacheStoragesEnum.LOCAL_STORAGE:\n                storage = new CacheLocalStorage();\n                break;\n            default: storage = new CacheMemoryStorage();\n        }\n        return storage;\n    }\n\n    private _toStorageKey(key: string) {\n        return this._getCachePrefix() + key;\n    }\n\n    private _fromStorageKey(key: string) {\n        return key.replace(this._getCachePrefix(), '');\n    }\n\n    /**\n     * Prepare value to set to storage\n     * @param value\n     * @param options\n     * returns {value: any, options: CacheOptionsInterface}\n     */\n    private _toStorageValue(value: any, options: CacheOptionsInterface): StorageValueInterface {\n        return {\n            value: value,\n            options: this._toStorageOptions(options)\n        };\n    }\n\n    /**\n     * Prepare options to set to storage\n     * @param options\n     * @returns CacheOptionsInterface\n     */\n    private _toStorageOptions(options: CacheOptionsInterface): CacheOptionsInterface {\n        var storageOptions: CacheOptionsInterface = {};\n        storageOptions.expires = options.expires ? options.expires :\n            (options.maxAge ? Date.now() + (options.maxAge * 1000) : this._defaultOptions.expires);\n        storageOptions.maxAge = options.maxAge ? options.maxAge : this._defaultOptions.maxAge;\n        return storageOptions;\n    }\n\n    /**\n     * Validate storage value\n     * @param value\n     * @returns boolean\n     */\n    private _validateStorageValue(value: StorageValueInterface) {\n        return !!value.options.expires && value.options.expires > Date.now();\n    }\n\n    /**\n     * check if its system cache key\n     * @param key\n     * returns boolean\n     */\n    private _isSystemKey(key: string) {\n        return [this._tagsStorageKey()].indexOf(key) !== -1;\n    }\n\n    /**\n     * Save tag to list of tags\n     * @param tag\n     * @param key\n     */\n    private _saveTag(tag: string, key: string) {\n        let tags = this.get(this._tagsStorageKey()) || {};\n        if (!tags[tag]) {\n            tags[tag] = [key];\n        } else {\n            tags[tag].push(key);\n        }\n        this.set(this._tagsStorageKey(), tags);\n    }\n\n    /**\n     * Get global cache prefix\n     * returns {string}\n     * private\n     */\n    private _getCachePrefix() {\n        return this._prefix;\n    }\n\n    private _tagsStorageKey() {\n        return 'CacheService_tags';\n    }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.CacheStorageAbstract"],"mappings":"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"}