all files / class/ storage.ts

100% Statements 42/42
100% Branches 12/12
100% Functions 11/11
100% Lines 40/40
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 114 115 116 117 118 119 120                           40× 40× 40×                               10× 10× 10×                                                                             31×               32× 15×              
(function(global){global.wrappers['/home/dev/Dropbox/www/browser-database/src/class/storage.ts']=[function(require,module,exports,__dirname,__filename){ "use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const uuid = require("uuid");
/*
 * Storage implementation
 */
class Storage {
    /*
     * Constructor
     *
     * @param options Options for storage
     */
    constructor(options = {}) {
        /*
         * Local data holder
         */
        this.data = {};
        this.storageKey = options.storageKey || 'browser-database';
        this.load();
    }
    /*
     * Get list of records
     *
     * @param modelName Name of model
     */
    getAll(modelName) {
        this.ensureModel(modelName);
        const ret = Object.keys(this.data[modelName]).map((id) => Object.assign({ id }, this.data[modelName][id]));
        return Promise.resolve(ret);
    }
    /*
     * Get single record by id
     *
     * @param modelName Name of model
     * @param id ID of primary key
     */
    getById(modelName, id) {
        this.ensureModel(modelName);
        const row = this.data[modelName][id];
        if (row === undefined) {
            return Promise.reject(new Error('Item Not Found'));
        }
        const ret = Object.assign({ id }, this.data[modelName][id]);
        return Promise.resolve(ret);
    }
    /*
     * Insert new record
     *
     * @param modelName Name of model
     * @param row Row data
     */
    insert(modelName, row) {
        this.ensureModel(modelName);
        const id = row.id || uuid.v4();
        delete row.id;
        this.data[modelName][id] = row;
        return this.save()
            .then(() => this.getById(modelName, id));
    }
    /*
     * Update existing record
     *
     * @param modelName Name of model
     * @param id ID of primary key
     * @param row Row data
     */
    update(modelName, id, row) {
        this.ensureModel(modelName);
        const theRow = this.data[modelName][id];
        if (theRow === undefined) {
            return Promise.reject(new Error('Item Not Found'));
        }
        Object.assign(theRow, row);
        return this.save()
            .then(() => this.getById(modelName, id));
    }
    /*
     * Remove existing record
     *
     * @param modelName Name of model
     * @param id ID of primary key
     */
    remove(modelName, id) {
        this.ensureModel(modelName);
        const theRow = this.data[modelName][id];
        if (theRow === undefined) {
            return Promise.reject(new Error('Item Not Found'));
        }
        delete this.data[modelName][id];
        return this.save()
            .then(() => Promise.resolve(theRow));
    }
    /*
     * Saves data to storage
     */
    save() {
        return Promise.resolve(this.data);
    }
    /*
     * Loads data from storage
     */
    load() {
        return Promise.resolve(this.data);
    }
    /*
     * Checks if model exists and creates it if not
     *
     * @param modelName Name of model
     */
    ensureModel(modelName) {
        if (this.data[modelName] === undefined) {
            this.data[modelName] = {};
        }
    }
}
exports.Storage = Storage;
 
},'src/class/storage.ts',{"uuid":"/home/dev/Dropbox/www/browser-database/node_modules/uuid/index.js","../interface":"/home/dev/Dropbox/www/browser-database/src/interface/index.ts"}];})(this);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2QkFBNkI7QUFJN0I7O0dBRUc7QUFDSDtJQVlFOzs7O09BSUc7SUFDSCxZQUFZLFVBQTJCLEVBQUU7UUFmekM7O1dBRUc7UUFDSCxTQUFJLEdBQStCLEVBQUUsQ0FBQztRQWNwQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksa0JBQWtCLENBQUM7UUFFM0QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsU0FBaUI7UUFFdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1QixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV6RyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLFNBQWlCLEVBQUUsRUFBbUI7UUFFNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXJDLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRTtZQUNyQixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxD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OlsiaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJztcblxuaW1wb3J0IHtJU3RvcmFnZU9wdGlvbnMsIElTdG9yYWdlfSBmcm9tICcuLi9pbnRlcmZhY2UnO1xuXG4vKlxuICogU3RvcmFnZSBpbXBsZW1lbnRhdGlvblxuICovXG5leHBvcnQgY2xhc3MgU3RvcmFnZSBpbXBsZW1lbnRzIElTdG9yYWdlIHtcblxuICAvKlxuICAgKiBMb2NhbCBkYXRhIGhvbGRlclxuICAgKi9cbiAgZGF0YToge1ttb2RlbE5hbWU6IHN0cmluZ106IGFueX0gPSB7fTtcblxuICAvKlxuICAgKiBTdG9yYWdlIGtleSBob2xkZXJcbiAgICovXG4gIHN0b3JhZ2VLZXk6IHN0cmluZztcblxuICAvKlxuICAgKiBDb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBzdG9yYWdlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJU3RvcmFnZU9wdGlvbnMgPSB7fSkge1xuXG4gICAgdGhpcy5zdG9yYWdlS2V5ID0gb3B0aW9ucy5zdG9yYWdlS2V5IHx8ICdicm93c2VyLWRhdGFiYXNlJztcblxuICAgIHRoaXMubG9hZCgpO1xuICB9XG5cbiAgLypcbiAgICogR2V0IGxpc3Qgb2YgcmVjb3Jkc1xuICAgKlxuICAgKiBAcGFyYW0gbW9kZWxOYW1lIE5hbWUgb2YgbW9kZWxcbiAgICovXG4gIGdldEFsbChtb2RlbE5hbWU6IHN0cmluZyk6IFByb21pc2U8b2JqZWN0PiB7XG5cbiAgICB0aGlzLmVuc3VyZU1vZGVsKG1vZGVsTmFtZSk7XG5cbiAgICBjb25zdCByZXQgPSBPYmplY3Qua2V5cyh0aGlzLmRhdGFbbW9kZWxOYW1lXSkubWFwKChpZCkgPT4gT2JqZWN0LmFzc2lnbih7aWR9LCB0aGlzLmRhdGFbbW9kZWxOYW1lXVtpZF0pKTtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmV0KTtcbiAgfVxuXG4gIC8qXG4gICAqIEdldCBzaW5nbGUgcmVjb3JkIGJ5IGlkXG4gICAqXG4gICAqIEBwYXJhbSBtb2RlbE5hbWUgTmFtZSBvZiBtb2RlbFxuICAgKiBAcGFyYW0gaWQgSUQgb2YgcHJpbWFyeSBrZXlcbiAgICovXG4gIGdldEJ5SWQobW9kZWxOYW1lOiBzdHJpbmcsIGlkOiBudW1iZXIgfCBzdHJpbmcpOiBQcm9taXNlPG9iamVjdD4ge1xuXG4gICAgdGhpcy5lbnN1cmVNb2RlbChtb2RlbE5hbWUpO1xuXG4gICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhW21vZGVsTmFtZV1baWRdO1xuXG4gICAgaWYgKHJvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdJdGVtIE5vdCBGb3VuZCcpKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSBPYmplY3QuYXNzaWduKHtpZH0sIHRoaXMuZGF0YVttb2RlbE5hbWVdW2lkXSk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJldCk7XG4gIH1cblxuICAvKlxuICAgKiBJbnNlcnQgbmV3IHJlY29yZFxuICAgKlxuICAgKiBAcGFyYW0gbW9kZWxOYW1lIE5hbWUgb2YgbW9kZWxcbiAgICogQHBhcmFtIHJvdyBSb3cgZGF0YVxuICAgKi9cbiAgaW5zZXJ0KG1vZGVsTmFtZTogc3RyaW5nLCByb3c6IG9iamVjdCk6IFByb21pc2U8b2JqZWN0PiB7XG5cbiAgICB0aGlzLmVuc3VyZU1vZGVsKG1vZGVsTmFtZSk7XG5cbiAgICBjb25zdCBpZCA9IChyb3cgYXMgYW55KS5pZCB8fCB1dWlkLnY0KCk7XG5cbiAgICBkZWxldGUgKHJvdyBhcyBhbnkpLmlkO1xuXG4gICAgdGhpcy5kYXRhW21vZGVsTmFtZV1baWRdID0gcm93O1xuXG4gICAgcmV0dXJuIHRoaXMuc2F2ZSgpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmdldEJ5SWQobW9kZWxOYW1lLCBpZCkpO1xuICB9XG5cbiAgLypcbiAgICogVXBkYXRlIGV4aXN0aW5nIHJlY29yZFxuICAgKlxuICAgKiBAcGFyYW0gbW9kZWxOYW1lIE5hbWUgb2YgbW9kZWxcbiAgICogQHBhcmFtIGlkIElEIG9mIHByaW1hcnkga2V5XG4gICAqIEBwYXJhbSByb3cgUm93IGRhdGFcbiAgICovXG4gIHVwZGF0ZShtb2RlbE5hbWU6IHN0cmluZywgaWQ6IG51bWJlciB8IHN0cmluZywgcm93OiBvYmplY3QpOiBQcm9taXNlPG9iamVjdD4ge1xuXG4gICAgdGhpcy5lbnN1cmVNb2RlbChtb2RlbE5hbWUpO1xuXG4gICAgY29uc3QgdGhlUm93ID0gdGhpcy5kYXRhW21vZGVsTmFtZV1baWRdO1xuXG4gICAgaWYgKHRoZVJvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdJdGVtIE5vdCBGb3VuZCcpKTtcbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKHRoZVJvdywgcm93KTtcblxuICAgIHJldHVybiB0aGlzLnNhdmUoKVxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5nZXRCeUlkKG1vZGVsTmFtZSwgaWQpKTtcbiAgfVxuXG4gIC8qXG4gICAqIFJlbW92ZSBleGlzdGluZyByZWNvcmRcbiAgICpcbiAgICogQHBhcmFtIG1vZGVsTmFtZSBOYW1lIG9mIG1vZGVsXG4gICAqIEBwYXJhbSBpZCBJRCBvZiBwcmltYXJ5IGtleVxuICAgKi9cbiAgcmVtb3ZlKG1vZGVsTmFtZTogc3RyaW5nLCBpZDogbnVtYmVyIHwgc3RyaW5nKTogUHJvbWlzZTxvYmplY3Q+IHtcblxuICAgIHRoaXMuZW5zdXJlTW9kZWwobW9kZWxOYW1lKTtcblxuICAgIGNvbnN0IHRoZVJvdyA9IHRoaXMuZGF0YVttb2RlbE5hbWVdW2lkXTtcblxuICAgIGlmICh0aGVSb3cgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignSXRlbSBOb3QgRm91bmQnKSk7XG4gICAgfVxuXG4gICAgZGVsZXRlIHRoaXMuZGF0YVttb2RlbE5hbWVdW2lkXTtcblxuICAgIHJldHVybiB0aGlzLnNhdmUoKVxuICAgICAgLnRoZW4oKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHRoZVJvdykpO1xuICB9XG5cbiAgLypcbiAgICogU2F2ZXMgZGF0YSB0byBzdG9yYWdlXG4gICAqL1xuICBzYXZlKCk6IFByb21pc2U8b2JqZWN0PiB7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuZGF0YSk7XG4gIH1cblxuICAvKlxuICAgKiBMb2FkcyBkYXRhIGZyb20gc3RvcmFnZVxuICAgKi9cbiAgbG9hZCgpOiBQcm9taXNlPG9iamVjdD4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmRhdGEpO1xuICB9XG5cbiAgLypcbiAgICogQ2hlY2tzIGlmIG1vZGVsIGV4aXN0cyBhbmQgY3JlYXRlcyBpdCBpZiBub3RcbiAgICpcbiAgICogQHBhcmFtIG1vZGVsTmFtZSBOYW1lIG9mIG1vZGVsXG4gICAqL1xuICBwcml2YXRlIGVuc3VyZU1vZGVsKG1vZGVsTmFtZTogc3RyaW5nKTogdm9pZCB7XG5cbiAgICBpZiAodGhpcy5kYXRhW21vZGVsTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kYXRhW21vZGVsTmFtZV0gPSB7fTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==