all files / class/ browser-database.ts

100% Statements 28/28
100% Branches 6/6
100% Functions 10/10
100% Lines 24/24
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113                           23×       23×           23× 23× 22×                                                                                                                                        
(function(global){global.wrappers['/home/dev/Dropbox/www/browser-database/src/class/browser-database.ts']=[function(require,module,exports,__dirname,__filename){ "use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("./index");
/*
 * Main library class
 */
class BrowserDatabase {
    /*
     * Constructor
     *
     * @param options Options for storage
     */
    constructor(options = {}) {
        /*
         * Database change subscriptions
         */
        this.subscriptions = [];
        /*
         * Storage types
         */
        this.storages = {
            localStorage: index_1.LocalStorage
        };
        /*
         * Storage reference
         */
        this.storage = null;
        if (BrowserDatabase.instance) {
            return BrowserDatabase.instance;
        }
        this.storage = new this.storages[options.storageType || 'localStorage']({
            storageKey: options.storageKey || 'browser-database'
        });
        BrowserDatabase.instance = this;
    }
    /*
     * Get list of records
     *
     * @param modelName Name of model
     */
    getAll(modelName) {
        return this.storage.getAll(modelName);
    }
    /*
     * Get single record by id
     *
     * @param modelName Name of model
     * @param id ID of primary key
     */
    getById(modelName, id) {
        return this.storage.getById(modelName, id);
    }
    /*
     * Insert new record
     *
     * @param modelName Name of model
     * @param row Row data
     */
    insert(modelName, row) {
        return this.storage.insert(modelName, row)
            .then((theRow) => this.notify(modelName, 'insert', theRow));
    }
    /*
     * Update existing record
     *
     * @param modelName Name of model
     * @param id ID of primary key
     * @param row Row data
     */
    update(modelName, id, row) {
        return this.storage.update(modelName, id, row)
            .then((theRow) => this.notify(modelName, 'update', theRow));
    }
    /*
     * Remove existing record
     *
     * @param modelName Name of model
     * @param id ID of primary key
     */
    remove(modelName, id) {
        return this.storage.remove(modelName, id)
            .then((theRow) => this.notify(modelName, 'remove', theRow));
    }
    /*
     * Notify subscribers about event
     *
     * @param modelName Name of model
     * @param action Action name
     * @param result Result row
     */
    notify(modelName, action, result) {
        this.subscriptions.forEach((subscription) => subscription(modelName, action, result));
        return result;
    }
    /*
     * Add subscription
     *
     * @param callback Subscription callback
     */
    subscribe(callback) {
        this.subscriptions.push(callback);
        return () => this.subscriptions = this.subscriptions.filter((subscription) => subscription !== callback);
    }
}
/*
 * Existing instance for singleton
 */
BrowserDatabase.instance = null;
exports.BrowserDatabase = BrowserDatabase;
 
},'src/class/browser-database.ts',{"../interface":"/home/dev/Dropbox/www/browser-database/src/interface/index.ts","./index":"/home/dev/Dropbox/www/browser-database/src/class/index.ts"}];})(this);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1kYXRhYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJyb3dzZXItZGF0YWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxtQ0FBcUM7QUFFckM7O0dBRUc7QUFDSDtJQXdCRTs7OztPQUlHO0lBQ0gsWUFBWSxVQUFtQyxFQUFFO1FBdEJqRDs7V0FFRztRQUNILGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBRTFCOztXQUVHO1FBQ0gsYUFBUSxHQUF5QjtZQUMvQixZQUFZLEVBQUUsb0JBQVk7U0FDM0IsQ0FBQztRQUVGOztXQUVHO1FBQ0gsWUFBTyxHQUFvQixJQUFJLENBQUM7UUFTOUIsSUFBSSxlQUFlLENBQUMsUUFBUSxFQUFFO1lBQzVCLE9BQU8sZUFBZSxDQUFDLFFBQVEsQ0FBQztTQUNqQztRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksY0FBYyxDQUFDLENBQUM7WUFDdEUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksa0JBQWtCO1NBQ3JELENBQUMsQ0FBQztRQUVILGVBQWUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFNBQWlCO1FBRXRCLE9BQWtCLElBQUksQ0FBQyxPQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE9BQU8sQ0FBQyxTQUFpQixFQUFFLEVBQW1CO1FBRTVDLE9BQWtCLElBQUksQ0FBQyxPQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsU0FBaUIsRUFBRSxHQUFXO1FBRW5DLE9BQWtCLElBQUksQ0FBQyxPQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUM7YUFDbkQsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLFNBQWlCLEVBQUUsRUFBbUIsRUFBRSxHQUFXO1FBRXhELE9BQWtCLElBQUksQ0FBQyxPQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO2FBQ3ZELElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLFNBQWlCLEVBQUUsRUFBbUI7UUFFM0MsT0FBa0IsSUFBSSxDQUFDLE9BQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQzthQUNsRCxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsU0FBaUIsRUFBRSxNQUFjLEVBQUUsTUFBYztRQUV0RCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUV0RixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxRQUFhO1FBRXJCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWxDLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQzNHLENBQUM7O0FBMUhEOztHQUVHO0FBQ0ksd0JBQVEsR0FBUSxJQUFJLENBQUM7QUFMOUIsMENBNkhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJQnJvd3NlckRhdGFiYXNlT3B0aW9ucywgSVN0b3JhZ2V9IGZyb20gJy4uL2ludGVyZmFjZSc7XG5pbXBvcnQge0xvY2FsU3RvcmFnZX0gZnJvbSAnLi9pbmRleCc7XG5cbi8qXG4gKiBNYWluIGxpYnJhcnkgY2xhc3NcbiAqL1xuZXhwb3J0IGNsYXNzIEJyb3dzZXJEYXRhYmFzZSB7XG5cbiAgLypcbiAgICogRXhpc3RpbmcgaW5zdGFuY2UgZm9yIHNpbmdsZXRvblxuICAgKi9cbiAgc3RhdGljIGluc3RhbmNlOiBhbnkgPSBudWxsO1xuXG4gIC8qXG4gICAqIERhdGFiYXNlIGNoYW5nZSBzdWJzY3JpcHRpb25zXG4gICAqL1xuICBzdWJzY3JpcHRpb25zOiBhbnlbXSA9IFtdO1xuXG4gIC8qXG4gICAqIFN0b3JhZ2UgdHlwZXNcbiAgICovXG4gIHN0b3JhZ2VzOiB7W2tleTogc3RyaW5nXTogYW55fSA9IHtcbiAgICBsb2NhbFN0b3JhZ2U6IExvY2FsU3RvcmFnZVxuICB9O1xuXG4gIC8qXG4gICAqIFN0b3JhZ2UgcmVmZXJlbmNlXG4gICAqL1xuICBzdG9yYWdlOiBJU3RvcmFnZSB8IG51bGwgPSBudWxsO1xuXG4gIC8qXG4gICAqIENvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHN0b3JhZ2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IElCcm93c2VyRGF0YWJhc2VPcHRpb25zID0ge30pIHtcblxuICAgIGlmIChCcm93c2VyRGF0YWJhc2UuaW5zdGFuY2UpIHtcbiAgICAgIHJldHVybiBCcm93c2VyRGF0YWJhc2UuaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgdGhpcy5zdG9yYWdlID0gbmV3IHRoaXMuc3RvcmFnZXNbb3B0aW9ucy5zdG9yYWdlVHlwZSB8fCAnbG9jYWxTdG9yYWdlJ10oe1xuICAgICAgc3RvcmFnZUtleTogb3B0aW9ucy5zdG9yYWdlS2V5IHx8ICdicm93c2VyLWRhdGFiYXNlJ1xuICAgIH0pO1xuXG4gICAgQnJvd3NlckRhdGFiYXNlLmluc3RhbmNlID0gdGhpcztcbiAgfVxuXG4gIC8qXG4gICAqIEdldCBsaXN0IG9mIHJlY29yZHNcbiAgICpcbiAgICogQHBhcmFtIG1vZGVsTmFtZSBOYW1lIG9mIG1vZGVsXG4gICAqL1xuICBnZXRBbGwobW9kZWxOYW1lOiBzdHJpbmcpOiBQcm9taXNlPG9iamVjdD4ge1xuXG4gICAgcmV0dXJuICg8SVN0b3JhZ2U+dGhpcy5zdG9yYWdlKS5nZXRBbGwobW9kZWxOYW1lKTtcbiAgfVxuXG4gIC8qXG4gICAqIEdldCBzaW5nbGUgcmVjb3JkIGJ5IGlkXG4gICAqXG4gICAqIEBwYXJhbSBtb2RlbE5hbWUgTmFtZSBvZiBtb2RlbFxuICAgKiBAcGFyYW0gaWQgSUQgb2YgcHJpbWFyeSBrZXlcbiAgICovXG4gIGdldEJ5SWQobW9kZWxOYW1lOiBzdHJpbmcsIGlkOiBudW1iZXIgfCBzdHJpbmcpOiBQcm9taXNlPG9iamVjdD4ge1xuXG4gICAgcmV0dXJuICg8SVN0b3JhZ2U+dGhpcy5zdG9yYWdlKS5nZXRCeUlkKG1vZGVsTmFtZSwgaWQpO1xuICB9XG5cbiAgLypcbiAgICogSW5zZXJ0IG5ldyByZWNvcmRcbiAgICpcbiAgICogQHBhcmFtIG1vZGVsTmFtZSBOYW1lIG9mIG1vZGVsXG4gICAqIEBwYXJhbSByb3cgUm93IGRhdGFcbiAgICovXG4gIGluc2VydChtb2RlbE5hbWU6IHN0cmluZywgcm93OiBvYmplY3QpOiBQcm9taXNlPG9iamVjdD4ge1xuXG4gICAgcmV0dXJuICg8SVN0b3JhZ2U+dGhpcy5zdG9yYWdlKS5pbnNlcnQobW9kZWxOYW1lLCByb3cpXG4gICAgICAudGhlbigodGhlUm93KSA9PiB0aGlzLm5vdGlmeShtb2RlbE5hbWUsICdpbnNlcnQnLCB0aGVSb3cpKTtcbiAgfVxuXG4gIC8qXG4gICAqIFVwZGF0ZSBleGlzdGluZyByZWNvcmRcbiAgICpcbiAgICogQHBhcmFtIG1vZGVsTmFtZSBOYW1lIG9mIG1vZGVsXG4gICAqIEBwYXJhbSBpZCBJRCBvZiBwcmltYXJ5IGtleVxuICAgKiBAcGFyYW0gcm93IFJvdyBkYXRhXG4gICAqL1xuICB1cGRhdGUobW9kZWxOYW1lOiBzdHJpbmcsIGlkOiBudW1iZXIgfCBzdHJpbmcsIHJvdzogb2JqZWN0KTogUHJvbWlzZTxvYmplY3Q+IHtcblxuICAgIHJldHVybiAoPElTdG9yYWdlPnRoaXMuc3RvcmFnZSkudXBkYXRlKG1vZGVsTmFtZSwgaWQsIHJvdylcbiAgICAgIC50aGVuKCh0aGVSb3cpID0+IHRoaXMubm90aWZ5KG1vZGVsTmFtZSwgJ3VwZGF0ZScsIHRoZVJvdykpO1xuICB9XG5cbiAgLypcbiAgICogUmVtb3ZlIGV4aXN0aW5nIHJlY29yZFxuICAgKlxuICAgKiBAcGFyYW0gbW9kZWxOYW1lIE5hbWUgb2YgbW9kZWxcbiAgICogQHBhcmFtIGlkIElEIG9mIHByaW1hcnkga2V5XG4gICAqL1xuICByZW1vdmUobW9kZWxOYW1lOiBzdHJpbmcsIGlkOiBudW1iZXIgfCBzdHJpbmcpOiBQcm9taXNlPG9iamVjdD4ge1xuXG4gICAgcmV0dXJuICg8SVN0b3JhZ2U+dGhpcy5zdG9yYWdlKS5yZW1vdmUobW9kZWxOYW1lLCBpZClcbiAgICAgIC50aGVuKCh0aGVSb3cpID0+IHRoaXMubm90aWZ5KG1vZGVsTmFtZSwgJ3JlbW92ZScsIHRoZVJvdykpO1xuICB9XG5cbiAgLypcbiAgICogTm90aWZ5IHN1YnNjcmliZXJzIGFib3V0IGV2ZW50XG4gICAqXG4gICAqIEBwYXJhbSBtb2RlbE5hbWUgTmFtZSBvZiBtb2RlbFxuICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBuYW1lXG4gICAqIEBwYXJhbSByZXN1bHQgUmVzdWx0IHJvd1xuICAgKi9cbiAgbm90aWZ5KG1vZGVsTmFtZTogc3RyaW5nLCBhY3Rpb246IHN0cmluZywgcmVzdWx0OiBvYmplY3QpOiBvYmplY3Qge1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YnNjcmlwdGlvbikgPT4gc3Vic2NyaXB0aW9uKG1vZGVsTmFtZSwgYWN0aW9uLCByZXN1bHQpKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKlxuICAgKiBBZGQgc3Vic2NyaXB0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayBTdWJzY3JpcHRpb24gY2FsbGJhY2tcbiAgICovXG4gIHN1YnNjcmliZShjYWxsYmFjazogYW55KTogYW55IHtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGNhbGxiYWNrKTtcblxuICAgIHJldHVybiAoKSA9PiB0aGlzLnN1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZmlsdGVyKChzdWJzY3JpcHRpb24pID0+IHN1YnNjcmlwdGlvbiAhPT0gY2FsbGJhY2spO1xuICB9XG59XG4iXX0=