From 2c6edb8d0694c4cdc72f65017a0c87f24f217ec0 Mon Sep 17 00:00:00 2001
From: Ujjwal Gupta <ujjwalkumargupta44@gmail.com>
Date: Sun, 29 Nov 2020 07:32:07 +0530
Subject: [PATCH] release v - 3.11.4

---
 dist/jsstore.commonjs2.js            | 2 +-
 dist/jsstore.js                      | 2 +-
 dist/jsstore.min.js                  | 2 +-
 dist/jsstore.worker.commonjs2.js     | 3 +--
 dist/jsstore.worker.commonjs2.js.map | 2 +-
 dist/jsstore.worker.ie.js            | 3 +--
 dist/jsstore.worker.ie.min.js        | 2 +-
 dist/jsstore.worker.js               | 3 +--
 dist/jsstore.worker.js.map           | 2 +-
 dist/jsstore.worker.min.js           | 2 +-
 package.json                         | 2 +-
 11 files changed, 11 insertions(+), 14 deletions(-)

diff --git a/dist/jsstore.commonjs2.js b/dist/jsstore.commonjs2.js
index 1002aa17..b1aa4bed 100644
--- a/dist/jsstore.commonjs2.js
+++ b/dist/jsstore.commonjs2.js
@@ -1,5 +1,5 @@
 /*!
- * @license :jsstore - V3.11.3 - 24/11/2020
+ * @license :jsstore - V3.11.4 - 29/11/2020
  * https://github.com/ujjwalguptaofficial/JsStore
  * Copyright (c) 2020 @Ujjwal Gupta; Licensed MIT
  */
diff --git a/dist/jsstore.js b/dist/jsstore.js
index a3bfd0cf..1e3940c6 100644
--- a/dist/jsstore.js
+++ b/dist/jsstore.js
@@ -1,5 +1,5 @@
 /*!
- * @license :jsstore - V3.11.3 - 24/11/2020
+ * @license :jsstore - V3.11.4 - 29/11/2020
  * https://github.com/ujjwalguptaofficial/JsStore
  * Copyright (c) 2020 @Ujjwal Gupta; Licensed MIT
  */
diff --git a/dist/jsstore.min.js b/dist/jsstore.min.js
index de5833f2..877c12cf 100644
--- a/dist/jsstore.min.js
+++ b/dist/jsstore.min.js
@@ -1,5 +1,5 @@
 /*!
- * @license :jsstore - V3.11.3 - 24/11/2020
+ * @license :jsstore - V3.11.4 - 29/11/2020
  * https://github.com/ujjwalguptaofficial/JsStore
  * Copyright (c) 2020 @Ujjwal Gupta; Licensed MIT
  */
diff --git a/dist/jsstore.worker.commonjs2.js b/dist/jsstore.worker.commonjs2.js
index 4bcae89b..f182b52d 100644
--- a/dist/jsstore.worker.commonjs2.js
+++ b/dist/jsstore.worker.commonjs2.js
@@ -1,5 +1,5 @@
 /*!
- * @license :jsstore - V3.11.3 - 24/11/2020
+ * @license :jsstore - V3.11.4 - 29/11/2020
  * https://github.com/ujjwalguptaofficial/JsStore
  * Copyright (c) 2020 @Ujjwal Gupta; Licensed MIT
  */
@@ -5989,7 +5989,6 @@ var instance_Instance = /** @class */ (function (_super) {
         _this.onTransactionCompleted_ = function () {
             if (_this.error == null) {
                 if (_this.query.flatten) {
-                    debugger;
                     var flattendData_1 = [];
                     var indexToDelete_1 = {};
                     _this.query.flatten.forEach(function (column) {
diff --git a/dist/jsstore.worker.commonjs2.js.map b/dist/jsstore.worker.commonjs2.js.map
index 32c736b3..1a846a8c 100644
--- a/dist/jsstore.worker.commonjs2.js.map
+++ b/dist/jsstore.worker.commonjs2.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack://JsStoreWorker/webpack/bootstrap","webpack://JsStoreWorker/./src/common/enums.ts","webpack://JsStoreWorker/./src/worker/log_helper.ts","webpack://JsStoreWorker/./src/worker/business/idb_helper.ts","webpack://JsStoreWorker/./src/worker/business/base_helper.ts","webpack://JsStoreWorker/./src/worker/utils/get_regex_from_like_expression.ts","webpack://JsStoreWorker/./src/worker/business/where_checker.ts","webpack://JsStoreWorker/./src/worker/business/base.ts","webpack://JsStoreWorker/./src/worker/utils/is_null.ts","webpack://JsStoreWorker/./src/worker/business/update/schema_checker.ts","webpack://JsStoreWorker/./src/worker/business/insert/value_checker.ts","webpack://JsStoreWorker/./src/worker/business/insert/values_checker.ts","webpack://JsStoreWorker/./src/worker/business/query_helper.ts","webpack://JsStoreWorker/./src/worker/keystore/enums.ts","webpack://JsStoreWorker/./src/worker/keystore/business/base_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/idb_helper.ts","webpack://JsStoreWorker/./src/worker/keystore/business/remove_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/set_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/utils_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/init_db_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/get_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/main_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/query_executor.ts","webpack://JsStoreWorker/./src/worker/keystore/instance.ts","webpack://JsStoreWorker/./src/worker/config.ts","webpack://JsStoreWorker/./src/worker/business/clear.ts","webpack://JsStoreWorker/./src/worker/business/init_db.ts","webpack://JsStoreWorker/./src/worker/model/table_helper.ts","webpack://JsStoreWorker/./src/worker/model/db_helper.ts","webpack://JsStoreWorker/./src/worker/model/column.ts","webpack://JsStoreWorker/./src/worker/model/table.ts","webpack://JsStoreWorker/./src/worker/model/database.ts","webpack://JsStoreWorker/./src/worker/business/union/index.ts","webpack://JsStoreWorker/./src/worker/business/intersect/index.ts","webpack://JsStoreWorker/./src/worker/query_executor.ts","webpack://JsStoreWorker/./src/worker/business/where_base.ts","webpack://JsStoreWorker/./src/worker/helpers/promise.ts","webpack://JsStoreWorker/./src/worker/helpers/promise_all.ts","webpack://JsStoreWorker/./src/worker/business/base_db.ts","webpack://JsStoreWorker/./src/worker/business/select/then_evaluator.ts","webpack://JsStoreWorker/./src/worker/business/select/base_select.ts","webpack://JsStoreWorker/./src/worker/business/select/not_where.ts","webpack://JsStoreWorker/./src/worker/business/select/in.ts","webpack://JsStoreWorker/./src/worker/business/select/regex.ts","webpack://JsStoreWorker/./src/worker/business/select/where.ts","webpack://JsStoreWorker/./src/worker/business/select/group_by_helper.ts","webpack://JsStoreWorker/./src/worker/business/select/orderby_helper.ts","webpack://JsStoreWorker/./src/worker/business/drop_db.ts","webpack://JsStoreWorker/./src/worker/start.ts","webpack://JsStoreWorker/./src/worker/index.ts","webpack://JsStoreWorker/./src/worker/helpers/auto_increment_helper.ts","webpack://JsStoreWorker/./src/worker/business/insert/instance.ts","webpack://JsStoreWorker/./src/worker/business/update/base_update.ts","webpack://JsStoreWorker/./src/worker/business/update/not_where.ts","webpack://JsStoreWorker/./src/worker/business/update/in.ts","webpack://JsStoreWorker/./src/worker/business/update/regex.ts","webpack://JsStoreWorker/./src/worker/business/update/where.ts","webpack://JsStoreWorker/./src/worker/business/update/instance.ts","webpack://JsStoreWorker/./src/worker/business/remove/base_remove.ts","webpack://JsStoreWorker/./src/worker/business/remove/not_where.ts","webpack://JsStoreWorker/./src/worker/business/remove/in.ts","webpack://JsStoreWorker/./src/worker/business/remove/regex.ts","webpack://JsStoreWorker/./src/worker/business/remove/where.ts","webpack://JsStoreWorker/./src/worker/business/remove/instance.ts","webpack://JsStoreWorker/./src/worker/business/count/base_count.ts","webpack://JsStoreWorker/./src/worker/business/count/not_where.ts","webpack://JsStoreWorker/./src/worker/business/count/in.ts","webpack://JsStoreWorker/./src/worker/business/count/regex.ts","webpack://JsStoreWorker/./src/worker/business/count/where.ts","webpack://JsStoreWorker/./src/worker/business/count/instance.ts","webpack://JsStoreWorker/./src/worker/business/select/join.ts","webpack://JsStoreWorker/./src/worker/utils/get_keys.ts","webpack://JsStoreWorker/./src/worker/utils/is_object.ts","webpack://JsStoreWorker/./src/worker/business/select/instance.ts","webpack://JsStoreWorker/./src/worker/utils/get_data_type.ts","webpack://JsStoreWorker/./src/worker/utils/is_array.ts","webpack://JsStoreWorker/./src/worker/utils/get_object_first_key.ts","webpack://JsStoreWorker/./src/worker/utils/remove_space.ts","webpack://JsStoreWorker/./src/worker/business/transaction/instance.ts"],"names":[],"mappings":"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","file":"jsstore.worker.commonjs2.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 24);\n","export enum ERROR_TYPE {\n    WorkerNotSupplied = \"worker_not_supplied\",\n    IndexedDbUndefined = \"indexeddb_undefined\",\n    UndefinedColumn = \"undefined_column\",\n    UndefinedValue = \"undefined_value\",\n    UndefinedColumnName = \"undefined_column_name\",\n    UndefinedDbName = \"undefined_database_name\",\n    UndefinedColumnValue = \"undefined_column_value\",\n    NotArray = \"not_array\",\n    NoValueSupplied = \"no_value_supplied\",\n    ColumnNotExist = \"column_not_exist\",\n    EnableSearchOff = \"enable_search_off\",\n    InvalidOp = \"invalid_operator\",\n    NullValue = \"null_value\",\n    WrongDataType = \"wrong_data_type\",\n    TableNotExist = \"table_not_exist\",\n    DbNotExist = \"db_not_exist\",\n    ConnectionAborted = \"connection_aborted\",\n    ConnectionClosed = \"connection_closed\",\n    NotObject = \"not_object\",\n    InvalidConfig = \"invalid_config\",\n    DbBlocked = \"Db_blocked\",\n    IndexedDbNotSupported = \"indexeddb_not_supported\",\n    NullValueInWhere = \"null_value_in_where\",\n    InvalidJoinQuery = 'invalid_join_query',\n    InvalidOrderQuery = 'invalid_order_query',\n    InvalidQuery = 'invalid_query',\n    InvalidGroupQuery = 'invalid_group_query',\n}\n\nexport enum WORKER_STATUS {\n    Registered = \"registerd\",\n    Failed = \"failed\",\n    NotStarted = \"not_started\"\n}\n\nexport enum DATA_TYPE {\n    String = \"string\",\n    Object = \"object\",\n    Array = \"array\",\n    Number = \"number\",\n    Boolean = \"boolean\",\n    Null = \"null\",\n    DateTime = \"date_time\"\n}\n\nexport enum API {\n    InitDb = \"init_db\",\n    IsDbExist = \"is_db_exist\",\n    GetDbVersion = \"get_db_version\",\n    GetDbList = \"get_db_list\",\n    Get = \"get\",\n    Set = \"set\",\n    Select = \"select\",\n    Insert = \"insert\",\n    Update = \"update\",\n    Remove = \"remove\",\n    GetDbSchema = \"get_db_schema\",\n    OpenDb = \"open_db\",\n    Clear = \"clear\",\n    DropDb = \"drop_db\",\n    Count = \"count\",\n    ChangeLogStatus = \"change_log_status\",\n    Terminate = \"terminate\",\n    Transaction = \"transaction\",\n    InitKeyStore = \"init_keystore\",\n    CloseDb = \"close_db\",\n    Union = \"union\",\n    Intersect = \"intersect\"\n}\n\nexport enum EVENT {\n    RequestQueueEmpty = \"requestQueueEmpty\",\n    RequestQueueFilled = \"requestQueueFilled\"\n}\n\nexport enum QUERY_OPTION {\n    Where = \"where\",\n    Like = 'like',\n    Regex = 'regex',\n    In = 'in',\n    Equal = \"=\",\n    Between = '-',\n    GreaterThan = '>',\n    LessThan = '<',\n    GreaterThanEqualTo = \">=\",\n    LessThanEqualTo = \"<=\",\n    NotEqualTo = \"!=\",\n    Aggregate = \"aggregate\",\n    Max = \"max\",\n    Min = \"min\",\n    Avg = \"avg\",\n    Count = \"count\",\n    Sum = \"sum\",\n    Or = \"or\",\n    Skip = \"skip\",\n    Limit = \"limit\",\n    And = \"and\",\n    IgnoreCase = \"ignoreCase\",\n    Then = \"then\"\n}\n\nexport enum IDB_MODE {\n    ReadOnly = \"readonly\",\n    ReadWrite = \"readwrite\"\n}\n\nexport enum OCCURENCE {\n    First = 'f',\n    Last = 'l',\n    Any = 'a'\n}\n\nexport enum CONNECTION_STATUS {\n    Connected = \"connected\",\n    Closed = \"closed\",\n    NotStarted = \"not_started\",\n    UnableToStart = \"unable_to_start\",\n    ClosedByJsStore = \"closed_by_jsstore\"\n}","import { IError, ERROR_TYPE } from \"../common/index\";\nimport { Config } from \"./config\";\n\nexport class LogHelper implements IError {\n    type: ERROR_TYPE;\n    message: string;\n    private info_: any;\n\n    constructor(type: ERROR_TYPE, info: any = null) {\n        this.type = type;\n        this.info_ = info;\n        this.message = this.getMsg_();\n    }\n\n    throw() {\n        throw this.get();\n    }\n\n    static log(msg) {\n        if (Config.isLogEnabled) {\n            console.log(msg);\n        }\n    }\n\n    logError() {\n        console.error(this.get());\n    }\n\n\n\n    get() {\n        return {\n            message: this.message,\n            type: this.type\n        } as IError;\n    }\n\n    private getMsg_() {\n        let errMsg: string;\n        switch (this.type) {\n            case ERROR_TYPE.NotArray:\n                errMsg = \"Supplied value is not an array\";\n                break;\n            case ERROR_TYPE.UndefinedColumn:\n                errMsg = \"Column is undefined in Where\";\n                break;\n            case ERROR_TYPE.UndefinedValue:\n                errMsg = \"Value is undefined in Where\";\n                break;\n            case ERROR_TYPE.UndefinedColumnName:\n                errMsg = \"Column name is undefined '\" + this.info_['TableName'] + \"'\";\n                break;\n            case ERROR_TYPE.UndefinedDbName:\n                errMsg = \"Database name is not supplied\";\n                break;\n            case ERROR_TYPE.UndefinedColumnValue:\n                errMsg = \"Column value is undefined\";\n                break;\n            case ERROR_TYPE.NoValueSupplied:\n                errMsg = \"No value is supplied\";\n                break;\n            case ERROR_TYPE.InvalidOp:\n                errMsg = \"Invalid Op Value '\" + this.info_['Op'] + \"'\";\n                break;\n            case ERROR_TYPE.ColumnNotExist:\n                errMsg = this.info_['isOrder'] ?\n                    `Column '${this.info_['column']}' in order query does not exist` :\n                    `Column '${this.info_['column']}' does not exist`;\n                break;\n            case ERROR_TYPE.EnableSearchOff:\n                errMsg = \"Search is turned off for the Column '\" + this.info_['column'] + \"'\";\n                break;\n            case ERROR_TYPE.NullValue:\n                errMsg = \"Null value is not allowed for column '\" + this.info_['ColumnName'] + \"'\";\n                break;\n            case ERROR_TYPE.WrongDataType:\n                errMsg = \"Supplied value for column '\" + this.info_['column'] +\n                    \"' have wrong data type\";\n                break;\n            case ERROR_TYPE.TableNotExist:\n                errMsg = \"Table '\" + this.info_['tableName'] + \"' does not exist\";\n                break;\n            case ERROR_TYPE.DbNotExist:\n                errMsg = `Database with name ${this.info_['dbName']} does not exist`;\n                break;\n            case ERROR_TYPE.NotObject:\n                errMsg = \"supplied value is not object\";\n                break;\n            case ERROR_TYPE.InvalidOp:\n                errMsg = \"Invalid Config '\" + this.info_['Config'] + \" '\";\n                break;\n            case ERROR_TYPE.DbBlocked:\n                errMsg = `database is blocked, cant be deleted right now`;\n                break;\n            case ERROR_TYPE.NullValueInWhere:\n                errMsg = `Null/undefined is not allowed in where. Column '${this.info_['column']}' has null`;\n                break;\n            case ERROR_TYPE.InvalidJoinQuery:\n                errMsg = this.info_;\n                break;\n            default:\n                errMsg = this.message;\n                break;\n        }\n        return errMsg;\n    }\n}","import { CONNECTION_STATUS, ERROR_TYPE, IDB_MODE, IDbStatus } from \"../../common/index\";\nimport { KeyStore } from \"../keystore/index\";\nimport { DataBase } from \"../model/index\";\nimport { DropDb } from \"./drop_db\";\nimport { promise } from \"../helpers/index\";\n\nexport class IdbHelper {\n\n    static onDbDroppedByBrowser: () => void;\n    static transaction: IDBTransaction = null;\n    static isDbDeletedByBrowser: boolean;\n    static dbConnection: IDBDatabase;\n    static activeDb: DataBase;\n    static activeDbVersion = 0;\n    static dbStatus: IDbStatus = {\n        conStatus: CONNECTION_STATUS.NotStarted\n    };\n\n    static callDbDroppedByBrowser(deleteMetaData?: boolean) {\n        if (IdbHelper.dbStatus.conStatus === CONNECTION_STATUS.Connected) {\n            IdbHelper.isDbDeletedByBrowser = true;\n            if (deleteMetaData === true) {\n                const dropDbObject = new DropDb(function () {\n\n                }, function () {\n\n                });\n                dropDbObject.deleteMetaData();\n            }\n        }\n    }\n\n    static createTransaction(tableNames: string[], callBack: () => void, mode?) {\n        if (IdbHelper.transaction === null) {\n            mode = mode ? mode : IDB_MODE.ReadWrite;\n            IdbHelper.transaction = IdbHelper.dbConnection.transaction(tableNames, mode);\n            const onComplete = () => {\n                IdbHelper.transaction = null;\n                callBack();\n            };\n            IdbHelper.transaction.oncomplete = onComplete;\n            IdbHelper.transaction.onabort = onComplete;\n        }\n    }\n\n    static setDbList(list: string[]) {\n        return KeyStore.set('DataBase_List', list);\n    }\n\n    static updateDbStatus(status: CONNECTION_STATUS, err?: ERROR_TYPE) {\n        if (err === undefined) {\n            IdbHelper.dbStatus.conStatus = status;\n        }\n        else {\n            IdbHelper.dbStatus = {\n                conStatus: status,\n                lastError: err\n            };\n        }\n    }\n\n    static getDbList() {\n        return promise<string[]>((res, rej) => {\n            KeyStore.get<string[]>('DataBase_List').then(result => {\n                res(result == null ? [] : result);\n            }).catch(rej);\n        });\n    }\n\n    static getDbVersion(dbName: string) {\n        return promise<number>((res, rej) => {\n            KeyStore.get(`JsStore_${dbName}_Db_Version`).then(dbVersion => {\n                res(Number(dbVersion));\n            }).catch(rej);\n        });\n    }\n\n    static getDbSchema(dbName: string) {\n        return KeyStore.get<DataBase>(`JsStore_${dbName}_Schema`);\n    }\n\n    static getTable(tableName: string) {\n        const currentTable = IdbHelper.activeDb.tables.find(table => table.name === tableName);\n        return currentTable;\n    }\n}","import { IdbHelper } from \"./idb_helper\";\nimport { QUERY_OPTION } from \"../../common/index\";\nimport { DataBase } from \"../model/index\";\n\nexport class BaseHelper {\n\n\n    regexExpression: RegExp;\n    //   method helpers\n\n    protected get activeDb(): DataBase {\n        return IdbHelper.activeDb;\n    }\n\n    protected get dbConnection() {\n        return IdbHelper.dbConnection;\n    }\n\n    protected get transaction() {\n        return IdbHelper.transaction;\n    }\n\n    protected createTransaction(tableNames: string[], callBack: () => void, mode?) {\n        IdbHelper.createTransaction(tableNames, callBack, mode);\n    }\n\n    protected regexTest(value) {\n        return this.regexExpression.test(value);\n    }\n\n    protected isTableExist(tableName: string): boolean {\n        const index = this.activeDb.tables.findIndex(table => table.name === tableName);\n        return index >= 0;\n    }\n\n    protected getTable(tableName: string) {\n        return IdbHelper.getTable(tableName);\n    }\n\n    protected getKeyRange(value, op?) {\n        let keyRange: IDBKeyRange;\n        switch (op) {\n            case QUERY_OPTION.Between: keyRange = IDBKeyRange.bound(value.low, value.high, false, false); break;\n            case QUERY_OPTION.GreaterThan: keyRange = IDBKeyRange.lowerBound(value, true); break;\n            case QUERY_OPTION.GreaterThanEqualTo: keyRange = IDBKeyRange.lowerBound(value); break;\n            case QUERY_OPTION.LessThan: keyRange = IDBKeyRange.upperBound(value, true); break;\n            case QUERY_OPTION.LessThanEqualTo: keyRange = IDBKeyRange.upperBound(value); break;\n            default: keyRange = IDBKeyRange.only(value); break;\n        }\n        return keyRange;\n    }\n\n    protected getPrimaryKey(tableName): string {\n        const primaryKey: string = this.getTable(tableName).primaryKey;\n        return primaryKey ? primaryKey : this.getKeyPath(tableName);\n    }\n\n    protected getKeyPath(tableName) {\n        const transaction: IDBTransaction = this.dbConnection.transaction([tableName], \"readonly\"),\n            objectStore = transaction.objectStore(tableName);\n        return objectStore.keyPath as string;\n    }\n}","import { OCCURENCE } from \"../../common/index\";\n\nexport const getRegexFromLikeExpression = (likeExpression: string) => {\n    const filterValues = likeExpression.split('%');\n    let filterValue: string;\n    let occurence: OCCURENCE;\n    if (filterValues[1]) {\n        filterValue = filterValues[1];\n        occurence = filterValues.length > 2 ? OCCURENCE.Any : OCCURENCE.Last;\n    }\n    else {\n        filterValue = filterValues[0];\n        occurence = OCCURENCE.First;\n    }\n    switch (occurence) {\n        case OCCURENCE.First:\n            return new RegExp(`^${filterValue}`, 'i');\n        case OCCURENCE.Last:\n            return new RegExp(`${filterValue}$`, 'i');\n        default:\n            return new RegExp(`${filterValue}`, 'i');\n    }\n}","import { OCCURENCE, QUERY_OPTION } from \"../../common/index\";\nimport { getRegexFromLikeExpression } from \"../utils/index\";\n\n/**\n * For matching the different column value existance for where option\n * \n * @export\n * @class WhereChecker\n */\nexport class WhereChecker {\n  where: object;\n  status: boolean;\n  checkFlag: boolean;\n\n  constructor(where: object, checkFlag: boolean) {\n    this.where = where;\n    this.checkFlag = checkFlag;\n  }\n\n  check(rowValue) {\n    this.status = true;\n    if (this.checkFlag === true) {\n      for (const columnName in this.where) {\n        if (!this.status) {\n          break;\n        }\n        const columnValue = this.where[columnName];\n        if (typeof columnValue === 'object') {\n          for (const key in columnValue) {\n            if (!this.status) {\n              break;\n            }\n            switch (key) {\n              case QUERY_OPTION.In:\n                this.status = this.checkIn(columnName, rowValue[columnName]); break;\n              case QUERY_OPTION.Like:\n                this.status = this.checkLike_(columnName, rowValue[columnName]); break;\n              case QUERY_OPTION.Regex:\n                this.checkRegex(columnName, rowValue[columnName]); break;\n              case QUERY_OPTION.Between:\n              case QUERY_OPTION.GreaterThan:\n              case QUERY_OPTION.LessThan:\n              case QUERY_OPTION.GreaterThanEqualTo:\n              case QUERY_OPTION.LessThanEqualTo:\n              case QUERY_OPTION.NotEqualTo:\n                this.status = this.checkComparisionOp_(columnName, rowValue[columnName], key);\n                break;\n            }\n          }\n        }\n        else {\n          this.status = columnValue === rowValue[columnName];\n        }\n      }\n    }\n    return this.status;\n  }\n\n  private checkIn(column, value) {\n    return (this.where[column][QUERY_OPTION.In] as any[]).find(val => val === value) != null;\n  }\n\n  private checkLike_(column, value) {\n    return getRegexFromLikeExpression(this.where[column][QUERY_OPTION.Like]).test(value);\n  }\n\n  private checkRegex(column, value) {\n    const expr = this.where[column][QUERY_OPTION.Regex];\n    this.status = expr.test(value);\n  }\n\n  private checkComparisionOp_(column, value, symbol) {\n    const compareValue = this.where[column][symbol];\n    switch (symbol) {\n      // greater than\n      case QUERY_OPTION.GreaterThan:\n        return value > compareValue;\n      // less than\n      case QUERY_OPTION.LessThan:\n        return value < compareValue;\n      // less than equal\n      case QUERY_OPTION.LessThanEqualTo:\n        return value <= compareValue;\n      // greather than equal\n      case QUERY_OPTION.GreaterThanEqualTo:\n        return value >= compareValue;\n      // between\n      case QUERY_OPTION.Between:\n        return value > compareValue.low && value < compareValue.high;\n      // Not equal to\n      case QUERY_OPTION.NotEqualTo:\n        return value !== compareValue;\n    }\n  }\n}","import { BaseHelper } from \"./base_helper\";\nimport { IError, ERROR_TYPE, OCCURENCE, DATA_TYPE, QUERY_OPTION } from \"../../common/index\";\nimport { WhereChecker } from \"./where_checker\";\nimport { LogHelper } from \"../log_helper\";\nimport { Column } from \"../model/index\";\nimport { getDataType, getObjectFirstKey, getRegexFromLikeExpression } from \"../utils/index\";\n\nexport abstract class Base extends BaseHelper {\n    error: IError;\n    rowAffected = 0;\n    onSuccess: (result?) => void;\n    onError: (err: IError) => void;\n    objectStore: IDBObjectStore;\n    query;\n    whereCheckerInstance: WhereChecker;\n    tableName: string;\n    isTransaction: boolean;\n\n    skipRecord;\n    limitRecord;\n\n    protected onErrorOccured(e, customError = false) {\n        if (customError) {\n            e.logError();\n            this.error = (e as LogHelper).get();\n        }\n        else {\n            let error;\n            if (e.name) {\n                error = new LogHelper((e.name));\n                error.message = e.message;\n            }\n            else {\n                error = new LogHelper((e as any).target.error.name);\n                error.message = (e as any).target.error.message;\n            }\n            if (process.env.NODE_ENV === 'dev') {\n                error.logError();\n            }\n            this.error = error.get();\n        }\n    }\n\n    protected onExceptionOccured(ex: DOMException) {\n        console.error(ex);\n        this.onError({\n            message: ex.message,\n            type: ERROR_TYPE.InvalidQuery\n        });\n    }\n\n    protected getColumnInfo(columnName: string, tableName: string) {\n        return this.getTable(tableName).columns.find(column => column.name === columnName);\n    }\n\n    protected goToWhereLogic() {\n        const columnName = getObjectFirstKey(this.query.where);\n        if (this.objectStore.indexNames.contains(columnName)) {\n            const value = this.query.where[columnName];\n            if (typeof value === 'object') {\n                const checkFlag = Boolean(\n                    Object.keys(value).length > 1 ||\n                    Object.keys(this.query.where).length > 1\n                );\n                this.whereCheckerInstance = new WhereChecker(this.query.where, checkFlag);\n                const key = getObjectFirstKey(value);\n                switch (key) {\n                    case QUERY_OPTION.Like: {\n                        const regexVal = getRegexFromLikeExpression(value[QUERY_OPTION.Like]);\n                        (this as any).executeRegexLogic(columnName, regexVal);\n                    } break;\n                    case QUERY_OPTION.Regex:\n                        (this as any).executeRegexLogic(columnName, value[QUERY_OPTION.Regex]);\n                        break;\n                    case QUERY_OPTION.In:\n                        (this as any).executeInLogic(columnName, value[QUERY_OPTION.In]);\n                        break;\n                    case QUERY_OPTION.Between:\n                    case QUERY_OPTION.GreaterThan:\n                    case QUERY_OPTION.LessThan:\n                    case QUERY_OPTION.GreaterThanEqualTo:\n                    case QUERY_OPTION.LessThanEqualTo:\n                        (this as any).executeWhereLogic(columnName, value, key, \"next\");\n                        break;\n                    case QUERY_OPTION.Aggregate: break;\n                    default: (this as any).executeWhereLogic(columnName, value, null, \"next\");\n                }\n            }\n            else {\n                const checkFlag = Boolean(Object.keys(this.query.where).length > 1);\n                this.whereCheckerInstance = new WhereChecker(this.query.where, checkFlag);\n                (this as any).executeWhereLogic(columnName, value, null, \"next\");\n            }\n        }\n        else {\n            const column: Column = this.getColumnInfo(columnName, this.tableName);\n            const error = column == null ?\n                new LogHelper(ERROR_TYPE.ColumnNotExist, { column: columnName }) :\n                new LogHelper(ERROR_TYPE.EnableSearchOff, { column: columnName });\n\n            this.onErrorOccured(error, true);\n        }\n    }\n}","export const isNull = (value) => {\n    if (value == null) {\n        return true;\n    } else {\n        switch (typeof value) {\n            case 'string': return value.length === 0;\n            case 'number': return isNaN(value);\n        }\n    }\n    return false;\n};","import { Table } from \"../../model/table\";\nimport { Column } from \"../../model/column\";\nimport { LogHelper } from \"../../log_helper\";\nimport { isNull, getDataType } from \"../../utils/index\";\nimport { DATA_TYPE, ERROR_TYPE } from \"../../../common/index\";\n\nexport class SchemaChecker {\n    table: Table;\n    constructor(table: Table) {\n        this.table = table;\n    }\n\n    check(setValue: object, tblName: string) {\n        let log: LogHelper = null;\n        if (typeof setValue === DATA_TYPE.Object) {\n            if (this.table) {\n                // loop through table column and find data is valid\n                this.table.columns.every((column: Column) => {\n                    if (log === null) {\n                        if (column.name in setValue) {\n                            log = this.checkByColumn_(column, setValue[column.name]);\n                        }\n                        return true;\n                    }\n                    else {\n                        return false;\n                    }\n                });\n            }\n            else {\n                log = new LogHelper(ERROR_TYPE.TableNotExist, { tableName: tblName });\n            }\n        }\n        else {\n            log = new LogHelper(ERROR_TYPE.NotObject);\n        }\n        if (log != null) {\n            return log.get();\n        }\n        return null;\n    }\n\n\n\n    private checkByColumn_(column: Column, value) {\n        let log: LogHelper = null;\n        // check not null schema\n        if (column.notNull === true && isNull(value)) {\n            log = new LogHelper(ERROR_TYPE.NullValue, { ColumnName: column.name });\n        }\n\n        // check datatype\n        const type = getDataType(value);\n        const checkFurther = value != null;\n        if (column.dataType && checkFurther) {\n            if (type !== column.dataType && type !== 'object') {\n                log = new LogHelper(ERROR_TYPE.WrongDataType, { column: column.name });\n            }\n        }\n\n        // check allowed operators\n        if (checkFurther && type === 'object') {\n            const allowedOp = ['+', '-', '*', '/', '{push}'];\n            for (const prop in value) {\n                if (allowedOp.indexOf(prop) < 0 && column.dataType && type !== column.dataType) {\n                    log = new LogHelper(ERROR_TYPE.WrongDataType, { column: column.name });\n                }\n                break;\n            }\n        }\n        return log;\n    }\n}","import { Table, Column } from \"../../model/index\";\nimport { ERROR_TYPE, DATA_TYPE } from \"../../../common/index\";\nimport { LogHelper } from \"../../log_helper\";\nimport { isNull, getDataType } from \"../../utils/index\";\n\nexport class ValueChecker {\n    table: Table;\n    value: object;\n    errorOccured = false;\n    log: LogHelper;\n    autoIncrementValue = {};\n\n    constructor(table: Table, autoIncrementValue) {\n        this.table = table;\n        this.autoIncrementValue = autoIncrementValue;\n    }\n\n    checkAndModifyValue(value) {\n        this.value = value;\n        this.table.columns.every((column) => {\n            this.checkAndModifyColumnValue_(column);\n            return !this.errorOccured;\n        });\n        return this.errorOccured;\n    }\n\n    private checkNotNullAndDataType_(column: Column) {\n        // check not null schema\n        if (column.notNull && isNull(this.value[column.name])) {\n            this.onValidationError_(ERROR_TYPE.NullValue, { ColumnName: column.name });\n        }\n        // check datatype\n        else if (column.dataType && !isNull(this.value[column.name]) &&\n            getDataType(this.value[column.name]) !== column.dataType) {\n            this.onValidationError_(ERROR_TYPE.WrongDataType, { column: column.name });\n        }\n    }\n\n    private checkAndModifyColumnValue_(column: Column) {\n        const columnValue = this.value[column.name];\n        // check auto increment scheme\n        if (column.autoIncrement) {\n            // if value is null, then create the autoincrement value\n            if (isNull(columnValue)) {\n                this.value[column.name] = ++this.autoIncrementValue[column.name];\n            }\n            else {\n                if (getDataType(columnValue) === DATA_TYPE.Number) {\n                    // if column value is greater than autoincrement value saved, then make the\n                    // column value as autoIncrement value\n                    if (columnValue > this.autoIncrementValue[column.name]) {\n                        this.autoIncrementValue[column.name] = columnValue;\n                    }\n                }\n            }\n        }\n        // check Default Schema\n        else if (column.default !== undefined && isNull(columnValue)) {\n            this.value[column.name] = column.default;\n        }\n        this.checkNotNullAndDataType_(column);\n    }\n\n    private onValidationError_(error: ERROR_TYPE, details: object) {\n        this.errorOccured = true;\n        this.log = new LogHelper(error, details);\n    }\n}","import { Table } from \"../../model/index\";\nimport { ValueChecker } from \"./value_checker\";\nimport { promise, getAutoIncrementValues, setAutoIncrementValue } from \"../../helpers/index\";\nimport { QueryExecutor } from \"../../query_executor\";\nimport { QueryHelper } from \"../query_helper\";\n\nexport class ValuesChecker {\n    table: Table;\n    values: object[];\n    valueCheckerObj: ValueChecker;\n\n    constructor(table: Table, values: object[]) {\n        this.table = table;\n        this.values = values;\n    }\n\n    checkAndModifyValues() {\n        return promise((resolve, reject) => {\n            const onAutoIncValueEvaluated = (autoIncrementValues) => {\n                this.valueCheckerObj = new ValueChecker(this.table, autoIncrementValues);\n                this.startChecking().then(resolve).catch(reject);\n            };\n            if (QueryExecutor.isTransactionQuery === false) {\n                getAutoIncrementValues(this.table).then(autoIncValues => {\n                    onAutoIncValueEvaluated(autoIncValues);\n                }).catch(reject);\n            }\n            else {\n                onAutoIncValueEvaluated(QueryHelper.autoIncrementValues[this.table.name]);\n            }\n        });\n    }\n    \n    private startChecking() {\n        return promise((resolve, reject) => {\n            let isError = false;\n            this.values.every((item) => {\n                isError = this.valueCheckerObj.checkAndModifyValue(item);\n                return !isError;\n            });\n            if (isError) {\n                const error = this.valueCheckerObj.log.get();\n                reject(error);\n            }\n            const promiseObj = setAutoIncrementValue(this.table, this.valueCheckerObj.autoIncrementValue);\n            if (QueryExecutor.isTransactionQuery === false) {\n                promiseObj.then(resolve).catch(reject);\n            }\n            else {\n                resolve();\n            }\n        });\n    }\n}","import { API, ERROR_TYPE, QUERY_OPTION, DATA_TYPE, InsertQuery, IError } from \"../../common/index\";\nimport { IdbHelper } from \"./idb_helper\";\nimport { LogHelper } from \"../log_helper\";\nimport * as Update from \"./update/index\";\nimport * as Insert from \"./insert/index\";\nimport { Table } from \"../model/index\";\nimport { promise } from \"../helpers/index\";\nimport { getDataType } from \"../utils/index\";\n\nexport class QueryHelper {\n    api: API;\n    query;\n    error: IError;\n    isTransaction = false;\n    static autoIncrementValues: { [table: string]: { [columnName: string]: number } } = {};\n\n    constructor(api: API, query: any) {\n        this.api = api;\n        this.query = query;\n    }\n    checkAndModify() {\n        return promise((resolve, reject) => {\n            const resolveReject = () => {\n                if (this.error == null) {\n                    resolve();\n                }\n                else {\n                    reject(this.error);\n                }\n            };\n            switch (this.api) {\n                case API.Select:\n                case API.Remove:\n                case API.Count:\n                    this.checkFetchQuery_();\n                    resolveReject();\n                    break;\n                case API.Insert:\n                    this.checkInsertQuery_().then(resolveReject).\n                        catch((err) => {\n                            this.error = err;\n                            resolveReject();\n                        });\n                    break;\n                case API.Update:\n                    this.checkUpdateQuery_();\n                    resolveReject();\n                    break;\n            }\n        });\n    }\n\n    private isInsertQryValid_(callBack: (tbl: Table) => void) {\n        const table = this.getTable_((this.query as InsertQuery).into);\n        let log: LogHelper;\n        if (table) {\n            switch (getDataType(this.query.values)) {\n                case DATA_TYPE.Array:\n                    break;\n                case DATA_TYPE.Null:\n                    log = new LogHelper(ERROR_TYPE.NoValueSupplied);\n                    break;\n                default:\n                    log = new LogHelper(ERROR_TYPE.NotArray);\n            }\n        }\n        else {\n            log = new LogHelper(ERROR_TYPE.TableNotExist, { tableName: (this.query as InsertQuery).into });\n        }\n        callBack(table);\n        return log == null ? null : log.get();\n    }\n\n    private checkInsertQuery_() {\n        return promise((resolve, reject) => {\n            let table;\n            const err = this.isInsertQryValid_((tbl) => {\n                table = tbl;\n            });\n            if (err == null) {\n                if (this.query.skipDataCheck === true) {\n                    resolve();\n                }\n                else {\n                    const valueCheckerInstance = new Insert.ValuesChecker(table, this.query.values);\n                    valueCheckerInstance.checkAndModifyValues().then(() => {\n                        (this.query as InsertQuery).values = valueCheckerInstance.values;\n                        resolve();\n                    }).catch(reject);\n                }\n            }\n            else {\n                reject(err);\n            }\n        });\n    }\n\n    private checkUpdateQuery_() {\n        this.error = new Update.SchemaChecker(this.getTable_(this.query.in)).\n            check(this.query.set, this.query.in);\n        if (this.error == null) {\n            if (this.query.where != null) {\n                this.checkForNullInWhere_();\n                if (this.error == null) {\n                    this.addGreatAndLessToNotOp_();\n                }\n            }\n        }\n    }\n\n    private checkForNullInWhere_() {\n        for (const key in this.query.where) {\n            if (this.query.where[key] == null) {\n                this.error = new LogHelper(ERROR_TYPE.NullValueInWhere, { column: key }).get();\n                return;\n            }\n        }\n    }\n\n    private checkFetchQuery_() {\n        if (this.isTableExist_(this.query.from) === true) {\n            if (this.query.where != null) {\n                this.checkForNullInWhere_();\n                if (this.error == null) {\n                    this.addGreatAndLessToNotOp_();\n                }\n            }\n\n        }\n        else {\n            this.error = new LogHelper(ERROR_TYPE.TableNotExist, { tableName: this.query.from }).get();\n        }\n    }\n\n    private isTableExist_(tableName: string): boolean {\n        const index = this.activeDb_.tables.findIndex(table => table.name === tableName);\n        return index >= 0;\n    }\n\n    private get activeDb_() {\n        return IdbHelper.activeDb;\n    }\n\n    private getTable_(tableName: string) {\n        return IdbHelper.getTable(tableName);\n    }\n\n    private addGreatAndLessToNotOp_() {\n        const whereQuery = this.query.where;\n        const containsNot = (qry: object, keys: string[]) => {\n            return keys.findIndex(key => qry[key][QUERY_OPTION.NotEqualTo] != null) >= 0;\n        };\n        const addToSingleQry = (qry, keys: string[]) => {\n            let value;\n            keys.forEach((prop) => {\n                value = qry[prop];\n                if (value[QUERY_OPTION.NotEqualTo] != null) {\n                    qry[prop][QUERY_OPTION.GreaterThan] = value[QUERY_OPTION.NotEqualTo];\n                    if (qry[QUERY_OPTION.Or] === undefined) {\n                        qry[QUERY_OPTION.Or] = {};\n                        qry[QUERY_OPTION.Or][prop] = {};\n                    }\n                    else if (qry[QUERY_OPTION.Or][prop] === undefined) {\n                        qry[QUERY_OPTION.Or][prop] = {};\n                    }\n                    qry[QUERY_OPTION.Or][prop][QUERY_OPTION.LessThan] = value[QUERY_OPTION.NotEqualTo];\n                    delete qry[prop][QUERY_OPTION.NotEqualTo];\n                }\n            });\n            return qry;\n        };\n        switch (getDataType(whereQuery)) {\n            case DATA_TYPE.Object:\n                const queryKeys = Object.keys(whereQuery);\n                if (containsNot(whereQuery, queryKeys)) {\n                    if (queryKeys.length === 1) {\n                        this.query.where = addToSingleQry(whereQuery, queryKeys);\n                    }\n                    else {\n                        const whereTmpQry = [];\n                        queryKeys.forEach((prop) => {\n                            whereTmpQry.push(addToSingleQry({ [prop]: whereQuery[prop] }, [prop]));\n                        });\n                        this.query.where = whereTmpQry;\n                    }\n                }\n                break;\n            default:\n                const whereTmp = [];\n                (whereQuery as object[]).forEach(qry => {\n                    const qryKeys = Object.keys(qry);\n                    if (containsNot(qry, qryKeys)) {\n                        qry = addToSingleQry(qry, qryKeys);\n                    }\n                    whereTmp.push(qry);\n                });\n                this.query.where = whereTmp;\n        }\n    }\n\n\n\n}","export enum CONNECTION_STATUS {\n    Connected = \"connected\",\n    Closed = \"closed\",\n    NotStarted = \"not_connected\"\n}","import { IError } from \"../interfaces\";\n\nexport class Base {\n    results = null;\n    onSuccess: (results) => void;\n    onError: (err: IError) => void;\n    errorOccured = false;\n    errorCount = 0;\n    transaction: IDBTransaction;\n    objectStore: IDBObjectStore;\n\n    protected onErrorOccured(e) {\n        ++this.errorCount;\n        if (this.errorCount === 1) {\n            if (this.onError != null) {\n                this.onError((e as any).target.error);\n            }\n        }\n        console.error(e);\n    }\n}","import { CONNECTION_STATUS } from '../enums';\nimport { IDbStatus } from '../interfaces';\n\nexport class IdbHelper {\n    static dbConnection: IDBDatabase;\n    static isDbDeletedByBrowser: boolean;\n    static transaction: IDBTransaction = null;\n\n    static dbStatus: IDbStatus = {\n        conStatus: CONNECTION_STATUS.NotStarted,\n    };\n\n    static callDbDroppedByBrowser() {\n        IdbHelper.isDbDeletedByBrowser = IdbHelper.dbStatus.conStatus === CONNECTION_STATUS.Connected ? true : false;\n    }\n\n    static createTransaction(tableNames, callBack: () => void, mode?) {\n        if (IdbHelper.transaction === null) {\n            mode = mode ? mode : \"readwrite\";\n            IdbHelper.transaction = IdbHelper.dbConnection.transaction(tableNames, mode);\n            IdbHelper.transaction.oncomplete = () => {\n                IdbHelper.transaction = null;\n                callBack();\n            };\n            (IdbHelper.transaction as any).ontimeout = function () {\n                this._transaction = null;\n                console.error('transaction timed out');\n            };\n        }\n    }\n}","import { Base } from \"./base_logic\";\nimport { IError } from \"../interfaces\";\nimport { QueryExecutor } from \"../query_executor\";\nimport { IdbHelper } from \"./idb_helper\";\n\nexport class Remove extends Base {\n    key: string;\n    rowAffected = 0;\n    constructor(key: string, onSuccess: (recordRemoved: number) => void, onError: (err: IError) => void) {\n        super();\n        this.key = key;\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute() {\n        this.initTransaction();\n        const removeData = (column, value) => {\n            const cursorRequest = this.objectStore.index(column).openCursor(IDBKeyRange.only(value));\n            cursorRequest.onerror = (e) => {\n                this.errorOccured = true;\n                this.onErrorOccured(e);\n            };\n            cursorRequest.onsuccess = (e: any) => {\n                const cursor: IDBCursorWithValue = e.target.result;\n                if (cursor) {\n                    cursor.delete();\n                    ++this.rowAffected;\n                    cursor.continue();\n                }\n            };\n        };\n\n        if (!this.errorOccured) {\n            removeData(QueryExecutor.columnName, this.key);\n        }\n    }\n\n    private initTransaction() {\n        IdbHelper.createTransaction([QueryExecutor.tableName], this.onTransactionCompleted.bind(this));\n        this.objectStore = IdbHelper.transaction.objectStore(QueryExecutor.tableName);\n    }\n\n    private onTransactionCompleted() {\n        if (this.errorOccured === false) {\n            this.onSuccess(this.rowAffected);\n        }\n    }\n}","import { Base } from \"./base_logic\";\nimport { IInsert, IError } from \"../interfaces\";\nimport { IdbHelper } from \"./idb_helper\";\nimport { QueryExecutor } from \"../query_executor\";\n\nexport class Set extends Base {\n    query: IInsert;\n    constructor(query: IInsert, onSuccess: (result) => void, onError: (err: IError) => void) {\n        super();\n        try {\n            this.query = query;\n            this.onSuccess = onSuccess;\n            this.onError = onError;\n        }\n        catch (ex) {\n            console.error(ex);\n        }\n    }\n\n    execute() {\n        const updateIfExistElseInsert = () => {\n            const cursorRequest = this.objectStore.index(QueryExecutor.columnName).openCursor(\n                IDBKeyRange.only(this.query[QueryExecutor.columnName])\n            );\n            cursorRequest.onsuccess = (e) => {\n                const cursor: IDBCursorWithValue = (e as any).target.result;\n                if (cursor) {\n                    cursor.update(this.query);\n                }\n                else {\n                    insertData();\n                }\n            };\n\n            cursorRequest.onerror = (e) => {\n                this.errorOccured = true;\n                this.onErrorOccured(e);\n            };\n\n        };\n        const insertData = () => {\n            const addResult = this.objectStore.add(this.query);\n            addResult.onerror = (e) => {\n                this.errorOccured = true;\n                this.onErrorOccured(e);\n            };\n        };\n        this.initTransaction();\n        updateIfExistElseInsert();\n    }\n\n    private initTransaction() {\n        IdbHelper.createTransaction([QueryExecutor.tableName], this.onTransactionCompleted_);\n        this.objectStore = IdbHelper. transaction.objectStore(QueryExecutor.tableName);\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.errorOccured === false && this.onSuccess) {\n            this.onSuccess(null);\n        }\n    }\n}","import { CONNECTION_STATUS } from './enums';\nimport { IdbHelper } from './business/idb_helper';\n\nexport class Utils {\n\n    static updateDbStatus(status: CONNECTION_STATUS, err?) {\n        if (err === undefined) {\n            IdbHelper.dbStatus.conStatus = status;\n        }\n        else {\n            IdbHelper.dbStatus = {\n                conStatus: status,\n                lastError: err\n            };\n        }\n    }\n}\n","import { IError } from \"../interfaces\";\nimport { CONNECTION_STATUS } from \"../enums\";\nimport { Utils } from \"../utils_logic\";\nimport { IdbHelper } from \"./idb_helper\";\nimport { QueryExecutor } from \"../query_executor\";\nimport { ERROR_TYPE } from \"../../../common/index\";\n\nexport let tempDatas;\nexport class InitDb {\n    constructor(dbName: string, onSuccess: () => void, onError: (err: IError) => void) {\n        const dbRequest = self.indexedDB.open(dbName, 1);\n        IdbHelper.isDbDeletedByBrowser = false;\n        dbRequest.onerror = (event) => {\n            if ((event as any).target.error.name === 'InvalidStateError') {\n                onError({\n                    message: \"Indexeddb is blocked\",\n                    type: ERROR_TYPE.IndexedDbNotSupported\n                } as IError);\n            }\n            else {\n                onError((event as any).target.error);\n            }\n        };\n\n        dbRequest.onsuccess = (event) => {\n            IdbHelper.dbStatus.conStatus = CONNECTION_STATUS.Connected;\n            IdbHelper.dbConnection = dbRequest.result;\n            IdbHelper.dbConnection.onclose = () => {\n                IdbHelper.callDbDroppedByBrowser();\n                Utils.updateDbStatus(CONNECTION_STATUS.Closed, ERROR_TYPE.ConnectionClosed);\n            };\n\n            IdbHelper.dbConnection.onversionchange = (e: any) => {\n                if (e.newVersion === null) { // An attempt is made to delete the db\n                    e.target.close(); // Manually close our connection to the db\n                    IdbHelper.callDbDroppedByBrowser();\n                    Utils.updateDbStatus(CONNECTION_STATUS.Closed, ERROR_TYPE.ConnectionClosed);\n                }\n            };\n\n            IdbHelper.dbConnection.onerror = (e: any) => {\n                IdbHelper.dbStatus.lastError = \"Error occured in connection :\" + e.target.result;\n            };\n\n            IdbHelper.dbConnection.onabort = (e) => {\n                IdbHelper.dbStatus = {\n                    conStatus: CONNECTION_STATUS.Closed,\n                    lastError: \"Connection aborted\"\n                };\n            };\n\n            if (onSuccess != null) {\n                onSuccess();\n            }\n        };\n\n        dbRequest.onupgradeneeded = (event: any) => {\n            const db = event.target.result,\n                column = \"Key\";\n            db.createObjectStore(QueryExecutor.tableName, {\n                keyPath: column\n            }).createIndex(column, column, { unique: true });\n        };\n    }\n}","import { Base } from \"./base_logic\";\nimport { IError } from \"../interfaces\";\nimport { QueryExecutor } from \"../query_executor\";\nimport { IdbHelper } from \"./idb_helper\";\n\nexport class Get extends Base {\n    key: string;\n    constructor(key: string, onSuccess: (result) => void, onError: (err: IError) => void) {\n        super();\n        this.key = key;\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute() {\n        const getData = (column, value) => {\n            const cursorRequest = this.objectStore.index(column).openCursor(IDBKeyRange.only(value));\n            cursorRequest.onerror = (e) => {\n                this.errorOccured = true;\n                this.onErrorOccured(e);\n            };\n            cursorRequest.onsuccess = (e: any) => {\n                const cursor: IDBCursorWithValue = e.target.result;\n                if (cursor) {\n                    this.results = cursor.value['Value'];\n                }\n            };\n        };\n        this.initTransaction_();\n        getData(QueryExecutor.columnName, this.key);\n\n    }\n\n    private initTransaction_() {\n        IdbHelper.createTransaction([QueryExecutor.tableName], this.onTransactionCompleted_, 'readonly');\n        this.objectStore = IdbHelper. transaction.objectStore(QueryExecutor.tableName);\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.errorOccured === false) {\n            this.onSuccess(this.results);\n        }\n    }\n}\n","import { QueryExecutor } from '../query_executor';\nimport { CONNECTION_STATUS } from \"../enums\";\nimport { IInsert, IError, IQueryRequest, IQueryResult } from \"../interfaces\";\nimport { Remove } from \"./remove_logic\";\nimport { Set } from \"./set_logic\";\nimport { InitDb } from \"./init_db_logic\";\nimport { Get } from \"./get_logic\";\nimport { IdbHelper } from './idb_helper';\n\nexport class Main {\n    onQueryFinished: (result) => void;\n    constructor(onQueryFinished = null) {\n        this.onQueryFinished = onQueryFinished;\n    }\n\n    checkConnectionAndExecuteLogic(request: IQueryRequest) {\n        if (request.name === 'init_db') {\n            this.executeLogic(request);\n        }\n        else {\n            switch (IdbHelper.dbStatus.conStatus) {\n                case CONNECTION_STATUS.Connected: this.executeLogic(request); break;\n                case CONNECTION_STATUS.NotStarted:\n                    setTimeout(() => {\n                        this.checkConnectionAndExecuteLogic(request);\n                    }, 100); break;\n                case CONNECTION_STATUS.Closed:\n                    if (IdbHelper.isDbDeletedByBrowser) {\n                        this.createDb(() => {\n                            IdbHelper.isDbDeletedByBrowser = false;\n                            this.checkConnectionAndExecuteLogic(request);\n                        }, (err) => {\n                            console.error(err);\n                        });\n                    }\n            }\n        }\n    }\n\n    private returnResult(result) {\n        this.onQueryFinished(result);\n    }\n\n    private executeLogic(request: IQueryRequest) {\n        const onSuccess = (results?) => {\n            this.returnResult({\n                returnedValue: results\n            } as IQueryResult);\n        };\n        const onError = (err) => {\n            this.returnResult({\n                errorDetails: err,\n                errorOccured: true\n            } as IQueryResult);\n        };\n\n        switch (request.name) {\n            case 'get':\n                this.get(request.query, onSuccess, onError);\n                break;\n            case 'set': this.set(request.query, onSuccess, onError);\n                break;\n            case 'remove': this.remove(request.query, onSuccess, onError);\n                break;\n            case 'init_db': this.createDb(onSuccess, onError); break;\n            case 'close_db': this.closeDb(onSuccess, onError); break;\n        }\n    }\n\n    set(query: IInsert, onSuccess: (result) => void, onError: (err: IError) => void) {\n        const insertInstance = new Set(query, onSuccess, onError);\n        insertInstance.execute();\n    }\n\n    remove(key: string, onSuccess: (result) => void, onError: (err: IError) => void) {\n        const deleteInstance = new Remove(key, onSuccess, onError);\n        deleteInstance.execute();\n    }\n\n    get(key: string, onSuccess: (result) => void, onError: (err: IError) => void) {\n        const getInstance = new Get(key, onSuccess, onError);\n        getInstance.execute();\n    }\n\n    createDb(onSuccess: () => void, onError: (err: IError) => void) {\n        const dbName = \"KeyStore\";\n        const initDbInstance = new InitDb(dbName, onSuccess, onError);\n    }\n\n    closeDb(onSuccess: () => void, onError: (err: IError) => void) {\n        if (IdbHelper.dbStatus.conStatus === CONNECTION_STATUS.Connected) {\n            IdbHelper.dbStatus.conStatus = CONNECTION_STATUS.Closed;\n            IdbHelper.dbConnection.close();\n        }\n        onSuccess();\n    }\n}","import { IQueryResult, IQueryRequest } from \"./interfaces\";\nimport { Main } from \"./business/main_logic\";\nimport { promise } from \"../helpers/index\";\n\nexport class QueryExecutor {\n    static requestQueue: IQueryRequest[] = [];\n    static tableName = \"LocalStore\";\n    static columnName = \"Key\";\n    static isCodeExecuting = false;\n    static prcoessQuery<T>(request: IQueryRequest) {\n        return promise<T>((resolve, reject) => {\n            request.onSuccess = (result) => {\n                resolve(result);\n            };\n            request.onError = (error) => {\n                if (process.env.NODE_ENV === 'dev') {\n                    console.error(error);\n                }\n                reject(error);\n            };\n            this.requestQueue.push(request);\n            this.executeCode();\n        });\n    }\n\n    static executeCode() {\n        if (!this.isCodeExecuting && this.requestQueue.length > 0) {\n            this.isCodeExecuting = true;\n            const request: IQueryRequest = {\n                name: this.requestQueue[0].name,\n                query: this.requestQueue[0].query\n            } as IQueryRequest;\n            new Main(this.onQueryFinished.bind(this)).checkConnectionAndExecuteLogic(request);\n        }\n    }\n\n    static onQueryFinished(message: IQueryResult) {\n        const finishedRequest: IQueryRequest = this.requestQueue.shift();\n        this.isCodeExecuting = false;\n        if (message.errorOccured) {\n            finishedRequest.onError(message.errorDetails);\n        }\n        else {\n            finishedRequest.onSuccess(message.returnedValue);\n        }\n        this.executeCode();\n    }\n}\n","import { QueryExecutor } from './query_executor';\nimport { IQueryRequest, IError, IInsert } from \"./interfaces\";\n\nexport class KeyStore {\n    /**\n     * Initialize KeyStore\n     * \n     */\n    static init = () => {\n        if (indexedDB) {\n            return QueryExecutor.prcoessQuery({\n                name: 'init_db',\n                query: null\n            } as IQueryRequest);\n        }\n    };\n\n    static close = () => {\n        return QueryExecutor.prcoessQuery({\n            name: 'close_db',\n            query: null\n        } as IQueryRequest);\n    };\n\n    /**\n     * return the value by key\n     * \n     * @param {string} key \n     * @param {(result) => void} onSuccess \n     * @param {(err: IError) => void} [onError=null] \n     * @returns \n     */\n    static get = <T>(key: string) => {\n        return QueryExecutor.prcoessQuery<T>({\n            name: 'get',\n            query: key\n        });\n    };\n\n    /**\n     * insert or update value\n     * \n     * @param {any} key \n     * @param {any} value \n     * @param {(result) => void} [onSuccess] \n     * @param {(err: IError) => void} [onError] \n     * @returns \n     */\n    static set = (key, value) => {\n        const query = {\n            Key: key,\n            Value: value\n        } as IInsert;\n        return QueryExecutor.prcoessQuery({\n            name: 'set',\n            query: query\n        } as IQueryRequest);\n    };\n\n    /**\n     * delete value\n     * \n     * @param {string} key \n     * @param {(result) => void} [onSuccess=null] \n     * @param {(err: IError) => void} [onError=null] \n     * @returns \n     */\n    static remove = (key: string) => {\n        return QueryExecutor.prcoessQuery({\n            name: 'remove',\n            query: key\n        } as IQueryRequest);\n    };\n}\n\n\n","export class Config {\n    static isLogEnabled = false;\n    static isRuningInWorker = false;\n}","import { Base } from \"./base\";\nimport { IError } from \"../../common/index\";\nimport { Column } from \"../model/index\";\nimport { KeyStore } from \"../keystore/index\";\n\nexport class Clear extends Base {\n    constructor(tableName: string, onSuccess: () => void, onError: (err: IError) => void) {\n        super();\n        this.query = tableName;\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute() {\n        this.createTransaction([this.query], () => {\n            if (this.error == null) {\n                this.onSuccess();\n            }\n            else {\n                this.onError(this.error);\n            }\n        });\n        const clearRequest: IDBRequest = this.transaction.objectStore(this.query).clear();\n        clearRequest.onsuccess = (e) => {\n            const currentTable = this.getTable(this.query);\n            currentTable.columns.forEach((column: Column) => {\n                if (column.autoIncrement) {\n                    KeyStore.set(`JsStore_${this.activeDb.name}_${this.query}_${column.name}_Value`, 0);\n                }\n            });\n        };\n\n        clearRequest.onerror = this.onErrorOccured;\n    }\n}","import { TableHelper, Column } from \"../model/index\";\nimport { IError, CONNECTION_STATUS } from \"../../common/index\";\nimport { KeyStore } from \"../keystore/index\";\nimport { BaseDb } from \"./base_db\";\nimport { promise } from \"../helpers/index\";\n\nexport class InitDb extends BaseDb {\n    onSuccess: (isDbCreated: boolean) => void;\n\n    constructor(onSuccess: (isDbCreated: boolean) => void, onError: (err: IError) => void) {\n        super();\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute(tablesMetaData: TableHelper[]) {\n        const listofTableCreated = [];\n        const dbRequest = indexedDB.open(this.dbName, this.dbVersion);\n        let isDbCreated = false;\n        dbRequest.onerror = (event) => {\n            if (this.onError != null) {\n                this.onError((event as any).target.error);\n            }\n        };\n\n        dbRequest.onsuccess = (event) => {\n            this.dbStatus.conStatus = CONNECTION_STATUS.Connected;\n            this.dbConnection = dbRequest.result;\n            (this.dbConnection as any).onclose = this.onDbClose.bind(this);\n\n            this.dbConnection.onversionchange = this.onDbVersionChange.bind(this);\n            this.dbConnection.onerror = this.onDbConError.bind(this);\n\n            if (isDbCreated) {\n                // save in database list\n                this.savedbNameIntoDbList_().then(() => {\n                    if (this.onSuccess != null) {\n                        this.onSuccess(isDbCreated);\n                    }\n                });\n            }\n            else {\n                this.setPrimaryKey_();\n                this.onSuccess(isDbCreated);\n            }\n        };\n\n        dbRequest.onupgradeneeded = (event) => {\n            isDbCreated = true;\n            const dbConnection = (event as any).target.result;\n            const createObjectStore = (item: TableHelper, index) => {\n                try {\n                    let store: IDBObjectStore;\n                    if (item.primaryKey.length > 0) {\n                        this.activeDb.tables[index].primaryKey = item.primaryKey;\n                        store = dbConnection.createObjectStore(item.name, {\n                            keyPath: item.primaryKey\n                        });\n                    }\n                    else {\n                        store = dbConnection.createObjectStore(item.name, {\n                            autoIncrement: true\n                        });\n                    }\n                    item.columns.forEach((column: Column) => {\n                        if (column.enableSearch === true) {\n                            const options = column.primaryKey ? { unique: true } : { unique: column.unique };\n                            options['multiEntry'] = column.multiEntry;\n                            const keyPath = column.keyPath == null ? column.name : column.keyPath;\n                            store.createIndex(column.name, keyPath, options);\n                            if (column.autoIncrement) {\n                                KeyStore.set(`JsStore_${this.dbName}_${item.name}_${column.name}_Value`, 0);\n                            }\n                        }\n                    });\n                    listofTableCreated.push(item.name);\n                    // setting the table version\n                    KeyStore.set(`JsStore_${this.dbName}_${item.name}_Version`, item.version);\n                }\n                catch (e) {\n                    console.error(e);\n                }\n            };\n            tablesMetaData.forEach((item: TableHelper, index) => {\n                if (item.requireDelete) {\n                    // Delete the old datastore.    \n                    if (dbConnection.objectStoreNames.contains(item.name)) {\n                        dbConnection.deleteObjectStore(item.name);\n                    }\n                    createObjectStore(item, index);\n                }\n                else if (item.requireCreation) {\n                    createObjectStore(item, index);\n                }\n            });\n        };\n    }\n\n    private savedbNameIntoDbList_() {\n        return promise((res, rej) => {\n            this.getDbList().then(dbList => {\n                if (dbList.indexOf(this.dbName) < 0) {\n                    dbList.push(this.dbName);\n                    this.setDbList(dbList).then(res).catch(rej);\n                }\n                else {\n                    res();\n                }\n            }).catch(rej);\n        });\n    }\n\n    private setPrimaryKey_() {\n        this.activeDb.tables.forEach((table, index) => {\n            table.columns.every(item => {\n                this.activeDb.tables[index].primaryKey = item.primaryKey ? item.name : \"\";\n                return !item.primaryKey;\n            });\n        });\n    }\n}\n","import { Table } from \"./table\";\nimport { Column } from \"./column\";\nimport { KeyStore } from \"../keystore/index\";\nimport { IdbHelper } from \"../business/index\";\nimport { promise } from \"../helpers/index\";\n\nexport class TableHelper {\n    name: string;\n    columns: Column[] = [];\n\n    // internal Members\n    primaryKey: string;\n    version: number;\n    requireDelete = false;\n    requireCreation = false;\n    private callback_: (tableHelperObj: TableHelper) => void;\n\n    constructor(table: Table) {\n        this.name = table.name;\n        this.version = table.version;\n        this.columns = table.columns;\n        this.setPrimaryKey_();\n    }\n\n    createMetaData(dbName: string): Promise<TableHelper> {\n        return promise((resolve) => {\n            this.callback_ = resolve;\n            this.setRequireDelete_(dbName);\n            this.setDbVersion_(dbName);\n        });\n    }\n\n    private setPrimaryKey_() {\n        this.columns.every((item) => {\n            this.primaryKey = item.primaryKey ? item.name : \"\";\n            return !item.primaryKey;\n        });\n    }\n\n    private setRequireDelete_(dbName: string) {\n        KeyStore.get<number>(`JsStore_${dbName}_${this.name}_Version`).then(tableVersion => {\n            if (tableVersion == null) {\n                this.requireCreation = true;\n            }\n            // mark only table which has version greater than store version\n            else if (tableVersion < this.version) {\n                this.requireDelete = true;\n            }\n        });\n    }\n\n    private setDbVersion_(dbName: string) {\n        IdbHelper.activeDbVersion = IdbHelper.activeDbVersion > this.version ? IdbHelper.activeDbVersion : this.version;\n        // setting db version\n        KeyStore.set(`JsStore_${dbName}_Db_Version`, IdbHelper.activeDbVersion);\n        // setting table version\n        KeyStore.set(`JsStore_${dbName}_${this.name}_Version`, IdbHelper.activeDbVersion).then(() => {\n            this.version = IdbHelper.activeDbVersion;\n            this.callback_(this);\n        });\n    }\n}","import { DataBase } from \"./database\";\nimport { TableHelper } from \"./table_helper\";\nimport { Table } from \"./table\";\nimport { promiseAll } from \"../helpers/index\";\n\nexport class DbHelper {\n    dbName: string;\n    tables: Table[] = [];\n\n    constructor(dataBase: DataBase) {\n        this.dbName = dataBase.name;\n        this.tables = dataBase.tables;\n    }\n\n    createMetaData() {\n        return promiseAll(\n            this.tables.map((table) => {\n                return new TableHelper(table).createMetaData(this.dbName);\n            })\n        );\n    }\n}","import { IColumnOption } from \"../../common/index\";\n\nexport class Column implements IColumnOption {\n    name: string;\n    autoIncrement: boolean;\n    primaryKey: boolean;\n    unique: boolean;\n    notNull: boolean;\n    dataType: string;\n    default;\n    multiEntry: boolean;\n    enableSearch: boolean;\n    keyPath: string[];\n\n    constructor(key: Column) {\n        this.name = key.name;\n        this.autoIncrement = key.autoIncrement != null ? key.autoIncrement : false;\n        this.primaryKey = key.primaryKey != null ? key.primaryKey : false;\n        this.unique = key.unique != null ? key.unique : false;\n        this.notNull = key.notNull != null ? key.notNull : false;\n        this.dataType = key.dataType != null ? key.dataType : (key.autoIncrement ? 'number' : null);\n        this.default = key.default;\n        this.multiEntry = key.multiEntry == null ? false : key.multiEntry;\n        this.enableSearch = key.enableSearch == null ? true : key.enableSearch;\n        this.keyPath = key.keyPath;\n    }\n\n}","import { Column } from \"./column\";\nimport { ITable } from \"../../common/index\";\n\nexport class Table {\n    name: string;\n    columns: Column[] = [];\n    version: number;\n    primaryKey: string;\n\n    constructor(table: ITable) {\n        this.name = table.name;\n        this.version = table.version == null ? 1 : table.version;\n        for (const columnName in table.columns) {\n            const column = {\n                name: columnName\n            } as Column;\n\n            for (const feature in table.columns[columnName]) {\n                const value = table.columns[columnName][feature];\n                switch (feature) {\n                    case 'primaryKey':\n                    case 'autoIncrement':\n                    case 'unique':\n                    case 'dataType':\n                    case 'enableSearch':\n                    case 'keyPath':\n                    case 'multiEntry':\n                    case 'default':\n                    case 'notNull':\n                        column[feature] = value as never; break;\n                }\n            }\n            this.columns.push(new Column(column));\n        }\n    }\n}","\nimport { Table } from \"./table\";\nimport { IDataBase } from \"../../common/index\";\n \nexport class DataBase {\n    name: string;\n    tables: Table[] = [];\n\n    constructor(dataBase: IDataBase) {\n        this.name = dataBase.name;\n        dataBase.tables.forEach((item) => {\n            this.tables.push(new Table(item));\n        });\n    }\n}\n","import * as Select from '../select/index';\nimport { SelectQuery, IError } from '../../../common/index';\nimport { Base } from '../base';\n\n\nexport class Union extends Base {\n    execute(query: SelectQuery[], onSuccess: (results: object[]) => void, onError: (err: IError) => void) {\n        let index = 0;\n        const hashMap = {};\n        let isQueryForSameTable = true;\n        const queryLength = query.length;\n        query.every((qry, i) => {\n            if (i + 1 < queryLength && qry.from !== query[i + 1].from) {\n                isQueryForSameTable = false;\n                return false;\n            }\n            return true;\n        });\n        let getHashKey;\n        if (isQueryForSameTable) {\n            const pKey = this.getPrimaryKey(query[0].from);\n            getHashKey = (val) => {\n                return val[pKey];\n            };\n        }\n        else {\n            getHashKey = (val) => {\n                let columnValKey = \"\";\n                for (const key in val) {\n                    columnValKey += val[key];\n                }\n                return columnValKey;\n            };\n        }\n\n        const fetchData = () => {\n            if (index < query.length) {\n                new Select.Instance(query[index++], (selectResult) => {\n                    selectResult.forEach(val => {\n                        hashMap[getHashKey(val)] = val;\n                    });\n                    fetchData();\n                }, onError).execute();\n            }\n            else {\n                const results = [];\n                for (const key in hashMap) {\n                    results.push(hashMap[key]);\n                }\n                onSuccess(results);\n            }\n        };\n        fetchData();\n    }\n\n\n}","import * as Select from '../select/index';\nimport { IError, IntersectQuery } from '../../../common/index';\nimport { Helper } from '../select/orderby_helper';\n\n\nexport class Intersect extends Helper {\n    execute(intersectQry: IntersectQuery, onSuccess: (results: object[]) => void, onError: (err: IError) => void) {\n        this.query = intersectQry as any;\n        let index = 0;\n        let hashMap = {};\n        let hashMapTemp = {};\n        let isQueryForSameTable = true;\n        const query = intersectQry.queries;\n        const queryLength = query.length;\n        query.every((qry, i) => {\n            if (i + 1 < queryLength && qry.from !== query[i + 1].from) {\n                isQueryForSameTable = false;\n                return false;\n            }\n            return true;\n        });\n        let getHashKey;\n        if (isQueryForSameTable) {\n            const pKey = this.getPrimaryKey(query[0].from);\n            getHashKey = (val) => {\n                return val[pKey];\n            };\n        }\n        else {\n            getHashKey = (val) => {\n                let columnValKey = \"\";\n                for (const key in val) {\n                    columnValKey += val[key];\n                }\n                return columnValKey;\n            };\n        }\n\n\n        const fetchData = () => {\n            if (index < queryLength) {\n                new Select.Instance(query[index], (selectResult) => {\n                    hashMap = {};\n                    selectResult.forEach(val => {\n                        const columnValKey = getHashKey(val);\n                        if (index === 0) {\n                            hashMapTemp[columnValKey] = val;\n                        } else if (hashMapTemp[columnValKey] != null) {\n                            hashMap[columnValKey] = val;\n                        }\n                    });\n                    if (index > 0) {\n                        hashMapTemp = { ...hashMap };\n                    }\n\n                    ++index;\n                    fetchData();\n                }, onError).execute();\n            }\n            else {\n                const results = [];\n                let resultPusher: (key: string) => void;\n                let skip = intersectQry.skip;\n                const limit = intersectQry.limit;\n                const onFinished = () => {\n                    this.results = results;\n                    this.query.join = {} as any;\n                    this.processOrderBy();\n                    this.processGroupDistinctAggr();\n                    onSuccess(this.results);\n                };\n                let shouldStopLoop = false;\n                let key: string;\n                const pushResult = () => {\n                    results.push(hashMap[key]);\n                };\n                const checkLimitAndPush = () => {\n                    if (results.length < limit) {\n                        pushResult();\n                    }\n                    else {\n                        shouldStopLoop = true;\n                    }\n                };\n                const skipChecker = (callBack: () => void) => {\n                    if (skip === 0) {\n                        callBack();\n                    }\n                    else {\n                        --skip;\n                    }\n                };\n                if (intersectQry.skip && intersectQry.limit) {\n                    resultPusher = () => {\n                        skipChecker(() => {\n                            checkLimitAndPush();\n                        });\n                    };\n\n                }\n                else if (intersectQry.limit) {\n                    resultPusher = checkLimitAndPush;\n                }\n                else if (intersectQry.skip) {\n                    resultPusher = () => {\n                        skipChecker(() => {\n                            pushResult();\n                        });\n                    };\n                }\n                else {\n                    resultPusher = () => {\n                        pushResult();\n                    };\n                }\n                if (limit) {\n                    for (key in hashMap) {\n                        resultPusher(key);\n                        if (shouldStopLoop) {\n                            break;\n                        }\n                    }\n                }\n                else {\n                    for (key in hashMap) {\n                        resultPusher(key);\n                    }\n                }\n                onFinished();\n            }\n        };\n        fetchData();\n    }\n}","import { IdbHelper, DropDb, InitDb, Clear, QueryHelper } from \"./business/index\";\nimport * as Select from './business/select/index';\nimport * as Count from './business/count/index';\nimport * as Insert from './business/insert/index';\nimport * as Remove from './business/remove/index';\nimport * as Update from './business/update/index';\nimport * as Transaction from \"./business/transaction/index\";\nimport { LogHelper } from \"./log_helper\";\nimport {\n    UpdateQuery, InsertQuery, RemoveQuery, SelectQuery, CountQuery, SetQuery,\n    CONNECTION_STATUS, ERROR_TYPE, DATA_TYPE, API,\n    WebWorkerResult, WebWorkerRequest, IDataBase, IError\n} from \"../common/index\";\nimport { Config } from \"./config\";\nimport { KeyStore } from \"./keystore/index\";\nimport { TableHelper, DbHelper, DataBase } from \"./model/index\";\nimport { promise } from \"./helpers/index\";\nimport { getDataType } from \"./utils/index\";\nimport { Union } from './business/union/index';\nimport { Intersect } from \"./business/intersect/index\";\nexport class QueryExecutor {\n    static isTransactionQuery = false;\n    onQueryFinished: (result: any) => void;\n\n    constructor(fn?: (result: any) => void) {\n        this.onQueryFinished = fn;\n        QueryHelper.autoIncrementValues = {};\n    }\n\n    checkConnectionAndExecuteLogic(request: WebWorkerRequest) {\n        LogHelper.log('request executing:' + request.name);\n        switch (request.name) {\n            case API.InitDb:\n            case API.IsDbExist:\n            case API.GetDbVersion:\n            case API.GetDbList:\n            case API.GetDbSchema:\n            case API.Get:\n            case API.Set:\n            case API.ChangeLogStatus:\n            case API.Terminate:\n            case API.OpenDb:\n            case API.InitKeyStore:\n            case API.CloseDb:\n                const err = this.checkForIdbSupport_();\n                if (err == null) {\n                    this.executeLogic_(request);\n                }\n                else {\n                    this.returnResult_({\n                        errorDetails: err,\n                        errorOccured: true\n                    } as WebWorkerResult);\n                }\n                break;\n            default:\n                switch (this.dbStatus_.conStatus) {\n                    case CONNECTION_STATUS.Connected: {\n                        this.executeLogic_(request);\n                    } break;\n                    case CONNECTION_STATUS.Closed: {\n                        if (this.isDbDeletedByBrowser_ === true) {\n                            this.initDb_(null, () => {\n                                this.isDbDeletedByBrowser_ = false;\n                                this.checkConnectionAndExecuteLogic(request);\n                            }, request.onError);\n                        }\n                        else {\n                            this.initDb_(this.activeDb_ as any, () => {\n                                this.checkConnectionAndExecuteLogic(request);\n                            }, request.onError);\n                        }\n                    } break;\n\n                }\n        }\n    }\n\n    private changeLogStatus_(status: boolean, onSuccess, onError) {\n        Config.isLogEnabled = status;\n        onSuccess();\n    }\n\n    private returnResult_(result) {\n        if (Config.isRuningInWorker === true) {\n            (self as any).postMessage(result);\n        }\n        else {\n            this.onQueryFinished(result);\n        }\n\n    }\n\n    private executeLogic_(request: WebWorkerRequest) {\n        const onSuccess = (results?) => {\n            this.returnResult_({\n                returnedValue: results\n            } as WebWorkerResult);\n        };\n        const onError = (err) => {\n            this.returnResult_({\n                errorDetails: err,\n                errorOccured: true\n            } as WebWorkerResult);\n        };\n\n        QueryExecutor.isTransactionQuery = request.name === API.Transaction;\n        switch (request.name) {\n            case API.InitDb:\n                if (this.isDbDeletedByBrowser_ === true) {\n                    this.initDb_(null, () => {\n                        this.isDbDeletedByBrowser_ = false;\n                        onSuccess();\n                    }, onError);\n                }\n                else {\n                    this.initDb_(request.query as IDataBase, onSuccess, onError);\n                }\n                break;\n            case API.OpenDb:\n                this.openDb_(request.query, onSuccess, onError); break;\n            case API.Select:\n                new Select.Instance(request.query as SelectQuery, onSuccess, onError).execute();\n                break;\n            case API.Insert: new Insert.Instance(request.query as InsertQuery, onSuccess, onError).execute();\n                break;\n            case API.Update:\n                new Update.Instance(request.query as UpdateQuery, onSuccess, onError).execute();\n                break;\n            case API.Remove:\n                new Remove.Instance(request.query as RemoveQuery, onSuccess, onError).execute();\n                break;\n            case API.IsDbExist: this.isDbExist_(request.query, onSuccess, onError);\n                break;\n            case API.GetDbVersion:\n                this.getDbVersion_(request.query as string).then(onSuccess).catch(onError);\n                break;\n            case API.GetDbList:\n                this.getDbList_().then(onSuccess).catch(onError);\n                break;\n            case API.GetDbSchema:\n                this.getDbSchema_(request.query as string).then(onSuccess).catch(onError);\n                break;\n            case API.Clear: new Clear(request.query as string, onSuccess, onError).execute();\n                break;\n            case API.DropDb: this.dropDb_(onSuccess, onError);\n                break;\n            case API.Count:\n                new Count.Instance(request.query as CountQuery, onSuccess, onError).execute();\n                break;\n            case API.Get: this.get_(request.query as string).then(onSuccess).catch(onError);\n                break;\n            case API.Set: this.set_(request.query as SetQuery).then(onSuccess).catch(onError);\n                break;\n            case API.ChangeLogStatus:\n                this.changeLogStatus_(request.query as boolean, onSuccess, onError);\n                break;\n            case API.Transaction: new Transaction.Instance(request.query, onSuccess, onError).execute();\n                break;\n            case API.CloseDb:\n            case API.Terminate:\n                this.terminate_(onSuccess, onError);\n                break;\n            case API.Union:\n                new Union().execute(request.query, onSuccess, onError);\n                break;\n            case API.InitKeyStore:\n                this.initKeyStore_(onSuccess);\n                break;\n            case API.Intersect:\n                new Intersect().execute(request.query, onSuccess, onError);\n                break;\n            default:\n                if (process.env.NODE_ENV === 'dev') {\n                    console.error('The Api:-' + request.name + ' does not support.');\n                }\n        }\n    }\n\n    private openDb_(dbName: string, onSuccess, onError) {\n        if (this.activeDb_ != null && this.activeDb_.name === dbName) {\n            this.processCreateDb(this.activeDb_).then(onSuccess).catch(onError);\n        }\n        else {\n            this.getDbSchema_(dbName).then((db) => {\n                if (db != null) {\n                    this.processCreateDb(db).then(onSuccess).catch(onError);\n                }\n                else {\n                    onError(new LogHelper(ERROR_TYPE.DbNotExist, { dbName: dbName }).get());\n                }\n            }).catch(onError);\n        }\n    }\n\n    private initKeyStore_(onSuccess) {\n        KeyStore.init().then(onSuccess()).catch(() => {\n            IdbHelper.dbStatus = {\n                conStatus: CONNECTION_STATUS.UnableToStart,\n                lastError: ERROR_TYPE.IndexedDbNotSupported,\n            };\n        });\n    }\n\n    private getDbSchema_(dbName: string) {\n        return IdbHelper.getDbSchema(dbName);\n    }\n\n    private terminate_(onSuccess: () => void, onError: (err: IError) => void) {\n        KeyStore.close().then(() => {\n            this.closeDb_();\n            onSuccess();\n        });\n    }\n\n    private get isDbDeletedByBrowser_() {\n        return IdbHelper.isDbDeletedByBrowser;\n    }\n\n    private set isDbDeletedByBrowser_(value) {\n        IdbHelper.isDbDeletedByBrowser = value;\n    }\n\n    private getDbList_() {\n        return IdbHelper.getDbList();\n    }\n\n    private get activeDb_() {\n        return IdbHelper.activeDb;\n    }\n\n    private set activeDb_(value) {\n        IdbHelper.activeDb = value;\n    }\n\n    private closeDb_() {\n        if (IdbHelper.dbStatus.conStatus === CONNECTION_STATUS.Connected) {\n            IdbHelper.dbStatus.conStatus = CONNECTION_STATUS.ClosedByJsStore;\n            IdbHelper.dbConnection.close();\n        }\n    }\n\n    private dropDb_(onSuccess: () => void, onError: (err: IError) => void) {\n        this.closeDb_();\n        new DropDb(onSuccess, onError).deleteDb();\n    }\n\n\n\n    private processCreateDb(db: DataBase) {\n        return promise((res, rej) => {\n            // create meta data\n            const dbHelper = new DbHelper(db);\n            dbHelper.createMetaData().then((tablesMetaData: TableHelper[]) => {\n                this.activeDb_ = db;\n                const createDbInstance = new InitDb((isDbCreated) => {\n                    this.activeDb_ = db;\n                    if (isDbCreated) {\n                        // save dbSchema in keystore\n                        KeyStore.set(\"JsStore_\" + db.name + \"_Schema\", db);\n                    }\n                    res(isDbCreated);\n                }, rej);\n                createDbInstance.execute(tablesMetaData);\n            });\n        });\n    }\n\n    private initDb_(\n        dataBase: IDataBase, onSuccess: () => void, onError: (err: IError) => void\n    ) {\n        if (dataBase == null) {\n            this.processCreateDb(this.activeDb_);\n        }\n        else {\n            this.closeDb_();\n            this.getDbVersion_(dataBase.name).then(version => {\n                this.activeDbVersion_ = version ? version : 1;\n                this.processCreateDb(new DataBase(dataBase)).then(onSuccess).catch(onError);\n            }).catch(onError);\n        }\n\n    }\n\n    private get activeDbVersion_() {\n        return IdbHelper.activeDbVersion;\n    }\n\n    private set activeDbVersion_(value) {\n        IdbHelper.activeDbVersion = value;\n    }\n\n    private getDbVersion_(dbName: string) {\n        return IdbHelper.getDbVersion(dbName);\n    }\n\n    private get dbStatus_() {\n        return IdbHelper.dbStatus;\n    }\n\n    private checkForIdbSupport_() {\n        if (this.dbStatus_.conStatus === CONNECTION_STATUS.UnableToStart) {\n            const error = {\n                type: this.dbStatus_.lastError,\n            } as IError;\n            switch (error.type) {\n                case ERROR_TYPE.IndexedDbNotSupported:\n                    error.message = \"Browser does not support IndexedDB\"; break;\n                default:\n                    error.message = \"unknown error occured\";\n            }\n            return error;\n        }\n    }\n\n    private isDbExist_(dbInfo, onSuccess: (isExist: boolean) => void, onError: (err: IError) => void) {\n        if (getDataType(dbInfo) === DATA_TYPE.String) {\n            this.getDbVersion_(dbInfo).then(function (dbVersion) {\n                onSuccess(Boolean(dbVersion));\n            });\n        }\n        else {\n            this.getDbVersion_(dbInfo.dbName).then(function (dbVersion) {\n                onSuccess(dbInfo.table.version <= dbVersion);\n            });\n        }\n    }\n\n    private get_(key: string) {\n        return KeyStore.get(key);\n    }\n\n    private set_(query: SetQuery) {\n        return KeyStore.set(query.key, query.value);\n    }\n}","import { Base } from \"./base\";\n\nexport class WhereBase extends Base {\n    protected results: any[] = [];\n\n    protected onQueryFinished() {\n        // virtual\n    }\n}","export const promise = <T>(callBack: (resolve, reject) => void) => {\n    return new Promise<T>(callBack);\n};","export const promiseAll = <T>(promises: any) => {\n    return Promise.all<T>(promises);\n};","import { IdbHelper } from \"./idb_helper\";\nimport { CONNECTION_STATUS, ERROR_TYPE, IError } from \"../../common/index\";\nexport class BaseDb {\n\n    onError: (err: IError) => void;\n    protected get dbName() {\n        return IdbHelper.activeDb.name;\n    }\n\n    protected get dbStatus() {\n        return IdbHelper.dbStatus;\n    }\n\n    protected set dbStatus(value) {\n        IdbHelper.dbStatus = value;\n    }\n\n\n    protected set dbConnection(value) {\n        IdbHelper.dbConnection = value;\n    }\n\n    protected get dbConnection() {\n        return IdbHelper.dbConnection;\n    }\n\n    protected updateDbStatus(status: CONNECTION_STATUS, err?: ERROR_TYPE) {\n        IdbHelper.updateDbStatus(status, err);\n    }\n\n    protected onDbDroppedByBrowser(deleteMetaData?: boolean) {\n        IdbHelper.callDbDroppedByBrowser(deleteMetaData);\n    }\n\n    protected get dbVersion() {\n        return parseInt(IdbHelper.activeDbVersion as any);\n    }\n\n    protected get activeDb() {\n        return IdbHelper.activeDb;\n    }\n\n    protected getDbList() {\n        return IdbHelper.getDbList();\n    }\n\n    protected setDbList(value) {\n        return IdbHelper.setDbList(value);\n    }\n\n\n    protected onDbClose(event) {\n        this.onDbDroppedByBrowser();\n        this.updateDbStatus(CONNECTION_STATUS.Closed, ERROR_TYPE.ConnectionClosed);\n    }\n\n    protected onDbVersionChange(e: IDBVersionChangeEvent) {\n        if (e.newVersion === null) { // An attempt is made to delete the db\n            (e.target as any).close(); // Manually close our connection to the db\n            this.onDbDroppedByBrowser(true);\n            this.updateDbStatus(CONNECTION_STATUS.Closed, ERROR_TYPE.ConnectionClosed);\n        }\n    }\n\n    protected onDbConError(e) {\n        IdbHelper.dbStatus.lastError = (\"Error occured in connection :\" + (e.target as any).result) as any;\n    }\n}","import { QUERY_OPTION, CaseOption } from \"../../../common/index\";\n\nexport class ThenEvaluator {\n    private columnName_: string;\n    private value;\n    private caseQuery_: { [columnName: string]: [CaseOption] };\n    private caseColumnQuery_: CaseOption[];\n    private length_: number;\n\n    setCaseAndValue(caseQuery: any, value) {\n        this.caseQuery_ = caseQuery;\n        this.setValue(value);\n    }\n\n    setCaseAndColumn(caseQuery: { [columnName: string]: [CaseOption] }, columnName: string) {\n        this.caseQuery_ = caseQuery;\n        this.setColumn(columnName);\n        return this;\n    }\n\n    setColumn(columnName: string) {\n        this.columnName_ = columnName;\n        this.caseColumnQuery_ = this.caseQuery_[this.columnName_];\n        this.length_ = this.caseColumnQuery_.length;\n        return this;\n    }\n\n    setValue(value) {\n        this.value = value;\n        return this;\n    }\n\n    evaluate() {\n        for (let i = 0; i < this.length_; i++) {\n            if (this.checkCase_(this.caseColumnQuery_[i]) === true) {\n                return this.caseColumnQuery_[i].then;\n            }\n        }\n        const lastThen = this.caseColumnQuery_[this.length_ - 1].then;\n        return lastThen == null ? this.value[this.columnName_] : lastThen;\n    }\n\n    private checkCase_(cond: CaseOption) {\n        let queryOption;\n        for (queryOption in cond) {\n            switch (queryOption) {\n                case QUERY_OPTION.GreaterThan:\n                    if (this.value[this.columnName_] > cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.Equal:\n                    if (this.value[this.columnName_] === cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.LessThan:\n                    if (this.value[this.columnName_] < cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.GreaterThanEqualTo:\n                    if (this.value[this.columnName_] >= cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.LessThanEqualTo:\n                    if (this.value[this.columnName_] <= cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.NotEqualTo:\n                    if (this.value[this.columnName_] !== cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.Between:\n                    if (this.value[this.columnName_] > cond[queryOption].low && this.value[this.columnName_] < cond[queryOption].high) {\n                        return true;\n                    } break;\n            }\n            return false;\n        }\n    }\n}","import { WhereBase } from \"../where_base\";\nimport { SelectQuery, CaseOption, QUERY_OPTION } from \"../../../common/index\";\nimport { ThenEvaluator } from \"./then_evaluator\";\n\n\nexport class BaseSelect extends WhereBase {\n    sorted = false;\n    isOr: boolean;\n    isArrayQry: boolean;\n    onWhereArrayQrySuccess: () => void;\n    query: SelectQuery;\n    orInfo: {\n        results?: any[];\n        orQuery: object\n    };\n\n    isSubQuery = false;\n\n    shouldEvaluateLimitAtEnd = false;\n    shouldEvaluateSkipAtEnd = false;\n\n    protected pushResult: (value) => void;\n\n    protected thenEvaluator = new ThenEvaluator();\n\n    protected setPushResult() {\n        if (this.query.case) {\n            this.pushResult = (value) => {\n                let columnName: string;\n                this.thenEvaluator.setCaseAndValue(this.query.case, value);\n                for (columnName in this.query.case) {\n                    value[columnName] = this.thenEvaluator.setColumn(columnName).evaluate();\n                }\n                this.results.push(value);\n            };\n        }\n        else {\n            this.pushResult = (value) => {\n                this.results.push(value);\n            };\n        }\n    }\n\n    protected removeDuplicates() {\n        let datas = this.results;\n        // free results memory\n        this.results = undefined;\n        const key = this.getPrimaryKey(this.query.from);\n        const lookupObject = {};\n        for (const i in datas) {\n            lookupObject[datas[i][key]] = datas[i];\n        }\n        // free datas memory\n        datas = [];\n        for (const i in lookupObject) {\n            datas.push(lookupObject[i]);\n        }\n        this.results = datas;\n    }\n}","import { BaseSelect } from \"./base_select\";\nimport { LogHelper } from \"../../log_helper\";\nimport { ERROR_TYPE } from \"../../../common/index\";\nlet cursorRequest: IDBRequest;\nexport class NotWhere extends BaseSelect {\n    protected executeWhereUndefinedLogic() {\n        if (this.query.order && this.query.order.idbSorting !== false && this.query.order.by) {\n            if (this.objectStore.indexNames.contains(this.query.order.by as string)) {\n                const orderType: IDBCursorDirection = this.query.order.type &&\n                    this.query.order.type.toLowerCase() === 'desc' ? 'prev' : 'next';\n                this.sorted = true;\n                cursorRequest = this.objectStore.index(this.query.order.by as string).\n                    openCursor(null, orderType);\n            }\n            else {\n                const error = new LogHelper(ERROR_TYPE.ColumnNotExist, { column: this.query.order.by, isOrder: true });\n                this.onErrorOccured(error, true);\n                return;\n            }\n        }\n        else {\n            cursorRequest = this.objectStore.openCursor();\n        }\n\n        cursorRequest.onerror = this.onErrorOccured;\n\n        if (this.shouldEvaluateLimitAtEnd === false && this.shouldEvaluateSkipAtEnd === false) {\n            if (this.skipRecord && this.limitRecord) {\n                this.executeSkipAndLimitForNoWhere_();\n            }\n            else if (this.skipRecord) {\n                this.executeSkipForNoWhere_();\n            }\n            else if (this.limitRecord) {\n                this.executeLimitForNotWhere_();\n            }\n            else {\n                this.executeSimpleForNotWhere_();\n            }\n        }\n        else {\n            this.executeSimpleForNotWhere_();\n        }\n    }\n\n    private executeSkipAndLimitForNoWhere_() {\n        let recordSkipped = false,\n            cursor: IDBCursorWithValue;\n        cursorRequest.onsuccess = (e) => {\n            cursor = (e as any).target.result;\n            if (cursor) {\n                if (recordSkipped && this.results.length !== this.limitRecord) {\n                    this.pushResult(cursor.value);\n                    cursor.continue();\n                }\n                else {\n                    recordSkipped = true;\n                    cursor.advance(this.skipRecord);\n                }\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSkipForNoWhere_() {\n        let recordSkipped = false,\n            cursor;\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (recordSkipped) {\n                    this.pushResult(cursor.value);\n                    cursor.continue();\n                }\n                else {\n                    recordSkipped = true;\n                    cursor.advance(this.skipRecord);\n                }\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSimpleForNotWhere_() {\n        let cursor;\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                this.pushResult(cursor.value);\n                (cursor as any).continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeLimitForNotWhere_() {\n        let cursor;\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor && this.results.length !== this.limitRecord) {\n                this.pushResult(cursor.value);\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n}\n","import { NotWhere } from \"./not_where\";\nimport { promiseAll, promise } from \"../../helpers/index\";\n\nlet shouldAddValue: () => boolean;\nlet skipOrPush: (val) => void;\nlet skip;\nlet cursor: IDBCursorWithValue;\nexport class In extends NotWhere {\n    protected executeInLogic(column, values) {\n        skip = this.skipRecord;\n        skipOrPush = (val) => {\n            if (skip === 0) {\n                this.pushResult(val);\n            }\n            else {\n                --skip;\n            }\n        };\n        shouldAddValue = () => {\n            return this.whereCheckerInstance.check(cursor.value);\n        };\n        if (this.shouldEvaluateLimitAtEnd === false && this.shouldEvaluateSkipAtEnd === false) {\n            if (this.skipRecord && this.limitRecord) {\n                this.executeSkipAndLimitForIn_(column, values);\n            }\n            else if (this.skipRecord) {\n                this.executeSkipForIn_(column, values);\n            }\n            else if (this.limitRecord) {\n                this.executeLimitForIn_(column, values);\n            }\n            else {\n                this.executeSimpleForIn_(column, values);\n            }\n        }\n        else {\n            this.executeSimpleForIn_(column, values);\n        }\n    }\n\n    private executeSkipAndLimitForIn_(column, values) {\n        let cursorRequest: IDBRequest;\n        const columnStore = this.objectStore.index(column);\n\n        const runInLogic: (val) => Promise<void> = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e: any) => {\n                    cursor = e.target.result;\n                    if (this.results.length !== this.limitRecord && cursor) {\n                        if (shouldAddValue()) {\n                            skipOrPush(cursor.value);\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n\n    private executeSkipForIn_(column, values) {\n\n        let cursorRequest: IDBRequest;\n        const columnStore = this.objectStore.index(column);\n        const runInLogic: (val) => Promise<void> = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e: any) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (shouldAddValue()) {\n                            skipOrPush((cursor.value));\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n\n    private executeLimitForIn_(column, values) {\n        let cursorRequest: IDBRequest;\n        const columnStore = this.objectStore.index(column);\n        const runInLogic = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e: any) => {\n                    cursor = e.target.result;\n                    if (cursor && this.results.length !== this.limitRecord) {\n                        if (shouldAddValue()) {\n                            this.pushResult(cursor.value);\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n\n    private executeSimpleForIn_(column, values) {\n        let cursorRequest: IDBRequest;\n        const columnStore = this.objectStore.index(column);\n        const runInLogic = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e: any) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (shouldAddValue()) {\n                            this.pushResult(cursor.value);\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n}","import { In } from \"./in\";\n\nlet shouldAddValue: () => boolean;\nlet skipOrPush: (val) => void;\nlet skip;\nlet cursor: IDBCursorWithValue;\nlet cursorRequest: IDBRequest;\nexport class Regex extends In {\n    protected executeRegexLogic(column, exp: RegExp) {\n\n        skip = this.skipRecord;\n        this.regexExpression = exp;\n        skipOrPush = (val) => {\n            if (skip === 0) {\n                this.pushResult(val);\n            }\n            else {\n                --skip;\n            }\n        };\n        shouldAddValue = () => {\n            return this.regexTest(cursor.key) &&\n                this.whereCheckerInstance.check(cursor.value);\n        };\n\n        cursorRequest = this.objectStore.index(column).openCursor();\n        cursorRequest.onerror = this.onErrorOccured;\n        if (this.shouldEvaluateLimitAtEnd === false && this.shouldEvaluateSkipAtEnd === false) {\n            if (this.skipRecord && this.limitRecord) {\n                this.executeSkipAndLimitForRegex_();\n            }\n            else if (this.skipRecord) {\n                this.executeSkipForRegex_();\n            }\n            else if (this.limitRecord) {\n                this.executeLimitForRegex_();\n            }\n            else {\n                this.executeSimpleForRegex_();\n            }\n        }\n        else {\n            this.executeSimpleForRegex_();\n        }\n    }\n\n    private executeSkipAndLimitForRegex_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (this.results.length !== this.limitRecord && cursor) {\n                if (shouldAddValue()) {\n                    skipOrPush(cursor.value);\n                }\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSkipForRegex_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (shouldAddValue()) {\n                    skipOrPush((cursor.value));\n                }\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeLimitForRegex_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (this.results.length !== this.limitRecord && cursor) {\n                if (shouldAddValue()) {\n                    this.pushResult(cursor.value);\n                }\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSimpleForRegex_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (shouldAddValue()) {\n                    this.pushResult(cursor.value);\n                }\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n}","import { Regex } from \"./regex\";\n\nlet shouldAddValue: () => boolean;\nlet cursor: IDBCursorWithValue;\nlet cursorRequest: IDBRequest;\nexport class Where extends Regex {\n\n    protected executeWhereLogic(column, value, op, dir) {\n        shouldAddValue = () => {\n            return this.whereCheckerInstance.check(cursor.value);\n        };\n        value = op ? value[op] : value;\n        cursorRequest = this.objectStore.index(column).openCursor(\n            this.getKeyRange(value, op),\n            dir\n        );\n\n        cursorRequest.onerror = this.onErrorOccured;\n\n        if (this.shouldEvaluateLimitAtEnd === false && this.shouldEvaluateSkipAtEnd === false) {\n            if (this.skipRecord && this.limitRecord) {\n                this.executeSkipAndLimitForWhere_();\n            }\n            else if (this.skipRecord) {\n                this.executeSkipForWhere_();\n            }\n            else if (this.limitRecord) {\n                this.executeLimitForWhere_();\n            }\n            else {\n                this.executeSimpleForWhere_();\n            }\n        }\n        else {\n            this.executeSimpleForWhere_();\n        }\n\n    }\n\n    private executeSkipAndLimitForWhere_() {\n        let recordSkipped = false;\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (recordSkipped && this.results.length !== this.limitRecord) {\n                    if (shouldAddValue()) {\n                        this.pushResult(cursor.value);\n                    }\n                    cursor.continue();\n                }\n                else {\n                    recordSkipped = true;\n                    cursor.advance(this.skipRecord);\n                }\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSkipForWhere_() {\n        let recordSkipped = false;\n\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (recordSkipped) {\n                    if (shouldAddValue()) {\n                        this.pushResult(cursor.value);\n                    }\n                    cursor.continue();\n                }\n                else {\n                    recordSkipped = true;\n                    cursor.advance(this.skipRecord);\n                }\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeLimitForWhere_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor && this.results.length !== this.limitRecord) {\n                if (shouldAddValue()) {\n                    this.pushResult(cursor.value);\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n\n    }\n\n    private executeSimpleForWhere_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (shouldAddValue()) {\n                    this.pushResult(cursor.value);\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n    }\n}","import { Where } from \"./where\";\nimport { DATA_TYPE, QUERY_OPTION } from \"../../../common/index\";\nimport { getDataType, getObjectFirstKey } from \"../../utils/index\";\n\nexport class GroupByHelper extends Where {\n    protected processGroupBy() {\n        const groupBy = this.query.groupBy as any;\n        let datas = this.results;\n        const lookUpObj = {};\n        // free results memory\n        this.results = this.query.groupBy = null;\n        if (getDataType(groupBy) !== DATA_TYPE.Object) {\n            if (getDataType(groupBy) === DATA_TYPE.String) {\n                for (const i in datas) {\n                    lookUpObj[datas[i][groupBy as string]] = datas[i];\n                }\n            }\n            else {\n                let objKey;\n                for (const i in datas) {\n                    objKey = \"\";\n                    for (const column in groupBy) {\n                        objKey += datas[i][groupBy[column]];\n                    }\n                    lookUpObj[objKey] = datas[i];\n                }\n            }\n        }\n        else {\n            const caseQueryLength = Object.keys(groupBy).length;\n            if (caseQueryLength === 1) {\n                const groupByColumn = getObjectFirstKey(groupBy);\n                this.thenEvaluator.setCaseAndColumn(groupBy, groupByColumn);\n                for (const i in datas) {\n                    lookUpObj[this.thenEvaluator.setValue(datas[i]).evaluate()] = datas[i];\n                }\n            }\n            else {\n                let objKey;\n                for (const i in datas) {\n                    objKey = \"\";\n                    this.thenEvaluator.setCaseAndValue(groupBy, datas[i]);\n                    for (const column in groupBy) {\n                        objKey += this.thenEvaluator.setColumn(column).evaluate();\n                    }\n                    lookUpObj[objKey] = datas[i];\n                }\n            }\n        }\n        // free datas memory\n        datas = [];\n        for (const i in lookUpObj) {\n            datas.push(lookUpObj[i]);\n        }\n        this.results = datas;\n    }\n\n    protected executeAggregateGroupBy() {\n        const grpQry = this.query.groupBy as any;\n        let datas = this.results;\n        // free results memory\n        this.results = undefined;\n        const lookUpObj = {};\n        // assign aggregate\n        const aggregateQry = this.query.aggregate;\n\n        let index;\n        let objKey;\n        let value;\n        let columnToAggregate;\n        const calculateAggregate = () => {\n            const getCount = () => {\n                value = lookUpObj[objKey];\n                // get old value\n                value = value ? value[\"count(\" + columnToAggregate + \")\"] : 0;\n                // add with old value if data exist\n                value += datas[index][columnToAggregate] ? 1 : 0;\n                return value;\n            };\n            const getMax = () => {\n                value = lookUpObj[objKey];\n                // get old value\n                value = value ? value[\"max(\" + columnToAggregate + \")\"] : 0;\n                datas[index][columnToAggregate] = datas[index][columnToAggregate] ?\n                    datas[index][columnToAggregate] : 0;\n                // compare between old value and new value\n                return value > datas[index][columnToAggregate] ? value : datas[index][columnToAggregate];\n            };\n            const getMin = () => {\n                value = lookUpObj[objKey];\n                // get old value\n                value = value ? value[\"min(\" + columnToAggregate + \")\"] : Infinity;\n                datas[index][columnToAggregate] = datas[index][columnToAggregate] ?\n                    datas[index][columnToAggregate] : Infinity;\n                // compare between old value and new value\n                return value < datas[index][columnToAggregate] ? value : datas[index][columnToAggregate];\n            };\n            const getSum = () => {\n                value = lookUpObj[objKey];\n                // get old value\n                value = value ? value[\"sum(\" + columnToAggregate + \")\"] : 0;\n                // add with old value if data exist\n                value += datas[index][columnToAggregate] ? datas[index][columnToAggregate] : 0;\n                return value;\n            };\n            const getAvg = () => {\n                value = lookUpObj[objKey];\n                // get old sum value\n                let sumOfColumn = value ? value[\"sum(\" + columnToAggregate + \")\"] : 0;\n                // add with old value if data exist\n                sumOfColumn += datas[index][columnToAggregate] ? datas[index][columnToAggregate] : 0;\n                datas[index][\"sum(\" + columnToAggregate + \")\"] = sumOfColumn;\n                // get old count value\n                value = value ? value[\"count(\" + columnToAggregate + \")\"] : 0;\n                // add with old value if data exist\n                value += datas[index][columnToAggregate] ? 1 : 0;\n                datas[index][\"count(\" + columnToAggregate + \")\"] = value;\n            };\n            for (const prop in aggregateQry) {\n                const aggregateColumn = aggregateQry[prop];\n                const aggregateValType = getDataType(aggregateColumn);\n                let aggregateCalculator;\n                switch (prop) {\n                    case QUERY_OPTION.Count:\n                        aggregateCalculator = getCount;\n                        break;\n                    case QUERY_OPTION.Max:\n                        aggregateCalculator = getMax;\n                        break;\n                    case QUERY_OPTION.Min:\n                        aggregateCalculator = getMin;\n                        break;\n                    case QUERY_OPTION.Sum:\n                        aggregateCalculator = getSum;\n                        break;\n                    case QUERY_OPTION.Avg:\n                        aggregateCalculator = getAvg;\n                        break;\n                }\n                switch (aggregateValType) {\n                    case DATA_TYPE.String:\n                        columnToAggregate = aggregateColumn;\n                        datas[index][`${prop}(${columnToAggregate})`] = aggregateCalculator();\n                        break;\n                    case DATA_TYPE.Array:\n                        for (const item in aggregateColumn) {\n                            columnToAggregate = aggregateColumn[item];\n                            datas[index][`${prop}(${columnToAggregate})`] = aggregateCalculator();\n                        }\n                }\n            }\n        };\n\n        if (getDataType(grpQry) === DATA_TYPE.String) {\n            for (index in datas) {\n                objKey = datas[index][grpQry];\n                calculateAggregate();\n                lookUpObj[objKey] = datas[index];\n            }\n        }\n        else {\n            for (index in datas) {\n                objKey = \"\";\n                for (const column in grpQry) {\n                    objKey += datas[index][grpQry[column]];\n                }\n                calculateAggregate();\n                lookUpObj[objKey] = datas[index];\n            }\n\n        }\n        // free datas memory\n        datas = [];\n        for (const i in lookUpObj) {\n            datas.push(lookUpObj[i]);\n        }\n        // Checking for avg and if exist then fill the datas;\n        if (aggregateQry.avg) {\n            if (getDataType(aggregateQry.avg) === DATA_TYPE.String) {\n                for (index in datas) {\n                    const sumForAvg = datas[index][\"sum(\" + aggregateQry.avg + \")\"],\n                        countForAvg = datas[index][\"count(\" + aggregateQry.avg + \")\"];\n                    datas[index][\"avg(\" + aggregateQry.avg + \")\"] = sumForAvg / countForAvg;\n                    if (aggregateQry.count !== aggregateQry.avg) {\n                        delete datas[index][\"count(\" + aggregateQry.avg + \")\"];\n                    }\n                    if (aggregateQry.sum !== aggregateQry.avg) {\n                        delete datas[index][\"sum(\" + aggregateQry.avg + \")\"];\n                    }\n                }\n            }\n            else {\n                const isCountTypeString = getDataType(aggregateQry.count) === DATA_TYPE.String;\n                const isSumTypeString = getDataType(aggregateQry.sum) === DATA_TYPE.String;\n                for (index in datas) {\n                    for (const column in aggregateQry.avg as any) {\n                        const avgColumn = aggregateQry.avg[column],\n                            sum = datas[index][\"sum(\" + avgColumn + \")\"],\n                            count = datas[index][\"count(\" + avgColumn + \")\"];\n                        datas[index][\"avg(\" + avgColumn + \")\"] = sum / count;\n\n                        if (isCountTypeString) {\n                            if (aggregateQry.count !== avgColumn) {\n                                delete datas[index][\"count(\" + avgColumn + \")\"];\n                            }\n                            else if (aggregateQry.count.indexOf(avgColumn) === -1) {\n                                delete datas[index][\"count(\" + avgColumn + \")\"];\n                            }\n                        }\n\n                        if (isSumTypeString) {\n                            if (aggregateQry.sum !== avgColumn) {\n                                delete datas[index][\"sum(\" + avgColumn + \")\"];\n                            }\n                            else if (aggregateQry.sum.indexOf(avgColumn) === -1) {\n                                delete datas[index][\"sum(\" + avgColumn + \")\"];\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        this.results = datas;\n    }\n}","import { GroupByHelper } from \"./group_by_helper\";\nimport { DATA_TYPE, ERROR_TYPE, QUERY_OPTION, OrderQuery, CaseOption } from \"../../../common/index\";\nimport { LogHelper } from \"../../log_helper\";\nimport { getDataType, removeSpace, isArray } from \"../../utils/index\";\nimport { Column } from \"../../model/index\";\n\nexport class Helper extends GroupByHelper {\n\n    processGroupDistinctAggr() {\n        if (this.query.distinct) {\n            const groupBy = [];\n            const result = this.results[0];\n            for (const key in result) {\n                groupBy.push(key);\n            }\n            const primaryKey = this.getPrimaryKey(this.query.from),\n                index = groupBy.indexOf(primaryKey);\n            groupBy.splice(index, 1);\n            this.query.groupBy = groupBy.length > 0 ? groupBy : null;\n        }\n        if (this.query.groupBy) {\n            if (this.query.aggregate) {\n                this.executeAggregateGroupBy();\n            }\n            else {\n                this.processGroupBy();\n            }\n        }\n        else if (this.query.aggregate) {\n            this.processAggregateQry();\n        }\n    }\n\n    private getOrderColumnInfo_(orderColumn: string): Column {\n        let column: Column;\n        if (this.query.join == null) {\n            column = this.getColumnInfo(orderColumn, this.query.from);\n        }\n        else {\n            const splittedByDot = removeSpace(orderColumn).split(\".\");\n            orderColumn = splittedByDot[1];\n            column = this.getColumnInfo(orderColumn, splittedByDot[0]);\n        }\n        if (column == null) {\n            this.onErrorOccured(new LogHelper(ERROR_TYPE.ColumnNotExist, { column: orderColumn, isOrder: true }), true);\n        }\n        return column;\n    }\n\n    private compareStringInDesc_(a: string, b: string) {\n        return b.localeCompare(a);\n    }\n\n    private compareStringinAsc_(a: string, b: string) {\n        return a.localeCompare(b);\n    }\n\n    private compareDefaultInDesc_(a: string, b) {\n        return new String(b).localeCompare(a);\n    }\n\n    private compareDefaultinAsc_(a, b: string) {\n        return new String(a).localeCompare(b);\n    }\n\n    private compareNumberInDesc_(a: number, b: number) {\n        return b - a;\n    }\n\n    private compareNumberinAsc_(a: number, b: number) {\n        return a - b;\n    }\n\n    private compareDateInDesc_(a: Date, b: Date) {\n        return b.getTime() - a.getTime();\n    }\n\n    private compareDateInAsc_(a: Date, b: Date) {\n        return a.getTime() - b.getTime();\n    }\n\n    private getValInDesc_(value1, value2, caseQuery: { [columnName: string]: [CaseOption] }) {\n        for (const columnName in caseQuery) {\n            this.thenEvaluator.setCaseAndValue(caseQuery, value1);\n            const column1 = this.thenEvaluator.setColumn(columnName).evaluate();\n            this.thenEvaluator.setCaseAndValue(caseQuery, value2);\n            const column2 = this.thenEvaluator.setColumn(columnName).evaluate();\n            switch (typeof value1[column1]) {\n                case DATA_TYPE.String:\n                    return this.compareStringInDesc_(value1[column1], value2[column2]);\n                default:\n                    return this.compareNumberInDesc_(value1[column1], value2[column2]);\n            }\n        }\n    }\n\n    private getValInAsc_(value1, value2, caseQuery: { [columnName: string]: [CaseOption] }) {\n        for (const columnName in caseQuery) {\n            this.thenEvaluator.setCaseAndValue(caseQuery, value1);\n            const column1 = this.thenEvaluator.setColumn(columnName).evaluate();\n            this.thenEvaluator.setCaseAndValue(caseQuery, value2);\n            const column2 = this.thenEvaluator.setColumn(columnName).evaluate();\n            switch (typeof value1[column1]) {\n                case DATA_TYPE.String:\n                    return this.compareStringinAsc_(value1[column1], value2[column2]);\n                default:\n                    return this.compareNumberinAsc_(value1[column1], value2[column2]);\n            }\n        }\n    }\n\n    private getValueComparer_(column: Column, order: OrderQuery): (a, b) => number {\n\n        switch (column.dataType) {\n            case DATA_TYPE.String:\n                return order.type === 'asc' ? this.compareStringinAsc_ : this.compareStringInDesc_;\n            case DATA_TYPE.Number:\n                return order.type === 'asc' ? this.compareNumberinAsc_ : this.compareNumberInDesc_;\n            case DATA_TYPE.DateTime:\n                return order.type === 'asc' ? this.compareDateInAsc_ : this.compareDateInDesc_;\n            default:\n                return order.type === 'asc' ? this.compareDefaultinAsc_ : this.compareDefaultInDesc_;\n        }\n\n    }\n\n    private orderBy_(order: OrderQuery) {\n        order.type = this.getOrderType_(order.type);\n        let orderColumn = order.by;\n        if (orderColumn != null && typeof orderColumn === DATA_TYPE.Object) {\n            if (order.type === \"asc\") {\n                this.results.sort((a, b) => {\n                    return this.getValInAsc_(a, b, orderColumn as any);\n                });\n            }\n            else {\n                this.results.sort((a, b) => {\n                    return this.getValInDesc_(a, b, orderColumn as any);\n                });\n            }\n        }\n        else {\n            const columnInfo = this.getOrderColumnInfo_(orderColumn as string);\n            if (columnInfo != null) {\n                const orderMethod = this.getValueComparer_(columnInfo, order);\n                orderColumn = columnInfo.name;\n                if (order.case == null) {\n                    this.results.sort((a, b) => {\n                        return orderMethod(a[orderColumn as string], b[orderColumn as string]);\n                    });\n                }\n                else {\n                    this.thenEvaluator.setCaseAndColumn({ [orderColumn]: order.case }, orderColumn);\n                    this.results.sort((a, b) => {\n                        return orderMethod(\n                            this.thenEvaluator.setValue(a).evaluate(),\n                            this.thenEvaluator.setValue(b).evaluate()\n                        );\n                    });\n                }\n            }\n        }\n\n    }\n\n    private getOrderType_(type: string) {\n        return type == null ? 'asc' : type.toLowerCase();\n    }\n\n    protected processOrderBy() {\n        const order = this.query.order;\n        if (order && this.results.length > 0 && !this.sorted) {\n            const orderQueryType = getDataType(order);\n            if (orderQueryType === DATA_TYPE.Object) {\n                this.orderBy_(order);\n            }\n            else if (orderQueryType === DATA_TYPE.Array) {\n                this.orderBy_(order[0]);\n                for (let i = 1, length = (order as any).length; i < length; i++) {\n                    if (this.error == null) {\n                        const prevOrderQueryBy = order[i - 1].by;\n                        const currentOrderQuery: OrderQuery = order[i];\n                        let currentorderQueryBy = currentOrderQuery.by;\n                        const orderColumnDetail = this.getOrderColumnInfo_(currentorderQueryBy as string);\n                        if (orderColumnDetail != null) {\n                            currentorderQueryBy = orderColumnDetail.name;\n                            currentOrderQuery.type = this.getOrderType_(currentOrderQuery.type);\n                            const orderMethod = this.getValueComparer_(orderColumnDetail, currentOrderQuery);\n                            this.results.sort((a, b) => {\n                                if (a[prevOrderQueryBy] === b[prevOrderQueryBy]) {\n                                    return orderMethod(\n                                        a[currentorderQueryBy as string],\n                                        b[currentorderQueryBy as string]);\n                                }\n                                return 0;\n                            });\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    protected processAggregateQry() {\n        const datas = this.results;\n        const datasLength = datas.length;\n        const results = {};\n        let columnToAggregate;\n        // free results memory\n        this.results = undefined;\n        const getCount = () => {\n            let result = 0;\n            for (const i in datas) {\n                result += datas[i][columnToAggregate] ? 1 : 0;\n            }\n            return result;\n        };\n        const getMax = () => {\n            let result = 0;\n            for (const i in datas) {\n                result = result > datas[i][columnToAggregate] ?\n                    result : datas[i][columnToAggregate];\n            }\n            return result;\n        };\n        const getMin = () => {\n            let result = Infinity, value = Infinity;\n            for (const i in datas) {\n                value = datas[i][columnToAggregate] ?\n                    datas[i][columnToAggregate] : Infinity;\n                result = result < value ? result : value;\n            }\n            return result;\n        };\n        const getSum = () => {\n            let result = 0;\n            for (const i in datas) {\n                result += datas[i][columnToAggregate];\n            }\n            return result;\n        };\n        const getAvg = () => {\n            let result = 0;\n            for (const i in datas) {\n                result += datas[i][columnToAggregate];\n            }\n            return result / datasLength;\n        };\n        for (const prop in this.query.aggregate) {\n            const aggregateColumn = this.query.aggregate[prop];\n            const aggregateValType = getDataType(aggregateColumn);\n            let aggregateCalculator;\n            switch (prop) {\n                case 'count':\n                    aggregateCalculator = getCount; break;\n                case 'max':\n                    aggregateCalculator = getMax; break;\n                case 'min':\n                    aggregateCalculator = getMin; break;\n                case 'sum':\n                    aggregateCalculator = getSum; break;\n                case 'avg':\n                    aggregateCalculator = getAvg; break;\n            }\n            switch (aggregateValType) {\n                case DATA_TYPE.String:\n                    columnToAggregate = aggregateColumn;\n                    results[`${prop}(${columnToAggregate})`] = aggregateCalculator();\n                    break;\n                case DATA_TYPE.Array:\n                    for (const key in aggregateColumn) {\n                        columnToAggregate = aggregateColumn[key];\n                        results[`${prop}(${columnToAggregate})`] = aggregateCalculator();\n                    }\n            }\n        }\n\n        // add results to the first index of result\n        for (const prop in results) {\n            datas[0][prop] = results[prop];\n        }\n        this.results = [datas[0]];\n    }\n}","import { IError, CONNECTION_STATUS, ERROR_TYPE } from \"../../common/index\";\nimport { KeyStore } from \"../keystore/index\";\nimport { Table, Column } from \"../model/index\";\nimport { LogHelper } from \"../log_helper\";\nimport { BaseDb } from \"./base_db\";\nimport { promise } from \"../helpers/index\";\n\nexport class DropDb extends BaseDb {\n    private onSuccess_: () => void;\n    private onError_: (err: IError) => void;\n\n    constructor(onSuccess: () => void, onError: (err: IError) => void) {\n        super();\n        this.onSuccess_ = onSuccess;\n        this.onError_ = onError;\n    }\n\n    deleteMetaData() {\n        return promise((res, rej) => {\n            KeyStore.remove(`JsStore_${this.dbName}_Db_Version`);\n            this.activeDb.tables.forEach((table: Table) => {\n                KeyStore.remove(`JsStore_${this.dbName}_${table.name}_Version`);\n                table.columns.forEach((column: Column) => {\n                    if (column.autoIncrement) {\n                        KeyStore.remove(`JsStore_${this.dbName}_${table.name}_${column.name}_Value`);\n                    }\n                });\n            });\n            // remove from database_list \n            this.getDbList().then(dbList => {\n                dbList.splice(dbList.indexOf(this.dbName), 1);\n                this.setDbList(dbList).then(() => {\n                    // remove db schema from keystore\n                    KeyStore.remove(`JsStore_${this.dbName}_Schema`).\n                        then(res).catch(rej);\n                });\n            });\n        });\n    }\n\n    deleteDb() {\n        setTimeout(() => {\n            const dropDbRequest = indexedDB.deleteDatabase(this.dbName);\n            dropDbRequest.onblocked = () => {\n                if (this.onError_ != null) {\n                    this.onError_(new LogHelper(ERROR_TYPE.DbBlocked).get());\n                }\n            };\n            dropDbRequest.onerror = (e) => {\n                if (this.onError_ != null) {\n                    this.onError_((event as any).target.error);\n                }\n            };\n            dropDbRequest.onsuccess = () => {\n                this.deleteMetaData().then(() => {\n                    this.onSuccess_();\n                    this.dbStatus.conStatus = CONNECTION_STATUS.Closed;\n                }).catch(this.onError_);\n            };\n        }, 100);\n    }\n}\n","import { QueryExecutor } from \"./query_executor\";\nimport { Config } from \"./config\";\nimport { IdbHelper } from \"./business/index\";\nimport { CONNECTION_STATUS, ERROR_TYPE } from \"../common/index\";\n\nexport const initialize = function () {\n    if (typeof (self as any).alert === 'undefined' && typeof ServiceWorkerGlobalScope === 'undefined') {\n        Config.isRuningInWorker = true;\n        (self as any).onmessage = function (e) {\n            new QueryExecutor().checkConnectionAndExecuteLogic(e.data);\n        };\n    }\n};\n\nconst onIdbNotSupproted = () => {\n    IdbHelper.dbStatus = {\n        conStatus: CONNECTION_STATUS.UnableToStart,\n        lastError: ERROR_TYPE.IndexedDbNotSupported\n    };\n};\n\nconst setCrossBrowserIndexedDb = () => {\n    try {\n        if (!indexedDB) {\n            indexedDB = (self as any).mozIndexedDB ||\n                (self as any).webkitIndexedDB || (self as any).msIndexedDB;\n        }\n        if (indexedDB) {\n            IDBTransaction = IDBTransaction ||\n                (self as any).webkitIDBTransaction || (self as any).msIDBTransaction;\n            (self as any).IDBKeyRange = (self as any).IDBKeyRange ||\n                (self as any).webkitIDBKeyRange || (self as any).msIDBKeyRange;\n        }\n        else {\n            onIdbNotSupproted();\n        }\n    } catch (ex) {\n        onIdbNotSupproted();\n    }\n};\n\nsetCrossBrowserIndexedDb();\ninitialize();\n","export * from './query_executor';\nexport * from './start';\nexport * from './config';\nexport * from './keystore/instance';","import { Table } from \"../model/index\";\nimport { IdbHelper, QueryHelper } from \"../business/index\";\nimport { KeyStore } from \"../keystore/index\";\nimport { promiseAll, promise } from \"../helpers/index\";\nimport { QueryExecutor } from \"../query_executor\";\n\nexport const getAutoIncrementValues = (table: Table): Promise<{ [columnName: string]: number }> => {\n\n    const autoIncColumns = table.columns.filter((col) => {\n        return col.autoIncrement;\n    });\n    return promise((resolve, reject) => {\n        promiseAll(autoIncColumns.map(column => {\n            const autoIncrementKey = `JsStore_${IdbHelper.activeDb.name}_${table.name}_${column.name}_Value`;\n            return KeyStore.get(autoIncrementKey);\n        })).then(results => {\n            const autoIncValues = {};\n            for (let i = 0; i < autoIncColumns.length; i++) {\n                autoIncValues[autoIncColumns[i].name] = results[i];\n            }\n            resolve(autoIncValues);\n        }).catch(reject);\n    });\n};\n\nexport const setAutoIncrementValue = (table: Table, autoIncrementValue: object) => {\n    const keys = Object.keys(autoIncrementValue);\n    return promiseAll(keys.map((columnName) => {\n        const autoIncrementKey = `JsStore_${IdbHelper.activeDb.name}_${table.name}_${columnName}_Value`;\n        const value = autoIncrementValue[columnName];\n        if (QueryExecutor.isTransactionQuery === true) {\n            QueryHelper.autoIncrementValues[table.name][columnName] = value;\n        }\n        return KeyStore.set(\n            autoIncrementKey,\n            value\n        );\n    }));\n};","import { Base } from \"../base\";\nimport { InsertQuery, IError, API } from \"../../../common/index\";\nimport { Table } from \"../../model/index\";\nimport { promiseAll, promise } from \"../../helpers/index\";\nimport { QueryHelper } from \"../query_helper\";\n\nexport class Instance extends Base {\n    private valuesAffected_ = [];\n    query: InsertQuery;\n    table: Table;\n\n    constructor(query: InsertQuery, onSuccess: (rowsInserted: number) => void, onError: (err: IError) => void) {\n        super();\n        this.onError = onError;\n        this.query = query;\n        this.onSuccess = onSuccess;\n        this.tableName = this.query.into;\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Insert, this.query);\n        queryHelper.checkAndModify().then(() => {\n            this.query = queryHelper.query;\n            this.insertData_(this.query.values);\n        }).catch(this.onError);\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.error == null) {\n            this.onSuccess(this.query.return === true ? this.valuesAffected_ : this.rowAffected);\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n\n    private onQueryFinished_() {\n        if (this.isTransaction === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    private insertData_(values: any[]) {\n\n        let objectStore: IDBObjectStore;\n        let onInsertData;\n        let addMethod;\n\n        if (this.query.return) {\n            onInsertData = (value) => {\n                this.valuesAffected_.push(value);\n            };\n\n        }\n        else {\n            onInsertData = (value) => {\n                ++this.rowAffected;\n            };\n        }\n\n        this.createTransaction([this.tableName], this.onTransactionCompleted_);\n        objectStore = this.transaction.objectStore(this.tableName);\n        if (this.query.upsert) {\n            addMethod = (value) => {\n                return objectStore.put(value);\n            };\n        }\n        else {\n            addMethod = (value) => {\n                return objectStore.add(value);\n            };\n        }\n        promiseAll(\n            values.map(function (value) {\n                return promise(function (res, rej) {\n                    const addResult = addMethod(value);\n                    addResult.onerror = rej;\n                    addResult.onsuccess = function () {\n                        onInsertData(value);\n                        res();\n                    };\n                });\n            })\n        ).then(() => {\n            this.onQueryFinished_();\n        }).catch((err) => {\n            this.transaction.abort();\n            this.onErrorOccured(err);\n        });\n    }\n}","import { Base } from \"../base\";\nimport { getDataType } from \"../../utils/index\";\nimport { DATA_TYPE, UpdateQuery } from \"../../../common/index\";\n\nexport const updateValue = (suppliedValue, storedValue) => {\n    for (const key in suppliedValue) {\n        if (getDataType(suppliedValue[key]) !== DATA_TYPE.Object) {\n            storedValue[key] = suppliedValue[key];\n        }\n        else {\n            for (const op in suppliedValue[key]) {\n                switch (op as any) {\n                    case '+': storedValue[key] += suppliedValue[key][op]; break;\n                    case '-': storedValue[key] -= suppliedValue[key][op]; break;\n                    case '*': storedValue[key] *= suppliedValue[key][op]; break;\n                    case '/': storedValue[key] /= suppliedValue[key][op]; break;\n                    case '{push}': storedValue[key].push(suppliedValue[key][op]); break;\n                    default: storedValue[key] = suppliedValue[key];\n                }\n                break;\n            }\n        }\n    }\n    return storedValue;\n};\n\nexport class BaseUpdate extends Base {\n    query: UpdateQuery;\n    protected initTransaction() {\n        this.createTransaction([this.query.in], this.onTransactionCompleted_);\n        this.objectStore = this.transaction.objectStore(this.query.in);\n    }\n\n    protected onQueryFinished() {\n        if (this.isTransaction === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.error) {\n            this.onError(this.error);\n        }\n        else {\n            this.onSuccess(this.rowAffected);\n        }\n    }\n}\n","import { BaseUpdate, updateValue } from \"./base_update\";\n\nexport class NotWhere extends BaseUpdate {\n\n    protected executeWhereUndefinedLogic() {\n        let cursor: IDBCursorWithValue;\n        const cursorRequest: IDBRequest<IDBCursorWithValue> = this.objectStore.openCursor();\n        cursorRequest.onsuccess = (e) => {\n            cursor = (e as any).target.result;\n            if (cursor) {\n                try {\n                    const cursorUpdateRequest = cursor.update(updateValue(this.query.set, cursor.value));\n                    cursorUpdateRequest.onsuccess = () => {\n                        ++this.rowAffected;\n                        cursor.continue();\n                    };\n                    cursorUpdateRequest.onerror = this.onErrorOccured.bind(this);\n                } catch (err) {\n                    this.onErrorOccured(err);\n                    this.transaction.abort();\n                }\n            }\n            else {\n                this.onQueryFinished();\n            }\n\n        };\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { NotWhere } from \"./not_where\";\nimport { updateValue } from \"./base_update\";\nimport { promiseAll, promise } from \"../../helpers/index\";\n\nexport class In extends NotWhere {\n    private executeInLogic(column, values: any[]) {\n        let cursor: IDBCursorWithValue;\n        const columnStore = this.objectStore.index(column);\n        let cursorRequest;\n        const runInLogic: (val) => Promise<void> = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (this.whereCheckerInstance.check(cursor.value)) {\n                            cursor.update(updateValue(this.query.set, cursor.value));\n                            ++this.rowAffected;\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n}","import { In } from \"./in\";\nimport { updateValue } from \"./base_update\";\n\nexport class Regex extends In {\n    protected executeRegexLogic(column: string, exp: RegExp) {\n        let cursor: IDBCursorWithValue;\n        this.regexExpression = exp;\n        const cursorOpenRequest = this.objectStore.index(column).openCursor();\n        cursorOpenRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.regexTest(cursor.key) &&\n                    this.whereCheckerInstance.check(cursor.value)) {\n                    try {\n                        const cursorUpdateRequest = cursor.update(updateValue(this.query.set, cursor.value));\n                        cursorUpdateRequest.onsuccess = () => {\n                            ++this.rowAffected;\n                            cursor.continue();\n                        };\n                        cursorUpdateRequest.onerror = this.onErrorOccured.bind(this);\n                    } catch (err) {\n                        this.transaction.abort();\n                        this.onErrorOccured(err);\n                    }\n                }\n                else {\n                    cursor.continue();\n                }\n\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n        cursorOpenRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { updateValue } from \"./base_update\";\nimport { Regex } from \"./regex\";\n\nexport class Where extends Regex {\n    protected executeWhereLogic(column, value, op) {\n        let cursor: IDBCursorWithValue,\n            cursorRequest;\n        value = op ? value[op] : value;\n        cursorRequest = this.objectStore.index(column).openCursor(this.getKeyRange(value, op));\n\n        cursorRequest.onsuccess = (e) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.whereCheckerInstance.check(cursor.value)) {\n                    try {\n                        const cursorUpdateRequest = cursor.update(updateValue(this.query.set, cursor.value));\n                        cursorUpdateRequest.onsuccess = () => {\n                            ++this.rowAffected;\n                            cursor.continue();\n                        };\n                        cursorUpdateRequest.onerror = this.onErrorOccured.bind(this);\n                    } catch (err) {\n                        this.transaction.abort();\n                        this.onErrorOccured(err);\n                    }\n                }\n                else {\n                    cursor.continue();\n                }\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n\n    }\n}","import { Where } from \"./where\";\nimport * as Select from \"../select/index\";\nimport { QueryHelper } from \"../query_helper\";\nimport { isArray } from \"../../utils/index\";\nimport { UpdateQuery, IError, API, SelectQuery, QUERY_OPTION } from \"../../../common/index\";\n\nexport class Instance extends Where {\n\n    constructor(query: UpdateQuery, onSuccess: (rowsUpdated: number) => void, onError: (err: IError) => void) {\n        super();\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n        this.query = query;\n        this.tableName = this.query.in;\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Update, this.query);\n        queryHelper.checkAndModify();\n        if (queryHelper.error == null) {\n            try {\n                this.initTransaction();\n                if (this.query.where != null) {\n                    if (this.query.where.or || isArray(this.query.where)) {\n                        this.executeComplexLogic_();\n                    }\n                    else {\n                        this.goToWhereLogic();\n                    }\n                }\n                else {\n                    this.executeWhereUndefinedLogic();\n                }\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onError(\n                queryHelper.error\n            );\n        }\n    }\n\n    private executeComplexLogic_() {\n        const selectObject = new Select.Instance({\n            from: this.query.in,\n            where: this.query.where,\n            ignoreCase: this.query.ignoreCase\n        } as SelectQuery, (results: any[]) => {\n            const key = this.getPrimaryKey(this.query.in);\n            const inQuery = [];\n            results.forEach((value) => {\n                inQuery.push(value[key]);\n            });\n            results = null;\n            const whereQry = { [key]: { [QUERY_OPTION.In]: inQuery } };\n            this.query.ignoreCase = null;\n            this.query[QUERY_OPTION.Where] = whereQry;\n            this.initTransaction();\n            this.goToWhereLogic();\n        }, this.onError);\n        selectObject.isSubQuery = true;\n        selectObject.execute();\n    }\n}\n","import { WhereBase } from \"../where_base\";\nimport { RemoveQuery } from \"../../../common/index\";\n\nexport class BaseRemove extends WhereBase {\n\n    isOr: boolean;\n    query: RemoveQuery;\n\n    protected onQueryFinished() {\n        // ff\n    }\n}\n","import { BaseRemove } from \"./base_remove\";\n\nexport class NotWhere extends BaseRemove {\n    protected executeWhereUndefinedLogic() {\n        let cursor;\n        const cursorRequest = this.objectStore.openCursor();\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                cursor.delete();\n                ++this.rowAffected;\n                (cursor as any).continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { NotWhere } from \"./not_where\";\nimport { promiseAll, promise } from \"../../helpers/index\";\n\nexport class In extends NotWhere {\n    protected executeInLogic(column, values) {\n        let cursor: IDBCursorWithValue, cursorRequest;\n        const runInLogic: (val) => Promise<void> = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = this.objectStore.index(column).openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (this.whereCheckerInstance.check(cursor.value)) {\n                            cursor.delete();\n                            ++this.rowAffected;\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n}","import { In } from \"./in\";\n\nexport class Regex extends In {\n    protected executeRegexLogic(column: string, exp: RegExp) {\n        let cursor: IDBCursorWithValue;\n        this.regexExpression = exp;\n        const cursorRequest = this.objectStore.index(column).openCursor();\n\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.regexTest(cursor.key) &&\n                    this.whereCheckerInstance.check(cursor.value)) {\n                    cursor.delete();\n                    ++this.rowAffected;\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}","import { Regex } from \"./regex\";\n\nexport class Where extends Regex {\n    protected executeWhereLogic(column, value, op) {\n        let cursor: IDBCursorWithValue,\n            cursorRequest;\n        value = op ? value[op] : value;\n        cursorRequest = this.objectStore.index(column).openCursor(this.getKeyRange(value, op));\n\n        cursorRequest.onsuccess = (e) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.whereCheckerInstance.check(cursor.value)) {\n                    cursor.delete();\n                    ++this.rowAffected;\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { Where } from \"./where\";\nimport { RemoveQuery, QUERY_OPTION, API, IError } from \"../../../common/index\";\nimport * as Select from '../select/index';\nimport { QueryHelper } from \"../index\";\nimport { getObjectFirstKey, isArray } from \"../../utils/index\";\n\nexport class Instance extends Where {\n\n\n    constructor(\n        query: RemoveQuery, onSuccess: (recordRemoved: number) => void,\n        onError: (err: IError) => void\n    ) {\n        super();\n        this.query = query;\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Remove, this.query);\n        queryHelper.checkAndModify();\n        if (queryHelper.error == null) {\n            try {\n                this.initTransaction_();\n                if (this.query.where != null) {\n                    if (isArray(this.query.where)) {\n                        this.processWhereArrayQry();\n                    }\n                    else {\n                        this.processWhere_();\n                    }\n                }\n                else {\n                    this.executeWhereUndefinedLogic();\n                }\n\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onError(\n                queryHelper.error\n            );\n        }\n    }\n\n    private processWhereArrayQry() {\n        const selectObject = new Select.Instance(this.query, (results) => {\n            const keyList = [];\n            const pkey = this.getPrimaryKey(this.query.from);\n            results.forEach((item) => {\n                keyList.push(item[pkey]);\n            });\n            results = null;\n            const whereQry = { [pkey]: { [QUERY_OPTION.In]: keyList } };\n            this.query[QUERY_OPTION.Where] = whereQry;\n            this.processWhere_();\n        }, this.onError);\n        selectObject.isSubQuery = true;\n        selectObject.execute();\n    }\n\n    private processWhere_() {\n        if (this.query.where.or) {\n            this.processOrLogic();\n        }\n        this.goToWhereLogic();\n    }\n\n    private initTransaction_() {\n        this.createTransaction([this.query.from], this.onTransactionCompleted_);\n        this.objectStore = this.transaction.objectStore(this.query.from);\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.error == null) {\n            this.onSuccess(this.rowAffected);\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n\n    protected onQueryFinished() {\n        if (this.isOr === true) {\n            this.orQuerySuccess_();\n        }\n        else if (this.isTransaction === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    private orQuerySuccess_() {\n        const key = getObjectFirstKey((this as any)._orInfo.OrQuery);\n        if (key != null) {\n            const where = {};\n            where[key] = (this as any)._orInfo.OrQuery[key];\n            delete (this as any)._orInfo.OrQuery[key];\n            this.query.where = where;\n            this.goToWhereLogic();\n        }\n        else {\n            this.isOr = true;\n        }\n    }\n\n    private processOrLogic() {\n        this.isOr = true;\n        (this as any)._orInfo = {\n            OrQuery: this.query.where.or\n        };\n\n        // free or memory\n        delete this.query.where.or;\n    }\n}","import { WhereBase } from \"../where_base\";\nimport { CountQuery } from \"../../../common/index\";\n\nexport class BaseCount extends WhereBase {\n    resultCount = 0;\n    query: CountQuery;\n\n    protected onQueryFinished() {\n        if (this.isTransaction === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    protected onTransactionCompleted_ = () => {\n        if (this.error == null) {\n            this.onSuccess(this.resultCount);\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n}\n","import { BaseCount } from \"./base_count\";\n\nexport class NotWhere extends BaseCount {\n    protected executeWhereUndefinedLogic() {\n        let countRequest;\n        if (this.objectStore.count) {\n            countRequest = this.objectStore.count();\n            countRequest.onsuccess = () => {\n                this.resultCount = countRequest.result;\n                this.onQueryFinished();\n            };\n        }\n        else {\n            let cursor;\n            countRequest = this.objectStore.openCursor();\n            countRequest.onsuccess = (e: any) => {\n                cursor = e.target.result;\n                if (cursor) {\n                    ++this.resultCount;\n                    cursor.continue();\n                }\n                else {\n                    this.onQueryFinished();\n                }\n            };\n        }\n        countRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { NotWhere } from \"./not_where\";\nimport { promiseAll, promise } from \"../../helpers/index\";\n\nexport class In extends NotWhere {\n    protected executeInLogic(column, values) {\n        let cursor: IDBCursorWithValue, cursorRequest;\n        const columnStore = this.objectStore.index(column);\n        let runInLogic: (val) => Promise<void> = (value) => {\n            return promise<void>((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (this.whereCheckerInstance.check(cursor.value)) {\n                            ++this.resultCount;\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        if (this.objectStore.count) {\n            runInLogic = (value) => {\n                return promise((res, rej) => {\n                    cursorRequest = columnStore.count(this.getKeyRange(value));\n                    cursorRequest.onsuccess = (e) => {\n                        this.resultCount += e.target.result;\n                        res();\n                    };\n                    cursorRequest.onerror = rej;\n                });\n            };\n        }\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n}","import { In } from \"./in\";\nexport class Regex extends In {\n    protected executeRegexLogic(column: string, exp: RegExp) {\n        let cursor: IDBCursorWithValue;\n        this.regexExpression = exp;\n        const cursorRequest = this.objectStore.index(column).openCursor();\n\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.regexTest(cursor.key) &&\n                    this.whereCheckerInstance.check(cursor.value)) {\n                    ++this.resultCount;\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n\n    }\n}","import { Regex } from \"./regex\";\n\nexport class Where extends Regex {\n    protected executeWhereLogic(column, value, op) {\n        value = op ? value[op] : value;\n        let cursorRequest;\n        let cursor: IDBCursorWithValue;\n        let initCursorAndFilter;\n        if (Object.keys(this.query.where).length === 1 && this.objectStore.count) {\n            initCursorAndFilter = () => {\n                cursorRequest = this.objectStore.index(column).count(this.getKeyRange(value, op));\n                cursorRequest.onsuccess = () => {\n                    this.resultCount = cursorRequest.result;\n                    this.onQueryFinished();\n                };\n            };\n\n        }\n        else {\n            initCursorAndFilter = () => {\n                cursorRequest = this.objectStore.index(column).openCursor(this.getKeyRange(value, op));\n                cursorRequest.onsuccess = (e) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (this.whereCheckerInstance.check(cursor.value)) {\n                            ++this.resultCount;\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        this.onQueryFinished();\n                    }\n                };\n            };\n        }\n        initCursorAndFilter();\n\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}","import { Where } from \"./where\";\nimport {  IError, API, CountQuery, IDB_MODE } from \"../../../common/index\";\nimport * as Select from '../select/index';\nimport { QueryHelper } from \"../query_helper\";\nimport { isArray } from \"../../utils/index\";\n\nexport class Instance extends Where {\n\n    constructor(query: CountQuery, onSuccess: (noOfRecord: number) => void, onError: (error: IError) => void) {\n        super();\n        this.onError = onError;\n        this.onSuccess = onSuccess;\n        this.query = query;\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Count, this.query);\n        queryHelper.checkAndModify();\n        if (queryHelper.error == null) {\n            try {\n                const getDataFromSelect = () => {\n                    const selectInstance = new Select.Instance(this.query as any,\n                        (results) => {\n                            this.resultCount = results.length;\n                            this.onTransactionCompleted_();\n                        }, this.onError);\n                    selectInstance.execute();\n                };\n                if (this.query.join == null) {\n                    if (this.query.where != null) {\n                        if (this.query.where.or || isArray(this.query.where)) {\n                            getDataFromSelect();\n                        }\n                        else {\n                            this.initTransaction_();\n                            this.goToWhereLogic();\n                        }\n                    }\n                    else {\n                        this.initTransaction_();\n                        this.executeWhereUndefinedLogic();\n                    }\n                }\n                else {\n                    getDataFromSelect();\n                }\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onError(\n                queryHelper.error\n            );\n        }\n    }\n\n    private initTransaction_() {\n        this.createTransaction([this.query.from], this.onTransactionCompleted_, IDB_MODE.ReadOnly);\n        this.objectStore = this.transaction.objectStore(this.query.from);\n    }\n}","import * as Select from './instance';\nimport { QUERY_OPTION, DATA_TYPE, ERROR_TYPE, JoinQuery } from \"../../../common/index\";\nimport { Helper } from \"./orderby_helper\";\nimport { LogHelper } from \"../../log_helper\";\nimport { getDataType, removeSpace } from \"../../utils/index\";\n\nexport class Join extends Helper {\n\n    private joinQueryStack_: JoinQuery[] = [];\n    private currentQueryStackIndex_ = 0;\n    tablesFetched = [];\n\n    executeJoinQuery() {\n        const query = this.query;\n        if (getDataType(query.join) === DATA_TYPE.Object) {\n            this.joinQueryStack_ = [query.join as JoinQuery];\n        }\n        else {\n            this.joinQueryStack_ = query.join as JoinQuery[];\n        }\n        // get the data for first table\n        const tableName = query.from;\n        new Select.Instance({\n            from: tableName,\n            where: query.where,\n            case: query.case,\n            flatten: query.flatten\n        }, results => {\n            this.results = results.map((item) => {\n                return {\n                    [this.currentQueryStackIndex_]: item\n                };\n            });\n            this.tablesFetched.push(tableName);\n            this.startExecutingJoinLogic_();\n        }, this.onError).execute();\n    }\n\n    private onJoinQueryFinished_() {\n        if (this.error == null) {\n            if (this.results.length > 0) {\n\n                if (this.query[QUERY_OPTION.Skip] && !this.query[QUERY_OPTION.Limit]) {\n                    this.results.splice(0, this.query[QUERY_OPTION.Skip]);\n                }\n\n                try {\n                    let results = [];\n                    const tables = Object.keys(this.results[0]);\n                    const tablesLength = tables.length;\n                    const mapWithAlias = (query: JoinQuery, value: object) => {\n                        if (query.as != null) {\n                            for (const key in query.as) {\n                                if (value[(query.as as any)[key]] === undefined) {\n                                    value[(query.as as any)[key]] = value[key];\n                                    delete value[key];\n                                }\n                            }\n                        }\n                        return value;\n                    };\n                    this.results.forEach((result) => {\n                        let data = result[\"0\"]; // first table data\n                        for (let i = 1; i < tablesLength; i++) {\n                            const query = this.joinQueryStack_[i - 1];\n                            data = { ...data, ...mapWithAlias(query, result[i]) };\n                        }\n                        results.push(data);\n                    });\n                    this.results = results;\n                    // free results memory\n                    results = null;\n                    if (process.env.NODE_ENV === 'dev') {\n                        try {\n                            this.processOrderBy();\n                        }\n                        catch (ex) {\n                            this.onError({\n                                message: ex.message,\n                                type: ERROR_TYPE.InvalidOrderQuery\n                            });\n                            return;\n                        }\n                    }\n                    else {\n                        this.processOrderBy();\n                    }\n\n                    if (process.env.NODE_ENV === 'dev') {\n                        try {\n                            this.processGroupDistinctAggr();\n                        }\n                        catch (ex) {\n                            this.onError({\n                                message: ex.message,\n                                type: ERROR_TYPE.InvalidGroupQuery\n                            });\n                            return;\n                        }\n                    }\n                    else {\n                        this.processGroupDistinctAggr();\n                    }\n                }\n                catch (ex) {\n                    this.onError({\n                        message: ex.message,\n                        type: ERROR_TYPE.InvalidJoinQuery\n                    });\n                    return;\n                }\n\n                if (this.query[QUERY_OPTION.Skip] && this.query[QUERY_OPTION.Limit]) {\n                    this.results.splice(0, this.query[QUERY_OPTION.Skip]);\n                    this.results = this.results.slice(0, this.query[QUERY_OPTION.Limit]);\n                }\n                else if (this.query[QUERY_OPTION.Limit]) {\n                    this.results = this.results.slice(0, this.query[QUERY_OPTION.Limit]);\n                }\n            }\n            this.onSuccess(this.results);\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n\n    private startExecutingJoinLogic_() {\n        const query = this.joinQueryStack_[this.currentQueryStackIndex_];\n        if (query) {\n            try {\n                let jointblInfo = this.getJoinTableInfo_(query.on);\n                // table 1 is fetched & table2 needs to be fetched for join\n                if (query.with === jointblInfo.table1.table) {\n                    jointblInfo = {\n                        table1: jointblInfo.table2,\n                        table2: jointblInfo.table1\n                    };\n                }\n\n                if (process.env.NODE_ENV === 'dev') {\n                    this.checkJoinQuery_(jointblInfo, query);\n                    if (this.error != null) {\n                        return this.onJoinQueryFinished_();\n                    }\n                }\n\n                new Select.Instance({\n                    from: query.with,\n                    where: query.where,\n                    case: query.case,\n                    flatten: query.flatten\n                }, results => {\n                    this.jointables(query.type, jointblInfo, results);\n                    this.tablesFetched.push(jointblInfo.table2.table);\n                    ++this.currentQueryStackIndex_;\n                    this.startExecutingJoinLogic_();\n                }, this.onError).execute();\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onJoinQueryFinished_();\n        }\n    }\n\n    private jointables(joinType: string, jointblInfo: JoinTableInfo, secondtableData: any[]) {\n\n        const results = [];\n        const column1 = jointblInfo.table1.column;\n        const column2 = jointblInfo.table2.column;\n        const table1Index = this.tablesFetched.indexOf(jointblInfo.table1.table);\n        const table2Index = this.currentQueryStackIndex_ + 1;\n        const performInnerJoin = () => {\n            let index = 0;\n            this.results.forEach(valueFromFirstTable => {\n                secondtableData.forEach((valueFromSecondTable) => {\n                    if (valueFromFirstTable[table1Index][column1] === valueFromSecondTable[column2]) {\n                        results[index] = { ...valueFromFirstTable };\n                        results[index++][table2Index] = valueFromSecondTable;\n                    }\n                });\n            });\n        };\n        const performleftJoin = () => {\n            let index = 0;\n            let valueMatchedFromSecondTable: any[];\n            let callBack;\n            const columnDefaultValue = {};\n            this.getTable(jointblInfo.table2.table).columns.forEach(col => {\n                columnDefaultValue[col.name] = null;\n            });\n            this.results.forEach((valueFromFirstTable) => {\n                valueMatchedFromSecondTable = [];\n                if (table2Index === 1) {\n                    callBack = function (valueFromSecondTable) {\n                        if (valueFromFirstTable[table1Index][column1] === valueFromSecondTable[column2]) {\n                            valueMatchedFromSecondTable.push(valueFromSecondTable);\n                        }\n                    };\n                }\n                else {\n                    callBack = function (valueFromSecondTable) {\n                        const value = valueFromFirstTable[table1Index];\n                        if (value != null && value[column1] === valueFromSecondTable[column2]) {\n                            valueMatchedFromSecondTable.push(valueFromSecondTable);\n                        }\n                    };\n                }\n                secondtableData.forEach(callBack);\n                if (valueMatchedFromSecondTable.length === 0) {\n                    valueMatchedFromSecondTable = [columnDefaultValue];\n                }\n                valueMatchedFromSecondTable.forEach(function (value) {\n                    results[index] = { ...valueFromFirstTable };\n                    results[index++][table2Index] = value;\n                });\n            });\n        };\n        switch (joinType) {\n            case \"left\":\n                performleftJoin(); break;\n            default:\n                performInnerJoin();\n        }\n        this.results = results;\n    }\n\n    private getJoinTableInfo_(joinOn: string) {\n        joinOn = removeSpace(joinOn);\n        const splittedjoinOn = joinOn.split(\"=\");\n        const splittedjoinOnbydotFirst = splittedjoinOn[0].split(\".\");\n        const splittedjoinOnbydotSecond = splittedjoinOn[1].split(\".\");\n        const info = {\n            table1: {\n                table: splittedjoinOnbydotFirst[0],\n                column: splittedjoinOnbydotFirst[1]\n            },\n            table2: {\n                table: splittedjoinOnbydotSecond[0],\n                column: splittedjoinOnbydotSecond[1]\n            }\n        } as JoinTableInfo;\n        return info;\n    }\n\n    private checkJoinQuery_(jointblInfo: JoinTableInfo, qry: JoinQuery) {\n        const table1 = jointblInfo.table1;\n        const table2 = jointblInfo.table2;\n        const tableSchemaOf1stTable = this.getTable(table1.table);\n        const tableSchemaOf2ndTable = this.getTable(table2.table);\n        let err: LogHelper;\n\n        // check on info & with info \n        if (qry.with !== table2.table) {\n            err = new LogHelper(ERROR_TYPE.InvalidJoinQuery,\n                `on value should contains value of with`\n            );\n        }\n\n        // check for column existance\n\n        if (tableSchemaOf1stTable.columns.find(q => q.name === table1.column) == null) {\n            err = new LogHelper(ERROR_TYPE.InvalidJoinQuery,\n                `column ${table1.column} does not exist in table ${table1.table}`\n            );\n        }\n        else if (tableSchemaOf2ndTable.columns.find(q => q.name === table2.column) == null) {\n            err = new LogHelper(ERROR_TYPE.InvalidJoinQuery,\n                `column ${table2.column} does not exist in table ${table2.table}`\n            );\n        }\n\n        // check for column match in both table\n        if (qry.as == null) {\n            qry.as = {};\n        }\n        tableSchemaOf1stTable.columns.every(function (column) {\n            const columnFound = tableSchemaOf2ndTable.columns.find(q => q.name === column.name && q.name !== table1.column);\n            if (columnFound != null && qry.as[columnFound.name] == null) {\n                err = new LogHelper(ERROR_TYPE.InvalidJoinQuery,\n                    `column ${column.name} exist in both table ${table1.table} & ${table2.table}`\n                );\n                return false;\n            }\n            return true;\n        });\n        if (err != null) {\n            this.onErrorOccured(err, true);\n        }\n    }\n}\n\ntype JoinTableInfo = {\n    table1: { table: string, column: string }\n    table2: { table: string, column: string }\n};","export const getKeys = (value) => {\n    return Object.keys(value);\n};","export const isObject = (value) => {\n    return typeof value === 'object';\n};","import { SelectQuery, IError, IDB_MODE, QUERY_OPTION, API } from \"../../../common/index\";\nimport { Join } from \"./join\";\nimport { QueryHelper } from \"../query_helper\";\nimport { isArray, getObjectFirstKey, isObject, getKeys } from \"../../utils/index\";\n\nexport class Instance extends Join {\n\n    constructor(query: SelectQuery, onSuccess: (results: object[]) => void, onError: (err: IError) => void) {\n        super();\n        this.onError = onError;\n        this.onSuccess = onSuccess;\n        this.query = query;\n        this.tableName = query.from;\n        this.setPushResult();\n        if (isArray(this.query.where)) {\n            this.isArrayQry = true;\n            this.setLimitAndSkipEvaluationAtEnd_();\n        }\n        else {\n            this.skipRecord = query.skip;\n            this.limitRecord = query.limit;\n        }\n        if (query.order) {\n            if (isArray(query.order) || query.order.case || isObject(query.order.by)) {\n                this.query.order.idbSorting = false;\n            }\n            this.setLimitAndSkipEvaluationAtEnd_();\n        }\n        else if (query.groupBy) {\n            this.setLimitAndSkipEvaluationAtEnd_();\n        }\n\n    }\n\n    private setLimitAndSkipEvaluationAtEnd_() {\n        if (this.query.limit) {\n            this.shouldEvaluateLimitAtEnd = true;\n        }\n        if (this.query.skip) {\n            this.shouldEvaluateSkipAtEnd = true;\n        }\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Select, this.query);\n        queryHelper.checkAndModify();\n        if (queryHelper.error == null) {\n            try {\n                if (this.query.join == null) {\n                    if (this.query.where != null) {\n                        this.initTransaction_();\n                        if (isArray(this.query.where)) {\n                            this.processWhereArrayQry();\n                        }\n                        else {\n                            this.processWhere_();\n                        }\n                    }\n                    else {\n                        this.initTransaction_();\n                        this.executeWhereUndefinedLogic();\n                    }\n\n                }\n                else {\n                    this.executeJoinQuery();\n                }\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onError(\n                queryHelper.error\n            );\n        }\n    }\n\n\n    private processWhereArrayQry() {\n        this.isArrayQry = true;\n        const whereQuery = this.query.where,\n            pKey = this.getPrimaryKey(this.query.from);\n        let isFirstWhere = true, output = [], operation;\n\n        const isItemExist = (keyValue) => {\n            return output.findIndex(item => item[pKey] === keyValue) >= 0;\n        };\n        const onSuccess = () => {\n            if (operation === QUERY_OPTION.And) {\n                const doAnd = () => {\n                    let andResults = [];\n                    this.results.forEach((item) => {\n                        if (isItemExist(item[pKey])) {\n                            andResults.push(item);\n                        }\n                    });\n                    output = andResults;\n                    andResults = null;\n                };\n\n                if (isFirstWhere === true) {\n                    output = this.results;\n                }\n                else if (output.length > 0) {\n                    doAnd();\n                }\n            }\n            else {\n                if (output.length > 0) {\n                    this.results = [...output, ...this.results];\n                    this.removeDuplicates();\n                    output = this.results;\n                }\n                else {\n                    output = this.results;\n                }\n            }\n            isFirstWhere = false;\n            if (whereQuery.length > 0) {\n                this.results = [];\n                processFirstQry();\n            }\n            else {\n                this.results = output;\n                if (this.isSubQuery === true) {\n                    this.onTransactionCompleted_();\n                }\n            }\n\n        };\n        const processFirstQry = () => {\n            this.query.where = whereQuery.shift();\n            if (this.query.where[QUERY_OPTION.Or]) {\n                if (Object.keys(this.query.where).length === 1) {\n                    operation = QUERY_OPTION.Or;\n                    this.query.where = this.query.where[QUERY_OPTION.Or];\n                    this.onWhereArrayQrySuccess = onSuccess;\n                }\n                else {\n                    operation = QUERY_OPTION.And;\n                    this.onWhereArrayQrySuccess = onSuccess;\n                }\n            }\n            else {\n                operation = QUERY_OPTION.And;\n                this.onWhereArrayQrySuccess = onSuccess;\n            }\n            this.processWhere_();\n        };\n        processFirstQry();\n    }\n\n    protected onQueryFinished() {\n        if (this.isOr === true) {\n            this.orQuerySuccess_();\n        }\n        else if (this.isArrayQry === true) {\n            this.onWhereArrayQrySuccess();\n        }\n        else if (this.isTransaction === true || this.isSubQuery === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    private initTransaction_() {\n        this.createTransaction([this.tableName], this.onTransactionCompleted_, IDB_MODE.ReadOnly);\n        this.objectStore = this.transaction.objectStore(this.tableName);\n    }\n\n    private processWhere_() {\n        if (this.query.where.or) {\n            this.processOrLogic_();\n        }\n        this.goToWhereLogic();\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.error == null) {\n            if (this.query.flatten) {\n                debugger;\n                const flattendData = [];\n                const indexToDelete = {};\n                this.query.flatten.forEach(column => {\n                    this.results.forEach((data, i) => {\n                        data[column].forEach(item => {\n                            flattendData.push(\n                                { ...data, ...{ [column]: item } }\n                            );\n                        });\n                        indexToDelete[i] = true;\n                    });\n                });\n                let itemsDeleted = 0;\n                getKeys(indexToDelete).forEach(key => {\n                    this.results.splice(Number(key) - itemsDeleted, 1);\n                    ++itemsDeleted;\n                });\n                this.results = this.results.concat(flattendData);\n            }\n            this.processOrderBy();\n            if (!this.error) {\n                this.processGroupDistinctAggr();\n                if (this.shouldEvaluateSkipAtEnd) {\n                    this.results.splice(0, this.query.skip);\n                }\n                if (this.shouldEvaluateLimitAtEnd) {\n                    this.results = this.results.slice(0, this.query.limit);\n                }\n                this.onSuccess(this.results);\n            }\n            else {\n                this.onError(this.error);\n            }\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n\n    private orQueryFinish_() {\n        this.isOr = false;\n        this.results = this.orInfo.results;\n        // free or info memory\n        this.orInfo = null;\n        this.removeDuplicates();\n        this.onQueryFinished();\n    }\n\n    private orQuerySuccess_() {\n        this.orInfo.results = [... this.orInfo.results, ...this.results];\n        if (!this.query.limit || (this.query.limit > this.orInfo.results.length)) {\n            this.results = [];\n            const key = getObjectFirstKey(this.orInfo.orQuery);\n            if (key != null) {\n                const where = {};\n                where[key] = this.orInfo.orQuery[key];\n                delete this.orInfo.orQuery[key];\n                this.query.where = where;\n                this.goToWhereLogic();\n            }\n            else {\n                this.orQueryFinish_();\n            }\n        }\n        else {\n            this.orQueryFinish_();\n        }\n    }\n\n    private processOrLogic_() {\n        this.isOr = true;\n        this.orInfo = {\n            orQuery: this.query.where.or,\n            results: []\n        };\n        // free or memory\n        delete this.query.where.or;\n    }\n}","import { DATA_TYPE } from \"../../common/index\";\n\nexport const getDataType = (value) => {\n    if (value == null) {\n        return DATA_TYPE.Null;\n    }\n    const type = typeof value;\n    switch (type) {\n        case 'object':\n            if (Array.isArray(value)) {\n                return DATA_TYPE.Array;\n            }\n            else if (value.getDate && value.getTime) {\n                return DATA_TYPE.DateTime;\n            }\n        default:\n            return type;\n    }\n}","export const isArray = (value) => {\n    return Array.isArray(value);\n};","export const getObjectFirstKey = (value) => {\n    for (const key in value) {\n        return key;\n    }\n    return null;\n};","export const removeSpace = (value: string) => {\n    return value.replace(/\\s/g, '');\n};","import {\n    TranscationQuery, WebWorkerRequest, SelectQuery, RemoveQuery,\n    CountQuery, UpdateQuery, InsertQuery, ERROR_TYPE, API, IError\n} from \"../../../common/index\";\nimport { Base } from \"../base\";\nimport * as Select from '../select/index';\nimport * as Count from '../count/index';\nimport * as Insert from '../insert/index';\nimport * as Remove from '../remove/index';\nimport * as Update from '../update/index';\nimport { QueryHelper } from \"../query_helper\";\nimport { LogHelper } from \"../../log_helper\";\nimport { promise, promiseAll, getAutoIncrementValues } from \"../../helpers/index\";\nimport { Config } from \"../../config\";\n\nexport class Instance extends Base {\n    query: TranscationQuery;\n    results;\n    requestQueue: WebWorkerRequest[] = [];\n    isQueryExecuting = false;\n\n    isTxStarted_ = false;\n\n    constructor(qry: TranscationQuery, onSuccess: (results: any) => void, onError: (err: IError) => void) {\n        super();\n        this.query = qry;\n        this.onError = onError;\n        this.onSuccess = onSuccess;\n        this.results = {};\n    }\n\n    execute() {\n        const notExistingTable = this.getNotExistingTable_(this.query.tables);\n        if (notExistingTable != null) {\n            this.onError(new LogHelper(ERROR_TYPE.TableNotExist, { tableName: notExistingTable }).get());\n            return;\n        }\n        promiseAll<number>(this.query.tables.map(table => {\n            return getAutoIncrementValues(this.getTable(table));\n        })).then(results => {\n            results.forEach((result: any, index) => {\n                QueryHelper.autoIncrementValues[this.query.tables[index]] = result;\n            });\n            this.startExecution_();\n        }).catch(this.onError);\n    }\n\n    private startExecution_() {\n        const select = (qry: SelectQuery) => {\n            return this.pushRequest_({\n                name: API.Select,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const insert = (qry: InsertQuery) => {\n            return this.pushRequest_({\n                name: API.Insert,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const update = (qry: UpdateQuery) => {\n            return this.pushRequest_({\n                name: API.Update,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const remove = (qry: RemoveQuery) => {\n            return this.pushRequest_({\n                name: API.Remove,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const count = (qry: CountQuery) => {\n            return this.pushRequest_({\n                name: API.Count,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const setResult = (key: string, value) => {\n            this.results[key] = value;\n        };\n        const getResult = (key: string) => {\n            return this.results[key];\n        };\n        const abort = (msg: string) => {\n            this.abortTransaction_(msg);\n        };\n\n        const start = () => {\n            this.checkQueries_(this.requestQueue).then((results) => {\n                this.startTransaction_();\n            }).catch((err) => {\n                this.onError(err);\n            });\n        };\n        let txLogic = null;\n        if (Config.isRuningInWorker === true) {\n            eval(\"txLogic =\" + this.query.logic);\n\n        }\n        else {\n            txLogic = this.query.logic;\n        }\n        txLogic.call(\n            this,\n            {\n                data: this.query.data,\n                insert, select, update, remove,\n                count, setResult, getResult, abort, start\n            }\n        );\n\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`transaction query started`);\n        }\n    }\n\n    private startTransaction_() {\n        try {\n            this.isTxStarted_ = true;\n            this.initTransaction_(this.query.tables);\n            this.processExecutionOfQry_();\n        }\n        catch (ex) {\n            this.onExceptionOccured(ex);\n        }\n    }\n\n    private initTransaction_(tableNames: string[]) {\n        this.createTransaction(tableNames, this.onTransactionCompleted_.bind(this));\n    }\n\n    private onTransactionCompleted_() {\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`transaction finished`);\n        }\n        this.onSuccess(this.results);\n    }\n\n    private onRequestFinished_(result) {\n        const finisehdRequest = this.requestQueue.shift();\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`finished request : ${finisehdRequest.name} `);\n        }\n        if (finisehdRequest) {\n            if (this.error) {\n                this.abortTransaction_(\"automatic abort of transaction due to error occured\");\n                if (process.env.NODE_ENV === 'dev') {\n                    console.log(`transaction aborted due to error occured`);\n                }\n                this.onErrorOccured(this.error);\n            }\n            else {\n                this.isQueryExecuting = false;\n                if (finisehdRequest.onSuccess) {\n                    finisehdRequest.onSuccess(result);\n                }\n                this.processExecutionOfQry_();\n            }\n        }\n    }\n\n    private abortTransaction_(msg: string) {\n        if (this.transaction != null) {\n            this.transaction.abort();\n            if (process.env.NODE_ENV === 'dev') {\n                console.log(`transaction aborted. Msg : ${msg}`);\n            }\n        }\n    }\n\n    private executeRequest_(request: WebWorkerRequest) {\n        this.isQueryExecuting = true;\n        let requestObj;\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`executing request : ${request.name} `);\n        }\n        switch (request.name) {\n            case API.Select:\n                requestObj = new Select.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n            case API.Insert:\n                requestObj = new Insert.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n            case API.Update:\n                requestObj = new Update.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n            case API.Remove:\n                requestObj = new Remove.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n            case API.Count:\n                requestObj = new Count.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n        }\n        requestObj.isTransaction = true;\n        requestObj.execute();\n    }\n\n    private pushRequest_(request: WebWorkerRequest) {\n        const push = () => {\n            this.requestQueue.push(request);\n        };\n        const promiseObj = promise((resolve, reject) => {\n            request.onSuccess = (result) => {\n                resolve(result);\n            };\n            request.onError = (error) => {\n                this.error = error;\n                reject(error);\n            };\n        });\n        if (this.isTxStarted_ === true) {\n            this.checkQueries_([request]).then(() => {\n                push();\n                this.processExecutionOfQry_();\n            }).catch(err => {\n                this.error = err;\n                this.abortTransaction_(JSON.stringify(err));\n            });\n        }\n        else {\n            push();\n        }\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`request pushed : ${request.name} with query value - ${JSON.stringify(request.query)}`);\n        }\n        return promiseObj;\n    }\n\n    private processExecutionOfQry_() {\n        if (this.requestQueue.length > 0 && this.isQueryExecuting === false) {\n            this.executeRequest_(this.requestQueue[0]);\n        }\n    }\n\n    private checkQueries_(requestQueue: WebWorkerRequest[]) {\n        return promiseAll(requestQueue.map(request => {\n            const tableName = request.query.into || request.query.in;\n            return new QueryHelper(request.name, request.query).checkAndModify();\n        }));\n    }\n\n    private getNotExistingTable_(tables: string[]) {\n        let invalidTable: string = null;\n        tables.every(table => {\n            if (this.isTableExist(table) === false) {\n                invalidTable = table;\n                return false;\n            }\n            return true;\n        });\n        return invalidTable;\n    }\n}"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack://JsStoreWorker/webpack/bootstrap","webpack://JsStoreWorker/./src/common/enums.ts","webpack://JsStoreWorker/./src/worker/log_helper.ts","webpack://JsStoreWorker/./src/worker/business/idb_helper.ts","webpack://JsStoreWorker/./src/worker/business/base_helper.ts","webpack://JsStoreWorker/./src/worker/utils/get_regex_from_like_expression.ts","webpack://JsStoreWorker/./src/worker/business/where_checker.ts","webpack://JsStoreWorker/./src/worker/business/base.ts","webpack://JsStoreWorker/./src/worker/utils/is_null.ts","webpack://JsStoreWorker/./src/worker/business/update/schema_checker.ts","webpack://JsStoreWorker/./src/worker/business/insert/value_checker.ts","webpack://JsStoreWorker/./src/worker/business/insert/values_checker.ts","webpack://JsStoreWorker/./src/worker/business/query_helper.ts","webpack://JsStoreWorker/./src/worker/keystore/enums.ts","webpack://JsStoreWorker/./src/worker/keystore/business/base_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/idb_helper.ts","webpack://JsStoreWorker/./src/worker/keystore/business/remove_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/set_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/utils_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/init_db_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/get_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/main_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/query_executor.ts","webpack://JsStoreWorker/./src/worker/keystore/instance.ts","webpack://JsStoreWorker/./src/worker/config.ts","webpack://JsStoreWorker/./src/worker/business/clear.ts","webpack://JsStoreWorker/./src/worker/business/init_db.ts","webpack://JsStoreWorker/./src/worker/model/table_helper.ts","webpack://JsStoreWorker/./src/worker/model/db_helper.ts","webpack://JsStoreWorker/./src/worker/model/column.ts","webpack://JsStoreWorker/./src/worker/model/table.ts","webpack://JsStoreWorker/./src/worker/model/database.ts","webpack://JsStoreWorker/./src/worker/business/union/index.ts","webpack://JsStoreWorker/./src/worker/business/intersect/index.ts","webpack://JsStoreWorker/./src/worker/query_executor.ts","webpack://JsStoreWorker/./src/worker/business/where_base.ts","webpack://JsStoreWorker/./src/worker/helpers/promise.ts","webpack://JsStoreWorker/./src/worker/helpers/promise_all.ts","webpack://JsStoreWorker/./src/worker/business/base_db.ts","webpack://JsStoreWorker/./src/worker/business/select/then_evaluator.ts","webpack://JsStoreWorker/./src/worker/business/select/base_select.ts","webpack://JsStoreWorker/./src/worker/business/select/not_where.ts","webpack://JsStoreWorker/./src/worker/business/select/in.ts","webpack://JsStoreWorker/./src/worker/business/select/regex.ts","webpack://JsStoreWorker/./src/worker/business/select/where.ts","webpack://JsStoreWorker/./src/worker/business/select/group_by_helper.ts","webpack://JsStoreWorker/./src/worker/business/select/orderby_helper.ts","webpack://JsStoreWorker/./src/worker/business/drop_db.ts","webpack://JsStoreWorker/./src/worker/start.ts","webpack://JsStoreWorker/./src/worker/index.ts","webpack://JsStoreWorker/./src/worker/helpers/auto_increment_helper.ts","webpack://JsStoreWorker/./src/worker/business/insert/instance.ts","webpack://JsStoreWorker/./src/worker/business/update/base_update.ts","webpack://JsStoreWorker/./src/worker/business/update/not_where.ts","webpack://JsStoreWorker/./src/worker/business/update/in.ts","webpack://JsStoreWorker/./src/worker/business/update/regex.ts","webpack://JsStoreWorker/./src/worker/business/update/where.ts","webpack://JsStoreWorker/./src/worker/business/update/instance.ts","webpack://JsStoreWorker/./src/worker/business/remove/base_remove.ts","webpack://JsStoreWorker/./src/worker/business/remove/not_where.ts","webpack://JsStoreWorker/./src/worker/business/remove/in.ts","webpack://JsStoreWorker/./src/worker/business/remove/regex.ts","webpack://JsStoreWorker/./src/worker/business/remove/where.ts","webpack://JsStoreWorker/./src/worker/business/remove/instance.ts","webpack://JsStoreWorker/./src/worker/business/count/base_count.ts","webpack://JsStoreWorker/./src/worker/business/count/not_where.ts","webpack://JsStoreWorker/./src/worker/business/count/in.ts","webpack://JsStoreWorker/./src/worker/business/count/regex.ts","webpack://JsStoreWorker/./src/worker/business/count/where.ts","webpack://JsStoreWorker/./src/worker/business/count/instance.ts","webpack://JsStoreWorker/./src/worker/business/select/join.ts","webpack://JsStoreWorker/./src/worker/utils/get_keys.ts","webpack://JsStoreWorker/./src/worker/utils/is_object.ts","webpack://JsStoreWorker/./src/worker/business/select/instance.ts","webpack://JsStoreWorker/./src/worker/utils/get_data_type.ts","webpack://JsStoreWorker/./src/worker/utils/is_array.ts","webpack://JsStoreWorker/./src/worker/utils/get_object_first_key.ts","webpack://JsStoreWorker/./src/worker/utils/remove_space.ts","webpack://JsStoreWorker/./src/worker/business/transaction/instance.ts"],"names":[],"mappings":"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","file":"jsstore.worker.commonjs2.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 24);\n","export enum ERROR_TYPE {\n    WorkerNotSupplied = \"worker_not_supplied\",\n    IndexedDbUndefined = \"indexeddb_undefined\",\n    UndefinedColumn = \"undefined_column\",\n    UndefinedValue = \"undefined_value\",\n    UndefinedColumnName = \"undefined_column_name\",\n    UndefinedDbName = \"undefined_database_name\",\n    UndefinedColumnValue = \"undefined_column_value\",\n    NotArray = \"not_array\",\n    NoValueSupplied = \"no_value_supplied\",\n    ColumnNotExist = \"column_not_exist\",\n    EnableSearchOff = \"enable_search_off\",\n    InvalidOp = \"invalid_operator\",\n    NullValue = \"null_value\",\n    WrongDataType = \"wrong_data_type\",\n    TableNotExist = \"table_not_exist\",\n    DbNotExist = \"db_not_exist\",\n    ConnectionAborted = \"connection_aborted\",\n    ConnectionClosed = \"connection_closed\",\n    NotObject = \"not_object\",\n    InvalidConfig = \"invalid_config\",\n    DbBlocked = \"Db_blocked\",\n    IndexedDbNotSupported = \"indexeddb_not_supported\",\n    NullValueInWhere = \"null_value_in_where\",\n    InvalidJoinQuery = 'invalid_join_query',\n    InvalidOrderQuery = 'invalid_order_query',\n    InvalidQuery = 'invalid_query',\n    InvalidGroupQuery = 'invalid_group_query',\n}\n\nexport enum WORKER_STATUS {\n    Registered = \"registerd\",\n    Failed = \"failed\",\n    NotStarted = \"not_started\"\n}\n\nexport enum DATA_TYPE {\n    String = \"string\",\n    Object = \"object\",\n    Array = \"array\",\n    Number = \"number\",\n    Boolean = \"boolean\",\n    Null = \"null\",\n    DateTime = \"date_time\"\n}\n\nexport enum API {\n    InitDb = \"init_db\",\n    IsDbExist = \"is_db_exist\",\n    GetDbVersion = \"get_db_version\",\n    GetDbList = \"get_db_list\",\n    Get = \"get\",\n    Set = \"set\",\n    Select = \"select\",\n    Insert = \"insert\",\n    Update = \"update\",\n    Remove = \"remove\",\n    GetDbSchema = \"get_db_schema\",\n    OpenDb = \"open_db\",\n    Clear = \"clear\",\n    DropDb = \"drop_db\",\n    Count = \"count\",\n    ChangeLogStatus = \"change_log_status\",\n    Terminate = \"terminate\",\n    Transaction = \"transaction\",\n    InitKeyStore = \"init_keystore\",\n    CloseDb = \"close_db\",\n    Union = \"union\",\n    Intersect = \"intersect\"\n}\n\nexport enum EVENT {\n    RequestQueueEmpty = \"requestQueueEmpty\",\n    RequestQueueFilled = \"requestQueueFilled\"\n}\n\nexport enum QUERY_OPTION {\n    Where = \"where\",\n    Like = 'like',\n    Regex = 'regex',\n    In = 'in',\n    Equal = \"=\",\n    Between = '-',\n    GreaterThan = '>',\n    LessThan = '<',\n    GreaterThanEqualTo = \">=\",\n    LessThanEqualTo = \"<=\",\n    NotEqualTo = \"!=\",\n    Aggregate = \"aggregate\",\n    Max = \"max\",\n    Min = \"min\",\n    Avg = \"avg\",\n    Count = \"count\",\n    Sum = \"sum\",\n    Or = \"or\",\n    Skip = \"skip\",\n    Limit = \"limit\",\n    And = \"and\",\n    IgnoreCase = \"ignoreCase\",\n    Then = \"then\"\n}\n\nexport enum IDB_MODE {\n    ReadOnly = \"readonly\",\n    ReadWrite = \"readwrite\"\n}\n\nexport enum OCCURENCE {\n    First = 'f',\n    Last = 'l',\n    Any = 'a'\n}\n\nexport enum CONNECTION_STATUS {\n    Connected = \"connected\",\n    Closed = \"closed\",\n    NotStarted = \"not_started\",\n    UnableToStart = \"unable_to_start\",\n    ClosedByJsStore = \"closed_by_jsstore\"\n}","import { IError, ERROR_TYPE } from \"../common/index\";\nimport { Config } from \"./config\";\n\nexport class LogHelper implements IError {\n    type: ERROR_TYPE;\n    message: string;\n    private info_: any;\n\n    constructor(type: ERROR_TYPE, info: any = null) {\n        this.type = type;\n        this.info_ = info;\n        this.message = this.getMsg_();\n    }\n\n    throw() {\n        throw this.get();\n    }\n\n    static log(msg) {\n        if (Config.isLogEnabled) {\n            console.log(msg);\n        }\n    }\n\n    logError() {\n        console.error(this.get());\n    }\n\n\n\n    get() {\n        return {\n            message: this.message,\n            type: this.type\n        } as IError;\n    }\n\n    private getMsg_() {\n        let errMsg: string;\n        switch (this.type) {\n            case ERROR_TYPE.NotArray:\n                errMsg = \"Supplied value is not an array\";\n                break;\n            case ERROR_TYPE.UndefinedColumn:\n                errMsg = \"Column is undefined in Where\";\n                break;\n            case ERROR_TYPE.UndefinedValue:\n                errMsg = \"Value is undefined in Where\";\n                break;\n            case ERROR_TYPE.UndefinedColumnName:\n                errMsg = \"Column name is undefined '\" + this.info_['TableName'] + \"'\";\n                break;\n            case ERROR_TYPE.UndefinedDbName:\n                errMsg = \"Database name is not supplied\";\n                break;\n            case ERROR_TYPE.UndefinedColumnValue:\n                errMsg = \"Column value is undefined\";\n                break;\n            case ERROR_TYPE.NoValueSupplied:\n                errMsg = \"No value is supplied\";\n                break;\n            case ERROR_TYPE.InvalidOp:\n                errMsg = \"Invalid Op Value '\" + this.info_['Op'] + \"'\";\n                break;\n            case ERROR_TYPE.ColumnNotExist:\n                errMsg = this.info_['isOrder'] ?\n                    `Column '${this.info_['column']}' in order query does not exist` :\n                    `Column '${this.info_['column']}' does not exist`;\n                break;\n            case ERROR_TYPE.EnableSearchOff:\n                errMsg = \"Search is turned off for the Column '\" + this.info_['column'] + \"'\";\n                break;\n            case ERROR_TYPE.NullValue:\n                errMsg = \"Null value is not allowed for column '\" + this.info_['ColumnName'] + \"'\";\n                break;\n            case ERROR_TYPE.WrongDataType:\n                errMsg = \"Supplied value for column '\" + this.info_['column'] +\n                    \"' have wrong data type\";\n                break;\n            case ERROR_TYPE.TableNotExist:\n                errMsg = \"Table '\" + this.info_['tableName'] + \"' does not exist\";\n                break;\n            case ERROR_TYPE.DbNotExist:\n                errMsg = `Database with name ${this.info_['dbName']} does not exist`;\n                break;\n            case ERROR_TYPE.NotObject:\n                errMsg = \"supplied value is not object\";\n                break;\n            case ERROR_TYPE.InvalidOp:\n                errMsg = \"Invalid Config '\" + this.info_['Config'] + \" '\";\n                break;\n            case ERROR_TYPE.DbBlocked:\n                errMsg = `database is blocked, cant be deleted right now`;\n                break;\n            case ERROR_TYPE.NullValueInWhere:\n                errMsg = `Null/undefined is not allowed in where. Column '${this.info_['column']}' has null`;\n                break;\n            case ERROR_TYPE.InvalidJoinQuery:\n                errMsg = this.info_;\n                break;\n            default:\n                errMsg = this.message;\n                break;\n        }\n        return errMsg;\n    }\n}","import { CONNECTION_STATUS, ERROR_TYPE, IDB_MODE, IDbStatus } from \"../../common/index\";\nimport { KeyStore } from \"../keystore/index\";\nimport { DataBase } from \"../model/index\";\nimport { DropDb } from \"./drop_db\";\nimport { promise } from \"../helpers/index\";\n\nexport class IdbHelper {\n\n    static onDbDroppedByBrowser: () => void;\n    static transaction: IDBTransaction = null;\n    static isDbDeletedByBrowser: boolean;\n    static dbConnection: IDBDatabase;\n    static activeDb: DataBase;\n    static activeDbVersion = 0;\n    static dbStatus: IDbStatus = {\n        conStatus: CONNECTION_STATUS.NotStarted\n    };\n\n    static callDbDroppedByBrowser(deleteMetaData?: boolean) {\n        if (IdbHelper.dbStatus.conStatus === CONNECTION_STATUS.Connected) {\n            IdbHelper.isDbDeletedByBrowser = true;\n            if (deleteMetaData === true) {\n                const dropDbObject = new DropDb(function () {\n\n                }, function () {\n\n                });\n                dropDbObject.deleteMetaData();\n            }\n        }\n    }\n\n    static createTransaction(tableNames: string[], callBack: () => void, mode?) {\n        if (IdbHelper.transaction === null) {\n            mode = mode ? mode : IDB_MODE.ReadWrite;\n            IdbHelper.transaction = IdbHelper.dbConnection.transaction(tableNames, mode);\n            const onComplete = () => {\n                IdbHelper.transaction = null;\n                callBack();\n            };\n            IdbHelper.transaction.oncomplete = onComplete;\n            IdbHelper.transaction.onabort = onComplete;\n        }\n    }\n\n    static setDbList(list: string[]) {\n        return KeyStore.set('DataBase_List', list);\n    }\n\n    static updateDbStatus(status: CONNECTION_STATUS, err?: ERROR_TYPE) {\n        if (err === undefined) {\n            IdbHelper.dbStatus.conStatus = status;\n        }\n        else {\n            IdbHelper.dbStatus = {\n                conStatus: status,\n                lastError: err\n            };\n        }\n    }\n\n    static getDbList() {\n        return promise<string[]>((res, rej) => {\n            KeyStore.get<string[]>('DataBase_List').then(result => {\n                res(result == null ? [] : result);\n            }).catch(rej);\n        });\n    }\n\n    static getDbVersion(dbName: string) {\n        return promise<number>((res, rej) => {\n            KeyStore.get(`JsStore_${dbName}_Db_Version`).then(dbVersion => {\n                res(Number(dbVersion));\n            }).catch(rej);\n        });\n    }\n\n    static getDbSchema(dbName: string) {\n        return KeyStore.get<DataBase>(`JsStore_${dbName}_Schema`);\n    }\n\n    static getTable(tableName: string) {\n        const currentTable = IdbHelper.activeDb.tables.find(table => table.name === tableName);\n        return currentTable;\n    }\n}","import { IdbHelper } from \"./idb_helper\";\nimport { QUERY_OPTION } from \"../../common/index\";\nimport { DataBase } from \"../model/index\";\n\nexport class BaseHelper {\n\n\n    regexExpression: RegExp;\n    //   method helpers\n\n    protected get activeDb(): DataBase {\n        return IdbHelper.activeDb;\n    }\n\n    protected get dbConnection() {\n        return IdbHelper.dbConnection;\n    }\n\n    protected get transaction() {\n        return IdbHelper.transaction;\n    }\n\n    protected createTransaction(tableNames: string[], callBack: () => void, mode?) {\n        IdbHelper.createTransaction(tableNames, callBack, mode);\n    }\n\n    protected regexTest(value) {\n        return this.regexExpression.test(value);\n    }\n\n    protected isTableExist(tableName: string): boolean {\n        const index = this.activeDb.tables.findIndex(table => table.name === tableName);\n        return index >= 0;\n    }\n\n    protected getTable(tableName: string) {\n        return IdbHelper.getTable(tableName);\n    }\n\n    protected getKeyRange(value, op?) {\n        let keyRange: IDBKeyRange;\n        switch (op) {\n            case QUERY_OPTION.Between: keyRange = IDBKeyRange.bound(value.low, value.high, false, false); break;\n            case QUERY_OPTION.GreaterThan: keyRange = IDBKeyRange.lowerBound(value, true); break;\n            case QUERY_OPTION.GreaterThanEqualTo: keyRange = IDBKeyRange.lowerBound(value); break;\n            case QUERY_OPTION.LessThan: keyRange = IDBKeyRange.upperBound(value, true); break;\n            case QUERY_OPTION.LessThanEqualTo: keyRange = IDBKeyRange.upperBound(value); break;\n            default: keyRange = IDBKeyRange.only(value); break;\n        }\n        return keyRange;\n    }\n\n    protected getPrimaryKey(tableName): string {\n        const primaryKey: string = this.getTable(tableName).primaryKey;\n        return primaryKey ? primaryKey : this.getKeyPath(tableName);\n    }\n\n    protected getKeyPath(tableName) {\n        const transaction: IDBTransaction = this.dbConnection.transaction([tableName], \"readonly\"),\n            objectStore = transaction.objectStore(tableName);\n        return objectStore.keyPath as string;\n    }\n}","import { OCCURENCE } from \"../../common/index\";\n\nexport const getRegexFromLikeExpression = (likeExpression: string) => {\n    const filterValues = likeExpression.split('%');\n    let filterValue: string;\n    let occurence: OCCURENCE;\n    if (filterValues[1]) {\n        filterValue = filterValues[1];\n        occurence = filterValues.length > 2 ? OCCURENCE.Any : OCCURENCE.Last;\n    }\n    else {\n        filterValue = filterValues[0];\n        occurence = OCCURENCE.First;\n    }\n    switch (occurence) {\n        case OCCURENCE.First:\n            return new RegExp(`^${filterValue}`, 'i');\n        case OCCURENCE.Last:\n            return new RegExp(`${filterValue}$`, 'i');\n        default:\n            return new RegExp(`${filterValue}`, 'i');\n    }\n}","import { OCCURENCE, QUERY_OPTION } from \"../../common/index\";\nimport { getRegexFromLikeExpression } from \"../utils/index\";\n\n/**\n * For matching the different column value existance for where option\n * \n * @export\n * @class WhereChecker\n */\nexport class WhereChecker {\n  where: object;\n  status: boolean;\n  checkFlag: boolean;\n\n  constructor(where: object, checkFlag: boolean) {\n    this.where = where;\n    this.checkFlag = checkFlag;\n  }\n\n  check(rowValue) {\n    this.status = true;\n    if (this.checkFlag === true) {\n      for (const columnName in this.where) {\n        if (!this.status) {\n          break;\n        }\n        const columnValue = this.where[columnName];\n        if (typeof columnValue === 'object') {\n          for (const key in columnValue) {\n            if (!this.status) {\n              break;\n            }\n            switch (key) {\n              case QUERY_OPTION.In:\n                this.status = this.checkIn(columnName, rowValue[columnName]); break;\n              case QUERY_OPTION.Like:\n                this.status = this.checkLike_(columnName, rowValue[columnName]); break;\n              case QUERY_OPTION.Regex:\n                this.checkRegex(columnName, rowValue[columnName]); break;\n              case QUERY_OPTION.Between:\n              case QUERY_OPTION.GreaterThan:\n              case QUERY_OPTION.LessThan:\n              case QUERY_OPTION.GreaterThanEqualTo:\n              case QUERY_OPTION.LessThanEqualTo:\n              case QUERY_OPTION.NotEqualTo:\n                this.status = this.checkComparisionOp_(columnName, rowValue[columnName], key);\n                break;\n            }\n          }\n        }\n        else {\n          this.status = columnValue === rowValue[columnName];\n        }\n      }\n    }\n    return this.status;\n  }\n\n  private checkIn(column, value) {\n    return (this.where[column][QUERY_OPTION.In] as any[]).find(val => val === value) != null;\n  }\n\n  private checkLike_(column, value) {\n    return getRegexFromLikeExpression(this.where[column][QUERY_OPTION.Like]).test(value);\n  }\n\n  private checkRegex(column, value) {\n    const expr = this.where[column][QUERY_OPTION.Regex];\n    this.status = expr.test(value);\n  }\n\n  private checkComparisionOp_(column, value, symbol) {\n    const compareValue = this.where[column][symbol];\n    switch (symbol) {\n      // greater than\n      case QUERY_OPTION.GreaterThan:\n        return value > compareValue;\n      // less than\n      case QUERY_OPTION.LessThan:\n        return value < compareValue;\n      // less than equal\n      case QUERY_OPTION.LessThanEqualTo:\n        return value <= compareValue;\n      // greather than equal\n      case QUERY_OPTION.GreaterThanEqualTo:\n        return value >= compareValue;\n      // between\n      case QUERY_OPTION.Between:\n        return value > compareValue.low && value < compareValue.high;\n      // Not equal to\n      case QUERY_OPTION.NotEqualTo:\n        return value !== compareValue;\n    }\n  }\n}","import { BaseHelper } from \"./base_helper\";\nimport { IError, ERROR_TYPE, OCCURENCE, DATA_TYPE, QUERY_OPTION } from \"../../common/index\";\nimport { WhereChecker } from \"./where_checker\";\nimport { LogHelper } from \"../log_helper\";\nimport { Column } from \"../model/index\";\nimport { getDataType, getObjectFirstKey, getRegexFromLikeExpression } from \"../utils/index\";\n\nexport abstract class Base extends BaseHelper {\n    error: IError;\n    rowAffected = 0;\n    onSuccess: (result?) => void;\n    onError: (err: IError) => void;\n    objectStore: IDBObjectStore;\n    query;\n    whereCheckerInstance: WhereChecker;\n    tableName: string;\n    isTransaction: boolean;\n\n    skipRecord;\n    limitRecord;\n\n    protected onErrorOccured(e, customError = false) {\n        if (customError) {\n            e.logError();\n            this.error = (e as LogHelper).get();\n        }\n        else {\n            let error;\n            if (e.name) {\n                error = new LogHelper((e.name));\n                error.message = e.message;\n            }\n            else {\n                error = new LogHelper((e as any).target.error.name);\n                error.message = (e as any).target.error.message;\n            }\n            if (process.env.NODE_ENV === 'dev') {\n                error.logError();\n            }\n            this.error = error.get();\n        }\n    }\n\n    protected onExceptionOccured(ex: DOMException) {\n        console.error(ex);\n        this.onError({\n            message: ex.message,\n            type: ERROR_TYPE.InvalidQuery\n        });\n    }\n\n    protected getColumnInfo(columnName: string, tableName: string) {\n        return this.getTable(tableName).columns.find(column => column.name === columnName);\n    }\n\n    protected goToWhereLogic() {\n        const columnName = getObjectFirstKey(this.query.where);\n        if (this.objectStore.indexNames.contains(columnName)) {\n            const value = this.query.where[columnName];\n            if (typeof value === 'object') {\n                const checkFlag = Boolean(\n                    Object.keys(value).length > 1 ||\n                    Object.keys(this.query.where).length > 1\n                );\n                this.whereCheckerInstance = new WhereChecker(this.query.where, checkFlag);\n                const key = getObjectFirstKey(value);\n                switch (key) {\n                    case QUERY_OPTION.Like: {\n                        const regexVal = getRegexFromLikeExpression(value[QUERY_OPTION.Like]);\n                        (this as any).executeRegexLogic(columnName, regexVal);\n                    } break;\n                    case QUERY_OPTION.Regex:\n                        (this as any).executeRegexLogic(columnName, value[QUERY_OPTION.Regex]);\n                        break;\n                    case QUERY_OPTION.In:\n                        (this as any).executeInLogic(columnName, value[QUERY_OPTION.In]);\n                        break;\n                    case QUERY_OPTION.Between:\n                    case QUERY_OPTION.GreaterThan:\n                    case QUERY_OPTION.LessThan:\n                    case QUERY_OPTION.GreaterThanEqualTo:\n                    case QUERY_OPTION.LessThanEqualTo:\n                        (this as any).executeWhereLogic(columnName, value, key, \"next\");\n                        break;\n                    case QUERY_OPTION.Aggregate: break;\n                    default: (this as any).executeWhereLogic(columnName, value, null, \"next\");\n                }\n            }\n            else {\n                const checkFlag = Boolean(Object.keys(this.query.where).length > 1);\n                this.whereCheckerInstance = new WhereChecker(this.query.where, checkFlag);\n                (this as any).executeWhereLogic(columnName, value, null, \"next\");\n            }\n        }\n        else {\n            const column: Column = this.getColumnInfo(columnName, this.tableName);\n            const error = column == null ?\n                new LogHelper(ERROR_TYPE.ColumnNotExist, { column: columnName }) :\n                new LogHelper(ERROR_TYPE.EnableSearchOff, { column: columnName });\n\n            this.onErrorOccured(error, true);\n        }\n    }\n}","export const isNull = (value) => {\n    if (value == null) {\n        return true;\n    } else {\n        switch (typeof value) {\n            case 'string': return value.length === 0;\n            case 'number': return isNaN(value);\n        }\n    }\n    return false;\n};","import { Table } from \"../../model/table\";\nimport { Column } from \"../../model/column\";\nimport { LogHelper } from \"../../log_helper\";\nimport { isNull, getDataType } from \"../../utils/index\";\nimport { DATA_TYPE, ERROR_TYPE } from \"../../../common/index\";\n\nexport class SchemaChecker {\n    table: Table;\n    constructor(table: Table) {\n        this.table = table;\n    }\n\n    check(setValue: object, tblName: string) {\n        let log: LogHelper = null;\n        if (typeof setValue === DATA_TYPE.Object) {\n            if (this.table) {\n                // loop through table column and find data is valid\n                this.table.columns.every((column: Column) => {\n                    if (log === null) {\n                        if (column.name in setValue) {\n                            log = this.checkByColumn_(column, setValue[column.name]);\n                        }\n                        return true;\n                    }\n                    else {\n                        return false;\n                    }\n                });\n            }\n            else {\n                log = new LogHelper(ERROR_TYPE.TableNotExist, { tableName: tblName });\n            }\n        }\n        else {\n            log = new LogHelper(ERROR_TYPE.NotObject);\n        }\n        if (log != null) {\n            return log.get();\n        }\n        return null;\n    }\n\n\n\n    private checkByColumn_(column: Column, value) {\n        let log: LogHelper = null;\n        // check not null schema\n        if (column.notNull === true && isNull(value)) {\n            log = new LogHelper(ERROR_TYPE.NullValue, { ColumnName: column.name });\n        }\n\n        // check datatype\n        const type = getDataType(value);\n        const checkFurther = value != null;\n        if (column.dataType && checkFurther) {\n            if (type !== column.dataType && type !== 'object') {\n                log = new LogHelper(ERROR_TYPE.WrongDataType, { column: column.name });\n            }\n        }\n\n        // check allowed operators\n        if (checkFurther && type === 'object') {\n            const allowedOp = ['+', '-', '*', '/', '{push}'];\n            for (const prop in value) {\n                if (allowedOp.indexOf(prop) < 0 && column.dataType && type !== column.dataType) {\n                    log = new LogHelper(ERROR_TYPE.WrongDataType, { column: column.name });\n                }\n                break;\n            }\n        }\n        return log;\n    }\n}","import { Table, Column } from \"../../model/index\";\nimport { ERROR_TYPE, DATA_TYPE } from \"../../../common/index\";\nimport { LogHelper } from \"../../log_helper\";\nimport { isNull, getDataType } from \"../../utils/index\";\n\nexport class ValueChecker {\n    table: Table;\n    value: object;\n    errorOccured = false;\n    log: LogHelper;\n    autoIncrementValue = {};\n\n    constructor(table: Table, autoIncrementValue) {\n        this.table = table;\n        this.autoIncrementValue = autoIncrementValue;\n    }\n\n    checkAndModifyValue(value) {\n        this.value = value;\n        this.table.columns.every((column) => {\n            this.checkAndModifyColumnValue_(column);\n            return !this.errorOccured;\n        });\n        return this.errorOccured;\n    }\n\n    private checkNotNullAndDataType_(column: Column) {\n        // check not null schema\n        if (column.notNull && isNull(this.value[column.name])) {\n            this.onValidationError_(ERROR_TYPE.NullValue, { ColumnName: column.name });\n        }\n        // check datatype\n        else if (column.dataType && !isNull(this.value[column.name]) &&\n            getDataType(this.value[column.name]) !== column.dataType) {\n            this.onValidationError_(ERROR_TYPE.WrongDataType, { column: column.name });\n        }\n    }\n\n    private checkAndModifyColumnValue_(column: Column) {\n        const columnValue = this.value[column.name];\n        // check auto increment scheme\n        if (column.autoIncrement) {\n            // if value is null, then create the autoincrement value\n            if (isNull(columnValue)) {\n                this.value[column.name] = ++this.autoIncrementValue[column.name];\n            }\n            else {\n                if (getDataType(columnValue) === DATA_TYPE.Number) {\n                    // if column value is greater than autoincrement value saved, then make the\n                    // column value as autoIncrement value\n                    if (columnValue > this.autoIncrementValue[column.name]) {\n                        this.autoIncrementValue[column.name] = columnValue;\n                    }\n                }\n            }\n        }\n        // check Default Schema\n        else if (column.default !== undefined && isNull(columnValue)) {\n            this.value[column.name] = column.default;\n        }\n        this.checkNotNullAndDataType_(column);\n    }\n\n    private onValidationError_(error: ERROR_TYPE, details: object) {\n        this.errorOccured = true;\n        this.log = new LogHelper(error, details);\n    }\n}","import { Table } from \"../../model/index\";\nimport { ValueChecker } from \"./value_checker\";\nimport { promise, getAutoIncrementValues, setAutoIncrementValue } from \"../../helpers/index\";\nimport { QueryExecutor } from \"../../query_executor\";\nimport { QueryHelper } from \"../query_helper\";\n\nexport class ValuesChecker {\n    table: Table;\n    values: object[];\n    valueCheckerObj: ValueChecker;\n\n    constructor(table: Table, values: object[]) {\n        this.table = table;\n        this.values = values;\n    }\n\n    checkAndModifyValues() {\n        return promise((resolve, reject) => {\n            const onAutoIncValueEvaluated = (autoIncrementValues) => {\n                this.valueCheckerObj = new ValueChecker(this.table, autoIncrementValues);\n                this.startChecking().then(resolve).catch(reject);\n            };\n            if (QueryExecutor.isTransactionQuery === false) {\n                getAutoIncrementValues(this.table).then(autoIncValues => {\n                    onAutoIncValueEvaluated(autoIncValues);\n                }).catch(reject);\n            }\n            else {\n                onAutoIncValueEvaluated(QueryHelper.autoIncrementValues[this.table.name]);\n            }\n        });\n    }\n    \n    private startChecking() {\n        return promise((resolve, reject) => {\n            let isError = false;\n            this.values.every((item) => {\n                isError = this.valueCheckerObj.checkAndModifyValue(item);\n                return !isError;\n            });\n            if (isError) {\n                const error = this.valueCheckerObj.log.get();\n                reject(error);\n            }\n            const promiseObj = setAutoIncrementValue(this.table, this.valueCheckerObj.autoIncrementValue);\n            if (QueryExecutor.isTransactionQuery === false) {\n                promiseObj.then(resolve).catch(reject);\n            }\n            else {\n                resolve();\n            }\n        });\n    }\n}","import { API, ERROR_TYPE, QUERY_OPTION, DATA_TYPE, InsertQuery, IError } from \"../../common/index\";\nimport { IdbHelper } from \"./idb_helper\";\nimport { LogHelper } from \"../log_helper\";\nimport * as Update from \"./update/index\";\nimport * as Insert from \"./insert/index\";\nimport { Table } from \"../model/index\";\nimport { promise } from \"../helpers/index\";\nimport { getDataType } from \"../utils/index\";\n\nexport class QueryHelper {\n    api: API;\n    query;\n    error: IError;\n    isTransaction = false;\n    static autoIncrementValues: { [table: string]: { [columnName: string]: number } } = {};\n\n    constructor(api: API, query: any) {\n        this.api = api;\n        this.query = query;\n    }\n    checkAndModify() {\n        return promise((resolve, reject) => {\n            const resolveReject = () => {\n                if (this.error == null) {\n                    resolve();\n                }\n                else {\n                    reject(this.error);\n                }\n            };\n            switch (this.api) {\n                case API.Select:\n                case API.Remove:\n                case API.Count:\n                    this.checkFetchQuery_();\n                    resolveReject();\n                    break;\n                case API.Insert:\n                    this.checkInsertQuery_().then(resolveReject).\n                        catch((err) => {\n                            this.error = err;\n                            resolveReject();\n                        });\n                    break;\n                case API.Update:\n                    this.checkUpdateQuery_();\n                    resolveReject();\n                    break;\n            }\n        });\n    }\n\n    private isInsertQryValid_(callBack: (tbl: Table) => void) {\n        const table = this.getTable_((this.query as InsertQuery).into);\n        let log: LogHelper;\n        if (table) {\n            switch (getDataType(this.query.values)) {\n                case DATA_TYPE.Array:\n                    break;\n                case DATA_TYPE.Null:\n                    log = new LogHelper(ERROR_TYPE.NoValueSupplied);\n                    break;\n                default:\n                    log = new LogHelper(ERROR_TYPE.NotArray);\n            }\n        }\n        else {\n            log = new LogHelper(ERROR_TYPE.TableNotExist, { tableName: (this.query as InsertQuery).into });\n        }\n        callBack(table);\n        return log == null ? null : log.get();\n    }\n\n    private checkInsertQuery_() {\n        return promise((resolve, reject) => {\n            let table;\n            const err = this.isInsertQryValid_((tbl) => {\n                table = tbl;\n            });\n            if (err == null) {\n                if (this.query.skipDataCheck === true) {\n                    resolve();\n                }\n                else {\n                    const valueCheckerInstance = new Insert.ValuesChecker(table, this.query.values);\n                    valueCheckerInstance.checkAndModifyValues().then(() => {\n                        (this.query as InsertQuery).values = valueCheckerInstance.values;\n                        resolve();\n                    }).catch(reject);\n                }\n            }\n            else {\n                reject(err);\n            }\n        });\n    }\n\n    private checkUpdateQuery_() {\n        this.error = new Update.SchemaChecker(this.getTable_(this.query.in)).\n            check(this.query.set, this.query.in);\n        if (this.error == null) {\n            if (this.query.where != null) {\n                this.checkForNullInWhere_();\n                if (this.error == null) {\n                    this.addGreatAndLessToNotOp_();\n                }\n            }\n        }\n    }\n\n    private checkForNullInWhere_() {\n        for (const key in this.query.where) {\n            if (this.query.where[key] == null) {\n                this.error = new LogHelper(ERROR_TYPE.NullValueInWhere, { column: key }).get();\n                return;\n            }\n        }\n    }\n\n    private checkFetchQuery_() {\n        if (this.isTableExist_(this.query.from) === true) {\n            if (this.query.where != null) {\n                this.checkForNullInWhere_();\n                if (this.error == null) {\n                    this.addGreatAndLessToNotOp_();\n                }\n            }\n\n        }\n        else {\n            this.error = new LogHelper(ERROR_TYPE.TableNotExist, { tableName: this.query.from }).get();\n        }\n    }\n\n    private isTableExist_(tableName: string): boolean {\n        const index = this.activeDb_.tables.findIndex(table => table.name === tableName);\n        return index >= 0;\n    }\n\n    private get activeDb_() {\n        return IdbHelper.activeDb;\n    }\n\n    private getTable_(tableName: string) {\n        return IdbHelper.getTable(tableName);\n    }\n\n    private addGreatAndLessToNotOp_() {\n        const whereQuery = this.query.where;\n        const containsNot = (qry: object, keys: string[]) => {\n            return keys.findIndex(key => qry[key][QUERY_OPTION.NotEqualTo] != null) >= 0;\n        };\n        const addToSingleQry = (qry, keys: string[]) => {\n            let value;\n            keys.forEach((prop) => {\n                value = qry[prop];\n                if (value[QUERY_OPTION.NotEqualTo] != null) {\n                    qry[prop][QUERY_OPTION.GreaterThan] = value[QUERY_OPTION.NotEqualTo];\n                    if (qry[QUERY_OPTION.Or] === undefined) {\n                        qry[QUERY_OPTION.Or] = {};\n                        qry[QUERY_OPTION.Or][prop] = {};\n                    }\n                    else if (qry[QUERY_OPTION.Or][prop] === undefined) {\n                        qry[QUERY_OPTION.Or][prop] = {};\n                    }\n                    qry[QUERY_OPTION.Or][prop][QUERY_OPTION.LessThan] = value[QUERY_OPTION.NotEqualTo];\n                    delete qry[prop][QUERY_OPTION.NotEqualTo];\n                }\n            });\n            return qry;\n        };\n        switch (getDataType(whereQuery)) {\n            case DATA_TYPE.Object:\n                const queryKeys = Object.keys(whereQuery);\n                if (containsNot(whereQuery, queryKeys)) {\n                    if (queryKeys.length === 1) {\n                        this.query.where = addToSingleQry(whereQuery, queryKeys);\n                    }\n                    else {\n                        const whereTmpQry = [];\n                        queryKeys.forEach((prop) => {\n                            whereTmpQry.push(addToSingleQry({ [prop]: whereQuery[prop] }, [prop]));\n                        });\n                        this.query.where = whereTmpQry;\n                    }\n                }\n                break;\n            default:\n                const whereTmp = [];\n                (whereQuery as object[]).forEach(qry => {\n                    const qryKeys = Object.keys(qry);\n                    if (containsNot(qry, qryKeys)) {\n                        qry = addToSingleQry(qry, qryKeys);\n                    }\n                    whereTmp.push(qry);\n                });\n                this.query.where = whereTmp;\n        }\n    }\n\n\n\n}","export enum CONNECTION_STATUS {\n    Connected = \"connected\",\n    Closed = \"closed\",\n    NotStarted = \"not_connected\"\n}","import { IError } from \"../interfaces\";\n\nexport class Base {\n    results = null;\n    onSuccess: (results) => void;\n    onError: (err: IError) => void;\n    errorOccured = false;\n    errorCount = 0;\n    transaction: IDBTransaction;\n    objectStore: IDBObjectStore;\n\n    protected onErrorOccured(e) {\n        ++this.errorCount;\n        if (this.errorCount === 1) {\n            if (this.onError != null) {\n                this.onError((e as any).target.error);\n            }\n        }\n        console.error(e);\n    }\n}","import { CONNECTION_STATUS } from '../enums';\nimport { IDbStatus } from '../interfaces';\n\nexport class IdbHelper {\n    static dbConnection: IDBDatabase;\n    static isDbDeletedByBrowser: boolean;\n    static transaction: IDBTransaction = null;\n\n    static dbStatus: IDbStatus = {\n        conStatus: CONNECTION_STATUS.NotStarted,\n    };\n\n    static callDbDroppedByBrowser() {\n        IdbHelper.isDbDeletedByBrowser = IdbHelper.dbStatus.conStatus === CONNECTION_STATUS.Connected ? true : false;\n    }\n\n    static createTransaction(tableNames, callBack: () => void, mode?) {\n        if (IdbHelper.transaction === null) {\n            mode = mode ? mode : \"readwrite\";\n            IdbHelper.transaction = IdbHelper.dbConnection.transaction(tableNames, mode);\n            IdbHelper.transaction.oncomplete = () => {\n                IdbHelper.transaction = null;\n                callBack();\n            };\n            (IdbHelper.transaction as any).ontimeout = function () {\n                this._transaction = null;\n                console.error('transaction timed out');\n            };\n        }\n    }\n}","import { Base } from \"./base_logic\";\nimport { IError } from \"../interfaces\";\nimport { QueryExecutor } from \"../query_executor\";\nimport { IdbHelper } from \"./idb_helper\";\n\nexport class Remove extends Base {\n    key: string;\n    rowAffected = 0;\n    constructor(key: string, onSuccess: (recordRemoved: number) => void, onError: (err: IError) => void) {\n        super();\n        this.key = key;\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute() {\n        this.initTransaction();\n        const removeData = (column, value) => {\n            const cursorRequest = this.objectStore.index(column).openCursor(IDBKeyRange.only(value));\n            cursorRequest.onerror = (e) => {\n                this.errorOccured = true;\n                this.onErrorOccured(e);\n            };\n            cursorRequest.onsuccess = (e: any) => {\n                const cursor: IDBCursorWithValue = e.target.result;\n                if (cursor) {\n                    cursor.delete();\n                    ++this.rowAffected;\n                    cursor.continue();\n                }\n            };\n        };\n\n        if (!this.errorOccured) {\n            removeData(QueryExecutor.columnName, this.key);\n        }\n    }\n\n    private initTransaction() {\n        IdbHelper.createTransaction([QueryExecutor.tableName], this.onTransactionCompleted.bind(this));\n        this.objectStore = IdbHelper.transaction.objectStore(QueryExecutor.tableName);\n    }\n\n    private onTransactionCompleted() {\n        if (this.errorOccured === false) {\n            this.onSuccess(this.rowAffected);\n        }\n    }\n}","import { Base } from \"./base_logic\";\nimport { IInsert, IError } from \"../interfaces\";\nimport { IdbHelper } from \"./idb_helper\";\nimport { QueryExecutor } from \"../query_executor\";\n\nexport class Set extends Base {\n    query: IInsert;\n    constructor(query: IInsert, onSuccess: (result) => void, onError: (err: IError) => void) {\n        super();\n        try {\n            this.query = query;\n            this.onSuccess = onSuccess;\n            this.onError = onError;\n        }\n        catch (ex) {\n            console.error(ex);\n        }\n    }\n\n    execute() {\n        const updateIfExistElseInsert = () => {\n            const cursorRequest = this.objectStore.index(QueryExecutor.columnName).openCursor(\n                IDBKeyRange.only(this.query[QueryExecutor.columnName])\n            );\n            cursorRequest.onsuccess = (e) => {\n                const cursor: IDBCursorWithValue = (e as any).target.result;\n                if (cursor) {\n                    cursor.update(this.query);\n                }\n                else {\n                    insertData();\n                }\n            };\n\n            cursorRequest.onerror = (e) => {\n                this.errorOccured = true;\n                this.onErrorOccured(e);\n            };\n\n        };\n        const insertData = () => {\n            const addResult = this.objectStore.add(this.query);\n            addResult.onerror = (e) => {\n                this.errorOccured = true;\n                this.onErrorOccured(e);\n            };\n        };\n        this.initTransaction();\n        updateIfExistElseInsert();\n    }\n\n    private initTransaction() {\n        IdbHelper.createTransaction([QueryExecutor.tableName], this.onTransactionCompleted_);\n        this.objectStore = IdbHelper. transaction.objectStore(QueryExecutor.tableName);\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.errorOccured === false && this.onSuccess) {\n            this.onSuccess(null);\n        }\n    }\n}","import { CONNECTION_STATUS } from './enums';\nimport { IdbHelper } from './business/idb_helper';\n\nexport class Utils {\n\n    static updateDbStatus(status: CONNECTION_STATUS, err?) {\n        if (err === undefined) {\n            IdbHelper.dbStatus.conStatus = status;\n        }\n        else {\n            IdbHelper.dbStatus = {\n                conStatus: status,\n                lastError: err\n            };\n        }\n    }\n}\n","import { IError } from \"../interfaces\";\nimport { CONNECTION_STATUS } from \"../enums\";\nimport { Utils } from \"../utils_logic\";\nimport { IdbHelper } from \"./idb_helper\";\nimport { QueryExecutor } from \"../query_executor\";\nimport { ERROR_TYPE } from \"../../../common/index\";\n\nexport let tempDatas;\nexport class InitDb {\n    constructor(dbName: string, onSuccess: () => void, onError: (err: IError) => void) {\n        const dbRequest = self.indexedDB.open(dbName, 1);\n        IdbHelper.isDbDeletedByBrowser = false;\n        dbRequest.onerror = (event) => {\n            if ((event as any).target.error.name === 'InvalidStateError') {\n                onError({\n                    message: \"Indexeddb is blocked\",\n                    type: ERROR_TYPE.IndexedDbNotSupported\n                } as IError);\n            }\n            else {\n                onError((event as any).target.error);\n            }\n        };\n\n        dbRequest.onsuccess = (event) => {\n            IdbHelper.dbStatus.conStatus = CONNECTION_STATUS.Connected;\n            IdbHelper.dbConnection = dbRequest.result;\n            IdbHelper.dbConnection.onclose = () => {\n                IdbHelper.callDbDroppedByBrowser();\n                Utils.updateDbStatus(CONNECTION_STATUS.Closed, ERROR_TYPE.ConnectionClosed);\n            };\n\n            IdbHelper.dbConnection.onversionchange = (e: any) => {\n                if (e.newVersion === null) { // An attempt is made to delete the db\n                    e.target.close(); // Manually close our connection to the db\n                    IdbHelper.callDbDroppedByBrowser();\n                    Utils.updateDbStatus(CONNECTION_STATUS.Closed, ERROR_TYPE.ConnectionClosed);\n                }\n            };\n\n            IdbHelper.dbConnection.onerror = (e: any) => {\n                IdbHelper.dbStatus.lastError = \"Error occured in connection :\" + e.target.result;\n            };\n\n            IdbHelper.dbConnection.onabort = (e) => {\n                IdbHelper.dbStatus = {\n                    conStatus: CONNECTION_STATUS.Closed,\n                    lastError: \"Connection aborted\"\n                };\n            };\n\n            if (onSuccess != null) {\n                onSuccess();\n            }\n        };\n\n        dbRequest.onupgradeneeded = (event: any) => {\n            const db = event.target.result,\n                column = \"Key\";\n            db.createObjectStore(QueryExecutor.tableName, {\n                keyPath: column\n            }).createIndex(column, column, { unique: true });\n        };\n    }\n}","import { Base } from \"./base_logic\";\nimport { IError } from \"../interfaces\";\nimport { QueryExecutor } from \"../query_executor\";\nimport { IdbHelper } from \"./idb_helper\";\n\nexport class Get extends Base {\n    key: string;\n    constructor(key: string, onSuccess: (result) => void, onError: (err: IError) => void) {\n        super();\n        this.key = key;\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute() {\n        const getData = (column, value) => {\n            const cursorRequest = this.objectStore.index(column).openCursor(IDBKeyRange.only(value));\n            cursorRequest.onerror = (e) => {\n                this.errorOccured = true;\n                this.onErrorOccured(e);\n            };\n            cursorRequest.onsuccess = (e: any) => {\n                const cursor: IDBCursorWithValue = e.target.result;\n                if (cursor) {\n                    this.results = cursor.value['Value'];\n                }\n            };\n        };\n        this.initTransaction_();\n        getData(QueryExecutor.columnName, this.key);\n\n    }\n\n    private initTransaction_() {\n        IdbHelper.createTransaction([QueryExecutor.tableName], this.onTransactionCompleted_, 'readonly');\n        this.objectStore = IdbHelper. transaction.objectStore(QueryExecutor.tableName);\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.errorOccured === false) {\n            this.onSuccess(this.results);\n        }\n    }\n}\n","import { QueryExecutor } from '../query_executor';\nimport { CONNECTION_STATUS } from \"../enums\";\nimport { IInsert, IError, IQueryRequest, IQueryResult } from \"../interfaces\";\nimport { Remove } from \"./remove_logic\";\nimport { Set } from \"./set_logic\";\nimport { InitDb } from \"./init_db_logic\";\nimport { Get } from \"./get_logic\";\nimport { IdbHelper } from './idb_helper';\n\nexport class Main {\n    onQueryFinished: (result) => void;\n    constructor(onQueryFinished = null) {\n        this.onQueryFinished = onQueryFinished;\n    }\n\n    checkConnectionAndExecuteLogic(request: IQueryRequest) {\n        if (request.name === 'init_db') {\n            this.executeLogic(request);\n        }\n        else {\n            switch (IdbHelper.dbStatus.conStatus) {\n                case CONNECTION_STATUS.Connected: this.executeLogic(request); break;\n                case CONNECTION_STATUS.NotStarted:\n                    setTimeout(() => {\n                        this.checkConnectionAndExecuteLogic(request);\n                    }, 100); break;\n                case CONNECTION_STATUS.Closed:\n                    if (IdbHelper.isDbDeletedByBrowser) {\n                        this.createDb(() => {\n                            IdbHelper.isDbDeletedByBrowser = false;\n                            this.checkConnectionAndExecuteLogic(request);\n                        }, (err) => {\n                            console.error(err);\n                        });\n                    }\n            }\n        }\n    }\n\n    private returnResult(result) {\n        this.onQueryFinished(result);\n    }\n\n    private executeLogic(request: IQueryRequest) {\n        const onSuccess = (results?) => {\n            this.returnResult({\n                returnedValue: results\n            } as IQueryResult);\n        };\n        const onError = (err) => {\n            this.returnResult({\n                errorDetails: err,\n                errorOccured: true\n            } as IQueryResult);\n        };\n\n        switch (request.name) {\n            case 'get':\n                this.get(request.query, onSuccess, onError);\n                break;\n            case 'set': this.set(request.query, onSuccess, onError);\n                break;\n            case 'remove': this.remove(request.query, onSuccess, onError);\n                break;\n            case 'init_db': this.createDb(onSuccess, onError); break;\n            case 'close_db': this.closeDb(onSuccess, onError); break;\n        }\n    }\n\n    set(query: IInsert, onSuccess: (result) => void, onError: (err: IError) => void) {\n        const insertInstance = new Set(query, onSuccess, onError);\n        insertInstance.execute();\n    }\n\n    remove(key: string, onSuccess: (result) => void, onError: (err: IError) => void) {\n        const deleteInstance = new Remove(key, onSuccess, onError);\n        deleteInstance.execute();\n    }\n\n    get(key: string, onSuccess: (result) => void, onError: (err: IError) => void) {\n        const getInstance = new Get(key, onSuccess, onError);\n        getInstance.execute();\n    }\n\n    createDb(onSuccess: () => void, onError: (err: IError) => void) {\n        const dbName = \"KeyStore\";\n        const initDbInstance = new InitDb(dbName, onSuccess, onError);\n    }\n\n    closeDb(onSuccess: () => void, onError: (err: IError) => void) {\n        if (IdbHelper.dbStatus.conStatus === CONNECTION_STATUS.Connected) {\n            IdbHelper.dbStatus.conStatus = CONNECTION_STATUS.Closed;\n            IdbHelper.dbConnection.close();\n        }\n        onSuccess();\n    }\n}","import { IQueryResult, IQueryRequest } from \"./interfaces\";\nimport { Main } from \"./business/main_logic\";\nimport { promise } from \"../helpers/index\";\n\nexport class QueryExecutor {\n    static requestQueue: IQueryRequest[] = [];\n    static tableName = \"LocalStore\";\n    static columnName = \"Key\";\n    static isCodeExecuting = false;\n    static prcoessQuery<T>(request: IQueryRequest) {\n        return promise<T>((resolve, reject) => {\n            request.onSuccess = (result) => {\n                resolve(result);\n            };\n            request.onError = (error) => {\n                if (process.env.NODE_ENV === 'dev') {\n                    console.error(error);\n                }\n                reject(error);\n            };\n            this.requestQueue.push(request);\n            this.executeCode();\n        });\n    }\n\n    static executeCode() {\n        if (!this.isCodeExecuting && this.requestQueue.length > 0) {\n            this.isCodeExecuting = true;\n            const request: IQueryRequest = {\n                name: this.requestQueue[0].name,\n                query: this.requestQueue[0].query\n            } as IQueryRequest;\n            new Main(this.onQueryFinished.bind(this)).checkConnectionAndExecuteLogic(request);\n        }\n    }\n\n    static onQueryFinished(message: IQueryResult) {\n        const finishedRequest: IQueryRequest = this.requestQueue.shift();\n        this.isCodeExecuting = false;\n        if (message.errorOccured) {\n            finishedRequest.onError(message.errorDetails);\n        }\n        else {\n            finishedRequest.onSuccess(message.returnedValue);\n        }\n        this.executeCode();\n    }\n}\n","import { QueryExecutor } from './query_executor';\nimport { IQueryRequest, IError, IInsert } from \"./interfaces\";\n\nexport class KeyStore {\n    /**\n     * Initialize KeyStore\n     * \n     */\n    static init = () => {\n        if (indexedDB) {\n            return QueryExecutor.prcoessQuery({\n                name: 'init_db',\n                query: null\n            } as IQueryRequest);\n        }\n    };\n\n    static close = () => {\n        return QueryExecutor.prcoessQuery({\n            name: 'close_db',\n            query: null\n        } as IQueryRequest);\n    };\n\n    /**\n     * return the value by key\n     * \n     * @param {string} key \n     * @param {(result) => void} onSuccess \n     * @param {(err: IError) => void} [onError=null] \n     * @returns \n     */\n    static get = <T>(key: string) => {\n        return QueryExecutor.prcoessQuery<T>({\n            name: 'get',\n            query: key\n        });\n    };\n\n    /**\n     * insert or update value\n     * \n     * @param {any} key \n     * @param {any} value \n     * @param {(result) => void} [onSuccess] \n     * @param {(err: IError) => void} [onError] \n     * @returns \n     */\n    static set = (key, value) => {\n        const query = {\n            Key: key,\n            Value: value\n        } as IInsert;\n        return QueryExecutor.prcoessQuery({\n            name: 'set',\n            query: query\n        } as IQueryRequest);\n    };\n\n    /**\n     * delete value\n     * \n     * @param {string} key \n     * @param {(result) => void} [onSuccess=null] \n     * @param {(err: IError) => void} [onError=null] \n     * @returns \n     */\n    static remove = (key: string) => {\n        return QueryExecutor.prcoessQuery({\n            name: 'remove',\n            query: key\n        } as IQueryRequest);\n    };\n}\n\n\n","export class Config {\n    static isLogEnabled = false;\n    static isRuningInWorker = false;\n}","import { Base } from \"./base\";\nimport { IError } from \"../../common/index\";\nimport { Column } from \"../model/index\";\nimport { KeyStore } from \"../keystore/index\";\n\nexport class Clear extends Base {\n    constructor(tableName: string, onSuccess: () => void, onError: (err: IError) => void) {\n        super();\n        this.query = tableName;\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute() {\n        this.createTransaction([this.query], () => {\n            if (this.error == null) {\n                this.onSuccess();\n            }\n            else {\n                this.onError(this.error);\n            }\n        });\n        const clearRequest: IDBRequest = this.transaction.objectStore(this.query).clear();\n        clearRequest.onsuccess = (e) => {\n            const currentTable = this.getTable(this.query);\n            currentTable.columns.forEach((column: Column) => {\n                if (column.autoIncrement) {\n                    KeyStore.set(`JsStore_${this.activeDb.name}_${this.query}_${column.name}_Value`, 0);\n                }\n            });\n        };\n\n        clearRequest.onerror = this.onErrorOccured;\n    }\n}","import { TableHelper, Column } from \"../model/index\";\nimport { IError, CONNECTION_STATUS } from \"../../common/index\";\nimport { KeyStore } from \"../keystore/index\";\nimport { BaseDb } from \"./base_db\";\nimport { promise } from \"../helpers/index\";\n\nexport class InitDb extends BaseDb {\n    onSuccess: (isDbCreated: boolean) => void;\n\n    constructor(onSuccess: (isDbCreated: boolean) => void, onError: (err: IError) => void) {\n        super();\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute(tablesMetaData: TableHelper[]) {\n        const listofTableCreated = [];\n        const dbRequest = indexedDB.open(this.dbName, this.dbVersion);\n        let isDbCreated = false;\n        dbRequest.onerror = (event) => {\n            if (this.onError != null) {\n                this.onError((event as any).target.error);\n            }\n        };\n\n        dbRequest.onsuccess = (event) => {\n            this.dbStatus.conStatus = CONNECTION_STATUS.Connected;\n            this.dbConnection = dbRequest.result;\n            (this.dbConnection as any).onclose = this.onDbClose.bind(this);\n\n            this.dbConnection.onversionchange = this.onDbVersionChange.bind(this);\n            this.dbConnection.onerror = this.onDbConError.bind(this);\n\n            if (isDbCreated) {\n                // save in database list\n                this.savedbNameIntoDbList_().then(() => {\n                    if (this.onSuccess != null) {\n                        this.onSuccess(isDbCreated);\n                    }\n                });\n            }\n            else {\n                this.setPrimaryKey_();\n                this.onSuccess(isDbCreated);\n            }\n        };\n\n        dbRequest.onupgradeneeded = (event) => {\n            isDbCreated = true;\n            const dbConnection = (event as any).target.result;\n            const createObjectStore = (item: TableHelper, index) => {\n                try {\n                    let store: IDBObjectStore;\n                    if (item.primaryKey.length > 0) {\n                        this.activeDb.tables[index].primaryKey = item.primaryKey;\n                        store = dbConnection.createObjectStore(item.name, {\n                            keyPath: item.primaryKey\n                        });\n                    }\n                    else {\n                        store = dbConnection.createObjectStore(item.name, {\n                            autoIncrement: true\n                        });\n                    }\n                    item.columns.forEach((column: Column) => {\n                        if (column.enableSearch === true) {\n                            const options = column.primaryKey ? { unique: true } : { unique: column.unique };\n                            options['multiEntry'] = column.multiEntry;\n                            const keyPath = column.keyPath == null ? column.name : column.keyPath;\n                            store.createIndex(column.name, keyPath, options);\n                            if (column.autoIncrement) {\n                                KeyStore.set(`JsStore_${this.dbName}_${item.name}_${column.name}_Value`, 0);\n                            }\n                        }\n                    });\n                    listofTableCreated.push(item.name);\n                    // setting the table version\n                    KeyStore.set(`JsStore_${this.dbName}_${item.name}_Version`, item.version);\n                }\n                catch (e) {\n                    console.error(e);\n                }\n            };\n            tablesMetaData.forEach((item: TableHelper, index) => {\n                if (item.requireDelete) {\n                    // Delete the old datastore.    \n                    if (dbConnection.objectStoreNames.contains(item.name)) {\n                        dbConnection.deleteObjectStore(item.name);\n                    }\n                    createObjectStore(item, index);\n                }\n                else if (item.requireCreation) {\n                    createObjectStore(item, index);\n                }\n            });\n        };\n    }\n\n    private savedbNameIntoDbList_() {\n        return promise((res, rej) => {\n            this.getDbList().then(dbList => {\n                if (dbList.indexOf(this.dbName) < 0) {\n                    dbList.push(this.dbName);\n                    this.setDbList(dbList).then(res).catch(rej);\n                }\n                else {\n                    res();\n                }\n            }).catch(rej);\n        });\n    }\n\n    private setPrimaryKey_() {\n        this.activeDb.tables.forEach((table, index) => {\n            table.columns.every(item => {\n                this.activeDb.tables[index].primaryKey = item.primaryKey ? item.name : \"\";\n                return !item.primaryKey;\n            });\n        });\n    }\n}\n","import { Table } from \"./table\";\nimport { Column } from \"./column\";\nimport { KeyStore } from \"../keystore/index\";\nimport { IdbHelper } from \"../business/index\";\nimport { promise } from \"../helpers/index\";\n\nexport class TableHelper {\n    name: string;\n    columns: Column[] = [];\n\n    // internal Members\n    primaryKey: string;\n    version: number;\n    requireDelete = false;\n    requireCreation = false;\n    private callback_: (tableHelperObj: TableHelper) => void;\n\n    constructor(table: Table) {\n        this.name = table.name;\n        this.version = table.version;\n        this.columns = table.columns;\n        this.setPrimaryKey_();\n    }\n\n    createMetaData(dbName: string): Promise<TableHelper> {\n        return promise((resolve) => {\n            this.callback_ = resolve;\n            this.setRequireDelete_(dbName);\n            this.setDbVersion_(dbName);\n        });\n    }\n\n    private setPrimaryKey_() {\n        this.columns.every((item) => {\n            this.primaryKey = item.primaryKey ? item.name : \"\";\n            return !item.primaryKey;\n        });\n    }\n\n    private setRequireDelete_(dbName: string) {\n        KeyStore.get<number>(`JsStore_${dbName}_${this.name}_Version`).then(tableVersion => {\n            if (tableVersion == null) {\n                this.requireCreation = true;\n            }\n            // mark only table which has version greater than store version\n            else if (tableVersion < this.version) {\n                this.requireDelete = true;\n            }\n        });\n    }\n\n    private setDbVersion_(dbName: string) {\n        IdbHelper.activeDbVersion = IdbHelper.activeDbVersion > this.version ? IdbHelper.activeDbVersion : this.version;\n        // setting db version\n        KeyStore.set(`JsStore_${dbName}_Db_Version`, IdbHelper.activeDbVersion);\n        // setting table version\n        KeyStore.set(`JsStore_${dbName}_${this.name}_Version`, IdbHelper.activeDbVersion).then(() => {\n            this.version = IdbHelper.activeDbVersion;\n            this.callback_(this);\n        });\n    }\n}","import { DataBase } from \"./database\";\nimport { TableHelper } from \"./table_helper\";\nimport { Table } from \"./table\";\nimport { promiseAll } from \"../helpers/index\";\n\nexport class DbHelper {\n    dbName: string;\n    tables: Table[] = [];\n\n    constructor(dataBase: DataBase) {\n        this.dbName = dataBase.name;\n        this.tables = dataBase.tables;\n    }\n\n    createMetaData() {\n        return promiseAll(\n            this.tables.map((table) => {\n                return new TableHelper(table).createMetaData(this.dbName);\n            })\n        );\n    }\n}","import { IColumnOption } from \"../../common/index\";\n\nexport class Column implements IColumnOption {\n    name: string;\n    autoIncrement: boolean;\n    primaryKey: boolean;\n    unique: boolean;\n    notNull: boolean;\n    dataType: string;\n    default;\n    multiEntry: boolean;\n    enableSearch: boolean;\n    keyPath: string[];\n\n    constructor(key: Column) {\n        this.name = key.name;\n        this.autoIncrement = key.autoIncrement != null ? key.autoIncrement : false;\n        this.primaryKey = key.primaryKey != null ? key.primaryKey : false;\n        this.unique = key.unique != null ? key.unique : false;\n        this.notNull = key.notNull != null ? key.notNull : false;\n        this.dataType = key.dataType != null ? key.dataType : (key.autoIncrement ? 'number' : null);\n        this.default = key.default;\n        this.multiEntry = key.multiEntry == null ? false : key.multiEntry;\n        this.enableSearch = key.enableSearch == null ? true : key.enableSearch;\n        this.keyPath = key.keyPath;\n    }\n\n}","import { Column } from \"./column\";\nimport { ITable } from \"../../common/index\";\n\nexport class Table {\n    name: string;\n    columns: Column[] = [];\n    version: number;\n    primaryKey: string;\n\n    constructor(table: ITable) {\n        this.name = table.name;\n        this.version = table.version == null ? 1 : table.version;\n        for (const columnName in table.columns) {\n            const column = {\n                name: columnName\n            } as Column;\n\n            for (const feature in table.columns[columnName]) {\n                const value = table.columns[columnName][feature];\n                switch (feature) {\n                    case 'primaryKey':\n                    case 'autoIncrement':\n                    case 'unique':\n                    case 'dataType':\n                    case 'enableSearch':\n                    case 'keyPath':\n                    case 'multiEntry':\n                    case 'default':\n                    case 'notNull':\n                        column[feature] = value as never; break;\n                }\n            }\n            this.columns.push(new Column(column));\n        }\n    }\n}","\nimport { Table } from \"./table\";\nimport { IDataBase } from \"../../common/index\";\n \nexport class DataBase {\n    name: string;\n    tables: Table[] = [];\n\n    constructor(dataBase: IDataBase) {\n        this.name = dataBase.name;\n        dataBase.tables.forEach((item) => {\n            this.tables.push(new Table(item));\n        });\n    }\n}\n","import * as Select from '../select/index';\nimport { SelectQuery, IError } from '../../../common/index';\nimport { Base } from '../base';\n\n\nexport class Union extends Base {\n    execute(query: SelectQuery[], onSuccess: (results: object[]) => void, onError: (err: IError) => void) {\n        let index = 0;\n        const hashMap = {};\n        let isQueryForSameTable = true;\n        const queryLength = query.length;\n        query.every((qry, i) => {\n            if (i + 1 < queryLength && qry.from !== query[i + 1].from) {\n                isQueryForSameTable = false;\n                return false;\n            }\n            return true;\n        });\n        let getHashKey;\n        if (isQueryForSameTable) {\n            const pKey = this.getPrimaryKey(query[0].from);\n            getHashKey = (val) => {\n                return val[pKey];\n            };\n        }\n        else {\n            getHashKey = (val) => {\n                let columnValKey = \"\";\n                for (const key in val) {\n                    columnValKey += val[key];\n                }\n                return columnValKey;\n            };\n        }\n\n        const fetchData = () => {\n            if (index < query.length) {\n                new Select.Instance(query[index++], (selectResult) => {\n                    selectResult.forEach(val => {\n                        hashMap[getHashKey(val)] = val;\n                    });\n                    fetchData();\n                }, onError).execute();\n            }\n            else {\n                const results = [];\n                for (const key in hashMap) {\n                    results.push(hashMap[key]);\n                }\n                onSuccess(results);\n            }\n        };\n        fetchData();\n    }\n\n\n}","import * as Select from '../select/index';\nimport { IError, IntersectQuery } from '../../../common/index';\nimport { Helper } from '../select/orderby_helper';\n\n\nexport class Intersect extends Helper {\n    execute(intersectQry: IntersectQuery, onSuccess: (results: object[]) => void, onError: (err: IError) => void) {\n        this.query = intersectQry as any;\n        let index = 0;\n        let hashMap = {};\n        let hashMapTemp = {};\n        let isQueryForSameTable = true;\n        const query = intersectQry.queries;\n        const queryLength = query.length;\n        query.every((qry, i) => {\n            if (i + 1 < queryLength && qry.from !== query[i + 1].from) {\n                isQueryForSameTable = false;\n                return false;\n            }\n            return true;\n        });\n        let getHashKey;\n        if (isQueryForSameTable) {\n            const pKey = this.getPrimaryKey(query[0].from);\n            getHashKey = (val) => {\n                return val[pKey];\n            };\n        }\n        else {\n            getHashKey = (val) => {\n                let columnValKey = \"\";\n                for (const key in val) {\n                    columnValKey += val[key];\n                }\n                return columnValKey;\n            };\n        }\n\n\n        const fetchData = () => {\n            if (index < queryLength) {\n                new Select.Instance(query[index], (selectResult) => {\n                    hashMap = {};\n                    selectResult.forEach(val => {\n                        const columnValKey = getHashKey(val);\n                        if (index === 0) {\n                            hashMapTemp[columnValKey] = val;\n                        } else if (hashMapTemp[columnValKey] != null) {\n                            hashMap[columnValKey] = val;\n                        }\n                    });\n                    if (index > 0) {\n                        hashMapTemp = { ...hashMap };\n                    }\n\n                    ++index;\n                    fetchData();\n                }, onError).execute();\n            }\n            else {\n                const results = [];\n                let resultPusher: (key: string) => void;\n                let skip = intersectQry.skip;\n                const limit = intersectQry.limit;\n                const onFinished = () => {\n                    this.results = results;\n                    this.query.join = {} as any;\n                    this.processOrderBy();\n                    this.processGroupDistinctAggr();\n                    onSuccess(this.results);\n                };\n                let shouldStopLoop = false;\n                let key: string;\n                const pushResult = () => {\n                    results.push(hashMap[key]);\n                };\n                const checkLimitAndPush = () => {\n                    if (results.length < limit) {\n                        pushResult();\n                    }\n                    else {\n                        shouldStopLoop = true;\n                    }\n                };\n                const skipChecker = (callBack: () => void) => {\n                    if (skip === 0) {\n                        callBack();\n                    }\n                    else {\n                        --skip;\n                    }\n                };\n                if (intersectQry.skip && intersectQry.limit) {\n                    resultPusher = () => {\n                        skipChecker(() => {\n                            checkLimitAndPush();\n                        });\n                    };\n\n                }\n                else if (intersectQry.limit) {\n                    resultPusher = checkLimitAndPush;\n                }\n                else if (intersectQry.skip) {\n                    resultPusher = () => {\n                        skipChecker(() => {\n                            pushResult();\n                        });\n                    };\n                }\n                else {\n                    resultPusher = () => {\n                        pushResult();\n                    };\n                }\n                if (limit) {\n                    for (key in hashMap) {\n                        resultPusher(key);\n                        if (shouldStopLoop) {\n                            break;\n                        }\n                    }\n                }\n                else {\n                    for (key in hashMap) {\n                        resultPusher(key);\n                    }\n                }\n                onFinished();\n            }\n        };\n        fetchData();\n    }\n}","import { IdbHelper, DropDb, InitDb, Clear, QueryHelper } from \"./business/index\";\nimport * as Select from './business/select/index';\nimport * as Count from './business/count/index';\nimport * as Insert from './business/insert/index';\nimport * as Remove from './business/remove/index';\nimport * as Update from './business/update/index';\nimport * as Transaction from \"./business/transaction/index\";\nimport { LogHelper } from \"./log_helper\";\nimport {\n    UpdateQuery, InsertQuery, RemoveQuery, SelectQuery, CountQuery, SetQuery,\n    CONNECTION_STATUS, ERROR_TYPE, DATA_TYPE, API,\n    WebWorkerResult, WebWorkerRequest, IDataBase, IError\n} from \"../common/index\";\nimport { Config } from \"./config\";\nimport { KeyStore } from \"./keystore/index\";\nimport { TableHelper, DbHelper, DataBase } from \"./model/index\";\nimport { promise } from \"./helpers/index\";\nimport { getDataType } from \"./utils/index\";\nimport { Union } from './business/union/index';\nimport { Intersect } from \"./business/intersect/index\";\nexport class QueryExecutor {\n    static isTransactionQuery = false;\n    onQueryFinished: (result: any) => void;\n\n    constructor(fn?: (result: any) => void) {\n        this.onQueryFinished = fn;\n        QueryHelper.autoIncrementValues = {};\n    }\n\n    checkConnectionAndExecuteLogic(request: WebWorkerRequest) {\n        LogHelper.log('request executing:' + request.name);\n        switch (request.name) {\n            case API.InitDb:\n            case API.IsDbExist:\n            case API.GetDbVersion:\n            case API.GetDbList:\n            case API.GetDbSchema:\n            case API.Get:\n            case API.Set:\n            case API.ChangeLogStatus:\n            case API.Terminate:\n            case API.OpenDb:\n            case API.InitKeyStore:\n            case API.CloseDb:\n                const err = this.checkForIdbSupport_();\n                if (err == null) {\n                    this.executeLogic_(request);\n                }\n                else {\n                    this.returnResult_({\n                        errorDetails: err,\n                        errorOccured: true\n                    } as WebWorkerResult);\n                }\n                break;\n            default:\n                switch (this.dbStatus_.conStatus) {\n                    case CONNECTION_STATUS.Connected: {\n                        this.executeLogic_(request);\n                    } break;\n                    case CONNECTION_STATUS.Closed: {\n                        if (this.isDbDeletedByBrowser_ === true) {\n                            this.initDb_(null, () => {\n                                this.isDbDeletedByBrowser_ = false;\n                                this.checkConnectionAndExecuteLogic(request);\n                            }, request.onError);\n                        }\n                        else {\n                            this.initDb_(this.activeDb_ as any, () => {\n                                this.checkConnectionAndExecuteLogic(request);\n                            }, request.onError);\n                        }\n                    } break;\n\n                }\n        }\n    }\n\n    private changeLogStatus_(status: boolean, onSuccess, onError) {\n        Config.isLogEnabled = status;\n        onSuccess();\n    }\n\n    private returnResult_(result) {\n        if (Config.isRuningInWorker === true) {\n            (self as any).postMessage(result);\n        }\n        else {\n            this.onQueryFinished(result);\n        }\n\n    }\n\n    private executeLogic_(request: WebWorkerRequest) {\n        const onSuccess = (results?) => {\n            this.returnResult_({\n                returnedValue: results\n            } as WebWorkerResult);\n        };\n        const onError = (err) => {\n            this.returnResult_({\n                errorDetails: err,\n                errorOccured: true\n            } as WebWorkerResult);\n        };\n\n        QueryExecutor.isTransactionQuery = request.name === API.Transaction;\n        switch (request.name) {\n            case API.InitDb:\n                if (this.isDbDeletedByBrowser_ === true) {\n                    this.initDb_(null, () => {\n                        this.isDbDeletedByBrowser_ = false;\n                        onSuccess();\n                    }, onError);\n                }\n                else {\n                    this.initDb_(request.query as IDataBase, onSuccess, onError);\n                }\n                break;\n            case API.OpenDb:\n                this.openDb_(request.query, onSuccess, onError); break;\n            case API.Select:\n                new Select.Instance(request.query as SelectQuery, onSuccess, onError).execute();\n                break;\n            case API.Insert: new Insert.Instance(request.query as InsertQuery, onSuccess, onError).execute();\n                break;\n            case API.Update:\n                new Update.Instance(request.query as UpdateQuery, onSuccess, onError).execute();\n                break;\n            case API.Remove:\n                new Remove.Instance(request.query as RemoveQuery, onSuccess, onError).execute();\n                break;\n            case API.IsDbExist: this.isDbExist_(request.query, onSuccess, onError);\n                break;\n            case API.GetDbVersion:\n                this.getDbVersion_(request.query as string).then(onSuccess).catch(onError);\n                break;\n            case API.GetDbList:\n                this.getDbList_().then(onSuccess).catch(onError);\n                break;\n            case API.GetDbSchema:\n                this.getDbSchema_(request.query as string).then(onSuccess).catch(onError);\n                break;\n            case API.Clear: new Clear(request.query as string, onSuccess, onError).execute();\n                break;\n            case API.DropDb: this.dropDb_(onSuccess, onError);\n                break;\n            case API.Count:\n                new Count.Instance(request.query as CountQuery, onSuccess, onError).execute();\n                break;\n            case API.Get: this.get_(request.query as string).then(onSuccess).catch(onError);\n                break;\n            case API.Set: this.set_(request.query as SetQuery).then(onSuccess).catch(onError);\n                break;\n            case API.ChangeLogStatus:\n                this.changeLogStatus_(request.query as boolean, onSuccess, onError);\n                break;\n            case API.Transaction: new Transaction.Instance(request.query, onSuccess, onError).execute();\n                break;\n            case API.CloseDb:\n            case API.Terminate:\n                this.terminate_(onSuccess, onError);\n                break;\n            case API.Union:\n                new Union().execute(request.query, onSuccess, onError);\n                break;\n            case API.InitKeyStore:\n                this.initKeyStore_(onSuccess);\n                break;\n            case API.Intersect:\n                new Intersect().execute(request.query, onSuccess, onError);\n                break;\n            default:\n                if (process.env.NODE_ENV === 'dev') {\n                    console.error('The Api:-' + request.name + ' does not support.');\n                }\n        }\n    }\n\n    private openDb_(dbName: string, onSuccess, onError) {\n        if (this.activeDb_ != null && this.activeDb_.name === dbName) {\n            this.processCreateDb(this.activeDb_).then(onSuccess).catch(onError);\n        }\n        else {\n            this.getDbSchema_(dbName).then((db) => {\n                if (db != null) {\n                    this.processCreateDb(db).then(onSuccess).catch(onError);\n                }\n                else {\n                    onError(new LogHelper(ERROR_TYPE.DbNotExist, { dbName: dbName }).get());\n                }\n            }).catch(onError);\n        }\n    }\n\n    private initKeyStore_(onSuccess) {\n        KeyStore.init().then(onSuccess()).catch(() => {\n            IdbHelper.dbStatus = {\n                conStatus: CONNECTION_STATUS.UnableToStart,\n                lastError: ERROR_TYPE.IndexedDbNotSupported,\n            };\n        });\n    }\n\n    private getDbSchema_(dbName: string) {\n        return IdbHelper.getDbSchema(dbName);\n    }\n\n    private terminate_(onSuccess: () => void, onError: (err: IError) => void) {\n        KeyStore.close().then(() => {\n            this.closeDb_();\n            onSuccess();\n        });\n    }\n\n    private get isDbDeletedByBrowser_() {\n        return IdbHelper.isDbDeletedByBrowser;\n    }\n\n    private set isDbDeletedByBrowser_(value) {\n        IdbHelper.isDbDeletedByBrowser = value;\n    }\n\n    private getDbList_() {\n        return IdbHelper.getDbList();\n    }\n\n    private get activeDb_() {\n        return IdbHelper.activeDb;\n    }\n\n    private set activeDb_(value) {\n        IdbHelper.activeDb = value;\n    }\n\n    private closeDb_() {\n        if (IdbHelper.dbStatus.conStatus === CONNECTION_STATUS.Connected) {\n            IdbHelper.dbStatus.conStatus = CONNECTION_STATUS.ClosedByJsStore;\n            IdbHelper.dbConnection.close();\n        }\n    }\n\n    private dropDb_(onSuccess: () => void, onError: (err: IError) => void) {\n        this.closeDb_();\n        new DropDb(onSuccess, onError).deleteDb();\n    }\n\n\n\n    private processCreateDb(db: DataBase) {\n        return promise((res, rej) => {\n            // create meta data\n            const dbHelper = new DbHelper(db);\n            dbHelper.createMetaData().then((tablesMetaData: TableHelper[]) => {\n                this.activeDb_ = db;\n                const createDbInstance = new InitDb((isDbCreated) => {\n                    this.activeDb_ = db;\n                    if (isDbCreated) {\n                        // save dbSchema in keystore\n                        KeyStore.set(\"JsStore_\" + db.name + \"_Schema\", db);\n                    }\n                    res(isDbCreated);\n                }, rej);\n                createDbInstance.execute(tablesMetaData);\n            });\n        });\n    }\n\n    private initDb_(\n        dataBase: IDataBase, onSuccess: () => void, onError: (err: IError) => void\n    ) {\n        if (dataBase == null) {\n            this.processCreateDb(this.activeDb_);\n        }\n        else {\n            this.closeDb_();\n            this.getDbVersion_(dataBase.name).then(version => {\n                this.activeDbVersion_ = version ? version : 1;\n                this.processCreateDb(new DataBase(dataBase)).then(onSuccess).catch(onError);\n            }).catch(onError);\n        }\n\n    }\n\n    private get activeDbVersion_() {\n        return IdbHelper.activeDbVersion;\n    }\n\n    private set activeDbVersion_(value) {\n        IdbHelper.activeDbVersion = value;\n    }\n\n    private getDbVersion_(dbName: string) {\n        return IdbHelper.getDbVersion(dbName);\n    }\n\n    private get dbStatus_() {\n        return IdbHelper.dbStatus;\n    }\n\n    private checkForIdbSupport_() {\n        if (this.dbStatus_.conStatus === CONNECTION_STATUS.UnableToStart) {\n            const error = {\n                type: this.dbStatus_.lastError,\n            } as IError;\n            switch (error.type) {\n                case ERROR_TYPE.IndexedDbNotSupported:\n                    error.message = \"Browser does not support IndexedDB\"; break;\n                default:\n                    error.message = \"unknown error occured\";\n            }\n            return error;\n        }\n    }\n\n    private isDbExist_(dbInfo, onSuccess: (isExist: boolean) => void, onError: (err: IError) => void) {\n        if (getDataType(dbInfo) === DATA_TYPE.String) {\n            this.getDbVersion_(dbInfo).then(function (dbVersion) {\n                onSuccess(Boolean(dbVersion));\n            });\n        }\n        else {\n            this.getDbVersion_(dbInfo.dbName).then(function (dbVersion) {\n                onSuccess(dbInfo.table.version <= dbVersion);\n            });\n        }\n    }\n\n    private get_(key: string) {\n        return KeyStore.get(key);\n    }\n\n    private set_(query: SetQuery) {\n        return KeyStore.set(query.key, query.value);\n    }\n}","import { Base } from \"./base\";\n\nexport class WhereBase extends Base {\n    protected results: any[] = [];\n\n    protected onQueryFinished() {\n        // virtual\n    }\n}","export const promise = <T>(callBack: (resolve, reject) => void) => {\n    return new Promise<T>(callBack);\n};","export const promiseAll = <T>(promises: any) => {\n    return Promise.all<T>(promises);\n};","import { IdbHelper } from \"./idb_helper\";\nimport { CONNECTION_STATUS, ERROR_TYPE, IError } from \"../../common/index\";\nexport class BaseDb {\n\n    onError: (err: IError) => void;\n    protected get dbName() {\n        return IdbHelper.activeDb.name;\n    }\n\n    protected get dbStatus() {\n        return IdbHelper.dbStatus;\n    }\n\n    protected set dbStatus(value) {\n        IdbHelper.dbStatus = value;\n    }\n\n\n    protected set dbConnection(value) {\n        IdbHelper.dbConnection = value;\n    }\n\n    protected get dbConnection() {\n        return IdbHelper.dbConnection;\n    }\n\n    protected updateDbStatus(status: CONNECTION_STATUS, err?: ERROR_TYPE) {\n        IdbHelper.updateDbStatus(status, err);\n    }\n\n    protected onDbDroppedByBrowser(deleteMetaData?: boolean) {\n        IdbHelper.callDbDroppedByBrowser(deleteMetaData);\n    }\n\n    protected get dbVersion() {\n        return parseInt(IdbHelper.activeDbVersion as any);\n    }\n\n    protected get activeDb() {\n        return IdbHelper.activeDb;\n    }\n\n    protected getDbList() {\n        return IdbHelper.getDbList();\n    }\n\n    protected setDbList(value) {\n        return IdbHelper.setDbList(value);\n    }\n\n\n    protected onDbClose(event) {\n        this.onDbDroppedByBrowser();\n        this.updateDbStatus(CONNECTION_STATUS.Closed, ERROR_TYPE.ConnectionClosed);\n    }\n\n    protected onDbVersionChange(e: IDBVersionChangeEvent) {\n        if (e.newVersion === null) { // An attempt is made to delete the db\n            (e.target as any).close(); // Manually close our connection to the db\n            this.onDbDroppedByBrowser(true);\n            this.updateDbStatus(CONNECTION_STATUS.Closed, ERROR_TYPE.ConnectionClosed);\n        }\n    }\n\n    protected onDbConError(e) {\n        IdbHelper.dbStatus.lastError = (\"Error occured in connection :\" + (e.target as any).result) as any;\n    }\n}","import { QUERY_OPTION, CaseOption } from \"../../../common/index\";\n\nexport class ThenEvaluator {\n    private columnName_: string;\n    private value;\n    private caseQuery_: { [columnName: string]: [CaseOption] };\n    private caseColumnQuery_: CaseOption[];\n    private length_: number;\n\n    setCaseAndValue(caseQuery: any, value) {\n        this.caseQuery_ = caseQuery;\n        this.setValue(value);\n    }\n\n    setCaseAndColumn(caseQuery: { [columnName: string]: [CaseOption] }, columnName: string) {\n        this.caseQuery_ = caseQuery;\n        this.setColumn(columnName);\n        return this;\n    }\n\n    setColumn(columnName: string) {\n        this.columnName_ = columnName;\n        this.caseColumnQuery_ = this.caseQuery_[this.columnName_];\n        this.length_ = this.caseColumnQuery_.length;\n        return this;\n    }\n\n    setValue(value) {\n        this.value = value;\n        return this;\n    }\n\n    evaluate() {\n        for (let i = 0; i < this.length_; i++) {\n            if (this.checkCase_(this.caseColumnQuery_[i]) === true) {\n                return this.caseColumnQuery_[i].then;\n            }\n        }\n        const lastThen = this.caseColumnQuery_[this.length_ - 1].then;\n        return lastThen == null ? this.value[this.columnName_] : lastThen;\n    }\n\n    private checkCase_(cond: CaseOption) {\n        let queryOption;\n        for (queryOption in cond) {\n            switch (queryOption) {\n                case QUERY_OPTION.GreaterThan:\n                    if (this.value[this.columnName_] > cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.Equal:\n                    if (this.value[this.columnName_] === cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.LessThan:\n                    if (this.value[this.columnName_] < cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.GreaterThanEqualTo:\n                    if (this.value[this.columnName_] >= cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.LessThanEqualTo:\n                    if (this.value[this.columnName_] <= cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.NotEqualTo:\n                    if (this.value[this.columnName_] !== cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.Between:\n                    if (this.value[this.columnName_] > cond[queryOption].low && this.value[this.columnName_] < cond[queryOption].high) {\n                        return true;\n                    } break;\n            }\n            return false;\n        }\n    }\n}","import { WhereBase } from \"../where_base\";\nimport { SelectQuery, CaseOption, QUERY_OPTION } from \"../../../common/index\";\nimport { ThenEvaluator } from \"./then_evaluator\";\n\n\nexport class BaseSelect extends WhereBase {\n    sorted = false;\n    isOr: boolean;\n    isArrayQry: boolean;\n    onWhereArrayQrySuccess: () => void;\n    query: SelectQuery;\n    orInfo: {\n        results?: any[];\n        orQuery: object\n    };\n\n    isSubQuery = false;\n\n    shouldEvaluateLimitAtEnd = false;\n    shouldEvaluateSkipAtEnd = false;\n\n    protected pushResult: (value) => void;\n\n    protected thenEvaluator = new ThenEvaluator();\n\n    protected setPushResult() {\n        if (this.query.case) {\n            this.pushResult = (value) => {\n                let columnName: string;\n                this.thenEvaluator.setCaseAndValue(this.query.case, value);\n                for (columnName in this.query.case) {\n                    value[columnName] = this.thenEvaluator.setColumn(columnName).evaluate();\n                }\n                this.results.push(value);\n            };\n        }\n        else {\n            this.pushResult = (value) => {\n                this.results.push(value);\n            };\n        }\n    }\n\n    protected removeDuplicates() {\n        let datas = this.results;\n        // free results memory\n        this.results = undefined;\n        const key = this.getPrimaryKey(this.query.from);\n        const lookupObject = {};\n        for (const i in datas) {\n            lookupObject[datas[i][key]] = datas[i];\n        }\n        // free datas memory\n        datas = [];\n        for (const i in lookupObject) {\n            datas.push(lookupObject[i]);\n        }\n        this.results = datas;\n    }\n}","import { BaseSelect } from \"./base_select\";\nimport { LogHelper } from \"../../log_helper\";\nimport { ERROR_TYPE } from \"../../../common/index\";\nlet cursorRequest: IDBRequest;\nexport class NotWhere extends BaseSelect {\n    protected executeWhereUndefinedLogic() {\n        if (this.query.order && this.query.order.idbSorting !== false && this.query.order.by) {\n            if (this.objectStore.indexNames.contains(this.query.order.by as string)) {\n                const orderType: IDBCursorDirection = this.query.order.type &&\n                    this.query.order.type.toLowerCase() === 'desc' ? 'prev' : 'next';\n                this.sorted = true;\n                cursorRequest = this.objectStore.index(this.query.order.by as string).\n                    openCursor(null, orderType);\n            }\n            else {\n                const error = new LogHelper(ERROR_TYPE.ColumnNotExist, { column: this.query.order.by, isOrder: true });\n                this.onErrorOccured(error, true);\n                return;\n            }\n        }\n        else {\n            cursorRequest = this.objectStore.openCursor();\n        }\n\n        cursorRequest.onerror = this.onErrorOccured;\n\n        if (this.shouldEvaluateLimitAtEnd === false && this.shouldEvaluateSkipAtEnd === false) {\n            if (this.skipRecord && this.limitRecord) {\n                this.executeSkipAndLimitForNoWhere_();\n            }\n            else if (this.skipRecord) {\n                this.executeSkipForNoWhere_();\n            }\n            else if (this.limitRecord) {\n                this.executeLimitForNotWhere_();\n            }\n            else {\n                this.executeSimpleForNotWhere_();\n            }\n        }\n        else {\n            this.executeSimpleForNotWhere_();\n        }\n    }\n\n    private executeSkipAndLimitForNoWhere_() {\n        let recordSkipped = false,\n            cursor: IDBCursorWithValue;\n        cursorRequest.onsuccess = (e) => {\n            cursor = (e as any).target.result;\n            if (cursor) {\n                if (recordSkipped && this.results.length !== this.limitRecord) {\n                    this.pushResult(cursor.value);\n                    cursor.continue();\n                }\n                else {\n                    recordSkipped = true;\n                    cursor.advance(this.skipRecord);\n                }\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSkipForNoWhere_() {\n        let recordSkipped = false,\n            cursor;\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (recordSkipped) {\n                    this.pushResult(cursor.value);\n                    cursor.continue();\n                }\n                else {\n                    recordSkipped = true;\n                    cursor.advance(this.skipRecord);\n                }\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSimpleForNotWhere_() {\n        let cursor;\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                this.pushResult(cursor.value);\n                (cursor as any).continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeLimitForNotWhere_() {\n        let cursor;\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor && this.results.length !== this.limitRecord) {\n                this.pushResult(cursor.value);\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n}\n","import { NotWhere } from \"./not_where\";\nimport { promiseAll, promise } from \"../../helpers/index\";\n\nlet shouldAddValue: () => boolean;\nlet skipOrPush: (val) => void;\nlet skip;\nlet cursor: IDBCursorWithValue;\nexport class In extends NotWhere {\n    protected executeInLogic(column, values) {\n        skip = this.skipRecord;\n        skipOrPush = (val) => {\n            if (skip === 0) {\n                this.pushResult(val);\n            }\n            else {\n                --skip;\n            }\n        };\n        shouldAddValue = () => {\n            return this.whereCheckerInstance.check(cursor.value);\n        };\n        if (this.shouldEvaluateLimitAtEnd === false && this.shouldEvaluateSkipAtEnd === false) {\n            if (this.skipRecord && this.limitRecord) {\n                this.executeSkipAndLimitForIn_(column, values);\n            }\n            else if (this.skipRecord) {\n                this.executeSkipForIn_(column, values);\n            }\n            else if (this.limitRecord) {\n                this.executeLimitForIn_(column, values);\n            }\n            else {\n                this.executeSimpleForIn_(column, values);\n            }\n        }\n        else {\n            this.executeSimpleForIn_(column, values);\n        }\n    }\n\n    private executeSkipAndLimitForIn_(column, values) {\n        let cursorRequest: IDBRequest;\n        const columnStore = this.objectStore.index(column);\n\n        const runInLogic: (val) => Promise<void> = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e: any) => {\n                    cursor = e.target.result;\n                    if (this.results.length !== this.limitRecord && cursor) {\n                        if (shouldAddValue()) {\n                            skipOrPush(cursor.value);\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n\n    private executeSkipForIn_(column, values) {\n\n        let cursorRequest: IDBRequest;\n        const columnStore = this.objectStore.index(column);\n        const runInLogic: (val) => Promise<void> = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e: any) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (shouldAddValue()) {\n                            skipOrPush((cursor.value));\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n\n    private executeLimitForIn_(column, values) {\n        let cursorRequest: IDBRequest;\n        const columnStore = this.objectStore.index(column);\n        const runInLogic = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e: any) => {\n                    cursor = e.target.result;\n                    if (cursor && this.results.length !== this.limitRecord) {\n                        if (shouldAddValue()) {\n                            this.pushResult(cursor.value);\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n\n    private executeSimpleForIn_(column, values) {\n        let cursorRequest: IDBRequest;\n        const columnStore = this.objectStore.index(column);\n        const runInLogic = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e: any) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (shouldAddValue()) {\n                            this.pushResult(cursor.value);\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n}","import { In } from \"./in\";\n\nlet shouldAddValue: () => boolean;\nlet skipOrPush: (val) => void;\nlet skip;\nlet cursor: IDBCursorWithValue;\nlet cursorRequest: IDBRequest;\nexport class Regex extends In {\n    protected executeRegexLogic(column, exp: RegExp) {\n\n        skip = this.skipRecord;\n        this.regexExpression = exp;\n        skipOrPush = (val) => {\n            if (skip === 0) {\n                this.pushResult(val);\n            }\n            else {\n                --skip;\n            }\n        };\n        shouldAddValue = () => {\n            return this.regexTest(cursor.key) &&\n                this.whereCheckerInstance.check(cursor.value);\n        };\n\n        cursorRequest = this.objectStore.index(column).openCursor();\n        cursorRequest.onerror = this.onErrorOccured;\n        if (this.shouldEvaluateLimitAtEnd === false && this.shouldEvaluateSkipAtEnd === false) {\n            if (this.skipRecord && this.limitRecord) {\n                this.executeSkipAndLimitForRegex_();\n            }\n            else if (this.skipRecord) {\n                this.executeSkipForRegex_();\n            }\n            else if (this.limitRecord) {\n                this.executeLimitForRegex_();\n            }\n            else {\n                this.executeSimpleForRegex_();\n            }\n        }\n        else {\n            this.executeSimpleForRegex_();\n        }\n    }\n\n    private executeSkipAndLimitForRegex_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (this.results.length !== this.limitRecord && cursor) {\n                if (shouldAddValue()) {\n                    skipOrPush(cursor.value);\n                }\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSkipForRegex_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (shouldAddValue()) {\n                    skipOrPush((cursor.value));\n                }\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeLimitForRegex_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (this.results.length !== this.limitRecord && cursor) {\n                if (shouldAddValue()) {\n                    this.pushResult(cursor.value);\n                }\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSimpleForRegex_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (shouldAddValue()) {\n                    this.pushResult(cursor.value);\n                }\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n}","import { Regex } from \"./regex\";\n\nlet shouldAddValue: () => boolean;\nlet cursor: IDBCursorWithValue;\nlet cursorRequest: IDBRequest;\nexport class Where extends Regex {\n\n    protected executeWhereLogic(column, value, op, dir) {\n        shouldAddValue = () => {\n            return this.whereCheckerInstance.check(cursor.value);\n        };\n        value = op ? value[op] : value;\n        cursorRequest = this.objectStore.index(column).openCursor(\n            this.getKeyRange(value, op),\n            dir\n        );\n\n        cursorRequest.onerror = this.onErrorOccured;\n\n        if (this.shouldEvaluateLimitAtEnd === false && this.shouldEvaluateSkipAtEnd === false) {\n            if (this.skipRecord && this.limitRecord) {\n                this.executeSkipAndLimitForWhere_();\n            }\n            else if (this.skipRecord) {\n                this.executeSkipForWhere_();\n            }\n            else if (this.limitRecord) {\n                this.executeLimitForWhere_();\n            }\n            else {\n                this.executeSimpleForWhere_();\n            }\n        }\n        else {\n            this.executeSimpleForWhere_();\n        }\n\n    }\n\n    private executeSkipAndLimitForWhere_() {\n        let recordSkipped = false;\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (recordSkipped && this.results.length !== this.limitRecord) {\n                    if (shouldAddValue()) {\n                        this.pushResult(cursor.value);\n                    }\n                    cursor.continue();\n                }\n                else {\n                    recordSkipped = true;\n                    cursor.advance(this.skipRecord);\n                }\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSkipForWhere_() {\n        let recordSkipped = false;\n\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (recordSkipped) {\n                    if (shouldAddValue()) {\n                        this.pushResult(cursor.value);\n                    }\n                    cursor.continue();\n                }\n                else {\n                    recordSkipped = true;\n                    cursor.advance(this.skipRecord);\n                }\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeLimitForWhere_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor && this.results.length !== this.limitRecord) {\n                if (shouldAddValue()) {\n                    this.pushResult(cursor.value);\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n\n    }\n\n    private executeSimpleForWhere_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (shouldAddValue()) {\n                    this.pushResult(cursor.value);\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n    }\n}","import { Where } from \"./where\";\nimport { DATA_TYPE, QUERY_OPTION } from \"../../../common/index\";\nimport { getDataType, getObjectFirstKey } from \"../../utils/index\";\n\nexport class GroupByHelper extends Where {\n    protected processGroupBy() {\n        const groupBy = this.query.groupBy as any;\n        let datas = this.results;\n        const lookUpObj = {};\n        // free results memory\n        this.results = this.query.groupBy = null;\n        if (getDataType(groupBy) !== DATA_TYPE.Object) {\n            if (getDataType(groupBy) === DATA_TYPE.String) {\n                for (const i in datas) {\n                    lookUpObj[datas[i][groupBy as string]] = datas[i];\n                }\n            }\n            else {\n                let objKey;\n                for (const i in datas) {\n                    objKey = \"\";\n                    for (const column in groupBy) {\n                        objKey += datas[i][groupBy[column]];\n                    }\n                    lookUpObj[objKey] = datas[i];\n                }\n            }\n        }\n        else {\n            const caseQueryLength = Object.keys(groupBy).length;\n            if (caseQueryLength === 1) {\n                const groupByColumn = getObjectFirstKey(groupBy);\n                this.thenEvaluator.setCaseAndColumn(groupBy, groupByColumn);\n                for (const i in datas) {\n                    lookUpObj[this.thenEvaluator.setValue(datas[i]).evaluate()] = datas[i];\n                }\n            }\n            else {\n                let objKey;\n                for (const i in datas) {\n                    objKey = \"\";\n                    this.thenEvaluator.setCaseAndValue(groupBy, datas[i]);\n                    for (const column in groupBy) {\n                        objKey += this.thenEvaluator.setColumn(column).evaluate();\n                    }\n                    lookUpObj[objKey] = datas[i];\n                }\n            }\n        }\n        // free datas memory\n        datas = [];\n        for (const i in lookUpObj) {\n            datas.push(lookUpObj[i]);\n        }\n        this.results = datas;\n    }\n\n    protected executeAggregateGroupBy() {\n        const grpQry = this.query.groupBy as any;\n        let datas = this.results;\n        // free results memory\n        this.results = undefined;\n        const lookUpObj = {};\n        // assign aggregate\n        const aggregateQry = this.query.aggregate;\n\n        let index;\n        let objKey;\n        let value;\n        let columnToAggregate;\n        const calculateAggregate = () => {\n            const getCount = () => {\n                value = lookUpObj[objKey];\n                // get old value\n                value = value ? value[\"count(\" + columnToAggregate + \")\"] : 0;\n                // add with old value if data exist\n                value += datas[index][columnToAggregate] ? 1 : 0;\n                return value;\n            };\n            const getMax = () => {\n                value = lookUpObj[objKey];\n                // get old value\n                value = value ? value[\"max(\" + columnToAggregate + \")\"] : 0;\n                datas[index][columnToAggregate] = datas[index][columnToAggregate] ?\n                    datas[index][columnToAggregate] : 0;\n                // compare between old value and new value\n                return value > datas[index][columnToAggregate] ? value : datas[index][columnToAggregate];\n            };\n            const getMin = () => {\n                value = lookUpObj[objKey];\n                // get old value\n                value = value ? value[\"min(\" + columnToAggregate + \")\"] : Infinity;\n                datas[index][columnToAggregate] = datas[index][columnToAggregate] ?\n                    datas[index][columnToAggregate] : Infinity;\n                // compare between old value and new value\n                return value < datas[index][columnToAggregate] ? value : datas[index][columnToAggregate];\n            };\n            const getSum = () => {\n                value = lookUpObj[objKey];\n                // get old value\n                value = value ? value[\"sum(\" + columnToAggregate + \")\"] : 0;\n                // add with old value if data exist\n                value += datas[index][columnToAggregate] ? datas[index][columnToAggregate] : 0;\n                return value;\n            };\n            const getAvg = () => {\n                value = lookUpObj[objKey];\n                // get old sum value\n                let sumOfColumn = value ? value[\"sum(\" + columnToAggregate + \")\"] : 0;\n                // add with old value if data exist\n                sumOfColumn += datas[index][columnToAggregate] ? datas[index][columnToAggregate] : 0;\n                datas[index][\"sum(\" + columnToAggregate + \")\"] = sumOfColumn;\n                // get old count value\n                value = value ? value[\"count(\" + columnToAggregate + \")\"] : 0;\n                // add with old value if data exist\n                value += datas[index][columnToAggregate] ? 1 : 0;\n                datas[index][\"count(\" + columnToAggregate + \")\"] = value;\n            };\n            for (const prop in aggregateQry) {\n                const aggregateColumn = aggregateQry[prop];\n                const aggregateValType = getDataType(aggregateColumn);\n                let aggregateCalculator;\n                switch (prop) {\n                    case QUERY_OPTION.Count:\n                        aggregateCalculator = getCount;\n                        break;\n                    case QUERY_OPTION.Max:\n                        aggregateCalculator = getMax;\n                        break;\n                    case QUERY_OPTION.Min:\n                        aggregateCalculator = getMin;\n                        break;\n                    case QUERY_OPTION.Sum:\n                        aggregateCalculator = getSum;\n                        break;\n                    case QUERY_OPTION.Avg:\n                        aggregateCalculator = getAvg;\n                        break;\n                }\n                switch (aggregateValType) {\n                    case DATA_TYPE.String:\n                        columnToAggregate = aggregateColumn;\n                        datas[index][`${prop}(${columnToAggregate})`] = aggregateCalculator();\n                        break;\n                    case DATA_TYPE.Array:\n                        for (const item in aggregateColumn) {\n                            columnToAggregate = aggregateColumn[item];\n                            datas[index][`${prop}(${columnToAggregate})`] = aggregateCalculator();\n                        }\n                }\n            }\n        };\n\n        if (getDataType(grpQry) === DATA_TYPE.String) {\n            for (index in datas) {\n                objKey = datas[index][grpQry];\n                calculateAggregate();\n                lookUpObj[objKey] = datas[index];\n            }\n        }\n        else {\n            for (index in datas) {\n                objKey = \"\";\n                for (const column in grpQry) {\n                    objKey += datas[index][grpQry[column]];\n                }\n                calculateAggregate();\n                lookUpObj[objKey] = datas[index];\n            }\n\n        }\n        // free datas memory\n        datas = [];\n        for (const i in lookUpObj) {\n            datas.push(lookUpObj[i]);\n        }\n        // Checking for avg and if exist then fill the datas;\n        if (aggregateQry.avg) {\n            if (getDataType(aggregateQry.avg) === DATA_TYPE.String) {\n                for (index in datas) {\n                    const sumForAvg = datas[index][\"sum(\" + aggregateQry.avg + \")\"],\n                        countForAvg = datas[index][\"count(\" + aggregateQry.avg + \")\"];\n                    datas[index][\"avg(\" + aggregateQry.avg + \")\"] = sumForAvg / countForAvg;\n                    if (aggregateQry.count !== aggregateQry.avg) {\n                        delete datas[index][\"count(\" + aggregateQry.avg + \")\"];\n                    }\n                    if (aggregateQry.sum !== aggregateQry.avg) {\n                        delete datas[index][\"sum(\" + aggregateQry.avg + \")\"];\n                    }\n                }\n            }\n            else {\n                const isCountTypeString = getDataType(aggregateQry.count) === DATA_TYPE.String;\n                const isSumTypeString = getDataType(aggregateQry.sum) === DATA_TYPE.String;\n                for (index in datas) {\n                    for (const column in aggregateQry.avg as any) {\n                        const avgColumn = aggregateQry.avg[column],\n                            sum = datas[index][\"sum(\" + avgColumn + \")\"],\n                            count = datas[index][\"count(\" + avgColumn + \")\"];\n                        datas[index][\"avg(\" + avgColumn + \")\"] = sum / count;\n\n                        if (isCountTypeString) {\n                            if (aggregateQry.count !== avgColumn) {\n                                delete datas[index][\"count(\" + avgColumn + \")\"];\n                            }\n                            else if (aggregateQry.count.indexOf(avgColumn) === -1) {\n                                delete datas[index][\"count(\" + avgColumn + \")\"];\n                            }\n                        }\n\n                        if (isSumTypeString) {\n                            if (aggregateQry.sum !== avgColumn) {\n                                delete datas[index][\"sum(\" + avgColumn + \")\"];\n                            }\n                            else if (aggregateQry.sum.indexOf(avgColumn) === -1) {\n                                delete datas[index][\"sum(\" + avgColumn + \")\"];\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        this.results = datas;\n    }\n}","import { GroupByHelper } from \"./group_by_helper\";\nimport { DATA_TYPE, ERROR_TYPE, QUERY_OPTION, OrderQuery, CaseOption } from \"../../../common/index\";\nimport { LogHelper } from \"../../log_helper\";\nimport { getDataType, removeSpace, isArray } from \"../../utils/index\";\nimport { Column } from \"../../model/index\";\n\nexport class Helper extends GroupByHelper {\n\n    processGroupDistinctAggr() {\n        if (this.query.distinct) {\n            const groupBy = [];\n            const result = this.results[0];\n            for (const key in result) {\n                groupBy.push(key);\n            }\n            const primaryKey = this.getPrimaryKey(this.query.from),\n                index = groupBy.indexOf(primaryKey);\n            groupBy.splice(index, 1);\n            this.query.groupBy = groupBy.length > 0 ? groupBy : null;\n        }\n        if (this.query.groupBy) {\n            if (this.query.aggregate) {\n                this.executeAggregateGroupBy();\n            }\n            else {\n                this.processGroupBy();\n            }\n        }\n        else if (this.query.aggregate) {\n            this.processAggregateQry();\n        }\n    }\n\n    private getOrderColumnInfo_(orderColumn: string): Column {\n        let column: Column;\n        if (this.query.join == null) {\n            column = this.getColumnInfo(orderColumn, this.query.from);\n        }\n        else {\n            const splittedByDot = removeSpace(orderColumn).split(\".\");\n            orderColumn = splittedByDot[1];\n            column = this.getColumnInfo(orderColumn, splittedByDot[0]);\n        }\n        if (column == null) {\n            this.onErrorOccured(new LogHelper(ERROR_TYPE.ColumnNotExist, { column: orderColumn, isOrder: true }), true);\n        }\n        return column;\n    }\n\n    private compareStringInDesc_(a: string, b: string) {\n        return b.localeCompare(a);\n    }\n\n    private compareStringinAsc_(a: string, b: string) {\n        return a.localeCompare(b);\n    }\n\n    private compareDefaultInDesc_(a: string, b) {\n        return new String(b).localeCompare(a);\n    }\n\n    private compareDefaultinAsc_(a, b: string) {\n        return new String(a).localeCompare(b);\n    }\n\n    private compareNumberInDesc_(a: number, b: number) {\n        return b - a;\n    }\n\n    private compareNumberinAsc_(a: number, b: number) {\n        return a - b;\n    }\n\n    private compareDateInDesc_(a: Date, b: Date) {\n        return b.getTime() - a.getTime();\n    }\n\n    private compareDateInAsc_(a: Date, b: Date) {\n        return a.getTime() - b.getTime();\n    }\n\n    private getValInDesc_(value1, value2, caseQuery: { [columnName: string]: [CaseOption] }) {\n        for (const columnName in caseQuery) {\n            this.thenEvaluator.setCaseAndValue(caseQuery, value1);\n            const column1 = this.thenEvaluator.setColumn(columnName).evaluate();\n            this.thenEvaluator.setCaseAndValue(caseQuery, value2);\n            const column2 = this.thenEvaluator.setColumn(columnName).evaluate();\n            switch (typeof value1[column1]) {\n                case DATA_TYPE.String:\n                    return this.compareStringInDesc_(value1[column1], value2[column2]);\n                default:\n                    return this.compareNumberInDesc_(value1[column1], value2[column2]);\n            }\n        }\n    }\n\n    private getValInAsc_(value1, value2, caseQuery: { [columnName: string]: [CaseOption] }) {\n        for (const columnName in caseQuery) {\n            this.thenEvaluator.setCaseAndValue(caseQuery, value1);\n            const column1 = this.thenEvaluator.setColumn(columnName).evaluate();\n            this.thenEvaluator.setCaseAndValue(caseQuery, value2);\n            const column2 = this.thenEvaluator.setColumn(columnName).evaluate();\n            switch (typeof value1[column1]) {\n                case DATA_TYPE.String:\n                    return this.compareStringinAsc_(value1[column1], value2[column2]);\n                default:\n                    return this.compareNumberinAsc_(value1[column1], value2[column2]);\n            }\n        }\n    }\n\n    private getValueComparer_(column: Column, order: OrderQuery): (a, b) => number {\n\n        switch (column.dataType) {\n            case DATA_TYPE.String:\n                return order.type === 'asc' ? this.compareStringinAsc_ : this.compareStringInDesc_;\n            case DATA_TYPE.Number:\n                return order.type === 'asc' ? this.compareNumberinAsc_ : this.compareNumberInDesc_;\n            case DATA_TYPE.DateTime:\n                return order.type === 'asc' ? this.compareDateInAsc_ : this.compareDateInDesc_;\n            default:\n                return order.type === 'asc' ? this.compareDefaultinAsc_ : this.compareDefaultInDesc_;\n        }\n\n    }\n\n    private orderBy_(order: OrderQuery) {\n        order.type = this.getOrderType_(order.type);\n        let orderColumn = order.by;\n        if (orderColumn != null && typeof orderColumn === DATA_TYPE.Object) {\n            if (order.type === \"asc\") {\n                this.results.sort((a, b) => {\n                    return this.getValInAsc_(a, b, orderColumn as any);\n                });\n            }\n            else {\n                this.results.sort((a, b) => {\n                    return this.getValInDesc_(a, b, orderColumn as any);\n                });\n            }\n        }\n        else {\n            const columnInfo = this.getOrderColumnInfo_(orderColumn as string);\n            if (columnInfo != null) {\n                const orderMethod = this.getValueComparer_(columnInfo, order);\n                orderColumn = columnInfo.name;\n                if (order.case == null) {\n                    this.results.sort((a, b) => {\n                        return orderMethod(a[orderColumn as string], b[orderColumn as string]);\n                    });\n                }\n                else {\n                    this.thenEvaluator.setCaseAndColumn({ [orderColumn]: order.case }, orderColumn);\n                    this.results.sort((a, b) => {\n                        return orderMethod(\n                            this.thenEvaluator.setValue(a).evaluate(),\n                            this.thenEvaluator.setValue(b).evaluate()\n                        );\n                    });\n                }\n            }\n        }\n\n    }\n\n    private getOrderType_(type: string) {\n        return type == null ? 'asc' : type.toLowerCase();\n    }\n\n    protected processOrderBy() {\n        const order = this.query.order;\n        if (order && this.results.length > 0 && !this.sorted) {\n            const orderQueryType = getDataType(order);\n            if (orderQueryType === DATA_TYPE.Object) {\n                this.orderBy_(order);\n            }\n            else if (orderQueryType === DATA_TYPE.Array) {\n                this.orderBy_(order[0]);\n                for (let i = 1, length = (order as any).length; i < length; i++) {\n                    if (this.error == null) {\n                        const prevOrderQueryBy = order[i - 1].by;\n                        const currentOrderQuery: OrderQuery = order[i];\n                        let currentorderQueryBy = currentOrderQuery.by;\n                        const orderColumnDetail = this.getOrderColumnInfo_(currentorderQueryBy as string);\n                        if (orderColumnDetail != null) {\n                            currentorderQueryBy = orderColumnDetail.name;\n                            currentOrderQuery.type = this.getOrderType_(currentOrderQuery.type);\n                            const orderMethod = this.getValueComparer_(orderColumnDetail, currentOrderQuery);\n                            this.results.sort((a, b) => {\n                                if (a[prevOrderQueryBy] === b[prevOrderQueryBy]) {\n                                    return orderMethod(\n                                        a[currentorderQueryBy as string],\n                                        b[currentorderQueryBy as string]);\n                                }\n                                return 0;\n                            });\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    protected processAggregateQry() {\n        const datas = this.results;\n        const datasLength = datas.length;\n        const results = {};\n        let columnToAggregate;\n        // free results memory\n        this.results = undefined;\n        const getCount = () => {\n            let result = 0;\n            for (const i in datas) {\n                result += datas[i][columnToAggregate] ? 1 : 0;\n            }\n            return result;\n        };\n        const getMax = () => {\n            let result = 0;\n            for (const i in datas) {\n                result = result > datas[i][columnToAggregate] ?\n                    result : datas[i][columnToAggregate];\n            }\n            return result;\n        };\n        const getMin = () => {\n            let result = Infinity, value = Infinity;\n            for (const i in datas) {\n                value = datas[i][columnToAggregate] ?\n                    datas[i][columnToAggregate] : Infinity;\n                result = result < value ? result : value;\n            }\n            return result;\n        };\n        const getSum = () => {\n            let result = 0;\n            for (const i in datas) {\n                result += datas[i][columnToAggregate];\n            }\n            return result;\n        };\n        const getAvg = () => {\n            let result = 0;\n            for (const i in datas) {\n                result += datas[i][columnToAggregate];\n            }\n            return result / datasLength;\n        };\n        for (const prop in this.query.aggregate) {\n            const aggregateColumn = this.query.aggregate[prop];\n            const aggregateValType = getDataType(aggregateColumn);\n            let aggregateCalculator;\n            switch (prop) {\n                case 'count':\n                    aggregateCalculator = getCount; break;\n                case 'max':\n                    aggregateCalculator = getMax; break;\n                case 'min':\n                    aggregateCalculator = getMin; break;\n                case 'sum':\n                    aggregateCalculator = getSum; break;\n                case 'avg':\n                    aggregateCalculator = getAvg; break;\n            }\n            switch (aggregateValType) {\n                case DATA_TYPE.String:\n                    columnToAggregate = aggregateColumn;\n                    results[`${prop}(${columnToAggregate})`] = aggregateCalculator();\n                    break;\n                case DATA_TYPE.Array:\n                    for (const key in aggregateColumn) {\n                        columnToAggregate = aggregateColumn[key];\n                        results[`${prop}(${columnToAggregate})`] = aggregateCalculator();\n                    }\n            }\n        }\n\n        // add results to the first index of result\n        for (const prop in results) {\n            datas[0][prop] = results[prop];\n        }\n        this.results = [datas[0]];\n    }\n}","import { IError, CONNECTION_STATUS, ERROR_TYPE } from \"../../common/index\";\nimport { KeyStore } from \"../keystore/index\";\nimport { Table, Column } from \"../model/index\";\nimport { LogHelper } from \"../log_helper\";\nimport { BaseDb } from \"./base_db\";\nimport { promise } from \"../helpers/index\";\n\nexport class DropDb extends BaseDb {\n    private onSuccess_: () => void;\n    private onError_: (err: IError) => void;\n\n    constructor(onSuccess: () => void, onError: (err: IError) => void) {\n        super();\n        this.onSuccess_ = onSuccess;\n        this.onError_ = onError;\n    }\n\n    deleteMetaData() {\n        return promise((res, rej) => {\n            KeyStore.remove(`JsStore_${this.dbName}_Db_Version`);\n            this.activeDb.tables.forEach((table: Table) => {\n                KeyStore.remove(`JsStore_${this.dbName}_${table.name}_Version`);\n                table.columns.forEach((column: Column) => {\n                    if (column.autoIncrement) {\n                        KeyStore.remove(`JsStore_${this.dbName}_${table.name}_${column.name}_Value`);\n                    }\n                });\n            });\n            // remove from database_list \n            this.getDbList().then(dbList => {\n                dbList.splice(dbList.indexOf(this.dbName), 1);\n                this.setDbList(dbList).then(() => {\n                    // remove db schema from keystore\n                    KeyStore.remove(`JsStore_${this.dbName}_Schema`).\n                        then(res).catch(rej);\n                });\n            });\n        });\n    }\n\n    deleteDb() {\n        setTimeout(() => {\n            const dropDbRequest = indexedDB.deleteDatabase(this.dbName);\n            dropDbRequest.onblocked = () => {\n                if (this.onError_ != null) {\n                    this.onError_(new LogHelper(ERROR_TYPE.DbBlocked).get());\n                }\n            };\n            dropDbRequest.onerror = (e) => {\n                if (this.onError_ != null) {\n                    this.onError_((event as any).target.error);\n                }\n            };\n            dropDbRequest.onsuccess = () => {\n                this.deleteMetaData().then(() => {\n                    this.onSuccess_();\n                    this.dbStatus.conStatus = CONNECTION_STATUS.Closed;\n                }).catch(this.onError_);\n            };\n        }, 100);\n    }\n}\n","import { QueryExecutor } from \"./query_executor\";\nimport { Config } from \"./config\";\nimport { IdbHelper } from \"./business/index\";\nimport { CONNECTION_STATUS, ERROR_TYPE } from \"../common/index\";\n\nexport const initialize = function () {\n    if (typeof (self as any).alert === 'undefined' && typeof ServiceWorkerGlobalScope === 'undefined') {\n        Config.isRuningInWorker = true;\n        (self as any).onmessage = function (e) {\n            new QueryExecutor().checkConnectionAndExecuteLogic(e.data);\n        };\n    }\n};\n\nconst onIdbNotSupproted = () => {\n    IdbHelper.dbStatus = {\n        conStatus: CONNECTION_STATUS.UnableToStart,\n        lastError: ERROR_TYPE.IndexedDbNotSupported\n    };\n};\n\nconst setCrossBrowserIndexedDb = () => {\n    try {\n        if (!indexedDB) {\n            indexedDB = (self as any).mozIndexedDB ||\n                (self as any).webkitIndexedDB || (self as any).msIndexedDB;\n        }\n        if (indexedDB) {\n            IDBTransaction = IDBTransaction ||\n                (self as any).webkitIDBTransaction || (self as any).msIDBTransaction;\n            (self as any).IDBKeyRange = (self as any).IDBKeyRange ||\n                (self as any).webkitIDBKeyRange || (self as any).msIDBKeyRange;\n        }\n        else {\n            onIdbNotSupproted();\n        }\n    } catch (ex) {\n        onIdbNotSupproted();\n    }\n};\n\nsetCrossBrowserIndexedDb();\ninitialize();\n","export * from './query_executor';\nexport * from './start';\nexport * from './config';\nexport * from './keystore/instance';","import { Table } from \"../model/index\";\nimport { IdbHelper, QueryHelper } from \"../business/index\";\nimport { KeyStore } from \"../keystore/index\";\nimport { promiseAll, promise } from \"../helpers/index\";\nimport { QueryExecutor } from \"../query_executor\";\n\nexport const getAutoIncrementValues = (table: Table): Promise<{ [columnName: string]: number }> => {\n\n    const autoIncColumns = table.columns.filter((col) => {\n        return col.autoIncrement;\n    });\n    return promise((resolve, reject) => {\n        promiseAll(autoIncColumns.map(column => {\n            const autoIncrementKey = `JsStore_${IdbHelper.activeDb.name}_${table.name}_${column.name}_Value`;\n            return KeyStore.get(autoIncrementKey);\n        })).then(results => {\n            const autoIncValues = {};\n            for (let i = 0; i < autoIncColumns.length; i++) {\n                autoIncValues[autoIncColumns[i].name] = results[i];\n            }\n            resolve(autoIncValues);\n        }).catch(reject);\n    });\n};\n\nexport const setAutoIncrementValue = (table: Table, autoIncrementValue: object) => {\n    const keys = Object.keys(autoIncrementValue);\n    return promiseAll(keys.map((columnName) => {\n        const autoIncrementKey = `JsStore_${IdbHelper.activeDb.name}_${table.name}_${columnName}_Value`;\n        const value = autoIncrementValue[columnName];\n        if (QueryExecutor.isTransactionQuery === true) {\n            QueryHelper.autoIncrementValues[table.name][columnName] = value;\n        }\n        return KeyStore.set(\n            autoIncrementKey,\n            value\n        );\n    }));\n};","import { Base } from \"../base\";\nimport { InsertQuery, IError, API } from \"../../../common/index\";\nimport { Table } from \"../../model/index\";\nimport { promiseAll, promise } from \"../../helpers/index\";\nimport { QueryHelper } from \"../query_helper\";\n\nexport class Instance extends Base {\n    private valuesAffected_ = [];\n    query: InsertQuery;\n    table: Table;\n\n    constructor(query: InsertQuery, onSuccess: (rowsInserted: number) => void, onError: (err: IError) => void) {\n        super();\n        this.onError = onError;\n        this.query = query;\n        this.onSuccess = onSuccess;\n        this.tableName = this.query.into;\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Insert, this.query);\n        queryHelper.checkAndModify().then(() => {\n            this.query = queryHelper.query;\n            this.insertData_(this.query.values);\n        }).catch(this.onError);\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.error == null) {\n            this.onSuccess(this.query.return === true ? this.valuesAffected_ : this.rowAffected);\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n\n    private onQueryFinished_() {\n        if (this.isTransaction === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    private insertData_(values: any[]) {\n\n        let objectStore: IDBObjectStore;\n        let onInsertData;\n        let addMethod;\n\n        if (this.query.return) {\n            onInsertData = (value) => {\n                this.valuesAffected_.push(value);\n            };\n\n        }\n        else {\n            onInsertData = (value) => {\n                ++this.rowAffected;\n            };\n        }\n\n        this.createTransaction([this.tableName], this.onTransactionCompleted_);\n        objectStore = this.transaction.objectStore(this.tableName);\n        if (this.query.upsert) {\n            addMethod = (value) => {\n                return objectStore.put(value);\n            };\n        }\n        else {\n            addMethod = (value) => {\n                return objectStore.add(value);\n            };\n        }\n        promiseAll(\n            values.map(function (value) {\n                return promise(function (res, rej) {\n                    const addResult = addMethod(value);\n                    addResult.onerror = rej;\n                    addResult.onsuccess = function () {\n                        onInsertData(value);\n                        res();\n                    };\n                });\n            })\n        ).then(() => {\n            this.onQueryFinished_();\n        }).catch((err) => {\n            this.transaction.abort();\n            this.onErrorOccured(err);\n        });\n    }\n}","import { Base } from \"../base\";\nimport { getDataType } from \"../../utils/index\";\nimport { DATA_TYPE, UpdateQuery } from \"../../../common/index\";\n\nexport const updateValue = (suppliedValue, storedValue) => {\n    for (const key in suppliedValue) {\n        if (getDataType(suppliedValue[key]) !== DATA_TYPE.Object) {\n            storedValue[key] = suppliedValue[key];\n        }\n        else {\n            for (const op in suppliedValue[key]) {\n                switch (op as any) {\n                    case '+': storedValue[key] += suppliedValue[key][op]; break;\n                    case '-': storedValue[key] -= suppliedValue[key][op]; break;\n                    case '*': storedValue[key] *= suppliedValue[key][op]; break;\n                    case '/': storedValue[key] /= suppliedValue[key][op]; break;\n                    case '{push}': storedValue[key].push(suppliedValue[key][op]); break;\n                    default: storedValue[key] = suppliedValue[key];\n                }\n                break;\n            }\n        }\n    }\n    return storedValue;\n};\n\nexport class BaseUpdate extends Base {\n    query: UpdateQuery;\n    protected initTransaction() {\n        this.createTransaction([this.query.in], this.onTransactionCompleted_);\n        this.objectStore = this.transaction.objectStore(this.query.in);\n    }\n\n    protected onQueryFinished() {\n        if (this.isTransaction === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.error) {\n            this.onError(this.error);\n        }\n        else {\n            this.onSuccess(this.rowAffected);\n        }\n    }\n}\n","import { BaseUpdate, updateValue } from \"./base_update\";\n\nexport class NotWhere extends BaseUpdate {\n\n    protected executeWhereUndefinedLogic() {\n        let cursor: IDBCursorWithValue;\n        const cursorRequest: IDBRequest<IDBCursorWithValue> = this.objectStore.openCursor();\n        cursorRequest.onsuccess = (e) => {\n            cursor = (e as any).target.result;\n            if (cursor) {\n                try {\n                    const cursorUpdateRequest = cursor.update(updateValue(this.query.set, cursor.value));\n                    cursorUpdateRequest.onsuccess = () => {\n                        ++this.rowAffected;\n                        cursor.continue();\n                    };\n                    cursorUpdateRequest.onerror = this.onErrorOccured.bind(this);\n                } catch (err) {\n                    this.onErrorOccured(err);\n                    this.transaction.abort();\n                }\n            }\n            else {\n                this.onQueryFinished();\n            }\n\n        };\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { NotWhere } from \"./not_where\";\nimport { updateValue } from \"./base_update\";\nimport { promiseAll, promise } from \"../../helpers/index\";\n\nexport class In extends NotWhere {\n    private executeInLogic(column, values: any[]) {\n        let cursor: IDBCursorWithValue;\n        const columnStore = this.objectStore.index(column);\n        let cursorRequest;\n        const runInLogic: (val) => Promise<void> = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (this.whereCheckerInstance.check(cursor.value)) {\n                            cursor.update(updateValue(this.query.set, cursor.value));\n                            ++this.rowAffected;\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n}","import { In } from \"./in\";\nimport { updateValue } from \"./base_update\";\n\nexport class Regex extends In {\n    protected executeRegexLogic(column: string, exp: RegExp) {\n        let cursor: IDBCursorWithValue;\n        this.regexExpression = exp;\n        const cursorOpenRequest = this.objectStore.index(column).openCursor();\n        cursorOpenRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.regexTest(cursor.key) &&\n                    this.whereCheckerInstance.check(cursor.value)) {\n                    try {\n                        const cursorUpdateRequest = cursor.update(updateValue(this.query.set, cursor.value));\n                        cursorUpdateRequest.onsuccess = () => {\n                            ++this.rowAffected;\n                            cursor.continue();\n                        };\n                        cursorUpdateRequest.onerror = this.onErrorOccured.bind(this);\n                    } catch (err) {\n                        this.transaction.abort();\n                        this.onErrorOccured(err);\n                    }\n                }\n                else {\n                    cursor.continue();\n                }\n\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n        cursorOpenRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { updateValue } from \"./base_update\";\nimport { Regex } from \"./regex\";\n\nexport class Where extends Regex {\n    protected executeWhereLogic(column, value, op) {\n        let cursor: IDBCursorWithValue,\n            cursorRequest;\n        value = op ? value[op] : value;\n        cursorRequest = this.objectStore.index(column).openCursor(this.getKeyRange(value, op));\n\n        cursorRequest.onsuccess = (e) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.whereCheckerInstance.check(cursor.value)) {\n                    try {\n                        const cursorUpdateRequest = cursor.update(updateValue(this.query.set, cursor.value));\n                        cursorUpdateRequest.onsuccess = () => {\n                            ++this.rowAffected;\n                            cursor.continue();\n                        };\n                        cursorUpdateRequest.onerror = this.onErrorOccured.bind(this);\n                    } catch (err) {\n                        this.transaction.abort();\n                        this.onErrorOccured(err);\n                    }\n                }\n                else {\n                    cursor.continue();\n                }\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n\n    }\n}","import { Where } from \"./where\";\nimport * as Select from \"../select/index\";\nimport { QueryHelper } from \"../query_helper\";\nimport { isArray } from \"../../utils/index\";\nimport { UpdateQuery, IError, API, SelectQuery, QUERY_OPTION } from \"../../../common/index\";\n\nexport class Instance extends Where {\n\n    constructor(query: UpdateQuery, onSuccess: (rowsUpdated: number) => void, onError: (err: IError) => void) {\n        super();\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n        this.query = query;\n        this.tableName = this.query.in;\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Update, this.query);\n        queryHelper.checkAndModify();\n        if (queryHelper.error == null) {\n            try {\n                this.initTransaction();\n                if (this.query.where != null) {\n                    if (this.query.where.or || isArray(this.query.where)) {\n                        this.executeComplexLogic_();\n                    }\n                    else {\n                        this.goToWhereLogic();\n                    }\n                }\n                else {\n                    this.executeWhereUndefinedLogic();\n                }\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onError(\n                queryHelper.error\n            );\n        }\n    }\n\n    private executeComplexLogic_() {\n        const selectObject = new Select.Instance({\n            from: this.query.in,\n            where: this.query.where,\n            ignoreCase: this.query.ignoreCase\n        } as SelectQuery, (results: any[]) => {\n            const key = this.getPrimaryKey(this.query.in);\n            const inQuery = [];\n            results.forEach((value) => {\n                inQuery.push(value[key]);\n            });\n            results = null;\n            const whereQry = { [key]: { [QUERY_OPTION.In]: inQuery } };\n            this.query.ignoreCase = null;\n            this.query[QUERY_OPTION.Where] = whereQry;\n            this.initTransaction();\n            this.goToWhereLogic();\n        }, this.onError);\n        selectObject.isSubQuery = true;\n        selectObject.execute();\n    }\n}\n","import { WhereBase } from \"../where_base\";\nimport { RemoveQuery } from \"../../../common/index\";\n\nexport class BaseRemove extends WhereBase {\n\n    isOr: boolean;\n    query: RemoveQuery;\n\n    protected onQueryFinished() {\n        // ff\n    }\n}\n","import { BaseRemove } from \"./base_remove\";\n\nexport class NotWhere extends BaseRemove {\n    protected executeWhereUndefinedLogic() {\n        let cursor;\n        const cursorRequest = this.objectStore.openCursor();\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                cursor.delete();\n                ++this.rowAffected;\n                (cursor as any).continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { NotWhere } from \"./not_where\";\nimport { promiseAll, promise } from \"../../helpers/index\";\n\nexport class In extends NotWhere {\n    protected executeInLogic(column, values) {\n        let cursor: IDBCursorWithValue, cursorRequest;\n        const runInLogic: (val) => Promise<void> = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = this.objectStore.index(column).openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (this.whereCheckerInstance.check(cursor.value)) {\n                            cursor.delete();\n                            ++this.rowAffected;\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n}","import { In } from \"./in\";\n\nexport class Regex extends In {\n    protected executeRegexLogic(column: string, exp: RegExp) {\n        let cursor: IDBCursorWithValue;\n        this.regexExpression = exp;\n        const cursorRequest = this.objectStore.index(column).openCursor();\n\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.regexTest(cursor.key) &&\n                    this.whereCheckerInstance.check(cursor.value)) {\n                    cursor.delete();\n                    ++this.rowAffected;\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}","import { Regex } from \"./regex\";\n\nexport class Where extends Regex {\n    protected executeWhereLogic(column, value, op) {\n        let cursor: IDBCursorWithValue,\n            cursorRequest;\n        value = op ? value[op] : value;\n        cursorRequest = this.objectStore.index(column).openCursor(this.getKeyRange(value, op));\n\n        cursorRequest.onsuccess = (e) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.whereCheckerInstance.check(cursor.value)) {\n                    cursor.delete();\n                    ++this.rowAffected;\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { Where } from \"./where\";\nimport { RemoveQuery, QUERY_OPTION, API, IError } from \"../../../common/index\";\nimport * as Select from '../select/index';\nimport { QueryHelper } from \"../index\";\nimport { getObjectFirstKey, isArray } from \"../../utils/index\";\n\nexport class Instance extends Where {\n\n\n    constructor(\n        query: RemoveQuery, onSuccess: (recordRemoved: number) => void,\n        onError: (err: IError) => void\n    ) {\n        super();\n        this.query = query;\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Remove, this.query);\n        queryHelper.checkAndModify();\n        if (queryHelper.error == null) {\n            try {\n                this.initTransaction_();\n                if (this.query.where != null) {\n                    if (isArray(this.query.where)) {\n                        this.processWhereArrayQry();\n                    }\n                    else {\n                        this.processWhere_();\n                    }\n                }\n                else {\n                    this.executeWhereUndefinedLogic();\n                }\n\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onError(\n                queryHelper.error\n            );\n        }\n    }\n\n    private processWhereArrayQry() {\n        const selectObject = new Select.Instance(this.query, (results) => {\n            const keyList = [];\n            const pkey = this.getPrimaryKey(this.query.from);\n            results.forEach((item) => {\n                keyList.push(item[pkey]);\n            });\n            results = null;\n            const whereQry = { [pkey]: { [QUERY_OPTION.In]: keyList } };\n            this.query[QUERY_OPTION.Where] = whereQry;\n            this.processWhere_();\n        }, this.onError);\n        selectObject.isSubQuery = true;\n        selectObject.execute();\n    }\n\n    private processWhere_() {\n        if (this.query.where.or) {\n            this.processOrLogic();\n        }\n        this.goToWhereLogic();\n    }\n\n    private initTransaction_() {\n        this.createTransaction([this.query.from], this.onTransactionCompleted_);\n        this.objectStore = this.transaction.objectStore(this.query.from);\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.error == null) {\n            this.onSuccess(this.rowAffected);\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n\n    protected onQueryFinished() {\n        if (this.isOr === true) {\n            this.orQuerySuccess_();\n        }\n        else if (this.isTransaction === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    private orQuerySuccess_() {\n        const key = getObjectFirstKey((this as any)._orInfo.OrQuery);\n        if (key != null) {\n            const where = {};\n            where[key] = (this as any)._orInfo.OrQuery[key];\n            delete (this as any)._orInfo.OrQuery[key];\n            this.query.where = where;\n            this.goToWhereLogic();\n        }\n        else {\n            this.isOr = true;\n        }\n    }\n\n    private processOrLogic() {\n        this.isOr = true;\n        (this as any)._orInfo = {\n            OrQuery: this.query.where.or\n        };\n\n        // free or memory\n        delete this.query.where.or;\n    }\n}","import { WhereBase } from \"../where_base\";\nimport { CountQuery } from \"../../../common/index\";\n\nexport class BaseCount extends WhereBase {\n    resultCount = 0;\n    query: CountQuery;\n\n    protected onQueryFinished() {\n        if (this.isTransaction === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    protected onTransactionCompleted_ = () => {\n        if (this.error == null) {\n            this.onSuccess(this.resultCount);\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n}\n","import { BaseCount } from \"./base_count\";\n\nexport class NotWhere extends BaseCount {\n    protected executeWhereUndefinedLogic() {\n        let countRequest;\n        if (this.objectStore.count) {\n            countRequest = this.objectStore.count();\n            countRequest.onsuccess = () => {\n                this.resultCount = countRequest.result;\n                this.onQueryFinished();\n            };\n        }\n        else {\n            let cursor;\n            countRequest = this.objectStore.openCursor();\n            countRequest.onsuccess = (e: any) => {\n                cursor = e.target.result;\n                if (cursor) {\n                    ++this.resultCount;\n                    cursor.continue();\n                }\n                else {\n                    this.onQueryFinished();\n                }\n            };\n        }\n        countRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { NotWhere } from \"./not_where\";\nimport { promiseAll, promise } from \"../../helpers/index\";\n\nexport class In extends NotWhere {\n    protected executeInLogic(column, values) {\n        let cursor: IDBCursorWithValue, cursorRequest;\n        const columnStore = this.objectStore.index(column);\n        let runInLogic: (val) => Promise<void> = (value) => {\n            return promise<void>((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (this.whereCheckerInstance.check(cursor.value)) {\n                            ++this.resultCount;\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        if (this.objectStore.count) {\n            runInLogic = (value) => {\n                return promise((res, rej) => {\n                    cursorRequest = columnStore.count(this.getKeyRange(value));\n                    cursorRequest.onsuccess = (e) => {\n                        this.resultCount += e.target.result;\n                        res();\n                    };\n                    cursorRequest.onerror = rej;\n                });\n            };\n        }\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n}","import { In } from \"./in\";\nexport class Regex extends In {\n    protected executeRegexLogic(column: string, exp: RegExp) {\n        let cursor: IDBCursorWithValue;\n        this.regexExpression = exp;\n        const cursorRequest = this.objectStore.index(column).openCursor();\n\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.regexTest(cursor.key) &&\n                    this.whereCheckerInstance.check(cursor.value)) {\n                    ++this.resultCount;\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n\n    }\n}","import { Regex } from \"./regex\";\n\nexport class Where extends Regex {\n    protected executeWhereLogic(column, value, op) {\n        value = op ? value[op] : value;\n        let cursorRequest;\n        let cursor: IDBCursorWithValue;\n        let initCursorAndFilter;\n        if (Object.keys(this.query.where).length === 1 && this.objectStore.count) {\n            initCursorAndFilter = () => {\n                cursorRequest = this.objectStore.index(column).count(this.getKeyRange(value, op));\n                cursorRequest.onsuccess = () => {\n                    this.resultCount = cursorRequest.result;\n                    this.onQueryFinished();\n                };\n            };\n\n        }\n        else {\n            initCursorAndFilter = () => {\n                cursorRequest = this.objectStore.index(column).openCursor(this.getKeyRange(value, op));\n                cursorRequest.onsuccess = (e) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (this.whereCheckerInstance.check(cursor.value)) {\n                            ++this.resultCount;\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        this.onQueryFinished();\n                    }\n                };\n            };\n        }\n        initCursorAndFilter();\n\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}","import { Where } from \"./where\";\nimport {  IError, API, CountQuery, IDB_MODE } from \"../../../common/index\";\nimport * as Select from '../select/index';\nimport { QueryHelper } from \"../query_helper\";\nimport { isArray } from \"../../utils/index\";\n\nexport class Instance extends Where {\n\n    constructor(query: CountQuery, onSuccess: (noOfRecord: number) => void, onError: (error: IError) => void) {\n        super();\n        this.onError = onError;\n        this.onSuccess = onSuccess;\n        this.query = query;\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Count, this.query);\n        queryHelper.checkAndModify();\n        if (queryHelper.error == null) {\n            try {\n                const getDataFromSelect = () => {\n                    const selectInstance = new Select.Instance(this.query as any,\n                        (results) => {\n                            this.resultCount = results.length;\n                            this.onTransactionCompleted_();\n                        }, this.onError);\n                    selectInstance.execute();\n                };\n                if (this.query.join == null) {\n                    if (this.query.where != null) {\n                        if (this.query.where.or || isArray(this.query.where)) {\n                            getDataFromSelect();\n                        }\n                        else {\n                            this.initTransaction_();\n                            this.goToWhereLogic();\n                        }\n                    }\n                    else {\n                        this.initTransaction_();\n                        this.executeWhereUndefinedLogic();\n                    }\n                }\n                else {\n                    getDataFromSelect();\n                }\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onError(\n                queryHelper.error\n            );\n        }\n    }\n\n    private initTransaction_() {\n        this.createTransaction([this.query.from], this.onTransactionCompleted_, IDB_MODE.ReadOnly);\n        this.objectStore = this.transaction.objectStore(this.query.from);\n    }\n}","import * as Select from './instance';\nimport { QUERY_OPTION, DATA_TYPE, ERROR_TYPE, JoinQuery } from \"../../../common/index\";\nimport { Helper } from \"./orderby_helper\";\nimport { LogHelper } from \"../../log_helper\";\nimport { getDataType, removeSpace } from \"../../utils/index\";\n\nexport class Join extends Helper {\n\n    private joinQueryStack_: JoinQuery[] = [];\n    private currentQueryStackIndex_ = 0;\n    tablesFetched = [];\n\n    executeJoinQuery() {\n        const query = this.query;\n        if (getDataType(query.join) === DATA_TYPE.Object) {\n            this.joinQueryStack_ = [query.join as JoinQuery];\n        }\n        else {\n            this.joinQueryStack_ = query.join as JoinQuery[];\n        }\n        // get the data for first table\n        const tableName = query.from;\n        new Select.Instance({\n            from: tableName,\n            where: query.where,\n            case: query.case,\n            flatten: query.flatten\n        }, results => {\n            this.results = results.map((item) => {\n                return {\n                    [this.currentQueryStackIndex_]: item\n                };\n            });\n            this.tablesFetched.push(tableName);\n            this.startExecutingJoinLogic_();\n        }, this.onError).execute();\n    }\n\n    private onJoinQueryFinished_() {\n        if (this.error == null) {\n            if (this.results.length > 0) {\n\n                if (this.query[QUERY_OPTION.Skip] && !this.query[QUERY_OPTION.Limit]) {\n                    this.results.splice(0, this.query[QUERY_OPTION.Skip]);\n                }\n\n                try {\n                    let results = [];\n                    const tables = Object.keys(this.results[0]);\n                    const tablesLength = tables.length;\n                    const mapWithAlias = (query: JoinQuery, value: object) => {\n                        if (query.as != null) {\n                            for (const key in query.as) {\n                                if (value[(query.as as any)[key]] === undefined) {\n                                    value[(query.as as any)[key]] = value[key];\n                                    delete value[key];\n                                }\n                            }\n                        }\n                        return value;\n                    };\n                    this.results.forEach((result) => {\n                        let data = result[\"0\"]; // first table data\n                        for (let i = 1; i < tablesLength; i++) {\n                            const query = this.joinQueryStack_[i - 1];\n                            data = { ...data, ...mapWithAlias(query, result[i]) };\n                        }\n                        results.push(data);\n                    });\n                    this.results = results;\n                    // free results memory\n                    results = null;\n                    if (process.env.NODE_ENV === 'dev') {\n                        try {\n                            this.processOrderBy();\n                        }\n                        catch (ex) {\n                            this.onError({\n                                message: ex.message,\n                                type: ERROR_TYPE.InvalidOrderQuery\n                            });\n                            return;\n                        }\n                    }\n                    else {\n                        this.processOrderBy();\n                    }\n\n                    if (process.env.NODE_ENV === 'dev') {\n                        try {\n                            this.processGroupDistinctAggr();\n                        }\n                        catch (ex) {\n                            this.onError({\n                                message: ex.message,\n                                type: ERROR_TYPE.InvalidGroupQuery\n                            });\n                            return;\n                        }\n                    }\n                    else {\n                        this.processGroupDistinctAggr();\n                    }\n                }\n                catch (ex) {\n                    this.onError({\n                        message: ex.message,\n                        type: ERROR_TYPE.InvalidJoinQuery\n                    });\n                    return;\n                }\n\n                if (this.query[QUERY_OPTION.Skip] && this.query[QUERY_OPTION.Limit]) {\n                    this.results.splice(0, this.query[QUERY_OPTION.Skip]);\n                    this.results = this.results.slice(0, this.query[QUERY_OPTION.Limit]);\n                }\n                else if (this.query[QUERY_OPTION.Limit]) {\n                    this.results = this.results.slice(0, this.query[QUERY_OPTION.Limit]);\n                }\n            }\n            this.onSuccess(this.results);\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n\n    private startExecutingJoinLogic_() {\n        const query = this.joinQueryStack_[this.currentQueryStackIndex_];\n        if (query) {\n            try {\n                let jointblInfo = this.getJoinTableInfo_(query.on);\n                // table 1 is fetched & table2 needs to be fetched for join\n                if (query.with === jointblInfo.table1.table) {\n                    jointblInfo = {\n                        table1: jointblInfo.table2,\n                        table2: jointblInfo.table1\n                    };\n                }\n\n                if (process.env.NODE_ENV === 'dev') {\n                    this.checkJoinQuery_(jointblInfo, query);\n                    if (this.error != null) {\n                        return this.onJoinQueryFinished_();\n                    }\n                }\n\n                new Select.Instance({\n                    from: query.with,\n                    where: query.where,\n                    case: query.case,\n                    flatten: query.flatten\n                }, results => {\n                    this.jointables(query.type, jointblInfo, results);\n                    this.tablesFetched.push(jointblInfo.table2.table);\n                    ++this.currentQueryStackIndex_;\n                    this.startExecutingJoinLogic_();\n                }, this.onError).execute();\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onJoinQueryFinished_();\n        }\n    }\n\n    private jointables(joinType: string, jointblInfo: JoinTableInfo, secondtableData: any[]) {\n\n        const results = [];\n        const column1 = jointblInfo.table1.column;\n        const column2 = jointblInfo.table2.column;\n        const table1Index = this.tablesFetched.indexOf(jointblInfo.table1.table);\n        const table2Index = this.currentQueryStackIndex_ + 1;\n        const performInnerJoin = () => {\n            let index = 0;\n            this.results.forEach(valueFromFirstTable => {\n                secondtableData.forEach((valueFromSecondTable) => {\n                    if (valueFromFirstTable[table1Index][column1] === valueFromSecondTable[column2]) {\n                        results[index] = { ...valueFromFirstTable };\n                        results[index++][table2Index] = valueFromSecondTable;\n                    }\n                });\n            });\n        };\n        const performleftJoin = () => {\n            let index = 0;\n            let valueMatchedFromSecondTable: any[];\n            let callBack;\n            const columnDefaultValue = {};\n            this.getTable(jointblInfo.table2.table).columns.forEach(col => {\n                columnDefaultValue[col.name] = null;\n            });\n            this.results.forEach((valueFromFirstTable) => {\n                valueMatchedFromSecondTable = [];\n                if (table2Index === 1) {\n                    callBack = function (valueFromSecondTable) {\n                        if (valueFromFirstTable[table1Index][column1] === valueFromSecondTable[column2]) {\n                            valueMatchedFromSecondTable.push(valueFromSecondTable);\n                        }\n                    };\n                }\n                else {\n                    callBack = function (valueFromSecondTable) {\n                        const value = valueFromFirstTable[table1Index];\n                        if (value != null && value[column1] === valueFromSecondTable[column2]) {\n                            valueMatchedFromSecondTable.push(valueFromSecondTable);\n                        }\n                    };\n                }\n                secondtableData.forEach(callBack);\n                if (valueMatchedFromSecondTable.length === 0) {\n                    valueMatchedFromSecondTable = [columnDefaultValue];\n                }\n                valueMatchedFromSecondTable.forEach(function (value) {\n                    results[index] = { ...valueFromFirstTable };\n                    results[index++][table2Index] = value;\n                });\n            });\n        };\n        switch (joinType) {\n            case \"left\":\n                performleftJoin(); break;\n            default:\n                performInnerJoin();\n        }\n        this.results = results;\n    }\n\n    private getJoinTableInfo_(joinOn: string) {\n        joinOn = removeSpace(joinOn);\n        const splittedjoinOn = joinOn.split(\"=\");\n        const splittedjoinOnbydotFirst = splittedjoinOn[0].split(\".\");\n        const splittedjoinOnbydotSecond = splittedjoinOn[1].split(\".\");\n        const info = {\n            table1: {\n                table: splittedjoinOnbydotFirst[0],\n                column: splittedjoinOnbydotFirst[1]\n            },\n            table2: {\n                table: splittedjoinOnbydotSecond[0],\n                column: splittedjoinOnbydotSecond[1]\n            }\n        } as JoinTableInfo;\n        return info;\n    }\n\n    private checkJoinQuery_(jointblInfo: JoinTableInfo, qry: JoinQuery) {\n        const table1 = jointblInfo.table1;\n        const table2 = jointblInfo.table2;\n        const tableSchemaOf1stTable = this.getTable(table1.table);\n        const tableSchemaOf2ndTable = this.getTable(table2.table);\n        let err: LogHelper;\n\n        // check on info & with info \n        if (qry.with !== table2.table) {\n            err = new LogHelper(ERROR_TYPE.InvalidJoinQuery,\n                `on value should contains value of with`\n            );\n        }\n\n        // check for column existance\n\n        if (tableSchemaOf1stTable.columns.find(q => q.name === table1.column) == null) {\n            err = new LogHelper(ERROR_TYPE.InvalidJoinQuery,\n                `column ${table1.column} does not exist in table ${table1.table}`\n            );\n        }\n        else if (tableSchemaOf2ndTable.columns.find(q => q.name === table2.column) == null) {\n            err = new LogHelper(ERROR_TYPE.InvalidJoinQuery,\n                `column ${table2.column} does not exist in table ${table2.table}`\n            );\n        }\n\n        // check for column match in both table\n        if (qry.as == null) {\n            qry.as = {};\n        }\n        tableSchemaOf1stTable.columns.every(function (column) {\n            const columnFound = tableSchemaOf2ndTable.columns.find(q => q.name === column.name && q.name !== table1.column);\n            if (columnFound != null && qry.as[columnFound.name] == null) {\n                err = new LogHelper(ERROR_TYPE.InvalidJoinQuery,\n                    `column ${column.name} exist in both table ${table1.table} & ${table2.table}`\n                );\n                return false;\n            }\n            return true;\n        });\n        if (err != null) {\n            this.onErrorOccured(err, true);\n        }\n    }\n}\n\ntype JoinTableInfo = {\n    table1: { table: string, column: string }\n    table2: { table: string, column: string }\n};","export const getKeys = (value) => {\n    return Object.keys(value);\n};","export const isObject = (value) => {\n    return typeof value === 'object';\n};","import { SelectQuery, IError, IDB_MODE, QUERY_OPTION, API } from \"../../../common/index\";\nimport { Join } from \"./join\";\nimport { QueryHelper } from \"../query_helper\";\nimport { isArray, getObjectFirstKey, isObject, getKeys } from \"../../utils/index\";\n\nexport class Instance extends Join {\n\n    constructor(query: SelectQuery, onSuccess: (results: object[]) => void, onError: (err: IError) => void) {\n        super();\n        this.onError = onError;\n        this.onSuccess = onSuccess;\n        this.query = query;\n        this.tableName = query.from;\n        this.setPushResult();\n        if (isArray(this.query.where)) {\n            this.isArrayQry = true;\n            this.setLimitAndSkipEvaluationAtEnd_();\n        }\n        else {\n            this.skipRecord = query.skip;\n            this.limitRecord = query.limit;\n        }\n        if (query.order) {\n            if (isArray(query.order) || query.order.case || isObject(query.order.by)) {\n                this.query.order.idbSorting = false;\n            }\n            this.setLimitAndSkipEvaluationAtEnd_();\n        }\n        else if (query.groupBy) {\n            this.setLimitAndSkipEvaluationAtEnd_();\n        }\n\n    }\n\n    private setLimitAndSkipEvaluationAtEnd_() {\n        if (this.query.limit) {\n            this.shouldEvaluateLimitAtEnd = true;\n        }\n        if (this.query.skip) {\n            this.shouldEvaluateSkipAtEnd = true;\n        }\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Select, this.query);\n        queryHelper.checkAndModify();\n        if (queryHelper.error == null) {\n            try {\n                if (this.query.join == null) {\n                    if (this.query.where != null) {\n                        this.initTransaction_();\n                        if (isArray(this.query.where)) {\n                            this.processWhereArrayQry();\n                        }\n                        else {\n                            this.processWhere_();\n                        }\n                    }\n                    else {\n                        this.initTransaction_();\n                        this.executeWhereUndefinedLogic();\n                    }\n\n                }\n                else {\n                    this.executeJoinQuery();\n                }\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onError(\n                queryHelper.error\n            );\n        }\n    }\n\n\n    private processWhereArrayQry() {\n        this.isArrayQry = true;\n        const whereQuery = this.query.where,\n            pKey = this.getPrimaryKey(this.query.from);\n        let isFirstWhere = true, output = [], operation;\n\n        const isItemExist = (keyValue) => {\n            return output.findIndex(item => item[pKey] === keyValue) >= 0;\n        };\n        const onSuccess = () => {\n            if (operation === QUERY_OPTION.And) {\n                const doAnd = () => {\n                    let andResults = [];\n                    this.results.forEach((item) => {\n                        if (isItemExist(item[pKey])) {\n                            andResults.push(item);\n                        }\n                    });\n                    output = andResults;\n                    andResults = null;\n                };\n\n                if (isFirstWhere === true) {\n                    output = this.results;\n                }\n                else if (output.length > 0) {\n                    doAnd();\n                }\n            }\n            else {\n                if (output.length > 0) {\n                    this.results = [...output, ...this.results];\n                    this.removeDuplicates();\n                    output = this.results;\n                }\n                else {\n                    output = this.results;\n                }\n            }\n            isFirstWhere = false;\n            if (whereQuery.length > 0) {\n                this.results = [];\n                processFirstQry();\n            }\n            else {\n                this.results = output;\n                if (this.isSubQuery === true) {\n                    this.onTransactionCompleted_();\n                }\n            }\n\n        };\n        const processFirstQry = () => {\n            this.query.where = whereQuery.shift();\n            if (this.query.where[QUERY_OPTION.Or]) {\n                if (Object.keys(this.query.where).length === 1) {\n                    operation = QUERY_OPTION.Or;\n                    this.query.where = this.query.where[QUERY_OPTION.Or];\n                    this.onWhereArrayQrySuccess = onSuccess;\n                }\n                else {\n                    operation = QUERY_OPTION.And;\n                    this.onWhereArrayQrySuccess = onSuccess;\n                }\n            }\n            else {\n                operation = QUERY_OPTION.And;\n                this.onWhereArrayQrySuccess = onSuccess;\n            }\n            this.processWhere_();\n        };\n        processFirstQry();\n    }\n\n    protected onQueryFinished() {\n        if (this.isOr === true) {\n            this.orQuerySuccess_();\n        }\n        else if (this.isArrayQry === true) {\n            this.onWhereArrayQrySuccess();\n        }\n        else if (this.isTransaction === true || this.isSubQuery === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    private initTransaction_() {\n        this.createTransaction([this.tableName], this.onTransactionCompleted_, IDB_MODE.ReadOnly);\n        this.objectStore = this.transaction.objectStore(this.tableName);\n    }\n\n    private processWhere_() {\n        if (this.query.where.or) {\n            this.processOrLogic_();\n        }\n        this.goToWhereLogic();\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.error == null) {\n            if (this.query.flatten) {\n                const flattendData = [];\n                const indexToDelete = {};\n                this.query.flatten.forEach(column => {\n                    this.results.forEach((data, i) => {\n                        data[column].forEach(item => {\n                            flattendData.push(\n                                { ...data, ...{ [column]: item } }\n                            );\n                        });\n                        indexToDelete[i] = true;\n                    });\n                });\n                let itemsDeleted = 0;\n                getKeys(indexToDelete).forEach(key => {\n                    this.results.splice(Number(key) - itemsDeleted, 1);\n                    ++itemsDeleted;\n                });\n                this.results = this.results.concat(flattendData);\n            }\n            this.processOrderBy();\n            if (!this.error) {\n                this.processGroupDistinctAggr();\n                if (this.shouldEvaluateSkipAtEnd) {\n                    this.results.splice(0, this.query.skip);\n                }\n                if (this.shouldEvaluateLimitAtEnd) {\n                    this.results = this.results.slice(0, this.query.limit);\n                }\n                this.onSuccess(this.results);\n            }\n            else {\n                this.onError(this.error);\n            }\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n\n    private orQueryFinish_() {\n        this.isOr = false;\n        this.results = this.orInfo.results;\n        // free or info memory\n        this.orInfo = null;\n        this.removeDuplicates();\n        this.onQueryFinished();\n    }\n\n    private orQuerySuccess_() {\n        this.orInfo.results = [... this.orInfo.results, ...this.results];\n        if (!this.query.limit || (this.query.limit > this.orInfo.results.length)) {\n            this.results = [];\n            const key = getObjectFirstKey(this.orInfo.orQuery);\n            if (key != null) {\n                const where = {};\n                where[key] = this.orInfo.orQuery[key];\n                delete this.orInfo.orQuery[key];\n                this.query.where = where;\n                this.goToWhereLogic();\n            }\n            else {\n                this.orQueryFinish_();\n            }\n        }\n        else {\n            this.orQueryFinish_();\n        }\n    }\n\n    private processOrLogic_() {\n        this.isOr = true;\n        this.orInfo = {\n            orQuery: this.query.where.or,\n            results: []\n        };\n        // free or memory\n        delete this.query.where.or;\n    }\n}","import { DATA_TYPE } from \"../../common/index\";\n\nexport const getDataType = (value) => {\n    if (value == null) {\n        return DATA_TYPE.Null;\n    }\n    const type = typeof value;\n    switch (type) {\n        case 'object':\n            if (Array.isArray(value)) {\n                return DATA_TYPE.Array;\n            }\n            else if (value.getDate && value.getTime) {\n                return DATA_TYPE.DateTime;\n            }\n        default:\n            return type;\n    }\n}","export const isArray = (value) => {\n    return Array.isArray(value);\n};","export const getObjectFirstKey = (value) => {\n    for (const key in value) {\n        return key;\n    }\n    return null;\n};","export const removeSpace = (value: string) => {\n    return value.replace(/\\s/g, '');\n};","import {\n    TranscationQuery, WebWorkerRequest, SelectQuery, RemoveQuery,\n    CountQuery, UpdateQuery, InsertQuery, ERROR_TYPE, API, IError\n} from \"../../../common/index\";\nimport { Base } from \"../base\";\nimport * as Select from '../select/index';\nimport * as Count from '../count/index';\nimport * as Insert from '../insert/index';\nimport * as Remove from '../remove/index';\nimport * as Update from '../update/index';\nimport { QueryHelper } from \"../query_helper\";\nimport { LogHelper } from \"../../log_helper\";\nimport { promise, promiseAll, getAutoIncrementValues } from \"../../helpers/index\";\nimport { Config } from \"../../config\";\n\nexport class Instance extends Base {\n    query: TranscationQuery;\n    results;\n    requestQueue: WebWorkerRequest[] = [];\n    isQueryExecuting = false;\n\n    isTxStarted_ = false;\n\n    constructor(qry: TranscationQuery, onSuccess: (results: any) => void, onError: (err: IError) => void) {\n        super();\n        this.query = qry;\n        this.onError = onError;\n        this.onSuccess = onSuccess;\n        this.results = {};\n    }\n\n    execute() {\n        const notExistingTable = this.getNotExistingTable_(this.query.tables);\n        if (notExistingTable != null) {\n            this.onError(new LogHelper(ERROR_TYPE.TableNotExist, { tableName: notExistingTable }).get());\n            return;\n        }\n        promiseAll<number>(this.query.tables.map(table => {\n            return getAutoIncrementValues(this.getTable(table));\n        })).then(results => {\n            results.forEach((result: any, index) => {\n                QueryHelper.autoIncrementValues[this.query.tables[index]] = result;\n            });\n            this.startExecution_();\n        }).catch(this.onError);\n    }\n\n    private startExecution_() {\n        const select = (qry: SelectQuery) => {\n            return this.pushRequest_({\n                name: API.Select,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const insert = (qry: InsertQuery) => {\n            return this.pushRequest_({\n                name: API.Insert,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const update = (qry: UpdateQuery) => {\n            return this.pushRequest_({\n                name: API.Update,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const remove = (qry: RemoveQuery) => {\n            return this.pushRequest_({\n                name: API.Remove,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const count = (qry: CountQuery) => {\n            return this.pushRequest_({\n                name: API.Count,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const setResult = (key: string, value) => {\n            this.results[key] = value;\n        };\n        const getResult = (key: string) => {\n            return this.results[key];\n        };\n        const abort = (msg: string) => {\n            this.abortTransaction_(msg);\n        };\n\n        const start = () => {\n            this.checkQueries_(this.requestQueue).then((results) => {\n                this.startTransaction_();\n            }).catch((err) => {\n                this.onError(err);\n            });\n        };\n        let txLogic = null;\n        if (Config.isRuningInWorker === true) {\n            eval(\"txLogic =\" + this.query.logic);\n\n        }\n        else {\n            txLogic = this.query.logic;\n        }\n        txLogic.call(\n            this,\n            {\n                data: this.query.data,\n                insert, select, update, remove,\n                count, setResult, getResult, abort, start\n            }\n        );\n\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`transaction query started`);\n        }\n    }\n\n    private startTransaction_() {\n        try {\n            this.isTxStarted_ = true;\n            this.initTransaction_(this.query.tables);\n            this.processExecutionOfQry_();\n        }\n        catch (ex) {\n            this.onExceptionOccured(ex);\n        }\n    }\n\n    private initTransaction_(tableNames: string[]) {\n        this.createTransaction(tableNames, this.onTransactionCompleted_.bind(this));\n    }\n\n    private onTransactionCompleted_() {\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`transaction finished`);\n        }\n        this.onSuccess(this.results);\n    }\n\n    private onRequestFinished_(result) {\n        const finisehdRequest = this.requestQueue.shift();\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`finished request : ${finisehdRequest.name} `);\n        }\n        if (finisehdRequest) {\n            if (this.error) {\n                this.abortTransaction_(\"automatic abort of transaction due to error occured\");\n                if (process.env.NODE_ENV === 'dev') {\n                    console.log(`transaction aborted due to error occured`);\n                }\n                this.onErrorOccured(this.error);\n            }\n            else {\n                this.isQueryExecuting = false;\n                if (finisehdRequest.onSuccess) {\n                    finisehdRequest.onSuccess(result);\n                }\n                this.processExecutionOfQry_();\n            }\n        }\n    }\n\n    private abortTransaction_(msg: string) {\n        if (this.transaction != null) {\n            this.transaction.abort();\n            if (process.env.NODE_ENV === 'dev') {\n                console.log(`transaction aborted. Msg : ${msg}`);\n            }\n        }\n    }\n\n    private executeRequest_(request: WebWorkerRequest) {\n        this.isQueryExecuting = true;\n        let requestObj;\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`executing request : ${request.name} `);\n        }\n        switch (request.name) {\n            case API.Select:\n                requestObj = new Select.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n            case API.Insert:\n                requestObj = new Insert.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n            case API.Update:\n                requestObj = new Update.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n            case API.Remove:\n                requestObj = new Remove.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n            case API.Count:\n                requestObj = new Count.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n        }\n        requestObj.isTransaction = true;\n        requestObj.execute();\n    }\n\n    private pushRequest_(request: WebWorkerRequest) {\n        const push = () => {\n            this.requestQueue.push(request);\n        };\n        const promiseObj = promise((resolve, reject) => {\n            request.onSuccess = (result) => {\n                resolve(result);\n            };\n            request.onError = (error) => {\n                this.error = error;\n                reject(error);\n            };\n        });\n        if (this.isTxStarted_ === true) {\n            this.checkQueries_([request]).then(() => {\n                push();\n                this.processExecutionOfQry_();\n            }).catch(err => {\n                this.error = err;\n                this.abortTransaction_(JSON.stringify(err));\n            });\n        }\n        else {\n            push();\n        }\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`request pushed : ${request.name} with query value - ${JSON.stringify(request.query)}`);\n        }\n        return promiseObj;\n    }\n\n    private processExecutionOfQry_() {\n        if (this.requestQueue.length > 0 && this.isQueryExecuting === false) {\n            this.executeRequest_(this.requestQueue[0]);\n        }\n    }\n\n    private checkQueries_(requestQueue: WebWorkerRequest[]) {\n        return promiseAll(requestQueue.map(request => {\n            const tableName = request.query.into || request.query.in;\n            return new QueryHelper(request.name, request.query).checkAndModify();\n        }));\n    }\n\n    private getNotExistingTable_(tables: string[]) {\n        let invalidTable: string = null;\n        tables.every(table => {\n            if (this.isTableExist(table) === false) {\n                invalidTable = table;\n                return false;\n            }\n            return true;\n        });\n        return invalidTable;\n    }\n}"],"sourceRoot":""}
\ No newline at end of file
diff --git a/dist/jsstore.worker.ie.js b/dist/jsstore.worker.ie.js
index 4620c086..3044b830 100644
--- a/dist/jsstore.worker.ie.js
+++ b/dist/jsstore.worker.ie.js
@@ -1,5 +1,5 @@
 /*!
- * @license :jsstore - V3.11.3 - 24/11/2020
+ * @license :jsstore - V3.11.4 - 29/11/2020
  * https://github.com/ujjwalguptaofficial/JsStore
  * Copyright (c) 2020 @Ujjwal Gupta; Licensed MIT
  */
@@ -8385,7 +8385,6 @@ function (module, __webpack_exports__, __webpack_require__) {
       _this.onTransactionCompleted_ = function () {
         if (_this.error == null) {
           if (_this.query.flatten) {
-            debugger;
             var flattendData_1 = [];
             var indexToDelete_1 = {};
 
diff --git a/dist/jsstore.worker.ie.min.js b/dist/jsstore.worker.ie.min.js
index 62012d36..865d1620 100644
--- a/dist/jsstore.worker.ie.min.js
+++ b/dist/jsstore.worker.ie.min.js
@@ -1,5 +1,5 @@
 /*!
- * @license :jsstore - V3.11.3 - 24/11/2020
+ * @license :jsstore - V3.11.4 - 29/11/2020
  * https://github.com/ujjwalguptaofficial/JsStore
  * Copyright (c) 2020 @Ujjwal Gupta; Licensed MIT
  */
diff --git a/dist/jsstore.worker.js b/dist/jsstore.worker.js
index 5618c424..163cb93e 100644
--- a/dist/jsstore.worker.js
+++ b/dist/jsstore.worker.js
@@ -1,5 +1,5 @@
 /*!
- * @license :jsstore - V3.11.3 - 24/11/2020
+ * @license :jsstore - V3.11.4 - 29/11/2020
  * https://github.com/ujjwalguptaofficial/JsStore
  * Copyright (c) 2020 @Ujjwal Gupta; Licensed MIT
  */
@@ -8385,7 +8385,6 @@ function (module, __webpack_exports__, __webpack_require__) {
       _this.onTransactionCompleted_ = function () {
         if (_this.error == null) {
           if (_this.query.flatten) {
-            debugger;
             var flattendData_1 = [];
             var indexToDelete_1 = {};
 
diff --git a/dist/jsstore.worker.js.map b/dist/jsstore.worker.js.map
index 51949656..d4823eed 100644
--- a/dist/jsstore.worker.js.map
+++ b/dist/jsstore.worker.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack://JsStoreWorker/webpack/bootstrap","webpack://JsStoreWorker/./src/common/enums.ts","webpack://JsStoreWorker/./src/worker/log_helper.ts","webpack://JsStoreWorker/./src/worker/business/idb_helper.ts","webpack://JsStoreWorker/./src/worker/business/base_helper.ts","webpack://JsStoreWorker/./src/worker/utils/get_regex_from_like_expression.ts","webpack://JsStoreWorker/./src/worker/business/where_checker.ts","webpack://JsStoreWorker/./src/worker/business/base.ts","webpack://JsStoreWorker/./src/worker/utils/is_null.ts","webpack://JsStoreWorker/./src/worker/business/update/schema_checker.ts","webpack://JsStoreWorker/./src/worker/business/insert/value_checker.ts","webpack://JsStoreWorker/./src/worker/business/insert/values_checker.ts","webpack://JsStoreWorker/./src/worker/business/query_helper.ts","webpack://JsStoreWorker/./src/worker/keystore/enums.ts","webpack://JsStoreWorker/./src/worker/keystore/business/base_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/idb_helper.ts","webpack://JsStoreWorker/./src/worker/keystore/business/remove_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/set_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/utils_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/init_db_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/get_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/main_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/query_executor.ts","webpack://JsStoreWorker/./src/worker/keystore/instance.ts","webpack://JsStoreWorker/./src/worker/config.ts","webpack://JsStoreWorker/./src/worker/business/clear.ts","webpack://JsStoreWorker/./src/worker/business/init_db.ts","webpack://JsStoreWorker/./src/worker/model/table_helper.ts","webpack://JsStoreWorker/./src/worker/model/db_helper.ts","webpack://JsStoreWorker/./src/worker/model/column.ts","webpack://JsStoreWorker/./src/worker/model/table.ts","webpack://JsStoreWorker/./src/worker/model/database.ts","webpack://JsStoreWorker/./src/worker/business/union/index.ts","webpack://JsStoreWorker/./src/worker/business/intersect/index.ts","webpack://JsStoreWorker/./src/worker/query_executor.ts","webpack://JsStoreWorker/./src/worker/business/where_base.ts","webpack://JsStoreWorker/./src/worker/helpers/promise.ts","webpack://JsStoreWorker/./src/worker/helpers/promise_all.ts","webpack://JsStoreWorker/./src/worker/business/base_db.ts","webpack://JsStoreWorker/./src/worker/business/select/then_evaluator.ts","webpack://JsStoreWorker/./src/worker/business/select/base_select.ts","webpack://JsStoreWorker/./src/worker/business/select/not_where.ts","webpack://JsStoreWorker/./src/worker/business/select/in.ts","webpack://JsStoreWorker/./src/worker/business/select/regex.ts","webpack://JsStoreWorker/./src/worker/business/select/where.ts","webpack://JsStoreWorker/./src/worker/business/select/group_by_helper.ts","webpack://JsStoreWorker/./src/worker/business/select/orderby_helper.ts","webpack://JsStoreWorker/./src/worker/business/drop_db.ts","webpack://JsStoreWorker/./src/worker/start.ts","webpack://JsStoreWorker/./src/worker/index.ts","webpack://JsStoreWorker/./src/worker/helpers/auto_increment_helper.ts","webpack://JsStoreWorker/./src/worker/business/insert/instance.ts","webpack://JsStoreWorker/./src/worker/business/update/base_update.ts","webpack://JsStoreWorker/./src/worker/business/update/not_where.ts","webpack://JsStoreWorker/./src/worker/business/update/in.ts","webpack://JsStoreWorker/./src/worker/business/update/regex.ts","webpack://JsStoreWorker/./src/worker/business/update/where.ts","webpack://JsStoreWorker/./src/worker/business/update/instance.ts","webpack://JsStoreWorker/./src/worker/business/remove/base_remove.ts","webpack://JsStoreWorker/./src/worker/business/remove/not_where.ts","webpack://JsStoreWorker/./src/worker/business/remove/in.ts","webpack://JsStoreWorker/./src/worker/business/remove/regex.ts","webpack://JsStoreWorker/./src/worker/business/remove/where.ts","webpack://JsStoreWorker/./src/worker/business/remove/instance.ts","webpack://JsStoreWorker/./src/worker/business/count/base_count.ts","webpack://JsStoreWorker/./src/worker/business/count/not_where.ts","webpack://JsStoreWorker/./src/worker/business/count/in.ts","webpack://JsStoreWorker/./src/worker/business/count/regex.ts","webpack://JsStoreWorker/./src/worker/business/count/where.ts","webpack://JsStoreWorker/./src/worker/business/count/instance.ts","webpack://JsStoreWorker/./src/worker/business/select/join.ts","webpack://JsStoreWorker/./src/worker/utils/get_keys.ts","webpack://JsStoreWorker/./src/worker/utils/is_object.ts","webpack://JsStoreWorker/./src/worker/business/select/instance.ts","webpack://JsStoreWorker/./src/worker/utils/get_data_type.ts","webpack://JsStoreWorker/./src/worker/utils/is_array.ts","webpack://JsStoreWorker/./src/worker/utils/get_object_first_key.ts","webpack://JsStoreWorker/./src/worker/utils/remove_space.ts","webpack://JsStoreWorker/./src/worker/business/transaction/instance.ts"],"names":[],"mappings":"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","file":"jsstore.worker.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 24);\n","export enum ERROR_TYPE {\n    WorkerNotSupplied = \"worker_not_supplied\",\n    IndexedDbUndefined = \"indexeddb_undefined\",\n    UndefinedColumn = \"undefined_column\",\n    UndefinedValue = \"undefined_value\",\n    UndefinedColumnName = \"undefined_column_name\",\n    UndefinedDbName = \"undefined_database_name\",\n    UndefinedColumnValue = \"undefined_column_value\",\n    NotArray = \"not_array\",\n    NoValueSupplied = \"no_value_supplied\",\n    ColumnNotExist = \"column_not_exist\",\n    EnableSearchOff = \"enable_search_off\",\n    InvalidOp = \"invalid_operator\",\n    NullValue = \"null_value\",\n    WrongDataType = \"wrong_data_type\",\n    TableNotExist = \"table_not_exist\",\n    DbNotExist = \"db_not_exist\",\n    ConnectionAborted = \"connection_aborted\",\n    ConnectionClosed = \"connection_closed\",\n    NotObject = \"not_object\",\n    InvalidConfig = \"invalid_config\",\n    DbBlocked = \"Db_blocked\",\n    IndexedDbNotSupported = \"indexeddb_not_supported\",\n    NullValueInWhere = \"null_value_in_where\",\n    InvalidJoinQuery = 'invalid_join_query',\n    InvalidOrderQuery = 'invalid_order_query',\n    InvalidQuery = 'invalid_query',\n    InvalidGroupQuery = 'invalid_group_query',\n}\n\nexport enum WORKER_STATUS {\n    Registered = \"registerd\",\n    Failed = \"failed\",\n    NotStarted = \"not_started\"\n}\n\nexport enum DATA_TYPE {\n    String = \"string\",\n    Object = \"object\",\n    Array = \"array\",\n    Number = \"number\",\n    Boolean = \"boolean\",\n    Null = \"null\",\n    DateTime = \"date_time\"\n}\n\nexport enum API {\n    InitDb = \"init_db\",\n    IsDbExist = \"is_db_exist\",\n    GetDbVersion = \"get_db_version\",\n    GetDbList = \"get_db_list\",\n    Get = \"get\",\n    Set = \"set\",\n    Select = \"select\",\n    Insert = \"insert\",\n    Update = \"update\",\n    Remove = \"remove\",\n    GetDbSchema = \"get_db_schema\",\n    OpenDb = \"open_db\",\n    Clear = \"clear\",\n    DropDb = \"drop_db\",\n    Count = \"count\",\n    ChangeLogStatus = \"change_log_status\",\n    Terminate = \"terminate\",\n    Transaction = \"transaction\",\n    InitKeyStore = \"init_keystore\",\n    CloseDb = \"close_db\",\n    Union = \"union\",\n    Intersect = \"intersect\"\n}\n\nexport enum EVENT {\n    RequestQueueEmpty = \"requestQueueEmpty\",\n    RequestQueueFilled = \"requestQueueFilled\"\n}\n\nexport enum QUERY_OPTION {\n    Where = \"where\",\n    Like = 'like',\n    Regex = 'regex',\n    In = 'in',\n    Equal = \"=\",\n    Between = '-',\n    GreaterThan = '>',\n    LessThan = '<',\n    GreaterThanEqualTo = \">=\",\n    LessThanEqualTo = \"<=\",\n    NotEqualTo = \"!=\",\n    Aggregate = \"aggregate\",\n    Max = \"max\",\n    Min = \"min\",\n    Avg = \"avg\",\n    Count = \"count\",\n    Sum = \"sum\",\n    Or = \"or\",\n    Skip = \"skip\",\n    Limit = \"limit\",\n    And = \"and\",\n    IgnoreCase = \"ignoreCase\",\n    Then = \"then\"\n}\n\nexport enum IDB_MODE {\n    ReadOnly = \"readonly\",\n    ReadWrite = \"readwrite\"\n}\n\nexport enum OCCURENCE {\n    First = 'f',\n    Last = 'l',\n    Any = 'a'\n}\n\nexport enum CONNECTION_STATUS {\n    Connected = \"connected\",\n    Closed = \"closed\",\n    NotStarted = \"not_started\",\n    UnableToStart = \"unable_to_start\",\n    ClosedByJsStore = \"closed_by_jsstore\"\n}","import { IError, ERROR_TYPE } from \"../common/index\";\nimport { Config } from \"./config\";\n\nexport class LogHelper implements IError {\n    type: ERROR_TYPE;\n    message: string;\n    private info_: any;\n\n    constructor(type: ERROR_TYPE, info: any = null) {\n        this.type = type;\n        this.info_ = info;\n        this.message = this.getMsg_();\n    }\n\n    throw() {\n        throw this.get();\n    }\n\n    static log(msg) {\n        if (Config.isLogEnabled) {\n            console.log(msg);\n        }\n    }\n\n    logError() {\n        console.error(this.get());\n    }\n\n\n\n    get() {\n        return {\n            message: this.message,\n            type: this.type\n        } as IError;\n    }\n\n    private getMsg_() {\n        let errMsg: string;\n        switch (this.type) {\n            case ERROR_TYPE.NotArray:\n                errMsg = \"Supplied value is not an array\";\n                break;\n            case ERROR_TYPE.UndefinedColumn:\n                errMsg = \"Column is undefined in Where\";\n                break;\n            case ERROR_TYPE.UndefinedValue:\n                errMsg = \"Value is undefined in Where\";\n                break;\n            case ERROR_TYPE.UndefinedColumnName:\n                errMsg = \"Column name is undefined '\" + this.info_['TableName'] + \"'\";\n                break;\n            case ERROR_TYPE.UndefinedDbName:\n                errMsg = \"Database name is not supplied\";\n                break;\n            case ERROR_TYPE.UndefinedColumnValue:\n                errMsg = \"Column value is undefined\";\n                break;\n            case ERROR_TYPE.NoValueSupplied:\n                errMsg = \"No value is supplied\";\n                break;\n            case ERROR_TYPE.InvalidOp:\n                errMsg = \"Invalid Op Value '\" + this.info_['Op'] + \"'\";\n                break;\n            case ERROR_TYPE.ColumnNotExist:\n                errMsg = this.info_['isOrder'] ?\n                    `Column '${this.info_['column']}' in order query does not exist` :\n                    `Column '${this.info_['column']}' does not exist`;\n                break;\n            case ERROR_TYPE.EnableSearchOff:\n                errMsg = \"Search is turned off for the Column '\" + this.info_['column'] + \"'\";\n                break;\n            case ERROR_TYPE.NullValue:\n                errMsg = \"Null value is not allowed for column '\" + this.info_['ColumnName'] + \"'\";\n                break;\n            case ERROR_TYPE.WrongDataType:\n                errMsg = \"Supplied value for column '\" + this.info_['column'] +\n                    \"' have wrong data type\";\n                break;\n            case ERROR_TYPE.TableNotExist:\n                errMsg = \"Table '\" + this.info_['tableName'] + \"' does not exist\";\n                break;\n            case ERROR_TYPE.DbNotExist:\n                errMsg = `Database with name ${this.info_['dbName']} does not exist`;\n                break;\n            case ERROR_TYPE.NotObject:\n                errMsg = \"supplied value is not object\";\n                break;\n            case ERROR_TYPE.InvalidOp:\n                errMsg = \"Invalid Config '\" + this.info_['Config'] + \" '\";\n                break;\n            case ERROR_TYPE.DbBlocked:\n                errMsg = `database is blocked, cant be deleted right now`;\n                break;\n            case ERROR_TYPE.NullValueInWhere:\n                errMsg = `Null/undefined is not allowed in where. Column '${this.info_['column']}' has null`;\n                break;\n            case ERROR_TYPE.InvalidJoinQuery:\n                errMsg = this.info_;\n                break;\n            default:\n                errMsg = this.message;\n                break;\n        }\n        return errMsg;\n    }\n}","import { CONNECTION_STATUS, ERROR_TYPE, IDB_MODE, IDbStatus } from \"../../common/index\";\nimport { KeyStore } from \"../keystore/index\";\nimport { DataBase } from \"../model/index\";\nimport { DropDb } from \"./drop_db\";\nimport { promise } from \"../helpers/index\";\n\nexport class IdbHelper {\n\n    static onDbDroppedByBrowser: () => void;\n    static transaction: IDBTransaction = null;\n    static isDbDeletedByBrowser: boolean;\n    static dbConnection: IDBDatabase;\n    static activeDb: DataBase;\n    static activeDbVersion = 0;\n    static dbStatus: IDbStatus = {\n        conStatus: CONNECTION_STATUS.NotStarted\n    };\n\n    static callDbDroppedByBrowser(deleteMetaData?: boolean) {\n        if (IdbHelper.dbStatus.conStatus === CONNECTION_STATUS.Connected) {\n            IdbHelper.isDbDeletedByBrowser = true;\n            if (deleteMetaData === true) {\n                const dropDbObject = new DropDb(function () {\n\n                }, function () {\n\n                });\n                dropDbObject.deleteMetaData();\n            }\n        }\n    }\n\n    static createTransaction(tableNames: string[], callBack: () => void, mode?) {\n        if (IdbHelper.transaction === null) {\n            mode = mode ? mode : IDB_MODE.ReadWrite;\n            IdbHelper.transaction = IdbHelper.dbConnection.transaction(tableNames, mode);\n            const onComplete = () => {\n                IdbHelper.transaction = null;\n                callBack();\n            };\n            IdbHelper.transaction.oncomplete = onComplete;\n            IdbHelper.transaction.onabort = onComplete;\n        }\n    }\n\n    static setDbList(list: string[]) {\n        return KeyStore.set('DataBase_List', list);\n    }\n\n    static updateDbStatus(status: CONNECTION_STATUS, err?: ERROR_TYPE) {\n        if (err === undefined) {\n            IdbHelper.dbStatus.conStatus = status;\n        }\n        else {\n            IdbHelper.dbStatus = {\n                conStatus: status,\n                lastError: err\n            };\n        }\n    }\n\n    static getDbList() {\n        return promise<string[]>((res, rej) => {\n            KeyStore.get<string[]>('DataBase_List').then(result => {\n                res(result == null ? [] : result);\n            }).catch(rej);\n        });\n    }\n\n    static getDbVersion(dbName: string) {\n        return promise<number>((res, rej) => {\n            KeyStore.get(`JsStore_${dbName}_Db_Version`).then(dbVersion => {\n                res(Number(dbVersion));\n            }).catch(rej);\n        });\n    }\n\n    static getDbSchema(dbName: string) {\n        return KeyStore.get<DataBase>(`JsStore_${dbName}_Schema`);\n    }\n\n    static getTable(tableName: string) {\n        const currentTable = IdbHelper.activeDb.tables.find(table => table.name === tableName);\n        return currentTable;\n    }\n}","import { IdbHelper } from \"./idb_helper\";\nimport { QUERY_OPTION } from \"../../common/index\";\nimport { DataBase } from \"../model/index\";\n\nexport class BaseHelper {\n\n\n    regexExpression: RegExp;\n    //   method helpers\n\n    protected get activeDb(): DataBase {\n        return IdbHelper.activeDb;\n    }\n\n    protected get dbConnection() {\n        return IdbHelper.dbConnection;\n    }\n\n    protected get transaction() {\n        return IdbHelper.transaction;\n    }\n\n    protected createTransaction(tableNames: string[], callBack: () => void, mode?) {\n        IdbHelper.createTransaction(tableNames, callBack, mode);\n    }\n\n    protected regexTest(value) {\n        return this.regexExpression.test(value);\n    }\n\n    protected isTableExist(tableName: string): boolean {\n        const index = this.activeDb.tables.findIndex(table => table.name === tableName);\n        return index >= 0;\n    }\n\n    protected getTable(tableName: string) {\n        return IdbHelper.getTable(tableName);\n    }\n\n    protected getKeyRange(value, op?) {\n        let keyRange: IDBKeyRange;\n        switch (op) {\n            case QUERY_OPTION.Between: keyRange = IDBKeyRange.bound(value.low, value.high, false, false); break;\n            case QUERY_OPTION.GreaterThan: keyRange = IDBKeyRange.lowerBound(value, true); break;\n            case QUERY_OPTION.GreaterThanEqualTo: keyRange = IDBKeyRange.lowerBound(value); break;\n            case QUERY_OPTION.LessThan: keyRange = IDBKeyRange.upperBound(value, true); break;\n            case QUERY_OPTION.LessThanEqualTo: keyRange = IDBKeyRange.upperBound(value); break;\n            default: keyRange = IDBKeyRange.only(value); break;\n        }\n        return keyRange;\n    }\n\n    protected getPrimaryKey(tableName): string {\n        const primaryKey: string = this.getTable(tableName).primaryKey;\n        return primaryKey ? primaryKey : this.getKeyPath(tableName);\n    }\n\n    protected getKeyPath(tableName) {\n        const transaction: IDBTransaction = this.dbConnection.transaction([tableName], \"readonly\"),\n            objectStore = transaction.objectStore(tableName);\n        return objectStore.keyPath as string;\n    }\n}","import { OCCURENCE } from \"../../common/index\";\n\nexport const getRegexFromLikeExpression = (likeExpression: string) => {\n    const filterValues = likeExpression.split('%');\n    let filterValue: string;\n    let occurence: OCCURENCE;\n    if (filterValues[1]) {\n        filterValue = filterValues[1];\n        occurence = filterValues.length > 2 ? OCCURENCE.Any : OCCURENCE.Last;\n    }\n    else {\n        filterValue = filterValues[0];\n        occurence = OCCURENCE.First;\n    }\n    switch (occurence) {\n        case OCCURENCE.First:\n            return new RegExp(`^${filterValue}`, 'i');\n        case OCCURENCE.Last:\n            return new RegExp(`${filterValue}$`, 'i');\n        default:\n            return new RegExp(`${filterValue}`, 'i');\n    }\n}","import { OCCURENCE, QUERY_OPTION } from \"../../common/index\";\nimport { getRegexFromLikeExpression } from \"../utils/index\";\n\n/**\n * For matching the different column value existance for where option\n * \n * @export\n * @class WhereChecker\n */\nexport class WhereChecker {\n  where: object;\n  status: boolean;\n  checkFlag: boolean;\n\n  constructor(where: object, checkFlag: boolean) {\n    this.where = where;\n    this.checkFlag = checkFlag;\n  }\n\n  check(rowValue) {\n    this.status = true;\n    if (this.checkFlag === true) {\n      for (const columnName in this.where) {\n        if (!this.status) {\n          break;\n        }\n        const columnValue = this.where[columnName];\n        if (typeof columnValue === 'object') {\n          for (const key in columnValue) {\n            if (!this.status) {\n              break;\n            }\n            switch (key) {\n              case QUERY_OPTION.In:\n                this.status = this.checkIn(columnName, rowValue[columnName]); break;\n              case QUERY_OPTION.Like:\n                this.status = this.checkLike_(columnName, rowValue[columnName]); break;\n              case QUERY_OPTION.Regex:\n                this.checkRegex(columnName, rowValue[columnName]); break;\n              case QUERY_OPTION.Between:\n              case QUERY_OPTION.GreaterThan:\n              case QUERY_OPTION.LessThan:\n              case QUERY_OPTION.GreaterThanEqualTo:\n              case QUERY_OPTION.LessThanEqualTo:\n              case QUERY_OPTION.NotEqualTo:\n                this.status = this.checkComparisionOp_(columnName, rowValue[columnName], key);\n                break;\n            }\n          }\n        }\n        else {\n          this.status = columnValue === rowValue[columnName];\n        }\n      }\n    }\n    return this.status;\n  }\n\n  private checkIn(column, value) {\n    return (this.where[column][QUERY_OPTION.In] as any[]).find(val => val === value) != null;\n  }\n\n  private checkLike_(column, value) {\n    return getRegexFromLikeExpression(this.where[column][QUERY_OPTION.Like]).test(value);\n  }\n\n  private checkRegex(column, value) {\n    const expr = this.where[column][QUERY_OPTION.Regex];\n    this.status = expr.test(value);\n  }\n\n  private checkComparisionOp_(column, value, symbol) {\n    const compareValue = this.where[column][symbol];\n    switch (symbol) {\n      // greater than\n      case QUERY_OPTION.GreaterThan:\n        return value > compareValue;\n      // less than\n      case QUERY_OPTION.LessThan:\n        return value < compareValue;\n      // less than equal\n      case QUERY_OPTION.LessThanEqualTo:\n        return value <= compareValue;\n      // greather than equal\n      case QUERY_OPTION.GreaterThanEqualTo:\n        return value >= compareValue;\n      // between\n      case QUERY_OPTION.Between:\n        return value > compareValue.low && value < compareValue.high;\n      // Not equal to\n      case QUERY_OPTION.NotEqualTo:\n        return value !== compareValue;\n    }\n  }\n}","import { BaseHelper } from \"./base_helper\";\nimport { IError, ERROR_TYPE, OCCURENCE, DATA_TYPE, QUERY_OPTION } from \"../../common/index\";\nimport { WhereChecker } from \"./where_checker\";\nimport { LogHelper } from \"../log_helper\";\nimport { Column } from \"../model/index\";\nimport { getDataType, getObjectFirstKey, getRegexFromLikeExpression } from \"../utils/index\";\n\nexport abstract class Base extends BaseHelper {\n    error: IError;\n    rowAffected = 0;\n    onSuccess: (result?) => void;\n    onError: (err: IError) => void;\n    objectStore: IDBObjectStore;\n    query;\n    whereCheckerInstance: WhereChecker;\n    tableName: string;\n    isTransaction: boolean;\n\n    skipRecord;\n    limitRecord;\n\n    protected onErrorOccured(e, customError = false) {\n        if (customError) {\n            e.logError();\n            this.error = (e as LogHelper).get();\n        }\n        else {\n            let error;\n            if (e.name) {\n                error = new LogHelper((e.name));\n                error.message = e.message;\n            }\n            else {\n                error = new LogHelper((e as any).target.error.name);\n                error.message = (e as any).target.error.message;\n            }\n            if (process.env.NODE_ENV === 'dev') {\n                error.logError();\n            }\n            this.error = error.get();\n        }\n    }\n\n    protected onExceptionOccured(ex: DOMException) {\n        console.error(ex);\n        this.onError({\n            message: ex.message,\n            type: ERROR_TYPE.InvalidQuery\n        });\n    }\n\n    protected getColumnInfo(columnName: string, tableName: string) {\n        return this.getTable(tableName).columns.find(column => column.name === columnName);\n    }\n\n    protected goToWhereLogic() {\n        const columnName = getObjectFirstKey(this.query.where);\n        if (this.objectStore.indexNames.contains(columnName)) {\n            const value = this.query.where[columnName];\n            if (typeof value === 'object') {\n                const checkFlag = Boolean(\n                    Object.keys(value).length > 1 ||\n                    Object.keys(this.query.where).length > 1\n                );\n                this.whereCheckerInstance = new WhereChecker(this.query.where, checkFlag);\n                const key = getObjectFirstKey(value);\n                switch (key) {\n                    case QUERY_OPTION.Like: {\n                        const regexVal = getRegexFromLikeExpression(value[QUERY_OPTION.Like]);\n                        (this as any).executeRegexLogic(columnName, regexVal);\n                    } break;\n                    case QUERY_OPTION.Regex:\n                        (this as any).executeRegexLogic(columnName, value[QUERY_OPTION.Regex]);\n                        break;\n                    case QUERY_OPTION.In:\n                        (this as any).executeInLogic(columnName, value[QUERY_OPTION.In]);\n                        break;\n                    case QUERY_OPTION.Between:\n                    case QUERY_OPTION.GreaterThan:\n                    case QUERY_OPTION.LessThan:\n                    case QUERY_OPTION.GreaterThanEqualTo:\n                    case QUERY_OPTION.LessThanEqualTo:\n                        (this as any).executeWhereLogic(columnName, value, key, \"next\");\n                        break;\n                    case QUERY_OPTION.Aggregate: break;\n                    default: (this as any).executeWhereLogic(columnName, value, null, \"next\");\n                }\n            }\n            else {\n                const checkFlag = Boolean(Object.keys(this.query.where).length > 1);\n                this.whereCheckerInstance = new WhereChecker(this.query.where, checkFlag);\n                (this as any).executeWhereLogic(columnName, value, null, \"next\");\n            }\n        }\n        else {\n            const column: Column = this.getColumnInfo(columnName, this.tableName);\n            const error = column == null ?\n                new LogHelper(ERROR_TYPE.ColumnNotExist, { column: columnName }) :\n                new LogHelper(ERROR_TYPE.EnableSearchOff, { column: columnName });\n\n            this.onErrorOccured(error, true);\n        }\n    }\n}","export const isNull = (value) => {\n    if (value == null) {\n        return true;\n    } else {\n        switch (typeof value) {\n            case 'string': return value.length === 0;\n            case 'number': return isNaN(value);\n        }\n    }\n    return false;\n};","import { Table } from \"../../model/table\";\nimport { Column } from \"../../model/column\";\nimport { LogHelper } from \"../../log_helper\";\nimport { isNull, getDataType } from \"../../utils/index\";\nimport { DATA_TYPE, ERROR_TYPE } from \"../../../common/index\";\n\nexport class SchemaChecker {\n    table: Table;\n    constructor(table: Table) {\n        this.table = table;\n    }\n\n    check(setValue: object, tblName: string) {\n        let log: LogHelper = null;\n        if (typeof setValue === DATA_TYPE.Object) {\n            if (this.table) {\n                // loop through table column and find data is valid\n                this.table.columns.every((column: Column) => {\n                    if (log === null) {\n                        if (column.name in setValue) {\n                            log = this.checkByColumn_(column, setValue[column.name]);\n                        }\n                        return true;\n                    }\n                    else {\n                        return false;\n                    }\n                });\n            }\n            else {\n                log = new LogHelper(ERROR_TYPE.TableNotExist, { tableName: tblName });\n            }\n        }\n        else {\n            log = new LogHelper(ERROR_TYPE.NotObject);\n        }\n        if (log != null) {\n            return log.get();\n        }\n        return null;\n    }\n\n\n\n    private checkByColumn_(column: Column, value) {\n        let log: LogHelper = null;\n        // check not null schema\n        if (column.notNull === true && isNull(value)) {\n            log = new LogHelper(ERROR_TYPE.NullValue, { ColumnName: column.name });\n        }\n\n        // check datatype\n        const type = getDataType(value);\n        const checkFurther = value != null;\n        if (column.dataType && checkFurther) {\n            if (type !== column.dataType && type !== 'object') {\n                log = new LogHelper(ERROR_TYPE.WrongDataType, { column: column.name });\n            }\n        }\n\n        // check allowed operators\n        if (checkFurther && type === 'object') {\n            const allowedOp = ['+', '-', '*', '/', '{push}'];\n            for (const prop in value) {\n                if (allowedOp.indexOf(prop) < 0 && column.dataType && type !== column.dataType) {\n                    log = new LogHelper(ERROR_TYPE.WrongDataType, { column: column.name });\n                }\n                break;\n            }\n        }\n        return log;\n    }\n}","import { Table, Column } from \"../../model/index\";\nimport { ERROR_TYPE, DATA_TYPE } from \"../../../common/index\";\nimport { LogHelper } from \"../../log_helper\";\nimport { isNull, getDataType } from \"../../utils/index\";\n\nexport class ValueChecker {\n    table: Table;\n    value: object;\n    errorOccured = false;\n    log: LogHelper;\n    autoIncrementValue = {};\n\n    constructor(table: Table, autoIncrementValue) {\n        this.table = table;\n        this.autoIncrementValue = autoIncrementValue;\n    }\n\n    checkAndModifyValue(value) {\n        this.value = value;\n        this.table.columns.every((column) => {\n            this.checkAndModifyColumnValue_(column);\n            return !this.errorOccured;\n        });\n        return this.errorOccured;\n    }\n\n    private checkNotNullAndDataType_(column: Column) {\n        // check not null schema\n        if (column.notNull && isNull(this.value[column.name])) {\n            this.onValidationError_(ERROR_TYPE.NullValue, { ColumnName: column.name });\n        }\n        // check datatype\n        else if (column.dataType && !isNull(this.value[column.name]) &&\n            getDataType(this.value[column.name]) !== column.dataType) {\n            this.onValidationError_(ERROR_TYPE.WrongDataType, { column: column.name });\n        }\n    }\n\n    private checkAndModifyColumnValue_(column: Column) {\n        const columnValue = this.value[column.name];\n        // check auto increment scheme\n        if (column.autoIncrement) {\n            // if value is null, then create the autoincrement value\n            if (isNull(columnValue)) {\n                this.value[column.name] = ++this.autoIncrementValue[column.name];\n            }\n            else {\n                if (getDataType(columnValue) === DATA_TYPE.Number) {\n                    // if column value is greater than autoincrement value saved, then make the\n                    // column value as autoIncrement value\n                    if (columnValue > this.autoIncrementValue[column.name]) {\n                        this.autoIncrementValue[column.name] = columnValue;\n                    }\n                }\n            }\n        }\n        // check Default Schema\n        else if (column.default !== undefined && isNull(columnValue)) {\n            this.value[column.name] = column.default;\n        }\n        this.checkNotNullAndDataType_(column);\n    }\n\n    private onValidationError_(error: ERROR_TYPE, details: object) {\n        this.errorOccured = true;\n        this.log = new LogHelper(error, details);\n    }\n}","import { Table } from \"../../model/index\";\nimport { ValueChecker } from \"./value_checker\";\nimport { promise, getAutoIncrementValues, setAutoIncrementValue } from \"../../helpers/index\";\nimport { QueryExecutor } from \"../../query_executor\";\nimport { QueryHelper } from \"../query_helper\";\n\nexport class ValuesChecker {\n    table: Table;\n    values: object[];\n    valueCheckerObj: ValueChecker;\n\n    constructor(table: Table, values: object[]) {\n        this.table = table;\n        this.values = values;\n    }\n\n    checkAndModifyValues() {\n        return promise((resolve, reject) => {\n            const onAutoIncValueEvaluated = (autoIncrementValues) => {\n                this.valueCheckerObj = new ValueChecker(this.table, autoIncrementValues);\n                this.startChecking().then(resolve).catch(reject);\n            };\n            if (QueryExecutor.isTransactionQuery === false) {\n                getAutoIncrementValues(this.table).then(autoIncValues => {\n                    onAutoIncValueEvaluated(autoIncValues);\n                }).catch(reject);\n            }\n            else {\n                onAutoIncValueEvaluated(QueryHelper.autoIncrementValues[this.table.name]);\n            }\n        });\n    }\n    \n    private startChecking() {\n        return promise((resolve, reject) => {\n            let isError = false;\n            this.values.every((item) => {\n                isError = this.valueCheckerObj.checkAndModifyValue(item);\n                return !isError;\n            });\n            if (isError) {\n                const error = this.valueCheckerObj.log.get();\n                reject(error);\n            }\n            const promiseObj = setAutoIncrementValue(this.table, this.valueCheckerObj.autoIncrementValue);\n            if (QueryExecutor.isTransactionQuery === false) {\n                promiseObj.then(resolve).catch(reject);\n            }\n            else {\n                resolve();\n            }\n        });\n    }\n}","import { API, ERROR_TYPE, QUERY_OPTION, DATA_TYPE, InsertQuery, IError } from \"../../common/index\";\nimport { IdbHelper } from \"./idb_helper\";\nimport { LogHelper } from \"../log_helper\";\nimport * as Update from \"./update/index\";\nimport * as Insert from \"./insert/index\";\nimport { Table } from \"../model/index\";\nimport { promise } from \"../helpers/index\";\nimport { getDataType } from \"../utils/index\";\n\nexport class QueryHelper {\n    api: API;\n    query;\n    error: IError;\n    isTransaction = false;\n    static autoIncrementValues: { [table: string]: { [columnName: string]: number } } = {};\n\n    constructor(api: API, query: any) {\n        this.api = api;\n        this.query = query;\n    }\n    checkAndModify() {\n        return promise((resolve, reject) => {\n            const resolveReject = () => {\n                if (this.error == null) {\n                    resolve();\n                }\n                else {\n                    reject(this.error);\n                }\n            };\n            switch (this.api) {\n                case API.Select:\n                case API.Remove:\n                case API.Count:\n                    this.checkFetchQuery_();\n                    resolveReject();\n                    break;\n                case API.Insert:\n                    this.checkInsertQuery_().then(resolveReject).\n                        catch((err) => {\n                            this.error = err;\n                            resolveReject();\n                        });\n                    break;\n                case API.Update:\n                    this.checkUpdateQuery_();\n                    resolveReject();\n                    break;\n            }\n        });\n    }\n\n    private isInsertQryValid_(callBack: (tbl: Table) => void) {\n        const table = this.getTable_((this.query as InsertQuery).into);\n        let log: LogHelper;\n        if (table) {\n            switch (getDataType(this.query.values)) {\n                case DATA_TYPE.Array:\n                    break;\n                case DATA_TYPE.Null:\n                    log = new LogHelper(ERROR_TYPE.NoValueSupplied);\n                    break;\n                default:\n                    log = new LogHelper(ERROR_TYPE.NotArray);\n            }\n        }\n        else {\n            log = new LogHelper(ERROR_TYPE.TableNotExist, { tableName: (this.query as InsertQuery).into });\n        }\n        callBack(table);\n        return log == null ? null : log.get();\n    }\n\n    private checkInsertQuery_() {\n        return promise((resolve, reject) => {\n            let table;\n            const err = this.isInsertQryValid_((tbl) => {\n                table = tbl;\n            });\n            if (err == null) {\n                if (this.query.skipDataCheck === true) {\n                    resolve();\n                }\n                else {\n                    const valueCheckerInstance = new Insert.ValuesChecker(table, this.query.values);\n                    valueCheckerInstance.checkAndModifyValues().then(() => {\n                        (this.query as InsertQuery).values = valueCheckerInstance.values;\n                        resolve();\n                    }).catch(reject);\n                }\n            }\n            else {\n                reject(err);\n            }\n        });\n    }\n\n    private checkUpdateQuery_() {\n        this.error = new Update.SchemaChecker(this.getTable_(this.query.in)).\n            check(this.query.set, this.query.in);\n        if (this.error == null) {\n            if (this.query.where != null) {\n                this.checkForNullInWhere_();\n                if (this.error == null) {\n                    this.addGreatAndLessToNotOp_();\n                }\n            }\n        }\n    }\n\n    private checkForNullInWhere_() {\n        for (const key in this.query.where) {\n            if (this.query.where[key] == null) {\n                this.error = new LogHelper(ERROR_TYPE.NullValueInWhere, { column: key }).get();\n                return;\n            }\n        }\n    }\n\n    private checkFetchQuery_() {\n        if (this.isTableExist_(this.query.from) === true) {\n            if (this.query.where != null) {\n                this.checkForNullInWhere_();\n                if (this.error == null) {\n                    this.addGreatAndLessToNotOp_();\n                }\n            }\n\n        }\n        else {\n            this.error = new LogHelper(ERROR_TYPE.TableNotExist, { tableName: this.query.from }).get();\n        }\n    }\n\n    private isTableExist_(tableName: string): boolean {\n        const index = this.activeDb_.tables.findIndex(table => table.name === tableName);\n        return index >= 0;\n    }\n\n    private get activeDb_() {\n        return IdbHelper.activeDb;\n    }\n\n    private getTable_(tableName: string) {\n        return IdbHelper.getTable(tableName);\n    }\n\n    private addGreatAndLessToNotOp_() {\n        const whereQuery = this.query.where;\n        const containsNot = (qry: object, keys: string[]) => {\n            return keys.findIndex(key => qry[key][QUERY_OPTION.NotEqualTo] != null) >= 0;\n        };\n        const addToSingleQry = (qry, keys: string[]) => {\n            let value;\n            keys.forEach((prop) => {\n                value = qry[prop];\n                if (value[QUERY_OPTION.NotEqualTo] != null) {\n                    qry[prop][QUERY_OPTION.GreaterThan] = value[QUERY_OPTION.NotEqualTo];\n                    if (qry[QUERY_OPTION.Or] === undefined) {\n                        qry[QUERY_OPTION.Or] = {};\n                        qry[QUERY_OPTION.Or][prop] = {};\n                    }\n                    else if (qry[QUERY_OPTION.Or][prop] === undefined) {\n                        qry[QUERY_OPTION.Or][prop] = {};\n                    }\n                    qry[QUERY_OPTION.Or][prop][QUERY_OPTION.LessThan] = value[QUERY_OPTION.NotEqualTo];\n                    delete qry[prop][QUERY_OPTION.NotEqualTo];\n                }\n            });\n            return qry;\n        };\n        switch (getDataType(whereQuery)) {\n            case DATA_TYPE.Object:\n                const queryKeys = Object.keys(whereQuery);\n                if (containsNot(whereQuery, queryKeys)) {\n                    if (queryKeys.length === 1) {\n                        this.query.where = addToSingleQry(whereQuery, queryKeys);\n                    }\n                    else {\n                        const whereTmpQry = [];\n                        queryKeys.forEach((prop) => {\n                            whereTmpQry.push(addToSingleQry({ [prop]: whereQuery[prop] }, [prop]));\n                        });\n                        this.query.where = whereTmpQry;\n                    }\n                }\n                break;\n            default:\n                const whereTmp = [];\n                (whereQuery as object[]).forEach(qry => {\n                    const qryKeys = Object.keys(qry);\n                    if (containsNot(qry, qryKeys)) {\n                        qry = addToSingleQry(qry, qryKeys);\n                    }\n                    whereTmp.push(qry);\n                });\n                this.query.where = whereTmp;\n        }\n    }\n\n\n\n}","export enum CONNECTION_STATUS {\n    Connected = \"connected\",\n    Closed = \"closed\",\n    NotStarted = \"not_connected\"\n}","import { IError } from \"../interfaces\";\n\nexport class Base {\n    results = null;\n    onSuccess: (results) => void;\n    onError: (err: IError) => void;\n    errorOccured = false;\n    errorCount = 0;\n    transaction: IDBTransaction;\n    objectStore: IDBObjectStore;\n\n    protected onErrorOccured(e) {\n        ++this.errorCount;\n        if (this.errorCount === 1) {\n            if (this.onError != null) {\n                this.onError((e as any).target.error);\n            }\n        }\n        console.error(e);\n    }\n}","import { CONNECTION_STATUS } from '../enums';\nimport { IDbStatus } from '../interfaces';\n\nexport class IdbHelper {\n    static dbConnection: IDBDatabase;\n    static isDbDeletedByBrowser: boolean;\n    static transaction: IDBTransaction = null;\n\n    static dbStatus: IDbStatus = {\n        conStatus: CONNECTION_STATUS.NotStarted,\n    };\n\n    static callDbDroppedByBrowser() {\n        IdbHelper.isDbDeletedByBrowser = IdbHelper.dbStatus.conStatus === CONNECTION_STATUS.Connected ? true : false;\n    }\n\n    static createTransaction(tableNames, callBack: () => void, mode?) {\n        if (IdbHelper.transaction === null) {\n            mode = mode ? mode : \"readwrite\";\n            IdbHelper.transaction = IdbHelper.dbConnection.transaction(tableNames, mode);\n            IdbHelper.transaction.oncomplete = () => {\n                IdbHelper.transaction = null;\n                callBack();\n            };\n            (IdbHelper.transaction as any).ontimeout = function () {\n                this._transaction = null;\n                console.error('transaction timed out');\n            };\n        }\n    }\n}","import { Base } from \"./base_logic\";\nimport { IError } from \"../interfaces\";\nimport { QueryExecutor } from \"../query_executor\";\nimport { IdbHelper } from \"./idb_helper\";\n\nexport class Remove extends Base {\n    key: string;\n    rowAffected = 0;\n    constructor(key: string, onSuccess: (recordRemoved: number) => void, onError: (err: IError) => void) {\n        super();\n        this.key = key;\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute() {\n        this.initTransaction();\n        const removeData = (column, value) => {\n            const cursorRequest = this.objectStore.index(column).openCursor(IDBKeyRange.only(value));\n            cursorRequest.onerror = (e) => {\n                this.errorOccured = true;\n                this.onErrorOccured(e);\n            };\n            cursorRequest.onsuccess = (e: any) => {\n                const cursor: IDBCursorWithValue = e.target.result;\n                if (cursor) {\n                    cursor.delete();\n                    ++this.rowAffected;\n                    cursor.continue();\n                }\n            };\n        };\n\n        if (!this.errorOccured) {\n            removeData(QueryExecutor.columnName, this.key);\n        }\n    }\n\n    private initTransaction() {\n        IdbHelper.createTransaction([QueryExecutor.tableName], this.onTransactionCompleted.bind(this));\n        this.objectStore = IdbHelper.transaction.objectStore(QueryExecutor.tableName);\n    }\n\n    private onTransactionCompleted() {\n        if (this.errorOccured === false) {\n            this.onSuccess(this.rowAffected);\n        }\n    }\n}","import { Base } from \"./base_logic\";\nimport { IInsert, IError } from \"../interfaces\";\nimport { IdbHelper } from \"./idb_helper\";\nimport { QueryExecutor } from \"../query_executor\";\n\nexport class Set extends Base {\n    query: IInsert;\n    constructor(query: IInsert, onSuccess: (result) => void, onError: (err: IError) => void) {\n        super();\n        try {\n            this.query = query;\n            this.onSuccess = onSuccess;\n            this.onError = onError;\n        }\n        catch (ex) {\n            console.error(ex);\n        }\n    }\n\n    execute() {\n        const updateIfExistElseInsert = () => {\n            const cursorRequest = this.objectStore.index(QueryExecutor.columnName).openCursor(\n                IDBKeyRange.only(this.query[QueryExecutor.columnName])\n            );\n            cursorRequest.onsuccess = (e) => {\n                const cursor: IDBCursorWithValue = (e as any).target.result;\n                if (cursor) {\n                    cursor.update(this.query);\n                }\n                else {\n                    insertData();\n                }\n            };\n\n            cursorRequest.onerror = (e) => {\n                this.errorOccured = true;\n                this.onErrorOccured(e);\n            };\n\n        };\n        const insertData = () => {\n            const addResult = this.objectStore.add(this.query);\n            addResult.onerror = (e) => {\n                this.errorOccured = true;\n                this.onErrorOccured(e);\n            };\n        };\n        this.initTransaction();\n        updateIfExistElseInsert();\n    }\n\n    private initTransaction() {\n        IdbHelper.createTransaction([QueryExecutor.tableName], this.onTransactionCompleted_);\n        this.objectStore = IdbHelper. transaction.objectStore(QueryExecutor.tableName);\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.errorOccured === false && this.onSuccess) {\n            this.onSuccess(null);\n        }\n    }\n}","import { CONNECTION_STATUS } from './enums';\nimport { IdbHelper } from './business/idb_helper';\n\nexport class Utils {\n\n    static updateDbStatus(status: CONNECTION_STATUS, err?) {\n        if (err === undefined) {\n            IdbHelper.dbStatus.conStatus = status;\n        }\n        else {\n            IdbHelper.dbStatus = {\n                conStatus: status,\n                lastError: err\n            };\n        }\n    }\n}\n","import { IError } from \"../interfaces\";\nimport { CONNECTION_STATUS } from \"../enums\";\nimport { Utils } from \"../utils_logic\";\nimport { IdbHelper } from \"./idb_helper\";\nimport { QueryExecutor } from \"../query_executor\";\nimport { ERROR_TYPE } from \"../../../common/index\";\n\nexport let tempDatas;\nexport class InitDb {\n    constructor(dbName: string, onSuccess: () => void, onError: (err: IError) => void) {\n        const dbRequest = self.indexedDB.open(dbName, 1);\n        IdbHelper.isDbDeletedByBrowser = false;\n        dbRequest.onerror = (event) => {\n            if ((event as any).target.error.name === 'InvalidStateError') {\n                onError({\n                    message: \"Indexeddb is blocked\",\n                    type: ERROR_TYPE.IndexedDbNotSupported\n                } as IError);\n            }\n            else {\n                onError((event as any).target.error);\n            }\n        };\n\n        dbRequest.onsuccess = (event) => {\n            IdbHelper.dbStatus.conStatus = CONNECTION_STATUS.Connected;\n            IdbHelper.dbConnection = dbRequest.result;\n            IdbHelper.dbConnection.onclose = () => {\n                IdbHelper.callDbDroppedByBrowser();\n                Utils.updateDbStatus(CONNECTION_STATUS.Closed, ERROR_TYPE.ConnectionClosed);\n            };\n\n            IdbHelper.dbConnection.onversionchange = (e: any) => {\n                if (e.newVersion === null) { // An attempt is made to delete the db\n                    e.target.close(); // Manually close our connection to the db\n                    IdbHelper.callDbDroppedByBrowser();\n                    Utils.updateDbStatus(CONNECTION_STATUS.Closed, ERROR_TYPE.ConnectionClosed);\n                }\n            };\n\n            IdbHelper.dbConnection.onerror = (e: any) => {\n                IdbHelper.dbStatus.lastError = \"Error occured in connection :\" + e.target.result;\n            };\n\n            IdbHelper.dbConnection.onabort = (e) => {\n                IdbHelper.dbStatus = {\n                    conStatus: CONNECTION_STATUS.Closed,\n                    lastError: \"Connection aborted\"\n                };\n            };\n\n            if (onSuccess != null) {\n                onSuccess();\n            }\n        };\n\n        dbRequest.onupgradeneeded = (event: any) => {\n            const db = event.target.result,\n                column = \"Key\";\n            db.createObjectStore(QueryExecutor.tableName, {\n                keyPath: column\n            }).createIndex(column, column, { unique: true });\n        };\n    }\n}","import { Base } from \"./base_logic\";\nimport { IError } from \"../interfaces\";\nimport { QueryExecutor } from \"../query_executor\";\nimport { IdbHelper } from \"./idb_helper\";\n\nexport class Get extends Base {\n    key: string;\n    constructor(key: string, onSuccess: (result) => void, onError: (err: IError) => void) {\n        super();\n        this.key = key;\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute() {\n        const getData = (column, value) => {\n            const cursorRequest = this.objectStore.index(column).openCursor(IDBKeyRange.only(value));\n            cursorRequest.onerror = (e) => {\n                this.errorOccured = true;\n                this.onErrorOccured(e);\n            };\n            cursorRequest.onsuccess = (e: any) => {\n                const cursor: IDBCursorWithValue = e.target.result;\n                if (cursor) {\n                    this.results = cursor.value['Value'];\n                }\n            };\n        };\n        this.initTransaction_();\n        getData(QueryExecutor.columnName, this.key);\n\n    }\n\n    private initTransaction_() {\n        IdbHelper.createTransaction([QueryExecutor.tableName], this.onTransactionCompleted_, 'readonly');\n        this.objectStore = IdbHelper. transaction.objectStore(QueryExecutor.tableName);\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.errorOccured === false) {\n            this.onSuccess(this.results);\n        }\n    }\n}\n","import { QueryExecutor } from '../query_executor';\nimport { CONNECTION_STATUS } from \"../enums\";\nimport { IInsert, IError, IQueryRequest, IQueryResult } from \"../interfaces\";\nimport { Remove } from \"./remove_logic\";\nimport { Set } from \"./set_logic\";\nimport { InitDb } from \"./init_db_logic\";\nimport { Get } from \"./get_logic\";\nimport { IdbHelper } from './idb_helper';\n\nexport class Main {\n    onQueryFinished: (result) => void;\n    constructor(onQueryFinished = null) {\n        this.onQueryFinished = onQueryFinished;\n    }\n\n    checkConnectionAndExecuteLogic(request: IQueryRequest) {\n        if (request.name === 'init_db') {\n            this.executeLogic(request);\n        }\n        else {\n            switch (IdbHelper.dbStatus.conStatus) {\n                case CONNECTION_STATUS.Connected: this.executeLogic(request); break;\n                case CONNECTION_STATUS.NotStarted:\n                    setTimeout(() => {\n                        this.checkConnectionAndExecuteLogic(request);\n                    }, 100); break;\n                case CONNECTION_STATUS.Closed:\n                    if (IdbHelper.isDbDeletedByBrowser) {\n                        this.createDb(() => {\n                            IdbHelper.isDbDeletedByBrowser = false;\n                            this.checkConnectionAndExecuteLogic(request);\n                        }, (err) => {\n                            console.error(err);\n                        });\n                    }\n            }\n        }\n    }\n\n    private returnResult(result) {\n        this.onQueryFinished(result);\n    }\n\n    private executeLogic(request: IQueryRequest) {\n        const onSuccess = (results?) => {\n            this.returnResult({\n                returnedValue: results\n            } as IQueryResult);\n        };\n        const onError = (err) => {\n            this.returnResult({\n                errorDetails: err,\n                errorOccured: true\n            } as IQueryResult);\n        };\n\n        switch (request.name) {\n            case 'get':\n                this.get(request.query, onSuccess, onError);\n                break;\n            case 'set': this.set(request.query, onSuccess, onError);\n                break;\n            case 'remove': this.remove(request.query, onSuccess, onError);\n                break;\n            case 'init_db': this.createDb(onSuccess, onError); break;\n            case 'close_db': this.closeDb(onSuccess, onError); break;\n        }\n    }\n\n    set(query: IInsert, onSuccess: (result) => void, onError: (err: IError) => void) {\n        const insertInstance = new Set(query, onSuccess, onError);\n        insertInstance.execute();\n    }\n\n    remove(key: string, onSuccess: (result) => void, onError: (err: IError) => void) {\n        const deleteInstance = new Remove(key, onSuccess, onError);\n        deleteInstance.execute();\n    }\n\n    get(key: string, onSuccess: (result) => void, onError: (err: IError) => void) {\n        const getInstance = new Get(key, onSuccess, onError);\n        getInstance.execute();\n    }\n\n    createDb(onSuccess: () => void, onError: (err: IError) => void) {\n        const dbName = \"KeyStore\";\n        const initDbInstance = new InitDb(dbName, onSuccess, onError);\n    }\n\n    closeDb(onSuccess: () => void, onError: (err: IError) => void) {\n        if (IdbHelper.dbStatus.conStatus === CONNECTION_STATUS.Connected) {\n            IdbHelper.dbStatus.conStatus = CONNECTION_STATUS.Closed;\n            IdbHelper.dbConnection.close();\n        }\n        onSuccess();\n    }\n}","import { IQueryResult, IQueryRequest } from \"./interfaces\";\nimport { Main } from \"./business/main_logic\";\nimport { promise } from \"../helpers/index\";\n\nexport class QueryExecutor {\n    static requestQueue: IQueryRequest[] = [];\n    static tableName = \"LocalStore\";\n    static columnName = \"Key\";\n    static isCodeExecuting = false;\n    static prcoessQuery<T>(request: IQueryRequest) {\n        return promise<T>((resolve, reject) => {\n            request.onSuccess = (result) => {\n                resolve(result);\n            };\n            request.onError = (error) => {\n                if (process.env.NODE_ENV === 'dev') {\n                    console.error(error);\n                }\n                reject(error);\n            };\n            this.requestQueue.push(request);\n            this.executeCode();\n        });\n    }\n\n    static executeCode() {\n        if (!this.isCodeExecuting && this.requestQueue.length > 0) {\n            this.isCodeExecuting = true;\n            const request: IQueryRequest = {\n                name: this.requestQueue[0].name,\n                query: this.requestQueue[0].query\n            } as IQueryRequest;\n            new Main(this.onQueryFinished.bind(this)).checkConnectionAndExecuteLogic(request);\n        }\n    }\n\n    static onQueryFinished(message: IQueryResult) {\n        const finishedRequest: IQueryRequest = this.requestQueue.shift();\n        this.isCodeExecuting = false;\n        if (message.errorOccured) {\n            finishedRequest.onError(message.errorDetails);\n        }\n        else {\n            finishedRequest.onSuccess(message.returnedValue);\n        }\n        this.executeCode();\n    }\n}\n","import { QueryExecutor } from './query_executor';\nimport { IQueryRequest, IError, IInsert } from \"./interfaces\";\n\nexport class KeyStore {\n    /**\n     * Initialize KeyStore\n     * \n     */\n    static init = () => {\n        if (indexedDB) {\n            return QueryExecutor.prcoessQuery({\n                name: 'init_db',\n                query: null\n            } as IQueryRequest);\n        }\n    };\n\n    static close = () => {\n        return QueryExecutor.prcoessQuery({\n            name: 'close_db',\n            query: null\n        } as IQueryRequest);\n    };\n\n    /**\n     * return the value by key\n     * \n     * @param {string} key \n     * @param {(result) => void} onSuccess \n     * @param {(err: IError) => void} [onError=null] \n     * @returns \n     */\n    static get = <T>(key: string) => {\n        return QueryExecutor.prcoessQuery<T>({\n            name: 'get',\n            query: key\n        });\n    };\n\n    /**\n     * insert or update value\n     * \n     * @param {any} key \n     * @param {any} value \n     * @param {(result) => void} [onSuccess] \n     * @param {(err: IError) => void} [onError] \n     * @returns \n     */\n    static set = (key, value) => {\n        const query = {\n            Key: key,\n            Value: value\n        } as IInsert;\n        return QueryExecutor.prcoessQuery({\n            name: 'set',\n            query: query\n        } as IQueryRequest);\n    };\n\n    /**\n     * delete value\n     * \n     * @param {string} key \n     * @param {(result) => void} [onSuccess=null] \n     * @param {(err: IError) => void} [onError=null] \n     * @returns \n     */\n    static remove = (key: string) => {\n        return QueryExecutor.prcoessQuery({\n            name: 'remove',\n            query: key\n        } as IQueryRequest);\n    };\n}\n\n\n","export class Config {\n    static isLogEnabled = false;\n    static isRuningInWorker = false;\n}","import { Base } from \"./base\";\nimport { IError } from \"../../common/index\";\nimport { Column } from \"../model/index\";\nimport { KeyStore } from \"../keystore/index\";\n\nexport class Clear extends Base {\n    constructor(tableName: string, onSuccess: () => void, onError: (err: IError) => void) {\n        super();\n        this.query = tableName;\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute() {\n        this.createTransaction([this.query], () => {\n            if (this.error == null) {\n                this.onSuccess();\n            }\n            else {\n                this.onError(this.error);\n            }\n        });\n        const clearRequest: IDBRequest = this.transaction.objectStore(this.query).clear();\n        clearRequest.onsuccess = (e) => {\n            const currentTable = this.getTable(this.query);\n            currentTable.columns.forEach((column: Column) => {\n                if (column.autoIncrement) {\n                    KeyStore.set(`JsStore_${this.activeDb.name}_${this.query}_${column.name}_Value`, 0);\n                }\n            });\n        };\n\n        clearRequest.onerror = this.onErrorOccured;\n    }\n}","import { TableHelper, Column } from \"../model/index\";\nimport { IError, CONNECTION_STATUS } from \"../../common/index\";\nimport { KeyStore } from \"../keystore/index\";\nimport { BaseDb } from \"./base_db\";\nimport { promise } from \"../helpers/index\";\n\nexport class InitDb extends BaseDb {\n    onSuccess: (isDbCreated: boolean) => void;\n\n    constructor(onSuccess: (isDbCreated: boolean) => void, onError: (err: IError) => void) {\n        super();\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute(tablesMetaData: TableHelper[]) {\n        const listofTableCreated = [];\n        const dbRequest = indexedDB.open(this.dbName, this.dbVersion);\n        let isDbCreated = false;\n        dbRequest.onerror = (event) => {\n            if (this.onError != null) {\n                this.onError((event as any).target.error);\n            }\n        };\n\n        dbRequest.onsuccess = (event) => {\n            this.dbStatus.conStatus = CONNECTION_STATUS.Connected;\n            this.dbConnection = dbRequest.result;\n            (this.dbConnection as any).onclose = this.onDbClose.bind(this);\n\n            this.dbConnection.onversionchange = this.onDbVersionChange.bind(this);\n            this.dbConnection.onerror = this.onDbConError.bind(this);\n\n            if (isDbCreated) {\n                // save in database list\n                this.savedbNameIntoDbList_().then(() => {\n                    if (this.onSuccess != null) {\n                        this.onSuccess(isDbCreated);\n                    }\n                });\n            }\n            else {\n                this.setPrimaryKey_();\n                this.onSuccess(isDbCreated);\n            }\n        };\n\n        dbRequest.onupgradeneeded = (event) => {\n            isDbCreated = true;\n            const dbConnection = (event as any).target.result;\n            const createObjectStore = (item: TableHelper, index) => {\n                try {\n                    let store: IDBObjectStore;\n                    if (item.primaryKey.length > 0) {\n                        this.activeDb.tables[index].primaryKey = item.primaryKey;\n                        store = dbConnection.createObjectStore(item.name, {\n                            keyPath: item.primaryKey\n                        });\n                    }\n                    else {\n                        store = dbConnection.createObjectStore(item.name, {\n                            autoIncrement: true\n                        });\n                    }\n                    item.columns.forEach((column: Column) => {\n                        if (column.enableSearch === true) {\n                            const options = column.primaryKey ? { unique: true } : { unique: column.unique };\n                            options['multiEntry'] = column.multiEntry;\n                            const keyPath = column.keyPath == null ? column.name : column.keyPath;\n                            store.createIndex(column.name, keyPath, options);\n                            if (column.autoIncrement) {\n                                KeyStore.set(`JsStore_${this.dbName}_${item.name}_${column.name}_Value`, 0);\n                            }\n                        }\n                    });\n                    listofTableCreated.push(item.name);\n                    // setting the table version\n                    KeyStore.set(`JsStore_${this.dbName}_${item.name}_Version`, item.version);\n                }\n                catch (e) {\n                    console.error(e);\n                }\n            };\n            tablesMetaData.forEach((item: TableHelper, index) => {\n                if (item.requireDelete) {\n                    // Delete the old datastore.    \n                    if (dbConnection.objectStoreNames.contains(item.name)) {\n                        dbConnection.deleteObjectStore(item.name);\n                    }\n                    createObjectStore(item, index);\n                }\n                else if (item.requireCreation) {\n                    createObjectStore(item, index);\n                }\n            });\n        };\n    }\n\n    private savedbNameIntoDbList_() {\n        return promise((res, rej) => {\n            this.getDbList().then(dbList => {\n                if (dbList.indexOf(this.dbName) < 0) {\n                    dbList.push(this.dbName);\n                    this.setDbList(dbList).then(res).catch(rej);\n                }\n                else {\n                    res();\n                }\n            }).catch(rej);\n        });\n    }\n\n    private setPrimaryKey_() {\n        this.activeDb.tables.forEach((table, index) => {\n            table.columns.every(item => {\n                this.activeDb.tables[index].primaryKey = item.primaryKey ? item.name : \"\";\n                return !item.primaryKey;\n            });\n        });\n    }\n}\n","import { Table } from \"./table\";\nimport { Column } from \"./column\";\nimport { KeyStore } from \"../keystore/index\";\nimport { IdbHelper } from \"../business/index\";\nimport { promise } from \"../helpers/index\";\n\nexport class TableHelper {\n    name: string;\n    columns: Column[] = [];\n\n    // internal Members\n    primaryKey: string;\n    version: number;\n    requireDelete = false;\n    requireCreation = false;\n    private callback_: (tableHelperObj: TableHelper) => void;\n\n    constructor(table: Table) {\n        this.name = table.name;\n        this.version = table.version;\n        this.columns = table.columns;\n        this.setPrimaryKey_();\n    }\n\n    createMetaData(dbName: string): Promise<TableHelper> {\n        return promise((resolve) => {\n            this.callback_ = resolve;\n            this.setRequireDelete_(dbName);\n            this.setDbVersion_(dbName);\n        });\n    }\n\n    private setPrimaryKey_() {\n        this.columns.every((item) => {\n            this.primaryKey = item.primaryKey ? item.name : \"\";\n            return !item.primaryKey;\n        });\n    }\n\n    private setRequireDelete_(dbName: string) {\n        KeyStore.get<number>(`JsStore_${dbName}_${this.name}_Version`).then(tableVersion => {\n            if (tableVersion == null) {\n                this.requireCreation = true;\n            }\n            // mark only table which has version greater than store version\n            else if (tableVersion < this.version) {\n                this.requireDelete = true;\n            }\n        });\n    }\n\n    private setDbVersion_(dbName: string) {\n        IdbHelper.activeDbVersion = IdbHelper.activeDbVersion > this.version ? IdbHelper.activeDbVersion : this.version;\n        // setting db version\n        KeyStore.set(`JsStore_${dbName}_Db_Version`, IdbHelper.activeDbVersion);\n        // setting table version\n        KeyStore.set(`JsStore_${dbName}_${this.name}_Version`, IdbHelper.activeDbVersion).then(() => {\n            this.version = IdbHelper.activeDbVersion;\n            this.callback_(this);\n        });\n    }\n}","import { DataBase } from \"./database\";\nimport { TableHelper } from \"./table_helper\";\nimport { Table } from \"./table\";\nimport { promiseAll } from \"../helpers/index\";\n\nexport class DbHelper {\n    dbName: string;\n    tables: Table[] = [];\n\n    constructor(dataBase: DataBase) {\n        this.dbName = dataBase.name;\n        this.tables = dataBase.tables;\n    }\n\n    createMetaData() {\n        return promiseAll(\n            this.tables.map((table) => {\n                return new TableHelper(table).createMetaData(this.dbName);\n            })\n        );\n    }\n}","import { IColumnOption } from \"../../common/index\";\n\nexport class Column implements IColumnOption {\n    name: string;\n    autoIncrement: boolean;\n    primaryKey: boolean;\n    unique: boolean;\n    notNull: boolean;\n    dataType: string;\n    default;\n    multiEntry: boolean;\n    enableSearch: boolean;\n    keyPath: string[];\n\n    constructor(key: Column) {\n        this.name = key.name;\n        this.autoIncrement = key.autoIncrement != null ? key.autoIncrement : false;\n        this.primaryKey = key.primaryKey != null ? key.primaryKey : false;\n        this.unique = key.unique != null ? key.unique : false;\n        this.notNull = key.notNull != null ? key.notNull : false;\n        this.dataType = key.dataType != null ? key.dataType : (key.autoIncrement ? 'number' : null);\n        this.default = key.default;\n        this.multiEntry = key.multiEntry == null ? false : key.multiEntry;\n        this.enableSearch = key.enableSearch == null ? true : key.enableSearch;\n        this.keyPath = key.keyPath;\n    }\n\n}","import { Column } from \"./column\";\nimport { ITable } from \"../../common/index\";\n\nexport class Table {\n    name: string;\n    columns: Column[] = [];\n    version: number;\n    primaryKey: string;\n\n    constructor(table: ITable) {\n        this.name = table.name;\n        this.version = table.version == null ? 1 : table.version;\n        for (const columnName in table.columns) {\n            const column = {\n                name: columnName\n            } as Column;\n\n            for (const feature in table.columns[columnName]) {\n                const value = table.columns[columnName][feature];\n                switch (feature) {\n                    case 'primaryKey':\n                    case 'autoIncrement':\n                    case 'unique':\n                    case 'dataType':\n                    case 'enableSearch':\n                    case 'keyPath':\n                    case 'multiEntry':\n                    case 'default':\n                    case 'notNull':\n                        column[feature] = value as never; break;\n                }\n            }\n            this.columns.push(new Column(column));\n        }\n    }\n}","\nimport { Table } from \"./table\";\nimport { IDataBase } from \"../../common/index\";\n \nexport class DataBase {\n    name: string;\n    tables: Table[] = [];\n\n    constructor(dataBase: IDataBase) {\n        this.name = dataBase.name;\n        dataBase.tables.forEach((item) => {\n            this.tables.push(new Table(item));\n        });\n    }\n}\n","import * as Select from '../select/index';\nimport { SelectQuery, IError } from '../../../common/index';\nimport { Base } from '../base';\n\n\nexport class Union extends Base {\n    execute(query: SelectQuery[], onSuccess: (results: object[]) => void, onError: (err: IError) => void) {\n        let index = 0;\n        const hashMap = {};\n        let isQueryForSameTable = true;\n        const queryLength = query.length;\n        query.every((qry, i) => {\n            if (i + 1 < queryLength && qry.from !== query[i + 1].from) {\n                isQueryForSameTable = false;\n                return false;\n            }\n            return true;\n        });\n        let getHashKey;\n        if (isQueryForSameTable) {\n            const pKey = this.getPrimaryKey(query[0].from);\n            getHashKey = (val) => {\n                return val[pKey];\n            };\n        }\n        else {\n            getHashKey = (val) => {\n                let columnValKey = \"\";\n                for (const key in val) {\n                    columnValKey += val[key];\n                }\n                return columnValKey;\n            };\n        }\n\n        const fetchData = () => {\n            if (index < query.length) {\n                new Select.Instance(query[index++], (selectResult) => {\n                    selectResult.forEach(val => {\n                        hashMap[getHashKey(val)] = val;\n                    });\n                    fetchData();\n                }, onError).execute();\n            }\n            else {\n                const results = [];\n                for (const key in hashMap) {\n                    results.push(hashMap[key]);\n                }\n                onSuccess(results);\n            }\n        };\n        fetchData();\n    }\n\n\n}","import * as Select from '../select/index';\nimport { IError, IntersectQuery } from '../../../common/index';\nimport { Helper } from '../select/orderby_helper';\n\n\nexport class Intersect extends Helper {\n    execute(intersectQry: IntersectQuery, onSuccess: (results: object[]) => void, onError: (err: IError) => void) {\n        this.query = intersectQry as any;\n        let index = 0;\n        let hashMap = {};\n        let hashMapTemp = {};\n        let isQueryForSameTable = true;\n        const query = intersectQry.queries;\n        const queryLength = query.length;\n        query.every((qry, i) => {\n            if (i + 1 < queryLength && qry.from !== query[i + 1].from) {\n                isQueryForSameTable = false;\n                return false;\n            }\n            return true;\n        });\n        let getHashKey;\n        if (isQueryForSameTable) {\n            const pKey = this.getPrimaryKey(query[0].from);\n            getHashKey = (val) => {\n                return val[pKey];\n            };\n        }\n        else {\n            getHashKey = (val) => {\n                let columnValKey = \"\";\n                for (const key in val) {\n                    columnValKey += val[key];\n                }\n                return columnValKey;\n            };\n        }\n\n\n        const fetchData = () => {\n            if (index < queryLength) {\n                new Select.Instance(query[index], (selectResult) => {\n                    hashMap = {};\n                    selectResult.forEach(val => {\n                        const columnValKey = getHashKey(val);\n                        if (index === 0) {\n                            hashMapTemp[columnValKey] = val;\n                        } else if (hashMapTemp[columnValKey] != null) {\n                            hashMap[columnValKey] = val;\n                        }\n                    });\n                    if (index > 0) {\n                        hashMapTemp = { ...hashMap };\n                    }\n\n                    ++index;\n                    fetchData();\n                }, onError).execute();\n            }\n            else {\n                const results = [];\n                let resultPusher: (key: string) => void;\n                let skip = intersectQry.skip;\n                const limit = intersectQry.limit;\n                const onFinished = () => {\n                    this.results = results;\n                    this.query.join = {} as any;\n                    this.processOrderBy();\n                    this.processGroupDistinctAggr();\n                    onSuccess(this.results);\n                };\n                let shouldStopLoop = false;\n                let key: string;\n                const pushResult = () => {\n                    results.push(hashMap[key]);\n                };\n                const checkLimitAndPush = () => {\n                    if (results.length < limit) {\n                        pushResult();\n                    }\n                    else {\n                        shouldStopLoop = true;\n                    }\n                };\n                const skipChecker = (callBack: () => void) => {\n                    if (skip === 0) {\n                        callBack();\n                    }\n                    else {\n                        --skip;\n                    }\n                };\n                if (intersectQry.skip && intersectQry.limit) {\n                    resultPusher = () => {\n                        skipChecker(() => {\n                            checkLimitAndPush();\n                        });\n                    };\n\n                }\n                else if (intersectQry.limit) {\n                    resultPusher = checkLimitAndPush;\n                }\n                else if (intersectQry.skip) {\n                    resultPusher = () => {\n                        skipChecker(() => {\n                            pushResult();\n                        });\n                    };\n                }\n                else {\n                    resultPusher = () => {\n                        pushResult();\n                    };\n                }\n                if (limit) {\n                    for (key in hashMap) {\n                        resultPusher(key);\n                        if (shouldStopLoop) {\n                            break;\n                        }\n                    }\n                }\n                else {\n                    for (key in hashMap) {\n                        resultPusher(key);\n                    }\n                }\n                onFinished();\n            }\n        };\n        fetchData();\n    }\n}","import { IdbHelper, DropDb, InitDb, Clear, QueryHelper } from \"./business/index\";\nimport * as Select from './business/select/index';\nimport * as Count from './business/count/index';\nimport * as Insert from './business/insert/index';\nimport * as Remove from './business/remove/index';\nimport * as Update from './business/update/index';\nimport * as Transaction from \"./business/transaction/index\";\nimport { LogHelper } from \"./log_helper\";\nimport {\n    UpdateQuery, InsertQuery, RemoveQuery, SelectQuery, CountQuery, SetQuery,\n    CONNECTION_STATUS, ERROR_TYPE, DATA_TYPE, API,\n    WebWorkerResult, WebWorkerRequest, IDataBase, IError\n} from \"../common/index\";\nimport { Config } from \"./config\";\nimport { KeyStore } from \"./keystore/index\";\nimport { TableHelper, DbHelper, DataBase } from \"./model/index\";\nimport { promise } from \"./helpers/index\";\nimport { getDataType } from \"./utils/index\";\nimport { Union } from './business/union/index';\nimport { Intersect } from \"./business/intersect/index\";\nexport class QueryExecutor {\n    static isTransactionQuery = false;\n    onQueryFinished: (result: any) => void;\n\n    constructor(fn?: (result: any) => void) {\n        this.onQueryFinished = fn;\n        QueryHelper.autoIncrementValues = {};\n    }\n\n    checkConnectionAndExecuteLogic(request: WebWorkerRequest) {\n        LogHelper.log('request executing:' + request.name);\n        switch (request.name) {\n            case API.InitDb:\n            case API.IsDbExist:\n            case API.GetDbVersion:\n            case API.GetDbList:\n            case API.GetDbSchema:\n            case API.Get:\n            case API.Set:\n            case API.ChangeLogStatus:\n            case API.Terminate:\n            case API.OpenDb:\n            case API.InitKeyStore:\n            case API.CloseDb:\n                const err = this.checkForIdbSupport_();\n                if (err == null) {\n                    this.executeLogic_(request);\n                }\n                else {\n                    this.returnResult_({\n                        errorDetails: err,\n                        errorOccured: true\n                    } as WebWorkerResult);\n                }\n                break;\n            default:\n                switch (this.dbStatus_.conStatus) {\n                    case CONNECTION_STATUS.Connected: {\n                        this.executeLogic_(request);\n                    } break;\n                    case CONNECTION_STATUS.Closed: {\n                        if (this.isDbDeletedByBrowser_ === true) {\n                            this.initDb_(null, () => {\n                                this.isDbDeletedByBrowser_ = false;\n                                this.checkConnectionAndExecuteLogic(request);\n                            }, request.onError);\n                        }\n                        else {\n                            this.initDb_(this.activeDb_ as any, () => {\n                                this.checkConnectionAndExecuteLogic(request);\n                            }, request.onError);\n                        }\n                    } break;\n\n                }\n        }\n    }\n\n    private changeLogStatus_(status: boolean, onSuccess, onError) {\n        Config.isLogEnabled = status;\n        onSuccess();\n    }\n\n    private returnResult_(result) {\n        if (Config.isRuningInWorker === true) {\n            (self as any).postMessage(result);\n        }\n        else {\n            this.onQueryFinished(result);\n        }\n\n    }\n\n    private executeLogic_(request: WebWorkerRequest) {\n        const onSuccess = (results?) => {\n            this.returnResult_({\n                returnedValue: results\n            } as WebWorkerResult);\n        };\n        const onError = (err) => {\n            this.returnResult_({\n                errorDetails: err,\n                errorOccured: true\n            } as WebWorkerResult);\n        };\n\n        QueryExecutor.isTransactionQuery = request.name === API.Transaction;\n        switch (request.name) {\n            case API.InitDb:\n                if (this.isDbDeletedByBrowser_ === true) {\n                    this.initDb_(null, () => {\n                        this.isDbDeletedByBrowser_ = false;\n                        onSuccess();\n                    }, onError);\n                }\n                else {\n                    this.initDb_(request.query as IDataBase, onSuccess, onError);\n                }\n                break;\n            case API.OpenDb:\n                this.openDb_(request.query, onSuccess, onError); break;\n            case API.Select:\n                new Select.Instance(request.query as SelectQuery, onSuccess, onError).execute();\n                break;\n            case API.Insert: new Insert.Instance(request.query as InsertQuery, onSuccess, onError).execute();\n                break;\n            case API.Update:\n                new Update.Instance(request.query as UpdateQuery, onSuccess, onError).execute();\n                break;\n            case API.Remove:\n                new Remove.Instance(request.query as RemoveQuery, onSuccess, onError).execute();\n                break;\n            case API.IsDbExist: this.isDbExist_(request.query, onSuccess, onError);\n                break;\n            case API.GetDbVersion:\n                this.getDbVersion_(request.query as string).then(onSuccess).catch(onError);\n                break;\n            case API.GetDbList:\n                this.getDbList_().then(onSuccess).catch(onError);\n                break;\n            case API.GetDbSchema:\n                this.getDbSchema_(request.query as string).then(onSuccess).catch(onError);\n                break;\n            case API.Clear: new Clear(request.query as string, onSuccess, onError).execute();\n                break;\n            case API.DropDb: this.dropDb_(onSuccess, onError);\n                break;\n            case API.Count:\n                new Count.Instance(request.query as CountQuery, onSuccess, onError).execute();\n                break;\n            case API.Get: this.get_(request.query as string).then(onSuccess).catch(onError);\n                break;\n            case API.Set: this.set_(request.query as SetQuery).then(onSuccess).catch(onError);\n                break;\n            case API.ChangeLogStatus:\n                this.changeLogStatus_(request.query as boolean, onSuccess, onError);\n                break;\n            case API.Transaction: new Transaction.Instance(request.query, onSuccess, onError).execute();\n                break;\n            case API.CloseDb:\n            case API.Terminate:\n                this.terminate_(onSuccess, onError);\n                break;\n            case API.Union:\n                new Union().execute(request.query, onSuccess, onError);\n                break;\n            case API.InitKeyStore:\n                this.initKeyStore_(onSuccess);\n                break;\n            case API.Intersect:\n                new Intersect().execute(request.query, onSuccess, onError);\n                break;\n            default:\n                if (process.env.NODE_ENV === 'dev') {\n                    console.error('The Api:-' + request.name + ' does not support.');\n                }\n        }\n    }\n\n    private openDb_(dbName: string, onSuccess, onError) {\n        if (this.activeDb_ != null && this.activeDb_.name === dbName) {\n            this.processCreateDb(this.activeDb_).then(onSuccess).catch(onError);\n        }\n        else {\n            this.getDbSchema_(dbName).then((db) => {\n                if (db != null) {\n                    this.processCreateDb(db).then(onSuccess).catch(onError);\n                }\n                else {\n                    onError(new LogHelper(ERROR_TYPE.DbNotExist, { dbName: dbName }).get());\n                }\n            }).catch(onError);\n        }\n    }\n\n    private initKeyStore_(onSuccess) {\n        KeyStore.init().then(onSuccess()).catch(() => {\n            IdbHelper.dbStatus = {\n                conStatus: CONNECTION_STATUS.UnableToStart,\n                lastError: ERROR_TYPE.IndexedDbNotSupported,\n            };\n        });\n    }\n\n    private getDbSchema_(dbName: string) {\n        return IdbHelper.getDbSchema(dbName);\n    }\n\n    private terminate_(onSuccess: () => void, onError: (err: IError) => void) {\n        KeyStore.close().then(() => {\n            this.closeDb_();\n            onSuccess();\n        });\n    }\n\n    private get isDbDeletedByBrowser_() {\n        return IdbHelper.isDbDeletedByBrowser;\n    }\n\n    private set isDbDeletedByBrowser_(value) {\n        IdbHelper.isDbDeletedByBrowser = value;\n    }\n\n    private getDbList_() {\n        return IdbHelper.getDbList();\n    }\n\n    private get activeDb_() {\n        return IdbHelper.activeDb;\n    }\n\n    private set activeDb_(value) {\n        IdbHelper.activeDb = value;\n    }\n\n    private closeDb_() {\n        if (IdbHelper.dbStatus.conStatus === CONNECTION_STATUS.Connected) {\n            IdbHelper.dbStatus.conStatus = CONNECTION_STATUS.ClosedByJsStore;\n            IdbHelper.dbConnection.close();\n        }\n    }\n\n    private dropDb_(onSuccess: () => void, onError: (err: IError) => void) {\n        this.closeDb_();\n        new DropDb(onSuccess, onError).deleteDb();\n    }\n\n\n\n    private processCreateDb(db: DataBase) {\n        return promise((res, rej) => {\n            // create meta data\n            const dbHelper = new DbHelper(db);\n            dbHelper.createMetaData().then((tablesMetaData: TableHelper[]) => {\n                this.activeDb_ = db;\n                const createDbInstance = new InitDb((isDbCreated) => {\n                    this.activeDb_ = db;\n                    if (isDbCreated) {\n                        // save dbSchema in keystore\n                        KeyStore.set(\"JsStore_\" + db.name + \"_Schema\", db);\n                    }\n                    res(isDbCreated);\n                }, rej);\n                createDbInstance.execute(tablesMetaData);\n            });\n        });\n    }\n\n    private initDb_(\n        dataBase: IDataBase, onSuccess: () => void, onError: (err: IError) => void\n    ) {\n        if (dataBase == null) {\n            this.processCreateDb(this.activeDb_);\n        }\n        else {\n            this.closeDb_();\n            this.getDbVersion_(dataBase.name).then(version => {\n                this.activeDbVersion_ = version ? version : 1;\n                this.processCreateDb(new DataBase(dataBase)).then(onSuccess).catch(onError);\n            }).catch(onError);\n        }\n\n    }\n\n    private get activeDbVersion_() {\n        return IdbHelper.activeDbVersion;\n    }\n\n    private set activeDbVersion_(value) {\n        IdbHelper.activeDbVersion = value;\n    }\n\n    private getDbVersion_(dbName: string) {\n        return IdbHelper.getDbVersion(dbName);\n    }\n\n    private get dbStatus_() {\n        return IdbHelper.dbStatus;\n    }\n\n    private checkForIdbSupport_() {\n        if (this.dbStatus_.conStatus === CONNECTION_STATUS.UnableToStart) {\n            const error = {\n                type: this.dbStatus_.lastError,\n            } as IError;\n            switch (error.type) {\n                case ERROR_TYPE.IndexedDbNotSupported:\n                    error.message = \"Browser does not support IndexedDB\"; break;\n                default:\n                    error.message = \"unknown error occured\";\n            }\n            return error;\n        }\n    }\n\n    private isDbExist_(dbInfo, onSuccess: (isExist: boolean) => void, onError: (err: IError) => void) {\n        if (getDataType(dbInfo) === DATA_TYPE.String) {\n            this.getDbVersion_(dbInfo).then(function (dbVersion) {\n                onSuccess(Boolean(dbVersion));\n            });\n        }\n        else {\n            this.getDbVersion_(dbInfo.dbName).then(function (dbVersion) {\n                onSuccess(dbInfo.table.version <= dbVersion);\n            });\n        }\n    }\n\n    private get_(key: string) {\n        return KeyStore.get(key);\n    }\n\n    private set_(query: SetQuery) {\n        return KeyStore.set(query.key, query.value);\n    }\n}","import { Base } from \"./base\";\n\nexport class WhereBase extends Base {\n    protected results: any[] = [];\n\n    protected onQueryFinished() {\n        // virtual\n    }\n}","export const promise = <T>(callBack: (resolve, reject) => void) => {\n    return new Promise<T>(callBack);\n};","export const promiseAll = <T>(promises: any) => {\n    return Promise.all<T>(promises);\n};","import { IdbHelper } from \"./idb_helper\";\nimport { CONNECTION_STATUS, ERROR_TYPE, IError } from \"../../common/index\";\nexport class BaseDb {\n\n    onError: (err: IError) => void;\n    protected get dbName() {\n        return IdbHelper.activeDb.name;\n    }\n\n    protected get dbStatus() {\n        return IdbHelper.dbStatus;\n    }\n\n    protected set dbStatus(value) {\n        IdbHelper.dbStatus = value;\n    }\n\n\n    protected set dbConnection(value) {\n        IdbHelper.dbConnection = value;\n    }\n\n    protected get dbConnection() {\n        return IdbHelper.dbConnection;\n    }\n\n    protected updateDbStatus(status: CONNECTION_STATUS, err?: ERROR_TYPE) {\n        IdbHelper.updateDbStatus(status, err);\n    }\n\n    protected onDbDroppedByBrowser(deleteMetaData?: boolean) {\n        IdbHelper.callDbDroppedByBrowser(deleteMetaData);\n    }\n\n    protected get dbVersion() {\n        return parseInt(IdbHelper.activeDbVersion as any);\n    }\n\n    protected get activeDb() {\n        return IdbHelper.activeDb;\n    }\n\n    protected getDbList() {\n        return IdbHelper.getDbList();\n    }\n\n    protected setDbList(value) {\n        return IdbHelper.setDbList(value);\n    }\n\n\n    protected onDbClose(event) {\n        this.onDbDroppedByBrowser();\n        this.updateDbStatus(CONNECTION_STATUS.Closed, ERROR_TYPE.ConnectionClosed);\n    }\n\n    protected onDbVersionChange(e: IDBVersionChangeEvent) {\n        if (e.newVersion === null) { // An attempt is made to delete the db\n            (e.target as any).close(); // Manually close our connection to the db\n            this.onDbDroppedByBrowser(true);\n            this.updateDbStatus(CONNECTION_STATUS.Closed, ERROR_TYPE.ConnectionClosed);\n        }\n    }\n\n    protected onDbConError(e) {\n        IdbHelper.dbStatus.lastError = (\"Error occured in connection :\" + (e.target as any).result) as any;\n    }\n}","import { QUERY_OPTION, CaseOption } from \"../../../common/index\";\n\nexport class ThenEvaluator {\n    private columnName_: string;\n    private value;\n    private caseQuery_: { [columnName: string]: [CaseOption] };\n    private caseColumnQuery_: CaseOption[];\n    private length_: number;\n\n    setCaseAndValue(caseQuery: any, value) {\n        this.caseQuery_ = caseQuery;\n        this.setValue(value);\n    }\n\n    setCaseAndColumn(caseQuery: { [columnName: string]: [CaseOption] }, columnName: string) {\n        this.caseQuery_ = caseQuery;\n        this.setColumn(columnName);\n        return this;\n    }\n\n    setColumn(columnName: string) {\n        this.columnName_ = columnName;\n        this.caseColumnQuery_ = this.caseQuery_[this.columnName_];\n        this.length_ = this.caseColumnQuery_.length;\n        return this;\n    }\n\n    setValue(value) {\n        this.value = value;\n        return this;\n    }\n\n    evaluate() {\n        for (let i = 0; i < this.length_; i++) {\n            if (this.checkCase_(this.caseColumnQuery_[i]) === true) {\n                return this.caseColumnQuery_[i].then;\n            }\n        }\n        const lastThen = this.caseColumnQuery_[this.length_ - 1].then;\n        return lastThen == null ? this.value[this.columnName_] : lastThen;\n    }\n\n    private checkCase_(cond: CaseOption) {\n        let queryOption;\n        for (queryOption in cond) {\n            switch (queryOption) {\n                case QUERY_OPTION.GreaterThan:\n                    if (this.value[this.columnName_] > cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.Equal:\n                    if (this.value[this.columnName_] === cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.LessThan:\n                    if (this.value[this.columnName_] < cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.GreaterThanEqualTo:\n                    if (this.value[this.columnName_] >= cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.LessThanEqualTo:\n                    if (this.value[this.columnName_] <= cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.NotEqualTo:\n                    if (this.value[this.columnName_] !== cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.Between:\n                    if (this.value[this.columnName_] > cond[queryOption].low && this.value[this.columnName_] < cond[queryOption].high) {\n                        return true;\n                    } break;\n            }\n            return false;\n        }\n    }\n}","import { WhereBase } from \"../where_base\";\nimport { SelectQuery, CaseOption, QUERY_OPTION } from \"../../../common/index\";\nimport { ThenEvaluator } from \"./then_evaluator\";\n\n\nexport class BaseSelect extends WhereBase {\n    sorted = false;\n    isOr: boolean;\n    isArrayQry: boolean;\n    onWhereArrayQrySuccess: () => void;\n    query: SelectQuery;\n    orInfo: {\n        results?: any[];\n        orQuery: object\n    };\n\n    isSubQuery = false;\n\n    shouldEvaluateLimitAtEnd = false;\n    shouldEvaluateSkipAtEnd = false;\n\n    protected pushResult: (value) => void;\n\n    protected thenEvaluator = new ThenEvaluator();\n\n    protected setPushResult() {\n        if (this.query.case) {\n            this.pushResult = (value) => {\n                let columnName: string;\n                this.thenEvaluator.setCaseAndValue(this.query.case, value);\n                for (columnName in this.query.case) {\n                    value[columnName] = this.thenEvaluator.setColumn(columnName).evaluate();\n                }\n                this.results.push(value);\n            };\n        }\n        else {\n            this.pushResult = (value) => {\n                this.results.push(value);\n            };\n        }\n    }\n\n    protected removeDuplicates() {\n        let datas = this.results;\n        // free results memory\n        this.results = undefined;\n        const key = this.getPrimaryKey(this.query.from);\n        const lookupObject = {};\n        for (const i in datas) {\n            lookupObject[datas[i][key]] = datas[i];\n        }\n        // free datas memory\n        datas = [];\n        for (const i in lookupObject) {\n            datas.push(lookupObject[i]);\n        }\n        this.results = datas;\n    }\n}","import { BaseSelect } from \"./base_select\";\nimport { LogHelper } from \"../../log_helper\";\nimport { ERROR_TYPE } from \"../../../common/index\";\nlet cursorRequest: IDBRequest;\nexport class NotWhere extends BaseSelect {\n    protected executeWhereUndefinedLogic() {\n        if (this.query.order && this.query.order.idbSorting !== false && this.query.order.by) {\n            if (this.objectStore.indexNames.contains(this.query.order.by as string)) {\n                const orderType: IDBCursorDirection = this.query.order.type &&\n                    this.query.order.type.toLowerCase() === 'desc' ? 'prev' : 'next';\n                this.sorted = true;\n                cursorRequest = this.objectStore.index(this.query.order.by as string).\n                    openCursor(null, orderType);\n            }\n            else {\n                const error = new LogHelper(ERROR_TYPE.ColumnNotExist, { column: this.query.order.by, isOrder: true });\n                this.onErrorOccured(error, true);\n                return;\n            }\n        }\n        else {\n            cursorRequest = this.objectStore.openCursor();\n        }\n\n        cursorRequest.onerror = this.onErrorOccured;\n\n        if (this.shouldEvaluateLimitAtEnd === false && this.shouldEvaluateSkipAtEnd === false) {\n            if (this.skipRecord && this.limitRecord) {\n                this.executeSkipAndLimitForNoWhere_();\n            }\n            else if (this.skipRecord) {\n                this.executeSkipForNoWhere_();\n            }\n            else if (this.limitRecord) {\n                this.executeLimitForNotWhere_();\n            }\n            else {\n                this.executeSimpleForNotWhere_();\n            }\n        }\n        else {\n            this.executeSimpleForNotWhere_();\n        }\n    }\n\n    private executeSkipAndLimitForNoWhere_() {\n        let recordSkipped = false,\n            cursor: IDBCursorWithValue;\n        cursorRequest.onsuccess = (e) => {\n            cursor = (e as any).target.result;\n            if (cursor) {\n                if (recordSkipped && this.results.length !== this.limitRecord) {\n                    this.pushResult(cursor.value);\n                    cursor.continue();\n                }\n                else {\n                    recordSkipped = true;\n                    cursor.advance(this.skipRecord);\n                }\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSkipForNoWhere_() {\n        let recordSkipped = false,\n            cursor;\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (recordSkipped) {\n                    this.pushResult(cursor.value);\n                    cursor.continue();\n                }\n                else {\n                    recordSkipped = true;\n                    cursor.advance(this.skipRecord);\n                }\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSimpleForNotWhere_() {\n        let cursor;\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                this.pushResult(cursor.value);\n                (cursor as any).continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeLimitForNotWhere_() {\n        let cursor;\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor && this.results.length !== this.limitRecord) {\n                this.pushResult(cursor.value);\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n}\n","import { NotWhere } from \"./not_where\";\nimport { promiseAll, promise } from \"../../helpers/index\";\n\nlet shouldAddValue: () => boolean;\nlet skipOrPush: (val) => void;\nlet skip;\nlet cursor: IDBCursorWithValue;\nexport class In extends NotWhere {\n    protected executeInLogic(column, values) {\n        skip = this.skipRecord;\n        skipOrPush = (val) => {\n            if (skip === 0) {\n                this.pushResult(val);\n            }\n            else {\n                --skip;\n            }\n        };\n        shouldAddValue = () => {\n            return this.whereCheckerInstance.check(cursor.value);\n        };\n        if (this.shouldEvaluateLimitAtEnd === false && this.shouldEvaluateSkipAtEnd === false) {\n            if (this.skipRecord && this.limitRecord) {\n                this.executeSkipAndLimitForIn_(column, values);\n            }\n            else if (this.skipRecord) {\n                this.executeSkipForIn_(column, values);\n            }\n            else if (this.limitRecord) {\n                this.executeLimitForIn_(column, values);\n            }\n            else {\n                this.executeSimpleForIn_(column, values);\n            }\n        }\n        else {\n            this.executeSimpleForIn_(column, values);\n        }\n    }\n\n    private executeSkipAndLimitForIn_(column, values) {\n        let cursorRequest: IDBRequest;\n        const columnStore = this.objectStore.index(column);\n\n        const runInLogic: (val) => Promise<void> = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e: any) => {\n                    cursor = e.target.result;\n                    if (this.results.length !== this.limitRecord && cursor) {\n                        if (shouldAddValue()) {\n                            skipOrPush(cursor.value);\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n\n    private executeSkipForIn_(column, values) {\n\n        let cursorRequest: IDBRequest;\n        const columnStore = this.objectStore.index(column);\n        const runInLogic: (val) => Promise<void> = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e: any) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (shouldAddValue()) {\n                            skipOrPush((cursor.value));\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n\n    private executeLimitForIn_(column, values) {\n        let cursorRequest: IDBRequest;\n        const columnStore = this.objectStore.index(column);\n        const runInLogic = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e: any) => {\n                    cursor = e.target.result;\n                    if (cursor && this.results.length !== this.limitRecord) {\n                        if (shouldAddValue()) {\n                            this.pushResult(cursor.value);\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n\n    private executeSimpleForIn_(column, values) {\n        let cursorRequest: IDBRequest;\n        const columnStore = this.objectStore.index(column);\n        const runInLogic = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e: any) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (shouldAddValue()) {\n                            this.pushResult(cursor.value);\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n}","import { In } from \"./in\";\n\nlet shouldAddValue: () => boolean;\nlet skipOrPush: (val) => void;\nlet skip;\nlet cursor: IDBCursorWithValue;\nlet cursorRequest: IDBRequest;\nexport class Regex extends In {\n    protected executeRegexLogic(column, exp: RegExp) {\n\n        skip = this.skipRecord;\n        this.regexExpression = exp;\n        skipOrPush = (val) => {\n            if (skip === 0) {\n                this.pushResult(val);\n            }\n            else {\n                --skip;\n            }\n        };\n        shouldAddValue = () => {\n            return this.regexTest(cursor.key) &&\n                this.whereCheckerInstance.check(cursor.value);\n        };\n\n        cursorRequest = this.objectStore.index(column).openCursor();\n        cursorRequest.onerror = this.onErrorOccured;\n        if (this.shouldEvaluateLimitAtEnd === false && this.shouldEvaluateSkipAtEnd === false) {\n            if (this.skipRecord && this.limitRecord) {\n                this.executeSkipAndLimitForRegex_();\n            }\n            else if (this.skipRecord) {\n                this.executeSkipForRegex_();\n            }\n            else if (this.limitRecord) {\n                this.executeLimitForRegex_();\n            }\n            else {\n                this.executeSimpleForRegex_();\n            }\n        }\n        else {\n            this.executeSimpleForRegex_();\n        }\n    }\n\n    private executeSkipAndLimitForRegex_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (this.results.length !== this.limitRecord && cursor) {\n                if (shouldAddValue()) {\n                    skipOrPush(cursor.value);\n                }\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSkipForRegex_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (shouldAddValue()) {\n                    skipOrPush((cursor.value));\n                }\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeLimitForRegex_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (this.results.length !== this.limitRecord && cursor) {\n                if (shouldAddValue()) {\n                    this.pushResult(cursor.value);\n                }\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSimpleForRegex_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (shouldAddValue()) {\n                    this.pushResult(cursor.value);\n                }\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n}","import { Regex } from \"./regex\";\n\nlet shouldAddValue: () => boolean;\nlet cursor: IDBCursorWithValue;\nlet cursorRequest: IDBRequest;\nexport class Where extends Regex {\n\n    protected executeWhereLogic(column, value, op, dir) {\n        shouldAddValue = () => {\n            return this.whereCheckerInstance.check(cursor.value);\n        };\n        value = op ? value[op] : value;\n        cursorRequest = this.objectStore.index(column).openCursor(\n            this.getKeyRange(value, op),\n            dir\n        );\n\n        cursorRequest.onerror = this.onErrorOccured;\n\n        if (this.shouldEvaluateLimitAtEnd === false && this.shouldEvaluateSkipAtEnd === false) {\n            if (this.skipRecord && this.limitRecord) {\n                this.executeSkipAndLimitForWhere_();\n            }\n            else if (this.skipRecord) {\n                this.executeSkipForWhere_();\n            }\n            else if (this.limitRecord) {\n                this.executeLimitForWhere_();\n            }\n            else {\n                this.executeSimpleForWhere_();\n            }\n        }\n        else {\n            this.executeSimpleForWhere_();\n        }\n\n    }\n\n    private executeSkipAndLimitForWhere_() {\n        let recordSkipped = false;\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (recordSkipped && this.results.length !== this.limitRecord) {\n                    if (shouldAddValue()) {\n                        this.pushResult(cursor.value);\n                    }\n                    cursor.continue();\n                }\n                else {\n                    recordSkipped = true;\n                    cursor.advance(this.skipRecord);\n                }\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSkipForWhere_() {\n        let recordSkipped = false;\n\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (recordSkipped) {\n                    if (shouldAddValue()) {\n                        this.pushResult(cursor.value);\n                    }\n                    cursor.continue();\n                }\n                else {\n                    recordSkipped = true;\n                    cursor.advance(this.skipRecord);\n                }\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeLimitForWhere_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor && this.results.length !== this.limitRecord) {\n                if (shouldAddValue()) {\n                    this.pushResult(cursor.value);\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n\n    }\n\n    private executeSimpleForWhere_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (shouldAddValue()) {\n                    this.pushResult(cursor.value);\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n    }\n}","import { Where } from \"./where\";\nimport { DATA_TYPE, QUERY_OPTION } from \"../../../common/index\";\nimport { getDataType, getObjectFirstKey } from \"../../utils/index\";\n\nexport class GroupByHelper extends Where {\n    protected processGroupBy() {\n        const groupBy = this.query.groupBy as any;\n        let datas = this.results;\n        const lookUpObj = {};\n        // free results memory\n        this.results = this.query.groupBy = null;\n        if (getDataType(groupBy) !== DATA_TYPE.Object) {\n            if (getDataType(groupBy) === DATA_TYPE.String) {\n                for (const i in datas) {\n                    lookUpObj[datas[i][groupBy as string]] = datas[i];\n                }\n            }\n            else {\n                let objKey;\n                for (const i in datas) {\n                    objKey = \"\";\n                    for (const column in groupBy) {\n                        objKey += datas[i][groupBy[column]];\n                    }\n                    lookUpObj[objKey] = datas[i];\n                }\n            }\n        }\n        else {\n            const caseQueryLength = Object.keys(groupBy).length;\n            if (caseQueryLength === 1) {\n                const groupByColumn = getObjectFirstKey(groupBy);\n                this.thenEvaluator.setCaseAndColumn(groupBy, groupByColumn);\n                for (const i in datas) {\n                    lookUpObj[this.thenEvaluator.setValue(datas[i]).evaluate()] = datas[i];\n                }\n            }\n            else {\n                let objKey;\n                for (const i in datas) {\n                    objKey = \"\";\n                    this.thenEvaluator.setCaseAndValue(groupBy, datas[i]);\n                    for (const column in groupBy) {\n                        objKey += this.thenEvaluator.setColumn(column).evaluate();\n                    }\n                    lookUpObj[objKey] = datas[i];\n                }\n            }\n        }\n        // free datas memory\n        datas = [];\n        for (const i in lookUpObj) {\n            datas.push(lookUpObj[i]);\n        }\n        this.results = datas;\n    }\n\n    protected executeAggregateGroupBy() {\n        const grpQry = this.query.groupBy as any;\n        let datas = this.results;\n        // free results memory\n        this.results = undefined;\n        const lookUpObj = {};\n        // assign aggregate\n        const aggregateQry = this.query.aggregate;\n\n        let index;\n        let objKey;\n        let value;\n        let columnToAggregate;\n        const calculateAggregate = () => {\n            const getCount = () => {\n                value = lookUpObj[objKey];\n                // get old value\n                value = value ? value[\"count(\" + columnToAggregate + \")\"] : 0;\n                // add with old value if data exist\n                value += datas[index][columnToAggregate] ? 1 : 0;\n                return value;\n            };\n            const getMax = () => {\n                value = lookUpObj[objKey];\n                // get old value\n                value = value ? value[\"max(\" + columnToAggregate + \")\"] : 0;\n                datas[index][columnToAggregate] = datas[index][columnToAggregate] ?\n                    datas[index][columnToAggregate] : 0;\n                // compare between old value and new value\n                return value > datas[index][columnToAggregate] ? value : datas[index][columnToAggregate];\n            };\n            const getMin = () => {\n                value = lookUpObj[objKey];\n                // get old value\n                value = value ? value[\"min(\" + columnToAggregate + \")\"] : Infinity;\n                datas[index][columnToAggregate] = datas[index][columnToAggregate] ?\n                    datas[index][columnToAggregate] : Infinity;\n                // compare between old value and new value\n                return value < datas[index][columnToAggregate] ? value : datas[index][columnToAggregate];\n            };\n            const getSum = () => {\n                value = lookUpObj[objKey];\n                // get old value\n                value = value ? value[\"sum(\" + columnToAggregate + \")\"] : 0;\n                // add with old value if data exist\n                value += datas[index][columnToAggregate] ? datas[index][columnToAggregate] : 0;\n                return value;\n            };\n            const getAvg = () => {\n                value = lookUpObj[objKey];\n                // get old sum value\n                let sumOfColumn = value ? value[\"sum(\" + columnToAggregate + \")\"] : 0;\n                // add with old value if data exist\n                sumOfColumn += datas[index][columnToAggregate] ? datas[index][columnToAggregate] : 0;\n                datas[index][\"sum(\" + columnToAggregate + \")\"] = sumOfColumn;\n                // get old count value\n                value = value ? value[\"count(\" + columnToAggregate + \")\"] : 0;\n                // add with old value if data exist\n                value += datas[index][columnToAggregate] ? 1 : 0;\n                datas[index][\"count(\" + columnToAggregate + \")\"] = value;\n            };\n            for (const prop in aggregateQry) {\n                const aggregateColumn = aggregateQry[prop];\n                const aggregateValType = getDataType(aggregateColumn);\n                let aggregateCalculator;\n                switch (prop) {\n                    case QUERY_OPTION.Count:\n                        aggregateCalculator = getCount;\n                        break;\n                    case QUERY_OPTION.Max:\n                        aggregateCalculator = getMax;\n                        break;\n                    case QUERY_OPTION.Min:\n                        aggregateCalculator = getMin;\n                        break;\n                    case QUERY_OPTION.Sum:\n                        aggregateCalculator = getSum;\n                        break;\n                    case QUERY_OPTION.Avg:\n                        aggregateCalculator = getAvg;\n                        break;\n                }\n                switch (aggregateValType) {\n                    case DATA_TYPE.String:\n                        columnToAggregate = aggregateColumn;\n                        datas[index][`${prop}(${columnToAggregate})`] = aggregateCalculator();\n                        break;\n                    case DATA_TYPE.Array:\n                        for (const item in aggregateColumn) {\n                            columnToAggregate = aggregateColumn[item];\n                            datas[index][`${prop}(${columnToAggregate})`] = aggregateCalculator();\n                        }\n                }\n            }\n        };\n\n        if (getDataType(grpQry) === DATA_TYPE.String) {\n            for (index in datas) {\n                objKey = datas[index][grpQry];\n                calculateAggregate();\n                lookUpObj[objKey] = datas[index];\n            }\n        }\n        else {\n            for (index in datas) {\n                objKey = \"\";\n                for (const column in grpQry) {\n                    objKey += datas[index][grpQry[column]];\n                }\n                calculateAggregate();\n                lookUpObj[objKey] = datas[index];\n            }\n\n        }\n        // free datas memory\n        datas = [];\n        for (const i in lookUpObj) {\n            datas.push(lookUpObj[i]);\n        }\n        // Checking for avg and if exist then fill the datas;\n        if (aggregateQry.avg) {\n            if (getDataType(aggregateQry.avg) === DATA_TYPE.String) {\n                for (index in datas) {\n                    const sumForAvg = datas[index][\"sum(\" + aggregateQry.avg + \")\"],\n                        countForAvg = datas[index][\"count(\" + aggregateQry.avg + \")\"];\n                    datas[index][\"avg(\" + aggregateQry.avg + \")\"] = sumForAvg / countForAvg;\n                    if (aggregateQry.count !== aggregateQry.avg) {\n                        delete datas[index][\"count(\" + aggregateQry.avg + \")\"];\n                    }\n                    if (aggregateQry.sum !== aggregateQry.avg) {\n                        delete datas[index][\"sum(\" + aggregateQry.avg + \")\"];\n                    }\n                }\n            }\n            else {\n                const isCountTypeString = getDataType(aggregateQry.count) === DATA_TYPE.String;\n                const isSumTypeString = getDataType(aggregateQry.sum) === DATA_TYPE.String;\n                for (index in datas) {\n                    for (const column in aggregateQry.avg as any) {\n                        const avgColumn = aggregateQry.avg[column],\n                            sum = datas[index][\"sum(\" + avgColumn + \")\"],\n                            count = datas[index][\"count(\" + avgColumn + \")\"];\n                        datas[index][\"avg(\" + avgColumn + \")\"] = sum / count;\n\n                        if (isCountTypeString) {\n                            if (aggregateQry.count !== avgColumn) {\n                                delete datas[index][\"count(\" + avgColumn + \")\"];\n                            }\n                            else if (aggregateQry.count.indexOf(avgColumn) === -1) {\n                                delete datas[index][\"count(\" + avgColumn + \")\"];\n                            }\n                        }\n\n                        if (isSumTypeString) {\n                            if (aggregateQry.sum !== avgColumn) {\n                                delete datas[index][\"sum(\" + avgColumn + \")\"];\n                            }\n                            else if (aggregateQry.sum.indexOf(avgColumn) === -1) {\n                                delete datas[index][\"sum(\" + avgColumn + \")\"];\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        this.results = datas;\n    }\n}","import { GroupByHelper } from \"./group_by_helper\";\nimport { DATA_TYPE, ERROR_TYPE, QUERY_OPTION, OrderQuery, CaseOption } from \"../../../common/index\";\nimport { LogHelper } from \"../../log_helper\";\nimport { getDataType, removeSpace, isArray } from \"../../utils/index\";\nimport { Column } from \"../../model/index\";\n\nexport class Helper extends GroupByHelper {\n\n    processGroupDistinctAggr() {\n        if (this.query.distinct) {\n            const groupBy = [];\n            const result = this.results[0];\n            for (const key in result) {\n                groupBy.push(key);\n            }\n            const primaryKey = this.getPrimaryKey(this.query.from),\n                index = groupBy.indexOf(primaryKey);\n            groupBy.splice(index, 1);\n            this.query.groupBy = groupBy.length > 0 ? groupBy : null;\n        }\n        if (this.query.groupBy) {\n            if (this.query.aggregate) {\n                this.executeAggregateGroupBy();\n            }\n            else {\n                this.processGroupBy();\n            }\n        }\n        else if (this.query.aggregate) {\n            this.processAggregateQry();\n        }\n    }\n\n    private getOrderColumnInfo_(orderColumn: string): Column {\n        let column: Column;\n        if (this.query.join == null) {\n            column = this.getColumnInfo(orderColumn, this.query.from);\n        }\n        else {\n            const splittedByDot = removeSpace(orderColumn).split(\".\");\n            orderColumn = splittedByDot[1];\n            column = this.getColumnInfo(orderColumn, splittedByDot[0]);\n        }\n        if (column == null) {\n            this.onErrorOccured(new LogHelper(ERROR_TYPE.ColumnNotExist, { column: orderColumn, isOrder: true }), true);\n        }\n        return column;\n    }\n\n    private compareStringInDesc_(a: string, b: string) {\n        return b.localeCompare(a);\n    }\n\n    private compareStringinAsc_(a: string, b: string) {\n        return a.localeCompare(b);\n    }\n\n    private compareDefaultInDesc_(a: string, b) {\n        return new String(b).localeCompare(a);\n    }\n\n    private compareDefaultinAsc_(a, b: string) {\n        return new String(a).localeCompare(b);\n    }\n\n    private compareNumberInDesc_(a: number, b: number) {\n        return b - a;\n    }\n\n    private compareNumberinAsc_(a: number, b: number) {\n        return a - b;\n    }\n\n    private compareDateInDesc_(a: Date, b: Date) {\n        return b.getTime() - a.getTime();\n    }\n\n    private compareDateInAsc_(a: Date, b: Date) {\n        return a.getTime() - b.getTime();\n    }\n\n    private getValInDesc_(value1, value2, caseQuery: { [columnName: string]: [CaseOption] }) {\n        for (const columnName in caseQuery) {\n            this.thenEvaluator.setCaseAndValue(caseQuery, value1);\n            const column1 = this.thenEvaluator.setColumn(columnName).evaluate();\n            this.thenEvaluator.setCaseAndValue(caseQuery, value2);\n            const column2 = this.thenEvaluator.setColumn(columnName).evaluate();\n            switch (typeof value1[column1]) {\n                case DATA_TYPE.String:\n                    return this.compareStringInDesc_(value1[column1], value2[column2]);\n                default:\n                    return this.compareNumberInDesc_(value1[column1], value2[column2]);\n            }\n        }\n    }\n\n    private getValInAsc_(value1, value2, caseQuery: { [columnName: string]: [CaseOption] }) {\n        for (const columnName in caseQuery) {\n            this.thenEvaluator.setCaseAndValue(caseQuery, value1);\n            const column1 = this.thenEvaluator.setColumn(columnName).evaluate();\n            this.thenEvaluator.setCaseAndValue(caseQuery, value2);\n            const column2 = this.thenEvaluator.setColumn(columnName).evaluate();\n            switch (typeof value1[column1]) {\n                case DATA_TYPE.String:\n                    return this.compareStringinAsc_(value1[column1], value2[column2]);\n                default:\n                    return this.compareNumberinAsc_(value1[column1], value2[column2]);\n            }\n        }\n    }\n\n    private getValueComparer_(column: Column, order: OrderQuery): (a, b) => number {\n\n        switch (column.dataType) {\n            case DATA_TYPE.String:\n                return order.type === 'asc' ? this.compareStringinAsc_ : this.compareStringInDesc_;\n            case DATA_TYPE.Number:\n                return order.type === 'asc' ? this.compareNumberinAsc_ : this.compareNumberInDesc_;\n            case DATA_TYPE.DateTime:\n                return order.type === 'asc' ? this.compareDateInAsc_ : this.compareDateInDesc_;\n            default:\n                return order.type === 'asc' ? this.compareDefaultinAsc_ : this.compareDefaultInDesc_;\n        }\n\n    }\n\n    private orderBy_(order: OrderQuery) {\n        order.type = this.getOrderType_(order.type);\n        let orderColumn = order.by;\n        if (orderColumn != null && typeof orderColumn === DATA_TYPE.Object) {\n            if (order.type === \"asc\") {\n                this.results.sort((a, b) => {\n                    return this.getValInAsc_(a, b, orderColumn as any);\n                });\n            }\n            else {\n                this.results.sort((a, b) => {\n                    return this.getValInDesc_(a, b, orderColumn as any);\n                });\n            }\n        }\n        else {\n            const columnInfo = this.getOrderColumnInfo_(orderColumn as string);\n            if (columnInfo != null) {\n                const orderMethod = this.getValueComparer_(columnInfo, order);\n                orderColumn = columnInfo.name;\n                if (order.case == null) {\n                    this.results.sort((a, b) => {\n                        return orderMethod(a[orderColumn as string], b[orderColumn as string]);\n                    });\n                }\n                else {\n                    this.thenEvaluator.setCaseAndColumn({ [orderColumn]: order.case }, orderColumn);\n                    this.results.sort((a, b) => {\n                        return orderMethod(\n                            this.thenEvaluator.setValue(a).evaluate(),\n                            this.thenEvaluator.setValue(b).evaluate()\n                        );\n                    });\n                }\n            }\n        }\n\n    }\n\n    private getOrderType_(type: string) {\n        return type == null ? 'asc' : type.toLowerCase();\n    }\n\n    protected processOrderBy() {\n        const order = this.query.order;\n        if (order && this.results.length > 0 && !this.sorted) {\n            const orderQueryType = getDataType(order);\n            if (orderQueryType === DATA_TYPE.Object) {\n                this.orderBy_(order);\n            }\n            else if (orderQueryType === DATA_TYPE.Array) {\n                this.orderBy_(order[0]);\n                for (let i = 1, length = (order as any).length; i < length; i++) {\n                    if (this.error == null) {\n                        const prevOrderQueryBy = order[i - 1].by;\n                        const currentOrderQuery: OrderQuery = order[i];\n                        let currentorderQueryBy = currentOrderQuery.by;\n                        const orderColumnDetail = this.getOrderColumnInfo_(currentorderQueryBy as string);\n                        if (orderColumnDetail != null) {\n                            currentorderQueryBy = orderColumnDetail.name;\n                            currentOrderQuery.type = this.getOrderType_(currentOrderQuery.type);\n                            const orderMethod = this.getValueComparer_(orderColumnDetail, currentOrderQuery);\n                            this.results.sort((a, b) => {\n                                if (a[prevOrderQueryBy] === b[prevOrderQueryBy]) {\n                                    return orderMethod(\n                                        a[currentorderQueryBy as string],\n                                        b[currentorderQueryBy as string]);\n                                }\n                                return 0;\n                            });\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    protected processAggregateQry() {\n        const datas = this.results;\n        const datasLength = datas.length;\n        const results = {};\n        let columnToAggregate;\n        // free results memory\n        this.results = undefined;\n        const getCount = () => {\n            let result = 0;\n            for (const i in datas) {\n                result += datas[i][columnToAggregate] ? 1 : 0;\n            }\n            return result;\n        };\n        const getMax = () => {\n            let result = 0;\n            for (const i in datas) {\n                result = result > datas[i][columnToAggregate] ?\n                    result : datas[i][columnToAggregate];\n            }\n            return result;\n        };\n        const getMin = () => {\n            let result = Infinity, value = Infinity;\n            for (const i in datas) {\n                value = datas[i][columnToAggregate] ?\n                    datas[i][columnToAggregate] : Infinity;\n                result = result < value ? result : value;\n            }\n            return result;\n        };\n        const getSum = () => {\n            let result = 0;\n            for (const i in datas) {\n                result += datas[i][columnToAggregate];\n            }\n            return result;\n        };\n        const getAvg = () => {\n            let result = 0;\n            for (const i in datas) {\n                result += datas[i][columnToAggregate];\n            }\n            return result / datasLength;\n        };\n        for (const prop in this.query.aggregate) {\n            const aggregateColumn = this.query.aggregate[prop];\n            const aggregateValType = getDataType(aggregateColumn);\n            let aggregateCalculator;\n            switch (prop) {\n                case 'count':\n                    aggregateCalculator = getCount; break;\n                case 'max':\n                    aggregateCalculator = getMax; break;\n                case 'min':\n                    aggregateCalculator = getMin; break;\n                case 'sum':\n                    aggregateCalculator = getSum; break;\n                case 'avg':\n                    aggregateCalculator = getAvg; break;\n            }\n            switch (aggregateValType) {\n                case DATA_TYPE.String:\n                    columnToAggregate = aggregateColumn;\n                    results[`${prop}(${columnToAggregate})`] = aggregateCalculator();\n                    break;\n                case DATA_TYPE.Array:\n                    for (const key in aggregateColumn) {\n                        columnToAggregate = aggregateColumn[key];\n                        results[`${prop}(${columnToAggregate})`] = aggregateCalculator();\n                    }\n            }\n        }\n\n        // add results to the first index of result\n        for (const prop in results) {\n            datas[0][prop] = results[prop];\n        }\n        this.results = [datas[0]];\n    }\n}","import { IError, CONNECTION_STATUS, ERROR_TYPE } from \"../../common/index\";\nimport { KeyStore } from \"../keystore/index\";\nimport { Table, Column } from \"../model/index\";\nimport { LogHelper } from \"../log_helper\";\nimport { BaseDb } from \"./base_db\";\nimport { promise } from \"../helpers/index\";\n\nexport class DropDb extends BaseDb {\n    private onSuccess_: () => void;\n    private onError_: (err: IError) => void;\n\n    constructor(onSuccess: () => void, onError: (err: IError) => void) {\n        super();\n        this.onSuccess_ = onSuccess;\n        this.onError_ = onError;\n    }\n\n    deleteMetaData() {\n        return promise((res, rej) => {\n            KeyStore.remove(`JsStore_${this.dbName}_Db_Version`);\n            this.activeDb.tables.forEach((table: Table) => {\n                KeyStore.remove(`JsStore_${this.dbName}_${table.name}_Version`);\n                table.columns.forEach((column: Column) => {\n                    if (column.autoIncrement) {\n                        KeyStore.remove(`JsStore_${this.dbName}_${table.name}_${column.name}_Value`);\n                    }\n                });\n            });\n            // remove from database_list \n            this.getDbList().then(dbList => {\n                dbList.splice(dbList.indexOf(this.dbName), 1);\n                this.setDbList(dbList).then(() => {\n                    // remove db schema from keystore\n                    KeyStore.remove(`JsStore_${this.dbName}_Schema`).\n                        then(res).catch(rej);\n                });\n            });\n        });\n    }\n\n    deleteDb() {\n        setTimeout(() => {\n            const dropDbRequest = indexedDB.deleteDatabase(this.dbName);\n            dropDbRequest.onblocked = () => {\n                if (this.onError_ != null) {\n                    this.onError_(new LogHelper(ERROR_TYPE.DbBlocked).get());\n                }\n            };\n            dropDbRequest.onerror = (e) => {\n                if (this.onError_ != null) {\n                    this.onError_((event as any).target.error);\n                }\n            };\n            dropDbRequest.onsuccess = () => {\n                this.deleteMetaData().then(() => {\n                    this.onSuccess_();\n                    this.dbStatus.conStatus = CONNECTION_STATUS.Closed;\n                }).catch(this.onError_);\n            };\n        }, 100);\n    }\n}\n","import { QueryExecutor } from \"./query_executor\";\nimport { Config } from \"./config\";\nimport { IdbHelper } from \"./business/index\";\nimport { CONNECTION_STATUS, ERROR_TYPE } from \"../common/index\";\n\nexport const initialize = function () {\n    if (typeof (self as any).alert === 'undefined' && typeof ServiceWorkerGlobalScope === 'undefined') {\n        Config.isRuningInWorker = true;\n        (self as any).onmessage = function (e) {\n            new QueryExecutor().checkConnectionAndExecuteLogic(e.data);\n        };\n    }\n};\n\nconst onIdbNotSupproted = () => {\n    IdbHelper.dbStatus = {\n        conStatus: CONNECTION_STATUS.UnableToStart,\n        lastError: ERROR_TYPE.IndexedDbNotSupported\n    };\n};\n\nconst setCrossBrowserIndexedDb = () => {\n    try {\n        if (!indexedDB) {\n            indexedDB = (self as any).mozIndexedDB ||\n                (self as any).webkitIndexedDB || (self as any).msIndexedDB;\n        }\n        if (indexedDB) {\n            IDBTransaction = IDBTransaction ||\n                (self as any).webkitIDBTransaction || (self as any).msIDBTransaction;\n            (self as any).IDBKeyRange = (self as any).IDBKeyRange ||\n                (self as any).webkitIDBKeyRange || (self as any).msIDBKeyRange;\n        }\n        else {\n            onIdbNotSupproted();\n        }\n    } catch (ex) {\n        onIdbNotSupproted();\n    }\n};\n\nsetCrossBrowserIndexedDb();\ninitialize();\n","export * from './query_executor';\nexport * from './start';\nexport * from './config';\nexport * from './keystore/instance';","import { Table } from \"../model/index\";\nimport { IdbHelper, QueryHelper } from \"../business/index\";\nimport { KeyStore } from \"../keystore/index\";\nimport { promiseAll, promise } from \"../helpers/index\";\nimport { QueryExecutor } from \"../query_executor\";\n\nexport const getAutoIncrementValues = (table: Table): Promise<{ [columnName: string]: number }> => {\n\n    const autoIncColumns = table.columns.filter((col) => {\n        return col.autoIncrement;\n    });\n    return promise((resolve, reject) => {\n        promiseAll(autoIncColumns.map(column => {\n            const autoIncrementKey = `JsStore_${IdbHelper.activeDb.name}_${table.name}_${column.name}_Value`;\n            return KeyStore.get(autoIncrementKey);\n        })).then(results => {\n            const autoIncValues = {};\n            for (let i = 0; i < autoIncColumns.length; i++) {\n                autoIncValues[autoIncColumns[i].name] = results[i];\n            }\n            resolve(autoIncValues);\n        }).catch(reject);\n    });\n};\n\nexport const setAutoIncrementValue = (table: Table, autoIncrementValue: object) => {\n    const keys = Object.keys(autoIncrementValue);\n    return promiseAll(keys.map((columnName) => {\n        const autoIncrementKey = `JsStore_${IdbHelper.activeDb.name}_${table.name}_${columnName}_Value`;\n        const value = autoIncrementValue[columnName];\n        if (QueryExecutor.isTransactionQuery === true) {\n            QueryHelper.autoIncrementValues[table.name][columnName] = value;\n        }\n        return KeyStore.set(\n            autoIncrementKey,\n            value\n        );\n    }));\n};","import { Base } from \"../base\";\nimport { InsertQuery, IError, API } from \"../../../common/index\";\nimport { Table } from \"../../model/index\";\nimport { promiseAll, promise } from \"../../helpers/index\";\nimport { QueryHelper } from \"../query_helper\";\n\nexport class Instance extends Base {\n    private valuesAffected_ = [];\n    query: InsertQuery;\n    table: Table;\n\n    constructor(query: InsertQuery, onSuccess: (rowsInserted: number) => void, onError: (err: IError) => void) {\n        super();\n        this.onError = onError;\n        this.query = query;\n        this.onSuccess = onSuccess;\n        this.tableName = this.query.into;\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Insert, this.query);\n        queryHelper.checkAndModify().then(() => {\n            this.query = queryHelper.query;\n            this.insertData_(this.query.values);\n        }).catch(this.onError);\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.error == null) {\n            this.onSuccess(this.query.return === true ? this.valuesAffected_ : this.rowAffected);\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n\n    private onQueryFinished_() {\n        if (this.isTransaction === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    private insertData_(values: any[]) {\n\n        let objectStore: IDBObjectStore;\n        let onInsertData;\n        let addMethod;\n\n        if (this.query.return) {\n            onInsertData = (value) => {\n                this.valuesAffected_.push(value);\n            };\n\n        }\n        else {\n            onInsertData = (value) => {\n                ++this.rowAffected;\n            };\n        }\n\n        this.createTransaction([this.tableName], this.onTransactionCompleted_);\n        objectStore = this.transaction.objectStore(this.tableName);\n        if (this.query.upsert) {\n            addMethod = (value) => {\n                return objectStore.put(value);\n            };\n        }\n        else {\n            addMethod = (value) => {\n                return objectStore.add(value);\n            };\n        }\n        promiseAll(\n            values.map(function (value) {\n                return promise(function (res, rej) {\n                    const addResult = addMethod(value);\n                    addResult.onerror = rej;\n                    addResult.onsuccess = function () {\n                        onInsertData(value);\n                        res();\n                    };\n                });\n            })\n        ).then(() => {\n            this.onQueryFinished_();\n        }).catch((err) => {\n            this.transaction.abort();\n            this.onErrorOccured(err);\n        });\n    }\n}","import { Base } from \"../base\";\nimport { getDataType } from \"../../utils/index\";\nimport { DATA_TYPE, UpdateQuery } from \"../../../common/index\";\n\nexport const updateValue = (suppliedValue, storedValue) => {\n    for (const key in suppliedValue) {\n        if (getDataType(suppliedValue[key]) !== DATA_TYPE.Object) {\n            storedValue[key] = suppliedValue[key];\n        }\n        else {\n            for (const op in suppliedValue[key]) {\n                switch (op as any) {\n                    case '+': storedValue[key] += suppliedValue[key][op]; break;\n                    case '-': storedValue[key] -= suppliedValue[key][op]; break;\n                    case '*': storedValue[key] *= suppliedValue[key][op]; break;\n                    case '/': storedValue[key] /= suppliedValue[key][op]; break;\n                    case '{push}': storedValue[key].push(suppliedValue[key][op]); break;\n                    default: storedValue[key] = suppliedValue[key];\n                }\n                break;\n            }\n        }\n    }\n    return storedValue;\n};\n\nexport class BaseUpdate extends Base {\n    query: UpdateQuery;\n    protected initTransaction() {\n        this.createTransaction([this.query.in], this.onTransactionCompleted_);\n        this.objectStore = this.transaction.objectStore(this.query.in);\n    }\n\n    protected onQueryFinished() {\n        if (this.isTransaction === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.error) {\n            this.onError(this.error);\n        }\n        else {\n            this.onSuccess(this.rowAffected);\n        }\n    }\n}\n","import { BaseUpdate, updateValue } from \"./base_update\";\n\nexport class NotWhere extends BaseUpdate {\n\n    protected executeWhereUndefinedLogic() {\n        let cursor: IDBCursorWithValue;\n        const cursorRequest: IDBRequest<IDBCursorWithValue> = this.objectStore.openCursor();\n        cursorRequest.onsuccess = (e) => {\n            cursor = (e as any).target.result;\n            if (cursor) {\n                try {\n                    const cursorUpdateRequest = cursor.update(updateValue(this.query.set, cursor.value));\n                    cursorUpdateRequest.onsuccess = () => {\n                        ++this.rowAffected;\n                        cursor.continue();\n                    };\n                    cursorUpdateRequest.onerror = this.onErrorOccured.bind(this);\n                } catch (err) {\n                    this.onErrorOccured(err);\n                    this.transaction.abort();\n                }\n            }\n            else {\n                this.onQueryFinished();\n            }\n\n        };\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { NotWhere } from \"./not_where\";\nimport { updateValue } from \"./base_update\";\nimport { promiseAll, promise } from \"../../helpers/index\";\n\nexport class In extends NotWhere {\n    private executeInLogic(column, values: any[]) {\n        let cursor: IDBCursorWithValue;\n        const columnStore = this.objectStore.index(column);\n        let cursorRequest;\n        const runInLogic: (val) => Promise<void> = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (this.whereCheckerInstance.check(cursor.value)) {\n                            cursor.update(updateValue(this.query.set, cursor.value));\n                            ++this.rowAffected;\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n}","import { In } from \"./in\";\nimport { updateValue } from \"./base_update\";\n\nexport class Regex extends In {\n    protected executeRegexLogic(column: string, exp: RegExp) {\n        let cursor: IDBCursorWithValue;\n        this.regexExpression = exp;\n        const cursorOpenRequest = this.objectStore.index(column).openCursor();\n        cursorOpenRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.regexTest(cursor.key) &&\n                    this.whereCheckerInstance.check(cursor.value)) {\n                    try {\n                        const cursorUpdateRequest = cursor.update(updateValue(this.query.set, cursor.value));\n                        cursorUpdateRequest.onsuccess = () => {\n                            ++this.rowAffected;\n                            cursor.continue();\n                        };\n                        cursorUpdateRequest.onerror = this.onErrorOccured.bind(this);\n                    } catch (err) {\n                        this.transaction.abort();\n                        this.onErrorOccured(err);\n                    }\n                }\n                else {\n                    cursor.continue();\n                }\n\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n        cursorOpenRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { updateValue } from \"./base_update\";\nimport { Regex } from \"./regex\";\n\nexport class Where extends Regex {\n    protected executeWhereLogic(column, value, op) {\n        let cursor: IDBCursorWithValue,\n            cursorRequest;\n        value = op ? value[op] : value;\n        cursorRequest = this.objectStore.index(column).openCursor(this.getKeyRange(value, op));\n\n        cursorRequest.onsuccess = (e) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.whereCheckerInstance.check(cursor.value)) {\n                    try {\n                        const cursorUpdateRequest = cursor.update(updateValue(this.query.set, cursor.value));\n                        cursorUpdateRequest.onsuccess = () => {\n                            ++this.rowAffected;\n                            cursor.continue();\n                        };\n                        cursorUpdateRequest.onerror = this.onErrorOccured.bind(this);\n                    } catch (err) {\n                        this.transaction.abort();\n                        this.onErrorOccured(err);\n                    }\n                }\n                else {\n                    cursor.continue();\n                }\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n\n    }\n}","import { Where } from \"./where\";\nimport * as Select from \"../select/index\";\nimport { QueryHelper } from \"../query_helper\";\nimport { isArray } from \"../../utils/index\";\nimport { UpdateQuery, IError, API, SelectQuery, QUERY_OPTION } from \"../../../common/index\";\n\nexport class Instance extends Where {\n\n    constructor(query: UpdateQuery, onSuccess: (rowsUpdated: number) => void, onError: (err: IError) => void) {\n        super();\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n        this.query = query;\n        this.tableName = this.query.in;\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Update, this.query);\n        queryHelper.checkAndModify();\n        if (queryHelper.error == null) {\n            try {\n                this.initTransaction();\n                if (this.query.where != null) {\n                    if (this.query.where.or || isArray(this.query.where)) {\n                        this.executeComplexLogic_();\n                    }\n                    else {\n                        this.goToWhereLogic();\n                    }\n                }\n                else {\n                    this.executeWhereUndefinedLogic();\n                }\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onError(\n                queryHelper.error\n            );\n        }\n    }\n\n    private executeComplexLogic_() {\n        const selectObject = new Select.Instance({\n            from: this.query.in,\n            where: this.query.where,\n            ignoreCase: this.query.ignoreCase\n        } as SelectQuery, (results: any[]) => {\n            const key = this.getPrimaryKey(this.query.in);\n            const inQuery = [];\n            results.forEach((value) => {\n                inQuery.push(value[key]);\n            });\n            results = null;\n            const whereQry = { [key]: { [QUERY_OPTION.In]: inQuery } };\n            this.query.ignoreCase = null;\n            this.query[QUERY_OPTION.Where] = whereQry;\n            this.initTransaction();\n            this.goToWhereLogic();\n        }, this.onError);\n        selectObject.isSubQuery = true;\n        selectObject.execute();\n    }\n}\n","import { WhereBase } from \"../where_base\";\nimport { RemoveQuery } from \"../../../common/index\";\n\nexport class BaseRemove extends WhereBase {\n\n    isOr: boolean;\n    query: RemoveQuery;\n\n    protected onQueryFinished() {\n        // ff\n    }\n}\n","import { BaseRemove } from \"./base_remove\";\n\nexport class NotWhere extends BaseRemove {\n    protected executeWhereUndefinedLogic() {\n        let cursor;\n        const cursorRequest = this.objectStore.openCursor();\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                cursor.delete();\n                ++this.rowAffected;\n                (cursor as any).continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { NotWhere } from \"./not_where\";\nimport { promiseAll, promise } from \"../../helpers/index\";\n\nexport class In extends NotWhere {\n    protected executeInLogic(column, values) {\n        let cursor: IDBCursorWithValue, cursorRequest;\n        const runInLogic: (val) => Promise<void> = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = this.objectStore.index(column).openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (this.whereCheckerInstance.check(cursor.value)) {\n                            cursor.delete();\n                            ++this.rowAffected;\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n}","import { In } from \"./in\";\n\nexport class Regex extends In {\n    protected executeRegexLogic(column: string, exp: RegExp) {\n        let cursor: IDBCursorWithValue;\n        this.regexExpression = exp;\n        const cursorRequest = this.objectStore.index(column).openCursor();\n\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.regexTest(cursor.key) &&\n                    this.whereCheckerInstance.check(cursor.value)) {\n                    cursor.delete();\n                    ++this.rowAffected;\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}","import { Regex } from \"./regex\";\n\nexport class Where extends Regex {\n    protected executeWhereLogic(column, value, op) {\n        let cursor: IDBCursorWithValue,\n            cursorRequest;\n        value = op ? value[op] : value;\n        cursorRequest = this.objectStore.index(column).openCursor(this.getKeyRange(value, op));\n\n        cursorRequest.onsuccess = (e) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.whereCheckerInstance.check(cursor.value)) {\n                    cursor.delete();\n                    ++this.rowAffected;\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { Where } from \"./where\";\nimport { RemoveQuery, QUERY_OPTION, API, IError } from \"../../../common/index\";\nimport * as Select from '../select/index';\nimport { QueryHelper } from \"../index\";\nimport { getObjectFirstKey, isArray } from \"../../utils/index\";\n\nexport class Instance extends Where {\n\n\n    constructor(\n        query: RemoveQuery, onSuccess: (recordRemoved: number) => void,\n        onError: (err: IError) => void\n    ) {\n        super();\n        this.query = query;\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Remove, this.query);\n        queryHelper.checkAndModify();\n        if (queryHelper.error == null) {\n            try {\n                this.initTransaction_();\n                if (this.query.where != null) {\n                    if (isArray(this.query.where)) {\n                        this.processWhereArrayQry();\n                    }\n                    else {\n                        this.processWhere_();\n                    }\n                }\n                else {\n                    this.executeWhereUndefinedLogic();\n                }\n\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onError(\n                queryHelper.error\n            );\n        }\n    }\n\n    private processWhereArrayQry() {\n        const selectObject = new Select.Instance(this.query, (results) => {\n            const keyList = [];\n            const pkey = this.getPrimaryKey(this.query.from);\n            results.forEach((item) => {\n                keyList.push(item[pkey]);\n            });\n            results = null;\n            const whereQry = { [pkey]: { [QUERY_OPTION.In]: keyList } };\n            this.query[QUERY_OPTION.Where] = whereQry;\n            this.processWhere_();\n        }, this.onError);\n        selectObject.isSubQuery = true;\n        selectObject.execute();\n    }\n\n    private processWhere_() {\n        if (this.query.where.or) {\n            this.processOrLogic();\n        }\n        this.goToWhereLogic();\n    }\n\n    private initTransaction_() {\n        this.createTransaction([this.query.from], this.onTransactionCompleted_);\n        this.objectStore = this.transaction.objectStore(this.query.from);\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.error == null) {\n            this.onSuccess(this.rowAffected);\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n\n    protected onQueryFinished() {\n        if (this.isOr === true) {\n            this.orQuerySuccess_();\n        }\n        else if (this.isTransaction === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    private orQuerySuccess_() {\n        const key = getObjectFirstKey((this as any)._orInfo.OrQuery);\n        if (key != null) {\n            const where = {};\n            where[key] = (this as any)._orInfo.OrQuery[key];\n            delete (this as any)._orInfo.OrQuery[key];\n            this.query.where = where;\n            this.goToWhereLogic();\n        }\n        else {\n            this.isOr = true;\n        }\n    }\n\n    private processOrLogic() {\n        this.isOr = true;\n        (this as any)._orInfo = {\n            OrQuery: this.query.where.or\n        };\n\n        // free or memory\n        delete this.query.where.or;\n    }\n}","import { WhereBase } from \"../where_base\";\nimport { CountQuery } from \"../../../common/index\";\n\nexport class BaseCount extends WhereBase {\n    resultCount = 0;\n    query: CountQuery;\n\n    protected onQueryFinished() {\n        if (this.isTransaction === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    protected onTransactionCompleted_ = () => {\n        if (this.error == null) {\n            this.onSuccess(this.resultCount);\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n}\n","import { BaseCount } from \"./base_count\";\n\nexport class NotWhere extends BaseCount {\n    protected executeWhereUndefinedLogic() {\n        let countRequest;\n        if (this.objectStore.count) {\n            countRequest = this.objectStore.count();\n            countRequest.onsuccess = () => {\n                this.resultCount = countRequest.result;\n                this.onQueryFinished();\n            };\n        }\n        else {\n            let cursor;\n            countRequest = this.objectStore.openCursor();\n            countRequest.onsuccess = (e: any) => {\n                cursor = e.target.result;\n                if (cursor) {\n                    ++this.resultCount;\n                    cursor.continue();\n                }\n                else {\n                    this.onQueryFinished();\n                }\n            };\n        }\n        countRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { NotWhere } from \"./not_where\";\nimport { promiseAll, promise } from \"../../helpers/index\";\n\nexport class In extends NotWhere {\n    protected executeInLogic(column, values) {\n        let cursor: IDBCursorWithValue, cursorRequest;\n        const columnStore = this.objectStore.index(column);\n        let runInLogic: (val) => Promise<void> = (value) => {\n            return promise<void>((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (this.whereCheckerInstance.check(cursor.value)) {\n                            ++this.resultCount;\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        if (this.objectStore.count) {\n            runInLogic = (value) => {\n                return promise((res, rej) => {\n                    cursorRequest = columnStore.count(this.getKeyRange(value));\n                    cursorRequest.onsuccess = (e) => {\n                        this.resultCount += e.target.result;\n                        res();\n                    };\n                    cursorRequest.onerror = rej;\n                });\n            };\n        }\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n}","import { In } from \"./in\";\nexport class Regex extends In {\n    protected executeRegexLogic(column: string, exp: RegExp) {\n        let cursor: IDBCursorWithValue;\n        this.regexExpression = exp;\n        const cursorRequest = this.objectStore.index(column).openCursor();\n\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.regexTest(cursor.key) &&\n                    this.whereCheckerInstance.check(cursor.value)) {\n                    ++this.resultCount;\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n\n    }\n}","import { Regex } from \"./regex\";\n\nexport class Where extends Regex {\n    protected executeWhereLogic(column, value, op) {\n        value = op ? value[op] : value;\n        let cursorRequest;\n        let cursor: IDBCursorWithValue;\n        let initCursorAndFilter;\n        if (Object.keys(this.query.where).length === 1 && this.objectStore.count) {\n            initCursorAndFilter = () => {\n                cursorRequest = this.objectStore.index(column).count(this.getKeyRange(value, op));\n                cursorRequest.onsuccess = () => {\n                    this.resultCount = cursorRequest.result;\n                    this.onQueryFinished();\n                };\n            };\n\n        }\n        else {\n            initCursorAndFilter = () => {\n                cursorRequest = this.objectStore.index(column).openCursor(this.getKeyRange(value, op));\n                cursorRequest.onsuccess = (e) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (this.whereCheckerInstance.check(cursor.value)) {\n                            ++this.resultCount;\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        this.onQueryFinished();\n                    }\n                };\n            };\n        }\n        initCursorAndFilter();\n\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}","import { Where } from \"./where\";\nimport {  IError, API, CountQuery, IDB_MODE } from \"../../../common/index\";\nimport * as Select from '../select/index';\nimport { QueryHelper } from \"../query_helper\";\nimport { isArray } from \"../../utils/index\";\n\nexport class Instance extends Where {\n\n    constructor(query: CountQuery, onSuccess: (noOfRecord: number) => void, onError: (error: IError) => void) {\n        super();\n        this.onError = onError;\n        this.onSuccess = onSuccess;\n        this.query = query;\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Count, this.query);\n        queryHelper.checkAndModify();\n        if (queryHelper.error == null) {\n            try {\n                const getDataFromSelect = () => {\n                    const selectInstance = new Select.Instance(this.query as any,\n                        (results) => {\n                            this.resultCount = results.length;\n                            this.onTransactionCompleted_();\n                        }, this.onError);\n                    selectInstance.execute();\n                };\n                if (this.query.join == null) {\n                    if (this.query.where != null) {\n                        if (this.query.where.or || isArray(this.query.where)) {\n                            getDataFromSelect();\n                        }\n                        else {\n                            this.initTransaction_();\n                            this.goToWhereLogic();\n                        }\n                    }\n                    else {\n                        this.initTransaction_();\n                        this.executeWhereUndefinedLogic();\n                    }\n                }\n                else {\n                    getDataFromSelect();\n                }\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onError(\n                queryHelper.error\n            );\n        }\n    }\n\n    private initTransaction_() {\n        this.createTransaction([this.query.from], this.onTransactionCompleted_, IDB_MODE.ReadOnly);\n        this.objectStore = this.transaction.objectStore(this.query.from);\n    }\n}","import * as Select from './instance';\nimport { QUERY_OPTION, DATA_TYPE, ERROR_TYPE, JoinQuery } from \"../../../common/index\";\nimport { Helper } from \"./orderby_helper\";\nimport { LogHelper } from \"../../log_helper\";\nimport { getDataType, removeSpace } from \"../../utils/index\";\n\nexport class Join extends Helper {\n\n    private joinQueryStack_: JoinQuery[] = [];\n    private currentQueryStackIndex_ = 0;\n    tablesFetched = [];\n\n    executeJoinQuery() {\n        const query = this.query;\n        if (getDataType(query.join) === DATA_TYPE.Object) {\n            this.joinQueryStack_ = [query.join as JoinQuery];\n        }\n        else {\n            this.joinQueryStack_ = query.join as JoinQuery[];\n        }\n        // get the data for first table\n        const tableName = query.from;\n        new Select.Instance({\n            from: tableName,\n            where: query.where,\n            case: query.case,\n            flatten: query.flatten\n        }, results => {\n            this.results = results.map((item) => {\n                return {\n                    [this.currentQueryStackIndex_]: item\n                };\n            });\n            this.tablesFetched.push(tableName);\n            this.startExecutingJoinLogic_();\n        }, this.onError).execute();\n    }\n\n    private onJoinQueryFinished_() {\n        if (this.error == null) {\n            if (this.results.length > 0) {\n\n                if (this.query[QUERY_OPTION.Skip] && !this.query[QUERY_OPTION.Limit]) {\n                    this.results.splice(0, this.query[QUERY_OPTION.Skip]);\n                }\n\n                try {\n                    let results = [];\n                    const tables = Object.keys(this.results[0]);\n                    const tablesLength = tables.length;\n                    const mapWithAlias = (query: JoinQuery, value: object) => {\n                        if (query.as != null) {\n                            for (const key in query.as) {\n                                if (value[(query.as as any)[key]] === undefined) {\n                                    value[(query.as as any)[key]] = value[key];\n                                    delete value[key];\n                                }\n                            }\n                        }\n                        return value;\n                    };\n                    this.results.forEach((result) => {\n                        let data = result[\"0\"]; // first table data\n                        for (let i = 1; i < tablesLength; i++) {\n                            const query = this.joinQueryStack_[i - 1];\n                            data = { ...data, ...mapWithAlias(query, result[i]) };\n                        }\n                        results.push(data);\n                    });\n                    this.results = results;\n                    // free results memory\n                    results = null;\n                    if (process.env.NODE_ENV === 'dev') {\n                        try {\n                            this.processOrderBy();\n                        }\n                        catch (ex) {\n                            this.onError({\n                                message: ex.message,\n                                type: ERROR_TYPE.InvalidOrderQuery\n                            });\n                            return;\n                        }\n                    }\n                    else {\n                        this.processOrderBy();\n                    }\n\n                    if (process.env.NODE_ENV === 'dev') {\n                        try {\n                            this.processGroupDistinctAggr();\n                        }\n                        catch (ex) {\n                            this.onError({\n                                message: ex.message,\n                                type: ERROR_TYPE.InvalidGroupQuery\n                            });\n                            return;\n                        }\n                    }\n                    else {\n                        this.processGroupDistinctAggr();\n                    }\n                }\n                catch (ex) {\n                    this.onError({\n                        message: ex.message,\n                        type: ERROR_TYPE.InvalidJoinQuery\n                    });\n                    return;\n                }\n\n                if (this.query[QUERY_OPTION.Skip] && this.query[QUERY_OPTION.Limit]) {\n                    this.results.splice(0, this.query[QUERY_OPTION.Skip]);\n                    this.results = this.results.slice(0, this.query[QUERY_OPTION.Limit]);\n                }\n                else if (this.query[QUERY_OPTION.Limit]) {\n                    this.results = this.results.slice(0, this.query[QUERY_OPTION.Limit]);\n                }\n            }\n            this.onSuccess(this.results);\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n\n    private startExecutingJoinLogic_() {\n        const query = this.joinQueryStack_[this.currentQueryStackIndex_];\n        if (query) {\n            try {\n                let jointblInfo = this.getJoinTableInfo_(query.on);\n                // table 1 is fetched & table2 needs to be fetched for join\n                if (query.with === jointblInfo.table1.table) {\n                    jointblInfo = {\n                        table1: jointblInfo.table2,\n                        table2: jointblInfo.table1\n                    };\n                }\n\n                if (process.env.NODE_ENV === 'dev') {\n                    this.checkJoinQuery_(jointblInfo, query);\n                    if (this.error != null) {\n                        return this.onJoinQueryFinished_();\n                    }\n                }\n\n                new Select.Instance({\n                    from: query.with,\n                    where: query.where,\n                    case: query.case,\n                    flatten: query.flatten\n                }, results => {\n                    this.jointables(query.type, jointblInfo, results);\n                    this.tablesFetched.push(jointblInfo.table2.table);\n                    ++this.currentQueryStackIndex_;\n                    this.startExecutingJoinLogic_();\n                }, this.onError).execute();\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onJoinQueryFinished_();\n        }\n    }\n\n    private jointables(joinType: string, jointblInfo: JoinTableInfo, secondtableData: any[]) {\n\n        const results = [];\n        const column1 = jointblInfo.table1.column;\n        const column2 = jointblInfo.table2.column;\n        const table1Index = this.tablesFetched.indexOf(jointblInfo.table1.table);\n        const table2Index = this.currentQueryStackIndex_ + 1;\n        const performInnerJoin = () => {\n            let index = 0;\n            this.results.forEach(valueFromFirstTable => {\n                secondtableData.forEach((valueFromSecondTable) => {\n                    if (valueFromFirstTable[table1Index][column1] === valueFromSecondTable[column2]) {\n                        results[index] = { ...valueFromFirstTable };\n                        results[index++][table2Index] = valueFromSecondTable;\n                    }\n                });\n            });\n        };\n        const performleftJoin = () => {\n            let index = 0;\n            let valueMatchedFromSecondTable: any[];\n            let callBack;\n            const columnDefaultValue = {};\n            this.getTable(jointblInfo.table2.table).columns.forEach(col => {\n                columnDefaultValue[col.name] = null;\n            });\n            this.results.forEach((valueFromFirstTable) => {\n                valueMatchedFromSecondTable = [];\n                if (table2Index === 1) {\n                    callBack = function (valueFromSecondTable) {\n                        if (valueFromFirstTable[table1Index][column1] === valueFromSecondTable[column2]) {\n                            valueMatchedFromSecondTable.push(valueFromSecondTable);\n                        }\n                    };\n                }\n                else {\n                    callBack = function (valueFromSecondTable) {\n                        const value = valueFromFirstTable[table1Index];\n                        if (value != null && value[column1] === valueFromSecondTable[column2]) {\n                            valueMatchedFromSecondTable.push(valueFromSecondTable);\n                        }\n                    };\n                }\n                secondtableData.forEach(callBack);\n                if (valueMatchedFromSecondTable.length === 0) {\n                    valueMatchedFromSecondTable = [columnDefaultValue];\n                }\n                valueMatchedFromSecondTable.forEach(function (value) {\n                    results[index] = { ...valueFromFirstTable };\n                    results[index++][table2Index] = value;\n                });\n            });\n        };\n        switch (joinType) {\n            case \"left\":\n                performleftJoin(); break;\n            default:\n                performInnerJoin();\n        }\n        this.results = results;\n    }\n\n    private getJoinTableInfo_(joinOn: string) {\n        joinOn = removeSpace(joinOn);\n        const splittedjoinOn = joinOn.split(\"=\");\n        const splittedjoinOnbydotFirst = splittedjoinOn[0].split(\".\");\n        const splittedjoinOnbydotSecond = splittedjoinOn[1].split(\".\");\n        const info = {\n            table1: {\n                table: splittedjoinOnbydotFirst[0],\n                column: splittedjoinOnbydotFirst[1]\n            },\n            table2: {\n                table: splittedjoinOnbydotSecond[0],\n                column: splittedjoinOnbydotSecond[1]\n            }\n        } as JoinTableInfo;\n        return info;\n    }\n\n    private checkJoinQuery_(jointblInfo: JoinTableInfo, qry: JoinQuery) {\n        const table1 = jointblInfo.table1;\n        const table2 = jointblInfo.table2;\n        const tableSchemaOf1stTable = this.getTable(table1.table);\n        const tableSchemaOf2ndTable = this.getTable(table2.table);\n        let err: LogHelper;\n\n        // check on info & with info \n        if (qry.with !== table2.table) {\n            err = new LogHelper(ERROR_TYPE.InvalidJoinQuery,\n                `on value should contains value of with`\n            );\n        }\n\n        // check for column existance\n\n        if (tableSchemaOf1stTable.columns.find(q => q.name === table1.column) == null) {\n            err = new LogHelper(ERROR_TYPE.InvalidJoinQuery,\n                `column ${table1.column} does not exist in table ${table1.table}`\n            );\n        }\n        else if (tableSchemaOf2ndTable.columns.find(q => q.name === table2.column) == null) {\n            err = new LogHelper(ERROR_TYPE.InvalidJoinQuery,\n                `column ${table2.column} does not exist in table ${table2.table}`\n            );\n        }\n\n        // check for column match in both table\n        if (qry.as == null) {\n            qry.as = {};\n        }\n        tableSchemaOf1stTable.columns.every(function (column) {\n            const columnFound = tableSchemaOf2ndTable.columns.find(q => q.name === column.name && q.name !== table1.column);\n            if (columnFound != null && qry.as[columnFound.name] == null) {\n                err = new LogHelper(ERROR_TYPE.InvalidJoinQuery,\n                    `column ${column.name} exist in both table ${table1.table} & ${table2.table}`\n                );\n                return false;\n            }\n            return true;\n        });\n        if (err != null) {\n            this.onErrorOccured(err, true);\n        }\n    }\n}\n\ntype JoinTableInfo = {\n    table1: { table: string, column: string }\n    table2: { table: string, column: string }\n};","export const getKeys = (value) => {\n    return Object.keys(value);\n};","export const isObject = (value) => {\n    return typeof value === 'object';\n};","import { SelectQuery, IError, IDB_MODE, QUERY_OPTION, API } from \"../../../common/index\";\nimport { Join } from \"./join\";\nimport { QueryHelper } from \"../query_helper\";\nimport { isArray, getObjectFirstKey, isObject, getKeys } from \"../../utils/index\";\n\nexport class Instance extends Join {\n\n    constructor(query: SelectQuery, onSuccess: (results: object[]) => void, onError: (err: IError) => void) {\n        super();\n        this.onError = onError;\n        this.onSuccess = onSuccess;\n        this.query = query;\n        this.tableName = query.from;\n        this.setPushResult();\n        if (isArray(this.query.where)) {\n            this.isArrayQry = true;\n            this.setLimitAndSkipEvaluationAtEnd_();\n        }\n        else {\n            this.skipRecord = query.skip;\n            this.limitRecord = query.limit;\n        }\n        if (query.order) {\n            if (isArray(query.order) || query.order.case || isObject(query.order.by)) {\n                this.query.order.idbSorting = false;\n            }\n            this.setLimitAndSkipEvaluationAtEnd_();\n        }\n        else if (query.groupBy) {\n            this.setLimitAndSkipEvaluationAtEnd_();\n        }\n\n    }\n\n    private setLimitAndSkipEvaluationAtEnd_() {\n        if (this.query.limit) {\n            this.shouldEvaluateLimitAtEnd = true;\n        }\n        if (this.query.skip) {\n            this.shouldEvaluateSkipAtEnd = true;\n        }\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Select, this.query);\n        queryHelper.checkAndModify();\n        if (queryHelper.error == null) {\n            try {\n                if (this.query.join == null) {\n                    if (this.query.where != null) {\n                        this.initTransaction_();\n                        if (isArray(this.query.where)) {\n                            this.processWhereArrayQry();\n                        }\n                        else {\n                            this.processWhere_();\n                        }\n                    }\n                    else {\n                        this.initTransaction_();\n                        this.executeWhereUndefinedLogic();\n                    }\n\n                }\n                else {\n                    this.executeJoinQuery();\n                }\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onError(\n                queryHelper.error\n            );\n        }\n    }\n\n\n    private processWhereArrayQry() {\n        this.isArrayQry = true;\n        const whereQuery = this.query.where,\n            pKey = this.getPrimaryKey(this.query.from);\n        let isFirstWhere = true, output = [], operation;\n\n        const isItemExist = (keyValue) => {\n            return output.findIndex(item => item[pKey] === keyValue) >= 0;\n        };\n        const onSuccess = () => {\n            if (operation === QUERY_OPTION.And) {\n                const doAnd = () => {\n                    let andResults = [];\n                    this.results.forEach((item) => {\n                        if (isItemExist(item[pKey])) {\n                            andResults.push(item);\n                        }\n                    });\n                    output = andResults;\n                    andResults = null;\n                };\n\n                if (isFirstWhere === true) {\n                    output = this.results;\n                }\n                else if (output.length > 0) {\n                    doAnd();\n                }\n            }\n            else {\n                if (output.length > 0) {\n                    this.results = [...output, ...this.results];\n                    this.removeDuplicates();\n                    output = this.results;\n                }\n                else {\n                    output = this.results;\n                }\n            }\n            isFirstWhere = false;\n            if (whereQuery.length > 0) {\n                this.results = [];\n                processFirstQry();\n            }\n            else {\n                this.results = output;\n                if (this.isSubQuery === true) {\n                    this.onTransactionCompleted_();\n                }\n            }\n\n        };\n        const processFirstQry = () => {\n            this.query.where = whereQuery.shift();\n            if (this.query.where[QUERY_OPTION.Or]) {\n                if (Object.keys(this.query.where).length === 1) {\n                    operation = QUERY_OPTION.Or;\n                    this.query.where = this.query.where[QUERY_OPTION.Or];\n                    this.onWhereArrayQrySuccess = onSuccess;\n                }\n                else {\n                    operation = QUERY_OPTION.And;\n                    this.onWhereArrayQrySuccess = onSuccess;\n                }\n            }\n            else {\n                operation = QUERY_OPTION.And;\n                this.onWhereArrayQrySuccess = onSuccess;\n            }\n            this.processWhere_();\n        };\n        processFirstQry();\n    }\n\n    protected onQueryFinished() {\n        if (this.isOr === true) {\n            this.orQuerySuccess_();\n        }\n        else if (this.isArrayQry === true) {\n            this.onWhereArrayQrySuccess();\n        }\n        else if (this.isTransaction === true || this.isSubQuery === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    private initTransaction_() {\n        this.createTransaction([this.tableName], this.onTransactionCompleted_, IDB_MODE.ReadOnly);\n        this.objectStore = this.transaction.objectStore(this.tableName);\n    }\n\n    private processWhere_() {\n        if (this.query.where.or) {\n            this.processOrLogic_();\n        }\n        this.goToWhereLogic();\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.error == null) {\n            if (this.query.flatten) {\n                debugger;\n                const flattendData = [];\n                const indexToDelete = {};\n                this.query.flatten.forEach(column => {\n                    this.results.forEach((data, i) => {\n                        data[column].forEach(item => {\n                            flattendData.push(\n                                { ...data, ...{ [column]: item } }\n                            );\n                        });\n                        indexToDelete[i] = true;\n                    });\n                });\n                let itemsDeleted = 0;\n                getKeys(indexToDelete).forEach(key => {\n                    this.results.splice(Number(key) - itemsDeleted, 1);\n                    ++itemsDeleted;\n                });\n                this.results = this.results.concat(flattendData);\n            }\n            this.processOrderBy();\n            if (!this.error) {\n                this.processGroupDistinctAggr();\n                if (this.shouldEvaluateSkipAtEnd) {\n                    this.results.splice(0, this.query.skip);\n                }\n                if (this.shouldEvaluateLimitAtEnd) {\n                    this.results = this.results.slice(0, this.query.limit);\n                }\n                this.onSuccess(this.results);\n            }\n            else {\n                this.onError(this.error);\n            }\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n\n    private orQueryFinish_() {\n        this.isOr = false;\n        this.results = this.orInfo.results;\n        // free or info memory\n        this.orInfo = null;\n        this.removeDuplicates();\n        this.onQueryFinished();\n    }\n\n    private orQuerySuccess_() {\n        this.orInfo.results = [... this.orInfo.results, ...this.results];\n        if (!this.query.limit || (this.query.limit > this.orInfo.results.length)) {\n            this.results = [];\n            const key = getObjectFirstKey(this.orInfo.orQuery);\n            if (key != null) {\n                const where = {};\n                where[key] = this.orInfo.orQuery[key];\n                delete this.orInfo.orQuery[key];\n                this.query.where = where;\n                this.goToWhereLogic();\n            }\n            else {\n                this.orQueryFinish_();\n            }\n        }\n        else {\n            this.orQueryFinish_();\n        }\n    }\n\n    private processOrLogic_() {\n        this.isOr = true;\n        this.orInfo = {\n            orQuery: this.query.where.or,\n            results: []\n        };\n        // free or memory\n        delete this.query.where.or;\n    }\n}","import { DATA_TYPE } from \"../../common/index\";\n\nexport const getDataType = (value) => {\n    if (value == null) {\n        return DATA_TYPE.Null;\n    }\n    const type = typeof value;\n    switch (type) {\n        case 'object':\n            if (Array.isArray(value)) {\n                return DATA_TYPE.Array;\n            }\n            else if (value.getDate && value.getTime) {\n                return DATA_TYPE.DateTime;\n            }\n        default:\n            return type;\n    }\n}","export const isArray = (value) => {\n    return Array.isArray(value);\n};","export const getObjectFirstKey = (value) => {\n    for (const key in value) {\n        return key;\n    }\n    return null;\n};","export const removeSpace = (value: string) => {\n    return value.replace(/\\s/g, '');\n};","import {\n    TranscationQuery, WebWorkerRequest, SelectQuery, RemoveQuery,\n    CountQuery, UpdateQuery, InsertQuery, ERROR_TYPE, API, IError\n} from \"../../../common/index\";\nimport { Base } from \"../base\";\nimport * as Select from '../select/index';\nimport * as Count from '../count/index';\nimport * as Insert from '../insert/index';\nimport * as Remove from '../remove/index';\nimport * as Update from '../update/index';\nimport { QueryHelper } from \"../query_helper\";\nimport { LogHelper } from \"../../log_helper\";\nimport { promise, promiseAll, getAutoIncrementValues } from \"../../helpers/index\";\nimport { Config } from \"../../config\";\n\nexport class Instance extends Base {\n    query: TranscationQuery;\n    results;\n    requestQueue: WebWorkerRequest[] = [];\n    isQueryExecuting = false;\n\n    isTxStarted_ = false;\n\n    constructor(qry: TranscationQuery, onSuccess: (results: any) => void, onError: (err: IError) => void) {\n        super();\n        this.query = qry;\n        this.onError = onError;\n        this.onSuccess = onSuccess;\n        this.results = {};\n    }\n\n    execute() {\n        const notExistingTable = this.getNotExistingTable_(this.query.tables);\n        if (notExistingTable != null) {\n            this.onError(new LogHelper(ERROR_TYPE.TableNotExist, { tableName: notExistingTable }).get());\n            return;\n        }\n        promiseAll<number>(this.query.tables.map(table => {\n            return getAutoIncrementValues(this.getTable(table));\n        })).then(results => {\n            results.forEach((result: any, index) => {\n                QueryHelper.autoIncrementValues[this.query.tables[index]] = result;\n            });\n            this.startExecution_();\n        }).catch(this.onError);\n    }\n\n    private startExecution_() {\n        const select = (qry: SelectQuery) => {\n            return this.pushRequest_({\n                name: API.Select,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const insert = (qry: InsertQuery) => {\n            return this.pushRequest_({\n                name: API.Insert,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const update = (qry: UpdateQuery) => {\n            return this.pushRequest_({\n                name: API.Update,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const remove = (qry: RemoveQuery) => {\n            return this.pushRequest_({\n                name: API.Remove,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const count = (qry: CountQuery) => {\n            return this.pushRequest_({\n                name: API.Count,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const setResult = (key: string, value) => {\n            this.results[key] = value;\n        };\n        const getResult = (key: string) => {\n            return this.results[key];\n        };\n        const abort = (msg: string) => {\n            this.abortTransaction_(msg);\n        };\n\n        const start = () => {\n            this.checkQueries_(this.requestQueue).then((results) => {\n                this.startTransaction_();\n            }).catch((err) => {\n                this.onError(err);\n            });\n        };\n        let txLogic = null;\n        if (Config.isRuningInWorker === true) {\n            eval(\"txLogic =\" + this.query.logic);\n\n        }\n        else {\n            txLogic = this.query.logic;\n        }\n        txLogic.call(\n            this,\n            {\n                data: this.query.data,\n                insert, select, update, remove,\n                count, setResult, getResult, abort, start\n            }\n        );\n\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`transaction query started`);\n        }\n    }\n\n    private startTransaction_() {\n        try {\n            this.isTxStarted_ = true;\n            this.initTransaction_(this.query.tables);\n            this.processExecutionOfQry_();\n        }\n        catch (ex) {\n            this.onExceptionOccured(ex);\n        }\n    }\n\n    private initTransaction_(tableNames: string[]) {\n        this.createTransaction(tableNames, this.onTransactionCompleted_.bind(this));\n    }\n\n    private onTransactionCompleted_() {\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`transaction finished`);\n        }\n        this.onSuccess(this.results);\n    }\n\n    private onRequestFinished_(result) {\n        const finisehdRequest = this.requestQueue.shift();\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`finished request : ${finisehdRequest.name} `);\n        }\n        if (finisehdRequest) {\n            if (this.error) {\n                this.abortTransaction_(\"automatic abort of transaction due to error occured\");\n                if (process.env.NODE_ENV === 'dev') {\n                    console.log(`transaction aborted due to error occured`);\n                }\n                this.onErrorOccured(this.error);\n            }\n            else {\n                this.isQueryExecuting = false;\n                if (finisehdRequest.onSuccess) {\n                    finisehdRequest.onSuccess(result);\n                }\n                this.processExecutionOfQry_();\n            }\n        }\n    }\n\n    private abortTransaction_(msg: string) {\n        if (this.transaction != null) {\n            this.transaction.abort();\n            if (process.env.NODE_ENV === 'dev') {\n                console.log(`transaction aborted. Msg : ${msg}`);\n            }\n        }\n    }\n\n    private executeRequest_(request: WebWorkerRequest) {\n        this.isQueryExecuting = true;\n        let requestObj;\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`executing request : ${request.name} `);\n        }\n        switch (request.name) {\n            case API.Select:\n                requestObj = new Select.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n            case API.Insert:\n                requestObj = new Insert.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n            case API.Update:\n                requestObj = new Update.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n            case API.Remove:\n                requestObj = new Remove.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n            case API.Count:\n                requestObj = new Count.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n        }\n        requestObj.isTransaction = true;\n        requestObj.execute();\n    }\n\n    private pushRequest_(request: WebWorkerRequest) {\n        const push = () => {\n            this.requestQueue.push(request);\n        };\n        const promiseObj = promise((resolve, reject) => {\n            request.onSuccess = (result) => {\n                resolve(result);\n            };\n            request.onError = (error) => {\n                this.error = error;\n                reject(error);\n            };\n        });\n        if (this.isTxStarted_ === true) {\n            this.checkQueries_([request]).then(() => {\n                push();\n                this.processExecutionOfQry_();\n            }).catch(err => {\n                this.error = err;\n                this.abortTransaction_(JSON.stringify(err));\n            });\n        }\n        else {\n            push();\n        }\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`request pushed : ${request.name} with query value - ${JSON.stringify(request.query)}`);\n        }\n        return promiseObj;\n    }\n\n    private processExecutionOfQry_() {\n        if (this.requestQueue.length > 0 && this.isQueryExecuting === false) {\n            this.executeRequest_(this.requestQueue[0]);\n        }\n    }\n\n    private checkQueries_(requestQueue: WebWorkerRequest[]) {\n        return promiseAll(requestQueue.map(request => {\n            const tableName = request.query.into || request.query.in;\n            return new QueryHelper(request.name, request.query).checkAndModify();\n        }));\n    }\n\n    private getNotExistingTable_(tables: string[]) {\n        let invalidTable: string = null;\n        tables.every(table => {\n            if (this.isTableExist(table) === false) {\n                invalidTable = table;\n                return false;\n            }\n            return true;\n        });\n        return invalidTable;\n    }\n}"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack://JsStoreWorker/webpack/bootstrap","webpack://JsStoreWorker/./src/common/enums.ts","webpack://JsStoreWorker/./src/worker/log_helper.ts","webpack://JsStoreWorker/./src/worker/business/idb_helper.ts","webpack://JsStoreWorker/./src/worker/business/base_helper.ts","webpack://JsStoreWorker/./src/worker/utils/get_regex_from_like_expression.ts","webpack://JsStoreWorker/./src/worker/business/where_checker.ts","webpack://JsStoreWorker/./src/worker/business/base.ts","webpack://JsStoreWorker/./src/worker/utils/is_null.ts","webpack://JsStoreWorker/./src/worker/business/update/schema_checker.ts","webpack://JsStoreWorker/./src/worker/business/insert/value_checker.ts","webpack://JsStoreWorker/./src/worker/business/insert/values_checker.ts","webpack://JsStoreWorker/./src/worker/business/query_helper.ts","webpack://JsStoreWorker/./src/worker/keystore/enums.ts","webpack://JsStoreWorker/./src/worker/keystore/business/base_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/idb_helper.ts","webpack://JsStoreWorker/./src/worker/keystore/business/remove_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/set_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/utils_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/init_db_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/get_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/business/main_logic.ts","webpack://JsStoreWorker/./src/worker/keystore/query_executor.ts","webpack://JsStoreWorker/./src/worker/keystore/instance.ts","webpack://JsStoreWorker/./src/worker/config.ts","webpack://JsStoreWorker/./src/worker/business/clear.ts","webpack://JsStoreWorker/./src/worker/business/init_db.ts","webpack://JsStoreWorker/./src/worker/model/table_helper.ts","webpack://JsStoreWorker/./src/worker/model/db_helper.ts","webpack://JsStoreWorker/./src/worker/model/column.ts","webpack://JsStoreWorker/./src/worker/model/table.ts","webpack://JsStoreWorker/./src/worker/model/database.ts","webpack://JsStoreWorker/./src/worker/business/union/index.ts","webpack://JsStoreWorker/./src/worker/business/intersect/index.ts","webpack://JsStoreWorker/./src/worker/query_executor.ts","webpack://JsStoreWorker/./src/worker/business/where_base.ts","webpack://JsStoreWorker/./src/worker/helpers/promise.ts","webpack://JsStoreWorker/./src/worker/helpers/promise_all.ts","webpack://JsStoreWorker/./src/worker/business/base_db.ts","webpack://JsStoreWorker/./src/worker/business/select/then_evaluator.ts","webpack://JsStoreWorker/./src/worker/business/select/base_select.ts","webpack://JsStoreWorker/./src/worker/business/select/not_where.ts","webpack://JsStoreWorker/./src/worker/business/select/in.ts","webpack://JsStoreWorker/./src/worker/business/select/regex.ts","webpack://JsStoreWorker/./src/worker/business/select/where.ts","webpack://JsStoreWorker/./src/worker/business/select/group_by_helper.ts","webpack://JsStoreWorker/./src/worker/business/select/orderby_helper.ts","webpack://JsStoreWorker/./src/worker/business/drop_db.ts","webpack://JsStoreWorker/./src/worker/start.ts","webpack://JsStoreWorker/./src/worker/index.ts","webpack://JsStoreWorker/./src/worker/helpers/auto_increment_helper.ts","webpack://JsStoreWorker/./src/worker/business/insert/instance.ts","webpack://JsStoreWorker/./src/worker/business/update/base_update.ts","webpack://JsStoreWorker/./src/worker/business/update/not_where.ts","webpack://JsStoreWorker/./src/worker/business/update/in.ts","webpack://JsStoreWorker/./src/worker/business/update/regex.ts","webpack://JsStoreWorker/./src/worker/business/update/where.ts","webpack://JsStoreWorker/./src/worker/business/update/instance.ts","webpack://JsStoreWorker/./src/worker/business/remove/base_remove.ts","webpack://JsStoreWorker/./src/worker/business/remove/not_where.ts","webpack://JsStoreWorker/./src/worker/business/remove/in.ts","webpack://JsStoreWorker/./src/worker/business/remove/regex.ts","webpack://JsStoreWorker/./src/worker/business/remove/where.ts","webpack://JsStoreWorker/./src/worker/business/remove/instance.ts","webpack://JsStoreWorker/./src/worker/business/count/base_count.ts","webpack://JsStoreWorker/./src/worker/business/count/not_where.ts","webpack://JsStoreWorker/./src/worker/business/count/in.ts","webpack://JsStoreWorker/./src/worker/business/count/regex.ts","webpack://JsStoreWorker/./src/worker/business/count/where.ts","webpack://JsStoreWorker/./src/worker/business/count/instance.ts","webpack://JsStoreWorker/./src/worker/business/select/join.ts","webpack://JsStoreWorker/./src/worker/utils/get_keys.ts","webpack://JsStoreWorker/./src/worker/utils/is_object.ts","webpack://JsStoreWorker/./src/worker/business/select/instance.ts","webpack://JsStoreWorker/./src/worker/utils/get_data_type.ts","webpack://JsStoreWorker/./src/worker/utils/is_array.ts","webpack://JsStoreWorker/./src/worker/utils/get_object_first_key.ts","webpack://JsStoreWorker/./src/worker/utils/remove_space.ts","webpack://JsStoreWorker/./src/worker/business/transaction/instance.ts"],"names":[],"mappings":"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","file":"jsstore.worker.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 24);\n","export enum ERROR_TYPE {\n    WorkerNotSupplied = \"worker_not_supplied\",\n    IndexedDbUndefined = \"indexeddb_undefined\",\n    UndefinedColumn = \"undefined_column\",\n    UndefinedValue = \"undefined_value\",\n    UndefinedColumnName = \"undefined_column_name\",\n    UndefinedDbName = \"undefined_database_name\",\n    UndefinedColumnValue = \"undefined_column_value\",\n    NotArray = \"not_array\",\n    NoValueSupplied = \"no_value_supplied\",\n    ColumnNotExist = \"column_not_exist\",\n    EnableSearchOff = \"enable_search_off\",\n    InvalidOp = \"invalid_operator\",\n    NullValue = \"null_value\",\n    WrongDataType = \"wrong_data_type\",\n    TableNotExist = \"table_not_exist\",\n    DbNotExist = \"db_not_exist\",\n    ConnectionAborted = \"connection_aborted\",\n    ConnectionClosed = \"connection_closed\",\n    NotObject = \"not_object\",\n    InvalidConfig = \"invalid_config\",\n    DbBlocked = \"Db_blocked\",\n    IndexedDbNotSupported = \"indexeddb_not_supported\",\n    NullValueInWhere = \"null_value_in_where\",\n    InvalidJoinQuery = 'invalid_join_query',\n    InvalidOrderQuery = 'invalid_order_query',\n    InvalidQuery = 'invalid_query',\n    InvalidGroupQuery = 'invalid_group_query',\n}\n\nexport enum WORKER_STATUS {\n    Registered = \"registerd\",\n    Failed = \"failed\",\n    NotStarted = \"not_started\"\n}\n\nexport enum DATA_TYPE {\n    String = \"string\",\n    Object = \"object\",\n    Array = \"array\",\n    Number = \"number\",\n    Boolean = \"boolean\",\n    Null = \"null\",\n    DateTime = \"date_time\"\n}\n\nexport enum API {\n    InitDb = \"init_db\",\n    IsDbExist = \"is_db_exist\",\n    GetDbVersion = \"get_db_version\",\n    GetDbList = \"get_db_list\",\n    Get = \"get\",\n    Set = \"set\",\n    Select = \"select\",\n    Insert = \"insert\",\n    Update = \"update\",\n    Remove = \"remove\",\n    GetDbSchema = \"get_db_schema\",\n    OpenDb = \"open_db\",\n    Clear = \"clear\",\n    DropDb = \"drop_db\",\n    Count = \"count\",\n    ChangeLogStatus = \"change_log_status\",\n    Terminate = \"terminate\",\n    Transaction = \"transaction\",\n    InitKeyStore = \"init_keystore\",\n    CloseDb = \"close_db\",\n    Union = \"union\",\n    Intersect = \"intersect\"\n}\n\nexport enum EVENT {\n    RequestQueueEmpty = \"requestQueueEmpty\",\n    RequestQueueFilled = \"requestQueueFilled\"\n}\n\nexport enum QUERY_OPTION {\n    Where = \"where\",\n    Like = 'like',\n    Regex = 'regex',\n    In = 'in',\n    Equal = \"=\",\n    Between = '-',\n    GreaterThan = '>',\n    LessThan = '<',\n    GreaterThanEqualTo = \">=\",\n    LessThanEqualTo = \"<=\",\n    NotEqualTo = \"!=\",\n    Aggregate = \"aggregate\",\n    Max = \"max\",\n    Min = \"min\",\n    Avg = \"avg\",\n    Count = \"count\",\n    Sum = \"sum\",\n    Or = \"or\",\n    Skip = \"skip\",\n    Limit = \"limit\",\n    And = \"and\",\n    IgnoreCase = \"ignoreCase\",\n    Then = \"then\"\n}\n\nexport enum IDB_MODE {\n    ReadOnly = \"readonly\",\n    ReadWrite = \"readwrite\"\n}\n\nexport enum OCCURENCE {\n    First = 'f',\n    Last = 'l',\n    Any = 'a'\n}\n\nexport enum CONNECTION_STATUS {\n    Connected = \"connected\",\n    Closed = \"closed\",\n    NotStarted = \"not_started\",\n    UnableToStart = \"unable_to_start\",\n    ClosedByJsStore = \"closed_by_jsstore\"\n}","import { IError, ERROR_TYPE } from \"../common/index\";\nimport { Config } from \"./config\";\n\nexport class LogHelper implements IError {\n    type: ERROR_TYPE;\n    message: string;\n    private info_: any;\n\n    constructor(type: ERROR_TYPE, info: any = null) {\n        this.type = type;\n        this.info_ = info;\n        this.message = this.getMsg_();\n    }\n\n    throw() {\n        throw this.get();\n    }\n\n    static log(msg) {\n        if (Config.isLogEnabled) {\n            console.log(msg);\n        }\n    }\n\n    logError() {\n        console.error(this.get());\n    }\n\n\n\n    get() {\n        return {\n            message: this.message,\n            type: this.type\n        } as IError;\n    }\n\n    private getMsg_() {\n        let errMsg: string;\n        switch (this.type) {\n            case ERROR_TYPE.NotArray:\n                errMsg = \"Supplied value is not an array\";\n                break;\n            case ERROR_TYPE.UndefinedColumn:\n                errMsg = \"Column is undefined in Where\";\n                break;\n            case ERROR_TYPE.UndefinedValue:\n                errMsg = \"Value is undefined in Where\";\n                break;\n            case ERROR_TYPE.UndefinedColumnName:\n                errMsg = \"Column name is undefined '\" + this.info_['TableName'] + \"'\";\n                break;\n            case ERROR_TYPE.UndefinedDbName:\n                errMsg = \"Database name is not supplied\";\n                break;\n            case ERROR_TYPE.UndefinedColumnValue:\n                errMsg = \"Column value is undefined\";\n                break;\n            case ERROR_TYPE.NoValueSupplied:\n                errMsg = \"No value is supplied\";\n                break;\n            case ERROR_TYPE.InvalidOp:\n                errMsg = \"Invalid Op Value '\" + this.info_['Op'] + \"'\";\n                break;\n            case ERROR_TYPE.ColumnNotExist:\n                errMsg = this.info_['isOrder'] ?\n                    `Column '${this.info_['column']}' in order query does not exist` :\n                    `Column '${this.info_['column']}' does not exist`;\n                break;\n            case ERROR_TYPE.EnableSearchOff:\n                errMsg = \"Search is turned off for the Column '\" + this.info_['column'] + \"'\";\n                break;\n            case ERROR_TYPE.NullValue:\n                errMsg = \"Null value is not allowed for column '\" + this.info_['ColumnName'] + \"'\";\n                break;\n            case ERROR_TYPE.WrongDataType:\n                errMsg = \"Supplied value for column '\" + this.info_['column'] +\n                    \"' have wrong data type\";\n                break;\n            case ERROR_TYPE.TableNotExist:\n                errMsg = \"Table '\" + this.info_['tableName'] + \"' does not exist\";\n                break;\n            case ERROR_TYPE.DbNotExist:\n                errMsg = `Database with name ${this.info_['dbName']} does not exist`;\n                break;\n            case ERROR_TYPE.NotObject:\n                errMsg = \"supplied value is not object\";\n                break;\n            case ERROR_TYPE.InvalidOp:\n                errMsg = \"Invalid Config '\" + this.info_['Config'] + \" '\";\n                break;\n            case ERROR_TYPE.DbBlocked:\n                errMsg = `database is blocked, cant be deleted right now`;\n                break;\n            case ERROR_TYPE.NullValueInWhere:\n                errMsg = `Null/undefined is not allowed in where. Column '${this.info_['column']}' has null`;\n                break;\n            case ERROR_TYPE.InvalidJoinQuery:\n                errMsg = this.info_;\n                break;\n            default:\n                errMsg = this.message;\n                break;\n        }\n        return errMsg;\n    }\n}","import { CONNECTION_STATUS, ERROR_TYPE, IDB_MODE, IDbStatus } from \"../../common/index\";\nimport { KeyStore } from \"../keystore/index\";\nimport { DataBase } from \"../model/index\";\nimport { DropDb } from \"./drop_db\";\nimport { promise } from \"../helpers/index\";\n\nexport class IdbHelper {\n\n    static onDbDroppedByBrowser: () => void;\n    static transaction: IDBTransaction = null;\n    static isDbDeletedByBrowser: boolean;\n    static dbConnection: IDBDatabase;\n    static activeDb: DataBase;\n    static activeDbVersion = 0;\n    static dbStatus: IDbStatus = {\n        conStatus: CONNECTION_STATUS.NotStarted\n    };\n\n    static callDbDroppedByBrowser(deleteMetaData?: boolean) {\n        if (IdbHelper.dbStatus.conStatus === CONNECTION_STATUS.Connected) {\n            IdbHelper.isDbDeletedByBrowser = true;\n            if (deleteMetaData === true) {\n                const dropDbObject = new DropDb(function () {\n\n                }, function () {\n\n                });\n                dropDbObject.deleteMetaData();\n            }\n        }\n    }\n\n    static createTransaction(tableNames: string[], callBack: () => void, mode?) {\n        if (IdbHelper.transaction === null) {\n            mode = mode ? mode : IDB_MODE.ReadWrite;\n            IdbHelper.transaction = IdbHelper.dbConnection.transaction(tableNames, mode);\n            const onComplete = () => {\n                IdbHelper.transaction = null;\n                callBack();\n            };\n            IdbHelper.transaction.oncomplete = onComplete;\n            IdbHelper.transaction.onabort = onComplete;\n        }\n    }\n\n    static setDbList(list: string[]) {\n        return KeyStore.set('DataBase_List', list);\n    }\n\n    static updateDbStatus(status: CONNECTION_STATUS, err?: ERROR_TYPE) {\n        if (err === undefined) {\n            IdbHelper.dbStatus.conStatus = status;\n        }\n        else {\n            IdbHelper.dbStatus = {\n                conStatus: status,\n                lastError: err\n            };\n        }\n    }\n\n    static getDbList() {\n        return promise<string[]>((res, rej) => {\n            KeyStore.get<string[]>('DataBase_List').then(result => {\n                res(result == null ? [] : result);\n            }).catch(rej);\n        });\n    }\n\n    static getDbVersion(dbName: string) {\n        return promise<number>((res, rej) => {\n            KeyStore.get(`JsStore_${dbName}_Db_Version`).then(dbVersion => {\n                res(Number(dbVersion));\n            }).catch(rej);\n        });\n    }\n\n    static getDbSchema(dbName: string) {\n        return KeyStore.get<DataBase>(`JsStore_${dbName}_Schema`);\n    }\n\n    static getTable(tableName: string) {\n        const currentTable = IdbHelper.activeDb.tables.find(table => table.name === tableName);\n        return currentTable;\n    }\n}","import { IdbHelper } from \"./idb_helper\";\nimport { QUERY_OPTION } from \"../../common/index\";\nimport { DataBase } from \"../model/index\";\n\nexport class BaseHelper {\n\n\n    regexExpression: RegExp;\n    //   method helpers\n\n    protected get activeDb(): DataBase {\n        return IdbHelper.activeDb;\n    }\n\n    protected get dbConnection() {\n        return IdbHelper.dbConnection;\n    }\n\n    protected get transaction() {\n        return IdbHelper.transaction;\n    }\n\n    protected createTransaction(tableNames: string[], callBack: () => void, mode?) {\n        IdbHelper.createTransaction(tableNames, callBack, mode);\n    }\n\n    protected regexTest(value) {\n        return this.regexExpression.test(value);\n    }\n\n    protected isTableExist(tableName: string): boolean {\n        const index = this.activeDb.tables.findIndex(table => table.name === tableName);\n        return index >= 0;\n    }\n\n    protected getTable(tableName: string) {\n        return IdbHelper.getTable(tableName);\n    }\n\n    protected getKeyRange(value, op?) {\n        let keyRange: IDBKeyRange;\n        switch (op) {\n            case QUERY_OPTION.Between: keyRange = IDBKeyRange.bound(value.low, value.high, false, false); break;\n            case QUERY_OPTION.GreaterThan: keyRange = IDBKeyRange.lowerBound(value, true); break;\n            case QUERY_OPTION.GreaterThanEqualTo: keyRange = IDBKeyRange.lowerBound(value); break;\n            case QUERY_OPTION.LessThan: keyRange = IDBKeyRange.upperBound(value, true); break;\n            case QUERY_OPTION.LessThanEqualTo: keyRange = IDBKeyRange.upperBound(value); break;\n            default: keyRange = IDBKeyRange.only(value); break;\n        }\n        return keyRange;\n    }\n\n    protected getPrimaryKey(tableName): string {\n        const primaryKey: string = this.getTable(tableName).primaryKey;\n        return primaryKey ? primaryKey : this.getKeyPath(tableName);\n    }\n\n    protected getKeyPath(tableName) {\n        const transaction: IDBTransaction = this.dbConnection.transaction([tableName], \"readonly\"),\n            objectStore = transaction.objectStore(tableName);\n        return objectStore.keyPath as string;\n    }\n}","import { OCCURENCE } from \"../../common/index\";\n\nexport const getRegexFromLikeExpression = (likeExpression: string) => {\n    const filterValues = likeExpression.split('%');\n    let filterValue: string;\n    let occurence: OCCURENCE;\n    if (filterValues[1]) {\n        filterValue = filterValues[1];\n        occurence = filterValues.length > 2 ? OCCURENCE.Any : OCCURENCE.Last;\n    }\n    else {\n        filterValue = filterValues[0];\n        occurence = OCCURENCE.First;\n    }\n    switch (occurence) {\n        case OCCURENCE.First:\n            return new RegExp(`^${filterValue}`, 'i');\n        case OCCURENCE.Last:\n            return new RegExp(`${filterValue}$`, 'i');\n        default:\n            return new RegExp(`${filterValue}`, 'i');\n    }\n}","import { OCCURENCE, QUERY_OPTION } from \"../../common/index\";\nimport { getRegexFromLikeExpression } from \"../utils/index\";\n\n/**\n * For matching the different column value existance for where option\n * \n * @export\n * @class WhereChecker\n */\nexport class WhereChecker {\n  where: object;\n  status: boolean;\n  checkFlag: boolean;\n\n  constructor(where: object, checkFlag: boolean) {\n    this.where = where;\n    this.checkFlag = checkFlag;\n  }\n\n  check(rowValue) {\n    this.status = true;\n    if (this.checkFlag === true) {\n      for (const columnName in this.where) {\n        if (!this.status) {\n          break;\n        }\n        const columnValue = this.where[columnName];\n        if (typeof columnValue === 'object') {\n          for (const key in columnValue) {\n            if (!this.status) {\n              break;\n            }\n            switch (key) {\n              case QUERY_OPTION.In:\n                this.status = this.checkIn(columnName, rowValue[columnName]); break;\n              case QUERY_OPTION.Like:\n                this.status = this.checkLike_(columnName, rowValue[columnName]); break;\n              case QUERY_OPTION.Regex:\n                this.checkRegex(columnName, rowValue[columnName]); break;\n              case QUERY_OPTION.Between:\n              case QUERY_OPTION.GreaterThan:\n              case QUERY_OPTION.LessThan:\n              case QUERY_OPTION.GreaterThanEqualTo:\n              case QUERY_OPTION.LessThanEqualTo:\n              case QUERY_OPTION.NotEqualTo:\n                this.status = this.checkComparisionOp_(columnName, rowValue[columnName], key);\n                break;\n            }\n          }\n        }\n        else {\n          this.status = columnValue === rowValue[columnName];\n        }\n      }\n    }\n    return this.status;\n  }\n\n  private checkIn(column, value) {\n    return (this.where[column][QUERY_OPTION.In] as any[]).find(val => val === value) != null;\n  }\n\n  private checkLike_(column, value) {\n    return getRegexFromLikeExpression(this.where[column][QUERY_OPTION.Like]).test(value);\n  }\n\n  private checkRegex(column, value) {\n    const expr = this.where[column][QUERY_OPTION.Regex];\n    this.status = expr.test(value);\n  }\n\n  private checkComparisionOp_(column, value, symbol) {\n    const compareValue = this.where[column][symbol];\n    switch (symbol) {\n      // greater than\n      case QUERY_OPTION.GreaterThan:\n        return value > compareValue;\n      // less than\n      case QUERY_OPTION.LessThan:\n        return value < compareValue;\n      // less than equal\n      case QUERY_OPTION.LessThanEqualTo:\n        return value <= compareValue;\n      // greather than equal\n      case QUERY_OPTION.GreaterThanEqualTo:\n        return value >= compareValue;\n      // between\n      case QUERY_OPTION.Between:\n        return value > compareValue.low && value < compareValue.high;\n      // Not equal to\n      case QUERY_OPTION.NotEqualTo:\n        return value !== compareValue;\n    }\n  }\n}","import { BaseHelper } from \"./base_helper\";\nimport { IError, ERROR_TYPE, OCCURENCE, DATA_TYPE, QUERY_OPTION } from \"../../common/index\";\nimport { WhereChecker } from \"./where_checker\";\nimport { LogHelper } from \"../log_helper\";\nimport { Column } from \"../model/index\";\nimport { getDataType, getObjectFirstKey, getRegexFromLikeExpression } from \"../utils/index\";\n\nexport abstract class Base extends BaseHelper {\n    error: IError;\n    rowAffected = 0;\n    onSuccess: (result?) => void;\n    onError: (err: IError) => void;\n    objectStore: IDBObjectStore;\n    query;\n    whereCheckerInstance: WhereChecker;\n    tableName: string;\n    isTransaction: boolean;\n\n    skipRecord;\n    limitRecord;\n\n    protected onErrorOccured(e, customError = false) {\n        if (customError) {\n            e.logError();\n            this.error = (e as LogHelper).get();\n        }\n        else {\n            let error;\n            if (e.name) {\n                error = new LogHelper((e.name));\n                error.message = e.message;\n            }\n            else {\n                error = new LogHelper((e as any).target.error.name);\n                error.message = (e as any).target.error.message;\n            }\n            if (process.env.NODE_ENV === 'dev') {\n                error.logError();\n            }\n            this.error = error.get();\n        }\n    }\n\n    protected onExceptionOccured(ex: DOMException) {\n        console.error(ex);\n        this.onError({\n            message: ex.message,\n            type: ERROR_TYPE.InvalidQuery\n        });\n    }\n\n    protected getColumnInfo(columnName: string, tableName: string) {\n        return this.getTable(tableName).columns.find(column => column.name === columnName);\n    }\n\n    protected goToWhereLogic() {\n        const columnName = getObjectFirstKey(this.query.where);\n        if (this.objectStore.indexNames.contains(columnName)) {\n            const value = this.query.where[columnName];\n            if (typeof value === 'object') {\n                const checkFlag = Boolean(\n                    Object.keys(value).length > 1 ||\n                    Object.keys(this.query.where).length > 1\n                );\n                this.whereCheckerInstance = new WhereChecker(this.query.where, checkFlag);\n                const key = getObjectFirstKey(value);\n                switch (key) {\n                    case QUERY_OPTION.Like: {\n                        const regexVal = getRegexFromLikeExpression(value[QUERY_OPTION.Like]);\n                        (this as any).executeRegexLogic(columnName, regexVal);\n                    } break;\n                    case QUERY_OPTION.Regex:\n                        (this as any).executeRegexLogic(columnName, value[QUERY_OPTION.Regex]);\n                        break;\n                    case QUERY_OPTION.In:\n                        (this as any).executeInLogic(columnName, value[QUERY_OPTION.In]);\n                        break;\n                    case QUERY_OPTION.Between:\n                    case QUERY_OPTION.GreaterThan:\n                    case QUERY_OPTION.LessThan:\n                    case QUERY_OPTION.GreaterThanEqualTo:\n                    case QUERY_OPTION.LessThanEqualTo:\n                        (this as any).executeWhereLogic(columnName, value, key, \"next\");\n                        break;\n                    case QUERY_OPTION.Aggregate: break;\n                    default: (this as any).executeWhereLogic(columnName, value, null, \"next\");\n                }\n            }\n            else {\n                const checkFlag = Boolean(Object.keys(this.query.where).length > 1);\n                this.whereCheckerInstance = new WhereChecker(this.query.where, checkFlag);\n                (this as any).executeWhereLogic(columnName, value, null, \"next\");\n            }\n        }\n        else {\n            const column: Column = this.getColumnInfo(columnName, this.tableName);\n            const error = column == null ?\n                new LogHelper(ERROR_TYPE.ColumnNotExist, { column: columnName }) :\n                new LogHelper(ERROR_TYPE.EnableSearchOff, { column: columnName });\n\n            this.onErrorOccured(error, true);\n        }\n    }\n}","export const isNull = (value) => {\n    if (value == null) {\n        return true;\n    } else {\n        switch (typeof value) {\n            case 'string': return value.length === 0;\n            case 'number': return isNaN(value);\n        }\n    }\n    return false;\n};","import { Table } from \"../../model/table\";\nimport { Column } from \"../../model/column\";\nimport { LogHelper } from \"../../log_helper\";\nimport { isNull, getDataType } from \"../../utils/index\";\nimport { DATA_TYPE, ERROR_TYPE } from \"../../../common/index\";\n\nexport class SchemaChecker {\n    table: Table;\n    constructor(table: Table) {\n        this.table = table;\n    }\n\n    check(setValue: object, tblName: string) {\n        let log: LogHelper = null;\n        if (typeof setValue === DATA_TYPE.Object) {\n            if (this.table) {\n                // loop through table column and find data is valid\n                this.table.columns.every((column: Column) => {\n                    if (log === null) {\n                        if (column.name in setValue) {\n                            log = this.checkByColumn_(column, setValue[column.name]);\n                        }\n                        return true;\n                    }\n                    else {\n                        return false;\n                    }\n                });\n            }\n            else {\n                log = new LogHelper(ERROR_TYPE.TableNotExist, { tableName: tblName });\n            }\n        }\n        else {\n            log = new LogHelper(ERROR_TYPE.NotObject);\n        }\n        if (log != null) {\n            return log.get();\n        }\n        return null;\n    }\n\n\n\n    private checkByColumn_(column: Column, value) {\n        let log: LogHelper = null;\n        // check not null schema\n        if (column.notNull === true && isNull(value)) {\n            log = new LogHelper(ERROR_TYPE.NullValue, { ColumnName: column.name });\n        }\n\n        // check datatype\n        const type = getDataType(value);\n        const checkFurther = value != null;\n        if (column.dataType && checkFurther) {\n            if (type !== column.dataType && type !== 'object') {\n                log = new LogHelper(ERROR_TYPE.WrongDataType, { column: column.name });\n            }\n        }\n\n        // check allowed operators\n        if (checkFurther && type === 'object') {\n            const allowedOp = ['+', '-', '*', '/', '{push}'];\n            for (const prop in value) {\n                if (allowedOp.indexOf(prop) < 0 && column.dataType && type !== column.dataType) {\n                    log = new LogHelper(ERROR_TYPE.WrongDataType, { column: column.name });\n                }\n                break;\n            }\n        }\n        return log;\n    }\n}","import { Table, Column } from \"../../model/index\";\nimport { ERROR_TYPE, DATA_TYPE } from \"../../../common/index\";\nimport { LogHelper } from \"../../log_helper\";\nimport { isNull, getDataType } from \"../../utils/index\";\n\nexport class ValueChecker {\n    table: Table;\n    value: object;\n    errorOccured = false;\n    log: LogHelper;\n    autoIncrementValue = {};\n\n    constructor(table: Table, autoIncrementValue) {\n        this.table = table;\n        this.autoIncrementValue = autoIncrementValue;\n    }\n\n    checkAndModifyValue(value) {\n        this.value = value;\n        this.table.columns.every((column) => {\n            this.checkAndModifyColumnValue_(column);\n            return !this.errorOccured;\n        });\n        return this.errorOccured;\n    }\n\n    private checkNotNullAndDataType_(column: Column) {\n        // check not null schema\n        if (column.notNull && isNull(this.value[column.name])) {\n            this.onValidationError_(ERROR_TYPE.NullValue, { ColumnName: column.name });\n        }\n        // check datatype\n        else if (column.dataType && !isNull(this.value[column.name]) &&\n            getDataType(this.value[column.name]) !== column.dataType) {\n            this.onValidationError_(ERROR_TYPE.WrongDataType, { column: column.name });\n        }\n    }\n\n    private checkAndModifyColumnValue_(column: Column) {\n        const columnValue = this.value[column.name];\n        // check auto increment scheme\n        if (column.autoIncrement) {\n            // if value is null, then create the autoincrement value\n            if (isNull(columnValue)) {\n                this.value[column.name] = ++this.autoIncrementValue[column.name];\n            }\n            else {\n                if (getDataType(columnValue) === DATA_TYPE.Number) {\n                    // if column value is greater than autoincrement value saved, then make the\n                    // column value as autoIncrement value\n                    if (columnValue > this.autoIncrementValue[column.name]) {\n                        this.autoIncrementValue[column.name] = columnValue;\n                    }\n                }\n            }\n        }\n        // check Default Schema\n        else if (column.default !== undefined && isNull(columnValue)) {\n            this.value[column.name] = column.default;\n        }\n        this.checkNotNullAndDataType_(column);\n    }\n\n    private onValidationError_(error: ERROR_TYPE, details: object) {\n        this.errorOccured = true;\n        this.log = new LogHelper(error, details);\n    }\n}","import { Table } from \"../../model/index\";\nimport { ValueChecker } from \"./value_checker\";\nimport { promise, getAutoIncrementValues, setAutoIncrementValue } from \"../../helpers/index\";\nimport { QueryExecutor } from \"../../query_executor\";\nimport { QueryHelper } from \"../query_helper\";\n\nexport class ValuesChecker {\n    table: Table;\n    values: object[];\n    valueCheckerObj: ValueChecker;\n\n    constructor(table: Table, values: object[]) {\n        this.table = table;\n        this.values = values;\n    }\n\n    checkAndModifyValues() {\n        return promise((resolve, reject) => {\n            const onAutoIncValueEvaluated = (autoIncrementValues) => {\n                this.valueCheckerObj = new ValueChecker(this.table, autoIncrementValues);\n                this.startChecking().then(resolve).catch(reject);\n            };\n            if (QueryExecutor.isTransactionQuery === false) {\n                getAutoIncrementValues(this.table).then(autoIncValues => {\n                    onAutoIncValueEvaluated(autoIncValues);\n                }).catch(reject);\n            }\n            else {\n                onAutoIncValueEvaluated(QueryHelper.autoIncrementValues[this.table.name]);\n            }\n        });\n    }\n    \n    private startChecking() {\n        return promise((resolve, reject) => {\n            let isError = false;\n            this.values.every((item) => {\n                isError = this.valueCheckerObj.checkAndModifyValue(item);\n                return !isError;\n            });\n            if (isError) {\n                const error = this.valueCheckerObj.log.get();\n                reject(error);\n            }\n            const promiseObj = setAutoIncrementValue(this.table, this.valueCheckerObj.autoIncrementValue);\n            if (QueryExecutor.isTransactionQuery === false) {\n                promiseObj.then(resolve).catch(reject);\n            }\n            else {\n                resolve();\n            }\n        });\n    }\n}","import { API, ERROR_TYPE, QUERY_OPTION, DATA_TYPE, InsertQuery, IError } from \"../../common/index\";\nimport { IdbHelper } from \"./idb_helper\";\nimport { LogHelper } from \"../log_helper\";\nimport * as Update from \"./update/index\";\nimport * as Insert from \"./insert/index\";\nimport { Table } from \"../model/index\";\nimport { promise } from \"../helpers/index\";\nimport { getDataType } from \"../utils/index\";\n\nexport class QueryHelper {\n    api: API;\n    query;\n    error: IError;\n    isTransaction = false;\n    static autoIncrementValues: { [table: string]: { [columnName: string]: number } } = {};\n\n    constructor(api: API, query: any) {\n        this.api = api;\n        this.query = query;\n    }\n    checkAndModify() {\n        return promise((resolve, reject) => {\n            const resolveReject = () => {\n                if (this.error == null) {\n                    resolve();\n                }\n                else {\n                    reject(this.error);\n                }\n            };\n            switch (this.api) {\n                case API.Select:\n                case API.Remove:\n                case API.Count:\n                    this.checkFetchQuery_();\n                    resolveReject();\n                    break;\n                case API.Insert:\n                    this.checkInsertQuery_().then(resolveReject).\n                        catch((err) => {\n                            this.error = err;\n                            resolveReject();\n                        });\n                    break;\n                case API.Update:\n                    this.checkUpdateQuery_();\n                    resolveReject();\n                    break;\n            }\n        });\n    }\n\n    private isInsertQryValid_(callBack: (tbl: Table) => void) {\n        const table = this.getTable_((this.query as InsertQuery).into);\n        let log: LogHelper;\n        if (table) {\n            switch (getDataType(this.query.values)) {\n                case DATA_TYPE.Array:\n                    break;\n                case DATA_TYPE.Null:\n                    log = new LogHelper(ERROR_TYPE.NoValueSupplied);\n                    break;\n                default:\n                    log = new LogHelper(ERROR_TYPE.NotArray);\n            }\n        }\n        else {\n            log = new LogHelper(ERROR_TYPE.TableNotExist, { tableName: (this.query as InsertQuery).into });\n        }\n        callBack(table);\n        return log == null ? null : log.get();\n    }\n\n    private checkInsertQuery_() {\n        return promise((resolve, reject) => {\n            let table;\n            const err = this.isInsertQryValid_((tbl) => {\n                table = tbl;\n            });\n            if (err == null) {\n                if (this.query.skipDataCheck === true) {\n                    resolve();\n                }\n                else {\n                    const valueCheckerInstance = new Insert.ValuesChecker(table, this.query.values);\n                    valueCheckerInstance.checkAndModifyValues().then(() => {\n                        (this.query as InsertQuery).values = valueCheckerInstance.values;\n                        resolve();\n                    }).catch(reject);\n                }\n            }\n            else {\n                reject(err);\n            }\n        });\n    }\n\n    private checkUpdateQuery_() {\n        this.error = new Update.SchemaChecker(this.getTable_(this.query.in)).\n            check(this.query.set, this.query.in);\n        if (this.error == null) {\n            if (this.query.where != null) {\n                this.checkForNullInWhere_();\n                if (this.error == null) {\n                    this.addGreatAndLessToNotOp_();\n                }\n            }\n        }\n    }\n\n    private checkForNullInWhere_() {\n        for (const key in this.query.where) {\n            if (this.query.where[key] == null) {\n                this.error = new LogHelper(ERROR_TYPE.NullValueInWhere, { column: key }).get();\n                return;\n            }\n        }\n    }\n\n    private checkFetchQuery_() {\n        if (this.isTableExist_(this.query.from) === true) {\n            if (this.query.where != null) {\n                this.checkForNullInWhere_();\n                if (this.error == null) {\n                    this.addGreatAndLessToNotOp_();\n                }\n            }\n\n        }\n        else {\n            this.error = new LogHelper(ERROR_TYPE.TableNotExist, { tableName: this.query.from }).get();\n        }\n    }\n\n    private isTableExist_(tableName: string): boolean {\n        const index = this.activeDb_.tables.findIndex(table => table.name === tableName);\n        return index >= 0;\n    }\n\n    private get activeDb_() {\n        return IdbHelper.activeDb;\n    }\n\n    private getTable_(tableName: string) {\n        return IdbHelper.getTable(tableName);\n    }\n\n    private addGreatAndLessToNotOp_() {\n        const whereQuery = this.query.where;\n        const containsNot = (qry: object, keys: string[]) => {\n            return keys.findIndex(key => qry[key][QUERY_OPTION.NotEqualTo] != null) >= 0;\n        };\n        const addToSingleQry = (qry, keys: string[]) => {\n            let value;\n            keys.forEach((prop) => {\n                value = qry[prop];\n                if (value[QUERY_OPTION.NotEqualTo] != null) {\n                    qry[prop][QUERY_OPTION.GreaterThan] = value[QUERY_OPTION.NotEqualTo];\n                    if (qry[QUERY_OPTION.Or] === undefined) {\n                        qry[QUERY_OPTION.Or] = {};\n                        qry[QUERY_OPTION.Or][prop] = {};\n                    }\n                    else if (qry[QUERY_OPTION.Or][prop] === undefined) {\n                        qry[QUERY_OPTION.Or][prop] = {};\n                    }\n                    qry[QUERY_OPTION.Or][prop][QUERY_OPTION.LessThan] = value[QUERY_OPTION.NotEqualTo];\n                    delete qry[prop][QUERY_OPTION.NotEqualTo];\n                }\n            });\n            return qry;\n        };\n        switch (getDataType(whereQuery)) {\n            case DATA_TYPE.Object:\n                const queryKeys = Object.keys(whereQuery);\n                if (containsNot(whereQuery, queryKeys)) {\n                    if (queryKeys.length === 1) {\n                        this.query.where = addToSingleQry(whereQuery, queryKeys);\n                    }\n                    else {\n                        const whereTmpQry = [];\n                        queryKeys.forEach((prop) => {\n                            whereTmpQry.push(addToSingleQry({ [prop]: whereQuery[prop] }, [prop]));\n                        });\n                        this.query.where = whereTmpQry;\n                    }\n                }\n                break;\n            default:\n                const whereTmp = [];\n                (whereQuery as object[]).forEach(qry => {\n                    const qryKeys = Object.keys(qry);\n                    if (containsNot(qry, qryKeys)) {\n                        qry = addToSingleQry(qry, qryKeys);\n                    }\n                    whereTmp.push(qry);\n                });\n                this.query.where = whereTmp;\n        }\n    }\n\n\n\n}","export enum CONNECTION_STATUS {\n    Connected = \"connected\",\n    Closed = \"closed\",\n    NotStarted = \"not_connected\"\n}","import { IError } from \"../interfaces\";\n\nexport class Base {\n    results = null;\n    onSuccess: (results) => void;\n    onError: (err: IError) => void;\n    errorOccured = false;\n    errorCount = 0;\n    transaction: IDBTransaction;\n    objectStore: IDBObjectStore;\n\n    protected onErrorOccured(e) {\n        ++this.errorCount;\n        if (this.errorCount === 1) {\n            if (this.onError != null) {\n                this.onError((e as any).target.error);\n            }\n        }\n        console.error(e);\n    }\n}","import { CONNECTION_STATUS } from '../enums';\nimport { IDbStatus } from '../interfaces';\n\nexport class IdbHelper {\n    static dbConnection: IDBDatabase;\n    static isDbDeletedByBrowser: boolean;\n    static transaction: IDBTransaction = null;\n\n    static dbStatus: IDbStatus = {\n        conStatus: CONNECTION_STATUS.NotStarted,\n    };\n\n    static callDbDroppedByBrowser() {\n        IdbHelper.isDbDeletedByBrowser = IdbHelper.dbStatus.conStatus === CONNECTION_STATUS.Connected ? true : false;\n    }\n\n    static createTransaction(tableNames, callBack: () => void, mode?) {\n        if (IdbHelper.transaction === null) {\n            mode = mode ? mode : \"readwrite\";\n            IdbHelper.transaction = IdbHelper.dbConnection.transaction(tableNames, mode);\n            IdbHelper.transaction.oncomplete = () => {\n                IdbHelper.transaction = null;\n                callBack();\n            };\n            (IdbHelper.transaction as any).ontimeout = function () {\n                this._transaction = null;\n                console.error('transaction timed out');\n            };\n        }\n    }\n}","import { Base } from \"./base_logic\";\nimport { IError } from \"../interfaces\";\nimport { QueryExecutor } from \"../query_executor\";\nimport { IdbHelper } from \"./idb_helper\";\n\nexport class Remove extends Base {\n    key: string;\n    rowAffected = 0;\n    constructor(key: string, onSuccess: (recordRemoved: number) => void, onError: (err: IError) => void) {\n        super();\n        this.key = key;\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute() {\n        this.initTransaction();\n        const removeData = (column, value) => {\n            const cursorRequest = this.objectStore.index(column).openCursor(IDBKeyRange.only(value));\n            cursorRequest.onerror = (e) => {\n                this.errorOccured = true;\n                this.onErrorOccured(e);\n            };\n            cursorRequest.onsuccess = (e: any) => {\n                const cursor: IDBCursorWithValue = e.target.result;\n                if (cursor) {\n                    cursor.delete();\n                    ++this.rowAffected;\n                    cursor.continue();\n                }\n            };\n        };\n\n        if (!this.errorOccured) {\n            removeData(QueryExecutor.columnName, this.key);\n        }\n    }\n\n    private initTransaction() {\n        IdbHelper.createTransaction([QueryExecutor.tableName], this.onTransactionCompleted.bind(this));\n        this.objectStore = IdbHelper.transaction.objectStore(QueryExecutor.tableName);\n    }\n\n    private onTransactionCompleted() {\n        if (this.errorOccured === false) {\n            this.onSuccess(this.rowAffected);\n        }\n    }\n}","import { Base } from \"./base_logic\";\nimport { IInsert, IError } from \"../interfaces\";\nimport { IdbHelper } from \"./idb_helper\";\nimport { QueryExecutor } from \"../query_executor\";\n\nexport class Set extends Base {\n    query: IInsert;\n    constructor(query: IInsert, onSuccess: (result) => void, onError: (err: IError) => void) {\n        super();\n        try {\n            this.query = query;\n            this.onSuccess = onSuccess;\n            this.onError = onError;\n        }\n        catch (ex) {\n            console.error(ex);\n        }\n    }\n\n    execute() {\n        const updateIfExistElseInsert = () => {\n            const cursorRequest = this.objectStore.index(QueryExecutor.columnName).openCursor(\n                IDBKeyRange.only(this.query[QueryExecutor.columnName])\n            );\n            cursorRequest.onsuccess = (e) => {\n                const cursor: IDBCursorWithValue = (e as any).target.result;\n                if (cursor) {\n                    cursor.update(this.query);\n                }\n                else {\n                    insertData();\n                }\n            };\n\n            cursorRequest.onerror = (e) => {\n                this.errorOccured = true;\n                this.onErrorOccured(e);\n            };\n\n        };\n        const insertData = () => {\n            const addResult = this.objectStore.add(this.query);\n            addResult.onerror = (e) => {\n                this.errorOccured = true;\n                this.onErrorOccured(e);\n            };\n        };\n        this.initTransaction();\n        updateIfExistElseInsert();\n    }\n\n    private initTransaction() {\n        IdbHelper.createTransaction([QueryExecutor.tableName], this.onTransactionCompleted_);\n        this.objectStore = IdbHelper. transaction.objectStore(QueryExecutor.tableName);\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.errorOccured === false && this.onSuccess) {\n            this.onSuccess(null);\n        }\n    }\n}","import { CONNECTION_STATUS } from './enums';\nimport { IdbHelper } from './business/idb_helper';\n\nexport class Utils {\n\n    static updateDbStatus(status: CONNECTION_STATUS, err?) {\n        if (err === undefined) {\n            IdbHelper.dbStatus.conStatus = status;\n        }\n        else {\n            IdbHelper.dbStatus = {\n                conStatus: status,\n                lastError: err\n            };\n        }\n    }\n}\n","import { IError } from \"../interfaces\";\nimport { CONNECTION_STATUS } from \"../enums\";\nimport { Utils } from \"../utils_logic\";\nimport { IdbHelper } from \"./idb_helper\";\nimport { QueryExecutor } from \"../query_executor\";\nimport { ERROR_TYPE } from \"../../../common/index\";\n\nexport let tempDatas;\nexport class InitDb {\n    constructor(dbName: string, onSuccess: () => void, onError: (err: IError) => void) {\n        const dbRequest = self.indexedDB.open(dbName, 1);\n        IdbHelper.isDbDeletedByBrowser = false;\n        dbRequest.onerror = (event) => {\n            if ((event as any).target.error.name === 'InvalidStateError') {\n                onError({\n                    message: \"Indexeddb is blocked\",\n                    type: ERROR_TYPE.IndexedDbNotSupported\n                } as IError);\n            }\n            else {\n                onError((event as any).target.error);\n            }\n        };\n\n        dbRequest.onsuccess = (event) => {\n            IdbHelper.dbStatus.conStatus = CONNECTION_STATUS.Connected;\n            IdbHelper.dbConnection = dbRequest.result;\n            IdbHelper.dbConnection.onclose = () => {\n                IdbHelper.callDbDroppedByBrowser();\n                Utils.updateDbStatus(CONNECTION_STATUS.Closed, ERROR_TYPE.ConnectionClosed);\n            };\n\n            IdbHelper.dbConnection.onversionchange = (e: any) => {\n                if (e.newVersion === null) { // An attempt is made to delete the db\n                    e.target.close(); // Manually close our connection to the db\n                    IdbHelper.callDbDroppedByBrowser();\n                    Utils.updateDbStatus(CONNECTION_STATUS.Closed, ERROR_TYPE.ConnectionClosed);\n                }\n            };\n\n            IdbHelper.dbConnection.onerror = (e: any) => {\n                IdbHelper.dbStatus.lastError = \"Error occured in connection :\" + e.target.result;\n            };\n\n            IdbHelper.dbConnection.onabort = (e) => {\n                IdbHelper.dbStatus = {\n                    conStatus: CONNECTION_STATUS.Closed,\n                    lastError: \"Connection aborted\"\n                };\n            };\n\n            if (onSuccess != null) {\n                onSuccess();\n            }\n        };\n\n        dbRequest.onupgradeneeded = (event: any) => {\n            const db = event.target.result,\n                column = \"Key\";\n            db.createObjectStore(QueryExecutor.tableName, {\n                keyPath: column\n            }).createIndex(column, column, { unique: true });\n        };\n    }\n}","import { Base } from \"./base_logic\";\nimport { IError } from \"../interfaces\";\nimport { QueryExecutor } from \"../query_executor\";\nimport { IdbHelper } from \"./idb_helper\";\n\nexport class Get extends Base {\n    key: string;\n    constructor(key: string, onSuccess: (result) => void, onError: (err: IError) => void) {\n        super();\n        this.key = key;\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute() {\n        const getData = (column, value) => {\n            const cursorRequest = this.objectStore.index(column).openCursor(IDBKeyRange.only(value));\n            cursorRequest.onerror = (e) => {\n                this.errorOccured = true;\n                this.onErrorOccured(e);\n            };\n            cursorRequest.onsuccess = (e: any) => {\n                const cursor: IDBCursorWithValue = e.target.result;\n                if (cursor) {\n                    this.results = cursor.value['Value'];\n                }\n            };\n        };\n        this.initTransaction_();\n        getData(QueryExecutor.columnName, this.key);\n\n    }\n\n    private initTransaction_() {\n        IdbHelper.createTransaction([QueryExecutor.tableName], this.onTransactionCompleted_, 'readonly');\n        this.objectStore = IdbHelper. transaction.objectStore(QueryExecutor.tableName);\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.errorOccured === false) {\n            this.onSuccess(this.results);\n        }\n    }\n}\n","import { QueryExecutor } from '../query_executor';\nimport { CONNECTION_STATUS } from \"../enums\";\nimport { IInsert, IError, IQueryRequest, IQueryResult } from \"../interfaces\";\nimport { Remove } from \"./remove_logic\";\nimport { Set } from \"./set_logic\";\nimport { InitDb } from \"./init_db_logic\";\nimport { Get } from \"./get_logic\";\nimport { IdbHelper } from './idb_helper';\n\nexport class Main {\n    onQueryFinished: (result) => void;\n    constructor(onQueryFinished = null) {\n        this.onQueryFinished = onQueryFinished;\n    }\n\n    checkConnectionAndExecuteLogic(request: IQueryRequest) {\n        if (request.name === 'init_db') {\n            this.executeLogic(request);\n        }\n        else {\n            switch (IdbHelper.dbStatus.conStatus) {\n                case CONNECTION_STATUS.Connected: this.executeLogic(request); break;\n                case CONNECTION_STATUS.NotStarted:\n                    setTimeout(() => {\n                        this.checkConnectionAndExecuteLogic(request);\n                    }, 100); break;\n                case CONNECTION_STATUS.Closed:\n                    if (IdbHelper.isDbDeletedByBrowser) {\n                        this.createDb(() => {\n                            IdbHelper.isDbDeletedByBrowser = false;\n                            this.checkConnectionAndExecuteLogic(request);\n                        }, (err) => {\n                            console.error(err);\n                        });\n                    }\n            }\n        }\n    }\n\n    private returnResult(result) {\n        this.onQueryFinished(result);\n    }\n\n    private executeLogic(request: IQueryRequest) {\n        const onSuccess = (results?) => {\n            this.returnResult({\n                returnedValue: results\n            } as IQueryResult);\n        };\n        const onError = (err) => {\n            this.returnResult({\n                errorDetails: err,\n                errorOccured: true\n            } as IQueryResult);\n        };\n\n        switch (request.name) {\n            case 'get':\n                this.get(request.query, onSuccess, onError);\n                break;\n            case 'set': this.set(request.query, onSuccess, onError);\n                break;\n            case 'remove': this.remove(request.query, onSuccess, onError);\n                break;\n            case 'init_db': this.createDb(onSuccess, onError); break;\n            case 'close_db': this.closeDb(onSuccess, onError); break;\n        }\n    }\n\n    set(query: IInsert, onSuccess: (result) => void, onError: (err: IError) => void) {\n        const insertInstance = new Set(query, onSuccess, onError);\n        insertInstance.execute();\n    }\n\n    remove(key: string, onSuccess: (result) => void, onError: (err: IError) => void) {\n        const deleteInstance = new Remove(key, onSuccess, onError);\n        deleteInstance.execute();\n    }\n\n    get(key: string, onSuccess: (result) => void, onError: (err: IError) => void) {\n        const getInstance = new Get(key, onSuccess, onError);\n        getInstance.execute();\n    }\n\n    createDb(onSuccess: () => void, onError: (err: IError) => void) {\n        const dbName = \"KeyStore\";\n        const initDbInstance = new InitDb(dbName, onSuccess, onError);\n    }\n\n    closeDb(onSuccess: () => void, onError: (err: IError) => void) {\n        if (IdbHelper.dbStatus.conStatus === CONNECTION_STATUS.Connected) {\n            IdbHelper.dbStatus.conStatus = CONNECTION_STATUS.Closed;\n            IdbHelper.dbConnection.close();\n        }\n        onSuccess();\n    }\n}","import { IQueryResult, IQueryRequest } from \"./interfaces\";\nimport { Main } from \"./business/main_logic\";\nimport { promise } from \"../helpers/index\";\n\nexport class QueryExecutor {\n    static requestQueue: IQueryRequest[] = [];\n    static tableName = \"LocalStore\";\n    static columnName = \"Key\";\n    static isCodeExecuting = false;\n    static prcoessQuery<T>(request: IQueryRequest) {\n        return promise<T>((resolve, reject) => {\n            request.onSuccess = (result) => {\n                resolve(result);\n            };\n            request.onError = (error) => {\n                if (process.env.NODE_ENV === 'dev') {\n                    console.error(error);\n                }\n                reject(error);\n            };\n            this.requestQueue.push(request);\n            this.executeCode();\n        });\n    }\n\n    static executeCode() {\n        if (!this.isCodeExecuting && this.requestQueue.length > 0) {\n            this.isCodeExecuting = true;\n            const request: IQueryRequest = {\n                name: this.requestQueue[0].name,\n                query: this.requestQueue[0].query\n            } as IQueryRequest;\n            new Main(this.onQueryFinished.bind(this)).checkConnectionAndExecuteLogic(request);\n        }\n    }\n\n    static onQueryFinished(message: IQueryResult) {\n        const finishedRequest: IQueryRequest = this.requestQueue.shift();\n        this.isCodeExecuting = false;\n        if (message.errorOccured) {\n            finishedRequest.onError(message.errorDetails);\n        }\n        else {\n            finishedRequest.onSuccess(message.returnedValue);\n        }\n        this.executeCode();\n    }\n}\n","import { QueryExecutor } from './query_executor';\nimport { IQueryRequest, IError, IInsert } from \"./interfaces\";\n\nexport class KeyStore {\n    /**\n     * Initialize KeyStore\n     * \n     */\n    static init = () => {\n        if (indexedDB) {\n            return QueryExecutor.prcoessQuery({\n                name: 'init_db',\n                query: null\n            } as IQueryRequest);\n        }\n    };\n\n    static close = () => {\n        return QueryExecutor.prcoessQuery({\n            name: 'close_db',\n            query: null\n        } as IQueryRequest);\n    };\n\n    /**\n     * return the value by key\n     * \n     * @param {string} key \n     * @param {(result) => void} onSuccess \n     * @param {(err: IError) => void} [onError=null] \n     * @returns \n     */\n    static get = <T>(key: string) => {\n        return QueryExecutor.prcoessQuery<T>({\n            name: 'get',\n            query: key\n        });\n    };\n\n    /**\n     * insert or update value\n     * \n     * @param {any} key \n     * @param {any} value \n     * @param {(result) => void} [onSuccess] \n     * @param {(err: IError) => void} [onError] \n     * @returns \n     */\n    static set = (key, value) => {\n        const query = {\n            Key: key,\n            Value: value\n        } as IInsert;\n        return QueryExecutor.prcoessQuery({\n            name: 'set',\n            query: query\n        } as IQueryRequest);\n    };\n\n    /**\n     * delete value\n     * \n     * @param {string} key \n     * @param {(result) => void} [onSuccess=null] \n     * @param {(err: IError) => void} [onError=null] \n     * @returns \n     */\n    static remove = (key: string) => {\n        return QueryExecutor.prcoessQuery({\n            name: 'remove',\n            query: key\n        } as IQueryRequest);\n    };\n}\n\n\n","export class Config {\n    static isLogEnabled = false;\n    static isRuningInWorker = false;\n}","import { Base } from \"./base\";\nimport { IError } from \"../../common/index\";\nimport { Column } from \"../model/index\";\nimport { KeyStore } from \"../keystore/index\";\n\nexport class Clear extends Base {\n    constructor(tableName: string, onSuccess: () => void, onError: (err: IError) => void) {\n        super();\n        this.query = tableName;\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute() {\n        this.createTransaction([this.query], () => {\n            if (this.error == null) {\n                this.onSuccess();\n            }\n            else {\n                this.onError(this.error);\n            }\n        });\n        const clearRequest: IDBRequest = this.transaction.objectStore(this.query).clear();\n        clearRequest.onsuccess = (e) => {\n            const currentTable = this.getTable(this.query);\n            currentTable.columns.forEach((column: Column) => {\n                if (column.autoIncrement) {\n                    KeyStore.set(`JsStore_${this.activeDb.name}_${this.query}_${column.name}_Value`, 0);\n                }\n            });\n        };\n\n        clearRequest.onerror = this.onErrorOccured;\n    }\n}","import { TableHelper, Column } from \"../model/index\";\nimport { IError, CONNECTION_STATUS } from \"../../common/index\";\nimport { KeyStore } from \"../keystore/index\";\nimport { BaseDb } from \"./base_db\";\nimport { promise } from \"../helpers/index\";\n\nexport class InitDb extends BaseDb {\n    onSuccess: (isDbCreated: boolean) => void;\n\n    constructor(onSuccess: (isDbCreated: boolean) => void, onError: (err: IError) => void) {\n        super();\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute(tablesMetaData: TableHelper[]) {\n        const listofTableCreated = [];\n        const dbRequest = indexedDB.open(this.dbName, this.dbVersion);\n        let isDbCreated = false;\n        dbRequest.onerror = (event) => {\n            if (this.onError != null) {\n                this.onError((event as any).target.error);\n            }\n        };\n\n        dbRequest.onsuccess = (event) => {\n            this.dbStatus.conStatus = CONNECTION_STATUS.Connected;\n            this.dbConnection = dbRequest.result;\n            (this.dbConnection as any).onclose = this.onDbClose.bind(this);\n\n            this.dbConnection.onversionchange = this.onDbVersionChange.bind(this);\n            this.dbConnection.onerror = this.onDbConError.bind(this);\n\n            if (isDbCreated) {\n                // save in database list\n                this.savedbNameIntoDbList_().then(() => {\n                    if (this.onSuccess != null) {\n                        this.onSuccess(isDbCreated);\n                    }\n                });\n            }\n            else {\n                this.setPrimaryKey_();\n                this.onSuccess(isDbCreated);\n            }\n        };\n\n        dbRequest.onupgradeneeded = (event) => {\n            isDbCreated = true;\n            const dbConnection = (event as any).target.result;\n            const createObjectStore = (item: TableHelper, index) => {\n                try {\n                    let store: IDBObjectStore;\n                    if (item.primaryKey.length > 0) {\n                        this.activeDb.tables[index].primaryKey = item.primaryKey;\n                        store = dbConnection.createObjectStore(item.name, {\n                            keyPath: item.primaryKey\n                        });\n                    }\n                    else {\n                        store = dbConnection.createObjectStore(item.name, {\n                            autoIncrement: true\n                        });\n                    }\n                    item.columns.forEach((column: Column) => {\n                        if (column.enableSearch === true) {\n                            const options = column.primaryKey ? { unique: true } : { unique: column.unique };\n                            options['multiEntry'] = column.multiEntry;\n                            const keyPath = column.keyPath == null ? column.name : column.keyPath;\n                            store.createIndex(column.name, keyPath, options);\n                            if (column.autoIncrement) {\n                                KeyStore.set(`JsStore_${this.dbName}_${item.name}_${column.name}_Value`, 0);\n                            }\n                        }\n                    });\n                    listofTableCreated.push(item.name);\n                    // setting the table version\n                    KeyStore.set(`JsStore_${this.dbName}_${item.name}_Version`, item.version);\n                }\n                catch (e) {\n                    console.error(e);\n                }\n            };\n            tablesMetaData.forEach((item: TableHelper, index) => {\n                if (item.requireDelete) {\n                    // Delete the old datastore.    \n                    if (dbConnection.objectStoreNames.contains(item.name)) {\n                        dbConnection.deleteObjectStore(item.name);\n                    }\n                    createObjectStore(item, index);\n                }\n                else if (item.requireCreation) {\n                    createObjectStore(item, index);\n                }\n            });\n        };\n    }\n\n    private savedbNameIntoDbList_() {\n        return promise((res, rej) => {\n            this.getDbList().then(dbList => {\n                if (dbList.indexOf(this.dbName) < 0) {\n                    dbList.push(this.dbName);\n                    this.setDbList(dbList).then(res).catch(rej);\n                }\n                else {\n                    res();\n                }\n            }).catch(rej);\n        });\n    }\n\n    private setPrimaryKey_() {\n        this.activeDb.tables.forEach((table, index) => {\n            table.columns.every(item => {\n                this.activeDb.tables[index].primaryKey = item.primaryKey ? item.name : \"\";\n                return !item.primaryKey;\n            });\n        });\n    }\n}\n","import { Table } from \"./table\";\nimport { Column } from \"./column\";\nimport { KeyStore } from \"../keystore/index\";\nimport { IdbHelper } from \"../business/index\";\nimport { promise } from \"../helpers/index\";\n\nexport class TableHelper {\n    name: string;\n    columns: Column[] = [];\n\n    // internal Members\n    primaryKey: string;\n    version: number;\n    requireDelete = false;\n    requireCreation = false;\n    private callback_: (tableHelperObj: TableHelper) => void;\n\n    constructor(table: Table) {\n        this.name = table.name;\n        this.version = table.version;\n        this.columns = table.columns;\n        this.setPrimaryKey_();\n    }\n\n    createMetaData(dbName: string): Promise<TableHelper> {\n        return promise((resolve) => {\n            this.callback_ = resolve;\n            this.setRequireDelete_(dbName);\n            this.setDbVersion_(dbName);\n        });\n    }\n\n    private setPrimaryKey_() {\n        this.columns.every((item) => {\n            this.primaryKey = item.primaryKey ? item.name : \"\";\n            return !item.primaryKey;\n        });\n    }\n\n    private setRequireDelete_(dbName: string) {\n        KeyStore.get<number>(`JsStore_${dbName}_${this.name}_Version`).then(tableVersion => {\n            if (tableVersion == null) {\n                this.requireCreation = true;\n            }\n            // mark only table which has version greater than store version\n            else if (tableVersion < this.version) {\n                this.requireDelete = true;\n            }\n        });\n    }\n\n    private setDbVersion_(dbName: string) {\n        IdbHelper.activeDbVersion = IdbHelper.activeDbVersion > this.version ? IdbHelper.activeDbVersion : this.version;\n        // setting db version\n        KeyStore.set(`JsStore_${dbName}_Db_Version`, IdbHelper.activeDbVersion);\n        // setting table version\n        KeyStore.set(`JsStore_${dbName}_${this.name}_Version`, IdbHelper.activeDbVersion).then(() => {\n            this.version = IdbHelper.activeDbVersion;\n            this.callback_(this);\n        });\n    }\n}","import { DataBase } from \"./database\";\nimport { TableHelper } from \"./table_helper\";\nimport { Table } from \"./table\";\nimport { promiseAll } from \"../helpers/index\";\n\nexport class DbHelper {\n    dbName: string;\n    tables: Table[] = [];\n\n    constructor(dataBase: DataBase) {\n        this.dbName = dataBase.name;\n        this.tables = dataBase.tables;\n    }\n\n    createMetaData() {\n        return promiseAll(\n            this.tables.map((table) => {\n                return new TableHelper(table).createMetaData(this.dbName);\n            })\n        );\n    }\n}","import { IColumnOption } from \"../../common/index\";\n\nexport class Column implements IColumnOption {\n    name: string;\n    autoIncrement: boolean;\n    primaryKey: boolean;\n    unique: boolean;\n    notNull: boolean;\n    dataType: string;\n    default;\n    multiEntry: boolean;\n    enableSearch: boolean;\n    keyPath: string[];\n\n    constructor(key: Column) {\n        this.name = key.name;\n        this.autoIncrement = key.autoIncrement != null ? key.autoIncrement : false;\n        this.primaryKey = key.primaryKey != null ? key.primaryKey : false;\n        this.unique = key.unique != null ? key.unique : false;\n        this.notNull = key.notNull != null ? key.notNull : false;\n        this.dataType = key.dataType != null ? key.dataType : (key.autoIncrement ? 'number' : null);\n        this.default = key.default;\n        this.multiEntry = key.multiEntry == null ? false : key.multiEntry;\n        this.enableSearch = key.enableSearch == null ? true : key.enableSearch;\n        this.keyPath = key.keyPath;\n    }\n\n}","import { Column } from \"./column\";\nimport { ITable } from \"../../common/index\";\n\nexport class Table {\n    name: string;\n    columns: Column[] = [];\n    version: number;\n    primaryKey: string;\n\n    constructor(table: ITable) {\n        this.name = table.name;\n        this.version = table.version == null ? 1 : table.version;\n        for (const columnName in table.columns) {\n            const column = {\n                name: columnName\n            } as Column;\n\n            for (const feature in table.columns[columnName]) {\n                const value = table.columns[columnName][feature];\n                switch (feature) {\n                    case 'primaryKey':\n                    case 'autoIncrement':\n                    case 'unique':\n                    case 'dataType':\n                    case 'enableSearch':\n                    case 'keyPath':\n                    case 'multiEntry':\n                    case 'default':\n                    case 'notNull':\n                        column[feature] = value as never; break;\n                }\n            }\n            this.columns.push(new Column(column));\n        }\n    }\n}","\nimport { Table } from \"./table\";\nimport { IDataBase } from \"../../common/index\";\n \nexport class DataBase {\n    name: string;\n    tables: Table[] = [];\n\n    constructor(dataBase: IDataBase) {\n        this.name = dataBase.name;\n        dataBase.tables.forEach((item) => {\n            this.tables.push(new Table(item));\n        });\n    }\n}\n","import * as Select from '../select/index';\nimport { SelectQuery, IError } from '../../../common/index';\nimport { Base } from '../base';\n\n\nexport class Union extends Base {\n    execute(query: SelectQuery[], onSuccess: (results: object[]) => void, onError: (err: IError) => void) {\n        let index = 0;\n        const hashMap = {};\n        let isQueryForSameTable = true;\n        const queryLength = query.length;\n        query.every((qry, i) => {\n            if (i + 1 < queryLength && qry.from !== query[i + 1].from) {\n                isQueryForSameTable = false;\n                return false;\n            }\n            return true;\n        });\n        let getHashKey;\n        if (isQueryForSameTable) {\n            const pKey = this.getPrimaryKey(query[0].from);\n            getHashKey = (val) => {\n                return val[pKey];\n            };\n        }\n        else {\n            getHashKey = (val) => {\n                let columnValKey = \"\";\n                for (const key in val) {\n                    columnValKey += val[key];\n                }\n                return columnValKey;\n            };\n        }\n\n        const fetchData = () => {\n            if (index < query.length) {\n                new Select.Instance(query[index++], (selectResult) => {\n                    selectResult.forEach(val => {\n                        hashMap[getHashKey(val)] = val;\n                    });\n                    fetchData();\n                }, onError).execute();\n            }\n            else {\n                const results = [];\n                for (const key in hashMap) {\n                    results.push(hashMap[key]);\n                }\n                onSuccess(results);\n            }\n        };\n        fetchData();\n    }\n\n\n}","import * as Select from '../select/index';\nimport { IError, IntersectQuery } from '../../../common/index';\nimport { Helper } from '../select/orderby_helper';\n\n\nexport class Intersect extends Helper {\n    execute(intersectQry: IntersectQuery, onSuccess: (results: object[]) => void, onError: (err: IError) => void) {\n        this.query = intersectQry as any;\n        let index = 0;\n        let hashMap = {};\n        let hashMapTemp = {};\n        let isQueryForSameTable = true;\n        const query = intersectQry.queries;\n        const queryLength = query.length;\n        query.every((qry, i) => {\n            if (i + 1 < queryLength && qry.from !== query[i + 1].from) {\n                isQueryForSameTable = false;\n                return false;\n            }\n            return true;\n        });\n        let getHashKey;\n        if (isQueryForSameTable) {\n            const pKey = this.getPrimaryKey(query[0].from);\n            getHashKey = (val) => {\n                return val[pKey];\n            };\n        }\n        else {\n            getHashKey = (val) => {\n                let columnValKey = \"\";\n                for (const key in val) {\n                    columnValKey += val[key];\n                }\n                return columnValKey;\n            };\n        }\n\n\n        const fetchData = () => {\n            if (index < queryLength) {\n                new Select.Instance(query[index], (selectResult) => {\n                    hashMap = {};\n                    selectResult.forEach(val => {\n                        const columnValKey = getHashKey(val);\n                        if (index === 0) {\n                            hashMapTemp[columnValKey] = val;\n                        } else if (hashMapTemp[columnValKey] != null) {\n                            hashMap[columnValKey] = val;\n                        }\n                    });\n                    if (index > 0) {\n                        hashMapTemp = { ...hashMap };\n                    }\n\n                    ++index;\n                    fetchData();\n                }, onError).execute();\n            }\n            else {\n                const results = [];\n                let resultPusher: (key: string) => void;\n                let skip = intersectQry.skip;\n                const limit = intersectQry.limit;\n                const onFinished = () => {\n                    this.results = results;\n                    this.query.join = {} as any;\n                    this.processOrderBy();\n                    this.processGroupDistinctAggr();\n                    onSuccess(this.results);\n                };\n                let shouldStopLoop = false;\n                let key: string;\n                const pushResult = () => {\n                    results.push(hashMap[key]);\n                };\n                const checkLimitAndPush = () => {\n                    if (results.length < limit) {\n                        pushResult();\n                    }\n                    else {\n                        shouldStopLoop = true;\n                    }\n                };\n                const skipChecker = (callBack: () => void) => {\n                    if (skip === 0) {\n                        callBack();\n                    }\n                    else {\n                        --skip;\n                    }\n                };\n                if (intersectQry.skip && intersectQry.limit) {\n                    resultPusher = () => {\n                        skipChecker(() => {\n                            checkLimitAndPush();\n                        });\n                    };\n\n                }\n                else if (intersectQry.limit) {\n                    resultPusher = checkLimitAndPush;\n                }\n                else if (intersectQry.skip) {\n                    resultPusher = () => {\n                        skipChecker(() => {\n                            pushResult();\n                        });\n                    };\n                }\n                else {\n                    resultPusher = () => {\n                        pushResult();\n                    };\n                }\n                if (limit) {\n                    for (key in hashMap) {\n                        resultPusher(key);\n                        if (shouldStopLoop) {\n                            break;\n                        }\n                    }\n                }\n                else {\n                    for (key in hashMap) {\n                        resultPusher(key);\n                    }\n                }\n                onFinished();\n            }\n        };\n        fetchData();\n    }\n}","import { IdbHelper, DropDb, InitDb, Clear, QueryHelper } from \"./business/index\";\nimport * as Select from './business/select/index';\nimport * as Count from './business/count/index';\nimport * as Insert from './business/insert/index';\nimport * as Remove from './business/remove/index';\nimport * as Update from './business/update/index';\nimport * as Transaction from \"./business/transaction/index\";\nimport { LogHelper } from \"./log_helper\";\nimport {\n    UpdateQuery, InsertQuery, RemoveQuery, SelectQuery, CountQuery, SetQuery,\n    CONNECTION_STATUS, ERROR_TYPE, DATA_TYPE, API,\n    WebWorkerResult, WebWorkerRequest, IDataBase, IError\n} from \"../common/index\";\nimport { Config } from \"./config\";\nimport { KeyStore } from \"./keystore/index\";\nimport { TableHelper, DbHelper, DataBase } from \"./model/index\";\nimport { promise } from \"./helpers/index\";\nimport { getDataType } from \"./utils/index\";\nimport { Union } from './business/union/index';\nimport { Intersect } from \"./business/intersect/index\";\nexport class QueryExecutor {\n    static isTransactionQuery = false;\n    onQueryFinished: (result: any) => void;\n\n    constructor(fn?: (result: any) => void) {\n        this.onQueryFinished = fn;\n        QueryHelper.autoIncrementValues = {};\n    }\n\n    checkConnectionAndExecuteLogic(request: WebWorkerRequest) {\n        LogHelper.log('request executing:' + request.name);\n        switch (request.name) {\n            case API.InitDb:\n            case API.IsDbExist:\n            case API.GetDbVersion:\n            case API.GetDbList:\n            case API.GetDbSchema:\n            case API.Get:\n            case API.Set:\n            case API.ChangeLogStatus:\n            case API.Terminate:\n            case API.OpenDb:\n            case API.InitKeyStore:\n            case API.CloseDb:\n                const err = this.checkForIdbSupport_();\n                if (err == null) {\n                    this.executeLogic_(request);\n                }\n                else {\n                    this.returnResult_({\n                        errorDetails: err,\n                        errorOccured: true\n                    } as WebWorkerResult);\n                }\n                break;\n            default:\n                switch (this.dbStatus_.conStatus) {\n                    case CONNECTION_STATUS.Connected: {\n                        this.executeLogic_(request);\n                    } break;\n                    case CONNECTION_STATUS.Closed: {\n                        if (this.isDbDeletedByBrowser_ === true) {\n                            this.initDb_(null, () => {\n                                this.isDbDeletedByBrowser_ = false;\n                                this.checkConnectionAndExecuteLogic(request);\n                            }, request.onError);\n                        }\n                        else {\n                            this.initDb_(this.activeDb_ as any, () => {\n                                this.checkConnectionAndExecuteLogic(request);\n                            }, request.onError);\n                        }\n                    } break;\n\n                }\n        }\n    }\n\n    private changeLogStatus_(status: boolean, onSuccess, onError) {\n        Config.isLogEnabled = status;\n        onSuccess();\n    }\n\n    private returnResult_(result) {\n        if (Config.isRuningInWorker === true) {\n            (self as any).postMessage(result);\n        }\n        else {\n            this.onQueryFinished(result);\n        }\n\n    }\n\n    private executeLogic_(request: WebWorkerRequest) {\n        const onSuccess = (results?) => {\n            this.returnResult_({\n                returnedValue: results\n            } as WebWorkerResult);\n        };\n        const onError = (err) => {\n            this.returnResult_({\n                errorDetails: err,\n                errorOccured: true\n            } as WebWorkerResult);\n        };\n\n        QueryExecutor.isTransactionQuery = request.name === API.Transaction;\n        switch (request.name) {\n            case API.InitDb:\n                if (this.isDbDeletedByBrowser_ === true) {\n                    this.initDb_(null, () => {\n                        this.isDbDeletedByBrowser_ = false;\n                        onSuccess();\n                    }, onError);\n                }\n                else {\n                    this.initDb_(request.query as IDataBase, onSuccess, onError);\n                }\n                break;\n            case API.OpenDb:\n                this.openDb_(request.query, onSuccess, onError); break;\n            case API.Select:\n                new Select.Instance(request.query as SelectQuery, onSuccess, onError).execute();\n                break;\n            case API.Insert: new Insert.Instance(request.query as InsertQuery, onSuccess, onError).execute();\n                break;\n            case API.Update:\n                new Update.Instance(request.query as UpdateQuery, onSuccess, onError).execute();\n                break;\n            case API.Remove:\n                new Remove.Instance(request.query as RemoveQuery, onSuccess, onError).execute();\n                break;\n            case API.IsDbExist: this.isDbExist_(request.query, onSuccess, onError);\n                break;\n            case API.GetDbVersion:\n                this.getDbVersion_(request.query as string).then(onSuccess).catch(onError);\n                break;\n            case API.GetDbList:\n                this.getDbList_().then(onSuccess).catch(onError);\n                break;\n            case API.GetDbSchema:\n                this.getDbSchema_(request.query as string).then(onSuccess).catch(onError);\n                break;\n            case API.Clear: new Clear(request.query as string, onSuccess, onError).execute();\n                break;\n            case API.DropDb: this.dropDb_(onSuccess, onError);\n                break;\n            case API.Count:\n                new Count.Instance(request.query as CountQuery, onSuccess, onError).execute();\n                break;\n            case API.Get: this.get_(request.query as string).then(onSuccess).catch(onError);\n                break;\n            case API.Set: this.set_(request.query as SetQuery).then(onSuccess).catch(onError);\n                break;\n            case API.ChangeLogStatus:\n                this.changeLogStatus_(request.query as boolean, onSuccess, onError);\n                break;\n            case API.Transaction: new Transaction.Instance(request.query, onSuccess, onError).execute();\n                break;\n            case API.CloseDb:\n            case API.Terminate:\n                this.terminate_(onSuccess, onError);\n                break;\n            case API.Union:\n                new Union().execute(request.query, onSuccess, onError);\n                break;\n            case API.InitKeyStore:\n                this.initKeyStore_(onSuccess);\n                break;\n            case API.Intersect:\n                new Intersect().execute(request.query, onSuccess, onError);\n                break;\n            default:\n                if (process.env.NODE_ENV === 'dev') {\n                    console.error('The Api:-' + request.name + ' does not support.');\n                }\n        }\n    }\n\n    private openDb_(dbName: string, onSuccess, onError) {\n        if (this.activeDb_ != null && this.activeDb_.name === dbName) {\n            this.processCreateDb(this.activeDb_).then(onSuccess).catch(onError);\n        }\n        else {\n            this.getDbSchema_(dbName).then((db) => {\n                if (db != null) {\n                    this.processCreateDb(db).then(onSuccess).catch(onError);\n                }\n                else {\n                    onError(new LogHelper(ERROR_TYPE.DbNotExist, { dbName: dbName }).get());\n                }\n            }).catch(onError);\n        }\n    }\n\n    private initKeyStore_(onSuccess) {\n        KeyStore.init().then(onSuccess()).catch(() => {\n            IdbHelper.dbStatus = {\n                conStatus: CONNECTION_STATUS.UnableToStart,\n                lastError: ERROR_TYPE.IndexedDbNotSupported,\n            };\n        });\n    }\n\n    private getDbSchema_(dbName: string) {\n        return IdbHelper.getDbSchema(dbName);\n    }\n\n    private terminate_(onSuccess: () => void, onError: (err: IError) => void) {\n        KeyStore.close().then(() => {\n            this.closeDb_();\n            onSuccess();\n        });\n    }\n\n    private get isDbDeletedByBrowser_() {\n        return IdbHelper.isDbDeletedByBrowser;\n    }\n\n    private set isDbDeletedByBrowser_(value) {\n        IdbHelper.isDbDeletedByBrowser = value;\n    }\n\n    private getDbList_() {\n        return IdbHelper.getDbList();\n    }\n\n    private get activeDb_() {\n        return IdbHelper.activeDb;\n    }\n\n    private set activeDb_(value) {\n        IdbHelper.activeDb = value;\n    }\n\n    private closeDb_() {\n        if (IdbHelper.dbStatus.conStatus === CONNECTION_STATUS.Connected) {\n            IdbHelper.dbStatus.conStatus = CONNECTION_STATUS.ClosedByJsStore;\n            IdbHelper.dbConnection.close();\n        }\n    }\n\n    private dropDb_(onSuccess: () => void, onError: (err: IError) => void) {\n        this.closeDb_();\n        new DropDb(onSuccess, onError).deleteDb();\n    }\n\n\n\n    private processCreateDb(db: DataBase) {\n        return promise((res, rej) => {\n            // create meta data\n            const dbHelper = new DbHelper(db);\n            dbHelper.createMetaData().then((tablesMetaData: TableHelper[]) => {\n                this.activeDb_ = db;\n                const createDbInstance = new InitDb((isDbCreated) => {\n                    this.activeDb_ = db;\n                    if (isDbCreated) {\n                        // save dbSchema in keystore\n                        KeyStore.set(\"JsStore_\" + db.name + \"_Schema\", db);\n                    }\n                    res(isDbCreated);\n                }, rej);\n                createDbInstance.execute(tablesMetaData);\n            });\n        });\n    }\n\n    private initDb_(\n        dataBase: IDataBase, onSuccess: () => void, onError: (err: IError) => void\n    ) {\n        if (dataBase == null) {\n            this.processCreateDb(this.activeDb_);\n        }\n        else {\n            this.closeDb_();\n            this.getDbVersion_(dataBase.name).then(version => {\n                this.activeDbVersion_ = version ? version : 1;\n                this.processCreateDb(new DataBase(dataBase)).then(onSuccess).catch(onError);\n            }).catch(onError);\n        }\n\n    }\n\n    private get activeDbVersion_() {\n        return IdbHelper.activeDbVersion;\n    }\n\n    private set activeDbVersion_(value) {\n        IdbHelper.activeDbVersion = value;\n    }\n\n    private getDbVersion_(dbName: string) {\n        return IdbHelper.getDbVersion(dbName);\n    }\n\n    private get dbStatus_() {\n        return IdbHelper.dbStatus;\n    }\n\n    private checkForIdbSupport_() {\n        if (this.dbStatus_.conStatus === CONNECTION_STATUS.UnableToStart) {\n            const error = {\n                type: this.dbStatus_.lastError,\n            } as IError;\n            switch (error.type) {\n                case ERROR_TYPE.IndexedDbNotSupported:\n                    error.message = \"Browser does not support IndexedDB\"; break;\n                default:\n                    error.message = \"unknown error occured\";\n            }\n            return error;\n        }\n    }\n\n    private isDbExist_(dbInfo, onSuccess: (isExist: boolean) => void, onError: (err: IError) => void) {\n        if (getDataType(dbInfo) === DATA_TYPE.String) {\n            this.getDbVersion_(dbInfo).then(function (dbVersion) {\n                onSuccess(Boolean(dbVersion));\n            });\n        }\n        else {\n            this.getDbVersion_(dbInfo.dbName).then(function (dbVersion) {\n                onSuccess(dbInfo.table.version <= dbVersion);\n            });\n        }\n    }\n\n    private get_(key: string) {\n        return KeyStore.get(key);\n    }\n\n    private set_(query: SetQuery) {\n        return KeyStore.set(query.key, query.value);\n    }\n}","import { Base } from \"./base\";\n\nexport class WhereBase extends Base {\n    protected results: any[] = [];\n\n    protected onQueryFinished() {\n        // virtual\n    }\n}","export const promise = <T>(callBack: (resolve, reject) => void) => {\n    return new Promise<T>(callBack);\n};","export const promiseAll = <T>(promises: any) => {\n    return Promise.all<T>(promises);\n};","import { IdbHelper } from \"./idb_helper\";\nimport { CONNECTION_STATUS, ERROR_TYPE, IError } from \"../../common/index\";\nexport class BaseDb {\n\n    onError: (err: IError) => void;\n    protected get dbName() {\n        return IdbHelper.activeDb.name;\n    }\n\n    protected get dbStatus() {\n        return IdbHelper.dbStatus;\n    }\n\n    protected set dbStatus(value) {\n        IdbHelper.dbStatus = value;\n    }\n\n\n    protected set dbConnection(value) {\n        IdbHelper.dbConnection = value;\n    }\n\n    protected get dbConnection() {\n        return IdbHelper.dbConnection;\n    }\n\n    protected updateDbStatus(status: CONNECTION_STATUS, err?: ERROR_TYPE) {\n        IdbHelper.updateDbStatus(status, err);\n    }\n\n    protected onDbDroppedByBrowser(deleteMetaData?: boolean) {\n        IdbHelper.callDbDroppedByBrowser(deleteMetaData);\n    }\n\n    protected get dbVersion() {\n        return parseInt(IdbHelper.activeDbVersion as any);\n    }\n\n    protected get activeDb() {\n        return IdbHelper.activeDb;\n    }\n\n    protected getDbList() {\n        return IdbHelper.getDbList();\n    }\n\n    protected setDbList(value) {\n        return IdbHelper.setDbList(value);\n    }\n\n\n    protected onDbClose(event) {\n        this.onDbDroppedByBrowser();\n        this.updateDbStatus(CONNECTION_STATUS.Closed, ERROR_TYPE.ConnectionClosed);\n    }\n\n    protected onDbVersionChange(e: IDBVersionChangeEvent) {\n        if (e.newVersion === null) { // An attempt is made to delete the db\n            (e.target as any).close(); // Manually close our connection to the db\n            this.onDbDroppedByBrowser(true);\n            this.updateDbStatus(CONNECTION_STATUS.Closed, ERROR_TYPE.ConnectionClosed);\n        }\n    }\n\n    protected onDbConError(e) {\n        IdbHelper.dbStatus.lastError = (\"Error occured in connection :\" + (e.target as any).result) as any;\n    }\n}","import { QUERY_OPTION, CaseOption } from \"../../../common/index\";\n\nexport class ThenEvaluator {\n    private columnName_: string;\n    private value;\n    private caseQuery_: { [columnName: string]: [CaseOption] };\n    private caseColumnQuery_: CaseOption[];\n    private length_: number;\n\n    setCaseAndValue(caseQuery: any, value) {\n        this.caseQuery_ = caseQuery;\n        this.setValue(value);\n    }\n\n    setCaseAndColumn(caseQuery: { [columnName: string]: [CaseOption] }, columnName: string) {\n        this.caseQuery_ = caseQuery;\n        this.setColumn(columnName);\n        return this;\n    }\n\n    setColumn(columnName: string) {\n        this.columnName_ = columnName;\n        this.caseColumnQuery_ = this.caseQuery_[this.columnName_];\n        this.length_ = this.caseColumnQuery_.length;\n        return this;\n    }\n\n    setValue(value) {\n        this.value = value;\n        return this;\n    }\n\n    evaluate() {\n        for (let i = 0; i < this.length_; i++) {\n            if (this.checkCase_(this.caseColumnQuery_[i]) === true) {\n                return this.caseColumnQuery_[i].then;\n            }\n        }\n        const lastThen = this.caseColumnQuery_[this.length_ - 1].then;\n        return lastThen == null ? this.value[this.columnName_] : lastThen;\n    }\n\n    private checkCase_(cond: CaseOption) {\n        let queryOption;\n        for (queryOption in cond) {\n            switch (queryOption) {\n                case QUERY_OPTION.GreaterThan:\n                    if (this.value[this.columnName_] > cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.Equal:\n                    if (this.value[this.columnName_] === cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.LessThan:\n                    if (this.value[this.columnName_] < cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.GreaterThanEqualTo:\n                    if (this.value[this.columnName_] >= cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.LessThanEqualTo:\n                    if (this.value[this.columnName_] <= cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.NotEqualTo:\n                    if (this.value[this.columnName_] !== cond[queryOption]) {\n                        return true;\n                    } break;\n                case QUERY_OPTION.Between:\n                    if (this.value[this.columnName_] > cond[queryOption].low && this.value[this.columnName_] < cond[queryOption].high) {\n                        return true;\n                    } break;\n            }\n            return false;\n        }\n    }\n}","import { WhereBase } from \"../where_base\";\nimport { SelectQuery, CaseOption, QUERY_OPTION } from \"../../../common/index\";\nimport { ThenEvaluator } from \"./then_evaluator\";\n\n\nexport class BaseSelect extends WhereBase {\n    sorted = false;\n    isOr: boolean;\n    isArrayQry: boolean;\n    onWhereArrayQrySuccess: () => void;\n    query: SelectQuery;\n    orInfo: {\n        results?: any[];\n        orQuery: object\n    };\n\n    isSubQuery = false;\n\n    shouldEvaluateLimitAtEnd = false;\n    shouldEvaluateSkipAtEnd = false;\n\n    protected pushResult: (value) => void;\n\n    protected thenEvaluator = new ThenEvaluator();\n\n    protected setPushResult() {\n        if (this.query.case) {\n            this.pushResult = (value) => {\n                let columnName: string;\n                this.thenEvaluator.setCaseAndValue(this.query.case, value);\n                for (columnName in this.query.case) {\n                    value[columnName] = this.thenEvaluator.setColumn(columnName).evaluate();\n                }\n                this.results.push(value);\n            };\n        }\n        else {\n            this.pushResult = (value) => {\n                this.results.push(value);\n            };\n        }\n    }\n\n    protected removeDuplicates() {\n        let datas = this.results;\n        // free results memory\n        this.results = undefined;\n        const key = this.getPrimaryKey(this.query.from);\n        const lookupObject = {};\n        for (const i in datas) {\n            lookupObject[datas[i][key]] = datas[i];\n        }\n        // free datas memory\n        datas = [];\n        for (const i in lookupObject) {\n            datas.push(lookupObject[i]);\n        }\n        this.results = datas;\n    }\n}","import { BaseSelect } from \"./base_select\";\nimport { LogHelper } from \"../../log_helper\";\nimport { ERROR_TYPE } from \"../../../common/index\";\nlet cursorRequest: IDBRequest;\nexport class NotWhere extends BaseSelect {\n    protected executeWhereUndefinedLogic() {\n        if (this.query.order && this.query.order.idbSorting !== false && this.query.order.by) {\n            if (this.objectStore.indexNames.contains(this.query.order.by as string)) {\n                const orderType: IDBCursorDirection = this.query.order.type &&\n                    this.query.order.type.toLowerCase() === 'desc' ? 'prev' : 'next';\n                this.sorted = true;\n                cursorRequest = this.objectStore.index(this.query.order.by as string).\n                    openCursor(null, orderType);\n            }\n            else {\n                const error = new LogHelper(ERROR_TYPE.ColumnNotExist, { column: this.query.order.by, isOrder: true });\n                this.onErrorOccured(error, true);\n                return;\n            }\n        }\n        else {\n            cursorRequest = this.objectStore.openCursor();\n        }\n\n        cursorRequest.onerror = this.onErrorOccured;\n\n        if (this.shouldEvaluateLimitAtEnd === false && this.shouldEvaluateSkipAtEnd === false) {\n            if (this.skipRecord && this.limitRecord) {\n                this.executeSkipAndLimitForNoWhere_();\n            }\n            else if (this.skipRecord) {\n                this.executeSkipForNoWhere_();\n            }\n            else if (this.limitRecord) {\n                this.executeLimitForNotWhere_();\n            }\n            else {\n                this.executeSimpleForNotWhere_();\n            }\n        }\n        else {\n            this.executeSimpleForNotWhere_();\n        }\n    }\n\n    private executeSkipAndLimitForNoWhere_() {\n        let recordSkipped = false,\n            cursor: IDBCursorWithValue;\n        cursorRequest.onsuccess = (e) => {\n            cursor = (e as any).target.result;\n            if (cursor) {\n                if (recordSkipped && this.results.length !== this.limitRecord) {\n                    this.pushResult(cursor.value);\n                    cursor.continue();\n                }\n                else {\n                    recordSkipped = true;\n                    cursor.advance(this.skipRecord);\n                }\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSkipForNoWhere_() {\n        let recordSkipped = false,\n            cursor;\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (recordSkipped) {\n                    this.pushResult(cursor.value);\n                    cursor.continue();\n                }\n                else {\n                    recordSkipped = true;\n                    cursor.advance(this.skipRecord);\n                }\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSimpleForNotWhere_() {\n        let cursor;\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                this.pushResult(cursor.value);\n                (cursor as any).continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeLimitForNotWhere_() {\n        let cursor;\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor && this.results.length !== this.limitRecord) {\n                this.pushResult(cursor.value);\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n}\n","import { NotWhere } from \"./not_where\";\nimport { promiseAll, promise } from \"../../helpers/index\";\n\nlet shouldAddValue: () => boolean;\nlet skipOrPush: (val) => void;\nlet skip;\nlet cursor: IDBCursorWithValue;\nexport class In extends NotWhere {\n    protected executeInLogic(column, values) {\n        skip = this.skipRecord;\n        skipOrPush = (val) => {\n            if (skip === 0) {\n                this.pushResult(val);\n            }\n            else {\n                --skip;\n            }\n        };\n        shouldAddValue = () => {\n            return this.whereCheckerInstance.check(cursor.value);\n        };\n        if (this.shouldEvaluateLimitAtEnd === false && this.shouldEvaluateSkipAtEnd === false) {\n            if (this.skipRecord && this.limitRecord) {\n                this.executeSkipAndLimitForIn_(column, values);\n            }\n            else if (this.skipRecord) {\n                this.executeSkipForIn_(column, values);\n            }\n            else if (this.limitRecord) {\n                this.executeLimitForIn_(column, values);\n            }\n            else {\n                this.executeSimpleForIn_(column, values);\n            }\n        }\n        else {\n            this.executeSimpleForIn_(column, values);\n        }\n    }\n\n    private executeSkipAndLimitForIn_(column, values) {\n        let cursorRequest: IDBRequest;\n        const columnStore = this.objectStore.index(column);\n\n        const runInLogic: (val) => Promise<void> = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e: any) => {\n                    cursor = e.target.result;\n                    if (this.results.length !== this.limitRecord && cursor) {\n                        if (shouldAddValue()) {\n                            skipOrPush(cursor.value);\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n\n    private executeSkipForIn_(column, values) {\n\n        let cursorRequest: IDBRequest;\n        const columnStore = this.objectStore.index(column);\n        const runInLogic: (val) => Promise<void> = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e: any) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (shouldAddValue()) {\n                            skipOrPush((cursor.value));\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n\n    private executeLimitForIn_(column, values) {\n        let cursorRequest: IDBRequest;\n        const columnStore = this.objectStore.index(column);\n        const runInLogic = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e: any) => {\n                    cursor = e.target.result;\n                    if (cursor && this.results.length !== this.limitRecord) {\n                        if (shouldAddValue()) {\n                            this.pushResult(cursor.value);\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n\n    private executeSimpleForIn_(column, values) {\n        let cursorRequest: IDBRequest;\n        const columnStore = this.objectStore.index(column);\n        const runInLogic = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e: any) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (shouldAddValue()) {\n                            this.pushResult(cursor.value);\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n}","import { In } from \"./in\";\n\nlet shouldAddValue: () => boolean;\nlet skipOrPush: (val) => void;\nlet skip;\nlet cursor: IDBCursorWithValue;\nlet cursorRequest: IDBRequest;\nexport class Regex extends In {\n    protected executeRegexLogic(column, exp: RegExp) {\n\n        skip = this.skipRecord;\n        this.regexExpression = exp;\n        skipOrPush = (val) => {\n            if (skip === 0) {\n                this.pushResult(val);\n            }\n            else {\n                --skip;\n            }\n        };\n        shouldAddValue = () => {\n            return this.regexTest(cursor.key) &&\n                this.whereCheckerInstance.check(cursor.value);\n        };\n\n        cursorRequest = this.objectStore.index(column).openCursor();\n        cursorRequest.onerror = this.onErrorOccured;\n        if (this.shouldEvaluateLimitAtEnd === false && this.shouldEvaluateSkipAtEnd === false) {\n            if (this.skipRecord && this.limitRecord) {\n                this.executeSkipAndLimitForRegex_();\n            }\n            else if (this.skipRecord) {\n                this.executeSkipForRegex_();\n            }\n            else if (this.limitRecord) {\n                this.executeLimitForRegex_();\n            }\n            else {\n                this.executeSimpleForRegex_();\n            }\n        }\n        else {\n            this.executeSimpleForRegex_();\n        }\n    }\n\n    private executeSkipAndLimitForRegex_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (this.results.length !== this.limitRecord && cursor) {\n                if (shouldAddValue()) {\n                    skipOrPush(cursor.value);\n                }\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSkipForRegex_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (shouldAddValue()) {\n                    skipOrPush((cursor.value));\n                }\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeLimitForRegex_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (this.results.length !== this.limitRecord && cursor) {\n                if (shouldAddValue()) {\n                    this.pushResult(cursor.value);\n                }\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSimpleForRegex_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (shouldAddValue()) {\n                    this.pushResult(cursor.value);\n                }\n                cursor.continue();\n            } else {\n                this.onQueryFinished();\n            }\n        };\n    }\n}","import { Regex } from \"./regex\";\n\nlet shouldAddValue: () => boolean;\nlet cursor: IDBCursorWithValue;\nlet cursorRequest: IDBRequest;\nexport class Where extends Regex {\n\n    protected executeWhereLogic(column, value, op, dir) {\n        shouldAddValue = () => {\n            return this.whereCheckerInstance.check(cursor.value);\n        };\n        value = op ? value[op] : value;\n        cursorRequest = this.objectStore.index(column).openCursor(\n            this.getKeyRange(value, op),\n            dir\n        );\n\n        cursorRequest.onerror = this.onErrorOccured;\n\n        if (this.shouldEvaluateLimitAtEnd === false && this.shouldEvaluateSkipAtEnd === false) {\n            if (this.skipRecord && this.limitRecord) {\n                this.executeSkipAndLimitForWhere_();\n            }\n            else if (this.skipRecord) {\n                this.executeSkipForWhere_();\n            }\n            else if (this.limitRecord) {\n                this.executeLimitForWhere_();\n            }\n            else {\n                this.executeSimpleForWhere_();\n            }\n        }\n        else {\n            this.executeSimpleForWhere_();\n        }\n\n    }\n\n    private executeSkipAndLimitForWhere_() {\n        let recordSkipped = false;\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (recordSkipped && this.results.length !== this.limitRecord) {\n                    if (shouldAddValue()) {\n                        this.pushResult(cursor.value);\n                    }\n                    cursor.continue();\n                }\n                else {\n                    recordSkipped = true;\n                    cursor.advance(this.skipRecord);\n                }\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeSkipForWhere_() {\n        let recordSkipped = false;\n\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (recordSkipped) {\n                    if (shouldAddValue()) {\n                        this.pushResult(cursor.value);\n                    }\n                    cursor.continue();\n                }\n                else {\n                    recordSkipped = true;\n                    cursor.advance(this.skipRecord);\n                }\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n    }\n\n    private executeLimitForWhere_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor && this.results.length !== this.limitRecord) {\n                if (shouldAddValue()) {\n                    this.pushResult(cursor.value);\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n\n    }\n\n    private executeSimpleForWhere_() {\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (shouldAddValue()) {\n                    this.pushResult(cursor.value);\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n    }\n}","import { Where } from \"./where\";\nimport { DATA_TYPE, QUERY_OPTION } from \"../../../common/index\";\nimport { getDataType, getObjectFirstKey } from \"../../utils/index\";\n\nexport class GroupByHelper extends Where {\n    protected processGroupBy() {\n        const groupBy = this.query.groupBy as any;\n        let datas = this.results;\n        const lookUpObj = {};\n        // free results memory\n        this.results = this.query.groupBy = null;\n        if (getDataType(groupBy) !== DATA_TYPE.Object) {\n            if (getDataType(groupBy) === DATA_TYPE.String) {\n                for (const i in datas) {\n                    lookUpObj[datas[i][groupBy as string]] = datas[i];\n                }\n            }\n            else {\n                let objKey;\n                for (const i in datas) {\n                    objKey = \"\";\n                    for (const column in groupBy) {\n                        objKey += datas[i][groupBy[column]];\n                    }\n                    lookUpObj[objKey] = datas[i];\n                }\n            }\n        }\n        else {\n            const caseQueryLength = Object.keys(groupBy).length;\n            if (caseQueryLength === 1) {\n                const groupByColumn = getObjectFirstKey(groupBy);\n                this.thenEvaluator.setCaseAndColumn(groupBy, groupByColumn);\n                for (const i in datas) {\n                    lookUpObj[this.thenEvaluator.setValue(datas[i]).evaluate()] = datas[i];\n                }\n            }\n            else {\n                let objKey;\n                for (const i in datas) {\n                    objKey = \"\";\n                    this.thenEvaluator.setCaseAndValue(groupBy, datas[i]);\n                    for (const column in groupBy) {\n                        objKey += this.thenEvaluator.setColumn(column).evaluate();\n                    }\n                    lookUpObj[objKey] = datas[i];\n                }\n            }\n        }\n        // free datas memory\n        datas = [];\n        for (const i in lookUpObj) {\n            datas.push(lookUpObj[i]);\n        }\n        this.results = datas;\n    }\n\n    protected executeAggregateGroupBy() {\n        const grpQry = this.query.groupBy as any;\n        let datas = this.results;\n        // free results memory\n        this.results = undefined;\n        const lookUpObj = {};\n        // assign aggregate\n        const aggregateQry = this.query.aggregate;\n\n        let index;\n        let objKey;\n        let value;\n        let columnToAggregate;\n        const calculateAggregate = () => {\n            const getCount = () => {\n                value = lookUpObj[objKey];\n                // get old value\n                value = value ? value[\"count(\" + columnToAggregate + \")\"] : 0;\n                // add with old value if data exist\n                value += datas[index][columnToAggregate] ? 1 : 0;\n                return value;\n            };\n            const getMax = () => {\n                value = lookUpObj[objKey];\n                // get old value\n                value = value ? value[\"max(\" + columnToAggregate + \")\"] : 0;\n                datas[index][columnToAggregate] = datas[index][columnToAggregate] ?\n                    datas[index][columnToAggregate] : 0;\n                // compare between old value and new value\n                return value > datas[index][columnToAggregate] ? value : datas[index][columnToAggregate];\n            };\n            const getMin = () => {\n                value = lookUpObj[objKey];\n                // get old value\n                value = value ? value[\"min(\" + columnToAggregate + \")\"] : Infinity;\n                datas[index][columnToAggregate] = datas[index][columnToAggregate] ?\n                    datas[index][columnToAggregate] : Infinity;\n                // compare between old value and new value\n                return value < datas[index][columnToAggregate] ? value : datas[index][columnToAggregate];\n            };\n            const getSum = () => {\n                value = lookUpObj[objKey];\n                // get old value\n                value = value ? value[\"sum(\" + columnToAggregate + \")\"] : 0;\n                // add with old value if data exist\n                value += datas[index][columnToAggregate] ? datas[index][columnToAggregate] : 0;\n                return value;\n            };\n            const getAvg = () => {\n                value = lookUpObj[objKey];\n                // get old sum value\n                let sumOfColumn = value ? value[\"sum(\" + columnToAggregate + \")\"] : 0;\n                // add with old value if data exist\n                sumOfColumn += datas[index][columnToAggregate] ? datas[index][columnToAggregate] : 0;\n                datas[index][\"sum(\" + columnToAggregate + \")\"] = sumOfColumn;\n                // get old count value\n                value = value ? value[\"count(\" + columnToAggregate + \")\"] : 0;\n                // add with old value if data exist\n                value += datas[index][columnToAggregate] ? 1 : 0;\n                datas[index][\"count(\" + columnToAggregate + \")\"] = value;\n            };\n            for (const prop in aggregateQry) {\n                const aggregateColumn = aggregateQry[prop];\n                const aggregateValType = getDataType(aggregateColumn);\n                let aggregateCalculator;\n                switch (prop) {\n                    case QUERY_OPTION.Count:\n                        aggregateCalculator = getCount;\n                        break;\n                    case QUERY_OPTION.Max:\n                        aggregateCalculator = getMax;\n                        break;\n                    case QUERY_OPTION.Min:\n                        aggregateCalculator = getMin;\n                        break;\n                    case QUERY_OPTION.Sum:\n                        aggregateCalculator = getSum;\n                        break;\n                    case QUERY_OPTION.Avg:\n                        aggregateCalculator = getAvg;\n                        break;\n                }\n                switch (aggregateValType) {\n                    case DATA_TYPE.String:\n                        columnToAggregate = aggregateColumn;\n                        datas[index][`${prop}(${columnToAggregate})`] = aggregateCalculator();\n                        break;\n                    case DATA_TYPE.Array:\n                        for (const item in aggregateColumn) {\n                            columnToAggregate = aggregateColumn[item];\n                            datas[index][`${prop}(${columnToAggregate})`] = aggregateCalculator();\n                        }\n                }\n            }\n        };\n\n        if (getDataType(grpQry) === DATA_TYPE.String) {\n            for (index in datas) {\n                objKey = datas[index][grpQry];\n                calculateAggregate();\n                lookUpObj[objKey] = datas[index];\n            }\n        }\n        else {\n            for (index in datas) {\n                objKey = \"\";\n                for (const column in grpQry) {\n                    objKey += datas[index][grpQry[column]];\n                }\n                calculateAggregate();\n                lookUpObj[objKey] = datas[index];\n            }\n\n        }\n        // free datas memory\n        datas = [];\n        for (const i in lookUpObj) {\n            datas.push(lookUpObj[i]);\n        }\n        // Checking for avg and if exist then fill the datas;\n        if (aggregateQry.avg) {\n            if (getDataType(aggregateQry.avg) === DATA_TYPE.String) {\n                for (index in datas) {\n                    const sumForAvg = datas[index][\"sum(\" + aggregateQry.avg + \")\"],\n                        countForAvg = datas[index][\"count(\" + aggregateQry.avg + \")\"];\n                    datas[index][\"avg(\" + aggregateQry.avg + \")\"] = sumForAvg / countForAvg;\n                    if (aggregateQry.count !== aggregateQry.avg) {\n                        delete datas[index][\"count(\" + aggregateQry.avg + \")\"];\n                    }\n                    if (aggregateQry.sum !== aggregateQry.avg) {\n                        delete datas[index][\"sum(\" + aggregateQry.avg + \")\"];\n                    }\n                }\n            }\n            else {\n                const isCountTypeString = getDataType(aggregateQry.count) === DATA_TYPE.String;\n                const isSumTypeString = getDataType(aggregateQry.sum) === DATA_TYPE.String;\n                for (index in datas) {\n                    for (const column in aggregateQry.avg as any) {\n                        const avgColumn = aggregateQry.avg[column],\n                            sum = datas[index][\"sum(\" + avgColumn + \")\"],\n                            count = datas[index][\"count(\" + avgColumn + \")\"];\n                        datas[index][\"avg(\" + avgColumn + \")\"] = sum / count;\n\n                        if (isCountTypeString) {\n                            if (aggregateQry.count !== avgColumn) {\n                                delete datas[index][\"count(\" + avgColumn + \")\"];\n                            }\n                            else if (aggregateQry.count.indexOf(avgColumn) === -1) {\n                                delete datas[index][\"count(\" + avgColumn + \")\"];\n                            }\n                        }\n\n                        if (isSumTypeString) {\n                            if (aggregateQry.sum !== avgColumn) {\n                                delete datas[index][\"sum(\" + avgColumn + \")\"];\n                            }\n                            else if (aggregateQry.sum.indexOf(avgColumn) === -1) {\n                                delete datas[index][\"sum(\" + avgColumn + \")\"];\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        this.results = datas;\n    }\n}","import { GroupByHelper } from \"./group_by_helper\";\nimport { DATA_TYPE, ERROR_TYPE, QUERY_OPTION, OrderQuery, CaseOption } from \"../../../common/index\";\nimport { LogHelper } from \"../../log_helper\";\nimport { getDataType, removeSpace, isArray } from \"../../utils/index\";\nimport { Column } from \"../../model/index\";\n\nexport class Helper extends GroupByHelper {\n\n    processGroupDistinctAggr() {\n        if (this.query.distinct) {\n            const groupBy = [];\n            const result = this.results[0];\n            for (const key in result) {\n                groupBy.push(key);\n            }\n            const primaryKey = this.getPrimaryKey(this.query.from),\n                index = groupBy.indexOf(primaryKey);\n            groupBy.splice(index, 1);\n            this.query.groupBy = groupBy.length > 0 ? groupBy : null;\n        }\n        if (this.query.groupBy) {\n            if (this.query.aggregate) {\n                this.executeAggregateGroupBy();\n            }\n            else {\n                this.processGroupBy();\n            }\n        }\n        else if (this.query.aggregate) {\n            this.processAggregateQry();\n        }\n    }\n\n    private getOrderColumnInfo_(orderColumn: string): Column {\n        let column: Column;\n        if (this.query.join == null) {\n            column = this.getColumnInfo(orderColumn, this.query.from);\n        }\n        else {\n            const splittedByDot = removeSpace(orderColumn).split(\".\");\n            orderColumn = splittedByDot[1];\n            column = this.getColumnInfo(orderColumn, splittedByDot[0]);\n        }\n        if (column == null) {\n            this.onErrorOccured(new LogHelper(ERROR_TYPE.ColumnNotExist, { column: orderColumn, isOrder: true }), true);\n        }\n        return column;\n    }\n\n    private compareStringInDesc_(a: string, b: string) {\n        return b.localeCompare(a);\n    }\n\n    private compareStringinAsc_(a: string, b: string) {\n        return a.localeCompare(b);\n    }\n\n    private compareDefaultInDesc_(a: string, b) {\n        return new String(b).localeCompare(a);\n    }\n\n    private compareDefaultinAsc_(a, b: string) {\n        return new String(a).localeCompare(b);\n    }\n\n    private compareNumberInDesc_(a: number, b: number) {\n        return b - a;\n    }\n\n    private compareNumberinAsc_(a: number, b: number) {\n        return a - b;\n    }\n\n    private compareDateInDesc_(a: Date, b: Date) {\n        return b.getTime() - a.getTime();\n    }\n\n    private compareDateInAsc_(a: Date, b: Date) {\n        return a.getTime() - b.getTime();\n    }\n\n    private getValInDesc_(value1, value2, caseQuery: { [columnName: string]: [CaseOption] }) {\n        for (const columnName in caseQuery) {\n            this.thenEvaluator.setCaseAndValue(caseQuery, value1);\n            const column1 = this.thenEvaluator.setColumn(columnName).evaluate();\n            this.thenEvaluator.setCaseAndValue(caseQuery, value2);\n            const column2 = this.thenEvaluator.setColumn(columnName).evaluate();\n            switch (typeof value1[column1]) {\n                case DATA_TYPE.String:\n                    return this.compareStringInDesc_(value1[column1], value2[column2]);\n                default:\n                    return this.compareNumberInDesc_(value1[column1], value2[column2]);\n            }\n        }\n    }\n\n    private getValInAsc_(value1, value2, caseQuery: { [columnName: string]: [CaseOption] }) {\n        for (const columnName in caseQuery) {\n            this.thenEvaluator.setCaseAndValue(caseQuery, value1);\n            const column1 = this.thenEvaluator.setColumn(columnName).evaluate();\n            this.thenEvaluator.setCaseAndValue(caseQuery, value2);\n            const column2 = this.thenEvaluator.setColumn(columnName).evaluate();\n            switch (typeof value1[column1]) {\n                case DATA_TYPE.String:\n                    return this.compareStringinAsc_(value1[column1], value2[column2]);\n                default:\n                    return this.compareNumberinAsc_(value1[column1], value2[column2]);\n            }\n        }\n    }\n\n    private getValueComparer_(column: Column, order: OrderQuery): (a, b) => number {\n\n        switch (column.dataType) {\n            case DATA_TYPE.String:\n                return order.type === 'asc' ? this.compareStringinAsc_ : this.compareStringInDesc_;\n            case DATA_TYPE.Number:\n                return order.type === 'asc' ? this.compareNumberinAsc_ : this.compareNumberInDesc_;\n            case DATA_TYPE.DateTime:\n                return order.type === 'asc' ? this.compareDateInAsc_ : this.compareDateInDesc_;\n            default:\n                return order.type === 'asc' ? this.compareDefaultinAsc_ : this.compareDefaultInDesc_;\n        }\n\n    }\n\n    private orderBy_(order: OrderQuery) {\n        order.type = this.getOrderType_(order.type);\n        let orderColumn = order.by;\n        if (orderColumn != null && typeof orderColumn === DATA_TYPE.Object) {\n            if (order.type === \"asc\") {\n                this.results.sort((a, b) => {\n                    return this.getValInAsc_(a, b, orderColumn as any);\n                });\n            }\n            else {\n                this.results.sort((a, b) => {\n                    return this.getValInDesc_(a, b, orderColumn as any);\n                });\n            }\n        }\n        else {\n            const columnInfo = this.getOrderColumnInfo_(orderColumn as string);\n            if (columnInfo != null) {\n                const orderMethod = this.getValueComparer_(columnInfo, order);\n                orderColumn = columnInfo.name;\n                if (order.case == null) {\n                    this.results.sort((a, b) => {\n                        return orderMethod(a[orderColumn as string], b[orderColumn as string]);\n                    });\n                }\n                else {\n                    this.thenEvaluator.setCaseAndColumn({ [orderColumn]: order.case }, orderColumn);\n                    this.results.sort((a, b) => {\n                        return orderMethod(\n                            this.thenEvaluator.setValue(a).evaluate(),\n                            this.thenEvaluator.setValue(b).evaluate()\n                        );\n                    });\n                }\n            }\n        }\n\n    }\n\n    private getOrderType_(type: string) {\n        return type == null ? 'asc' : type.toLowerCase();\n    }\n\n    protected processOrderBy() {\n        const order = this.query.order;\n        if (order && this.results.length > 0 && !this.sorted) {\n            const orderQueryType = getDataType(order);\n            if (orderQueryType === DATA_TYPE.Object) {\n                this.orderBy_(order);\n            }\n            else if (orderQueryType === DATA_TYPE.Array) {\n                this.orderBy_(order[0]);\n                for (let i = 1, length = (order as any).length; i < length; i++) {\n                    if (this.error == null) {\n                        const prevOrderQueryBy = order[i - 1].by;\n                        const currentOrderQuery: OrderQuery = order[i];\n                        let currentorderQueryBy = currentOrderQuery.by;\n                        const orderColumnDetail = this.getOrderColumnInfo_(currentorderQueryBy as string);\n                        if (orderColumnDetail != null) {\n                            currentorderQueryBy = orderColumnDetail.name;\n                            currentOrderQuery.type = this.getOrderType_(currentOrderQuery.type);\n                            const orderMethod = this.getValueComparer_(orderColumnDetail, currentOrderQuery);\n                            this.results.sort((a, b) => {\n                                if (a[prevOrderQueryBy] === b[prevOrderQueryBy]) {\n                                    return orderMethod(\n                                        a[currentorderQueryBy as string],\n                                        b[currentorderQueryBy as string]);\n                                }\n                                return 0;\n                            });\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    protected processAggregateQry() {\n        const datas = this.results;\n        const datasLength = datas.length;\n        const results = {};\n        let columnToAggregate;\n        // free results memory\n        this.results = undefined;\n        const getCount = () => {\n            let result = 0;\n            for (const i in datas) {\n                result += datas[i][columnToAggregate] ? 1 : 0;\n            }\n            return result;\n        };\n        const getMax = () => {\n            let result = 0;\n            for (const i in datas) {\n                result = result > datas[i][columnToAggregate] ?\n                    result : datas[i][columnToAggregate];\n            }\n            return result;\n        };\n        const getMin = () => {\n            let result = Infinity, value = Infinity;\n            for (const i in datas) {\n                value = datas[i][columnToAggregate] ?\n                    datas[i][columnToAggregate] : Infinity;\n                result = result < value ? result : value;\n            }\n            return result;\n        };\n        const getSum = () => {\n            let result = 0;\n            for (const i in datas) {\n                result += datas[i][columnToAggregate];\n            }\n            return result;\n        };\n        const getAvg = () => {\n            let result = 0;\n            for (const i in datas) {\n                result += datas[i][columnToAggregate];\n            }\n            return result / datasLength;\n        };\n        for (const prop in this.query.aggregate) {\n            const aggregateColumn = this.query.aggregate[prop];\n            const aggregateValType = getDataType(aggregateColumn);\n            let aggregateCalculator;\n            switch (prop) {\n                case 'count':\n                    aggregateCalculator = getCount; break;\n                case 'max':\n                    aggregateCalculator = getMax; break;\n                case 'min':\n                    aggregateCalculator = getMin; break;\n                case 'sum':\n                    aggregateCalculator = getSum; break;\n                case 'avg':\n                    aggregateCalculator = getAvg; break;\n            }\n            switch (aggregateValType) {\n                case DATA_TYPE.String:\n                    columnToAggregate = aggregateColumn;\n                    results[`${prop}(${columnToAggregate})`] = aggregateCalculator();\n                    break;\n                case DATA_TYPE.Array:\n                    for (const key in aggregateColumn) {\n                        columnToAggregate = aggregateColumn[key];\n                        results[`${prop}(${columnToAggregate})`] = aggregateCalculator();\n                    }\n            }\n        }\n\n        // add results to the first index of result\n        for (const prop in results) {\n            datas[0][prop] = results[prop];\n        }\n        this.results = [datas[0]];\n    }\n}","import { IError, CONNECTION_STATUS, ERROR_TYPE } from \"../../common/index\";\nimport { KeyStore } from \"../keystore/index\";\nimport { Table, Column } from \"../model/index\";\nimport { LogHelper } from \"../log_helper\";\nimport { BaseDb } from \"./base_db\";\nimport { promise } from \"../helpers/index\";\n\nexport class DropDb extends BaseDb {\n    private onSuccess_: () => void;\n    private onError_: (err: IError) => void;\n\n    constructor(onSuccess: () => void, onError: (err: IError) => void) {\n        super();\n        this.onSuccess_ = onSuccess;\n        this.onError_ = onError;\n    }\n\n    deleteMetaData() {\n        return promise((res, rej) => {\n            KeyStore.remove(`JsStore_${this.dbName}_Db_Version`);\n            this.activeDb.tables.forEach((table: Table) => {\n                KeyStore.remove(`JsStore_${this.dbName}_${table.name}_Version`);\n                table.columns.forEach((column: Column) => {\n                    if (column.autoIncrement) {\n                        KeyStore.remove(`JsStore_${this.dbName}_${table.name}_${column.name}_Value`);\n                    }\n                });\n            });\n            // remove from database_list \n            this.getDbList().then(dbList => {\n                dbList.splice(dbList.indexOf(this.dbName), 1);\n                this.setDbList(dbList).then(() => {\n                    // remove db schema from keystore\n                    KeyStore.remove(`JsStore_${this.dbName}_Schema`).\n                        then(res).catch(rej);\n                });\n            });\n        });\n    }\n\n    deleteDb() {\n        setTimeout(() => {\n            const dropDbRequest = indexedDB.deleteDatabase(this.dbName);\n            dropDbRequest.onblocked = () => {\n                if (this.onError_ != null) {\n                    this.onError_(new LogHelper(ERROR_TYPE.DbBlocked).get());\n                }\n            };\n            dropDbRequest.onerror = (e) => {\n                if (this.onError_ != null) {\n                    this.onError_((event as any).target.error);\n                }\n            };\n            dropDbRequest.onsuccess = () => {\n                this.deleteMetaData().then(() => {\n                    this.onSuccess_();\n                    this.dbStatus.conStatus = CONNECTION_STATUS.Closed;\n                }).catch(this.onError_);\n            };\n        }, 100);\n    }\n}\n","import { QueryExecutor } from \"./query_executor\";\nimport { Config } from \"./config\";\nimport { IdbHelper } from \"./business/index\";\nimport { CONNECTION_STATUS, ERROR_TYPE } from \"../common/index\";\n\nexport const initialize = function () {\n    if (typeof (self as any).alert === 'undefined' && typeof ServiceWorkerGlobalScope === 'undefined') {\n        Config.isRuningInWorker = true;\n        (self as any).onmessage = function (e) {\n            new QueryExecutor().checkConnectionAndExecuteLogic(e.data);\n        };\n    }\n};\n\nconst onIdbNotSupproted = () => {\n    IdbHelper.dbStatus = {\n        conStatus: CONNECTION_STATUS.UnableToStart,\n        lastError: ERROR_TYPE.IndexedDbNotSupported\n    };\n};\n\nconst setCrossBrowserIndexedDb = () => {\n    try {\n        if (!indexedDB) {\n            indexedDB = (self as any).mozIndexedDB ||\n                (self as any).webkitIndexedDB || (self as any).msIndexedDB;\n        }\n        if (indexedDB) {\n            IDBTransaction = IDBTransaction ||\n                (self as any).webkitIDBTransaction || (self as any).msIDBTransaction;\n            (self as any).IDBKeyRange = (self as any).IDBKeyRange ||\n                (self as any).webkitIDBKeyRange || (self as any).msIDBKeyRange;\n        }\n        else {\n            onIdbNotSupproted();\n        }\n    } catch (ex) {\n        onIdbNotSupproted();\n    }\n};\n\nsetCrossBrowserIndexedDb();\ninitialize();\n","export * from './query_executor';\nexport * from './start';\nexport * from './config';\nexport * from './keystore/instance';","import { Table } from \"../model/index\";\nimport { IdbHelper, QueryHelper } from \"../business/index\";\nimport { KeyStore } from \"../keystore/index\";\nimport { promiseAll, promise } from \"../helpers/index\";\nimport { QueryExecutor } from \"../query_executor\";\n\nexport const getAutoIncrementValues = (table: Table): Promise<{ [columnName: string]: number }> => {\n\n    const autoIncColumns = table.columns.filter((col) => {\n        return col.autoIncrement;\n    });\n    return promise((resolve, reject) => {\n        promiseAll(autoIncColumns.map(column => {\n            const autoIncrementKey = `JsStore_${IdbHelper.activeDb.name}_${table.name}_${column.name}_Value`;\n            return KeyStore.get(autoIncrementKey);\n        })).then(results => {\n            const autoIncValues = {};\n            for (let i = 0; i < autoIncColumns.length; i++) {\n                autoIncValues[autoIncColumns[i].name] = results[i];\n            }\n            resolve(autoIncValues);\n        }).catch(reject);\n    });\n};\n\nexport const setAutoIncrementValue = (table: Table, autoIncrementValue: object) => {\n    const keys = Object.keys(autoIncrementValue);\n    return promiseAll(keys.map((columnName) => {\n        const autoIncrementKey = `JsStore_${IdbHelper.activeDb.name}_${table.name}_${columnName}_Value`;\n        const value = autoIncrementValue[columnName];\n        if (QueryExecutor.isTransactionQuery === true) {\n            QueryHelper.autoIncrementValues[table.name][columnName] = value;\n        }\n        return KeyStore.set(\n            autoIncrementKey,\n            value\n        );\n    }));\n};","import { Base } from \"../base\";\nimport { InsertQuery, IError, API } from \"../../../common/index\";\nimport { Table } from \"../../model/index\";\nimport { promiseAll, promise } from \"../../helpers/index\";\nimport { QueryHelper } from \"../query_helper\";\n\nexport class Instance extends Base {\n    private valuesAffected_ = [];\n    query: InsertQuery;\n    table: Table;\n\n    constructor(query: InsertQuery, onSuccess: (rowsInserted: number) => void, onError: (err: IError) => void) {\n        super();\n        this.onError = onError;\n        this.query = query;\n        this.onSuccess = onSuccess;\n        this.tableName = this.query.into;\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Insert, this.query);\n        queryHelper.checkAndModify().then(() => {\n            this.query = queryHelper.query;\n            this.insertData_(this.query.values);\n        }).catch(this.onError);\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.error == null) {\n            this.onSuccess(this.query.return === true ? this.valuesAffected_ : this.rowAffected);\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n\n    private onQueryFinished_() {\n        if (this.isTransaction === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    private insertData_(values: any[]) {\n\n        let objectStore: IDBObjectStore;\n        let onInsertData;\n        let addMethod;\n\n        if (this.query.return) {\n            onInsertData = (value) => {\n                this.valuesAffected_.push(value);\n            };\n\n        }\n        else {\n            onInsertData = (value) => {\n                ++this.rowAffected;\n            };\n        }\n\n        this.createTransaction([this.tableName], this.onTransactionCompleted_);\n        objectStore = this.transaction.objectStore(this.tableName);\n        if (this.query.upsert) {\n            addMethod = (value) => {\n                return objectStore.put(value);\n            };\n        }\n        else {\n            addMethod = (value) => {\n                return objectStore.add(value);\n            };\n        }\n        promiseAll(\n            values.map(function (value) {\n                return promise(function (res, rej) {\n                    const addResult = addMethod(value);\n                    addResult.onerror = rej;\n                    addResult.onsuccess = function () {\n                        onInsertData(value);\n                        res();\n                    };\n                });\n            })\n        ).then(() => {\n            this.onQueryFinished_();\n        }).catch((err) => {\n            this.transaction.abort();\n            this.onErrorOccured(err);\n        });\n    }\n}","import { Base } from \"../base\";\nimport { getDataType } from \"../../utils/index\";\nimport { DATA_TYPE, UpdateQuery } from \"../../../common/index\";\n\nexport const updateValue = (suppliedValue, storedValue) => {\n    for (const key in suppliedValue) {\n        if (getDataType(suppliedValue[key]) !== DATA_TYPE.Object) {\n            storedValue[key] = suppliedValue[key];\n        }\n        else {\n            for (const op in suppliedValue[key]) {\n                switch (op as any) {\n                    case '+': storedValue[key] += suppliedValue[key][op]; break;\n                    case '-': storedValue[key] -= suppliedValue[key][op]; break;\n                    case '*': storedValue[key] *= suppliedValue[key][op]; break;\n                    case '/': storedValue[key] /= suppliedValue[key][op]; break;\n                    case '{push}': storedValue[key].push(suppliedValue[key][op]); break;\n                    default: storedValue[key] = suppliedValue[key];\n                }\n                break;\n            }\n        }\n    }\n    return storedValue;\n};\n\nexport class BaseUpdate extends Base {\n    query: UpdateQuery;\n    protected initTransaction() {\n        this.createTransaction([this.query.in], this.onTransactionCompleted_);\n        this.objectStore = this.transaction.objectStore(this.query.in);\n    }\n\n    protected onQueryFinished() {\n        if (this.isTransaction === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.error) {\n            this.onError(this.error);\n        }\n        else {\n            this.onSuccess(this.rowAffected);\n        }\n    }\n}\n","import { BaseUpdate, updateValue } from \"./base_update\";\n\nexport class NotWhere extends BaseUpdate {\n\n    protected executeWhereUndefinedLogic() {\n        let cursor: IDBCursorWithValue;\n        const cursorRequest: IDBRequest<IDBCursorWithValue> = this.objectStore.openCursor();\n        cursorRequest.onsuccess = (e) => {\n            cursor = (e as any).target.result;\n            if (cursor) {\n                try {\n                    const cursorUpdateRequest = cursor.update(updateValue(this.query.set, cursor.value));\n                    cursorUpdateRequest.onsuccess = () => {\n                        ++this.rowAffected;\n                        cursor.continue();\n                    };\n                    cursorUpdateRequest.onerror = this.onErrorOccured.bind(this);\n                } catch (err) {\n                    this.onErrorOccured(err);\n                    this.transaction.abort();\n                }\n            }\n            else {\n                this.onQueryFinished();\n            }\n\n        };\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { NotWhere } from \"./not_where\";\nimport { updateValue } from \"./base_update\";\nimport { promiseAll, promise } from \"../../helpers/index\";\n\nexport class In extends NotWhere {\n    private executeInLogic(column, values: any[]) {\n        let cursor: IDBCursorWithValue;\n        const columnStore = this.objectStore.index(column);\n        let cursorRequest;\n        const runInLogic: (val) => Promise<void> = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (this.whereCheckerInstance.check(cursor.value)) {\n                            cursor.update(updateValue(this.query.set, cursor.value));\n                            ++this.rowAffected;\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n}","import { In } from \"./in\";\nimport { updateValue } from \"./base_update\";\n\nexport class Regex extends In {\n    protected executeRegexLogic(column: string, exp: RegExp) {\n        let cursor: IDBCursorWithValue;\n        this.regexExpression = exp;\n        const cursorOpenRequest = this.objectStore.index(column).openCursor();\n        cursorOpenRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.regexTest(cursor.key) &&\n                    this.whereCheckerInstance.check(cursor.value)) {\n                    try {\n                        const cursorUpdateRequest = cursor.update(updateValue(this.query.set, cursor.value));\n                        cursorUpdateRequest.onsuccess = () => {\n                            ++this.rowAffected;\n                            cursor.continue();\n                        };\n                        cursorUpdateRequest.onerror = this.onErrorOccured.bind(this);\n                    } catch (err) {\n                        this.transaction.abort();\n                        this.onErrorOccured(err);\n                    }\n                }\n                else {\n                    cursor.continue();\n                }\n\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n        cursorOpenRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { updateValue } from \"./base_update\";\nimport { Regex } from \"./regex\";\n\nexport class Where extends Regex {\n    protected executeWhereLogic(column, value, op) {\n        let cursor: IDBCursorWithValue,\n            cursorRequest;\n        value = op ? value[op] : value;\n        cursorRequest = this.objectStore.index(column).openCursor(this.getKeyRange(value, op));\n\n        cursorRequest.onsuccess = (e) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.whereCheckerInstance.check(cursor.value)) {\n                    try {\n                        const cursorUpdateRequest = cursor.update(updateValue(this.query.set, cursor.value));\n                        cursorUpdateRequest.onsuccess = () => {\n                            ++this.rowAffected;\n                            cursor.continue();\n                        };\n                        cursorUpdateRequest.onerror = this.onErrorOccured.bind(this);\n                    } catch (err) {\n                        this.transaction.abort();\n                        this.onErrorOccured(err);\n                    }\n                }\n                else {\n                    cursor.continue();\n                }\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n\n    }\n}","import { Where } from \"./where\";\nimport * as Select from \"../select/index\";\nimport { QueryHelper } from \"../query_helper\";\nimport { isArray } from \"../../utils/index\";\nimport { UpdateQuery, IError, API, SelectQuery, QUERY_OPTION } from \"../../../common/index\";\n\nexport class Instance extends Where {\n\n    constructor(query: UpdateQuery, onSuccess: (rowsUpdated: number) => void, onError: (err: IError) => void) {\n        super();\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n        this.query = query;\n        this.tableName = this.query.in;\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Update, this.query);\n        queryHelper.checkAndModify();\n        if (queryHelper.error == null) {\n            try {\n                this.initTransaction();\n                if (this.query.where != null) {\n                    if (this.query.where.or || isArray(this.query.where)) {\n                        this.executeComplexLogic_();\n                    }\n                    else {\n                        this.goToWhereLogic();\n                    }\n                }\n                else {\n                    this.executeWhereUndefinedLogic();\n                }\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onError(\n                queryHelper.error\n            );\n        }\n    }\n\n    private executeComplexLogic_() {\n        const selectObject = new Select.Instance({\n            from: this.query.in,\n            where: this.query.where,\n            ignoreCase: this.query.ignoreCase\n        } as SelectQuery, (results: any[]) => {\n            const key = this.getPrimaryKey(this.query.in);\n            const inQuery = [];\n            results.forEach((value) => {\n                inQuery.push(value[key]);\n            });\n            results = null;\n            const whereQry = { [key]: { [QUERY_OPTION.In]: inQuery } };\n            this.query.ignoreCase = null;\n            this.query[QUERY_OPTION.Where] = whereQry;\n            this.initTransaction();\n            this.goToWhereLogic();\n        }, this.onError);\n        selectObject.isSubQuery = true;\n        selectObject.execute();\n    }\n}\n","import { WhereBase } from \"../where_base\";\nimport { RemoveQuery } from \"../../../common/index\";\n\nexport class BaseRemove extends WhereBase {\n\n    isOr: boolean;\n    query: RemoveQuery;\n\n    protected onQueryFinished() {\n        // ff\n    }\n}\n","import { BaseRemove } from \"./base_remove\";\n\nexport class NotWhere extends BaseRemove {\n    protected executeWhereUndefinedLogic() {\n        let cursor;\n        const cursorRequest = this.objectStore.openCursor();\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                cursor.delete();\n                ++this.rowAffected;\n                (cursor as any).continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { NotWhere } from \"./not_where\";\nimport { promiseAll, promise } from \"../../helpers/index\";\n\nexport class In extends NotWhere {\n    protected executeInLogic(column, values) {\n        let cursor: IDBCursorWithValue, cursorRequest;\n        const runInLogic: (val) => Promise<void> = (value) => {\n            return promise((res, rej) => {\n                cursorRequest = this.objectStore.index(column).openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (this.whereCheckerInstance.check(cursor.value)) {\n                            cursor.delete();\n                            ++this.rowAffected;\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n}","import { In } from \"./in\";\n\nexport class Regex extends In {\n    protected executeRegexLogic(column: string, exp: RegExp) {\n        let cursor: IDBCursorWithValue;\n        this.regexExpression = exp;\n        const cursorRequest = this.objectStore.index(column).openCursor();\n\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.regexTest(cursor.key) &&\n                    this.whereCheckerInstance.check(cursor.value)) {\n                    cursor.delete();\n                    ++this.rowAffected;\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}","import { Regex } from \"./regex\";\n\nexport class Where extends Regex {\n    protected executeWhereLogic(column, value, op) {\n        let cursor: IDBCursorWithValue,\n            cursorRequest;\n        value = op ? value[op] : value;\n        cursorRequest = this.objectStore.index(column).openCursor(this.getKeyRange(value, op));\n\n        cursorRequest.onsuccess = (e) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.whereCheckerInstance.check(cursor.value)) {\n                    cursor.delete();\n                    ++this.rowAffected;\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { Where } from \"./where\";\nimport { RemoveQuery, QUERY_OPTION, API, IError } from \"../../../common/index\";\nimport * as Select from '../select/index';\nimport { QueryHelper } from \"../index\";\nimport { getObjectFirstKey, isArray } from \"../../utils/index\";\n\nexport class Instance extends Where {\n\n\n    constructor(\n        query: RemoveQuery, onSuccess: (recordRemoved: number) => void,\n        onError: (err: IError) => void\n    ) {\n        super();\n        this.query = query;\n        this.onSuccess = onSuccess;\n        this.onError = onError;\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Remove, this.query);\n        queryHelper.checkAndModify();\n        if (queryHelper.error == null) {\n            try {\n                this.initTransaction_();\n                if (this.query.where != null) {\n                    if (isArray(this.query.where)) {\n                        this.processWhereArrayQry();\n                    }\n                    else {\n                        this.processWhere_();\n                    }\n                }\n                else {\n                    this.executeWhereUndefinedLogic();\n                }\n\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onError(\n                queryHelper.error\n            );\n        }\n    }\n\n    private processWhereArrayQry() {\n        const selectObject = new Select.Instance(this.query, (results) => {\n            const keyList = [];\n            const pkey = this.getPrimaryKey(this.query.from);\n            results.forEach((item) => {\n                keyList.push(item[pkey]);\n            });\n            results = null;\n            const whereQry = { [pkey]: { [QUERY_OPTION.In]: keyList } };\n            this.query[QUERY_OPTION.Where] = whereQry;\n            this.processWhere_();\n        }, this.onError);\n        selectObject.isSubQuery = true;\n        selectObject.execute();\n    }\n\n    private processWhere_() {\n        if (this.query.where.or) {\n            this.processOrLogic();\n        }\n        this.goToWhereLogic();\n    }\n\n    private initTransaction_() {\n        this.createTransaction([this.query.from], this.onTransactionCompleted_);\n        this.objectStore = this.transaction.objectStore(this.query.from);\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.error == null) {\n            this.onSuccess(this.rowAffected);\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n\n    protected onQueryFinished() {\n        if (this.isOr === true) {\n            this.orQuerySuccess_();\n        }\n        else if (this.isTransaction === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    private orQuerySuccess_() {\n        const key = getObjectFirstKey((this as any)._orInfo.OrQuery);\n        if (key != null) {\n            const where = {};\n            where[key] = (this as any)._orInfo.OrQuery[key];\n            delete (this as any)._orInfo.OrQuery[key];\n            this.query.where = where;\n            this.goToWhereLogic();\n        }\n        else {\n            this.isOr = true;\n        }\n    }\n\n    private processOrLogic() {\n        this.isOr = true;\n        (this as any)._orInfo = {\n            OrQuery: this.query.where.or\n        };\n\n        // free or memory\n        delete this.query.where.or;\n    }\n}","import { WhereBase } from \"../where_base\";\nimport { CountQuery } from \"../../../common/index\";\n\nexport class BaseCount extends WhereBase {\n    resultCount = 0;\n    query: CountQuery;\n\n    protected onQueryFinished() {\n        if (this.isTransaction === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    protected onTransactionCompleted_ = () => {\n        if (this.error == null) {\n            this.onSuccess(this.resultCount);\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n}\n","import { BaseCount } from \"./base_count\";\n\nexport class NotWhere extends BaseCount {\n    protected executeWhereUndefinedLogic() {\n        let countRequest;\n        if (this.objectStore.count) {\n            countRequest = this.objectStore.count();\n            countRequest.onsuccess = () => {\n                this.resultCount = countRequest.result;\n                this.onQueryFinished();\n            };\n        }\n        else {\n            let cursor;\n            countRequest = this.objectStore.openCursor();\n            countRequest.onsuccess = (e: any) => {\n                cursor = e.target.result;\n                if (cursor) {\n                    ++this.resultCount;\n                    cursor.continue();\n                }\n                else {\n                    this.onQueryFinished();\n                }\n            };\n        }\n        countRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}\n","import { NotWhere } from \"./not_where\";\nimport { promiseAll, promise } from \"../../helpers/index\";\n\nexport class In extends NotWhere {\n    protected executeInLogic(column, values) {\n        let cursor: IDBCursorWithValue, cursorRequest;\n        const columnStore = this.objectStore.index(column);\n        let runInLogic: (val) => Promise<void> = (value) => {\n            return promise<void>((res, rej) => {\n                cursorRequest = columnStore.openCursor(this.getKeyRange(value));\n                cursorRequest.onsuccess = (e) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (this.whereCheckerInstance.check(cursor.value)) {\n                            ++this.resultCount;\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        res();\n                    }\n                };\n                cursorRequest.onerror = rej;\n            });\n        };\n\n        if (this.objectStore.count) {\n            runInLogic = (value) => {\n                return promise((res, rej) => {\n                    cursorRequest = columnStore.count(this.getKeyRange(value));\n                    cursorRequest.onsuccess = (e) => {\n                        this.resultCount += e.target.result;\n                        res();\n                    };\n                    cursorRequest.onerror = rej;\n                });\n            };\n        }\n\n        promiseAll(\n            values.map(function (val) {\n                return runInLogic(val);\n            })\n        ).then(() => {\n            this.onQueryFinished();\n        }).catch(err => {\n            this.onErrorOccured(err);\n        });\n    }\n}","import { In } from \"./in\";\nexport class Regex extends In {\n    protected executeRegexLogic(column: string, exp: RegExp) {\n        let cursor: IDBCursorWithValue;\n        this.regexExpression = exp;\n        const cursorRequest = this.objectStore.index(column).openCursor();\n\n        cursorRequest.onsuccess = (e: any) => {\n            cursor = e.target.result;\n            if (cursor) {\n                if (this.regexTest(cursor.key) &&\n                    this.whereCheckerInstance.check(cursor.value)) {\n                    ++this.resultCount;\n                }\n                cursor.continue();\n            }\n            else {\n                this.onQueryFinished();\n            }\n        };\n\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n\n    }\n}","import { Regex } from \"./regex\";\n\nexport class Where extends Regex {\n    protected executeWhereLogic(column, value, op) {\n        value = op ? value[op] : value;\n        let cursorRequest;\n        let cursor: IDBCursorWithValue;\n        let initCursorAndFilter;\n        if (Object.keys(this.query.where).length === 1 && this.objectStore.count) {\n            initCursorAndFilter = () => {\n                cursorRequest = this.objectStore.index(column).count(this.getKeyRange(value, op));\n                cursorRequest.onsuccess = () => {\n                    this.resultCount = cursorRequest.result;\n                    this.onQueryFinished();\n                };\n            };\n\n        }\n        else {\n            initCursorAndFilter = () => {\n                cursorRequest = this.objectStore.index(column).openCursor(this.getKeyRange(value, op));\n                cursorRequest.onsuccess = (e) => {\n                    cursor = e.target.result;\n                    if (cursor) {\n                        if (this.whereCheckerInstance.check(cursor.value)) {\n                            ++this.resultCount;\n                        }\n                        cursor.continue();\n                    }\n                    else {\n                        this.onQueryFinished();\n                    }\n                };\n            };\n        }\n        initCursorAndFilter();\n\n        cursorRequest.onerror = this.onErrorOccured.bind(this);\n    }\n}","import { Where } from \"./where\";\nimport {  IError, API, CountQuery, IDB_MODE } from \"../../../common/index\";\nimport * as Select from '../select/index';\nimport { QueryHelper } from \"../query_helper\";\nimport { isArray } from \"../../utils/index\";\n\nexport class Instance extends Where {\n\n    constructor(query: CountQuery, onSuccess: (noOfRecord: number) => void, onError: (error: IError) => void) {\n        super();\n        this.onError = onError;\n        this.onSuccess = onSuccess;\n        this.query = query;\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Count, this.query);\n        queryHelper.checkAndModify();\n        if (queryHelper.error == null) {\n            try {\n                const getDataFromSelect = () => {\n                    const selectInstance = new Select.Instance(this.query as any,\n                        (results) => {\n                            this.resultCount = results.length;\n                            this.onTransactionCompleted_();\n                        }, this.onError);\n                    selectInstance.execute();\n                };\n                if (this.query.join == null) {\n                    if (this.query.where != null) {\n                        if (this.query.where.or || isArray(this.query.where)) {\n                            getDataFromSelect();\n                        }\n                        else {\n                            this.initTransaction_();\n                            this.goToWhereLogic();\n                        }\n                    }\n                    else {\n                        this.initTransaction_();\n                        this.executeWhereUndefinedLogic();\n                    }\n                }\n                else {\n                    getDataFromSelect();\n                }\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onError(\n                queryHelper.error\n            );\n        }\n    }\n\n    private initTransaction_() {\n        this.createTransaction([this.query.from], this.onTransactionCompleted_, IDB_MODE.ReadOnly);\n        this.objectStore = this.transaction.objectStore(this.query.from);\n    }\n}","import * as Select from './instance';\nimport { QUERY_OPTION, DATA_TYPE, ERROR_TYPE, JoinQuery } from \"../../../common/index\";\nimport { Helper } from \"./orderby_helper\";\nimport { LogHelper } from \"../../log_helper\";\nimport { getDataType, removeSpace } from \"../../utils/index\";\n\nexport class Join extends Helper {\n\n    private joinQueryStack_: JoinQuery[] = [];\n    private currentQueryStackIndex_ = 0;\n    tablesFetched = [];\n\n    executeJoinQuery() {\n        const query = this.query;\n        if (getDataType(query.join) === DATA_TYPE.Object) {\n            this.joinQueryStack_ = [query.join as JoinQuery];\n        }\n        else {\n            this.joinQueryStack_ = query.join as JoinQuery[];\n        }\n        // get the data for first table\n        const tableName = query.from;\n        new Select.Instance({\n            from: tableName,\n            where: query.where,\n            case: query.case,\n            flatten: query.flatten\n        }, results => {\n            this.results = results.map((item) => {\n                return {\n                    [this.currentQueryStackIndex_]: item\n                };\n            });\n            this.tablesFetched.push(tableName);\n            this.startExecutingJoinLogic_();\n        }, this.onError).execute();\n    }\n\n    private onJoinQueryFinished_() {\n        if (this.error == null) {\n            if (this.results.length > 0) {\n\n                if (this.query[QUERY_OPTION.Skip] && !this.query[QUERY_OPTION.Limit]) {\n                    this.results.splice(0, this.query[QUERY_OPTION.Skip]);\n                }\n\n                try {\n                    let results = [];\n                    const tables = Object.keys(this.results[0]);\n                    const tablesLength = tables.length;\n                    const mapWithAlias = (query: JoinQuery, value: object) => {\n                        if (query.as != null) {\n                            for (const key in query.as) {\n                                if (value[(query.as as any)[key]] === undefined) {\n                                    value[(query.as as any)[key]] = value[key];\n                                    delete value[key];\n                                }\n                            }\n                        }\n                        return value;\n                    };\n                    this.results.forEach((result) => {\n                        let data = result[\"0\"]; // first table data\n                        for (let i = 1; i < tablesLength; i++) {\n                            const query = this.joinQueryStack_[i - 1];\n                            data = { ...data, ...mapWithAlias(query, result[i]) };\n                        }\n                        results.push(data);\n                    });\n                    this.results = results;\n                    // free results memory\n                    results = null;\n                    if (process.env.NODE_ENV === 'dev') {\n                        try {\n                            this.processOrderBy();\n                        }\n                        catch (ex) {\n                            this.onError({\n                                message: ex.message,\n                                type: ERROR_TYPE.InvalidOrderQuery\n                            });\n                            return;\n                        }\n                    }\n                    else {\n                        this.processOrderBy();\n                    }\n\n                    if (process.env.NODE_ENV === 'dev') {\n                        try {\n                            this.processGroupDistinctAggr();\n                        }\n                        catch (ex) {\n                            this.onError({\n                                message: ex.message,\n                                type: ERROR_TYPE.InvalidGroupQuery\n                            });\n                            return;\n                        }\n                    }\n                    else {\n                        this.processGroupDistinctAggr();\n                    }\n                }\n                catch (ex) {\n                    this.onError({\n                        message: ex.message,\n                        type: ERROR_TYPE.InvalidJoinQuery\n                    });\n                    return;\n                }\n\n                if (this.query[QUERY_OPTION.Skip] && this.query[QUERY_OPTION.Limit]) {\n                    this.results.splice(0, this.query[QUERY_OPTION.Skip]);\n                    this.results = this.results.slice(0, this.query[QUERY_OPTION.Limit]);\n                }\n                else if (this.query[QUERY_OPTION.Limit]) {\n                    this.results = this.results.slice(0, this.query[QUERY_OPTION.Limit]);\n                }\n            }\n            this.onSuccess(this.results);\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n\n    private startExecutingJoinLogic_() {\n        const query = this.joinQueryStack_[this.currentQueryStackIndex_];\n        if (query) {\n            try {\n                let jointblInfo = this.getJoinTableInfo_(query.on);\n                // table 1 is fetched & table2 needs to be fetched for join\n                if (query.with === jointblInfo.table1.table) {\n                    jointblInfo = {\n                        table1: jointblInfo.table2,\n                        table2: jointblInfo.table1\n                    };\n                }\n\n                if (process.env.NODE_ENV === 'dev') {\n                    this.checkJoinQuery_(jointblInfo, query);\n                    if (this.error != null) {\n                        return this.onJoinQueryFinished_();\n                    }\n                }\n\n                new Select.Instance({\n                    from: query.with,\n                    where: query.where,\n                    case: query.case,\n                    flatten: query.flatten\n                }, results => {\n                    this.jointables(query.type, jointblInfo, results);\n                    this.tablesFetched.push(jointblInfo.table2.table);\n                    ++this.currentQueryStackIndex_;\n                    this.startExecutingJoinLogic_();\n                }, this.onError).execute();\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onJoinQueryFinished_();\n        }\n    }\n\n    private jointables(joinType: string, jointblInfo: JoinTableInfo, secondtableData: any[]) {\n\n        const results = [];\n        const column1 = jointblInfo.table1.column;\n        const column2 = jointblInfo.table2.column;\n        const table1Index = this.tablesFetched.indexOf(jointblInfo.table1.table);\n        const table2Index = this.currentQueryStackIndex_ + 1;\n        const performInnerJoin = () => {\n            let index = 0;\n            this.results.forEach(valueFromFirstTable => {\n                secondtableData.forEach((valueFromSecondTable) => {\n                    if (valueFromFirstTable[table1Index][column1] === valueFromSecondTable[column2]) {\n                        results[index] = { ...valueFromFirstTable };\n                        results[index++][table2Index] = valueFromSecondTable;\n                    }\n                });\n            });\n        };\n        const performleftJoin = () => {\n            let index = 0;\n            let valueMatchedFromSecondTable: any[];\n            let callBack;\n            const columnDefaultValue = {};\n            this.getTable(jointblInfo.table2.table).columns.forEach(col => {\n                columnDefaultValue[col.name] = null;\n            });\n            this.results.forEach((valueFromFirstTable) => {\n                valueMatchedFromSecondTable = [];\n                if (table2Index === 1) {\n                    callBack = function (valueFromSecondTable) {\n                        if (valueFromFirstTable[table1Index][column1] === valueFromSecondTable[column2]) {\n                            valueMatchedFromSecondTable.push(valueFromSecondTable);\n                        }\n                    };\n                }\n                else {\n                    callBack = function (valueFromSecondTable) {\n                        const value = valueFromFirstTable[table1Index];\n                        if (value != null && value[column1] === valueFromSecondTable[column2]) {\n                            valueMatchedFromSecondTable.push(valueFromSecondTable);\n                        }\n                    };\n                }\n                secondtableData.forEach(callBack);\n                if (valueMatchedFromSecondTable.length === 0) {\n                    valueMatchedFromSecondTable = [columnDefaultValue];\n                }\n                valueMatchedFromSecondTable.forEach(function (value) {\n                    results[index] = { ...valueFromFirstTable };\n                    results[index++][table2Index] = value;\n                });\n            });\n        };\n        switch (joinType) {\n            case \"left\":\n                performleftJoin(); break;\n            default:\n                performInnerJoin();\n        }\n        this.results = results;\n    }\n\n    private getJoinTableInfo_(joinOn: string) {\n        joinOn = removeSpace(joinOn);\n        const splittedjoinOn = joinOn.split(\"=\");\n        const splittedjoinOnbydotFirst = splittedjoinOn[0].split(\".\");\n        const splittedjoinOnbydotSecond = splittedjoinOn[1].split(\".\");\n        const info = {\n            table1: {\n                table: splittedjoinOnbydotFirst[0],\n                column: splittedjoinOnbydotFirst[1]\n            },\n            table2: {\n                table: splittedjoinOnbydotSecond[0],\n                column: splittedjoinOnbydotSecond[1]\n            }\n        } as JoinTableInfo;\n        return info;\n    }\n\n    private checkJoinQuery_(jointblInfo: JoinTableInfo, qry: JoinQuery) {\n        const table1 = jointblInfo.table1;\n        const table2 = jointblInfo.table2;\n        const tableSchemaOf1stTable = this.getTable(table1.table);\n        const tableSchemaOf2ndTable = this.getTable(table2.table);\n        let err: LogHelper;\n\n        // check on info & with info \n        if (qry.with !== table2.table) {\n            err = new LogHelper(ERROR_TYPE.InvalidJoinQuery,\n                `on value should contains value of with`\n            );\n        }\n\n        // check for column existance\n\n        if (tableSchemaOf1stTable.columns.find(q => q.name === table1.column) == null) {\n            err = new LogHelper(ERROR_TYPE.InvalidJoinQuery,\n                `column ${table1.column} does not exist in table ${table1.table}`\n            );\n        }\n        else if (tableSchemaOf2ndTable.columns.find(q => q.name === table2.column) == null) {\n            err = new LogHelper(ERROR_TYPE.InvalidJoinQuery,\n                `column ${table2.column} does not exist in table ${table2.table}`\n            );\n        }\n\n        // check for column match in both table\n        if (qry.as == null) {\n            qry.as = {};\n        }\n        tableSchemaOf1stTable.columns.every(function (column) {\n            const columnFound = tableSchemaOf2ndTable.columns.find(q => q.name === column.name && q.name !== table1.column);\n            if (columnFound != null && qry.as[columnFound.name] == null) {\n                err = new LogHelper(ERROR_TYPE.InvalidJoinQuery,\n                    `column ${column.name} exist in both table ${table1.table} & ${table2.table}`\n                );\n                return false;\n            }\n            return true;\n        });\n        if (err != null) {\n            this.onErrorOccured(err, true);\n        }\n    }\n}\n\ntype JoinTableInfo = {\n    table1: { table: string, column: string }\n    table2: { table: string, column: string }\n};","export const getKeys = (value) => {\n    return Object.keys(value);\n};","export const isObject = (value) => {\n    return typeof value === 'object';\n};","import { SelectQuery, IError, IDB_MODE, QUERY_OPTION, API } from \"../../../common/index\";\nimport { Join } from \"./join\";\nimport { QueryHelper } from \"../query_helper\";\nimport { isArray, getObjectFirstKey, isObject, getKeys } from \"../../utils/index\";\n\nexport class Instance extends Join {\n\n    constructor(query: SelectQuery, onSuccess: (results: object[]) => void, onError: (err: IError) => void) {\n        super();\n        this.onError = onError;\n        this.onSuccess = onSuccess;\n        this.query = query;\n        this.tableName = query.from;\n        this.setPushResult();\n        if (isArray(this.query.where)) {\n            this.isArrayQry = true;\n            this.setLimitAndSkipEvaluationAtEnd_();\n        }\n        else {\n            this.skipRecord = query.skip;\n            this.limitRecord = query.limit;\n        }\n        if (query.order) {\n            if (isArray(query.order) || query.order.case || isObject(query.order.by)) {\n                this.query.order.idbSorting = false;\n            }\n            this.setLimitAndSkipEvaluationAtEnd_();\n        }\n        else if (query.groupBy) {\n            this.setLimitAndSkipEvaluationAtEnd_();\n        }\n\n    }\n\n    private setLimitAndSkipEvaluationAtEnd_() {\n        if (this.query.limit) {\n            this.shouldEvaluateLimitAtEnd = true;\n        }\n        if (this.query.skip) {\n            this.shouldEvaluateSkipAtEnd = true;\n        }\n    }\n\n    execute() {\n        const queryHelper = new QueryHelper(API.Select, this.query);\n        queryHelper.checkAndModify();\n        if (queryHelper.error == null) {\n            try {\n                if (this.query.join == null) {\n                    if (this.query.where != null) {\n                        this.initTransaction_();\n                        if (isArray(this.query.where)) {\n                            this.processWhereArrayQry();\n                        }\n                        else {\n                            this.processWhere_();\n                        }\n                    }\n                    else {\n                        this.initTransaction_();\n                        this.executeWhereUndefinedLogic();\n                    }\n\n                }\n                else {\n                    this.executeJoinQuery();\n                }\n            }\n            catch (ex) {\n                this.onExceptionOccured(ex);\n            }\n        }\n        else {\n            this.onError(\n                queryHelper.error\n            );\n        }\n    }\n\n\n    private processWhereArrayQry() {\n        this.isArrayQry = true;\n        const whereQuery = this.query.where,\n            pKey = this.getPrimaryKey(this.query.from);\n        let isFirstWhere = true, output = [], operation;\n\n        const isItemExist = (keyValue) => {\n            return output.findIndex(item => item[pKey] === keyValue) >= 0;\n        };\n        const onSuccess = () => {\n            if (operation === QUERY_OPTION.And) {\n                const doAnd = () => {\n                    let andResults = [];\n                    this.results.forEach((item) => {\n                        if (isItemExist(item[pKey])) {\n                            andResults.push(item);\n                        }\n                    });\n                    output = andResults;\n                    andResults = null;\n                };\n\n                if (isFirstWhere === true) {\n                    output = this.results;\n                }\n                else if (output.length > 0) {\n                    doAnd();\n                }\n            }\n            else {\n                if (output.length > 0) {\n                    this.results = [...output, ...this.results];\n                    this.removeDuplicates();\n                    output = this.results;\n                }\n                else {\n                    output = this.results;\n                }\n            }\n            isFirstWhere = false;\n            if (whereQuery.length > 0) {\n                this.results = [];\n                processFirstQry();\n            }\n            else {\n                this.results = output;\n                if (this.isSubQuery === true) {\n                    this.onTransactionCompleted_();\n                }\n            }\n\n        };\n        const processFirstQry = () => {\n            this.query.where = whereQuery.shift();\n            if (this.query.where[QUERY_OPTION.Or]) {\n                if (Object.keys(this.query.where).length === 1) {\n                    operation = QUERY_OPTION.Or;\n                    this.query.where = this.query.where[QUERY_OPTION.Or];\n                    this.onWhereArrayQrySuccess = onSuccess;\n                }\n                else {\n                    operation = QUERY_OPTION.And;\n                    this.onWhereArrayQrySuccess = onSuccess;\n                }\n            }\n            else {\n                operation = QUERY_OPTION.And;\n                this.onWhereArrayQrySuccess = onSuccess;\n            }\n            this.processWhere_();\n        };\n        processFirstQry();\n    }\n\n    protected onQueryFinished() {\n        if (this.isOr === true) {\n            this.orQuerySuccess_();\n        }\n        else if (this.isArrayQry === true) {\n            this.onWhereArrayQrySuccess();\n        }\n        else if (this.isTransaction === true || this.isSubQuery === true) {\n            this.onTransactionCompleted_();\n        }\n    }\n\n    private initTransaction_() {\n        this.createTransaction([this.tableName], this.onTransactionCompleted_, IDB_MODE.ReadOnly);\n        this.objectStore = this.transaction.objectStore(this.tableName);\n    }\n\n    private processWhere_() {\n        if (this.query.where.or) {\n            this.processOrLogic_();\n        }\n        this.goToWhereLogic();\n    }\n\n    private onTransactionCompleted_ = () => {\n        if (this.error == null) {\n            if (this.query.flatten) {\n                const flattendData = [];\n                const indexToDelete = {};\n                this.query.flatten.forEach(column => {\n                    this.results.forEach((data, i) => {\n                        data[column].forEach(item => {\n                            flattendData.push(\n                                { ...data, ...{ [column]: item } }\n                            );\n                        });\n                        indexToDelete[i] = true;\n                    });\n                });\n                let itemsDeleted = 0;\n                getKeys(indexToDelete).forEach(key => {\n                    this.results.splice(Number(key) - itemsDeleted, 1);\n                    ++itemsDeleted;\n                });\n                this.results = this.results.concat(flattendData);\n            }\n            this.processOrderBy();\n            if (!this.error) {\n                this.processGroupDistinctAggr();\n                if (this.shouldEvaluateSkipAtEnd) {\n                    this.results.splice(0, this.query.skip);\n                }\n                if (this.shouldEvaluateLimitAtEnd) {\n                    this.results = this.results.slice(0, this.query.limit);\n                }\n                this.onSuccess(this.results);\n            }\n            else {\n                this.onError(this.error);\n            }\n        }\n        else {\n            this.onError(this.error);\n        }\n    }\n\n    private orQueryFinish_() {\n        this.isOr = false;\n        this.results = this.orInfo.results;\n        // free or info memory\n        this.orInfo = null;\n        this.removeDuplicates();\n        this.onQueryFinished();\n    }\n\n    private orQuerySuccess_() {\n        this.orInfo.results = [... this.orInfo.results, ...this.results];\n        if (!this.query.limit || (this.query.limit > this.orInfo.results.length)) {\n            this.results = [];\n            const key = getObjectFirstKey(this.orInfo.orQuery);\n            if (key != null) {\n                const where = {};\n                where[key] = this.orInfo.orQuery[key];\n                delete this.orInfo.orQuery[key];\n                this.query.where = where;\n                this.goToWhereLogic();\n            }\n            else {\n                this.orQueryFinish_();\n            }\n        }\n        else {\n            this.orQueryFinish_();\n        }\n    }\n\n    private processOrLogic_() {\n        this.isOr = true;\n        this.orInfo = {\n            orQuery: this.query.where.or,\n            results: []\n        };\n        // free or memory\n        delete this.query.where.or;\n    }\n}","import { DATA_TYPE } from \"../../common/index\";\n\nexport const getDataType = (value) => {\n    if (value == null) {\n        return DATA_TYPE.Null;\n    }\n    const type = typeof value;\n    switch (type) {\n        case 'object':\n            if (Array.isArray(value)) {\n                return DATA_TYPE.Array;\n            }\n            else if (value.getDate && value.getTime) {\n                return DATA_TYPE.DateTime;\n            }\n        default:\n            return type;\n    }\n}","export const isArray = (value) => {\n    return Array.isArray(value);\n};","export const getObjectFirstKey = (value) => {\n    for (const key in value) {\n        return key;\n    }\n    return null;\n};","export const removeSpace = (value: string) => {\n    return value.replace(/\\s/g, '');\n};","import {\n    TranscationQuery, WebWorkerRequest, SelectQuery, RemoveQuery,\n    CountQuery, UpdateQuery, InsertQuery, ERROR_TYPE, API, IError\n} from \"../../../common/index\";\nimport { Base } from \"../base\";\nimport * as Select from '../select/index';\nimport * as Count from '../count/index';\nimport * as Insert from '../insert/index';\nimport * as Remove from '../remove/index';\nimport * as Update from '../update/index';\nimport { QueryHelper } from \"../query_helper\";\nimport { LogHelper } from \"../../log_helper\";\nimport { promise, promiseAll, getAutoIncrementValues } from \"../../helpers/index\";\nimport { Config } from \"../../config\";\n\nexport class Instance extends Base {\n    query: TranscationQuery;\n    results;\n    requestQueue: WebWorkerRequest[] = [];\n    isQueryExecuting = false;\n\n    isTxStarted_ = false;\n\n    constructor(qry: TranscationQuery, onSuccess: (results: any) => void, onError: (err: IError) => void) {\n        super();\n        this.query = qry;\n        this.onError = onError;\n        this.onSuccess = onSuccess;\n        this.results = {};\n    }\n\n    execute() {\n        const notExistingTable = this.getNotExistingTable_(this.query.tables);\n        if (notExistingTable != null) {\n            this.onError(new LogHelper(ERROR_TYPE.TableNotExist, { tableName: notExistingTable }).get());\n            return;\n        }\n        promiseAll<number>(this.query.tables.map(table => {\n            return getAutoIncrementValues(this.getTable(table));\n        })).then(results => {\n            results.forEach((result: any, index) => {\n                QueryHelper.autoIncrementValues[this.query.tables[index]] = result;\n            });\n            this.startExecution_();\n        }).catch(this.onError);\n    }\n\n    private startExecution_() {\n        const select = (qry: SelectQuery) => {\n            return this.pushRequest_({\n                name: API.Select,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const insert = (qry: InsertQuery) => {\n            return this.pushRequest_({\n                name: API.Insert,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const update = (qry: UpdateQuery) => {\n            return this.pushRequest_({\n                name: API.Update,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const remove = (qry: RemoveQuery) => {\n            return this.pushRequest_({\n                name: API.Remove,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const count = (qry: CountQuery) => {\n            return this.pushRequest_({\n                name: API.Count,\n                query: qry\n            } as WebWorkerRequest);\n        };\n        const setResult = (key: string, value) => {\n            this.results[key] = value;\n        };\n        const getResult = (key: string) => {\n            return this.results[key];\n        };\n        const abort = (msg: string) => {\n            this.abortTransaction_(msg);\n        };\n\n        const start = () => {\n            this.checkQueries_(this.requestQueue).then((results) => {\n                this.startTransaction_();\n            }).catch((err) => {\n                this.onError(err);\n            });\n        };\n        let txLogic = null;\n        if (Config.isRuningInWorker === true) {\n            eval(\"txLogic =\" + this.query.logic);\n\n        }\n        else {\n            txLogic = this.query.logic;\n        }\n        txLogic.call(\n            this,\n            {\n                data: this.query.data,\n                insert, select, update, remove,\n                count, setResult, getResult, abort, start\n            }\n        );\n\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`transaction query started`);\n        }\n    }\n\n    private startTransaction_() {\n        try {\n            this.isTxStarted_ = true;\n            this.initTransaction_(this.query.tables);\n            this.processExecutionOfQry_();\n        }\n        catch (ex) {\n            this.onExceptionOccured(ex);\n        }\n    }\n\n    private initTransaction_(tableNames: string[]) {\n        this.createTransaction(tableNames, this.onTransactionCompleted_.bind(this));\n    }\n\n    private onTransactionCompleted_() {\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`transaction finished`);\n        }\n        this.onSuccess(this.results);\n    }\n\n    private onRequestFinished_(result) {\n        const finisehdRequest = this.requestQueue.shift();\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`finished request : ${finisehdRequest.name} `);\n        }\n        if (finisehdRequest) {\n            if (this.error) {\n                this.abortTransaction_(\"automatic abort of transaction due to error occured\");\n                if (process.env.NODE_ENV === 'dev') {\n                    console.log(`transaction aborted due to error occured`);\n                }\n                this.onErrorOccured(this.error);\n            }\n            else {\n                this.isQueryExecuting = false;\n                if (finisehdRequest.onSuccess) {\n                    finisehdRequest.onSuccess(result);\n                }\n                this.processExecutionOfQry_();\n            }\n        }\n    }\n\n    private abortTransaction_(msg: string) {\n        if (this.transaction != null) {\n            this.transaction.abort();\n            if (process.env.NODE_ENV === 'dev') {\n                console.log(`transaction aborted. Msg : ${msg}`);\n            }\n        }\n    }\n\n    private executeRequest_(request: WebWorkerRequest) {\n        this.isQueryExecuting = true;\n        let requestObj;\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`executing request : ${request.name} `);\n        }\n        switch (request.name) {\n            case API.Select:\n                requestObj = new Select.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n            case API.Insert:\n                requestObj = new Insert.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n            case API.Update:\n                requestObj = new Update.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n            case API.Remove:\n                requestObj = new Remove.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n            case API.Count:\n                requestObj = new Count.Instance(\n                    request.query, this.onRequestFinished_.bind(this), this.onError.bind(this)\n                );\n                break;\n        }\n        requestObj.isTransaction = true;\n        requestObj.execute();\n    }\n\n    private pushRequest_(request: WebWorkerRequest) {\n        const push = () => {\n            this.requestQueue.push(request);\n        };\n        const promiseObj = promise((resolve, reject) => {\n            request.onSuccess = (result) => {\n                resolve(result);\n            };\n            request.onError = (error) => {\n                this.error = error;\n                reject(error);\n            };\n        });\n        if (this.isTxStarted_ === true) {\n            this.checkQueries_([request]).then(() => {\n                push();\n                this.processExecutionOfQry_();\n            }).catch(err => {\n                this.error = err;\n                this.abortTransaction_(JSON.stringify(err));\n            });\n        }\n        else {\n            push();\n        }\n        if (process.env.NODE_ENV === 'dev') {\n            console.log(`request pushed : ${request.name} with query value - ${JSON.stringify(request.query)}`);\n        }\n        return promiseObj;\n    }\n\n    private processExecutionOfQry_() {\n        if (this.requestQueue.length > 0 && this.isQueryExecuting === false) {\n            this.executeRequest_(this.requestQueue[0]);\n        }\n    }\n\n    private checkQueries_(requestQueue: WebWorkerRequest[]) {\n        return promiseAll(requestQueue.map(request => {\n            const tableName = request.query.into || request.query.in;\n            return new QueryHelper(request.name, request.query).checkAndModify();\n        }));\n    }\n\n    private getNotExistingTable_(tables: string[]) {\n        let invalidTable: string = null;\n        tables.every(table => {\n            if (this.isTableExist(table) === false) {\n                invalidTable = table;\n                return false;\n            }\n            return true;\n        });\n        return invalidTable;\n    }\n}"],"sourceRoot":""}
\ No newline at end of file
diff --git a/dist/jsstore.worker.min.js b/dist/jsstore.worker.min.js
index b12f5be4..4e4b3969 100644
--- a/dist/jsstore.worker.min.js
+++ b/dist/jsstore.worker.min.js
@@ -1,5 +1,5 @@
 /*!
- * @license :jsstore - V3.11.3 - 24/11/2020
+ * @license :jsstore - V3.11.4 - 29/11/2020
  * https://github.com/ujjwalguptaofficial/JsStore
  * Copyright (c) 2020 @Ujjwal Gupta; Licensed MIT
  */
diff --git a/package.json b/package.json
index 688747d0..a62f719f 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "jsstore",
-  "version": "3.11.3",
+  "version": "3.11.4",
   "description": "A complete IndexedDB wrapper with SQL like syntax.",
   "main": "dist/jsstore.commonjs2.js",
   "types": "dist/ts/main/index.d.ts",