diff --git a/dist/flexsearch.min.js b/dist/flexsearch.min.js index 86f0c83..5044c5c 100644 --- a/dist/flexsearch.min.js +++ b/dist/flexsearch.min.js @@ -5,27 +5,26 @@ * Licence: Apache-2.0 * https://github.com/nextapps-de/flexsearch */ -(function(){'use strict';var t;function aa(a){function b(c){return a.next(c)}function d(c){return a.throw(c)}return new Promise(function(c,e){function f(g){g.done?c(g.value):Promise.resolve(g.value).then(b,d).then(f,e)}f(a.next())})};const v=/[\W_]+/;function ba(a){if(a=a.toLowerCase())if(a&&this.B&&(a=ca(a,this.B)),this.D&&1=b)return f.concat(l.slice(0,b-h));f=f.concat(l);h+=r}return f} -;function N(a){this.h=!0!==a&&a;this.cache=A();this.g=[]}function la(a,b,d){G(a)&&(a=a.query);let c=this.cache.get(a);c||(c=this.search(a,b,d),this.cache.set(a,c));return c}N.prototype.set=function(a,b){if(!this.cache[a]){var d=this.g.length;d===this.h?delete this.cache[this.g[d-1]]:d++;for(--d;0=e&&(f=e-1);this.o=e;this.threshold=f;this.s=b=d&&d.H||a.tokenize||"strict";this.depth="strict"===b&&h.depth;this.u=y(h.bidirectional,!0);this.j=g="memory"=== -a.optimize;this.i=y(a.fastupdate,!0);this.m=a.minlength||1;this.map=g?da(e-f):A();e=h.resolution||e;f=h.threshold||f;f>=e&&(f=e-1);this.h=e;this.l=f;this.g=g?da(e-f):A();this.C=d&&d.C||a.rtl;this.B=(b=a.matcher||c&&c.B)&&fa(b,!1);this.D=(b=a.stemmer||c&&c.D)&&fa(b,!0);if(d=b=a.filter||c&&c.filter){d=b;c=A();for(let k=0,l=d.length;k=this.m&&(r||!u[p])){var e=Math.min(this.o/l*x|0,x);if(eg;k--)f=p.substring(g,k),f.length>=this.m&&P(this,u,f,h,a,d)}break}case "reverse":if(2< -c){for(g=c-1;0=this.m&&P(this,u,f,e,a,d);f=""}case "forward":if(1=this.m&&P(this,u,f,e,a,d);break;default:if(P(this,u,p,e,a,d),r&&1=this.m&&!e[p]){if(e[p]=1,k=Math.min((this.h-g)/l*x+h|0,x+(h-1)),kf;P(this,m,z?f:p,k,a,d,z?p:f)}}else g=Math.min(g+1,l-x)}}}}this.i||(this.register[a]=1)}}return this}; -function P(a,b,d,c,e,f,g){let h=g?a.g:a.map;if(!b[d]||g&&!b[d][g])a.j&&(h=h[c]),g?(b[d]||(b[d]=A()),b[d][g]=1,h=h[g]||(h[g]=A())):b[d]=1,h=h[d]||(h[d]=[]),a.j||(h=h[c]||(h[c]=[])),f&&-1!==h.indexOf(e)||(h[h.length]=e,a.i&&(a=a.register[e]||(a.register[e]=[]),a[a.length]=h))} -t.search=function(a,b,d){G(a)?(d=a,a=d.query):G(b)&&(d=b);let c=[],e;var f=this.threshold;let g,h=0;if(d){b=d.limit;h=d.offset||0;f=y(d.threshold,f);var k=d.context;g=d.suggest}if(a&&(a=this.encode(a),e=a.length,1=this.m&&!d[m])if(this.j||g||this.map[m])l[u++]=m,d[m]=1;else return c;a=l;e=a.length}if(!e)return c;b||(b=100);d=this.o-f;f=this.h-f;k=this.depth&&1b?c.slice(0,b):c}}return ka(c,b,h,g)};function pa(a,b,d,c){d?(c=c&&b>d,a=(a=a[c?b:d])&&a[c?d:b]):a=a[b];return a} -function oa(a,b,d,c,e,f,g,h){let k=[],l=h?a.g:a.map;a.j||(l=pa(l,g,h,a.u));if(l){let r=0;c=Math.min(l.length,c);for(let q=0,u=0,m;q=e)));q++);if(r){if(f)return k=1===r?k[0]:[].concat.apply([],k),k.length>e?k.slice(0,e):k;b[b.length]=k;return}}return!d&&k}t.contain=function(a){return!!this.register[a]};t.update=function(a,b){return this.remove(a).add(a,b)}; -t.remove=function(a,b){const d=this.register[a];if(d){if(this.i)for(let c=0,e;cb||q)g=g.slice(q,q+b);h&&(g=sa.call(c,g)); -n={tag:f,result:g}}else n=void 0;n&&(e[e.length]=n,u++)}return u?e:[]}m||(m=c.g);r=r&&(1=b)return f.concat(l.slice(0,b-h));f=f.concat(l);h+=p}return f} +function fa(a,b){const c=C(),d=C(),e=[];for(let f=0;f=e&&(f=e-1);this.o=e;this.threshold=f;this.s=b=c&&c.I||a.tokenize||"strict";this.depth="strict"===b&&h.depth;this.u=A(h.bidirectional,!0);this.l=g="memory"=== +a.optimize;this.i=A(a.fastupdate,!0);this.m=a.minlength||1;this.map=g?B(e-f):C();e=h.resolution||e;f=h.threshold||f;f>=e&&(f=e-1);this.h=e;this.j=f;this.g=g?B(e-f):C();this.D=c&&c.D||a.rtl;this.B=(b=a.matcher||d&&d.B)&&G(b,!1);this.F=(b=a.stemmer||d&&d.F)&&G(b,!0);if(c=b=a.filter||d&&d.filter){c=b;d=C();for(let k=0,l=c.length;k=this.m&&(p||!w[m])){var e=Math.min(this.o/l*t|0,t);if(eg;k--)f=m.substring(g,k),f.length>=this.m&&N(this,w,f,h,a,c)}break}case "reverse":if(2< +d){for(g=d-1;0=this.m&&N(this,w,f,e,a,c);f=""}case "forward":if(1=this.m&&N(this,w,f,e,a,c);break;default:if(N(this,w,m,e,a,c),p&&1=this.m&&!e[m]){if(e[m]=1,k=Math.min((this.h-g)/l*t+h|0,t+(h-1)),kf;N(this,q,n?f:m,k,a,c,n?m:f)}}else g=Math.min(g+1,l-t)}}}}this.i||(this.register[a]=1)}}return this}; +function N(a,b,c,d,e,f,g){let h=g?a.g:a.map;if(!b[c]||g&&!b[c][g])a.l&&(h=h[d]),g?(b[c]||(b[c]=C()),b[c][g]=1,h=h[g]||(h[g]=C())):b[c]=1,h=h[c]||(h[c]=[]),a.l||(h=h[d]||(h[d]=[])),f&&-1!==h.indexOf(e)||(h[h.length]=e,a.i&&(a=a.register[e]||(a.register[e]=[]),a[a.length]=h))} +u.search=function(a,b,c){E(a)?(c=a,a=c.query):E(b)&&(c=b);let d=[],e;var f=this.threshold;let g,h=0;if(c){b=c.limit;h=c.offset||0;f=A(c.threshold,f);var k=c.context;g=c.suggest}if(a&&(a=this.encode(a),e=a.length,1=this.m&&!c[q])if(this.l||g||this.map[q])l[w++]=q,c[q]=1;else return d;a=l;e=a.length}if(!e)return d;b||(b=100);c=this.o-f;f=this.h-f;k=this.depth&&1b?d.slice(0,b):d}}return ea(d,b,h,g)};function na(a,b,c,d){c?(d=d&&b>c,a=(a=a[d?b:c])&&a[d?c:b]):a=a[b];return a} +function ma(a,b,c,d,e,f,g,h){let k=[],l=h?a.g:a.map;a.l||(l=na(l,g,h,a.u));if(l){let p=0;d=Math.min(l.length,d);for(let r=0,w=0,q;r=e)));r++);if(p){if(f)return k=1===p?k[0]:[].concat.apply([],k),k.length>e?k.slice(0,e):k;b[b.length]=k;return}}return!c&&k}u.contain=function(a){return!!this.register[a]};u.update=function(a,b){return this.remove(a).add(a,b)}; +u.remove=function(a,b){const c=this.register[a];if(c){if(this.i)for(let d=0,e;db||c)e=e.slice(c,c+b);d&&(e=ra.call(this,e));return{tag:a,result:e}}}function ra(a){const b=Array(a.length);for(let c=0,d;c 1) || (tag && (tag.length > 1))); - let async_res = []; - // use Promise.all to get a change of processing requests in parallel - if(this.worker || this.async){ + if(!resolve && (this.worker || this.async)){ + + resolve = []; for(let i = 0, key; i < field.length; i++){ @@ -558,10 +558,17 @@ Document.prototype.search = async function(query, limit, options){ opt = field_options[key]; } - async_res[i] = this.index[key].searchAsync(query, limit, opt || options); + resolve[i] = this.index[key].searchAsync(query, limit, opt || options); } - async_res = await Promise.all(async_res); + const self = this; + + // anyone knows a better workaround of optionally having async promises? + + return Promise.all(resolve).then(function(resolve){ + + self.search(query, limit, options, resolve); + }); } // TODO solve this in one loop below @@ -582,9 +589,9 @@ Document.prototype.search = async function(query, limit, options){ opt = field_options[key]; } - if(this.worker || this.async){ + if(resolve){ - res = async_res[i]; + res = resolve[i]; } else{ diff --git a/src/type.js b/src/type.js index 10772bd..0ca900e 100644 --- a/src/type.js +++ b/src/type.js @@ -50,5 +50,7 @@ IndexInterface.prototype.remove; export function DocumentInterface(){ this.field = null; + + /** @type IndexInterface */ this.index = null; } diff --git a/src/webpack.js b/src/webpack.js index 3724eab..b4888aa 100644 --- a/src/webpack.js +++ b/src/webpack.js @@ -1,6 +1,7 @@ import { SUPPORT_ASYNC, SUPPORT_DOCUMENT, SUPPORT_CACHE, SUPPORT_SERIALIZE } from "./config.js"; import Document from "./document.js"; import Index from "./index.js"; +import WorkerAdapter from "./adapter.js"; import { registerCharset, registerLanguage } from "./global.js"; /** @export */ Document.prototype.add; @@ -44,15 +45,35 @@ if(SUPPORT_SERIALIZE){ /** @export */ Index.prototype.export; /** @export */ Index.prototype.import; - /** @export */ Document.prototype.export; /** @export */ Document.prototype.import; } -window["FlexSearch"] = { +const root = self || window; + +const FlexSearch = { "Index": Index, "Document": SUPPORT_DOCUMENT ? Document : null, + "WorkerAdapter": WorkerAdapter, "registerCharset": registerCharset, "registerLanguage": registerLanguage -}; \ No newline at end of file +}; + +let tmp; + +if((tmp = root["define"]) && tmp["amd"]){ + + tmp([], function(){ + + return FlexSearch; + }); +} +else if(root["exports"]){ + + root["exports"] = FlexSearch; +} +else{ + + root["FlexSearch"] = FlexSearch; +} diff --git a/task/build.js b/task/build.js index 448aaa6..f484f9e 100644 --- a/task/build.js +++ b/task/build.js @@ -136,8 +136,8 @@ let parameter = (function(opt){ dependency_mode: "PRUNE_LEGACY", rewrite_polyfills: use_polyfill || false, - isolation_mode: "IIFE" - //output_wrapper: "(function(){%output%}());" + // isolation_mode: "IIFE", + output_wrapper: "(function(self){%output%}(module));" //formatting: "PRETTY_PRINT" });