UNPKG

vsm-dictionary-local

Version:

Local (in-memory), full implementation of a VSM-dictionary

1 lines 13.1 kB
var VsmDictionaryLocal=function(t){var e={};function r(i){if(e[i])return e[i].exports;var n=e[i]={i:i,l:!1,exports:{}};return t[i].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=t,r.c=e,r.d=function(t,e,i){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)r.d(i,n,function(e){return t[e]}.bind(null,n));return i},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=2)}([function(t,e,r){t.exports={callAsync:n,callAsyncFor:function(t,e,r,i){var s=[],a=[];n(()=>{t.forEach(t=>{var r=e(t);s.push(r[0]),a.push(r[1])}),i(s.every(t=>null===t)?null:s,a)},r)}};var{randomFromInterval:i}=r(1);function n(t,e){for(var r=arguments.length,n=new Array(r>2?r-2:0),s=2;s<r;s++)n[s-2]=arguments[s];e=i(e),setTimeout(()=>t(...n),e)}},function(t,e){function r(t,e,r){return null!=e&&t<e?e:null!=r&&t>r?r:t}t.exports={deepClone:function(t){return JSON.parse(JSON.stringify(t))},strcmp:function(t,e){arguments.length>2&&void 0!==arguments[2]&&arguments[2]||(t=t.toLowerCase(),e=e.toLowerCase());return t<e?-1:t>e?1:0},limitBetween:r,randomFromInterval:function(t){if(Array.isArray(t)&&t.length>=2){var e=Math.max(+t[0],0),r=Math.max(+t[1],e);return e+Math.random()*(r-e)}return Math.max(+t,0)},arrayQuery:function(t,e,i,n,s){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:20,d=arguments.length>6&&void 0!==arguments[6]?arguments[6]:100;n=r(n||1,1,null),s=r(s||a,1,d);var c=(n-1)*s;return t.filter(e).sort(i).slice(c,c+s)}}},function(t,e,r){var i=r(3),n=r(0).callAsync,s=r(0).callAsyncFor,{deepClone:a,strcmp:d,arrayQuery:c}=r(1),o=t=>"dictInfo for '".concat(t,"' does not exist"),f=t=>"entry for '".concat(t,"' does not exist"),u=t=>"refTerm '".concat(t,"' does not exist"),l=t=>"entry is linked to non-existent dictID '".concat(t,"'");t.exports=class extends i{constructor(t){var e=t||{};if(super(e),this.dictInfos=[],this.entries=[],this.refTerms=[],e.dictData||e.refTerms){var r=this.addDictionaryData(e.dictData||[],e.refTerms);if(r)throw r}this.perPageDefault=e.perPageDefault||20,this.perPageMax=e.perPageMax||100,this.delay=e.delay||0}addDictInfos(t,e){s(t,this._addDictInfo.bind(this),this.delay,this._cbDict(e))}updateDictInfos(t,e){s(t,this._updateDictInfo.bind(this),this.delay,this._cbDict(e))}deleteDictInfos(t,e){s(t,this._deleteDictInfo.bind(this),this.delay,e)}addEntries(t,e){s(t,this._addEntry.bind(this),this.delay,this._cbEntr(e))}updateEntries(t,e){s(t,this._updateEntry.bind(this),this.delay,this._cbEntr(e))}deleteEntries(t,e){s(t,this._deleteEntry.bind(this),this.delay,e)}addRefTerms(t,e){s(t,this._addRefTerm.bind(this),this.delay,e)}deleteRefTerms(t,e){s(t,this._deleteRefTerm.bind(this),this.delay,e)}_cbDict(t){var e=this;return function(){e._sortDictInfos(),t(...arguments)}}_cbEntr(t){var e=this;return function(){e._sortEntries(),t(...arguments)}}setDelay(t){this.delay=t||0}addDictionaryData(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=[];return e.forEach(e=>{(t=this._addDictInfo(e)[0])&&(t=this._updateDictInfo(e)[0]),t&&i.push(t),(e.entries||[]).forEach(r=>{if(r.dictID){if(r.dictID!==e.id)return i.push("an entry tries to override dictID '".concat(e.id,"'"))}else r.dictID=e.id;(t=this._addEntry(r)[0])&&t.endsWith("already exists")&&(t=this._updateEntry(r)[0]),t&&i.push(t)})}),this._sortEntries(),r.forEach(e=>{(t=this._addRefTerm(e)[0])&&i.push(t)}),i.length?i:null}_addDictInfo(t){if(!t.id)return["dictInfo misses a required property: id"];if(this._indexOfDictInfo(t.id)>=0)return["dictInfo for '".concat(t.id,"' already exists")];var e={id:t.id};return t.abbrev&&(e.abbrev=t.abbrev),t.name&&(e.name=t.name),this.dictInfos.push(e),[null]}_updateDictInfo(t){var e=this._indexOfDictInfo(t.id);if(e<0)return[o(t.id),null];var r=Object.assign({},this.dictInfos[e]);return t.abbrev&&(r.abbrev=t.abbrev),t.name&&(r.name=t.name),this.dictInfos[e]=r,[null,r]}_deleteDictInfo(t){var e=this._indexOfDictInfo(t);return e<0?[o(t)]:this.entries.find(e=>e.dictID==t)?["dictInfo for '".concat(t,"' still has associated entries")]:(this.dictInfos.splice(e,1),[null])}_indexOfDictInfo(t){return this.dictInfos.findIndex(e=>e.id==t)}_sortDictInfos(){this.dictInfos.sort((t,e)=>d(t.id,e.id))}_addEntry(t){return t.id&&t.dictID&&t.terms&&(!Array.isArray(t.terms)||t.terms.length)?this.dictInfos[this._indexOfDictInfo(t.dictID)]?this._indexOfEntry(t.id)>=0?["entry for '".concat(t.id,"' already exists")]:(t=i.prepEntry(t)).terms.filter(t=>!t.str).length?["invalid term"]:(t.z&&(t.z=a(t.z)),this.entries.push(t),[null]):[l(t.dictID)]:["entry misses a required property: id, dictID, or terms"]}_updateEntry(t){var e=this._indexOfEntry(t.id);if(e<0)return[f(t.id),null];if(t.dictID&&this._indexOfDictInfo(t.dictID)<0)return[l(t.dictID),null];var r=a(this.entries[e]);return t.dictID&&(r.dictID=t.dictID),t.descr&&(r.descr=t.descr),t.termsDel&&(r.terms=r.terms.filter(e=>!t.termsDel.includes(e.str))),t.zDel&&r.z&&(!0===t.zDel?delete r.z:t.zDel.forEach(t=>delete r.z[t])),i.prepTerms(t.terms||[]).forEach(t=>{var e=r.terms.findIndex(e=>e.str==t.str);e>=0?r.terms[e]=t:r.terms.push(t)}),r.terms.length?(t.z&&(r.z=Object.assign(r.z||{},a(t.z))),[null,this.entries[e]=r]):["entry would have no terms left",null]}_deleteEntry(t){var e=this._indexOfEntry(t);return e<0?[f(t)]:(this.entries.splice(e,1),[null])}_indexOfEntry(t){return this.entries.findIndex(e=>e.id==t)}_sortEntries(){this.entries.sort((t,e)=>d(t.dictID,e.dictID)||d(t.id,e.id))}_addRefTerm(t){return t?(this.refTerms=[...new Set(this.refTerms.concat(t))].sort(),[null]):["empty refTerm"]}_deleteRefTerm(t){var e=this.refTerms.indexOf(t);return e<0?[u(t)]:(this.refTerms.splice(e,1),[null])}getDictInfos(t,e){var r=Object.assign({filter:{}},t),i=this._arrayQuery(this.dictInfos,t=>!r.filter.id||r.filter.id.includes(t.id),(t,e)=>d(t.id,e.id),r.page,r.perPage);n(e,this.delay,null,{items:i})}getEntries(t,e){var r=Object.assign({filter:{}},t),s="id"==r.sort?(t,e)=>d(t.id,e.id):"str"==r.sort?(t,e)=>d(t.terms[0].str,e.terms[0].str)||d(t.dictID,e.dictID)||d(t.id,e.id):(t,e)=>d(t.dictID,e.dictID)||d(t.id,e.id),a=this._arrayQuery(this.entries,t=>(!r.filter.id||r.filter.id.includes(t.id))&&(!r.filter.dictID||r.filter.dictID.includes(t.dictID)),s,r.page,r.perPage);n(e,this.delay,null,{items:i.zPropPrune(a,r.z)})}getRefTerms(t,e){var r=Object.assign({filter:{}},t),i=this._arrayQuery(this.refTerms,t=>!r.filter.str||r.filter.str.includes(t),(t,e)=>d(t,e),r.page,r.perPage);n(e,this.delay,null,{items:i})}_arrayQuery(t,e,r,i,n){return c(t,e,r,i,n,this.perPageDefault,this.perPageMax)}getEntryMatchesForString(t,e,r){var s=Object.assign({filter:{},sort:{}},e),a=[],c=t.toLowerCase();if(c){this.entries.forEach(t=>{t.terms.forEach((e,r)=>{a.push({str:e.str,dictID:t.dictID,e:t,p:r,id:t.id})})});a=this._arrayQuery(a,t=>{if(s.filter.dictID&&!s.filter.dictID.includes(t.dictID))return!1;if(t.str.toLowerCase().startsWith(c))t.type="S";else{if(!t.str.toLowerCase().includes(c))return!1;t.type="T"}return t.D=s.sort.dictID&&s.sort.dictID.includes(t.dictID)?0:1,!0},(t,e)=>t.D-e.D||d(t.type,e.type)||d(t.str,e.str)||d(t.dictID,e.dictID)||t.p-e.p||d(t.id,e.id),s.page,s.perPage).map(t=>Object.assign({},t.e,t.e.terms[t.p],{type:t.type})),a=i.zPropPrune(a,s.z)}n(r,this.delay,null,{items:a})}}},function(t,e,r){const{prepTerms:i,prepEntry:n,zPropPrune:s}=r(4),{deepClone:a,strcmp:d,callAsync:c}=r(5),o=r(6),f="to implement by a subclass";t.exports=class{constructor(t){var e=t||{};this.numberMatchConfig=!1===e.numberMatchConfig||"object"==typeof e.numberMatchConfig?e.numberMatchConfig:{dictID:"00",conceptIDPrefix:"00:"},this.extraDictInfos=this.numberMatchConfig?[{id:this.numberMatchConfig.dictID,name:"Numbers"}]:[],this.matchDescrs={number:"number",refTerm:"referring term"},this.fixedTermsCache={},this.defaultRefTerms=["it","that","them","these","they","this"]}loadFixedTerms(t,e,r){if(!t.length)return c(r,null);var i=a(e);i.filter||(i.filter={}),i.filter.id=t.map(t=>t.id),i.page=1,i.perPage=t.length,i.getAllResults=!0,this.getEntries(i,(e,i)=>{if(e)return r(e);t.forEach(t=>{var e=i.items.find(e=>e.id==t.id);if(e){var r=e.terms.findIndex(e=>e.str==t.str);-1==r&&(r=0);var n=this._idtToFTCacheKey(t.id,t.str||"");this.fixedTermsCache[n]=this._entryToMatch(e,r,"F")}}),r(null)})}_idtToFTCacheKey(t,e=""){return`${t}\n${e}`}_entryToMatch(t,e,r){return Object.assign({},t,t.terms[e],{type:r})}getMatchesForString(t,e,r){if((e.page||1)>1)return this.getEntryMatchesForString(t,e,r);var i=[],n=[],s=0,a=this;function d(d,c,o){i[d]=c,n[d]=o,2==++s&&function(){var s=i.find(t=>t);if(s)return r(s);var d=n[0],c=d.items;n[1].items.length&&c.unshift(a.refTermToMatch(n[1].items[0]));c=a._addFixedMatchesForString(t,c,e),d.items=a._addNumberMatchForString(t,c),r(null,d)}()}this.getEntryMatchesForString(t,e,(t,e)=>d(0,t,e)),this.getRefTerms({filter:{str:[t]}},(t,e)=>d(1,t,e))}_addFixedMatchesForString(t,e,r){var i=this._getFixedMatchesForString(t,r);if(i.length){var n=!(!e[0]||"R"!=e[0].type)&&e.shift();e=i.concat(e),n&&e.unshift(n),e=e.reduce((t,r,i)=>{return i==e.findIndex(t=>r.id==t.id&&r.str==t.str)&&t.push(r),t},[])}return e}_addNumberMatchForString(t,e){var r=this._getNumberMatchForString(t);if(r){var i=e.findIndex(t=>t.id==r.id);i>=0&&(r=e.splice(i,1)[0]),e.unshift(r),r.type="N",r.descr||(r.descr=this.matchDescrs.number)}return e}_getFixedMatchesForString(t,e){if(!e.idts)return[];var r=[],i=e.idts;return t=t.toLowerCase(),r=(r=i.reduce((e,r)=>{var i=this._idtToFTCacheKey(r.id,r.str||""),n=this.fixedTermsCache[i];if(!n)return e;var s=n.str.toLowerCase().startsWith(t)?"F":n.str.toLowerCase().includes(t)?"G":0;return s&&e.push(Object.assign(a(n),{type:s})),e},r)).sort((t,e)=>d(t.type,e.type)||d(t.str,e.str)||d(t.dictID,e.dictID)||t.id-e.id),s(r,e.z)}_getNumberMatchForString(t){if(!this.numberMatchConfig||!t)return!1;var e=o(t);return!1!==e&&{id:this.numberMatchConfig.conceptIDPrefix+e,dictID:this.numberMatchConfig.dictID,str:t,descr:this.matchDescrs.number,type:"N"}}refTermToMatch(t){return{id:"",dictID:"",str:t,descr:this.matchDescrs.refTerm,type:"R"}}getExtraDictInfos(){return this.extraDictInfos}static prepTerms(...t){return i(...t)}static prepEntry(...t){return n(...t)}static zPropPrune(...t){return s(...t)}addDictInfos(t,e){e(f)}addEntries(t,e){e(f)}addRefTerms(t,e){e(f)}updateDictInfos(t,e){e(f)}updateEntries(t,e){e(f)}deleteDictInfos(t,e){e(f)}deleteEntries(t,e){e(f)}deleteRefTerms(t,e){e(f)}getDictInfos(t,e){e(f)}getEntries(t,e){e(f)}getRefTerms(t,e){this._getRefTermsFromSortedArray(this.defaultRefTerms,t,e)}_getRefTermsFromSortedArray(t,e,r){e.filter&&e.filter.str&&(t=t.filter(t=>e.filter.str.includes(t)));var i=Math.max(1,e.page||1),n=Math.max(1,e.perPage||t.length),s=(i-1)*n;t=t.slice(s,s+n),c(r,null,{items:t})}}},function(t,e){function r(t){return(t=t.map(t=>(function(t){var e={str:t.str};return void 0!==t.style&&(e.style=t.style),void 0!==t.descr&&(e.descr=t.descr),e})(t))).reduce((t,e)=>{for(var r=0;r<t.length;r++)if(t[r].str===e.str){t[r]=e;break}return r==t.length&&t.push(e),t},[])}t.exports={prepTerms:r,prepEntry:function(t){var e={id:t.id,dictID:t.dictID,terms:r(t.terms)};void 0!==t.descr&&(e.descr=t.descr);void 0!==t.z&&(e.z=t.z);return e},zPropPrune:function(t,e=!0){return!0===e?t:t.map(t=>{if(void 0===t.z)return t;var r=Object.assign({},t,{z:{}});return e.forEach(e=>{void 0!==t.z[e]&&(r.z[e]=t.z[e])}),Object.keys(r.z).length||delete r.z,r})}}},function(t,e){t.exports={deepClone:function(t){return JSON.parse(JSON.stringify(t))},strcmp:function(t,e,r=!1){r||(t=t.toLowerCase(),e=e.toLowerCase());return t<e?-1:t>e?1:0},callAsync:function(t,...e){setTimeout(()=>t(...e),0)}}},function(t,e){t.exports=function(t){var e=t.match(r);if(null===e)return!1;var n="-"===e[1]?"-":"",s=e[2],a=e[3]||"0";"+"===a[0]&&(a=a.substr(1));var d=s.indexOf(".");d<0&&(d=s.length);var c=s.replace(/\./g,"");if(!c||c.length<s.length-1)return!1;var o=c.search(/[1-9]/);if(o<0)return"0e+0";a=i(a,(d-1-o).toString()),(s=c.substr(o).replace(/0+$/,"")).length>1&&(s=s[0]+"."+s.substr(1));return n+s+"e"+("-"!=a[0]?"+":"")+a.toString()},t.exports.addBigInts=i;var r=/^([+-])?([0-9.]+)(?:[e|E]([+-]?[0-9]+))?$/;function i(t,e){var r="-"===t[0]?1:0,i="-"===e[0]?1:0;r&&(t=t.substr(1)),i&&(e=e.substr(1));var n=r===i;if(t=t.replace(/^0+/,""),e=e.replace(/^0+/,""),""===t&&""===e||!n&&t===e)return"0";if(!n&&(t.length<e.length||t.length===e.length&&t<e)){var s=t;t=e,e=s,r=i}t=t.split(""),e=e.split("");for(var a=0,d="";t.length||e.length||a;)d=((a=~~t.pop()+(n?~~e.pop()+a:-~~e.pop()-a))+10)%10+d,a=n?a>9:a<0;return(r?"-":"")+d.replace(/^0+/,"")}}]);