diff --git a/src/app/modules/storage/storage.provider.spec.ts b/src/app/modules/storage/storage.provider.spec.ts index 27da31d5..1ebe6268 100644 --- a/src/app/modules/storage/storage.provider.spec.ts +++ b/src/app/modules/storage/storage.provider.spec.ts @@ -153,4 +153,11 @@ describe('StorageProvider', () => { expect(await storageProvider.has('foo')).toBeTruthy(); expect(await storageProvider.has('something-else')).toBeFalsy(); }); + + it('should allow search by regex', async () => { + await storageProvider.putMultiple(sampleEntries); + const found: Map = await storageProvider.search(/bar/); + expect(Array.from(found.keys()).sort()).toEqual(['bar', 'foobar']); + expect(Array.from(found.values())).toEqual([{foo: 'BarFoo'}, 123]); + }); }); diff --git a/src/app/modules/storage/storage.provider.ts b/src/app/modules/storage/storage.provider.ts index 832f0f00..d7a84350 100644 --- a/src/app/modules/storage/storage.provider.ts +++ b/src/app/modules/storage/storage.provider.ts @@ -53,6 +53,21 @@ export class StorageProvider { return entry; } + /** + * Gets values from the storage using the provided regex + * + * @param pattern Regular expression to test existing storage keys with + */ + async search(pattern: RegExp): Promise> { + const map: Map = new Map(); + await this.storage.forEach((value, key) => { + if (pattern.test(key)) { + map.set(key, value); + } + }); + return map; + } + /** * Deletes a storage entry using the key used to save it *