ngforage
Version:
localForage bindings for Angular
167 lines • 16.1 kB
JavaScript
import { Inject, Injectable, Optional } from '@angular/core';
import 'localforage';
import { localForage as lf } from '../imports/localforage';
import { Driver } from '../misc/driver.enum';
import { DEFAULT_CONFIG } from '../misc/injection-tokens';
import * as i0 from "@angular/core";
/** @internal */
const $defaultConfig = Symbol('Default Config');
/**
* Global/default configuration
*/
export class NgForageConfig {
/** @internal */
[$defaultConfig];
constructor(conf) {
this[$defaultConfig] = {
cacheTime: 300000,
description: '',
driver: [Driver.INDEXED_DB, Driver.WEB_SQL, Driver.LOCAL_STORAGE],
name: 'ngForage',
size: 4980736,
storeName: 'ng_forage',
version: 1
};
if (conf) {
this.configure(conf);
}
}
/**
* Cache time in milliseconds
* @default 300000
*/
get cacheTime() {
return this[$defaultConfig].cacheTime;
}
set cacheTime(t) {
this[$defaultConfig].cacheTime = t;
}
/**
* Get the compiled configuration
*/
get config() {
return {
cacheTime: this.cacheTime,
description: this.description,
driver: this.driver,
name: this.name,
size: this.size,
storeName: this.storeName,
version: this.version
};
}
/**
* A description of the database, essentially for developer usage.
* @default
*/
get description() {
return this[$defaultConfig].description;
}
set description(v) {
this[$defaultConfig].description = v;
}
/**
* The preferred driver(s) to use.
*/
get driver() {
const d = this[$defaultConfig].driver;
if (!d) {
return [];
}
else if (Array.isArray(d)) {
return d.slice();
}
return d;
}
set driver(v) {
this[$defaultConfig].driver = v;
}
/**
* The name of the database. May appear during storage limit prompts. Useful to use the name of your app here.
* In localStorage, this is used as a key prefix for all keys stored in localStorage.
* @default ngForage
*/
get name() {
return this[$defaultConfig].name;
}
set name(v) {
this[$defaultConfig].name = v;
}
/**
* The size of the database in bytes. Used only in WebSQL for now.
* @default 4980736
*/
get size() {
return this[$defaultConfig].size;
}
set size(v) {
this[$defaultConfig].size = v;
}
/**
* The name of the datastore.
* In IndexedDB this is the dataStore,
* in WebSQL this is the name of the key/value table in the database.
* Must be alphanumeric, with underscores.
* Any non-alphanumeric characters will be converted to underscores.
* @default ng_forage
*/
get storeName() {
return this[$defaultConfig].storeName;
}
set storeName(v) {
this[$defaultConfig].storeName = v;
}
/**
* The version of your database. May be used for upgrades in the future; currently unused.
* @default 1.0
*/
get version() {
return this[$defaultConfig].version;
}
set version(v) {
this[$defaultConfig].version = v;
}
/**
* Bulk-set configuration options
* @param opts The configuration
*/
configure(opts) {
const resolved = { ...opts };
if (Array.isArray(resolved?.driver)) {
resolved.driver = resolved.driver.slice();
}
Object.assign(this[$defaultConfig], resolved);
return this;
}
/**
* Define a driver
*
* You’ll want to make sure you accept a callback argument and that you pass the same arguments to callbacks as the
* default drivers do. You’ll also want to resolve or reject promises.
* Check any of the {@link https://github.com/mozilla/localForage/tree/master/src/drivers default drivers}
* for an idea of how to implement your own, custom driver.
* @param spec Driver spec
*/
async defineDriver(spec) {
return await lf.defineDriver(spec);
}
/** @internal */
toJSON() {
return this.config;
}
toString() {
return JSON.stringify(this.toJSON());
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgForageConfig, deps: [{ token: DEFAULT_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgForageConfig, providedIn: 'root' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgForageConfig, decorators: [{
type: Injectable,
args: [{ providedIn: 'root' }]
}], ctorParameters: () => [{ type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [DEFAULT_CONFIG]
}] }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZm9yYWdlLWNvbmZpZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdmb3JhZ2Uvc3JjL2xpYi9jb25maWcvbmctZm9yYWdlLWNvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUMsV0FBVyxJQUFJLEVBQUUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMzQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7O0FBS3hELGdCQUFnQjtBQUNoQixNQUFNLGNBQWMsR0FBa0IsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFFL0Q7O0dBRUc7QUFFSCxNQUFNLE9BQU8sY0FBYztJQUV6QixnQkFBZ0I7SUFDQyxDQUFDLGNBQWMsQ0FBQyxDQUFrQjtJQUVuRCxZQUF1RCxJQUFxQjtRQUMxRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUc7WUFDckIsU0FBUyxFQUFFLE1BQU07WUFDakIsV0FBVyxFQUFFLEVBQUU7WUFDZixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUNqRSxJQUFJLEVBQUUsVUFBVTtZQUNoQixJQUFJLEVBQUUsT0FBTztZQUNiLFNBQVMsRUFBRSxXQUFXO1lBQ3RCLE9BQU8sRUFBRSxDQUFDO1NBQ1gsQ0FBQztRQUNGLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0QjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLFNBQVM7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LENBQUM7U0FDM0M7UUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUU5QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBdUI7UUFDL0MsT0FBTyxNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGdCQUFnQjtJQUNULE1BQU07UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVNLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQzt1R0F0S1UsY0FBYyxrQkFLYyxjQUFjOzJHQUwxQyxjQUFjLGNBREYsTUFBTTs7MkZBQ2xCLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzswQkFNVixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICdsb2NhbGZvcmFnZSc7XG5pbXBvcnQge2xvY2FsRm9yYWdlIGFzIGxmfSBmcm9tICcuLi9pbXBvcnRzL2xvY2FsZm9yYWdlJztcbmltcG9ydCB0eXBlIHtEcml2ZXJUeXBlfSBmcm9tICcuLi9taXNjL2RyaXZlci10eXBlLnR5cGUnO1xuaW1wb3J0IHtEcml2ZXJ9IGZyb20gJy4uL21pc2MvZHJpdmVyLmVudW0nO1xuaW1wb3J0IHtERUZBVUxUX0NPTkZJR30gZnJvbSAnLi4vbWlzYy9pbmplY3Rpb24tdG9rZW5zJztcbmltcG9ydCB0eXBlIHtCYXNlQ29uZmlndXJhYmxlfSBmcm9tICcuL2Jhc2UtY29uZmlndXJhYmxlJztcbmltcG9ydCB0eXBlIHtDYWNoZUNvbmZpZ3VyYWJsZX0gZnJvbSAnLi9jYWNoZS1jb25maWd1cmFibGUnO1xuaW1wb3J0IHR5cGUge05nRm9yYWdlT3B0aW9uc30gZnJvbSAnLi9uZy1mb3JhZ2Utb3B0aW9ucyc7XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmNvbnN0ICRkZWZhdWx0Q29uZmlnOiB1bmlxdWUgc3ltYm9sID0gU3ltYm9sKCdEZWZhdWx0IENvbmZpZycpO1xuXG4vKipcbiAqIEdsb2JhbC9kZWZhdWx0IGNvbmZpZ3VyYXRpb25cbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTmdGb3JhZ2VDb25maWcgaW1wbGVtZW50cyBCYXNlQ29uZmlndXJhYmxlLCBDYWNoZUNvbmZpZ3VyYWJsZSB7XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IFskZGVmYXVsdENvbmZpZ106IE5nRm9yYWdlT3B0aW9ucztcblxuICBwdWJsaWMgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChERUZBVUxUX0NPTkZJRykgY29uZjogTmdGb3JhZ2VPcHRpb25zKSB7XG4gICAgdGhpc1skZGVmYXVsdENvbmZpZ10gPSB7XG4gICAgICBjYWNoZVRpbWU6IDMwMDAwMCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGRyaXZlcjogW0RyaXZlci5JTkRFWEVEX0RCLCBEcml2ZXIuV0VCX1NRTCwgRHJpdmVyLkxPQ0FMX1NUT1JBR0VdLFxuICAgICAgbmFtZTogJ25nRm9yYWdlJyxcbiAgICAgIHNpemU6IDQ5ODA3MzYsXG4gICAgICBzdG9yZU5hbWU6ICduZ19mb3JhZ2UnLFxuICAgICAgdmVyc2lvbjogMVxuICAgIH07XG4gICAgaWYgKGNvbmYpIHtcbiAgICAgIHRoaXMuY29uZmlndXJlKGNvbmYpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWNoZSB0aW1lIGluIG1pbGxpc2Vjb25kc1xuICAgKiBAZGVmYXVsdCAzMDAwMDBcbiAgICovXG4gIHB1YmxpYyBnZXQgY2FjaGVUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXNbJGRlZmF1bHRDb25maWddLmNhY2hlVGltZSE7XG4gIH1cblxuICBwdWJsaWMgc2V0IGNhY2hlVGltZSh0OiBudW1iZXIpIHtcbiAgICB0aGlzWyRkZWZhdWx0Q29uZmlnXS5jYWNoZVRpbWUgPSB0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29tcGlsZWQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHVibGljIGdldCBjb25maWcoKTogTmdGb3JhZ2VPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2FjaGVUaW1lOiB0aGlzLmNhY2hlVGltZSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgZHJpdmVyOiB0aGlzLmRyaXZlcixcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgIHN0b3JlTmFtZTogdGhpcy5zdG9yZU5hbWUsXG4gICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb25cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIGRhdGFiYXNlLCBlc3NlbnRpYWxseSBmb3IgZGV2ZWxvcGVyIHVzYWdlLlxuICAgKiBAZGVmYXVsdFxuICAgKi9cbiAgcHVibGljIGdldCBkZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzWyRkZWZhdWx0Q29uZmlnXS5kZXNjcmlwdGlvbiE7XG4gIH1cblxuICBwdWJsaWMgc2V0IGRlc2NyaXB0aW9uKHY6IHN0cmluZykge1xuICAgIHRoaXNbJGRlZmF1bHRDb25maWddLmRlc2NyaXB0aW9uID0gdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcHJlZmVycmVkIGRyaXZlcihzKSB0byB1c2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRyaXZlcigpOiBEcml2ZXJUeXBlIHwgRHJpdmVyVHlwZVtdIHtcbiAgICBjb25zdCBkID0gdGhpc1skZGVmYXVsdENvbmZpZ10uZHJpdmVyO1xuICAgIGlmICghZCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkKSkge1xuICAgICAgcmV0dXJuIGQuc2xpY2UoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZHJpdmVyKHY6IERyaXZlclR5cGUgfCBEcml2ZXJUeXBlW10pIHtcbiAgICB0aGlzWyRkZWZhdWx0Q29uZmlnXS5kcml2ZXIgPSB2O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZS4gTWF5IGFwcGVhciBkdXJpbmcgc3RvcmFnZSBsaW1pdCBwcm9tcHRzLiBVc2VmdWwgdG8gdXNlIHRoZSBuYW1lIG9mIHlvdXIgYXBwIGhlcmUuXG4gICAqIEluIGxvY2FsU3RvcmFnZSwgdGhpcyBpcyB1c2VkIGFzIGEga2V5IHByZWZpeCBmb3IgYWxsIGtleXMgc3RvcmVkIGluIGxvY2FsU3RvcmFnZS5cbiAgICogQGRlZmF1bHQgbmdGb3JhZ2VcbiAgICovXG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzWyRkZWZhdWx0Q29uZmlnXS5uYW1lITtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgbmFtZSh2OiBzdHJpbmcpIHtcbiAgICB0aGlzWyRkZWZhdWx0Q29uZmlnXS5uYW1lID0gdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgZGF0YWJhc2UgaW4gYnl0ZXMuIFVzZWQgb25seSBpbiBXZWJTUUwgZm9yIG5vdy5cbiAgICogQGRlZmF1bHQgNDk4MDczNlxuICAgKi9cbiAgcHVibGljIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXNbJGRlZmF1bHRDb25maWddLnNpemUhO1xuICB9XG5cbiAgcHVibGljIHNldCBzaXplKHY6IG51bWJlcikge1xuICAgIHRoaXNbJGRlZmF1bHRDb25maWddLnNpemUgPSB2O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkYXRhc3RvcmUuXG4gICAqIEluIEluZGV4ZWREQiB0aGlzIGlzIHRoZSBkYXRhU3RvcmUsXG4gICAqIGluIFdlYlNRTCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBrZXkvdmFsdWUgdGFibGUgaW4gdGhlIGRhdGFiYXNlLlxuICAgKiBNdXN0IGJlIGFscGhhbnVtZXJpYywgd2l0aCB1bmRlcnNjb3Jlcy5cbiAgICogQW55IG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyB3aWxsIGJlIGNvbnZlcnRlZCB0byB1bmRlcnNjb3Jlcy5cbiAgICogQGRlZmF1bHQgbmdfZm9yYWdlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0b3JlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzWyRkZWZhdWx0Q29uZmlnXS5zdG9yZU5hbWUhO1xuICB9XG5cbiAgcHVibGljIHNldCBzdG9yZU5hbWUodjogc3RyaW5nKSB7XG4gICAgdGhpc1skZGVmYXVsdENvbmZpZ10uc3RvcmVOYW1lID0gdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB5b3VyIGRhdGFiYXNlLiBNYXkgYmUgdXNlZCBmb3IgdXBncmFkZXMgaW4gdGhlIGZ1dHVyZTsgY3VycmVudGx5IHVudXNlZC5cbiAgICogQGRlZmF1bHQgMS4wXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZlcnNpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpc1skZGVmYXVsdENvbmZpZ10udmVyc2lvbiE7XG4gIH1cblxuICBwdWJsaWMgc2V0IHZlcnNpb24odjogbnVtYmVyKSB7XG4gICAgdGhpc1skZGVmYXVsdENvbmZpZ10udmVyc2lvbiA9IHY7XG4gIH1cblxuICAvKipcbiAgICogQnVsay1zZXQgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqIEBwYXJhbSBvcHRzIFRoZSBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwdWJsaWMgY29uZmlndXJlKG9wdHM6IE5nRm9yYWdlT3B0aW9ucyk6IHRoaXMge1xuICAgIGNvbnN0IHJlc29sdmVkID0gey4uLm9wdHN9O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzb2x2ZWQ/LmRyaXZlcikpIHtcbiAgICAgIHJlc29sdmVkLmRyaXZlciA9IHJlc29sdmVkLmRyaXZlci5zbGljZSgpO1xuICAgIH1cblxuICAgIE9iamVjdC5hc3NpZ24odGhpc1skZGVmYXVsdENvbmZpZ10sIHJlc29sdmVkKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBhIGRyaXZlclxuICAgKlxuICAgKiBZb3XigJlsbCB3YW50IHRvIG1ha2Ugc3VyZSB5b3UgYWNjZXB0IGEgY2FsbGJhY2sgYXJndW1lbnQgYW5kIHRoYXQgeW91IHBhc3MgdGhlIHNhbWUgYXJndW1lbnRzIHRvIGNhbGxiYWNrcyBhcyB0aGVcbiAgICogZGVmYXVsdCBkcml2ZXJzIGRvLiBZb3XigJlsbCBhbHNvIHdhbnQgdG8gcmVzb2x2ZSBvciByZWplY3QgcHJvbWlzZXMuXG4gICAqIENoZWNrIGFueSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2xvY2FsRm9yYWdlL3RyZWUvbWFzdGVyL3NyYy9kcml2ZXJzIGRlZmF1bHQgZHJpdmVyc31cbiAgICogZm9yIGFuIGlkZWEgb2YgaG93IHRvIGltcGxlbWVudCB5b3VyIG93biwgY3VzdG9tIGRyaXZlci5cbiAgICogQHBhcmFtIHNwZWMgRHJpdmVyIHNwZWNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZWZpbmVEcml2ZXIoc3BlYzogTG9jYWxGb3JhZ2VEcml2ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgbGYuZGVmaW5lRHJpdmVyKHNwZWMpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgdG9KU09OKCk6IE5nRm9yYWdlT3B0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnO1xuICB9XG5cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpO1xuICB9XG59XG4iXX0=