casc-cesium
Version:
Vue 3.x components for CesiumJS.
1 lines • 17.8 kB
Source Map (JSON)
{"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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"}