@nano-sql/plugin-fuzzy-search
Version:
Integrate Elastic Search style indexing in NanoSQL 2!
1 lines • 35.7 kB
JavaScript
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(window,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var a=t[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,r),a.l=!0,a.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)r.d(n,a,function(t){return e[t]}.bind(null,a));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){e.exports=r(1)},function(e,t,r){var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var a in t=arguments[r])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)};Object.defineProperty(t,"__esModule",{value:!0});var a=r(2),i=r(6),o=r(7);t.stopWords=["a","about","after","all","also","am","an","and","andor","another","any","are","as","at","be","because","been","before","being","between","both","but","by","came","can","come","could","did","do","each","for","from","get","got","had","has","have","he","her","here","him","himself","his","how","i","if","in","into","is","it","like","make","many","me","might","more","most","much","must","my","never","now","of","on","only","or","other","our","out","over","said","same","see","should","since","some","still","such","take","than","that","the","their","them","then","there","these","they","this","those","through","to","too","under","up","very","was","way","we","well","were","what","where","which","while","who","with","would","you","your"],t.defaultTokenizer=function(e,t,r){return void 0===r&&(r=4),function(n,a,s,u){var l=function(e){return!e||null===e||(1===String(e).length||-1!==t.indexOf(e))},c=String(u||"").toLowerCase().replace(/(\d+)\/(\d+)|(?:\d+(?:,\d+)*|\d+)(?:\.\d+)?/gim,function(e,t,n){return t||n?(parseInt(t)/parseInt(n)).toFixed(r):parseFloat(e.replace(/\,/gim,"")).toFixed(r)}).replace(/\-|\_|\[|\]|\(|\)|\{|\}|\r?\n|\r|\t/gim," ").replace(/[^\w\s]|(\d\.)/gim,"$1").replace(/\s+/g," ").split(" ");switch(e){case"english":return c.map(function(e,t){return{i:t,w:isNaN(e)?l(e)?"":i(o(e)):e}}).filter(function(e){return e.w});case"english-stem":return c.map(function(e,t){return{i:t,w:isNaN(e)?l(e)?"":o(e):e}}).filter(function(e){return e.w});case"english-meta":return c.map(function(e,t){return{i:t,w:isNaN(e)?l(e)?"":i(e):e}}).filter(function(e){return e.w})}return c.map(function(e,t){return{w:e,i:t}})}};var s={},u={},l=function(e,t,r,n,i,o){var l=e,c=a.deepGet(r,l),f=a.adapterFilters(i.databaseID,n,i);a.allAsync(s[t],function(e,r,o,s){var d=a.deepGet(e.path,l);if("string"==typeof d&&d){var p=a.hash(d),b=e.tokenizer(e.tableName,e.tableId,e.path,d),g=b.reduce(function(e,t){return e[t.w]||(e[t.w]=[]),e[t.w].push(t.i),e},{}),h=b.map(function(e){return e.i+":"+e.w}),y="_"+t+"_fuzzy_words_"+e.path.join(".");n.getDB(i.databaseID)._tableIds[y];f.write(y,c,{id:c,hash:p,tokens:h},function(){var r="_"+t+"_fuzzy_"+e.path.join(".");n.getDB(i.databaseID)._tableIds[r];a.allAsync(Object.keys(g),function(e,n,i,o){var s=function(){u[t][e]?setTimeout(function(){s()},2):(u[t][e]=!0,f.read(r,e,function(n){var s=a.maybeAssign(n)||{wrd:e,ids:[]};s.ids.push({id:c,i:g[e]}),f.write(r,e,s,function(){delete u[t][e],i()},function(r){delete u[t][e],o(r)})},function(r){delete u[t][e],o(r)}))};s()}).then(o).catch(s)},s)}else o()}).then(function(){o()}).catch(o)},c=function(e,t,r,n,i,o,l){var c=a.deepGet(t,e),f=a.adapterFilters(r,n,i);a.allAsync(s[o],function(t,i,s,l){var d="_"+o+"_fuzzy_words_"+t.path.join(".");n.getDB(r)._tableIds[d];f.delete(d,c,function(){var i=a.deepGet(t.path,e);if("string"==typeof i&&i){var c="_"+o+"_fuzzy_"+t.path.join("."),d=(n.getDB(r)._tableIds[c],t.tokenizer(t.tableName,t.tableId,t.path,i).reduce(function(e,t){return e[t.w]||(e[t.w]=[]),e[t.w].push(t.i),e},{}));a.allAsync(Object.keys(d),function(e,t,r,n){var i=function(){u[o][e]?setTimeout(function(){i()},2):(u[o][e]=!0,f.read(c,e,function(t){for(var n=a.maybeAssign(t)||{wrd:e,ids:[]},i=n.ids.length;i--;)n.ids[i].id;delete u[o][e],r()},function(t){delete u[o][e],n(t)}))};i()}).then(s).catch(l)}else s()},l)}).then(function(){l()}).catch(l)};t.FuzzyUserSanitize=function(e){return String(e).replace(/\'|\,/gim,"")},t.FuzzySearch=function(){var e;return{name:"Fuzzy Search",version:2.02,filters:[{name:"willConnect",priority:1e3,call:function(t,r,n){e=t.res,r(t),e.functions.SEARCH={type:"S",call:function(e,t,r,n,a,i){return{result:0}},checkIndex:function(t,r,n){var i=e.getDB(t.databaseID)._tableIds[t.table];if(!s[i]||!s[i].length)return!1;if("*"===r[0])return{index:"*",parsedFn:{name:"SEARCH",args:r},comp:n[1],value:n[2],col:String(-1)};for(var o=a.resolvePath(r[0]).join("."),u=-1,l=s[i].length;l--&&-1===u;)s[i][l].path.join(".")==o&&(u=l);return-1!==u&&{index:s[i][u].indexId,parsedFn:{name:"SEARCH",args:r},comp:n[1],value:n[2],col:String(u)}},queryIndex:function(t,r,n,i,o,u){var l=a.adapterFilters(t.databaseID,e,t),c=e.getDB(t.databaseID)._tableIds[t.table],f=-1!==parseInt(r.col)?[r.index]:s[c].map(function(e){return e.indexId}),d=[],p=function(b,g){if(f[g])if(r.parsedFn.args[b]){var h=r.parsedFn.args[b],y=/^[\"|\'](.*)[\"|\']$/gim.exec(h),m=y?y[1]:h,v=s[c][g];if(v){var _=v.tokenizer(v.tableName,v.tableId,v.path,m);if(_.length){var D=_.reduce(function(e,t){return e[t.w]||(e[t.w]=[]),e[t.w].push(t.i),e},{}),w={},x={};l.readIndexKey(t.table,f[g],m,function(e){d.push(e)},function(){a.allAsync(Object.keys(D),function(r,n,a,i){var o="_"+c+"_fuzzy_"+v.path.join(".");e.getDB(t.databaseID)._tableIds[o];l.read(o,r,function(e){var t=e||{wrd:r,ids:[]};t.ids.forEach(function(e){x[String(e.id)]||(x[String(e.id)]={rowKey:e.id,words:{}}),x[String(e.id)].words[t.wrd]=e.i}),w[r]=t,a()},i)}).then(function(){if(_.length<=1)"="!==r.comp&&-1===r.comp.indexOf("=")||"!="===r.comp||0!==r.value?(d.length,p(b+1,g)):(Object.keys(w).forEach(function(e){d=d.concat(w[e].ids.map(function(e){return e.id}))}),p(b+1,g));else{var e=_.map(function(e){return e.w}),t=_.map(function(e){return e.i}),n=[];Object.keys(x).forEach(function(t){var r=x[t],a={rowKey:r.rowKey,wordSlots:[]};e.forEach(function(e,t){a.wordSlots[t]=r.words[e]||[]}),n.push(a)}),n.forEach(function(e){var n=1e5,a=function(){for(var r=[],i=0;i<arguments.length;i++)r[i]=arguments[i];for(var o,s,u=0,l=e.wordSlots.map(function(t,n){return e.wordSlots[n].length||(u+=1),e.wordSlots[n][r[n]]}),c=0;c<l.length;c++)if(void 0===l[c])u++;else if(void 0===o)o=l[c],s=t[c];else{var f=Math.abs(l[c]-o-1),d=Math.abs(t[c]-s-1);u+=Math.abs(f-d),o=l[c],s=t[c]}n=Math.min(n,u);for(var p=e.wordSlots.length-1,b=r[p]+1;p>=0&&!e.wordSlots[p][b];)b=r[--p]+1;var g=r.slice();g[p]=b,g[p]&&a.apply(void 0,g)};switch(a.apply(void 0,e.wordSlots.map(function(e){return 0})),r.comp){case"=":n===r.value&&d.push(e.rowKey);break;case">=":n>=r.value&&d.push(e.rowKey);break;case"<=":n<=r.value&&d.push(e.rowKey);break;case"<":n<r.value&&d.push(e.rowKey);break;case">":n>r.value&&d.push(e.rowKey);break;case"!=":n!==r.value&&d.push(e.rowKey)}}),p(b+1,g)}})},u)}else o()}else u("Erro getting fuzzy index!")}else p(1,g+1);else!function(e){if((e=e.filter(function(e,t,r){return r.indexOf(e)===t})).length){if(n){for(var r=0;r<e.length;)i(e[r],r),r++;o()}a.chainAsync(e,function(e,r,n,a){var o=0;l.read(t.table,e,function(e){e?(i(e,o),o++,n()):n()},a)}).then(function(){o()}).catch(u)}else o()}(d)};p(1,0)}}}},{name:"configTableSystem",priority:1e3,call:function(r,i,o){var l=r.res.id,c=r.res.name,f="id:"+r.res.pkType;if(0!==r.res.name.indexOf("_")){var d=r.res.indexes||{};s[l]=[],u[l]={},Object.keys(d).forEach(function(e){d[e].props.search&&("boolean"==typeof d[e].props.search?s[l].push({indexId:e,tableName:c,tableId:l,path:d[e].path,tokenizer:t.defaultTokenizer("english",t.stopWords)}):s[l].push({indexId:e,tableName:c,tableId:l,path:d[e].path,tokenizer:d[e].props.search.tokenizer||t.defaultTokenizer("english",t.stopWords)}))}),a.allAsync(s[l],function(t,i,o,s){var u,c="_"+l+"_fuzzy_"+t.path.join(".");e.triggerQuery(r.query.databaseID,n({},a.buildQuery(r.query.databaseID,e,"","create table"),{actionArgs:{name:c,_internal:!0,model:{"wrd:string":{pk:!0},"ids:any[]":{notNull:!0,model:(u={},u[f]={},u["i:int[]"]={},u)}}}}),a.noop,function(){var i,u="_"+l+"_fuzzy_words_"+t.path.join(".");e.triggerQuery(r.query.databaseID,n({},a.buildQuery(r.query.databaseID,e,"","create table"),{actionArgs:{name:u,_internal:!0,model:(i={},i[f]={pk:!0},i["hash:string"]={},i["tokens:any"]={},i)}}),a.noop,o,s)},s)}).then(function(){i(r)}).catch(function(e){o(e)})}else i(r)}},{name:"addRowEvent",priority:1e3,call:function(t,r,n){var a=e.getDB(t.query.databaseID)._tableIds[t.query.table],i=e.getDB(t.query.databaseID)._tables[t.query.table].pkCol;s[a]&&s[a].length?l(t.res.result,a,i,e,t.query,function(e){e?n(e):r(t)}):r(t)}},{name:"updateRow",priority:1e3,call:function(t,r,n){var i=e.getDB(t.query.databaseID)._tableIds[t.query.table],o=e.getDB(t.query.databaseID)._tables[t.query.table].pkCol;if(s[i]&&s[i].length){var l=t.res,c=a.deepGet(o,l),f=a.adapterFilters(t.query.databaseID,e,t.query);a.allAsync(s[i],function(r,n,o,s){var d="_"+i+"_fuzzy_words_"+r.path.join(".");e.getDB(t.query.databaseID)._tableIds[d];f.read(d,c,function(n){var p=a.maybeAssign(n)||{id:c,hash:"",tokens:[]},b=a.deepGet(r.path,l);if(p.hash||b&&"string"==typeof b){var g=a.hash(String(b));if(g!==p.hash){var h="_"+i+"_fuzzy_"+r.path.join("."),y=(e.getDB(t.query.databaseID)._tableIds[h],r.tokenizer(r.tableName,r.tableId,r.path,b).map(function(e){return e.i+":"+e.w})),m=p.tokens.filter(function(e){return-1===y.indexOf(e)}),v=y.filter(function(e){return-1===p.tokens.indexOf(e)});a.allAsync([m,v],function(e,t,r,n){var l=e.map(function(e){var t=e.split(":"),r=t.shift();return{w:t.join(":"),i:parseInt(r)}}).reduce(function(e,t){return e[t.w]||(e[t.w]=[]),e[t.w].push(t.i),e},{});a.allAsync(Object.keys(l),function(e,r,n,o){var s=function(){u[i][e]?setTimeout(function(){s()},2):(u[i][e]=!0,f.read(h,e,function(r){for(var s=a.maybeAssign(r)||{wrd:e,ids:[]},d=-1,p=0;p<s.ids.length&&-1===d;)s.ids[p].id===c&&(d=p),p++;-1!==d?(s.ids[d].i=0===t?s.ids[d].i.filter(function(t){return-1===l[e].indexOf(t)}):s.ids[d].i.concat(l[e]),s.ids[d].i.length||s.ids.splice(d,1),s.ids.length?f.write(h,e,s,function(){delete u[i][e],n()},function(t){delete u[i][e],o(t)}):f.delete(h,e,function(){delete u[i][e],n()},function(t){delete u[i][e],o(t)})):1===t?(s.ids.push({id:c,i:l[e]}),f.write(h,e,s,function(){delete u[i][e],n()},function(t){delete u[i][e],o(t)})):(delete u[i][e],n())},function(t){delete u[i][e],o(t)}))};s()}).then(o).catch(s)}).then(function(){f.write(d,c,{id:c,hash:g,tokens:y},o,s)})}else o()}else o()},s)}).then(function(){r(t)}).catch(n)}else r(t)}},{name:"deleteRow",priority:1e3,call:function(t,r,n){var a=e.getDB(t.query.databaseID)._tableIds[t.query.table],i=e.getDB(t.query.databaseID)._tables[t.query.table].pkCol;s[a]&&s[a].length?c(t.res,i,t.query.databaseID,e,t.query,a,function(e){e?n(e):r(t)}):r(t)}},{name:"customQuery",priority:1e3,call:function(t,r,i){if("rebuild search"===String(t.query.action).trim().toLowerCase())if("string"!=typeof t.query.table)t.error("Can't rebuild search on this table type!");else{var o=e.getDB(t.query.databaseID)._tableIds[t.query.table],u=e.getDB(t.query.databaseID)._tables[t.query.table].pkCol;if(s[o]&&s[o].length)if(t.query.where){var f=new a._nanoSQLQueue(function(r,n,a,i){c(r,u,t.query.databaseID,e,t.query,o,function(n){n?i(n):l(r,o,u,e,t.query,function(e){e?i(e):a()})})},t.error,function(){t.complete()});e.triggerQuery(t.query.databaseID,n({},a.buildQuery(t.query.databaseID,e,t.query.table,"select"),{where:t.query.where}),function(e){e&&f.newItem(e)},function(){f.finished()},t.error)}else a.allAsync(s[o],function(r,i,s,u){var l="_"+o+"_fuzzy_"+r.path.join("."),c="_"+o+"_fuzzy_words_"+r.path.join(".");e.triggerQuery(t.query.databaseID,n({},a.buildQuery(t.query.databaseID,e,l,"delete")),a.noop,function(){e.triggerQuery(t.query.databaseID,n({},a.buildQuery(t.query.databaseID,e,c,"delete")),a.noop,function(){s()},u)},u)}).then(function(){return new Promise(function(r,i){var s=new a._nanoSQLQueue(function(r,n,a,i){l(r,o,u,e,t.query,function(e){e?i(e):t.onRow(r,n),a()})},i,r);e.triggerQuery(t.query.databaseID,n({},a.buildQuery(t.query.databaseID,e,t.query.table,"select")),function(e){s.newItem(e)},function(){s.finished()},i)})}).then(function(){t.complete()}).catch(t.error);else t.complete()}else r(t)}}]}},"undefined"!=typeof window&&(window["@nano-sql/plugin-fuzzy-search"]={FuzzySearch:t.FuzzySearch,FuzzyUserSanitize:t.FuzzyUserSanitize,defaultTokenizer:t.defaultTokenizer,stopWords:t.stopWords})},function(e,t,r){(function(e){var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var a in t=arguments[r])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)};Object.defineProperty(t,"__esModule",{value:!0});var a=r(4),i=r(5);t.blankTableDefinition={id:"",count:0,name:"",model:{},columns:[],indexes:{},actions:[],queries:{},views:[],pkType:"string",pkCol:[],isPkNum:!1,ai:!1},t.binarySearch=function(e,r,n,a,i){var o=a||0,s=i||e.length;if(e[o]>=r)return n?-1:o;if(e[s]<=r)return n?-1:s+1;var u=Math.floor((o+s)/2);return r==e[u]?u:s-1==o?n?-1:s:r>e[u]?t.binarySearch(e,r,n,u,s):r<e[u]?t.binarySearch(e,r,n,o,u):n?-1:s},t.titleCase=function(e){return e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()},t.slugify=function(e){return String(e).replace(/\s+/g,"-").replace(/[^0-9a-z\-]/gi,"").toLowerCase()},t.buildQuery=function(e,r,n,a){return{databaseID:e,table:n||r.selectedTable,parent:r,action:a,state:"pending",result:[],time:Date.now(),queryID:t.fastID(),extend:[],comments:[],tags:[]}},t.keyToDate=function(e,t,r){return r&&"date"===t?Date.parse(r):r},t.adapterFilters=function(e,r,a){return{write:function(n,i,o,s,u){e&&(i=t.keyToDate(r,r.getDB(e)._tables[n].pkType,i),r.doFilter(e,"adapterWrite",{res:{table:n,pk:i,row:o,complete:s,error:u},query:a},function(t){t&&(r.getDB(e)._tables[t.res.table].mode||r.getDB(e).adapter).write(r.getDB(e)._tableIds[t.res.table],t.res.pk,t.res.row,function(e){t.res.complete(e)},t.res.error)},u))},read:function(i,o,s,u){e&&(o=t.keyToDate(r,r.getDB(e)._tables[i].pkType,o),r.doFilter(e,"adapterRead",{res:{table:i,pk:o,complete:s,error:u},query:a},function(a){a&&(r.getDB(e)._tables[a.res.table].mode||r.getDB(e).adapter).read(r.getDB(e)._tableIds[a.res.table],a.res.pk,function(i){if(i)if("date"===r.getDB(e)._tables[a.res.table].pkType){var o=n({},i);t.deepSet(r.getDB(e)._tables[a.res.table].pkCol,o,new Date(a.res.pk).toISOString()),a.res.complete(o)}else a.res.complete(i);else a.res.complete(void 0)},a.res.error)},u))},readMulti:function(i,o,s,u,l,c,f,d){e&&(s=t.keyToDate(r,r.getDB(e)._tables[i].pkType,s),u=t.keyToDate(r,r.getDB(e)._tables[i].pkType,u),r.doFilter(e,"adapterReadMulti",{res:{table:i,type:o,offsetOrLow:s,limitOrHigh:u,reverse:l,onRow:c,complete:f,error:d},query:a},function(a){a&&(r.getDB(e)._tables[a.res.table].mode||r.getDB(e).adapter).readMulti(r.getDB(e)._tableIds[a.res.table],a.res.type,a.res.offsetOrLow,a.res.limitOrHigh,a.res.reverse,function(i,o){if("date"===r.getDB(e)._tables[a.res.table].pkType){var s=n({},i),u=t.deepGet(r.getDB(e)._tables[a.res.table].pkCol,s);t.deepSet(r.getDB(e)._tables[a.res.table].pkCol,s,new Date(u).toISOString()),a.res.onRow(s,o)}else a.res.onRow(i,o)},function(){a.res.complete()},a.res.error)},d))},connect:function(t,n,i){e&&r.doFilter(e,"adapterConnect",{res:{id:t,complete:n,error:i},query:a},function(t){t&&r.getDB(e).adapter.connect(t.res.id,t.res.complete,t.res.error)},i)},disconnect:function(t,n){e&&r.doFilter(e,"adapterDisconnect",{res:{complete:t,error:n},query:a},function(t){t&&r.getDB(e).adapter.disconnect(t.res.complete,t.res.error)},n)},createTable:function(t,n,i,o){e&&r.doFilter(e,"adapterCreateTable",{res:{table:t,tableData:n,complete:i,error:o},query:a},function(t){t&&(n.mode||r.getDB(e).adapter).createTable(r.getDB(e)._tableIds[t.res.table],t.res.tableData,t.res.complete,t.res.error)},o)},dropTable:function(t,n,i){e&&r.doFilter(e,"adapterDropTable",{res:{table:t,complete:n,error:i},query:a},function(t){t&&(r.getDB(e)._tables[t.res.table].mode||r.getDB(e).adapter).dropTable(r.getDB(e)._tableIds[t.res.table],t.res.complete,t.res.error)},i)},delete:function(n,i,o,s){e&&(i=t.keyToDate(r,r.getDB(e)._tables[n].pkType,i),r.doFilter(e,"adapterDelete",{res:{table:n,pk:i,complete:o,error:s},query:a},function(t){t&&(r.getDB(e)._tables[t.res.table].mode||r.getDB(e).adapter).delete(r.getDB(e)._tableIds[t.res.table],t.res.pk,t.res.complete,t.res.error)},s))},getTableIndex:function(t,n,i){e&&r.doFilter(e,"adapterGetTableIndex",{res:{table:t,complete:n,error:i},query:a},function(t){t&&(r.getDB(e)._tables[t.res.table].mode||r.getDB(e).adapter).getTableIndex(r.getDB(e)._tableIds[t.res.table],t.res.complete,t.res.error)},i)},getTableIndexLength:function(t,n,i){e&&r.doFilter(e,"adapterGetTableIndexLength",{res:{table:t,complete:n,error:i},query:a},function(t){t&&(r.getDB(e)._tables[t.res.table].mode||r.getDB(e).adapter).getTableIndexLength(r.getDB(e)._tableIds[t.res.table],t.res.complete,t.res.error)},i)},createIndex:function(t,n,i,o,s){e&&r.doFilter(e,"adapterCreateIndex",{res:{table:t,indexName:n,type:i,complete:o,error:s},query:a},function(t){t&&(r.getDB(e)._tables[t.res.table].mode||r.getDB(e).adapter).createIndex(r.getDB(e)._tableIds[t.res.table],t.res.indexName,t.res.type,t.res.complete,t.res.error)},s)},deleteIndex:function(t,n,i,o){e&&(r.getDB(e)._tables[t].indexes[n]?r.doFilter(e,"adapterDeleteIndex",{res:{table:t,indexName:n,complete:i,error:o},query:a},function(t){t&&(r.getDB(e)._tables[t.res.table].mode||r.getDB(e).adapter).deleteIndex(r.getDB(e)._tableIds[t.res.table],t.res.indexName,t.res.complete,t.res.error)},o):o({error:"Index "+n+" not found!"}))},addIndexValue:function(n,i,o,s,u,l){if(e)if(r.getDB(e)._tables[n].indexes[i]){var c=void 0===s||"undefined"===s?"__NULL__":s;"number"==typeof c&&r.getDB(e)._tables[n].indexes[i].props&&r.getDB(e)._tables[n].indexes[i].props.offset&&(c+=r.getDB(e)._tables[n].indexes[i].props.offset||0),r.getDB(e)._tables[n].indexes[i].props&&r.getDB(e)._tables[n].indexes[i].props.ignore_case&&(c=String(c||"").toUpperCase()),c=t.keyToDate(r,r.getDB(e)._tables[n].indexes[i].isDate?"date":"",c),r.doFilter(e,"adapterAddIndexValue",{res:{table:n,indexName:i,key:o,value:c,complete:u,error:l},query:a},function(t){t&&(r.getDB(e)._tables[t.res.table].mode||r.getDB(e).adapter).addIndexValue(r.getDB(e)._tableIds[t.res.table],t.res.indexName,t.res.key,t.res.value,t.res.complete,t.res.error)},l)}else l({error:"Index "+i+" not found!"})},deleteIndexValue:function(n,i,o,s,u,l){if(e)if(r.getDB(e)._tables[n].indexes[i]){var c=void 0===s||"undefined"===s?"__NULL__":s;"number"==typeof c&&r.getDB(e)._tables[n].indexes[i].props&&r.getDB(e)._tables[n].indexes[i].props.offset&&(c+=r.getDB(e)._tables[n].indexes[i].props.offset||0),r.getDB(e)._tables[n].indexes[i].props&&r.getDB(e)._tables[n].indexes[i].props.ignore_case&&(c=String(c||"").toUpperCase()),c=t.keyToDate(r,r.getDB(e)._tables[n].indexes[i].isDate?"date":"",c),r.doFilter(e,"adapterDeleteIndexValue",{res:{table:n,indexName:i,key:o,value:c,complete:u,error:l},query:a},function(t){t&&(r.getDB(e)._tables[t.res.table].mode||r.getDB(e).adapter).deleteIndexValue(r.getDB(e)._tableIds[t.res.table],t.res.indexName,t.res.key,t.res.value,t.res.complete,t.res.error)},l)}else l({error:"Index "+i+" not found!"})},readIndexKey:function(n,i,o,s,u,l){if(e)if(r.getDB(e)._tables[n].indexes[i]){var c="NULL"===o?"__NULL__":o;"number"==typeof c&&r.getDB(e)._tables[n].indexes[i].props&&r.getDB(e)._tables[n].indexes[i].props.offset&&(c+=r.getDB(e)._tables[n].indexes[i].props.offset||0),c=t.keyToDate(r,r.getDB(e)._tables[n].indexes[i].isDate?"date":"",c),r.getDB(e)._tables[n].indexes[i].props&&r.getDB(e)._tables[n].indexes[i].props.ignore_case&&(c=String(c||"").toUpperCase()),r.doFilter(e,"adapterReadIndexKey",{res:{table:n,indexName:i,pk:c,onRowPK:s,complete:u,error:l},query:a},function(t){t&&(r.getDB(e)._tables[t.res.table].mode||r.getDB(e).adapter).readIndexKey(r.getDB(e)._tableIds[t.res.table],t.res.indexName,t.res.pk,t.res.onRowPK,t.res.complete,t.res.error)},l)}else l({error:"Index "+i+" not found!"})},readIndexKeys:function(n,i,o,s,u,l,c,f,d){if(e){var p=s,b=u;r.getDB(e)._tables[n].indexes[i]?("number"==typeof p&&"number"==typeof b&&"range"===o&&r.getDB(e)._tables[n].indexes[i]&&r.getDB(e)._tables[n].indexes[i].props.offset&&(p+=r.getDB(e)._tables[n].indexes[i].props.offset||0,b+=r.getDB(e)._tables[n].indexes[i].props.offset||0),p=t.keyToDate(r,r.getDB(e)._tables[n].indexes[i].isDate?"date":"",p),b=t.keyToDate(r,r.getDB(e)._tables[n].indexes[i].isDate?"date":"",b),"range"===o&&r.getDB(e)._tables[n].indexes[i].props&&r.getDB(e)._tables[n].indexes[i].props.ignore_case&&(p=String(p||"").toUpperCase(),b=String(b||"").toUpperCase()),r.doFilter(e,"adapterReadIndexKeys",{res:{table:n,indexName:i,type:o,offsetOrLow:p,limitOrHigh:b,reverse:l,onRowPK:c,complete:f,error:d},query:a},function(t){t&&(r.getDB(e)._tables[t.res.table].mode||r.getDB(e).adapter).readIndexKeys(r.getDB(e)._tableIds[t.res.table],t.res.indexName,t.res.type,t.res.offsetOrLow,t.res.limitOrHigh,t.res.reverse,function(e,r){"__NULL__"!==e&&t.res.onRowPK(e,r)},t.res.complete,t.res.error)},d)):d({error:"Index "+i+" not found!"})}}}},t.maybeDate=function(e){var t=Date.parse(e);return isNaN(t)?e:t},t.mutateRowTypes=function(e,t,r,n){if(!e)return t;if(!n.getDB(e)._tables[r])throw new Error('nSQL: Table "'+r+'" not found!');var a=function(e,t,r){return t?r&&r.length&&-1!==r.indexOf("[]")?Array.isArray(t)?t.map(function(t){return a(e,t,r.slice(0,r.lastIndexOf("[]")))}):[]:(e.forEach(function(e){if(e.model)if(-1!==e.type.indexOf("[]")){var r=void 0!==t?t[e.key]:[];Array.isArray(r)?t[e.key]=r.map(function(t){return a(e.model,t,e.type.slice(0,e.type.lastIndexOf("[]")))}):t[e.key]=[]}else t[e.key]=a(e.model,void 0!==t?t[e.key]:void 0);else switch(e.type){case"date":t[e.key]=new Date(t[e.key]).toISOString();break;default:t[e.key]=t[e.key]}}),t):t};return a(n.getDB(e)._tables[r].columns,t)},t.noop=function(){},t.throwErr=function(e){throw new Error(e)},t.nan=function(e){return isNaN(e)||null===e?0:parseFloat(e)},t.assign=function(e){return e?JSON.parse(JSON.stringify(e)):e},t.objectsEqual=function(e,t){return e===t||"object"==typeof e&&(!(!e||!t)&&i(e,t))};var o=function(){function e(e,t,r){this.processItem=e,this.onError=t,this.onComplete=r,this._items=[],this._going=!1,this._done=!1,this._count=0,this._triggeredComplete=!1,this._progressBuffer=this._progressBuffer.bind(this)}return e.prototype._progressBuffer=function(){var e=this;if(!this._triggeredComplete){if(this._done&&!this._items.length)return this._triggeredComplete=!0,void(this.onComplete&&this.onComplete());if(this._items.length){var r=function(){e._count++,e._count%100==0?t.setFast(e._progressBuffer):e._progressBuffer()},n=this._items.shift()||[];n[1]?n[1](n[0],r,this.onError?this.onError:t.noop):this.processItem&&this.processItem(n[0],this._count,r,this.onError?this.onError:t.noop)}else this._going=!1}},e.prototype.finished=function(){this._done=!0,this._triggeredComplete||this._going||this._items.length||(this._triggeredComplete=!0,this.onComplete&&this.onComplete())},e.prototype.newItem=function(e,t){this._items.push([e,t]),this._going||(this._going=!0,this._progressBuffer())},e}();t._nanoSQLQueue=o,t.chainAsync=function(e,r){return new Promise(function(n,a){if(e&&e.length){var i=[],o=0,s=function(){o<e.length?r(e[o],o,function(e){i.push(e||0),++o%250==0?t.setFast(function(){s()}):s()},function(e){a(e)}):n(i)};s()}else n([])})},t.allAsync=function(e,t){return e&&e.length?Promise.all((e||[]).map(function(e,r){return new Promise(function(n,a){t(e,r,n,a)})})):Promise.resolve([])};var s="undefined"==typeof window?"":navigator.userAgent||"";t.isSafari=0!==s.length&&(/^((?!chrome|android).)*safari/i.test(s)||/iPad|iPhone|iPod/.test(s)&&!window.MSStream),t.isMSBrowser=0!==s.length&&(s.indexOf("MSIE ")>0||s.indexOf("Trident/")>0||s.indexOf("Edge/")>0),t.isAndroid=/Android/.test(s),t.random16Bits=function(){if("undefined"==typeof crypto)return Math.round(Math.random()*Math.pow(2,16));if(crypto.getRandomValues){var t=new Uint16Array(1);return crypto.getRandomValues(t),t[0]}return void 0!==e&&e._crypto.randomBytes?e._crypto.randomBytes(2).reduce(function(e,t){return t*e}):Math.round(Math.random()*Math.pow(2,16))},t.throttle=function(e,t,r){var n=!1;return function(){for(var a=[],i=0;i<arguments.length;i++)a[i]=arguments[i];n||(n=!0,setTimeout(function(){t.apply(e,a),n=!1},r))}},t.timeid=function(e){for(var r=Math.round((new Date).getTime()/(e?1:1e3)).toString();r.length<(e?13:10);)r="0"+r;for(var n=(t.random16Bits()+t.random16Bits()).toString(16);n.length<5;)n="0"+n;return r+"-"+n},t.intersect=function(e,t){return!(!e||!t)&&(!(!e.length||!t.length)&&(e||[]).filter(function(e){return-1!==(t||[]).indexOf(e)}).length>0)},t.fastID=function(){return[0,0].map(function(e){return Math.round(1024*Math.random()).toString(16)}).join("")},t.uuid=function(){var e,r,n="";return[n,n,n,n,n,n,n,n].reduce(function(a,i,o){for(e=t.random16Bits(),r=3===o?4:4===o?(e%16&3|8).toString(16):n,e=e.toString(16);e.length<4;)e="0"+e;return a+([2,3,4,5].indexOf(o)>-1?"-":n)+(r+e).slice(0,4)},n)},t.hash=function(e){for(var t=5381,r=e.length;r;)t=33*t^e.charCodeAt(--r);return(t>>>0).toString(16)},t.generateID=function(e,r){var n={int:function(e){return e},date:function(e){return e},float:function(e){return e},uuid:t.uuid,timeId:function(){return t.timeid()},timeIdms:function(){return t.timeid(!0)}};return n[e]?n[e](r||1):void 0},t.cleanArgs2=function(e,r,n,a){var i=function(n,o,s){if(-1!==n.indexOf("[]")){var u=n.slice(0,n.lastIndexOf("[]"));return Array.isArray(o)?o.map(function(e){return i(u,e,s)}):[]}if("string"==typeof s){var l=s.replace(/\[\]/gim,""),c=Object.keys(a.getDB(e).config.types||{}).reduce(function(t,r){return r===l?(a.getDB(e).config.types||{})[r]:t},void 0);if(!c)throw new Error("Can't find type "+l+"!");return i(s,r,c)}var f={},d=!1,p=[];return Object.keys(s).forEach(function(r){var n=r.split(":");"*"===n[0]?d=!0:(p.push(n[0]),f[n[0]]=t.cast(e,n[1],o[n[0]],!1,a))}),d&&t.isObject(o)&&Object.keys(o).filter(function(e){return-1===p.indexOf(e)}).forEach(function(e){f[e]=o[e]}),f};return i("string"==typeof n?n:"",r,n)},t.cleanArgs=function(e,r,n,a){var i={},o=r.length;for(Object.keys(a.getDB(e).config.types||{});o--;){var s=r[o].split(":");s.length>1?i[s[0]]=t.cast(e,s[1],n[s[0]]||void 0,!0,a):i[s[0]]=n[s[0]]||void 0}return i},t.isObject=function(e){return"[object Object]"===Object.prototype.toString.call(e)},t.objSort=function(e,r){return function(n,a){var i=e?t.deepGet(e,n)>t.deepGet(e,a)?-1:1:n>a?-1:1;return r?-1*i:i}},t.execFunction=function(e,r,n,a){var i,o=r.match(/\((.*)\)/gim);if(!o[0])return{result:void 0};var s=o[0].substr(1,o[0].length-2).split(/\,\s?(?![^\(]*\))/).map(function(e){return e.trim()}),u=r.split("(").shift(),l=s.map(function(r){if(-1!==r.indexOf("(")){var i=t.execFunction(e,r,n,a).result;return"number"==typeof i?i:"string"==typeof i?'"'+i+'"':i}return r});return e.parent.functions[u]?(i=e.parent.functions[u]).call.apply(i,[e,n,a].concat(l)):{result:void 0}},t.cast=function(e,r,n,a,i){if("any"===r||"blob"===r||"*"===r)return n;if(-1!==r.indexOf("[]")){var o=r.slice(0,r.lastIndexOf("[]"));return Array.isArray(n)?n.map(function(r){return t.cast(e,o,r,a)}):[]}if(void 0===n)return n;var s=typeof n,u={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="},l=i&&e&&i.getDB(e).config.types||{};if(-1!==Object.keys(l).indexOf(r)){if(t.isObject(n)){var c=l[r];return Object.keys(c).reduce(function(r,o){var s=o.split(":");return r[s[0]]=t.cast(e,s[1],n[s[0]],a,i),r},{})}return{}}var f=function(e,r){switch(e){case"safestr":return f("string",r).replace(/[&<>"'`=\/]/gim,function(e){return u[e]});case"int":return"number"!==s||r%1!=0?Math.round(t.nan(r)):r;case"number":case"float":return"number"!==s?t.nan(r):r;case"array":return Array.isArray(r)?r:[];case"date":case"uuid":case"timeId":case"timeIdms":case"string":return"string"!==s?String(r):r;case"object":case"obj":case"map":return t.isObject(r)?r:{};case"boolean":case"bool":return!0===r||1===r}return a?n:null};if(void 0===n||null===n)return null;var d=f(String(r||"").toLowerCase(),n);return void 0!==d&&["int","float","number"].indexOf(r)>-1&&isNaN(d)?0:d},t.rad2deg=function(e){return 180*e/Math.PI},t.deg2rad=function(e){return e*(Math.PI/180)},t.crowDistance=function(e,r,n,a,i){void 0===i&&(i=6371);var o=t.deg2rad(n-e),s=t.deg2rad(a-r),u=Math.pow(Math.sin(o/2),2)+Math.cos(t.deg2rad(e))*Math.cos(t.deg2rad(n))*Math.pow(Math.sin(s/2),2);return i*(2*Math.atan2(Math.sqrt(u),Math.sqrt(1-u)))},t.levenshtein=function(e,t){return a(e,t)};var u={};t.resolvePath=function(e){if(!e)return[];if(u[e])return u[e].slice();var t=-1!==e.indexOf("[")?e.split(/\.|\[/gim).map(function(e){return e.replace(/\]/gim,"")}):e.split(".");return u[e]=t,u[e].slice()},t.fnRegex=/^[\"|\'](.*)[\"|\']$/gim,t.getFnValue=function(e,r){if("number"==typeof r)return r;var n=t.fnRegex.exec(r);return n?n[1]:t.deepGet(r,e)},t.deepFreeze=function(e){return Object.getOwnPropertyNames(e||{}).forEach(function(r){var n=e[r];"object"==typeof n&&null!==n&&(e[r]=t.deepFreeze(n))}),Object.freeze(e)},t.deepSet=function(e,r,n){var a=function(e,r,i){e[r+1]?(i[e[r]]&&(Array.isArray(i[e[r]])||t.isObject(i[e[r]]))||(isNaN(e[r+1])?i[e[r]]={}:i[e[r]]=[]),a(e,r+1,i[e[r]])):i[e[r]]=n};return a(Array.isArray(e)?e:t.resolvePath(e),0,r),r},t.deepGet=function(e,r){var n=function(e,t,r){return e[t]&&r?n(e,t+1,r[e[t]]):r};return n(Array.isArray(e)?e:t.resolvePath(e),0,r)},t.maybeAssign=function(e){return Object.isFrozen(e)?t.assign(e):e};var l=function(e){return e[0].apply(null,Array.prototype.slice.call(e,1))};t.setFast="undefined"!=typeof Promise?function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];Promise.resolve().then(function(){l(e)})}:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];setTimeout(function(){l(e)},0)}}).call(this,r(3))},function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";e.exports=function(e,t,r){var i,o,s,u,l,c,f,d;if(e===t)return 0;if(i=e.length,o=t.length,0===i)return o;if(0===o)return i;r&&(e=e.toLowerCase(),t=t.toLowerCase());f=0;for(;f<i;)a[f]=e.charCodeAt(f),n[f]=++f;d=0;for(;d<o;)for(s=t.charCodeAt(d),u=l=d++,f=-1;++f<i;)c=s===a[f]?l:l+1,l=n[f],n[f]=u=l>u?c>u?u+1:c:c>l?l+1:c;return u};var n=[],a=[]},function(e,t,r){"use strict";var n=Array.isArray,a=Object.keys,i=Object.prototype.hasOwnProperty;e.exports=function e(t,r){if(t===r)return!0;if(t&&r&&"object"==typeof t&&"object"==typeof r){var o,s,u,l=n(t),c=n(r);if(l&&c){if((s=t.length)!=r.length)return!1;for(o=s;0!=o--;)if(!e(t[o],r[o]))return!1;return!0}if(l!=c)return!1;var f=t instanceof Date,d=r instanceof Date;if(f!=d)return!1;if(f&&d)return t.getTime()==r.getTime();var p=t instanceof RegExp,b=r instanceof RegExp;if(p!=b)return!1;if(p&&b)return t.toString()==r.toString();var g=a(t);if((s=g.length)!==a(r).length)return!1;for(o=s;0!=o--;)if(!i.call(r,g[o]))return!1;for(o=s;0!=o--;)if(!e(t[u=g[o]],r[u]))return!1;return!0}return t!=t&&r!=r}},function(e,t,r){"use strict";e.exports=function(e){var t,r,c,f,d="",p=0;function b(e){d+=e}function g(t){return e.charAt(p+t).toUpperCase()}function h(e){return function(){return g(e)}}if(!(e=String(e||"")))return"";r=h(1),c=h(0),f=h(-1);for(;!l(c());){if(!c())return"";p++}switch(c()){case"A":"E"===r()?(b("E"),p+=2):(b("A"),p++);break;case"G":case"K":case"P":"N"===r()&&(b("N"),p+=2);break;case"W":"R"===r()?(b(r()),p+=2):"H"===r()?(b(c()),p+=2):s(r())&&(b("W"),p+=2);break;case"X":b("S"),p++;break;case"E":case"I":case"O":case"U":b(c()),p++}for(;c();)if(t=1,!l(c())||c()===f()&&"C"!==c())p+=t;else{switch(c()){case"B":"M"!==f()&&b("B");break;case"C":o(r())?"I"===r()&&"A"===g(2)?b(n):"S"!==f()&&b("S"):"H"===r()?(b(n),t++):b("K");break;case"D":"G"===r()&&o(g(2))?(b("J"),t++):b("T");break;case"G":"H"===r()?i(g(-3))||"H"===g(-4)||(b("F"),t++):"N"===r()?!l(g(2))||"E"===g(2)&&"D"===g(3)||b("K"):o(r())&&"G"!==f()?b("J"):b("K");break;case"H":s(r())&&!u(f())&&b("H");break;case"K":"C"!==f()&&b("K");break;case"P":"H"===r()?b("F"):b("P");break;case"Q":b("K");break;case"S":"I"!==r()||"O"!==g(2)&&"A"!==g(2)?"H"===r()?(b(n),t++):b("S"):b(n);break;case"T":"I"!==r()||"O"!==g(2)&&"A"!==g(2)?"H"===r()?(b(a),t++):"C"===r()&&"H"===g(2)||b("T"):b(n);break;case"V":b("F");break;case"W":s(r())&&b("W");break;case"X":b("KS");break;case"Y":s(r())&&b("Y");break;case"Z":b("S");break;case"F":case"J":case"L":case"M":case"N":case"R":b(c())}p+=t}return d};var n="X",a="0";function i(e){return"B"===(e=c(e))||"D"===e||"H"===e}function o(e){return"E"===(e=c(e))||"I"===e||"Y"===e}function s(e){return"A"===(e=c(e))||"E"===e||"I"===e||"O"===e||"U"===e}function u(e){return"C"===(e=c(e))||"G"===e||"P"===e||"S"===e||"T"===e}function l(e){var t=function(e){return c(e).charCodeAt(0)}(e);return t>=65&&t<=90}function c(e){return String(e).charAt(0).toUpperCase()}},function(e,t,r){"use strict";e.exports=function(e){var t,r;if((e=String(e).toLowerCase()).length<3)return e;121===e.charCodeAt(0)&&(t=!0,e="Y"+e.substr(1));_.test(e)?e=e.substr(0,e.length-2):v.test(e)&&(e=e.substr(0,e.length-1));(r=m.exec(e))?s.test(r[1])&&(e=e.substr(0,e.length-1)):(r=h.exec(e))&&c.test(r[1])&&(e=r[1],y.test(e)?e+="e":D.test(e)?e=e.substr(0,e.length-1):f.test(e)&&(e+="e"));(r=b.exec(e))&&c.test(r[1])&&(e=r[1]+"i");(r=w.exec(e))&&s.test(r[1])&&(e=r[1]+n[r[2]]);(r=x.exec(e))&&s.test(r[1])&&(e=r[1]+a[r[2]]);(r=I.exec(e))?l.test(r[1])&&(e=r[1]):(r=g.exec(e))&&l.test(r[1])&&(e=r[1]);(r=p.exec(e))&&(l.test(r[1])||u.test(r[1])&&!f.test(r[1]))&&(e=r[1]);d.test(e)&&l.test(e)&&(e=e.substr(0,e.length-1));t&&(e="y"+e.substr(1));return e};var n={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},a={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},i="([^aeiou][^aeiouy]*)",o="([aeiouy][aeiou]*)",s=new RegExp("^"+i+"?"+o+i),u=new RegExp("^"+i+"?"+o+i+o+"?$"),l=new RegExp("^"+i+"?("+o+i+"){2,}"),c=new RegExp("^"+i+"?[aeiouy]"),f=new RegExp("^"+i+"[aeiouy][^aeiouwxy]$"),d=/ll$/,p=/^(.+?)e$/,b=/^(.+?)y$/,g=/^(.+?(s|t))(ion)$/,h=/^(.+?)(ed|ing)$/,y=/(at|bl|iz)$/,m=/^(.+?)eed$/,v=/^.+?[^s]s$/,_=/^.+?(ss|i)es$/,D=/([^aeiouylsz])\1$/,w=new RegExp("^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$"),x=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,I=new RegExp("^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$")}])});