{"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    const deferred = Cesium.when.defer()\n    this.dbname = options.name\n    const dbRequest = window.indexedDB.open(this.dbname)\n    const that = this\n    dbRequest.onsuccess = event => {\n      that.db = (event.target as any).result\n      that.version = that.db.version\n      that.cachestatus = that.cachestatus || {}\n      deferred.resolve(that)\n    }\n    dbRequest.onupgradeneeded = event => {\n      that.db = (event.target as any).result\n      that.version = that.db.version\n      deferred.resolve(that)\n    }\n    dbRequest.onerror = event => {\n      that.db = null\n      deferred.reject('create database fail, error code : ' + (event.target as any).errorcode)\n    }\n    this.layer = options.layer || null\n    this.storageType = options.storageType || 'arrayBuffer'\n    this.creatingTable = !1\n    this.cachestatus = {}\n    return deferred.promise\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    const deferred = Cesium.when.defer()\n    if (this.creatingTable) {\n      deferred.reject(false)\n    } else {\n      if (this.db.objectStoreNames.contains(storeName)) {\n        deferred.reject(false)\n        return deferred.promise\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            deferred.resolve(true)\n          }\n        } else {\n          that.creatingTable = false\n          deferred.resolve(false)\n        }\n      }\n      dbRequest.onsuccess = event => {\n        ;(event.target as any).result.close()\n        deferred.resolve(true)\n      }\n      dbRequest.onerror = event => {\n        that.creatingTable = false\n        deferred.reject(false)\n      }\n    }\n    return deferred.promise\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    const deferred = Cesium.when.defer()\n    if (!Cesium.defined(this.db)) {\n      deferred.reject(false)\n      return deferred.promise\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      deferred.resolve(false)\n      return deferred.promise\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          deferred.resolve(true)\n        }\n        request.onerror = event => {\n          cachestatus[storeName][id] = Status.FAILED\n          deferred.resolve(false)\n        }\n      } catch (error) {\n        deferred.reject(null)\n        return deferred.promise\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            deferred.resolve(true)\n          }\n          request.onerror = function (e) {\n            deferred.reject(false)\n          }\n        },\n        () => {\n          deferred.reject(false)\n        }\n      )\n    }\n    return deferred.promise\n  }\n\n  /**\n   * 向对象仓库读取数据。\n   * @param {String} storeName 对象仓库（表）名称\n   * @param {Number} id 主键\n   * @returns {Promise}\n   */\n  getElementFromDB(storeName, id) {\n    const deferred = Cesium.when.defer()\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) ? deferred.resolve(e.target.result.value) : deferred.reject(null)\n      }\n      request.onerror = e => {\n        deferred.reject(null)\n      }\n    } catch (error) {\n      deferred.reject(null)\n    }\n    return deferred.promise\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    const deferred = Cesium.when.defer()\n    const { db } = this\n    if (!Cesium.defined(db)) {\n      deferred.resolve(false)\n      return deferred.promise\n    }\n    if (!db.objectStoreNames.contains(storeName)) {\n      deferred.resolve(false)\n      return deferred.promise\n    }\n    try {\n      const request = db.transaction([storeName], 'readwrite').objectStore(storeName).put({ id: id, value: value })\n      request.onsuccess = () => {\n        deferred.resolve(true)\n      }\n      request.onerror = () => {\n        deferred.resolve(false)\n      }\n    } catch (e) {\n      deferred.resolve(false)\n    }\n    return deferred.promise\n  }\n\n  /**\n   * 移除数据。\n   * @param {String} storeName\n   * @param {Number} id\n   * @returns {Promise}\n   */\n  removeElementFromDB(storeName, id) {\n    const deferred = Cesium.when.defer()\n    const { db } = this\n    if (!Cesium.defined(db)) {\n      deferred.resolve(false)\n      return deferred.promise\n    }\n\n    if (!db.objectStoreNames.contains(storeName)) {\n      deferred.resolve(false)\n      return deferred.promise\n    }\n    try {\n      const request = db.transaction([storeName], 'readwrite').objectStore(storeName).delete(id)\n      request.onsuccess = () => {\n        deferred.resolve(true)\n      }\n      request.onerror = () => {\n        deferred.resolve(false)\n      }\n    } catch (e) {\n      deferred.resolve(false)\n    }\n    return deferred.promise\n  }\n\n  /**\n   *  清空对象仓库\n   * @param {String} storeName\n   */\n  clear(storeName) {\n    const deferred = Cesium.when.defer()\n    const { db } = this\n    if (!Cesium.defined(db)) {\n      deferred.resolve(false)\n      return deferred.promise\n    }\n\n    if (!db.objectStoreNames.contains(storeName)) {\n      deferred.resolve(false)\n      return deferred.promise\n    }\n\n    try {\n      const request = db.transaction([storeName], 'readwrite').objectStore(storeName).clear()\n      request.onsuccess = () => {\n        deferred.resolve(true)\n      }\n      request.onerror = () => {\n        deferred.resolve(false)\n      }\n    } catch (e) {\n      deferred.resolve(false)\n    }\n    return deferred.promise\n  }\n}\n\nexport default IndexedDBScheduler\n"],"names":[],"mappings":"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"}