@ngx-pwa/local-storage
Version:
Efficient local storage module for Angular: simple API based on native localStorage API, but internally stored via the asynchronous IndexedDB API for performance, and wrapped in RxJS observables to be homogeneous with other Angular modules.
87 lines • 12.3 kB
JavaScript
import { Injectable } from '@angular/core';
import { mapTo, map } from 'rxjs/operators';
import { StorageMap } from './storage-map.service';
import * as i0 from "@angular/core";
import * as i1 from "./storage-map.service";
export class LocalStorage {
/* Use the `StorageMap` service to avoid code duplication */
constructor(storageMap) {
this.storageMap = storageMap;
}
/**
* Number of items in storage wrapped in an `Observable`
*
* @example
* this.localStorage.length.subscribe((length) => {
* console.log(length);
* });
*/
get length() {
return this.storageMap.size;
}
getItem(key, schema) {
if (schema) {
/* Backward compatibility with version <= 7 */
const schemaFinal = ('schema' in schema) ? schema.schema : schema;
return this.storageMap.get(key, schemaFinal).pipe(
/* Transform `undefined` into `null` to align with `localStorage` API */
map((value) => (value !== undefined) ? value : null));
}
else {
return this.storageMap.get(key).pipe(
/* Transform `undefined` into `null` to align with `localStorage` API */
map((value) => (value !== undefined) ? value : null));
}
}
/**
* Set an item in storage.
* Note that setting `null` or `undefined` will remove the item to avoid some browsers issues.
* @param key The item's key
* @param data The item's value
* @param schema Optional JSON schema to validate the data
* @returns A RxJS `Observable` to wait the end of the operation
*
* @example
* this.localStorage.set('key', 'value').subscribe(() => {});
*/
setItem(key, data, schema) {
return this.storageMap.set(key, data, schema).pipe(
/* Transform `undefined` into `true` for backward compatibility with v7 */
mapTo(true));
}
/**
* Delete an item in storage
* @param key The item's key
* @returns A RxJS `Observable` to wait the end of the operation
*
* @example
* this.localStorage.delete('key').subscribe(() => {});
*/
removeItem(key) {
return this.storageMap.delete(key).pipe(
/* Transform `undefined` into `true` for backward compatibility with v7 */
mapTo(true));
}
/**
* Delete all items in storage
* @returns A RxJS `Observable` to wait the end of the operation
*
* @example
* this.localStorage.clear().subscribe(() => {});
*/
clear() {
return this.storageMap.clear().pipe(
/* Transform `undefined` into `true` for backward compatibility with v7 */
mapTo(true));
}
}
LocalStorage.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalStorage_Factory() { return new LocalStorage(i0.ɵɵinject(i1.StorageMap)); }, token: LocalStorage, providedIn: "root" });
LocalStorage.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
LocalStorage.ctorParameters = () => [
{ type: StorageMap }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXB3YS9sb2NhbC1zdG9yYWdlL3NyYy9saWIvc3RvcmFnZXMvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU01QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7OztBQUtuRCxNQUFNLE9BQU8sWUFBWTtJQWdCdkIsNERBQTREO0lBQzVELFlBQXNCLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7SUFBRyxDQUFDO0lBZmhEOzs7Ozs7O09BT0c7SUFDSCxJQUFJLE1BQU07UUFFUixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0lBRTlCLENBQUM7SUFrREQsT0FBTyxDQUFjLEdBQVcsRUFBRSxNQUF3RDtRQUV4RixJQUFJLE1BQU0sRUFBRTtZQUVWLDhDQUE4QztZQUM5QyxNQUFNLFdBQVcsR0FBZSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBRTlFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUksR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUk7WUFDbEQsd0VBQXdFO1lBQ3hFLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQ3JELENBQUM7U0FFSDthQUFNO1lBRUwsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJO1lBQ2xDLHdFQUF3RTtZQUN4RSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUNyRCxDQUFDO1NBRUg7SUFFSCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILE9BQU8sQ0FBQyxHQUFXLEVBQUUsSUFBYSxFQUFFLE1BQW1CO1FBRXJELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJO1FBQ2hELDBFQUEwRTtRQUMxRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQ1osQ0FBQztJQUVKLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsVUFBVSxDQUFDLEdBQVc7UUFFcEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJO1FBQ3JDLDBFQUEwRTtRQUMxRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQ1osQ0FBQztJQUVKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLO1FBRUgsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUk7UUFDakMsMEVBQTBFO1FBQzFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FDWixDQUFDO0lBRUosQ0FBQzs7OztZQTdJRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQUpRLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXBUbywgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICBKU09OU2NoZW1hLCBKU09OU2NoZW1hQm9vbGVhbiwgSlNPTlNjaGVtYUludGVnZXIsXG4gIEpTT05TY2hlbWFOdW1iZXIsIEpTT05TY2hlbWFTdHJpbmcsIEpTT05TY2hlbWFBcnJheU9mXG59IGZyb20gJy4uL3ZhbGlkYXRpb24vanNvbi1zY2hlbWEnO1xuaW1wb3J0IHsgU3RvcmFnZU1hcCB9IGZyb20gJy4vc3RvcmFnZS1tYXAuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIExvY2FsU3RvcmFnZSB7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBpdGVtcyBpbiBzdG9yYWdlIHdyYXBwZWQgaW4gYW4gYE9ic2VydmFibGVgXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHRoaXMubG9jYWxTdG9yYWdlLmxlbmd0aC5zdWJzY3JpYmUoKGxlbmd0aCkgPT4ge1xuICAgKiAgIGNvbnNvbGUubG9nKGxlbmd0aCk7XG4gICAqIH0pO1xuICAgKi9cbiAgZ2V0IGxlbmd0aCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuXG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZU1hcC5zaXplO1xuXG4gIH1cblxuICAvKiBVc2UgdGhlIGBTdG9yYWdlTWFwYCBzZXJ2aWNlIHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb24gKi9cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHN0b3JhZ2VNYXA6IFN0b3JhZ2VNYXApIHt9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBpdGVtIHZhbHVlIGluIHN0b3JhZ2UuXG4gICAqIFRoZSBzaWduYXR1cmUgaGFzIG1hbnkgb3ZlcmxvYWRzIGR1ZSB0byB2YWxpZGF0aW9uLCAqKnBsZWFzZSByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbi4qKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFzdGVyL2RvY3MvVkFMSURBVElPTi5tZH1cbiAgICogQHBhcmFtIGtleSBUaGUgaXRlbSdzIGtleVxuICAgKiBAcGFyYW0gc2NoZW1hIE9wdGlvbmFsIEpTT04gc2NoZW1hIHRvIHZhbGlkYXRlIHRoZSBkYXRhLlxuICAgKiAqKk5vdGUgeW91IG11c3QgcGFzcyB0aGUgc2NoZW1hIGRpcmVjdGx5IGFzIHRoZSBzZWNvbmQgYXJndW1lbnQuKipcbiAgICogKipQYXNzaW5nIHRoZSBzY2hlbWEgaW4gYW4gb2JqZWN0IGB7IHNjaGVtYSB9YCBpcyBkZXByZWNhdGVkIGFuZCBvbmx5IGhlcmUqKlxuICAgKiAqKmZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OiBpdCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4qKlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSdzIHZhbHVlIGlmIHRoZSBrZXkgZXhpc3RzLCBgbnVsbGAgb3RoZXJ3aXNlLCB3cmFwcGVkIGluIGEgUnhKUyBgT2JzZXJ2YWJsZWBcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0KCdrZXknLCB7IHR5cGU6ICdzdHJpbmcnIH0pLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAqICAgcmVzdWx0OyAvLyBzdHJpbmcgb3IgbnVsbFxuICAgKiB9KTtcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogaW50ZXJmYWNlIFVzZXIge1xuICAgKiAgIGZpcnN0TmFtZTogc3RyaW5nO1xuICAgKiAgIGxhc3ROYW1lPzogc3RyaW5nO1xuICAgKiB9XG4gICAqXG4gICAqIGNvbnN0IHNjaGVtYSA9IHtcbiAgICogICB0eXBlOiAnb2JqZWN0JyxcbiAgICogICBwcm9wZXJ0aWVzOiB7XG4gICAqICAgICBmaXJzdE5hbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICogICAgIGxhc3ROYW1lOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAqICAgfSxcbiAgICogICByZXF1aXJlZDogWydmaXJzdE5hbWUnXVxuICAgKiB9O1xuICAgKlxuICAgKiB0aGlzLmxvY2FsU3RvcmFnZS5nZXQ8VXNlcj4oJ3VzZXInLCBzY2hlbWEpLnN1YnNjcmliZSgodXNlcikgPT4ge1xuICAgKiAgIGlmICh1c2VyKSB7XG4gICAqICAgICB1c2VyLmZpcnN0TmFtZTtcbiAgICogICB9XG4gICAqIH0pO1xuICAgKi9cbiAgZ2V0SXRlbTxUID0gc3RyaW5nPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hU3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPjtcbiAgZ2V0SXRlbTxUID0gbnVtYmVyPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hSW50ZWdlcsKgfCBKU09OU2NoZW1hTnVtYmVyKTogT2JzZXJ2YWJsZTxudW1iZXIgfCBudWxsPjtcbiAgZ2V0SXRlbTxUID0gYm9vbGVhbj4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUJvb2xlYW4pOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBudWxsPjtcbiAgZ2V0SXRlbTxUID0gc3RyaW5nW10+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFBcnJheU9mPEpTT05TY2hlbWFTdHJpbmc+KTogT2JzZXJ2YWJsZTxzdHJpbmdbXSB8IG51bGw+O1xuICBnZXRJdGVtPFQgPSBudW1iZXJbXT4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUFycmF5T2Y8SlNPTlNjaGVtYUludGVnZXLCoHwgSlNPTlNjaGVtYU51bWJlcj4pOiBPYnNlcnZhYmxlPG51bWJlcltdIHwgbnVsbD47XG4gIGdldEl0ZW08VCA9IGJvb2xlYW5bXT4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUFycmF5T2Y8SlNPTlNjaGVtYUJvb2xlYW4+KTogT2JzZXJ2YWJsZTxib29sZWFuW10gfCBudWxsPjtcbiAgZ2V0SXRlbTxUID0gdW5rbm93bj4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYSB8IHsgc2NoZW1hOiBKU09OU2NoZW1hIH0pOiBPYnNlcnZhYmxlPFQgfCBudWxsPjtcbiAgZ2V0SXRlbTxUID0gdW5rbm93bj4oa2V5OiBzdHJpbmcsIHNjaGVtYT86IEpTT05TY2hlbWEpOiBPYnNlcnZhYmxlPHVua25vd24+O1xuICBnZXRJdGVtPFQgPSB1bmtub3duPihrZXk6IHN0cmluZywgc2NoZW1hPzogSlNPTlNjaGVtYSB8IHsgc2NoZW1hOiBKU09OU2NoZW1hIH0gfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcblxuICAgIGlmIChzY2hlbWEpIHtcblxuICAgICAgLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb24gPD0gNyAqL1xuICAgICAgY29uc3Qgc2NoZW1hRmluYWw6IEpTT05TY2hlbWEgPSAoJ3NjaGVtYScgaW4gc2NoZW1hKSA/IHNjaGVtYS5zY2hlbWEgOiBzY2hlbWE7XG5cbiAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2VNYXAuZ2V0PFQ+KGtleSwgc2NoZW1hRmluYWwpLnBpcGUoXG4gICAgICAgIC8qIFRyYW5zZm9ybSBgdW5kZWZpbmVkYCBpbnRvIGBudWxsYCB0byBhbGlnbiB3aXRoIGBsb2NhbFN0b3JhZ2VgIEFQSSAqL1xuICAgICAgICBtYXAoKHZhbHVlKSA9PiAodmFsdWUgIT09IHVuZGVmaW5lZCkgPyB2YWx1ZSA6IG51bGwpLFxuICAgICAgKTtcblxuICAgIH0gZWxzZSB7XG5cbiAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2VNYXAuZ2V0KGtleSkucGlwZShcbiAgICAgICAgLyogVHJhbnNmb3JtIGB1bmRlZmluZWRgIGludG8gYG51bGxgIHRvIGFsaWduIHdpdGggYGxvY2FsU3RvcmFnZWAgQVBJICovXG4gICAgICAgIG1hcCgodmFsdWUpID0+ICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSA/IHZhbHVlIDogbnVsbCksXG4gICAgICApO1xuXG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogU2V0IGFuIGl0ZW0gaW4gc3RvcmFnZS5cbiAgICogTm90ZSB0aGF0IHNldHRpbmcgYG51bGxgIG9yIGB1bmRlZmluZWRgIHdpbGwgcmVtb3ZlIHRoZSBpdGVtIHRvIGF2b2lkIHNvbWUgYnJvd3NlcnMgaXNzdWVzLlxuICAgKiBAcGFyYW0ga2V5IFRoZSBpdGVtJ3Mga2V5XG4gICAqIEBwYXJhbSBkYXRhIFRoZSBpdGVtJ3MgdmFsdWVcbiAgICogQHBhcmFtIHNjaGVtYSBPcHRpb25hbCBKU09OIHNjaGVtYSB0byB2YWxpZGF0ZSB0aGUgZGF0YVxuICAgKiBAcmV0dXJucyBBIFJ4SlMgYE9ic2VydmFibGVgIHRvIHdhaXQgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHRoaXMubG9jYWxTdG9yYWdlLnNldCgna2V5JywgJ3ZhbHVlJykuc3Vic2NyaWJlKCgpID0+IHt9KTtcbiAgICovXG4gIHNldEl0ZW0oa2V5OiBzdHJpbmcsIGRhdGE6IHVua25vd24sIHNjaGVtYT86IEpTT05TY2hlbWEpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcblxuICAgIHJldHVybiB0aGlzLnN0b3JhZ2VNYXAuc2V0KGtleSwgZGF0YSwgc2NoZW1hKS5waXBlKFxuICAgICAgLyogVHJhbnNmb3JtIGB1bmRlZmluZWRgIGludG8gYHRydWVgIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggdjcgKi9cbiAgICAgIG1hcFRvKHRydWUpLFxuICAgICk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYW4gaXRlbSBpbiBzdG9yYWdlXG4gICAqIEBwYXJhbSBrZXkgVGhlIGl0ZW0ncyBrZXlcbiAgICogQHJldHVybnMgQSBSeEpTIGBPYnNlcnZhYmxlYCB0byB3YWl0IHRoZSBlbmQgb2YgdGhlIG9wZXJhdGlvblxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB0aGlzLmxvY2FsU3RvcmFnZS5kZWxldGUoJ2tleScpLnN1YnNjcmliZSgoKSA9PiB7fSk7XG4gICAqL1xuICByZW1vdmVJdGVtKGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG5cbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlTWFwLmRlbGV0ZShrZXkpLnBpcGUoXG4gICAgICAvKiBUcmFuc2Zvcm0gYHVuZGVmaW5lZGAgaW50byBgdHJ1ZWAgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCB2NyAqL1xuICAgICAgbWFwVG8odHJ1ZSksXG4gICAgKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhbGwgaXRlbXMgaW4gc3RvcmFnZVxuICAgKiBAcmV0dXJucyBBIFJ4SlMgYE9ic2VydmFibGVgIHRvIHdhaXQgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHRoaXMubG9jYWxTdG9yYWdlLmNsZWFyKCkuc3Vic2NyaWJlKCgpID0+IHt9KTtcbiAgICovXG4gIGNsZWFyKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuXG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZU1hcC5jbGVhcigpLnBpcGUoXG4gICAgICAvKiBUcmFuc2Zvcm0gYHVuZGVmaW5lZGAgaW50byBgdHJ1ZWAgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCB2NyAqL1xuICAgICAgbWFwVG8odHJ1ZSksXG4gICAgKTtcblxuICB9XG5cbn1cbiJdfQ==