{"version":3,"file":"IndexedDBScheduler.mjs","sources":["../../../../../../packages/components/providers/supermap/IndexedDBScheduler.ts"],"sourcesContent":["/**\n * 操作状态。\n */\nconst Status = {\n  NONE: 0,\n  STORING: 1,\n  STORED: 2,\n  FAILED: 3\n}\n/**\n * 操作浏览器数据库 IndexedDB 类\n */\nclass IndexedDBScheduler {\n  dbname: string\n  db: any\n  version: any\n  cachestatus: any\n  layer: any\n  storageType: string\n  creatingTable: boolean\n  /**\n   *\n   * @param {Object} options\n   */\n  constructor(options) {\n    if (!Cesium.defined(options.name)) {\n      throw new Cesium.DeveloperError('options.name is required.')\n    }\n\n    const dbRequest = window.indexedDB.open(this.dbname)\n    this.layer = options.layer || null\n    this.storageType = options.storageType || 'arrayBuffer'\n    this.creatingTable = !1\n    this.cachestatus = {}\n    this.dbname = options.name\n    const that = this as IndexedDBScheduler\n\n    return new Promise((resolve, reject) => {\n      dbRequest.onsuccess = event => {\n        that.db = (event.target as IDBOpenDBRequest).result\n        that.version = that.db.version\n        that.cachestatus = that.cachestatus || {}\n        resolve(that)\n      }\n      dbRequest.onupgradeneeded = event => {\n        that.db = (event.target as any).result\n        that.version = that.db.version\n        resolve(that)\n      }\n      dbRequest.onerror = event => {\n        that.db = null\n        reject('create database fail, error code : ' + (event.target as any).errorcode)\n      }\n    }) as any\n  }\n\n  /**\n   * 检查对象仓库是否存在。\n   * @param {String} storeName 对象仓库（表）名称\n   */\n  checkObjectStoreExist(storeName) {\n    return Cesium.defined(this.db) ? this.db.objectStoreNames.contains(storeName) : false\n  }\n\n  /**\n   *  创建 IndexedDB 浏对象仓库，IndexedDB 是浏览器提供的本地数据库\n   * @param {String} storeName 对象仓库（表）名称\n   * @returns {Promise}\n   */\n  createObjectStore(storeName) {\n    return new Promise((resolve, reject) => {\n      if (this.creatingTable) {\n        reject(false)\n      } else {\n        if (this.db.objectStoreNames.contains(storeName)) {\n          reject(false)\n          return\n        }\n        this.creatingTable = true\n        const version = parseInt(this.db.version)\n        this.db.close()\n        const that = this\n        // 打开或新建 IndexedDB 数据库\n        const dbRequest = window.indexedDB.open(this.dbname, version + 1)\n        dbRequest.onupgradeneeded = event => {\n          const db = (event.target as any).result\n          that.db = db\n          // 创建对象仓库（表）\n          const objectStore = db.createObjectStore(storeName, {\n            keyPath: 'id'\n          })\n          if (Cesium.defined(objectStore)) {\n            // 创建索引\n            objectStore.createIndex('value', 'value', {\n              unique: false\n            })\n            that.creatingTable = false\n            that.cachestatus = that.cachestatus || {}\n            that.cachestatus[storeName] = {}\n            that.db.close()\n            const dbRequest = window.indexedDB.open(that.dbname)\n            dbRequest.onsuccess = event => {\n              that.db = (event.target as any).result\n              resolve(true)\n            }\n          } else {\n            that.creatingTable = false\n            resolve(false)\n          }\n        }\n        dbRequest.onsuccess = event => {\n          ;(event.target as any).result.close()\n          resolve(true)\n        }\n        dbRequest.onerror = event => {\n          that.creatingTable = false\n          reject(false)\n        }\n      }\n    })\n  }\n\n  /**\n   * 向对象仓库写入数据记录。\n   * @param {String} storeName 对象仓库（表）名称\n   * @param {Number} id 主键\n   * @param {*} value 值\n   * @returns {Promise}\n   */\n  putElementInDB(storeName, id, value) {\n    return new Promise((resolve, reject) => {\n      if (!Cesium.defined(this.db)) {\n        reject(false)\n        return\n      }\n      const { cachestatus, db } = this\n      if (\n        Cesium.defined(cachestatus[storeName]) &&\n        Cesium.defined(cachestatus[storeName][id] && (cachestatus[storeName][id] === Status.STORING || cachestatus[storeName][id] === Status.STORED))\n      ) {\n        resolve(false)\n        return\n      }\n      if (db.objectStoreNames.contains(storeName)) {\n        cachestatus[storeName] = cachestatus[storeName] || {}\n        try {\n          const request = db.transaction([storeName], 'readwrite').objectStore(storeName).add({\n            id: id,\n            value: value\n          })\n          cachestatus[storeName][id] = Status.STORING\n          request.onsuccess = event => {\n            cachestatus[storeName][id] = Status.STORED\n            resolve(true)\n          }\n          request.onerror = event => {\n            cachestatus[storeName][id] = Status.FAILED\n            resolve(false)\n          }\n        } catch (error) {\n          reject(null)\n          return\n        }\n      } else {\n        this.createObjectStore(storeName).then(\n          () => {\n            const request = db.transaction([storeName], 'readwrite').objectStore(storeName).add({\n              id: id,\n              value: value\n            })\n            request.onsuccess = function (e) {\n              resolve(true)\n            }\n            request.onerror = function (e) {\n              reject(false)\n            }\n          },\n          () => {\n            reject(false)\n          }\n        )\n      }\n    })\n  }\n\n  /**\n   * 向对象仓库读取数据。\n   * @param {String} storeName 对象仓库（表）名称\n   * @param {Number} id 主键\n   * @returns {Promise}\n   */\n  getElementFromDB(storeName, id) {\n    return new Promise((resolve, reject) => {\n      const { db } = this\n      if (!Cesium.defined(db)) {\n        return null\n      }\n      if (!db.objectStoreNames.contains(storeName)) {\n        return null\n      }\n      try {\n        const transaction = db.transaction([storeName])\n        const objectStore = transaction.objectStore(storeName)\n        const request = objectStore.get(id)\n        request.onsuccess = e => {\n          return Cesium.defined(e.target.result) ? resolve(e.target.result.value) : reject(null)\n        }\n        request.onerror = e => {\n          reject(null)\n        }\n      } catch (error) {\n        reject(null)\n      }\n    })\n  }\n\n  /**\n   * 更新数据。\n   * @param {String} storeName\n   * @param {Number} id\n   * @param {*} value\n   * @returns {Promise}\n   */\n  updateElementInDB(storeName, id, value) {\n    return new Promise((resolve, reject) => {\n      const { db } = this\n      if (!Cesium.defined(db)) {\n        resolve(false)\n        return\n      }\n      if (!db.objectStoreNames.contains(storeName)) {\n        resolve(false)\n        return\n      }\n      try {\n        const request = db.transaction([storeName], 'readwrite').objectStore(storeName).put({ id: id, value: value })\n        request.onsuccess = () => {\n          resolve(true)\n        }\n        request.onerror = () => {\n          resolve(false)\n        }\n      } catch (e) {\n        resolve(false)\n      }\n    })\n  }\n\n  /**\n   * 移除数据。\n   * @param {String} storeName\n   * @param {Number} id\n   * @returns {Promise}\n   */\n  removeElementFromDB(storeName, id) {\n    return new Promise((resolve, reject) => {\n      const { db } = this\n      if (!Cesium.defined(db)) {\n        resolve(false)\n        return\n      }\n\n      if (!db.objectStoreNames.contains(storeName)) {\n        resolve(false)\n        return\n      }\n      try {\n        const request = db.transaction([storeName], 'readwrite').objectStore(storeName).delete(id)\n        request.onsuccess = () => {\n          resolve(true)\n        }\n        request.onerror = () => {\n          resolve(false)\n        }\n      } catch (e) {\n        resolve(false)\n      }\n    })\n  }\n\n  /**\n   *  清空对象仓库\n   * @param {String} storeName\n   */\n  clear(storeName) {\n    return new Promise((resolve, reject) => {\n      const { db } = this\n      if (!Cesium.defined(db)) {\n        resolve(false)\n        return\n      }\n\n      if (!db.objectStoreNames.contains(storeName)) {\n        resolve(false)\n        return\n      }\n\n      try {\n        const request = db.transaction([storeName], 'readwrite').objectStore(storeName).clear()\n        request.onsuccess = () => {\n          resolve(true)\n        }\n        request.onerror = () => {\n          resolve(false)\n        }\n      } catch (e) {\n        resolve(false)\n      }\n    })\n  }\n}\n\nexport default IndexedDBScheduler\n"],"names":[],"mappings":"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"}