ts-database
Version:
这是基于typesciprt的indexedDB的数据库的操作函数
1 lines • 7.87 kB
JavaScript
var e={d:(t,n)=>{for(var a in n)e.o(n,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:n[a]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};e.d(t,{zE:()=>n,vo:()=>o,ZP:()=>i});var n=function(){function e(e,t,n){this.databaseEvent=null,this.dbDatabaseStore=e,this.dataModule=t,n&&(this.databaseEvent=n)}return e.prototype.handleDatabaseEvent=function(e,t){this.databaseEvent&&"function"==typeof this.databaseEvent&&this.databaseEvent(e,{store:this.dbDatabaseStore,module:this.dataModule,data:t})},e.prototype.bulkCreate=function(e){var t=this;this.handleDatabaseEvent("bulkCreate",e);var n=e.map((function(e){return new Promise((function(n,a){var r=t.dbDatabaseStore.put(e);r.onsuccess=function(e){n(e)},r.onerror=function(e){a(e)}}))}));return Promise.all(n)},e.prototype.update=function(e){var t=this;return this.handleDatabaseEvent("update",e),new Promise((function(n,a){var r=t.dbDatabaseStore.put(e);r.onsuccess=function(e){n(e)},r.onerror=function(e){a(e)}}))},e.prototype.findAll=function(e){var t=this;return this.handleDatabaseEvent("findAll",e),new Promise((function(n,a){var r;(r="string"==typeof(null==e?void 0:e.index)&&t.dataModule.columns.find((function(t){return t.index===e.index}))?t.dbDatabaseStore.index(e.index).getAll(null==e?void 0:e.key,null==e?void 0:e.limit):t.dbDatabaseStore.getAll(null==e?void 0:e.key,null==e?void 0:e.limit)).onsuccess=function(){var t,a;n((t=r.result,(a=(null==e?void 0:e.attributes)||[]).length?t.length?t.map((function(e){return a.reduce((function(t,n){return t[n]=e[n],t}),{})})):[]:t))},r.onerror=function(e){a(e)}}))},e.prototype.findAllLike=function(e){var t=this;return this.handleDatabaseEvent("findAllLike",e),0===Object.keys((null==e?void 0:e.like)||{}).length?Promise.resolve([]):new Promise((function(n,a){var r=t.dbDatabaseStore.openCursor(),o=[];r.onerror=function(e){a(e)},r.onsuccess=function(){var t,a=r.result;if(a){var i=Object.entries((null==e?void 0:e.like)||{}).some((function(e){var t,n=e[0],r=e[1];return null===(t=a.value[n])||void 0===t?void 0:t.includes(r)}));if(i)if(null===(t=null==e?void 0:e.attributes)||void 0===t?void 0:t.length){var s=e.attributes.reduce((function(e,t){return e[t]=a.value[t],e}),{});o.push(s)}else o.push(a.value);(null==e?void 0:e.limit)&&o.length>=e.limit?n(o):a.continue()}else n(o)}}))},e.prototype.findByPk=function(e){var t=this;return this.handleDatabaseEvent("findByPk",e),new Promise((function(n,a){var r=t.dbDatabaseStore.get(e);r.onsuccess=function(){n(r.result)},r.onerror=function(e){a(e)}}))},e.prototype.clear=function(){var e=this;return this.handleDatabaseEvent("clear"),new Promise((function(t,n){var a=e.dbDatabaseStore.clear();a.onsuccess=function(){t(a.result)},a.onerror=function(e){n(e)}}))},e.prototype.count=function(){var e=this;return this.handleDatabaseEvent("count"),new Promise((function(t,n){var a=e.dbDatabaseStore.count();a.onsuccess=function(){t(a.result)},a.onerror=function(e){n(e)}}))},e.prototype.destory=function(e){var t=this;return this.handleDatabaseEvent("destory"),new Promise((function(n,a){var r=t.dbDatabaseStore.delete(e);r.onsuccess=function(){n(r.result)},r.onerror=function(e){a(e)}}))},e}(),a=function(e,t,n,a){return new(n||(n=Promise))((function(r,o){function i(e){try{u(a.next(e))}catch(e){o(e)}}function s(e){try{u(a.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}u((a=a.apply(e,t||[])).next())}))},r=function(e,t){var n,a,r,o,i={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(s){return function(u){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,s[0]&&(i=0)),i;)try{if(n=1,a&&(r=2&s[0]?a.return:s[0]?a.throw||((r=a.return)&&r.call(a),0):a.next)&&!(r=r.call(a,s[1])).done)return r;switch(a=0,r&&(s=[2&s[0],r.value]),s[0]){case 0:case 1:r=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,a=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!((r=(r=i.trys).length>0&&r[r.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!r||s[1]>r[0]&&s[1]<r[3])){i.label=s[1];break}if(6===s[0]&&i.label<r[1]){i.label=r[1],r=s;break}if(r&&i.label<r[2]){i.label=r[2],i.ops.push(s);break}r[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],a=0}finally{n=r=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,u])}}},o=function(){function e(e){if(this.databaseName=e.name,this.databaseVersion=e.version,this.databaseEvent=e.event,!window.indexedDB)throw new Error("浏览器不支持indexedDB");this.databaseModules=null==e?void 0:e.modules.reduce((function(e,t){return e[t.name]=t,e}),{})}return e.prototype.connectDatabase=function(){var e=this;if(!window.indexedDB)return Promise.reject("浏览器不支持indexedDB");if(this.database)return Promise.resolve(this.database);var t=indexedDB.open(this.databaseName,this.databaseVersion);return new Promise((function(n,a){t.onsuccess=function(r){t.result?(e.database=t.result,n(e.database)):a(r)},t.onerror=function(e){a(e)},t.onupgradeneeded=function(r){t.result?(Object.values(e.databaseModules).forEach((function(e){if(!t.result.objectStoreNames.contains(e.name)){var n=t.result.createObjectStore(e.name,{keyPath:e.primary});e.columns.forEach((function(e){e.index&&n.createIndex(e.name,e.index,e.attributes||{})}))}})),t.transaction.oncomplete=function(){e.database=t.result,n(e.database)}):a(r)}}))},e.prototype.module=function(e){var t=this;return this.databaseModules[e]?this.connectDatabase().then((function(a){var r=a.transaction(e,"readwrite").objectStore(e);return new n(r,t.databaseModules[e],t.databaseEvent)})).catch((function(t){return Promise.reject(new Error("数据库未定义".concat(e,": ").concat(t)))})):Promise.reject("数据库未定义".concat(e))},e.prototype.drop=function(){return indexedDB.deleteDatabase(this.databaseName)},e.prototype.backup=function(){return a(this,void 0,void 0,(function(){var e=this;return r(this,(function(t){return[2,this.connectDatabase().then((function(){return e.exportData().then((function(t){return{name:e.databaseName,version:e.databaseVersion,modules:e.databaseModules,data:t}}))}))]}))}))},e.prototype.recovery=function(e){var t=this;return e.name!==this.databaseName?Promise.reject("database name is error"):(e.version>this.databaseVersion&&(this.databaseVersion=e.version),this.databaseModules=e.modules,this.connectDatabase().then((function(){return t.importFromJson(e.data)})))},e.prototype.exportData=function(){var e=this;return new Promise((function(t,n){var a={},r=Array.from(new Set(e.database.objectStoreNames));if(0===r.length)t(a);else{var o=e.database.transaction(r,"readonly");o.onerror=function(e){n(e)},r.forEach((function(e){var n=[],i=o.objectStore(e).openCursor();i.onsuccess=function(){var o=i.result;o?(n.push(o.value),o.continue()):(a[e]=n,r.length===Object.keys(a).length&&t(a))}}))}}))},e.prototype.importFromJson=function(e){return a(this,void 0,void 0,(function(){var t=this;return r(this,(function(n){return[2,new Promise((function(n,a){var r=new Set(t.database.objectStoreNames);if(0===r.size)n(!0);else{var o=Array.from(r),i=t.database.transaction(o,"readwrite");i.onerror=function(e){a(e)},Object.keys(e).forEach((function(t){o.includes(t)||delete e[t]})),0===Object.keys(e).length&&n(!0),o.forEach((function(t){var r=0,o=Array.from(e[t]||[]);e[t]&&o.length>0?o.forEach((function(o){var s=i.objectStore(t).put(o);s.onsuccess=function(){++r===e[t].length&&(delete e[t],0===Object.keys(e).length&&n(!0))},s.onerror=function(e){a(e)}})):e[t]&&(delete e[t],0===Object.keys(e).length&&n(!0))}))}}))]}))}))},e}();const i=o;var s=t.zE,u=t.vo,c=t.ZP;export{s as DBDatabaseModule,u as Database,c as default};