ts-database
Version:
这是基于typesciprt的indexedDB的数据库的操作函数
1 lines • 8.73 kB
JavaScript
var e,t,n,r,o={86:(e,t,n)=>{n.d(t,{ZP:()=>i});var r=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,r){var o=t.dbDatabaseStore.put(e);o.onsuccess=function(e){n(e)},o.onerror=function(e){r(e)}}))}));return Promise.all(n)},e.prototype.update=function(e){var t=this;return this.handleDatabaseEvent("update",e),new Promise((function(n,r){var o=t.dbDatabaseStore.put(e);o.onsuccess=function(e){n(e)},o.onerror=function(e){r(e)}}))},e.prototype.findAll=function(e){var t=this;return this.handleDatabaseEvent("findAll",e),new Promise((function(n,r){var o;(o="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,r;n((t=o.result,(r=(null==e?void 0:e.attributes)||[]).length?t.length?t.map((function(e){return r.reduce((function(t,n){return t[n]=e[n],t}),{})})):[]:t))},o.onerror=function(e){r(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,r){var o=t.dbDatabaseStore.openCursor(),a=[];o.onerror=function(e){r(e)},o.onsuccess=function(){var t,r=o.result;if(r){var i=Object.entries((null==e?void 0:e.like)||{}).some((function(e){var t,n=e[0],o=e[1];return null===(t=r.value[n])||void 0===t?void 0:t.includes(o)}));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]=r.value[t],e}),{});a.push(s)}else a.push(r.value);(null==e?void 0:e.limit)&&a.length>=e.limit?n(a):r.continue()}else n(a)}}))},e.prototype.findByPk=function(e){var t=this;return this.handleDatabaseEvent("findByPk",e),new Promise((function(n,r){var o=t.dbDatabaseStore.get(e);o.onsuccess=function(){n(o.result)},o.onerror=function(e){r(e)}}))},e.prototype.clear=function(){var e=this;return this.handleDatabaseEvent("clear"),new Promise((function(t,n){var r=e.dbDatabaseStore.clear();r.onsuccess=function(){t(r.result)},r.onerror=function(e){n(e)}}))},e.prototype.count=function(){var e=this;return this.handleDatabaseEvent("count"),new Promise((function(t,n){var r=e.dbDatabaseStore.count();r.onsuccess=function(){t(r.result)},r.onerror=function(e){n(e)}}))},e.prototype.destory=function(e){var t=this;return this.handleDatabaseEvent("destory"),new Promise((function(n,r){var o=t.dbDatabaseStore.delete(e);o.onsuccess=function(){n(o.result)},o.onerror=function(e){r(e)}}))},e}(),o=function(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{u(r.next(e))}catch(e){a(e)}}function s(e){try{u(r.throw(e))}catch(e){a(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}u((r=r.apply(e,t||[])).next())}))},a=function(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(s){return function(u){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,s[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,u])}}};const i=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,r){t.onsuccess=function(o){t.result?(e.database=t.result,n(e.database)):r(o)},t.onerror=function(e){r(e)},t.onupgradeneeded=function(o){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)}):r(o)}}))},e.prototype.module=function(e){var t=this;return this.databaseModules[e]?this.connectDatabase().then((function(n){var o=n.transaction(e,"readwrite").objectStore(e);return new r(o,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 o(this,void 0,void 0,(function(){var e=this;return a(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 r={},o=Array.from(new Set(e.database.objectStoreNames));if(0===o.length)t(r);else{var a=e.database.transaction(o,"readonly");a.onerror=function(e){n(e)},o.forEach((function(e){var n=[],i=a.objectStore(e).openCursor();i.onsuccess=function(){var a=i.result;a?(n.push(a.value),a.continue()):(r[e]=n,o.length===Object.keys(r).length&&t(r))}}))}}))},e.prototype.importFromJson=function(e){return o(this,void 0,void 0,(function(){var t=this;return a(this,(function(n){return[2,new Promise((function(n,r){var o=new Set(t.database.objectStoreNames);if(0===o.size)n(!0);else{var a=Array.from(o),i=t.database.transaction(a,"readwrite");i.onerror=function(e){r(e)},Object.keys(e).forEach((function(t){a.includes(t)||delete e[t]})),0===Object.keys(e).length&&n(!0),a.forEach((function(t){var o=0,a=Array.from(e[t]||[]);e[t]&&a.length>0?a.forEach((function(a){var s=i.objectStore(t).put(a);s.onsuccess=function(){++o===e[t].length&&(delete e[t],0===Object.keys(e).length&&n(!0))},s.onerror=function(e){r(e)}})):e[t]&&(delete e[t],0===Object.keys(e).length&&n(!0))}))}}))]}))}))},e}()}},a={};function i(e){var t=a[e];if(void 0!==t)return t.exports;var n=a[e]={exports:{}};return o[e](n,n.exports,i),n.exports}i.d=(e,t)=>{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e=i(86),t=function(){return t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},t.apply(this,arguments)},n=new e.ZP({name:"TS_STORE",version:1,modules:[{name:"users",primary:"id",columns:[]}]}),r={id:"user0001",name:"XY笔记",updatedAt:(new Date).getTime()},n.module("users").then((function(e){return e.bulkCreate([r]).then((function(e){console.log("创建成功",e)}))})),n.backup().then((function(e){console.log("备份成功",e);var r=t(t({},e),{data:{users:[{id:"user0001",name:"XY笔记",updatedAt:(new Date).getTime()},{id:"user0002",name:"XY笔记",updatedAt:(new Date).getTime()}]}});n.recovery(r).then((function(e){console.log("恢复成功",e)})).catch((function(e){console.log("恢复失败",e)}))}));