diff --git a/package.json b/package.json index 1b9a600..fbeb141 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,10 @@ "name": "Paritosh Patel", "email": "13868399+paritosh64ce@users.noreply.github.com", "url": "https://simplyfyingtechblog.wordpress.com" + }, + { + "name": "Alexandre Moore", + "url": "https://github.com/alexandremoore" } ], "repository": { diff --git a/src/services/cache.service.ts b/src/services/cache.service.ts index f8c1e30..64595ff 100644 --- a/src/services/cache.service.ts +++ b/src/services/cache.service.ts @@ -14,6 +14,12 @@ const DEFAULT_ENABLED_STORAGE = CacheStoragesEnum.MEMORY; @Injectable() export class CacheService { + /** + * The number of data items stored in the storage + */ + public get length(): number { + return this._storage ? this._storage.length : 0 ; + } /** * Default cache options @@ -147,6 +153,14 @@ export class CacheService { this._prefix = prefix; } + /** + * Get the name of the nth key in the storage + * @param index + */ + public key(index: number): string | null { + return this._storage.key(index); + } + /** * Validate cache storage */ diff --git a/src/services/storage/cache-storage-abstract.service.ts b/src/services/storage/cache-storage-abstract.service.ts index d7b4d31..72f5f61 100644 --- a/src/services/storage/cache-storage-abstract.service.ts +++ b/src/services/storage/cache-storage-abstract.service.ts @@ -5,6 +5,10 @@ import {StorageValueInterface} from '../../interfaces/storage-value.interface'; * Abstract cache storage */ export abstract class CacheStorageAbstract { + /** + * The number of data items stored in the storage + */ + public abstract readonly length: number; /** * Get item from storage @@ -40,4 +44,10 @@ export abstract class CacheStorageAbstract { */ public abstract isEnabled(): boolean; + /** + * Get the name of the nth key in the storage + * @param index + */ + public abstract key(index: number): string | null; + } diff --git a/src/services/storage/local-storage/cache-local-storage.service.ts b/src/services/storage/local-storage/cache-local-storage.service.ts index d19f34f..5e0fa4c 100644 --- a/src/services/storage/local-storage/cache-local-storage.service.ts +++ b/src/services/storage/local-storage/cache-local-storage.service.ts @@ -8,6 +8,9 @@ import {StorageValueInterface} from '../../../interfaces/storage-value.interface */ @Injectable() export class CacheLocalStorage extends CacheStorageAbstract { + public get length(): number { + return localStorage ? localStorage.length : 0 ; + } public getItem(key: string) { const value = localStorage.getItem(key); @@ -44,4 +47,8 @@ export class CacheLocalStorage extends CacheStorageAbstract { return false; } } + + public key(index: number): string | null { + return localStorage.key(index); + } } diff --git a/src/services/storage/memory/cache-memory.service.ts b/src/services/storage/memory/cache-memory.service.ts index f3be614..83f79a1 100644 --- a/src/services/storage/memory/cache-memory.service.ts +++ b/src/services/storage/memory/cache-memory.service.ts @@ -11,6 +11,10 @@ export class CacheMemoryStorage extends CacheStorageAbstract { private _data: {[key: string]: any} = {}; + public get length(): number { + return (this._data && Object.keys(this._data)) ? Object.keys(this._data).length : 0 ; + } + public getItem(key: string) { return this._data[key] ? this._data[key] : null; } @@ -35,4 +39,8 @@ export class CacheMemoryStorage extends CacheStorageAbstract { public isEnabled() { return true; } + + public key(index: number): string | null { + return (this._data && Object.keys(this._data)) ? Object.keys(this._data)[index] : null; + } } diff --git a/src/services/storage/session-storage/cache-session-storage.service.ts b/src/services/storage/session-storage/cache-session-storage.service.ts index aa6c430..84f1a0c 100644 --- a/src/services/storage/session-storage/cache-session-storage.service.ts +++ b/src/services/storage/session-storage/cache-session-storage.service.ts @@ -8,6 +8,9 @@ import {StorageValueInterface} from '../../../interfaces/storage-value.interface */ @Injectable() export class CacheSessionStorage extends CacheStorageAbstract { + public get length(): number { + return sessionStorage ? sessionStorage.length : 0 ; + } public getItem(key: string) { let value = sessionStorage.getItem(key); @@ -44,4 +47,8 @@ export class CacheSessionStorage extends CacheStorageAbstract { return false; } } + + public key(index: number): string | null { + return sessionStorage.key(index); + } }