{"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":["dbRequest","event"],"mappings":"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"}