diff --git a/README.md b/README.md index e5684a2..c1170c7 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ npm install git+https://github.com/nextapps-de/flexsearch/tree/v0.8-preview - Enhanced Worker Support - Improved Build System + Bundler (Supported: CommonJS, ESM, Global Namespace), also the import of language packs are now supported for Node.js - Full covering index.d.ts type definitions +- Fast-Boot Serialization optimized for Server-Side-Rendering (PHP, Python, Ruby, Rust, Java, Go, Node.js, ...) Compare Benchmark: [0.7.0](https://nextapps-de.github.io/flexsearch/test/flexsearch-0.7.0/) vs. [0.8.0](https://nextapps-de.github.io/flexsearch/test/flexsearch-0.8.0/) @@ -1633,6 +1634,72 @@ const index = new Index({ If you get some good results please feel free to share your encoder. +## Fast-Boot Serialization for Server-Side-Rendering (PHP, Python, Ruby, Rust, Java, Go, Node.js, ...) + +When using Server-Side-Rendering you can create a different export which instantly boot up. Especially when using Server-side rendered content, this could help to restore an index on page load. + +> When your index is too large you should use the default export/import mechanism. + +As the first step populate the FlexSearch index with your contents. + +You have two options: + +### 1. Create a function as string + +```js +const fn_string = index.serialize(); +``` + +The contents of `fn_string` is a valid Javascript-Function declared as `inject(index)`. Store it or place this somewhere in your code. + +This function basically looks like: + +```js +function inject(index){ + index.reg = new Set([/* ... */]); + index.map = new Map([/* ... */]); + index.ctx = new Map([/* ... */]); +} +``` + +After creating the index on client side just call the inject method like: + +```js +const index = new Index(); +inject(index); +``` + +That's it. + +### 2. Create just a function body as string + +Alternatively you can use lazy function declaration by passing `false` to the serialize function: + +```js +const fn_body = index.serialize(false); +``` + +You will get just the function body which looks like: + +```js +index.reg = new Set([/* ... */]); +index.map = new Map([/* ... */]); +index.ctx = new Map([/* ... */]); +``` + +Now you can place this in your code directly (name your index as `index`), or you can also create an inject function from it, e.g.: + +```js +const inject = new Function("index", fn_body); +``` + +This function is callable like the above example: + +```js +const index = new Index(); +inject(index); +``` + ## Load Library (Node.js, ESM, Legacy Browser) > Please do not use the `/src/` folder of this repo. It isn't meant to be used directly, instead it needs [conditional compilation](https://en.wikipedia.org/wiki/Conditional_compilation). You can easily perform a custom build, but you shouldn't use the source folder for production. You will need at least any kind of compiler which resolve the compiler flags within the code like [Closure Compiler](https://github.com/google/closure-compiler) (Advanced Compilation) or with [Babel conditional-compile](https://github.com/brianZeng/babel-plugin-conditional-compile) plugin. The `/dist/` folder is containing every version which you probably need including unminified ESM modules. diff --git a/dist/flexsearch.bundle.debug.js b/dist/flexsearch.bundle.debug.js index f9eafad..426c42c 100644 --- a/dist/flexsearch.bundle.debug.js +++ b/dist/flexsearch.bundle.debug.js @@ -129,32 +129,32 @@ G.prototype.assign = function(a) { this.minlength = y(a.minlength, 1, this.minlength); this.maxlength = y(a.maxlength, 0, this.maxlength); if (this.cache = c = y(a.cache, !0, this.cache)) { - this.O = null, this.V = "number" === typeof c ? c : 2e5, this.J = new Map(), this.M = new Map(), this.B = this.h = 128; + this.M = null, this.T = "number" === typeof c ? c : 2e5, this.H = new Map(), this.K = new Map(), this.A = this.h = 128; } - this.C = ""; - this.S = null; - this.P = ""; - this.T = null; + this.B = ""; + this.P = null; + this.N = ""; + this.R = null; if (this.matcher) { for (const d of this.matcher.keys()) { - this.C += (this.C ? "|" : "") + d; + this.B += (this.B ? "|" : "") + d; } } if (this.stemmer) { for (const d of this.stemmer.keys()) { - this.P += (this.P ? "|" : "") + d; + this.N += (this.N ? "|" : "") + d; } } return this; }; G.prototype.encode = function(a) { if (this.cache && a.length <= this.h) { - if (this.O) { - if (this.J.has(a)) { - return this.J.get(a); + if (this.M) { + if (this.H.has(a)) { + return this.H.get(a); } } else { - this.O = setTimeout(la, 0, this); + this.M = setTimeout(la, 0, this); } } this.normalize && (a = "function" === typeof this.normalize ? this.normalize(a) : ka ? a.normalize("NFKD").replace(ka, "").toLowerCase() : a.toLowerCase()); @@ -176,20 +176,20 @@ G.prototype.encode = function(a) { if (this.filter && this.filter.has(g)) { continue; } - if (this.cache && g.length <= this.B) { - if (this.O) { - var e = this.M.get(g); + if (this.cache && g.length <= this.A) { + if (this.M) { + var e = this.K.get(g); if (e || "" === e) { e && c.push(e); continue; } } else { - this.O = setTimeout(la, 0, this); + this.M = setTimeout(la, 0, this); } } let k; - this.stemmer && 2 < g.length && (this.T || (this.T = new RegExp("(?!^)(" + this.P + ")$")), g = g.replace(this.T, l => this.stemmer.get(l)), k = 1); - this.matcher && 1 < g.length && (this.S || (this.S = new RegExp("(" + this.C + ")", "g")), g = g.replace(this.S, l => this.matcher.get(l)), k = 1); + this.stemmer && 2 < g.length && (this.R || (this.R = new RegExp("(?!^)(" + this.N + ")$")), g = g.replace(this.R, l => this.stemmer.get(l)), k = 1); + this.matcher && 1 < g.length && (this.P || (this.P = new RegExp("(" + this.B + ")", "g")), g = g.replace(this.P, l => this.matcher.get(l)), k = 1); g && k && (g.length < this.minlength || this.filter && this.filter.has(g)) && (g = ""); if (g && (this.mapper || this.dedupe && 1 < g.length)) { e = ""; @@ -203,17 +203,17 @@ G.prototype.encode = function(a) { g = g.replace(this.replacer[e], this.replacer[e + 1]); } } - this.cache && h.length <= this.B && (this.M.set(h, g), this.M.size > this.V && (this.M.clear(), this.B = this.B / 1.1 | 0)); + this.cache && h.length <= this.A && (this.K.set(h, g), this.K.size > this.T && (this.K.clear(), this.A = this.A / 1.1 | 0)); g && c.push(g); } this.finalize && (c = this.finalize(c) || c); - this.cache && a.length <= this.h && (this.J.set(a, c), this.J.size > this.V && (this.J.clear(), this.h = this.h / 1.1 | 0)); + this.cache && a.length <= this.h && (this.H.set(a, c), this.H.size > this.T && (this.H.clear(), this.h = this.h / 1.1 | 0)); return c; }; function la(a) { - a.O = null; - a.J.clear(); - a.M.clear(); + a.M = null; + a.H.clear(); + a.K.clear(); } ;function ma(a, b, c) { a = ("object" === typeof a ? "" + a.query : a).toLowerCase(); @@ -376,9 +376,9 @@ function L(a = 8) { return new L(a); } this.index = z(); - this.C = []; + this.B = []; this.size = 0; - 32 < a ? (this.h = xa, this.B = BigInt(a)) : (this.h = ya, this.B = a); + 32 < a ? (this.h = xa, this.A = BigInt(a)) : (this.h = ya, this.A = a); } L.prototype.get = function(a) { const b = this.index[this.h(a)]; @@ -387,7 +387,7 @@ L.prototype.get = function(a) { L.prototype.set = function(a, b) { var c = this.h(a); let d = this.index[c]; - d ? (c = d.size, d.set(a, b), (c -= d.size) && this.size++) : (this.index[c] = d = new Map([[a, b]]), this.C.push(d)); + d ? (c = d.size, d.set(a, b), (c -= d.size) && this.size++) : (this.index[c] = d = new Map([[a, b]]), this.B.push(d)); }; function M(a = 8) { if (!this) { @@ -395,20 +395,20 @@ function M(a = 8) { } this.index = z(); this.h = []; - 32 < a ? (this.C = xa, this.B = BigInt(a)) : (this.C = ya, this.B = a); + 32 < a ? (this.B = xa, this.A = BigInt(a)) : (this.B = ya, this.A = a); } M.prototype.add = function(a) { - var b = this.C(a); + var b = this.B(a); let c = this.index[b]; c ? (b = c.size, c.add(a), (b -= c.size) && this.size++) : (this.index[b] = c = new Set([a]), this.h.push(c)); }; u = L.prototype; u.has = M.prototype.has = function(a) { - const b = this.index[this.C(a)]; + const b = this.index[this.B(a)]; return b && b.has(a); }; u.delete = M.prototype.delete = function(a) { - const b = this.index[this.C(a)]; + const b = this.index[this.B(a)]; b && b.delete(a) && this.size--; }; u.clear = M.prototype.clear = function() { @@ -438,18 +438,18 @@ u.entries = M.prototype.entries = function*() { } }; function ya(a) { - let b = 2 ** this.B - 1; + let b = 2 ** this.A - 1; if ("number" == typeof a) { return a & b; } - let c = 0, d = this.B + 1; + let c = 0, d = this.A + 1; for (let e = 0; e < a.length; e++) { c = (c * d ^ a.charCodeAt(e)) & b; } - return 32 === this.B ? c + 2 ** 31 : c; + return 32 === this.A ? c + 2 ** 31 : c; } function xa(a) { - let b = BigInt(2) ** this.B - BigInt(1); + let b = BigInt(2) ** this.A - BigInt(1); var c = typeof a; if ("bigint" === c) { return a & b; @@ -458,7 +458,7 @@ function xa(a) { return BigInt(a) & b; } c = BigInt(0); - let d = this.B + BigInt(1); + let d = this.A + BigInt(1); for (let e = 0; e < a.length; e++) { c = (c * d ^ BigInt(a.charCodeAt(e))) & b; } @@ -493,7 +493,7 @@ function N(a) { ;z(); O.prototype.add = function(a, b, c, d) { if (b && (a || 0 === a)) { - if (!d && !c && this.A.has(a)) { + if (!d && !c && this.reg.has(a)) { return this.update(a, b); } b = this.encoder.encode(b); @@ -532,7 +532,7 @@ O.prototype.add = function(a, b, c, d) { } default: if (Q(this, m, p, f, a, c), n && 1 < d && r < d - 1) { - for (e = z(), g = this.U, f = p, h = Math.min(n + 1, d - r), e[f] = 1, k = 1; k < h; k++) { + for (e = z(), g = this.S, f = p, h = Math.min(n + 1, d - r), e[f] = 1, k = 1; k < h; k++) { if ((p = b[this.rtl ? d - 1 - r - k : r + k]) && !e[p]) { e[p] = 1; const t = this.score ? this.score(b, f, r, p, k) : P(g + (d / 2 > g ? 0 : 1), d, r, h - 1, k - 1), x = this.bidirectional && p > f; @@ -543,29 +543,29 @@ O.prototype.add = function(a, b, c, d) { } } } - this.fastupdate || this.A.add(a); + this.fastupdate || this.reg.add(a); } else { b = ""; } } - this.db && (b || this.K.push({del:a}), this.W && Ca(this)); + this.db && (b || this.I.push({del:a}), this.U && Ca(this)); return this; }; function Q(a, b, c, d, e, f, g) { - let h = g ? a.F : a.map, k; + let h = g ? a.ctx : a.map, k; if (!b[c] || !g || !(k = b[c])[g]) { if (g ? (b = k || (b[c] = z()), b[g] = 1, (k = h.get(g)) ? h = k : h.set(g, h = new Map())) : b[c] = 1, (k = h.get(c)) ? h = k : h.set(c, h = k = []), h = h[d] || (h[d] = []), !f || !h.includes(e)) { if (h.length === 2 ** 31 - 1) { b = new K(h); if (a.fastupdate) { - for (let l of a.A.values()) { + for (let l of a.reg.values()) { l.includes(h) && (l[l.indexOf(h)] = b); } } k[d] = h = b; } h.push(e); - a.fastupdate && ((d = a.A.get(e)) ? d.push(h) : a.A.set(e, [h])); + a.fastupdate && ((d = a.reg.get(e)) ? d.push(h) : a.reg.set(e, [h])); } } } @@ -656,12 +656,12 @@ function Da(a) { if (c.length) { return Promise.all(c).then(function() { a.result.length && (d = [a.result].concat(d)); - a.result = Ea(d, e, f, g, h, a.G); + a.result = Ea(d, e, f, g, h, a.D); return h ? a.result : a; }); } this.result.length && (d = [this.result].concat(d)); - this.result = Ea(d, e, f, g, h, a.G); + this.result = Ea(d, e, f, g, h, a.D); return h ? this.result : this; }; function Ea(a, b, c, d, e, f) { @@ -746,12 +746,12 @@ function Ea(a, b, c, d, e, f) { if (a.length) { return Promise.all(a).then(function() { d = [b.result].concat(d); - b.result = Fa(d, e, f, g, b.G); + b.result = Fa(d, e, f, g, b.D); return g ? b.result : b; }); } d = [this.result].concat(d); - this.result = Fa(d, e, f, g, b.G); + this.result = Fa(d, e, f, g, b.D); return g ? this.result : this; } return this; @@ -842,12 +842,12 @@ function Fa(a, b, c, d, e) { if (c.length) { return Promise.all(c).then(function() { a.result.length && (d = [a.result].concat(d)); - a.result = Ga(d, e, f, g, !h, a.G); + a.result = Ga(d, e, f, g, !h, a.D); return h ? a.result : a; }); } this.result.length && (d = [this.result].concat(d)); - this.result = Ga(d, e, f, g, !h, a.G); + this.result = Ga(d, e, f, g, !h, a.D); return h ? this.result : this; }; function Ga(a, b, c, d, e, f) { @@ -957,7 +957,7 @@ function Ha(a, b) { } this.index = null; this.result = a || []; - this.G = 0; + this.D = 0; } S.prototype.limit = function(a) { if (this.result.length) { @@ -987,7 +987,7 @@ S.prototype.offset = function(a) { return this; }; S.prototype.boost = function(a) { - this.G += a; + this.D += a; return this; }; S.prototype.resolve = function(a, b, c) { @@ -1122,7 +1122,7 @@ O.prototype.search = function(a, b, c) { return async function() { for (let t, x; q < e; q++) { x = a[q]; - r ? (t = await V(p, x, r), t = Ka(t, d, f, p.U, b, g, 2 === e), f && !1 === t && d.length || (r = x)) : (t = await V(p, x), t = Ka(t, d, f, p.resolution, b, g, 1 === e)); + r ? (t = await V(p, x, r), t = Ka(t, d, f, p.S, b, g, 2 === e), f && !1 === t && d.length || (r = x)) : (t = await V(p, x), t = Ka(t, d, f, p.resolution, b, g, 1 === e)); if (t) { return t; } @@ -1146,7 +1146,7 @@ O.prototype.search = function(a, b, c) { } for (let p, t; q < e; q++) { t = a[q]; - r ? (p = V(this, t, r), p = Ka(p, d, f, this.U, b, g, 2 === e), f && !1 === p && d.length || (r = t)) : (p = V(this, t), p = Ka(p, d, f, this.resolution, b, g, 1 === e)); + r ? (p = V(this, t, r), p = Ka(p, d, f, this.S, b, g, 2 === e), f && !1 === p && d.length || (r = t)) : (p = V(this, t), p = Ka(p, d, f, this.resolution, b, g, 1 === e)); if (p) { return p; } @@ -1201,11 +1201,11 @@ function V(a, b, c, d, e, f, g, h) { if (a.db) { return c ? a.db.get(k ? c : b, k ? b : c, d, e, f, g, h) : a.db.get(b, "", d, e, f, g, h); } - a = c ? (a = a.F.get(k ? b : c)) && a.get(k ? c : b) : a.map.get(b); + a = c ? (a = a.ctx.get(k ? b : c)) && a.get(k ? c : b) : a.map.get(b); return a; } ;O.prototype.remove = function(a, b) { - const c = this.A.size && (this.fastupdate ? this.A.get(a) : this.A.has(a)); + const c = this.reg.size && (this.fastupdate ? this.reg.get(a) : this.reg.has(a)); if (c) { if (this.fastupdate) { for (let d = 0, e; d < c.length; d++) { @@ -1219,11 +1219,11 @@ function V(a, b, c, d, e, f, g, h) { } } } else { - La(this.map, a), this.depth && La(this.F, a); + La(this.map, a), this.depth && La(this.ctx, a); } - b || this.A.delete(a); + b || this.reg.delete(a); } - this.db && (this.K.push({del:a}), this.W && Ca(this)); + this.db && (this.I.push({del:a}), this.U && Ca(this)); this.cache && this.cache.remove(a); return this; }; @@ -1270,17 +1270,17 @@ function La(a, b) { this.score = a.score || null; (e = a.keystore || 0) && (this.keystore = e); this.map = e ? new L(e) : new Map(); - this.F = e ? new L(e) : new Map(); - this.A = b || (this.fastupdate ? e ? new L(e) : new Map() : e ? new M(e) : new Set()); - this.U = c.resolution || 1; + this.ctx = e ? new L(e) : new Map(); + this.reg = b || (this.fastupdate ? e ? new L(e) : new Map() : e ? new M(e) : new Set()); + this.S = c.resolution || 1; this.rtl = d.rtl || a.rtl || !1; this.cache = (e = a.cache || null) && new H(e); this.resolve = !1 !== a.resolve; if (e = a.db) { this.db = e.mount(this); } - this.W = !1 !== a.commit; - this.K = []; + this.U = !1 !== a.commit; + this.I = []; this.h = null; } u = O.prototype; @@ -1300,17 +1300,17 @@ function Ca(a) { } u.clear = function() { this.map.clear(); - this.F.clear(); - this.A.clear(); + this.ctx.clear(); + this.reg.clear(); this.cache && this.cache.clear(); - this.db && (this.h && clearTimeout(this.h), this.h = null, this.K = [{clear:!0}]); + this.db && (this.h && clearTimeout(this.h), this.h = null, this.I = [{clear:!0}]); return this; }; u.append = function(a, b) { return this.add(a, b, !0); }; u.contain = function(a) { - return this.db ? this.db.has(a) : this.A.has(a); + return this.db ? this.db.has(a) : this.reg.has(a); }; u.update = function(a, b) { if (this.async) { @@ -1338,7 +1338,7 @@ u.cleanup = function() { return console.info('Cleanup the index isn\'t required when not using "fastupdate".'), this; } Ma(this.map); - this.depth && Ma(this.F); + this.depth && Ma(this.ctx); return this; }; u.searchCache = ma; @@ -1353,16 +1353,16 @@ u.export = function(a, b, c, d, e, f) { h = "reg"; if (this.fastupdate) { k = z(); - for (let l of this.A.keys()) { + for (let l of this.reg.keys()) { k[l] = 1; } } else { - k = this.A; + k = this.reg; } break; case 1: h = "cfg"; - k = {doc:0, opt:this.B ? 1 : 0}; + k = {doc:0, opt:this.A ? 1 : 0}; break; case 2: h = "map"; @@ -1370,7 +1370,7 @@ u.export = function(a, b, c, d, e, f) { break; case 3: h = "ctx"; - k = this.F; + k = this.ctx; break; default: "undefined" === typeof c && f && f(); @@ -1383,20 +1383,70 @@ u.import = function(a, b) { if (b) { switch(B(b) && (b = JSON.parse(b)), a) { case "cfg": - this.B = !!b.opt; + this.A = !!b.opt; break; case "reg": this.fastupdate = !1; - this.A = b; + this.reg = b; break; case "map": this.map = b; break; case "ctx": - this.F = b; + this.ctx = b; } } }; +u.serialize = function(a = !0) { + if (!this.reg.size) { + return ""; + } + let b = "", c = ""; + for (var d of this.reg.keys()) { + c || (c = typeof d), b += (b ? "," : "") + ("string" === c ? '"' + d + '"' : d); + } + b = "index.reg=new Set([" + b + "]);"; + d = ""; + for (var e of this.map.entries()) { + var f = e[0], g = e[1], h = ""; + for (let m = 0, n; m < g.length; m++) { + n = g[m] || [""]; + var k = ""; + for (var l = 0; l < n.length; l++) { + k += (k ? "," : "") + ("string" === c ? '"' + n[l] + '"' : n[l]); + } + k = "[" + k + "]"; + h += (h ? "," : "") + k; + } + h = '["' + f + '",[' + h + "]]"; + d += (d ? "," : "") + h; + } + d = "index.map=new Map([" + d + "]);"; + e = ""; + for (const m of this.ctx.entries()) { + f = m[0]; + g = m[1]; + for (const n of g.entries()) { + g = n[0]; + h = n[1]; + k = ""; + for (let q = 0, r; q < h.length; q++) { + r = h[q] || [""]; + l = ""; + for (let p = 0; p < r.length; p++) { + l += (l ? "," : "") + ("string" === c ? '"' + r[p] + '"' : r[p]); + } + l = "[" + l + "]"; + k += (k ? "," : "") + l; + } + k = 'new Map([["' + g + '",[' + k + "]]])"; + k = '["' + f + '",' + k + "]"; + e += (e ? "," : "") + k; + } + } + e = "index.ctx=new Map([" + e + "]);"; + return a ? "function inject(index){" + b + d + e + "}" : b + d + e; +}; Ba(O.prototype); async function Na(a) { a = a.data; @@ -1467,24 +1517,24 @@ function Pa(a, b, c) { ;Y.prototype.add = function(a, b, c) { C(a) && (b = a, a = ca(b, this.key)); if (b && (a || 0 === a)) { - if (!c && this.A.has(a)) { + if (!c && this.reg.has(a)) { return this.update(a, b); } for (let h = 0, k; h < this.field.length; h++) { - k = this.I[h]; + k = this.G[h]; var d = this.index.get(this.field[h]); if ("function" === typeof k) { var e = k(b); e && d.add(a, e, !1, !0); } else { - if (e = k.L, !e || e(b)) { - k.constructor === String ? k = ["" + k] : B(k) && (k = [k]), Qa(b, k, this.N, 0, d, a, k[0], c); + if (e = k.J, !e || e(b)) { + k.constructor === String ? k = ["" + k] : B(k) && (k = [k]), Qa(b, k, this.L, 0, d, a, k[0], c); } } } if (this.tag) { - for (d = 0; d < this.H.length; d++) { - var f = this.H[d], g = this.R[d]; + for (d = 0; d < this.F.length; d++) { + var f = this.F[d], g = this.O[d]; e = this.tag.get(g); let h = z(); if ("function" === typeof f) { @@ -1492,7 +1542,7 @@ function Pa(a, b, c) { continue; } } else { - const k = f.L; + const k = f.J; if (k && !k(b)) { continue; } @@ -1506,14 +1556,14 @@ function Pa(a, b, c) { if (m.length === 2 ** 31 - 1) { g = new K(m); if (this.fastupdate) { - for (let n of this.A.values()) { + for (let n of this.reg.values()) { n.includes(m) && (n[n.indexOf(m)] = g); } } e.set(l, m = g); } m.push(a); - this.fastupdate && ((g = this.A.get(a)) ? g.push(m) : this.A.set(a, [m])); + this.fastupdate && ((g = this.reg.get(a)) ? g.push(m) : this.reg.set(a, [m])); } } } else { @@ -1523,11 +1573,11 @@ function Pa(a, b, c) { } if (this.store && (!c || !this.store.has(a))) { let h; - if (this.D) { + if (this.C) { h = z(); - for (let k = 0, l; k < this.D.length; k++) { - l = this.D[k]; - if ((c = l.L) && !c(b)) { + for (let k = 0, l; k < this.C.length; k++) { + l = this.C[k]; + if ((c = l.J) && !c(b)) { continue; } let m; @@ -1536,7 +1586,7 @@ function Pa(a, b, c) { if (!m) { continue; } - l = [l.X]; + l = [l.V]; } else if (B(l) || l.constructor === String) { h[l] = b[l]; continue; @@ -1673,7 +1723,7 @@ function Qa(a, b, c, d, e, f, g, h) { let A; for (let w = 0, v, I, J; w < k.length; w++) { I = k[w]; - if (this.db && this.tag && !this.I[w]) { + if (this.db && this.tag && !this.G[w]) { continue; } let D; @@ -1681,7 +1731,7 @@ function Qa(a, b, c, d, e, f, g, h) { if (d) { v = d[w]; } else { - if (t = D || c, x = this.index.get(I), n && (this.db && (t.tag = n, A = x.db.Z, t.field = k), A || (t.enrich = !1)), p) { + if (t = D || c, x = this.index.get(I), n && (this.db && (t.tag = n, A = x.db.X, t.field = k), A || (t.enrich = !1)), p) { p[w] = x.searchAsync(a, b, t); t && q && (t.enrich = q); continue; @@ -1822,13 +1872,13 @@ function Ta(a) { } const b = a.document || a.doc || a; var c, d; - this.I = []; + this.G = []; this.field = []; - this.N = []; - this.key = (c = b.key || b.id) && Va(c, this.N) || "id"; + this.L = []; + this.key = (c = b.key || b.id) && Va(c, this.L) || "id"; (d = a.keystore || 0) && (this.keystore = d); - this.A = (this.fastupdate = !!a.fastupdate) ? d ? new L(d) : new Map() : d ? new M(d) : new Set(); - this.D = (c = b.store || null) && !0 !== c && []; + this.reg = (this.fastupdate = !!a.fastupdate) ? d ? new L(d) : new Map() : d ? new M(d) : new Set(); + this.C = (c = b.store || null) && !0 !== c && []; this.store = c && (d ? new L(d) : new Map()); this.cache = (c = a.cache || null) && new H(c); a.cache = !1; @@ -1846,15 +1896,15 @@ function Ta(a) { c.set(f, h); h.worker || (this.worker = !1); } - this.worker || c.set(f, new O(g, this.A)); - g.custom ? this.I[e] = g.custom : (this.I[e] = Va(f, this.N), g.filter && ("string" === typeof this.I[e] && (this.I[e] = new String(this.I[e])), this.I[e].L = g.filter)); + this.worker || c.set(f, new O(g, this.reg)); + g.custom ? this.G[e] = g.custom : (this.G[e] = Va(f, this.L), g.filter && ("string" === typeof this.G[e] && (this.G[e] = new String(this.G[e])), this.G[e].J = g.filter)); this.field[e] = f; } - if (this.D) { + if (this.C) { d = b.store; B(d) && (d = [d]); for (let e = 0, f, g; e < d.length; e++) { - f = d[e], g = f.field || f, f.custom ? (this.D[e] = f.custom, f.custom.X = g) : (this.D[e] = Va(g, this.N), f.filter && ("string" === typeof this.D[e] && (this.D[e] = new String(this.D[e])), this.D[e].L = f.filter)); + f = d[e], g = f.field || f, f.custom ? (this.C[e] = f.custom, f.custom.V = g) : (this.C[e] = Va(g, this.L), f.filter && ("string" === typeof this.C[e] && (this.C[e] = new String(this.C[e])), this.C[e].J = f.filter)); } } this.index = c; @@ -1862,16 +1912,16 @@ function Ta(a) { if (c = b.tag) { if ("string" === typeof c && (c = [c]), c.length) { this.tag = new Map(); - this.H = []; - this.R = []; + this.F = []; + this.O = []; for (let e = 0, f, g; e < c.length; e++) { f = c[e]; g = f.field || f; if (!g) { throw Error("The tag field from the document descriptor is undefined."); } - f.custom ? this.H[e] = f.custom : (this.H[e] = Va(g, this.N), f.filter && ("string" === typeof this.H[e] && (this.H[e] = new String(this.H[e])), this.H[e].L = f.filter)); - this.R[e] = g; + f.custom ? this.F[e] = f.custom : (this.F[e] = Va(g, this.L), f.filter && ("string" === typeof this.F[e] && (this.F[e] = new String(this.F[e])), this.F[e].J = f.filter)); + this.O[e] = g; this.tag.set(g, new Map()); } } @@ -1882,10 +1932,10 @@ u = Y.prototype; u.mount = function(a) { let b = this.field; if (this.tag) { - for (let e = 0, f; e < this.R.length; e++) { - f = this.R[e]; + for (let e = 0, f; e < this.O.length; e++) { + f = this.O[e]; var c = this.index.get(f); - c || (this.index.set(f, c = new O({}, this.A)), b === this.field && (b = b.slice(0)), b.push(f)); + c || (this.index.set(f, c = new O({}, this.reg)), b === this.field && (b = b.slice(0)), b.push(f)); c.tag = this.tag.get(f); } } @@ -1898,7 +1948,7 @@ u.mount = function(a) { h.id = a.id; c[e] = h.mount(f); f.document = !0; - e ? f.Y = !0 : f.store = this.store; + e ? f.W = !0 : f.store = this.store; } this.db = this.async = !0; return Promise.all(c); @@ -1909,7 +1959,7 @@ u.commit = async function(a, b) { c.push(d.db.commit(d, a, b)); } await Promise.all(c); - this.A.clear(); + this.reg.clear(); }; function Va(a, b) { const c = a.split(":"); @@ -1931,7 +1981,7 @@ u.remove = function(a) { for (var b of this.index.values()) { b.remove(a, !0); } - if (this.A.has(a)) { + if (this.reg.has(a)) { if (this.tag && !this.fastupdate) { for (let c of this.tag.values()) { for (let d of c) { @@ -1942,7 +1992,7 @@ u.remove = function(a) { } } this.store && this.store.delete(a); - this.A.delete(a); + this.reg.delete(a); } this.cache && this.cache.remove(a); return this; @@ -1960,7 +2010,7 @@ u.clear = function() { return this; }; u.contain = function(a) { - return this.db ? this.index.get(this.field[0]).db.has(a) : this.A.has(a); + return this.db ? this.index.get(this.field[0]).db.has(a) : this.reg.has(a); }; u.cleanup = function() { for (const a of this.index.values()) { @@ -2018,9 +2068,9 @@ u.import = function(a, b) { break; case "reg": this.fastupdate = !1; - this.A = b; + this.reg = b; for (let d = 0, e; d < this.field.length; d++) { - e = this.index[this.field[d]], e.A = b, e.fastupdate = !1; + e = this.index[this.field[d]], e.reg = b, e.fastupdate = !1; } break; case "store": @@ -2044,7 +2094,7 @@ function Ya(a, b = {}) { a || console.info("Default storage space was used, because a name was not passed."); this.id = "flexsearch" + (a ? ":" + a.toLowerCase().replace(/[^a-z0-9_\-]/g, "") : ""); this.field = b.field ? b.field.toLowerCase().replace(/[^a-z0-9_\-]/g, "") : ""; - this.Z = !1; + this.X = !1; this.db = null; this.h = {}; } @@ -2184,22 +2234,22 @@ u.transaction = function(a, b, c) { }; u.commit = async function(a, b, c) { if (b) { - await this.clear(), a.K = []; + await this.clear(), a.I = []; } else { - let d = a.K; - a.K = []; + let d = a.I; + a.I = []; for (let e = 0, f; e < d.length; e++) { if (f = d[e], f.clear) { await this.clear(); b = !0; break; } else { - d[e] = f.$; + d[e] = f.Y; } } - b || (c || (d = d.concat(ba(a.A))), d.length && await this.remove(d)); + b || (c || (d = d.concat(ba(a.reg))), d.length && await this.remove(d)); } - a.A.size && (await this.transaction("map", "readwrite", function(d) { + a.reg.size && (await this.transaction("map", "readwrite", function(d) { for (const e of a.map) { const f = e[0], g = e[1]; g.length && (b ? d.put(g, f) : d.get(f).onsuccess = function() { @@ -2226,7 +2276,7 @@ u.commit = async function(a, b, c) { }); } }), await this.transaction("ctx", "readwrite", function(d) { - for (const e of a.F) { + for (const e of a.ctx) { const f = e[0], g = e[1]; for (const h of g) { const k = h[0], l = h[1]; @@ -2259,8 +2309,8 @@ u.commit = async function(a, b, c) { const f = e[0], g = e[1]; d.put("object" === typeof g ? JSON.stringify(g) : 1, f); } - }) : a.Y || await this.transaction("reg", "readwrite", function(d) { - for (const e of a.A.keys()) { + }) : a.W || await this.transaction("reg", "readwrite", function(d) { + for (const e of a.reg.keys()) { d.put(1, e); } }), a.tag && await this.transaction("tag", "readwrite", function(d) { @@ -2272,7 +2322,7 @@ u.commit = async function(a, b, c) { d.put(h, f); }); } - }), a.map.clear(), a.F.clear(), a.tag && a.tag.clear(), a.store && a.store.clear(), a.document || a.A.clear()); + }), a.map.clear(), a.ctx.clear(), a.tag && a.tag.clear(), a.store && a.store.clear(), a.document || a.reg.clear()); }; function $a(a, b, c) { const d = a.value; diff --git a/dist/flexsearch.bundle.min.js b/dist/flexsearch.bundle.min.js index b894c2b..40bfcb2 100644 --- a/dist/flexsearch.bundle.min.js +++ b/dist/flexsearch.bundle.min.js @@ -15,74 +15,76 @@ function B(a){return"string"===typeof a}function C(a){return"object"===typeof a} ["\u0477","\u0475"],["\u04c2","\u0436"],["\u04d1","\u0430"],["\u04d3","\u0430"],["\u04d7","\u0435"],["\u04db","\u04d9"],["\u04dd","\u0436"],["\u04df","\u0437"],["\u04e3","\u0438"],["\u04e5","\u0438"],["\u04e7","\u043e"],["\u04eb","\u04e9"],["\u04ed","\u044d"],["\u04ef","\u0443"],["\u04f1","\u0443"],["\u04f3","\u0443"],["\u04f5","\u0447"]];const fa=/[^\p{L}\p{N}]+/u,ha=/(\d{3})/g,ia=/(\D)(\d{3})/g,ja=/(\d{3})(\D)/g,ka="".normalize&&/[\u0300-\u036f]/g;function F(a){if(!this)return new F(...arguments);for(let b=0;bthis.stemmer.get(l)),k=1);this.matcher&& -1this.matcher.get(l)),k=1);g&&k&&(g.lengththis.V&&(this.M.clear(),this.B=this.B/1.1|0));g&&c.push(g)}this.finalize&&(c=this.finalize(c)||c);this.cache&&a.length<=this.h&&(this.J.set(a,c),this.J.size>this.V&&(this.J.clear(),this.h=this.h/1.1|0));return c};function la(a){a.O=null;a.J.clear();a.M.clear()};function ma(a,b,c){a=("object"===typeof a?""+a.query:a).toLowerCase();let d=this.cache.get(a);if(!d){d=this.search(a,b,c);if(d.then){const e=this;d.then(function(f){e.cache.set(a,f);return f})}this.cache.set(a,d)}return d}function G(a){this.limit=a&&!0!==a?a:1E3;this.cache=new Map;this.h=""}G.prototype.set=function(a,b){this.cache.set(this.h=a,b);this.cache.size>this.limit&&this.cache.delete(this.cache.keys().next().value)}; +y(a.maxlength,0,this.maxlength);if(this.cache=c=y(a.cache,!0,this.cache))this.M=null,this.T="number"===typeof c?c:2E5,this.H=new Map,this.K=new Map,this.A=this.h=128;this.B="";this.P=null;this.N="";this.R=null;if(this.matcher)for(const d of this.matcher.keys())this.B+=(this.B?"|":"")+d;if(this.stemmer)for(const d of this.stemmer.keys())this.N+=(this.N?"|":"")+d;return this}; +F.prototype.encode=function(a){if(this.cache&&a.length<=this.h)if(this.M){if(this.H.has(a))return this.H.get(a)}else this.M=setTimeout(la,0,this);this.normalize&&(a="function"===typeof this.normalize?this.normalize(a):ka?a.normalize("NFKD").replace(ka,"").toLowerCase():a.toLowerCase());this.prepare&&(a=this.prepare(a));this.numeric&&3this.stemmer.get(l)),k=1);this.matcher&& +1this.matcher.get(l)),k=1);g&&k&&(g.lengththis.T&&(this.K.clear(),this.A=this.A/1.1|0));g&&c.push(g)}this.finalize&&(c=this.finalize(c)||c);this.cache&&a.length<=this.h&&(this.H.set(a,c),this.H.size>this.T&&(this.H.clear(),this.h=this.h/1.1|0));return c};function la(a){a.M=null;a.H.clear();a.K.clear()};function ma(a,b,c){a=("object"===typeof a?""+a.query:a).toLowerCase();let d=this.cache.get(a);if(!d){d=this.search(a,b,c);if(d.then){const e=this;d.then(function(f){e.cache.set(a,f);return f})}this.cache.set(a,d)}return d}function G(a){this.limit=a&&!0!==a?a:1E3;this.cache=new Map;this.h=""}G.prototype.set=function(a,b){this.cache.set(this.h=a,b);this.cache.size>this.limit&&this.cache.delete(this.cache.keys().next().value)}; G.prototype.get=function(a){const b=this.cache.get(a);b&&this.h!==a&&(this.cache.delete(a),this.cache.set(this.h=a,b));return b};G.prototype.remove=function(a){for(const b of this.cache){const c=b[0];b[1].includes(a)&&this.cache.delete(c)}};G.prototype.clear=function(){this.cache.clear();this.h=""};const na={normalize:function(a){return a.toLowerCase()},dedupe:!1};const oa=new Map([["b","p"],["v","f"],["w","f"],["z","s"],["x","s"],["d","t"],["n","m"],["c","k"],["g","k"],["j","k"],["q","k"],["i","e"],["y","e"],["u","o"]]);const pa=new Map([["ai","ei"],["ae","a"],["oe","o"],["ue","u"],["sh","s"],["ch","c"],["th","t"],["ph","f"],["pf","f"]]),qa=[/([^aeo])h([aeo$])/g,"$1$2",/([aeo])h([^aeo]|$)/g,"$1$2"];const ra={a:"",e:"",i:"",o:"",u:"",y:"",b:1,f:1,p:1,v:1,c:2,g:2,j:2,k:2,q:2,s:2,x:2,z:2,"\u00df":2,d:3,t:3,l:4,m:5,n:5,r:6};const sa=/[\x00-\x7F]+/g;const ta=/[\x00-\x7F]+/g;const ua=/[\x00-\x7F]+/g;var va={LatinExact:{normalize:!1,dedupe:!1},LatinDefault:na,LatinSimple:{normalize:!0,dedupe:!0},LatinBalance:{normalize:!0,dedupe:!0,mapper:oa},LatinAdvanced:{normalize:!0,dedupe:!0,mapper:oa,replacer:qa,matcher:pa},LatinExtra:{normalize:!0,dedupe:!0,mapper:oa,replacer:qa.concat([/(?!^)[aeoy]/g,""]),matcher:pa},LatinSoundex:{normalize:!0,dedupe:!1,include:{letter:!0},finalize:function(a){for(let c=0;c=g.length)b-=g.length;else{b=g[d?"splice":"slice"](b,c);const h=b.length;if(h&&(e=e.length?e.concat(b):b,c-=h,d&&(a.length-=h),!c))break;b=0}return e} function J(a){if(!this)return new J(a);this.index=a?[a]:[];this.length=a?a.length:0;const b=this;return new Proxy([],{get(c,d){if("length"===d)return b.length;if("push"===d)return function(e){b.index[b.index.length-1].push(e);b.length++};if("pop"===d)return function(){if(b.length)return b.length--,b.index[b.index.length-1].pop()};if("indexOf"===d)return function(e){let f=0;for(let g=0,h,k;gf;h--){g=p.substring(f,h);var k=this.score?this.score(b,p,r,g,f):P(q,d,r,e,f);Q(this,m,g,k,a,c)}break}case "reverse":if(1< -e){for(h=e-1;0g?0:1),d,r,h-1,k-1),x=this.bidirectional&&p>f;Q(this,l,x?f:p,t,a,c,x?p:f)}}}}this.fastupdate||this.A.add(a)}else b=""}this.db&&(b|| -this.K.push({del:a}),this.W&&Ca(this));return this};function Q(a,b,c,d,e,f,g){let h=g?a.F:a.map,k;if(!b[c]||!g||!(k=b[c])[g])if(g?(b=k||(b[c]=z()),b[g]=1,(k=h.get(g))?h=k:h.set(g,h=new Map)):b[c]=1,(k=h.get(c))?h=k:h.set(c,h=k=[]),h=h[d]||(h[d]=[]),!f||!h.includes(e)){if(h.length===2**31-1){b=new J(h);if(a.fastupdate)for(let l of a.A.values())l.includes(h)&&(l[l.indexOf(h)]=b);k[d]=h=b}h.push(e);a.fastupdate&&((d=a.A.get(e))?d.push(h):a.A.set(e,[h]))}} +function K(a=8){if(!this)return new K(a);this.index=z();this.B=[];this.size=0;32f;h--){g=p.substring(f,h);var k=this.score?this.score(b,p,r,g,f):P(q,d,r,e,f);Q(this,m,g,k,a,c)}break}case "reverse":if(1< +e){for(h=e-1;0g?0:1),d,r,h-1,k-1),x=this.bidirectional&&p>f;Q(this,l,x?f:p,t,a,c,x?p:f)}}}}this.fastupdate||this.reg.add(a)}else b=""}this.db&& +(b||this.I.push({del:a}),this.U&&Ca(this));return this};function Q(a,b,c,d,e,f,g){let h=g?a.ctx:a.map,k;if(!b[c]||!g||!(k=b[c])[g])if(g?(b=k||(b[c]=z()),b[g]=1,(k=h.get(g))?h=k:h.set(g,h=new Map)):b[c]=1,(k=h.get(c))?h=k:h.set(c,h=k=[]),h=h[d]||(h[d]=[]),!f||!h.includes(e)){if(h.length===2**31-1){b=new J(h);if(a.fastupdate)for(let l of a.reg.values())l.includes(h)&&(l[l.indexOf(h)]=b);k[d]=h=b}h.push(e);a.fastupdate&&((d=a.reg.get(e))?d.push(h):a.reg.set(e,[h]))}} function P(a,b,c,d,e){return c&&1b?b?a.slice(c,c+b):a.slice(c):a,d?Da(a):a;let e=[];for(let f=0,g,h;f=h){c-=h;continue}cb&&(g=g.slice(0,b),h=g.length),e.push(g);else{if(h>=b)return h>b&&(g=g.slice(0,b)),d?Da(g):g;e=[g]}b-=h;if(!b)break}if(!e.length)return e;e=1a.length)return e?R(a[0],b,c,d):a[0];d=[];let g=0,h=z(),k=da(a);for(let l=0,m;la.length)return[];let f=[],g=0,h=z(),k=da(a);if(!k)return f;for(let l=0,m;la.length)return e?R(a[0],b,c,d):a[0];b=[];c=z();for(let g=0,h;gc||d)g=g.slice(d,c+d)}return g} +Ha.call(a,d,e);return e?a.result:a});this.result=Ha.call(this,d,e);return e?this.result:this};function Ha(a,b){if(!a.length)return this.result;const c=[];a=new Set(a.flat().flat());for(let d=0,e;dc||d)g=g.slice(d,c+d)}return g} function Ja(a,b){const c=z(),d=z(),e=[];for(let f=0;f=e)))break;if(h.length){if(g)return R(h,e,0);b.push(h);return}}return!c&&h}function V(a,b,c,d,e,f,g,h){let k;c&&(k=a.bidirectional&&b>c);if(a.db)return c?a.db.get(k?c:b,k?b:c,d,e,f,g,h):a.db.get(b,"",d,e,f,g,h);a=c?(a=a.F.get(k?b:c))&&a.get(k?c:b):a.map.get(b);return a};O.prototype.remove=function(a,b){const c=this.A.size&&(this.fastupdate?this.A.get(a):this.A.has(a));if(c){if(this.fastupdate)for(let d=0,e;de.length)e.pop();else{const f=e.indexOf(a);f===c.length-1?e.pop():e.splice(f,1)}}else La(this.map,a),this.depth&&La(this.F,a);b||this.A.delete(a)}this.db&&(this.K.push({del:a}),this.W&&Ca(this));this.cache&&this.cache.remove(a);return this}; -function La(a,b){let c=0;if(a.constructor===Array)for(let d=0,e,f;dc.add(a,b)):this.add(a,b)}return this.remove(a).add(a,b)};function Ma(a){let b=0;if(a.constructor===Array)for(let c=0,d;c{f=l}));let h,k;switch(e||(e=0)){case 0:h="reg";if(this.fastupdate){k=z();for(let l of this.A.keys())k[l]=1}else k=this.A;break;case 1:h="cfg";k={doc:0,opt:this.B?1:0};break;case 2:h="map";k=this.map;break;case 3:h="ctx";k=this.F;break;default:"undefined"===typeof c&&f&&f();return}za(a,b||this,c,h,d,e,k,f);return g}; -u.import=function(a,b){if(b)switch(B(b)&&(b=JSON.parse(b)),a){case "cfg":this.B=!!b.opt;break;case "reg":this.fastupdate=!1;this.A=b;break;case "map":this.map=b;break;case "ctx":this.F=b}};Ba(O.prototype);async function Na(a){a=a.data;var b=self._index;const c=a.args;var d=a.task;switch(d){case "init":d=a.options||{};(b=d.config)&&(d=await import(b));(b=a.factory)?(Function("return "+b)()(self),self._index=new self.FlexSearch.Index(d),delete self.FlexSearch):self._index=new O(d);postMessage({id:a.id});break;default:a=a.id,b=b[d].apply(b,c),postMessage("search"===d?{id:a,msg:b}:{id:a})}};let Oa=0; +function Ka(a,b,c,d,e,f,g){let h=[];if(a){d=Math.min(a.length,d);for(let k=0,l=0,m;k=e)))break;if(h.length){if(g)return R(h,e,0);b.push(h);return}}return!c&&h}function V(a,b,c,d,e,f,g,h){let k;c&&(k=a.bidirectional&&b>c);if(a.db)return c?a.db.get(k?c:b,k?b:c,d,e,f,g,h):a.db.get(b,"",d,e,f,g,h);a=c?(a=a.ctx.get(k?b:c))&&a.get(k?c:b):a.map.get(b);return a};O.prototype.remove=function(a,b){const c=this.reg.size&&(this.fastupdate?this.reg.get(a):this.reg.has(a));if(c){if(this.fastupdate)for(let d=0,e;de.length)e.pop();else{const f=e.indexOf(a);f===c.length-1?e.pop():e.splice(f,1)}}else La(this.map,a),this.depth&&La(this.ctx,a);b||this.reg.delete(a)}this.db&&(this.I.push({del:a}),this.U&&Ca(this));this.cache&&this.cache.remove(a);return this}; +function La(a,b){let c=0;if(a.constructor===Array)for(let d=0,e,f;dc.add(a,b)):this.add(a,b)}return this.remove(a).add(a,b)};function Ma(a){let b=0;if(a.constructor===Array)for(let c=0,d;c{f=l}));let h,k;switch(e||(e=0)){case 0:h="reg";if(this.fastupdate){k=z();for(let l of this.reg.keys())k[l]=1}else k=this.reg;break;case 1:h="cfg";k={doc:0,opt:this.A?1:0};break;case 2:h="map";k=this.map;break;case 3:h="ctx";k=this.ctx;break;default:"undefined"===typeof c&&f&&f();return}za(a,b||this,c,h,d,e,k,f);return g}; +u.import=function(a,b){if(b)switch(B(b)&&(b=JSON.parse(b)),a){case "cfg":this.A=!!b.opt;break;case "reg":this.fastupdate=!1;this.reg=b;break;case "map":this.map=b;break;case "ctx":this.ctx=b}}; +u.serialize=function(a=!0){if(!this.reg.size)return"";let b="",c="";for(var d of this.reg.keys())c||(c=typeof d),b+=(b?",":"")+("string"===c?'"'+d+'"':d);b="index.reg=new Set(["+b+"]);";d="";for(var e of this.map.entries()){var f=e[0],g=e[1],h="";for(let m=0,n;mc||d)a=a.slice(d,d+c);e&&(a=Ta.call(this,a));return a}} -function Ta(a){const b=Array(a.length);for(let c=0,d;c{f=k}));e||(e=0);d||(d=0);if(d{e.objectStoreNames.contains(f)||e.createObjectStore(f)})};d.onblocked=function(e){console.error("blocked",e);c()};d.onerror=function(e){console.error(this.error,e);c()};d.onsuccess=function(){a.db=this.result;a.db.onversionchange=function(){a.close()};b(a)}})} u.close=function(){this.db.close();this.db=null};u.clear=function(){const a=this.db.transaction(Xa,"readwrite");for(let b=0;b=m.length){d-=m.length;continue}const n=c?d+Math.min(m.length-d,c):m.length;for(let q=d;q=f.length)return[];if(!b&&!c)return f;f=f.slice(c,c+b);return d?e.enrich(f):f})}; u.enrich=function(a){"object"!==typeof a&&(a=[a]);const b=this.db.transaction("reg","readonly").objectStore("reg"),c=[];for(let d=0;d{e.onerror=h=>{this.h[a+":"+b]=null;e.abort();e=d=null;g(h)};e.oncomplete=h=>{e=d=this.h[a+":"+b]=null;f(h||!0)};return c.call(this,d)})}; -u.commit=async function(a,b,c){if(b)await this.clear(),a.K=[];else{let d=a.K;a.K=[];for(let e=0,f;em&&!f&&"string"===typeof n&&!isNaN(n)&&(m=k.indexOf(parseInt(n,10)))&&(f=1),0<=m)if(e=1,1m&&!f&&"string"===typeof n&&!isNaN(n)&&(m=k.indexOf(parseInt(n,10)))&&(f=1),0<=m)if(e=1,1{a.onsuccess=function(){b(this.result)};a.oncomplete=function(){b(this.result)};a.onerror=c;a=null})};const ab={Index:O,Charset:va,Encoder:F,Document:Y,Worker:W,Resolver:S,IndexedDB:Ya,Language:{}},cb=self;let db;(db=cb.define)&&db.amd?db([],function(){return ab}):"object"===typeof cb.exports?cb.exports=ab:cb.FlexSearch=ab;}(this)); diff --git a/dist/flexsearch.bundle.module.debug.js b/dist/flexsearch.bundle.module.debug.js index 7f15126..2bd290d 100644 --- a/dist/flexsearch.bundle.module.debug.js +++ b/dist/flexsearch.bundle.module.debug.js @@ -128,32 +128,32 @@ G.prototype.assign = function(a) { this.minlength = y(a.minlength, 1, this.minlength); this.maxlength = y(a.maxlength, 0, this.maxlength); if (this.cache = c = y(a.cache, !0, this.cache)) { - this.O = null, this.V = "number" === typeof c ? c : 2e5, this.J = new Map(), this.M = new Map(), this.B = this.h = 128; + this.M = null, this.T = "number" === typeof c ? c : 2e5, this.H = new Map(), this.K = new Map(), this.A = this.h = 128; } - this.C = ""; - this.S = null; - this.P = ""; - this.T = null; + this.B = ""; + this.P = null; + this.N = ""; + this.R = null; if (this.matcher) { for (const d of this.matcher.keys()) { - this.C += (this.C ? "|" : "") + d; + this.B += (this.B ? "|" : "") + d; } } if (this.stemmer) { for (const d of this.stemmer.keys()) { - this.P += (this.P ? "|" : "") + d; + this.N += (this.N ? "|" : "") + d; } } return this; }; G.prototype.encode = function(a) { if (this.cache && a.length <= this.h) { - if (this.O) { - if (this.J.has(a)) { - return this.J.get(a); + if (this.M) { + if (this.H.has(a)) { + return this.H.get(a); } } else { - this.O = setTimeout(la, 0, this); + this.M = setTimeout(la, 0, this); } } this.normalize && (a = "function" === typeof this.normalize ? this.normalize(a) : ka ? a.normalize("NFKD").replace(ka, "").toLowerCase() : a.toLowerCase()); @@ -175,20 +175,20 @@ G.prototype.encode = function(a) { if (this.filter && this.filter.has(g)) { continue; } - if (this.cache && g.length <= this.B) { - if (this.O) { - var e = this.M.get(g); + if (this.cache && g.length <= this.A) { + if (this.M) { + var e = this.K.get(g); if (e || "" === e) { e && c.push(e); continue; } } else { - this.O = setTimeout(la, 0, this); + this.M = setTimeout(la, 0, this); } } let k; - this.stemmer && 2 < g.length && (this.T || (this.T = new RegExp("(?!^)(" + this.P + ")$")), g = g.replace(this.T, l => this.stemmer.get(l)), k = 1); - this.matcher && 1 < g.length && (this.S || (this.S = new RegExp("(" + this.C + ")", "g")), g = g.replace(this.S, l => this.matcher.get(l)), k = 1); + this.stemmer && 2 < g.length && (this.R || (this.R = new RegExp("(?!^)(" + this.N + ")$")), g = g.replace(this.R, l => this.stemmer.get(l)), k = 1); + this.matcher && 1 < g.length && (this.P || (this.P = new RegExp("(" + this.B + ")", "g")), g = g.replace(this.P, l => this.matcher.get(l)), k = 1); g && k && (g.length < this.minlength || this.filter && this.filter.has(g)) && (g = ""); if (g && (this.mapper || this.dedupe && 1 < g.length)) { e = ""; @@ -202,17 +202,17 @@ G.prototype.encode = function(a) { g = g.replace(this.replacer[e], this.replacer[e + 1]); } } - this.cache && h.length <= this.B && (this.M.set(h, g), this.M.size > this.V && (this.M.clear(), this.B = this.B / 1.1 | 0)); + this.cache && h.length <= this.A && (this.K.set(h, g), this.K.size > this.T && (this.K.clear(), this.A = this.A / 1.1 | 0)); g && c.push(g); } this.finalize && (c = this.finalize(c) || c); - this.cache && a.length <= this.h && (this.J.set(a, c), this.J.size > this.V && (this.J.clear(), this.h = this.h / 1.1 | 0)); + this.cache && a.length <= this.h && (this.H.set(a, c), this.H.size > this.T && (this.H.clear(), this.h = this.h / 1.1 | 0)); return c; }; function la(a) { - a.O = null; - a.J.clear(); - a.M.clear(); + a.M = null; + a.H.clear(); + a.K.clear(); } ;function ma(a, b, c) { a = ("object" === typeof a ? "" + a.query : a).toLowerCase(); @@ -375,9 +375,9 @@ function L(a = 8) { return new L(a); } this.index = z(); - this.C = []; + this.B = []; this.size = 0; - 32 < a ? (this.h = xa, this.B = BigInt(a)) : (this.h = ya, this.B = a); + 32 < a ? (this.h = xa, this.A = BigInt(a)) : (this.h = ya, this.A = a); } L.prototype.get = function(a) { const b = this.index[this.h(a)]; @@ -386,7 +386,7 @@ L.prototype.get = function(a) { L.prototype.set = function(a, b) { var c = this.h(a); let d = this.index[c]; - d ? (c = d.size, d.set(a, b), (c -= d.size) && this.size++) : (this.index[c] = d = new Map([[a, b]]), this.C.push(d)); + d ? (c = d.size, d.set(a, b), (c -= d.size) && this.size++) : (this.index[c] = d = new Map([[a, b]]), this.B.push(d)); }; function M(a = 8) { if (!this) { @@ -394,20 +394,20 @@ function M(a = 8) { } this.index = z(); this.h = []; - 32 < a ? (this.C = xa, this.B = BigInt(a)) : (this.C = ya, this.B = a); + 32 < a ? (this.B = xa, this.A = BigInt(a)) : (this.B = ya, this.A = a); } M.prototype.add = function(a) { - var b = this.C(a); + var b = this.B(a); let c = this.index[b]; c ? (b = c.size, c.add(a), (b -= c.size) && this.size++) : (this.index[b] = c = new Set([a]), this.h.push(c)); }; u = L.prototype; u.has = M.prototype.has = function(a) { - const b = this.index[this.C(a)]; + const b = this.index[this.B(a)]; return b && b.has(a); }; u.delete = M.prototype.delete = function(a) { - const b = this.index[this.C(a)]; + const b = this.index[this.B(a)]; b && b.delete(a) && this.size--; }; u.clear = M.prototype.clear = function() { @@ -437,18 +437,18 @@ u.entries = M.prototype.entries = function*() { } }; function ya(a) { - let b = 2 ** this.B - 1; + let b = 2 ** this.A - 1; if ("number" == typeof a) { return a & b; } - let c = 0, d = this.B + 1; + let c = 0, d = this.A + 1; for (let e = 0; e < a.length; e++) { c = (c * d ^ a.charCodeAt(e)) & b; } - return 32 === this.B ? c + 2 ** 31 : c; + return 32 === this.A ? c + 2 ** 31 : c; } function xa(a) { - let b = BigInt(2) ** this.B - BigInt(1); + let b = BigInt(2) ** this.A - BigInt(1); var c = typeof a; if ("bigint" === c) { return a & b; @@ -457,7 +457,7 @@ function xa(a) { return BigInt(a) & b; } c = BigInt(0); - let d = this.B + BigInt(1); + let d = this.A + BigInt(1); for (let e = 0; e < a.length; e++) { c = (c * d ^ BigInt(a.charCodeAt(e))) & b; } @@ -492,7 +492,7 @@ function N(a) { ;z(); O.prototype.add = function(a, b, c, d) { if (b && (a || 0 === a)) { - if (!d && !c && this.A.has(a)) { + if (!d && !c && this.reg.has(a)) { return this.update(a, b); } b = this.encoder.encode(b); @@ -531,7 +531,7 @@ O.prototype.add = function(a, b, c, d) { } default: if (Q(this, m, p, f, a, c), n && 1 < d && r < d - 1) { - for (e = z(), g = this.U, f = p, h = Math.min(n + 1, d - r), e[f] = 1, k = 1; k < h; k++) { + for (e = z(), g = this.S, f = p, h = Math.min(n + 1, d - r), e[f] = 1, k = 1; k < h; k++) { if ((p = b[this.rtl ? d - 1 - r - k : r + k]) && !e[p]) { e[p] = 1; const t = this.score ? this.score(b, f, r, p, k) : P(g + (d / 2 > g ? 0 : 1), d, r, h - 1, k - 1), x = this.bidirectional && p > f; @@ -542,29 +542,29 @@ O.prototype.add = function(a, b, c, d) { } } } - this.fastupdate || this.A.add(a); + this.fastupdate || this.reg.add(a); } else { b = ""; } } - this.db && (b || this.K.push({del:a}), this.W && Ca(this)); + this.db && (b || this.I.push({del:a}), this.U && Ca(this)); return this; }; function Q(a, b, c, d, e, f, g) { - let h = g ? a.F : a.map, k; + let h = g ? a.ctx : a.map, k; if (!b[c] || !g || !(k = b[c])[g]) { if (g ? (b = k || (b[c] = z()), b[g] = 1, (k = h.get(g)) ? h = k : h.set(g, h = new Map())) : b[c] = 1, (k = h.get(c)) ? h = k : h.set(c, h = k = []), h = h[d] || (h[d] = []), !f || !h.includes(e)) { if (h.length === 2 ** 31 - 1) { b = new K(h); if (a.fastupdate) { - for (let l of a.A.values()) { + for (let l of a.reg.values()) { l.includes(h) && (l[l.indexOf(h)] = b); } } k[d] = h = b; } h.push(e); - a.fastupdate && ((d = a.A.get(e)) ? d.push(h) : a.A.set(e, [h])); + a.fastupdate && ((d = a.reg.get(e)) ? d.push(h) : a.reg.set(e, [h])); } } } @@ -655,12 +655,12 @@ function Da(a) { if (c.length) { return Promise.all(c).then(function() { a.result.length && (d = [a.result].concat(d)); - a.result = Ea(d, e, f, g, h, a.G); + a.result = Ea(d, e, f, g, h, a.D); return h ? a.result : a; }); } this.result.length && (d = [this.result].concat(d)); - this.result = Ea(d, e, f, g, h, a.G); + this.result = Ea(d, e, f, g, h, a.D); return h ? this.result : this; }; function Ea(a, b, c, d, e, f) { @@ -745,12 +745,12 @@ function Ea(a, b, c, d, e, f) { if (a.length) { return Promise.all(a).then(function() { d = [b.result].concat(d); - b.result = Fa(d, e, f, g, b.G); + b.result = Fa(d, e, f, g, b.D); return g ? b.result : b; }); } d = [this.result].concat(d); - this.result = Fa(d, e, f, g, b.G); + this.result = Fa(d, e, f, g, b.D); return g ? this.result : this; } return this; @@ -841,12 +841,12 @@ function Fa(a, b, c, d, e) { if (c.length) { return Promise.all(c).then(function() { a.result.length && (d = [a.result].concat(d)); - a.result = Ga(d, e, f, g, !h, a.G); + a.result = Ga(d, e, f, g, !h, a.D); return h ? a.result : a; }); } this.result.length && (d = [this.result].concat(d)); - this.result = Ga(d, e, f, g, !h, a.G); + this.result = Ga(d, e, f, g, !h, a.D); return h ? this.result : this; }; function Ga(a, b, c, d, e, f) { @@ -956,7 +956,7 @@ function Ha(a, b) { } this.index = null; this.result = a || []; - this.G = 0; + this.D = 0; } S.prototype.limit = function(a) { if (this.result.length) { @@ -986,7 +986,7 @@ S.prototype.offset = function(a) { return this; }; S.prototype.boost = function(a) { - this.G += a; + this.D += a; return this; }; S.prototype.resolve = function(a, b, c) { @@ -1121,7 +1121,7 @@ O.prototype.search = function(a, b, c) { return async function() { for (let t, x; q < e; q++) { x = a[q]; - r ? (t = await V(p, x, r), t = Ka(t, d, f, p.U, b, g, 2 === e), f && !1 === t && d.length || (r = x)) : (t = await V(p, x), t = Ka(t, d, f, p.resolution, b, g, 1 === e)); + r ? (t = await V(p, x, r), t = Ka(t, d, f, p.S, b, g, 2 === e), f && !1 === t && d.length || (r = x)) : (t = await V(p, x), t = Ka(t, d, f, p.resolution, b, g, 1 === e)); if (t) { return t; } @@ -1145,7 +1145,7 @@ O.prototype.search = function(a, b, c) { } for (let p, t; q < e; q++) { t = a[q]; - r ? (p = V(this, t, r), p = Ka(p, d, f, this.U, b, g, 2 === e), f && !1 === p && d.length || (r = t)) : (p = V(this, t), p = Ka(p, d, f, this.resolution, b, g, 1 === e)); + r ? (p = V(this, t, r), p = Ka(p, d, f, this.S, b, g, 2 === e), f && !1 === p && d.length || (r = t)) : (p = V(this, t), p = Ka(p, d, f, this.resolution, b, g, 1 === e)); if (p) { return p; } @@ -1200,11 +1200,11 @@ function V(a, b, c, d, e, f, g, h) { if (a.db) { return c ? a.db.get(k ? c : b, k ? b : c, d, e, f, g, h) : a.db.get(b, "", d, e, f, g, h); } - a = c ? (a = a.F.get(k ? b : c)) && a.get(k ? c : b) : a.map.get(b); + a = c ? (a = a.ctx.get(k ? b : c)) && a.get(k ? c : b) : a.map.get(b); return a; } ;O.prototype.remove = function(a, b) { - const c = this.A.size && (this.fastupdate ? this.A.get(a) : this.A.has(a)); + const c = this.reg.size && (this.fastupdate ? this.reg.get(a) : this.reg.has(a)); if (c) { if (this.fastupdate) { for (let d = 0, e; d < c.length; d++) { @@ -1218,11 +1218,11 @@ function V(a, b, c, d, e, f, g, h) { } } } else { - La(this.map, a), this.depth && La(this.F, a); + La(this.map, a), this.depth && La(this.ctx, a); } - b || this.A.delete(a); + b || this.reg.delete(a); } - this.db && (this.K.push({del:a}), this.W && Ca(this)); + this.db && (this.I.push({del:a}), this.U && Ca(this)); this.cache && this.cache.remove(a); return this; }; @@ -1269,17 +1269,17 @@ function La(a, b) { this.score = a.score || null; (e = a.keystore || 0) && (this.keystore = e); this.map = e ? new L(e) : new Map(); - this.F = e ? new L(e) : new Map(); - this.A = b || (this.fastupdate ? e ? new L(e) : new Map() : e ? new M(e) : new Set()); - this.U = c.resolution || 1; + this.ctx = e ? new L(e) : new Map(); + this.reg = b || (this.fastupdate ? e ? new L(e) : new Map() : e ? new M(e) : new Set()); + this.S = c.resolution || 1; this.rtl = d.rtl || a.rtl || !1; this.cache = (e = a.cache || null) && new H(e); this.resolve = !1 !== a.resolve; if (e = a.db) { this.db = e.mount(this); } - this.W = !1 !== a.commit; - this.K = []; + this.U = !1 !== a.commit; + this.I = []; this.h = null; } u = O.prototype; @@ -1299,17 +1299,17 @@ function Ca(a) { } u.clear = function() { this.map.clear(); - this.F.clear(); - this.A.clear(); + this.ctx.clear(); + this.reg.clear(); this.cache && this.cache.clear(); - this.db && (this.h && clearTimeout(this.h), this.h = null, this.K = [{clear:!0}]); + this.db && (this.h && clearTimeout(this.h), this.h = null, this.I = [{clear:!0}]); return this; }; u.append = function(a, b) { return this.add(a, b, !0); }; u.contain = function(a) { - return this.db ? this.db.has(a) : this.A.has(a); + return this.db ? this.db.has(a) : this.reg.has(a); }; u.update = function(a, b) { if (this.async) { @@ -1337,7 +1337,7 @@ u.cleanup = function() { return console.info('Cleanup the index isn\'t required when not using "fastupdate".'), this; } Ma(this.map); - this.depth && Ma(this.F); + this.depth && Ma(this.ctx); return this; }; u.searchCache = ma; @@ -1352,16 +1352,16 @@ u.export = function(a, b, c, d, e, f) { h = "reg"; if (this.fastupdate) { k = z(); - for (let l of this.A.keys()) { + for (let l of this.reg.keys()) { k[l] = 1; } } else { - k = this.A; + k = this.reg; } break; case 1: h = "cfg"; - k = {doc:0, opt:this.B ? 1 : 0}; + k = {doc:0, opt:this.A ? 1 : 0}; break; case 2: h = "map"; @@ -1369,7 +1369,7 @@ u.export = function(a, b, c, d, e, f) { break; case 3: h = "ctx"; - k = this.F; + k = this.ctx; break; default: "undefined" === typeof c && f && f(); @@ -1382,20 +1382,70 @@ u.import = function(a, b) { if (b) { switch(B(b) && (b = JSON.parse(b)), a) { case "cfg": - this.B = !!b.opt; + this.A = !!b.opt; break; case "reg": this.fastupdate = !1; - this.A = b; + this.reg = b; break; case "map": this.map = b; break; case "ctx": - this.F = b; + this.ctx = b; } } }; +u.serialize = function(a = !0) { + if (!this.reg.size) { + return ""; + } + let b = "", c = ""; + for (var d of this.reg.keys()) { + c || (c = typeof d), b += (b ? "," : "") + ("string" === c ? '"' + d + '"' : d); + } + b = "index.reg=new Set([" + b + "]);"; + d = ""; + for (var e of this.map.entries()) { + var f = e[0], g = e[1], h = ""; + for (let m = 0, n; m < g.length; m++) { + n = g[m] || [""]; + var k = ""; + for (var l = 0; l < n.length; l++) { + k += (k ? "," : "") + ("string" === c ? '"' + n[l] + '"' : n[l]); + } + k = "[" + k + "]"; + h += (h ? "," : "") + k; + } + h = '["' + f + '",[' + h + "]]"; + d += (d ? "," : "") + h; + } + d = "index.map=new Map([" + d + "]);"; + e = ""; + for (const m of this.ctx.entries()) { + f = m[0]; + g = m[1]; + for (const n of g.entries()) { + g = n[0]; + h = n[1]; + k = ""; + for (let q = 0, r; q < h.length; q++) { + r = h[q] || [""]; + l = ""; + for (let p = 0; p < r.length; p++) { + l += (l ? "," : "") + ("string" === c ? '"' + r[p] + '"' : r[p]); + } + l = "[" + l + "]"; + k += (k ? "," : "") + l; + } + k = 'new Map([["' + g + '",[' + k + "]]])"; + k = '["' + f + '",' + k + "]"; + e += (e ? "," : "") + k; + } + } + e = "index.ctx=new Map([" + e + "]);"; + return a ? "function inject(index){" + b + d + e + "}" : b + d + e; +}; Ba(O.prototype); async function Na(a) { a = a.data; @@ -1466,24 +1516,24 @@ function Pa(a, b, c) { ;Y.prototype.add = function(a, b, c) { C(a) && (b = a, a = ca(b, this.key)); if (b && (a || 0 === a)) { - if (!c && this.A.has(a)) { + if (!c && this.reg.has(a)) { return this.update(a, b); } for (let h = 0, k; h < this.field.length; h++) { - k = this.I[h]; + k = this.G[h]; var d = this.index.get(this.field[h]); if ("function" === typeof k) { var e = k(b); e && d.add(a, e, !1, !0); } else { - if (e = k.L, !e || e(b)) { - k.constructor === String ? k = ["" + k] : B(k) && (k = [k]), Qa(b, k, this.N, 0, d, a, k[0], c); + if (e = k.J, !e || e(b)) { + k.constructor === String ? k = ["" + k] : B(k) && (k = [k]), Qa(b, k, this.L, 0, d, a, k[0], c); } } } if (this.tag) { - for (d = 0; d < this.H.length; d++) { - var f = this.H[d], g = this.R[d]; + for (d = 0; d < this.F.length; d++) { + var f = this.F[d], g = this.O[d]; e = this.tag.get(g); let h = z(); if ("function" === typeof f) { @@ -1491,7 +1541,7 @@ function Pa(a, b, c) { continue; } } else { - const k = f.L; + const k = f.J; if (k && !k(b)) { continue; } @@ -1505,14 +1555,14 @@ function Pa(a, b, c) { if (m.length === 2 ** 31 - 1) { g = new K(m); if (this.fastupdate) { - for (let n of this.A.values()) { + for (let n of this.reg.values()) { n.includes(m) && (n[n.indexOf(m)] = g); } } e.set(l, m = g); } m.push(a); - this.fastupdate && ((g = this.A.get(a)) ? g.push(m) : this.A.set(a, [m])); + this.fastupdate && ((g = this.reg.get(a)) ? g.push(m) : this.reg.set(a, [m])); } } } else { @@ -1522,11 +1572,11 @@ function Pa(a, b, c) { } if (this.store && (!c || !this.store.has(a))) { let h; - if (this.D) { + if (this.C) { h = z(); - for (let k = 0, l; k < this.D.length; k++) { - l = this.D[k]; - if ((c = l.L) && !c(b)) { + for (let k = 0, l; k < this.C.length; k++) { + l = this.C[k]; + if ((c = l.J) && !c(b)) { continue; } let m; @@ -1535,7 +1585,7 @@ function Pa(a, b, c) { if (!m) { continue; } - l = [l.X]; + l = [l.V]; } else if (B(l) || l.constructor === String) { h[l] = b[l]; continue; @@ -1672,7 +1722,7 @@ function Qa(a, b, c, d, e, f, g, h) { let A; for (let w = 0, v, I, J; w < k.length; w++) { I = k[w]; - if (this.db && this.tag && !this.I[w]) { + if (this.db && this.tag && !this.G[w]) { continue; } let D; @@ -1680,7 +1730,7 @@ function Qa(a, b, c, d, e, f, g, h) { if (d) { v = d[w]; } else { - if (t = D || c, x = this.index.get(I), n && (this.db && (t.tag = n, A = x.db.Z, t.field = k), A || (t.enrich = !1)), p) { + if (t = D || c, x = this.index.get(I), n && (this.db && (t.tag = n, A = x.db.X, t.field = k), A || (t.enrich = !1)), p) { p[w] = x.searchAsync(a, b, t); t && q && (t.enrich = q); continue; @@ -1821,13 +1871,13 @@ function Ta(a) { } const b = a.document || a.doc || a; var c, d; - this.I = []; + this.G = []; this.field = []; - this.N = []; - this.key = (c = b.key || b.id) && Va(c, this.N) || "id"; + this.L = []; + this.key = (c = b.key || b.id) && Va(c, this.L) || "id"; (d = a.keystore || 0) && (this.keystore = d); - this.A = (this.fastupdate = !!a.fastupdate) ? d ? new L(d) : new Map() : d ? new M(d) : new Set(); - this.D = (c = b.store || null) && !0 !== c && []; + this.reg = (this.fastupdate = !!a.fastupdate) ? d ? new L(d) : new Map() : d ? new M(d) : new Set(); + this.C = (c = b.store || null) && !0 !== c && []; this.store = c && (d ? new L(d) : new Map()); this.cache = (c = a.cache || null) && new H(c); a.cache = !1; @@ -1845,15 +1895,15 @@ function Ta(a) { c.set(f, h); h.worker || (this.worker = !1); } - this.worker || c.set(f, new O(g, this.A)); - g.custom ? this.I[e] = g.custom : (this.I[e] = Va(f, this.N), g.filter && ("string" === typeof this.I[e] && (this.I[e] = new String(this.I[e])), this.I[e].L = g.filter)); + this.worker || c.set(f, new O(g, this.reg)); + g.custom ? this.G[e] = g.custom : (this.G[e] = Va(f, this.L), g.filter && ("string" === typeof this.G[e] && (this.G[e] = new String(this.G[e])), this.G[e].J = g.filter)); this.field[e] = f; } - if (this.D) { + if (this.C) { d = b.store; B(d) && (d = [d]); for (let e = 0, f, g; e < d.length; e++) { - f = d[e], g = f.field || f, f.custom ? (this.D[e] = f.custom, f.custom.X = g) : (this.D[e] = Va(g, this.N), f.filter && ("string" === typeof this.D[e] && (this.D[e] = new String(this.D[e])), this.D[e].L = f.filter)); + f = d[e], g = f.field || f, f.custom ? (this.C[e] = f.custom, f.custom.V = g) : (this.C[e] = Va(g, this.L), f.filter && ("string" === typeof this.C[e] && (this.C[e] = new String(this.C[e])), this.C[e].J = f.filter)); } } this.index = c; @@ -1861,16 +1911,16 @@ function Ta(a) { if (c = b.tag) { if ("string" === typeof c && (c = [c]), c.length) { this.tag = new Map(); - this.H = []; - this.R = []; + this.F = []; + this.O = []; for (let e = 0, f, g; e < c.length; e++) { f = c[e]; g = f.field || f; if (!g) { throw Error("The tag field from the document descriptor is undefined."); } - f.custom ? this.H[e] = f.custom : (this.H[e] = Va(g, this.N), f.filter && ("string" === typeof this.H[e] && (this.H[e] = new String(this.H[e])), this.H[e].L = f.filter)); - this.R[e] = g; + f.custom ? this.F[e] = f.custom : (this.F[e] = Va(g, this.L), f.filter && ("string" === typeof this.F[e] && (this.F[e] = new String(this.F[e])), this.F[e].J = f.filter)); + this.O[e] = g; this.tag.set(g, new Map()); } } @@ -1881,10 +1931,10 @@ u = Y.prototype; u.mount = function(a) { let b = this.field; if (this.tag) { - for (let e = 0, f; e < this.R.length; e++) { - f = this.R[e]; + for (let e = 0, f; e < this.O.length; e++) { + f = this.O[e]; var c = this.index.get(f); - c || (this.index.set(f, c = new O({}, this.A)), b === this.field && (b = b.slice(0)), b.push(f)); + c || (this.index.set(f, c = new O({}, this.reg)), b === this.field && (b = b.slice(0)), b.push(f)); c.tag = this.tag.get(f); } } @@ -1897,7 +1947,7 @@ u.mount = function(a) { h.id = a.id; c[e] = h.mount(f); f.document = !0; - e ? f.Y = !0 : f.store = this.store; + e ? f.W = !0 : f.store = this.store; } this.db = this.async = !0; return Promise.all(c); @@ -1908,7 +1958,7 @@ u.commit = async function(a, b) { c.push(d.db.commit(d, a, b)); } await Promise.all(c); - this.A.clear(); + this.reg.clear(); }; function Va(a, b) { const c = a.split(":"); @@ -1930,7 +1980,7 @@ u.remove = function(a) { for (var b of this.index.values()) { b.remove(a, !0); } - if (this.A.has(a)) { + if (this.reg.has(a)) { if (this.tag && !this.fastupdate) { for (let c of this.tag.values()) { for (let d of c) { @@ -1941,7 +1991,7 @@ u.remove = function(a) { } } this.store && this.store.delete(a); - this.A.delete(a); + this.reg.delete(a); } this.cache && this.cache.remove(a); return this; @@ -1959,7 +2009,7 @@ u.clear = function() { return this; }; u.contain = function(a) { - return this.db ? this.index.get(this.field[0]).db.has(a) : this.A.has(a); + return this.db ? this.index.get(this.field[0]).db.has(a) : this.reg.has(a); }; u.cleanup = function() { for (const a of this.index.values()) { @@ -2017,9 +2067,9 @@ u.import = function(a, b) { break; case "reg": this.fastupdate = !1; - this.A = b; + this.reg = b; for (let d = 0, e; d < this.field.length; d++) { - e = this.index[this.field[d]], e.A = b, e.fastupdate = !1; + e = this.index[this.field[d]], e.reg = b, e.fastupdate = !1; } break; case "store": @@ -2043,7 +2093,7 @@ function Ya(a, b = {}) { a || console.info("Default storage space was used, because a name was not passed."); this.id = "flexsearch" + (a ? ":" + a.toLowerCase().replace(/[^a-z0-9_\-]/g, "") : ""); this.field = b.field ? b.field.toLowerCase().replace(/[^a-z0-9_\-]/g, "") : ""; - this.Z = !1; + this.X = !1; this.db = null; this.h = {}; } @@ -2183,22 +2233,22 @@ u.transaction = function(a, b, c) { }; u.commit = async function(a, b, c) { if (b) { - await this.clear(), a.K = []; + await this.clear(), a.I = []; } else { - let d = a.K; - a.K = []; + let d = a.I; + a.I = []; for (let e = 0, f; e < d.length; e++) { if (f = d[e], f.clear) { await this.clear(); b = !0; break; } else { - d[e] = f.$; + d[e] = f.Y; } } - b || (c || (d = d.concat(ba(a.A))), d.length && await this.remove(d)); + b || (c || (d = d.concat(ba(a.reg))), d.length && await this.remove(d)); } - a.A.size && (await this.transaction("map", "readwrite", function(d) { + a.reg.size && (await this.transaction("map", "readwrite", function(d) { for (const e of a.map) { const f = e[0], g = e[1]; g.length && (b ? d.put(g, f) : d.get(f).onsuccess = function() { @@ -2225,7 +2275,7 @@ u.commit = async function(a, b, c) { }); } }), await this.transaction("ctx", "readwrite", function(d) { - for (const e of a.F) { + for (const e of a.ctx) { const f = e[0], g = e[1]; for (const h of g) { const k = h[0], l = h[1]; @@ -2258,8 +2308,8 @@ u.commit = async function(a, b, c) { const f = e[0], g = e[1]; d.put("object" === typeof g ? JSON.stringify(g) : 1, f); } - }) : a.Y || await this.transaction("reg", "readwrite", function(d) { - for (const e of a.A.keys()) { + }) : a.W || await this.transaction("reg", "readwrite", function(d) { + for (const e of a.reg.keys()) { d.put(1, e); } }), a.tag && await this.transaction("tag", "readwrite", function(d) { @@ -2271,7 +2321,7 @@ u.commit = async function(a, b, c) { d.put(h, f); }); } - }), a.map.clear(), a.F.clear(), a.tag && a.tag.clear(), a.store && a.store.clear(), a.document || a.A.clear()); + }), a.map.clear(), a.ctx.clear(), a.tag && a.tag.clear(), a.store && a.store.clear(), a.document || a.reg.clear()); }; function ab(a, b, c) { const d = a.value; diff --git a/dist/flexsearch.bundle.module.min.js b/dist/flexsearch.bundle.module.min.js index acb2e7f..243d45d 100644 --- a/dist/flexsearch.bundle.module.min.js +++ b/dist/flexsearch.bundle.module.min.js @@ -15,75 +15,77 @@ function B(a){return"string"===typeof a}function C(a){return"object"===typeof a} ["\u0477","\u0475"],["\u04c2","\u0436"],["\u04d1","\u0430"],["\u04d3","\u0430"],["\u04d7","\u0435"],["\u04db","\u04d9"],["\u04dd","\u0436"],["\u04df","\u0437"],["\u04e3","\u0438"],["\u04e5","\u0438"],["\u04e7","\u043e"],["\u04eb","\u04e9"],["\u04ed","\u044d"],["\u04ef","\u0443"],["\u04f1","\u0443"],["\u04f3","\u0443"],["\u04f5","\u0447"]];const fa=/[^\p{L}\p{N}]+/u,ha=/(\d{3})/g,ia=/(\D)(\d{3})/g,ja=/(\d{3})(\D)/g,ka="".normalize&&/[\u0300-\u036f]/g;function F(a){if(!this)return new F(...arguments);for(let b=0;bthis.stemmer.get(l)),k=1);this.matcher&& -1this.matcher.get(l)),k=1);g&&k&&(g.lengththis.V&&(this.M.clear(),this.B=this.B/1.1|0));g&&c.push(g)}this.finalize&&(c=this.finalize(c)||c);this.cache&&a.length<=this.h&&(this.J.set(a,c),this.J.size>this.V&&(this.J.clear(),this.h=this.h/1.1|0));return c};function la(a){a.O=null;a.J.clear();a.M.clear()};function ma(a,b,c){a=("object"===typeof a?""+a.query:a).toLowerCase();let d=this.cache.get(a);if(!d){d=this.search(a,b,c);if(d.then){const e=this;d.then(function(f){e.cache.set(a,f);return f})}this.cache.set(a,d)}return d}function G(a){this.limit=a&&!0!==a?a:1E3;this.cache=new Map;this.h=""}G.prototype.set=function(a,b){this.cache.set(this.h=a,b);this.cache.size>this.limit&&this.cache.delete(this.cache.keys().next().value)}; +y(a.maxlength,0,this.maxlength);if(this.cache=c=y(a.cache,!0,this.cache))this.M=null,this.T="number"===typeof c?c:2E5,this.H=new Map,this.K=new Map,this.A=this.h=128;this.B="";this.P=null;this.N="";this.R=null;if(this.matcher)for(const d of this.matcher.keys())this.B+=(this.B?"|":"")+d;if(this.stemmer)for(const d of this.stemmer.keys())this.N+=(this.N?"|":"")+d;return this}; +F.prototype.encode=function(a){if(this.cache&&a.length<=this.h)if(this.M){if(this.H.has(a))return this.H.get(a)}else this.M=setTimeout(la,0,this);this.normalize&&(a="function"===typeof this.normalize?this.normalize(a):ka?a.normalize("NFKD").replace(ka,"").toLowerCase():a.toLowerCase());this.prepare&&(a=this.prepare(a));this.numeric&&3this.stemmer.get(l)),k=1);this.matcher&& +1this.matcher.get(l)),k=1);g&&k&&(g.lengththis.T&&(this.K.clear(),this.A=this.A/1.1|0));g&&c.push(g)}this.finalize&&(c=this.finalize(c)||c);this.cache&&a.length<=this.h&&(this.H.set(a,c),this.H.size>this.T&&(this.H.clear(),this.h=this.h/1.1|0));return c};function la(a){a.M=null;a.H.clear();a.K.clear()};function ma(a,b,c){a=("object"===typeof a?""+a.query:a).toLowerCase();let d=this.cache.get(a);if(!d){d=this.search(a,b,c);if(d.then){const e=this;d.then(function(f){e.cache.set(a,f);return f})}this.cache.set(a,d)}return d}function G(a){this.limit=a&&!0!==a?a:1E3;this.cache=new Map;this.h=""}G.prototype.set=function(a,b){this.cache.set(this.h=a,b);this.cache.size>this.limit&&this.cache.delete(this.cache.keys().next().value)}; G.prototype.get=function(a){const b=this.cache.get(a);b&&this.h!==a&&(this.cache.delete(a),this.cache.set(this.h=a,b));return b};G.prototype.remove=function(a){for(const b of this.cache){const c=b[0];b[1].includes(a)&&this.cache.delete(c)}};G.prototype.clear=function(){this.cache.clear();this.h=""};const na={normalize:function(a){return a.toLowerCase()},dedupe:!1};const oa=new Map([["b","p"],["v","f"],["w","f"],["z","s"],["x","s"],["d","t"],["n","m"],["c","k"],["g","k"],["j","k"],["q","k"],["i","e"],["y","e"],["u","o"]]);const pa=new Map([["ai","ei"],["ae","a"],["oe","o"],["ue","u"],["sh","s"],["ch","c"],["th","t"],["ph","f"],["pf","f"]]),qa=[/([^aeo])h([aeo$])/g,"$1$2",/([aeo])h([^aeo]|$)/g,"$1$2"];const ra={a:"",e:"",i:"",o:"",u:"",y:"",b:1,f:1,p:1,v:1,c:2,g:2,j:2,k:2,q:2,s:2,x:2,z:2,"\u00df":2,d:3,t:3,l:4,m:5,n:5,r:6};const sa=/[\x00-\x7F]+/g;const ta=/[\x00-\x7F]+/g;const ua=/[\x00-\x7F]+/g;var va={LatinExact:{normalize:!1,dedupe:!1},LatinDefault:na,LatinSimple:{normalize:!0,dedupe:!0},LatinBalance:{normalize:!0,dedupe:!0,mapper:oa},LatinAdvanced:{normalize:!0,dedupe:!0,mapper:oa,replacer:qa,matcher:pa},LatinExtra:{normalize:!0,dedupe:!0,mapper:oa,replacer:qa.concat([/(?!^)[aeoy]/g,""]),matcher:pa},LatinSoundex:{normalize:!0,dedupe:!1,include:{letter:!0},finalize:function(a){for(let c=0;c=g.length)b-=g.length;else{b=g[d?"splice":"slice"](b,c);const h=b.length;if(h&&(e=e.length?e.concat(b):b,c-=h,d&&(a.length-=h),!c))break;b=0}return e} function J(a){if(!this)return new J(a);this.index=a?[a]:[];this.length=a?a.length:0;const b=this;return new Proxy([],{get(c,d){if("length"===d)return b.length;if("push"===d)return function(e){b.index[b.index.length-1].push(e);b.length++};if("pop"===d)return function(){if(b.length)return b.length--,b.index[b.index.length-1].pop()};if("indexOf"===d)return function(e){let f=0;for(let g=0,h,k;gf;h--){g=p.substring(f,h);var k=this.score?this.score(b,p,r,g,f):P(q,d,r,e,f);Q(this,m,g,k,a,c)}break}case "reverse":if(1< -e){for(h=e-1;0g?0:1),d,r,h-1,k-1),x=this.bidirectional&&p>f;Q(this,l,x?f:p,t,a,c,x?p:f)}}}}this.fastupdate||this.A.add(a)}else b=""}this.db&&(b|| -this.K.push({del:a}),this.W&&Ca(this));return this};function Q(a,b,c,d,e,f,g){let h=g?a.F:a.map,k;if(!b[c]||!g||!(k=b[c])[g])if(g?(b=k||(b[c]=z()),b[g]=1,(k=h.get(g))?h=k:h.set(g,h=new Map)):b[c]=1,(k=h.get(c))?h=k:h.set(c,h=k=[]),h=h[d]||(h[d]=[]),!f||!h.includes(e)){if(h.length===2**31-1){b=new J(h);if(a.fastupdate)for(let l of a.A.values())l.includes(h)&&(l[l.indexOf(h)]=b);k[d]=h=b}h.push(e);a.fastupdate&&((d=a.A.get(e))?d.push(h):a.A.set(e,[h]))}} +function K(a=8){if(!this)return new K(a);this.index=z();this.B=[];this.size=0;32f;h--){g=p.substring(f,h);var k=this.score?this.score(b,p,r,g,f):P(q,d,r,e,f);Q(this,m,g,k,a,c)}break}case "reverse":if(1< +e){for(h=e-1;0g?0:1),d,r,h-1,k-1),x=this.bidirectional&&p>f;Q(this,l,x?f:p,t,a,c,x?p:f)}}}}this.fastupdate||this.reg.add(a)}else b=""}this.db&& +(b||this.I.push({del:a}),this.U&&Ca(this));return this};function Q(a,b,c,d,e,f,g){let h=g?a.ctx:a.map,k;if(!b[c]||!g||!(k=b[c])[g])if(g?(b=k||(b[c]=z()),b[g]=1,(k=h.get(g))?h=k:h.set(g,h=new Map)):b[c]=1,(k=h.get(c))?h=k:h.set(c,h=k=[]),h=h[d]||(h[d]=[]),!f||!h.includes(e)){if(h.length===2**31-1){b=new J(h);if(a.fastupdate)for(let l of a.reg.values())l.includes(h)&&(l[l.indexOf(h)]=b);k[d]=h=b}h.push(e);a.fastupdate&&((d=a.reg.get(e))?d.push(h):a.reg.set(e,[h]))}} function P(a,b,c,d,e){return c&&1b?b?a.slice(c,c+b):a.slice(c):a,d?Da(a):a;let e=[];for(let f=0,g,h;f=h){c-=h;continue}cb&&(g=g.slice(0,b),h=g.length),e.push(g);else{if(h>=b)return h>b&&(g=g.slice(0,b)),d?Da(g):g;e=[g]}b-=h;if(!b)break}if(!e.length)return e;e=1a.length)return e?R(a[0],b,c,d):a[0];d=[];let g=0,h=z(),k=da(a);for(let l=0,m;la.length)return[];let f=[],g=0,h=z(),k=da(a);if(!k)return f;for(let l=0,m;la.length)return e?R(a[0],b,c,d):a[0];b=[];c=z();for(let g=0,h;gc||d)g=g.slice(d,c+d)}return g} +Ha.call(a,d,e);return e?a.result:a});this.result=Ha.call(this,d,e);return e?this.result:this};function Ha(a,b){if(!a.length)return this.result;const c=[];a=new Set(a.flat().flat());for(let d=0,e;dc||d)g=g.slice(d,c+d)}return g} function Ja(a,b){const c=z(),d=z(),e=[];for(let f=0;f=e)))break;if(h.length){if(g)return R(h,e,0);b.push(h);return}}return!c&&h}function V(a,b,c,d,e,f,g,h){let k;c&&(k=a.bidirectional&&b>c);if(a.db)return c?a.db.get(k?c:b,k?b:c,d,e,f,g,h):a.db.get(b,"",d,e,f,g,h);a=c?(a=a.F.get(k?b:c))&&a.get(k?c:b):a.map.get(b);return a};O.prototype.remove=function(a,b){const c=this.A.size&&(this.fastupdate?this.A.get(a):this.A.has(a));if(c){if(this.fastupdate)for(let d=0,e;de.length)e.pop();else{const f=e.indexOf(a);f===c.length-1?e.pop():e.splice(f,1)}}else La(this.map,a),this.depth&&La(this.F,a);b||this.A.delete(a)}this.db&&(this.K.push({del:a}),this.W&&Ca(this));this.cache&&this.cache.remove(a);return this}; -function La(a,b){let c=0;if(a.constructor===Array)for(let d=0,e,f;dc.add(a,b)):this.add(a,b)}return this.remove(a).add(a,b)};function Ma(a){let b=0;if(a.constructor===Array)for(let c=0,d;c{f=l}));let h,k;switch(e||(e=0)){case 0:h="reg";if(this.fastupdate){k=z();for(let l of this.A.keys())k[l]=1}else k=this.A;break;case 1:h="cfg";k={doc:0,opt:this.B?1:0};break;case 2:h="map";k=this.map;break;case 3:h="ctx";k=this.F;break;default:"undefined"===typeof c&&f&&f();return}za(a,b||this,c,h,d,e,k,f);return g}; -u.import=function(a,b){if(b)switch(B(b)&&(b=JSON.parse(b)),a){case "cfg":this.B=!!b.opt;break;case "reg":this.fastupdate=!1;this.A=b;break;case "map":this.map=b;break;case "ctx":this.F=b}};Ba(O.prototype);async function Na(a){a=a.data;var b=self._index;const c=a.args;var d=a.task;switch(d){case "init":d=a.options||{};(b=d.config)&&(d=await import(b));(b=a.factory)?(Function("return "+b)()(self),self._index=new self.FlexSearch.Index(d),delete self.FlexSearch):self._index=new O(d);postMessage({id:a.id});break;default:a=a.id,b=b[d].apply(b,c),postMessage("search"===d?{id:a,msg:b}:{id:a})}};let Oa=0; +function Ka(a,b,c,d,e,f,g){let h=[];if(a){d=Math.min(a.length,d);for(let k=0,l=0,m;k=e)))break;if(h.length){if(g)return R(h,e,0);b.push(h);return}}return!c&&h}function V(a,b,c,d,e,f,g,h){let k;c&&(k=a.bidirectional&&b>c);if(a.db)return c?a.db.get(k?c:b,k?b:c,d,e,f,g,h):a.db.get(b,"",d,e,f,g,h);a=c?(a=a.ctx.get(k?b:c))&&a.get(k?c:b):a.map.get(b);return a};O.prototype.remove=function(a,b){const c=this.reg.size&&(this.fastupdate?this.reg.get(a):this.reg.has(a));if(c){if(this.fastupdate)for(let d=0,e;de.length)e.pop();else{const f=e.indexOf(a);f===c.length-1?e.pop():e.splice(f,1)}}else La(this.map,a),this.depth&&La(this.ctx,a);b||this.reg.delete(a)}this.db&&(this.I.push({del:a}),this.U&&Ca(this));this.cache&&this.cache.remove(a);return this}; +function La(a,b){let c=0;if(a.constructor===Array)for(let d=0,e,f;dc.add(a,b)):this.add(a,b)}return this.remove(a).add(a,b)};function Ma(a){let b=0;if(a.constructor===Array)for(let c=0,d;c{f=l}));let h,k;switch(e||(e=0)){case 0:h="reg";if(this.fastupdate){k=z();for(let l of this.reg.keys())k[l]=1}else k=this.reg;break;case 1:h="cfg";k={doc:0,opt:this.A?1:0};break;case 2:h="map";k=this.map;break;case 3:h="ctx";k=this.ctx;break;default:"undefined"===typeof c&&f&&f();return}za(a,b||this,c,h,d,e,k,f);return g}; +u.import=function(a,b){if(b)switch(B(b)&&(b=JSON.parse(b)),a){case "cfg":this.A=!!b.opt;break;case "reg":this.fastupdate=!1;this.reg=b;break;case "map":this.map=b;break;case "ctx":this.ctx=b}}; +u.serialize=function(a=!0){if(!this.reg.size)return"";let b="",c="";for(var d of this.reg.keys())c||(c=typeof d),b+=(b?",":"")+("string"===c?'"'+d+'"':d);b="index.reg=new Set(["+b+"]);";d="";for(var e of this.map.entries()){var f=e[0],g=e[1],h="";for(let m=0,n;mc||d)a=a.slice(d,d+c);e&&(a=Ta.call(this,a));return a}} -function Ta(a){const b=Array(a.length);for(let c=0,d;c{f=k}));e||(e=0);d||(d=0);if(d{e.objectStoreNames.contains(f)||e.createObjectStore(f)})};d.onblocked=function(e){console.error("blocked",e);c()};d.onerror=function(e){console.error(this.error,e);c()};d.onsuccess=function(){a.db=this.result;a.db.onversionchange=function(){a.close()};b(a)}})} u.close=function(){this.db.close();this.db=null};u.clear=function(){const a=this.db.transaction(Xa,"readwrite");for(let b=0;b=m.length){d-=m.length;continue}const n=c?d+Math.min(m.length-d,c):m.length;for(let q=d;q=f.length)return[];if(!b&&!c)return f;f=f.slice(c,c+b);return d?e.enrich(f):f})}; u.enrich=function(a){"object"!==typeof a&&(a=[a]);const b=this.db.transaction("reg","readonly").objectStore("reg"),c=[];for(let d=0;d{e.onerror=h=>{this.h[a+":"+b]=null;e.abort();e=d=null;g(h)};e.oncomplete=h=>{e=d=this.h[a+":"+b]=null;f(h||!0)};return c.call(this,d)})}; -u.commit=async function(a,b,c){if(b)await this.clear(),a.K=[];else{let d=a.K;a.K=[];for(let e=0,f;em&&!f&&"string"===typeof n&&!isNaN(n)&&(m=k.indexOf(parseInt(n,10)))&&(f=1),0<=m)if(e=1,1m&&!f&&"string"===typeof n&&!isNaN(n)&&(m=k.indexOf(parseInt(n,10)))&&(f=1),0<=m)if(e=1,1{a.onsuccess=function(){b(this.result)};a.oncomplete=function(){b(this.result)};a.onerror=c;a=null})};export default {Index:O,Charset:va,Encoder:F,Document:Y,Worker:W,Resolver:S,IndexedDB:Ya,Language:{}}; export const Index=O;export const Charset=va;export const Encoder=F;export const Document=Y;export const Worker=W;export const Resolver=S;export const IndexedDB=Ya;export const Language={}; \ No newline at end of file diff --git a/dist/flexsearch.compact.debug.js b/dist/flexsearch.compact.debug.js index c7ebb66..43d57e7 100644 --- a/dist/flexsearch.compact.debug.js +++ b/dist/flexsearch.compact.debug.js @@ -115,32 +115,32 @@ J.prototype.assign = function(a) { this.minlength = x(a.minlength, 1, this.minlength); this.maxlength = x(a.maxlength, 0, this.maxlength); if (this.cache = b = x(a.cache, !0, this.cache)) { - this.L = null, this.R = "number" === typeof b ? b : 2e5, this.H = new Map(), this.J = new Map(), this.G = this.A = 128; + this.J = null, this.O = "number" === typeof b ? b : 2e5, this.F = new Map(), this.H = new Map(), this.D = this.h = 128; } - this.M = ""; - this.O = null; - this.N = ""; - this.P = null; + this.K = ""; + this.M = null; + this.L = ""; + this.N = null; if (this.matcher) { for (const e of this.matcher.keys()) { - this.M += (this.M ? "|" : "") + e; + this.K += (this.K ? "|" : "") + e; } } if (this.stemmer) { for (const e of this.stemmer.keys()) { - this.N += (this.N ? "|" : "") + e; + this.L += (this.L ? "|" : "") + e; } } return this; }; J.prototype.encode = function(a) { - if (this.cache && a.length <= this.A) { - if (this.L) { - if (this.H.has(a)) { - return this.H.get(a); + if (this.cache && a.length <= this.h) { + if (this.J) { + if (this.F.has(a)) { + return this.F.get(a); } } else { - this.L = setTimeout(ha, 0, this); + this.J = setTimeout(ha, 0, this); } } this.normalize && (a = "function" === typeof this.normalize ? this.normalize(a) : I ? a.normalize("NFKD").replace(I, "").toLowerCase() : a.toLowerCase()); @@ -162,25 +162,25 @@ J.prototype.encode = function(a) { if (this.filter && this.filter.has(g)) { continue; } - if (this.cache && g.length <= this.G) { - if (this.L) { - var d = this.J.get(g); + if (this.cache && g.length <= this.D) { + if (this.J) { + var d = this.H.get(g); if (d || "" === d) { d && b.push(d); continue; } } else { - this.L = setTimeout(ha, 0, this); + this.J = setTimeout(ha, 0, this); } } let k; - this.stemmer && 2 < g.length && (this.P || (this.P = new RegExp("(?!^)(" + this.N + ")$")), g = g.replace(this.P, l => this.stemmer.get(l)), k = 1); - this.matcher && 1 < g.length && (this.O || (this.O = new RegExp("(" + this.M + ")", "g")), g = g.replace(this.O, l => this.matcher.get(l)), k = 1); + this.stemmer && 2 < g.length && (this.N || (this.N = new RegExp("(?!^)(" + this.L + ")$")), g = g.replace(this.N, l => this.stemmer.get(l)), k = 1); + this.matcher && 1 < g.length && (this.M || (this.M = new RegExp("(" + this.K + ")", "g")), g = g.replace(this.M, l => this.matcher.get(l)), k = 1); g && k && (g.length < this.minlength || this.filter && this.filter.has(g)) && (g = ""); if (g && (this.mapper || this.dedupe && 1 < g.length)) { d = ""; - for (let l = 0, m = "", r, t; l < g.length; l++) { - r = g.charAt(l), r === m && this.dedupe || ((t = this.mapper && this.mapper.get(r)) || "" === t ? t === m && this.dedupe || !(m = t) || (d += t) : d += m = r); + for (let l = 0, m = "", q, t; l < g.length; l++) { + q = g.charAt(l), q === m && this.dedupe || ((t = this.mapper && this.mapper.get(q)) || "" === t ? t === m && this.dedupe || !(m = t) || (d += t) : d += m = q); } g = d; } @@ -189,17 +189,17 @@ J.prototype.encode = function(a) { g = g.replace(this.replacer[d], this.replacer[d + 1]); } } - this.cache && h.length <= this.G && (this.J.set(h, g), this.J.size > this.R && (this.J.clear(), this.G = this.G / 1.1 | 0)); + this.cache && h.length <= this.D && (this.H.set(h, g), this.H.size > this.O && (this.H.clear(), this.D = this.D / 1.1 | 0)); g && b.push(g); } this.finalize && (b = this.finalize(b) || b); - this.cache && a.length <= this.A && (this.H.set(a, b), this.H.size > this.R && (this.H.clear(), this.A = this.A / 1.1 | 0)); + this.cache && a.length <= this.h && (this.F.set(a, b), this.F.size > this.O && (this.F.clear(), this.h = this.h / 1.1 | 0)); return b; }; function ha(a) { - a.L = null; + a.J = null; + a.F.clear(); a.H.clear(); - a.J.clear(); } ;function ia(a, c, b) { a = ("object" === typeof a ? "" + a.query : a).toLowerCase(); @@ -220,15 +220,15 @@ function ha(a) { function K(a) { this.limit = a && !0 !== a ? a : 1000; this.cache = new Map(); - this.A = ""; + this.h = ""; } K.prototype.set = function(a, c) { - this.cache.set(this.A = a, c); + this.cache.set(this.h = a, c); this.cache.size > this.limit && this.cache.delete(this.cache.keys().next().value); }; K.prototype.get = function(a) { const c = this.cache.get(a); - c && this.A !== a && (this.cache.delete(a), this.cache.set(this.A = a, c)); + c && this.h !== a && (this.cache.delete(a), this.cache.set(this.h = a, c)); return c; }; K.prototype.remove = function(a) { @@ -239,7 +239,7 @@ K.prototype.remove = function(a) { }; K.prototype.clear = function() { this.cache.clear(); - this.A = ""; + this.h = ""; }; const ja = {normalize:function(a) { return a.toLowerCase(); @@ -294,16 +294,16 @@ function M(a) { ;y(); N.prototype.add = function(a, c, b, e) { if (c && (a || 0 === a)) { - if (!e && !b && this.h.has(a)) { + if (!e && !b && this.reg.has(a)) { return this.update(a, c); } c = this.encoder.encode(c); if (e = c.length) { - const l = y(), m = y(), r = this.depth, t = this.resolution; + const l = y(), m = y(), q = this.depth, t = this.resolution; for (let p = 0; p < e; p++) { let n = c[this.rtl ? e - 1 - p : p]; var d = n.length; - if (d && (r || !m[n])) { + if (d && (q || !m[n])) { var f = this.score ? this.score(c, n, p, null, 0) : O(t, e, p), g = ""; switch(this.tokenize) { case "full": @@ -332,8 +332,8 @@ N.prototype.add = function(a, c, b, e) { break; } default: - if (P(this, m, n, f, a, b), r && 1 < e && p < e - 1) { - for (d = y(), g = this.S, f = n, h = Math.min(r + 1, e - p), d[f] = 1, k = 1; k < h; k++) { + if (P(this, m, n, f, a, b), q && 1 < e && p < e - 1) { + for (d = y(), g = this.P, f = n, h = Math.min(q + 1, e - p), d[f] = 1, k = 1; k < h; k++) { if ((n = c[this.rtl ? e - 1 - p - k : p + k]) && !d[n]) { d[n] = 1; const w = this.score ? this.score(c, f, p, n, k) : O(g + (e / 2 > g ? 0 : 1), e, p, h - 1, k - 1), B = this.bidirectional && n > f; @@ -344,14 +344,14 @@ N.prototype.add = function(a, c, b, e) { } } } - this.fastupdate || this.h.add(a); + this.fastupdate || this.reg.add(a); } } return this; }; function P(a, c, b, e, d, f, g) { - let h = g ? a.D : a.map, k; - c[b] && g && (k = c[b])[g] || (g ? (c = k || (c[b] = y()), c[g] = 1, (k = h.get(g)) ? h = k : h.set(g, h = new Map())) : c[b] = 1, (k = h.get(b)) ? h = k : h.set(b, h = []), h = h[e] || (h[e] = []), f && h.includes(d) || (h.push(d), a.fastupdate && ((c = a.h.get(d)) ? c.push(h) : a.h.set(d, [h])))); + let h = g ? a.ctx : a.map, k; + c[b] && g && (k = c[b])[g] || (g ? (c = k || (c[b] = y()), c[g] = 1, (k = h.get(g)) ? h = k : h.set(g, h = new Map())) : c[b] = 1, (k = h.get(b)) ? h = k : h.set(b, h = []), h = h[e] || (h[e] = []), f && h.includes(d) || (h.push(d), a.fastupdate && ((c = a.reg.get(d)) ? c.push(h) : a.reg.set(d, [h])))); } function O(a, c, b, e, d) { return b && 1 < a ? c + (e || 0) <= a ? b + (d || 0) : (a - 1) / (c + (e || 0)) * (b + (d || 0)) + 1 | 0 : 0; @@ -422,11 +422,11 @@ function O(a, c, b, e, d) { var h = 0, k = 0; if (1 < b) { var l = y(); - const r = []; + const q = []; for (let t = 0, p; t < b; t++) { if ((p = a[t]) && !l[p]) { if (g || S(this, p)) { - r.push(p), l[p] = 1; + q.push(p), l[p] = 1; } else { return e; } @@ -435,7 +435,7 @@ function O(a, c, b, e, d) { k = k ? Math.min(k, n) : n; } } - a = r; + a = q; b = a.length; } if (!b) { @@ -456,11 +456,11 @@ function O(a, c, b, e, d) { 9 < h && 3 < h / k && a.sort(aa); } } - for (let r, t; l < b; l++) { + for (let q, t; l < b; l++) { t = a[l]; - m ? (r = S(this, t, m), r = va(r, e, g, this.S, c, d, 2 === b), g && !1 === r && e.length || (m = t)) : (r = S(this, t), r = va(r, e, g, this.resolution, c, d, 1 === b)); - if (r) { - return r; + m ? (q = S(this, t, m), q = va(q, e, g, this.P, c, d, 2 === b), g && !1 === q && e.length || (m = t)) : (q = S(this, t), q = va(q, e, g, this.resolution, c, d, 1 === b)); + if (q) { + return q; } if (g && l === b - 1) { f = e.length; @@ -483,9 +483,9 @@ function O(a, c, b, e, d) { m = a.length; b = []; f = y(); - for (let r = 0, t, p, n, w; r < e; r++) { + for (let q = 0, t, p, n, w; q < e; q++) { for (k = 0; k < m; k++) { - if (n = a[k], r < n.length && (t = n[r])) { + if (n = a[k], q < n.length && (t = n[q])) { for (l = 0; l < t.length; l++) { p = t[l], (h = f[p]) ? f[p]++ : (h = 0, f[p] = 1), w = b[h] || (b[h] = []), w.push(p); } @@ -559,11 +559,11 @@ function va(a, c, b, e, d, f, g) { function S(a, c, b) { let e; b && (e = a.bidirectional && c > b); - a = b ? (a = a.D.get(e ? c : b)) && a.get(e ? b : c) : a.map.get(c); + a = b ? (a = a.ctx.get(e ? c : b)) && a.get(e ? b : c) : a.map.get(c); return a; } ;N.prototype.remove = function(a, c) { - const b = this.h.size && (this.fastupdate ? this.h.get(a) : this.h.has(a)); + const b = this.reg.size && (this.fastupdate ? this.reg.get(a) : this.reg.has(a)); if (b) { if (this.fastupdate) { for (let e = 0, d; e < b.length; e++) { @@ -577,9 +577,9 @@ function S(a, c, b) { } } } else { - T(this.map, a), this.depth && T(this.D, a); + T(this.map, a), this.depth && T(this.ctx, a); } - c || this.h.delete(a); + c || this.reg.delete(a); } this.cache && this.cache.remove(a); return this; @@ -627,17 +627,17 @@ function T(a, c) { this.score = a.score || null; d = !1; this.map = new Map(); - this.D = new Map(); - this.h = c || (this.fastupdate ? new Map() : new Set()); - this.S = b.resolution || 1; + this.ctx = new Map(); + this.reg = c || (this.fastupdate ? new Map() : new Set()); + this.P = b.resolution || 1; this.rtl = e.rtl || a.rtl || !1; this.cache = (d = a.cache || null) && new K(d); } u = N.prototype; u.clear = function() { this.map.clear(); - this.D.clear(); - this.h.clear(); + this.ctx.clear(); + this.reg.clear(); this.cache && this.cache.clear(); return this; }; @@ -645,7 +645,7 @@ u.append = function(a, c) { return this.add(a, c, !0); }; u.contain = function(a) { - return this.h.has(a); + return this.reg.has(a); }; u.update = function(a, c) { if (this.async) { @@ -673,7 +673,7 @@ u.cleanup = function() { return console.info('Cleanup the index isn\'t required when not using "fastupdate".'), this; } U(this.map); - this.depth && U(this.D); + this.depth && U(this.ctx); return this; }; u.searchCache = ia; @@ -688,16 +688,16 @@ u.export = function(a, c, b, e, d, f) { h = "reg"; if (this.fastupdate) { k = y(); - for (let l of this.h.keys()) { + for (let l of this.reg.keys()) { k[l] = 1; } } else { - k = this.h; + k = this.reg; } break; case 1: h = "cfg"; - k = {doc:0, opt:this.A ? 1 : 0}; + k = {doc:0, opt:this.h ? 1 : 0}; break; case 2: h = "map"; @@ -705,7 +705,7 @@ u.export = function(a, c, b, e, d, f) { break; case 3: h = "ctx"; - k = this.D; + k = this.ctx; break; default: "undefined" === typeof b && f && f(); @@ -718,42 +718,92 @@ u.import = function(a, c) { if (c) { switch(z(c) && (c = JSON.parse(c)), a) { case "cfg": - this.A = !!c.opt; + this.h = !!c.opt; break; case "reg": this.fastupdate = !1; - this.h = c; + this.reg = c; break; case "map": this.map = c; break; case "ctx": - this.D = c; + this.ctx = c; } } }; +u.serialize = function(a = !0) { + if (!this.reg.size) { + return ""; + } + let c = "", b = ""; + for (var e of this.reg.keys()) { + b || (b = typeof e), c += (c ? "," : "") + ("string" === b ? '"' + e + '"' : e); + } + c = "index.reg=new Set([" + c + "]);"; + e = ""; + for (var d of this.map.entries()) { + var f = d[0], g = d[1], h = ""; + for (let m = 0, q; m < g.length; m++) { + q = g[m] || [""]; + var k = ""; + for (var l = 0; l < q.length; l++) { + k += (k ? "," : "") + ("string" === b ? '"' + q[l] + '"' : q[l]); + } + k = "[" + k + "]"; + h += (h ? "," : "") + k; + } + h = '["' + f + '",[' + h + "]]"; + e += (e ? "," : "") + h; + } + e = "index.map=new Map([" + e + "]);"; + d = ""; + for (const m of this.ctx.entries()) { + f = m[0]; + g = m[1]; + for (const q of g.entries()) { + g = q[0]; + h = q[1]; + k = ""; + for (let t = 0, p; t < h.length; t++) { + p = h[t] || [""]; + l = ""; + for (let n = 0; n < p.length; n++) { + l += (l ? "," : "") + ("string" === b ? '"' + p[n] + '"' : p[n]); + } + l = "[" + l + "]"; + k += (k ? "," : "") + l; + } + k = 'new Map([["' + g + '",[' + k + "]]])"; + k = '["' + f + '",' + k + "]"; + d += (d ? "," : "") + k; + } + } + d = "index.ctx=new Map([" + d + "]);"; + return a ? "function inject(index){" + c + e + d + "}" : c + e + d; +}; ta(N.prototype); V.prototype.add = function(a, c, b) { E(a) && (c = a, a = F(c, this.key)); if (c && (a || 0 === a)) { - if (!b && this.h.has(a)) { + if (!b && this.reg.has(a)) { return this.update(a, c); } for (let h = 0, k; h < this.field.length; h++) { - k = this.F[h]; + k = this.C[h]; var e = this.index.get(this.field[h]); if ("function" === typeof k) { var d = k(c); d && e.add(a, d, !1, !0); } else { - if (d = k.I, !d || d(c)) { - k.constructor === String ? k = ["" + k] : z(k) && (k = [k]), W(c, k, this.K, 0, e, a, k[0], b); + if (d = k.G, !d || d(c)) { + k.constructor === String ? k = ["" + k] : z(k) && (k = [k]), W(c, k, this.I, 0, e, a, k[0], b); } } } if (this.tag) { - for (e = 0; e < this.C.length; e++) { - var f = this.C[e], g = this.T[e]; + for (e = 0; e < this.B.length; e++) { + var f = this.B[e], g = this.R[e]; d = this.tag.get(g); let h = y(); if ("function" === typeof f) { @@ -761,7 +811,7 @@ V.prototype.add = function(a, c, b) { continue; } } else { - const k = f.I; + const k = f.G; if (k && !k(c)) { continue; } @@ -771,7 +821,7 @@ V.prototype.add = function(a, c, b) { if (d && f) { z(f) && (f = [f]); for (let k = 0, l, m; k < f.length; k++) { - l = f[k], h[l] || (h[l] = 1, (g = d.get(l)) ? m = g : d.set(l, m = []), b && m.includes(a) || (m.push(a), this.fastupdate && ((g = this.h.get(a)) ? g.push(m) : this.h.set(a, [m])))); + l = f[k], h[l] || (h[l] = 1, (g = d.get(l)) ? m = g : d.set(l, m = []), b && m.includes(a) || (m.push(a), this.fastupdate && ((g = this.reg.get(a)) ? g.push(m) : this.reg.set(a, [m])))); } } else { d || console.warn("Tag '" + g + "' was not found"); @@ -780,11 +830,11 @@ V.prototype.add = function(a, c, b) { } if (this.store && (!b || !this.store.has(a))) { let h; - if (this.B) { + if (this.A) { h = y(); - for (let k = 0, l; k < this.B.length; k++) { - l = this.B[k]; - if ((b = l.I) && !b(c)) { + for (let k = 0, l; k < this.A.length; k++) { + l = this.A[k]; + if ((b = l.G) && !b(c)) { continue; } let m; @@ -793,7 +843,7 @@ V.prototype.add = function(a, c, b) { if (!m) { continue; } - l = [l.U]; + l = [l.S]; } else if (z(l) || l.constructor === String) { h[l] = c[l]; continue; @@ -849,7 +899,7 @@ function W(a, c, b, e, d, f, g, h) { let d = []; var f = []; let g, h, k, l, m; - let r = 0; + let q = 0; if (b) { b.constructor === Array && (b = {index:b}); a = b.query || a; @@ -865,24 +915,24 @@ function W(a, c, b, e, d, f, g, h) { if (m) { m.constructor !== Array && (m = [m]); var n = []; - for (let v = 0, q; v < m.length; v++) { - q = m[v]; - if (z(q)) { + for (let v = 0, r; v < m.length; v++) { + r = m[v]; + if (z(r)) { throw Error("A tag option can't be a string, instead it needs a { field: tag } format."); } - if (q.field && q.tag) { - var w = q.tag; + if (r.field && r.tag) { + var w = r.tag; if (w.constructor === Array) { for (var B = 0; B < w.length; B++) { - n.push(q.field, w[B]); + n.push(r.field, w[B]); } } else { - n.push(q.field, w); + n.push(r.field, w); } } else { - w = Object.keys(q); + w = Object.keys(r); for (let C = 0, D, A; C < w.length; C++) { - if (D = w[C], A = q[D], A.constructor === Array) { + if (D = w[C], A = r[D], A.constructor === Array) { for (B = 0; B < A.length; B++) { n.push(D, A[B]); } @@ -904,8 +954,8 @@ function W(a, c, b, e, d, f, g, h) { } } return e.length ? Promise.all(e).then(function(v) { - for (let q = 0; q < v.length; q++) { - d[q].result = v[q]; + for (let r = 0; r < v.length; r++) { + d[r].result = v[r]; } return d; }) : d; @@ -915,22 +965,22 @@ function W(a, c, b, e, d, f, g, h) { } l || (l = this.field); p = !e && (this.worker || this.async) && []; - for (let v = 0, q, C, D; v < l.length; v++) { + for (let v = 0, r, C, D; v < l.length; v++) { C = l[v]; let A; z(C) || (A = C, C = A.field, a = A.query || a, c = A.limit || c, k = A.suggest || k); if (e) { - q = e[v]; + r = e[v]; } else { if (n = A || b, w = this.index.get(C), m && (n.enrich = !1), p) { p[v] = w.searchAsync(a, c, n); n && g && (n.enrich = g); continue; } else { - q = w.search(a, c, n), n && g && (n.enrich = g); + r = w.search(a, c, n), n && g && (n.enrich = g); } } - D = q && q.length; + D = r && r.length; if (m && D) { n = []; w = 0; @@ -950,8 +1000,8 @@ function W(a, c, b, e, d, f, g, h) { } } if (w) { - q = ua(q, n); - D = q.length; + r = ua(r, n); + D = r.length; if (!D && !k) { return d; } @@ -959,31 +1009,31 @@ function W(a, c, b, e, d, f, g, h) { } } if (D) { - f[r] = C, d.push(q), r++; + f[q] = C, d.push(r), q++; } else if (1 === l.length) { return d; } } if (p) { const v = this; - return Promise.all(p).then(function(q) { - return q.length ? v.search(a, c, b, q) : q; + return Promise.all(p).then(function(r) { + return r.length ? v.search(a, c, b, r) : r; }); } - if (!r) { + if (!q) { return d; } if (t && (!g || !this.store)) { return d[0]; } p = []; - for (let v = 0, q; v < f.length; v++) { - q = d[v]; - g && q.length && !q[0].doc && q.length && (q = xa.call(this, q)); + for (let v = 0, r; v < f.length; v++) { + r = d[v]; + g && r.length && !r[0].doc && r.length && (r = xa.call(this, r)); if (t) { - return q; + return r; } - d[v] = {field:f[v], result:q}; + d[v] = {field:f[v], result:r}; } return h ? ya(d, c) : d; }; @@ -1032,12 +1082,12 @@ function xa(a) { } const c = a.document || a.doc || a; var b; - this.F = []; + this.C = []; this.field = []; - this.K = []; - this.key = (b = c.key || c.id) && Y(b, this.K) || "id"; - this.h = (this.fastupdate = !!a.fastupdate) ? new Map() : new Set(); - this.B = (b = c.store || null) && !0 !== b && []; + this.I = []; + this.key = (b = c.key || c.id) && Y(b, this.I) || "id"; + this.reg = (this.fastupdate = !!a.fastupdate) ? new Map() : new Set(); + this.A = (b = c.store || null) && !0 !== b && []; this.store = b && new Map(); this.cache = (b = a.cache || null) && new K(b); this.async = a.cache = !1; @@ -1045,13 +1095,13 @@ function xa(a) { let e = c.index || c.field || c; z(e) && (e = [e]); for (let d = 0, f, g; d < e.length; d++) { - f = e[d], z(f) || (g = f, f = f.field), g = E(g) ? Object.assign({}, a, g) : a, b.set(f, new N(g, this.h)), g.custom ? this.F[d] = g.custom : (this.F[d] = Y(f, this.K), g.filter && ("string" === typeof this.F[d] && (this.F[d] = new String(this.F[d])), this.F[d].I = g.filter)), this.field[d] = f; + f = e[d], z(f) || (g = f, f = f.field), g = E(g) ? Object.assign({}, a, g) : a, b.set(f, new N(g, this.reg)), g.custom ? this.C[d] = g.custom : (this.C[d] = Y(f, this.I), g.filter && ("string" === typeof this.C[d] && (this.C[d] = new String(this.C[d])), this.C[d].G = g.filter)), this.field[d] = f; } - if (this.B) { + if (this.A) { a = c.store; z(a) && (a = [a]); for (let d = 0, f, g; d < a.length; d++) { - f = a[d], g = f.field || f, f.custom ? (this.B[d] = f.custom, f.custom.U = g) : (this.B[d] = Y(g, this.K), f.filter && ("string" === typeof this.B[d] && (this.B[d] = new String(this.B[d])), this.B[d].I = f.filter)); + f = a[d], g = f.field || f, f.custom ? (this.A[d] = f.custom, f.custom.S = g) : (this.A[d] = Y(g, this.I), f.filter && ("string" === typeof this.A[d] && (this.A[d] = new String(this.A[d])), this.A[d].G = f.filter)); } } this.index = b; @@ -1059,16 +1109,16 @@ function xa(a) { if (b = c.tag) { if ("string" === typeof b && (b = [b]), b.length) { this.tag = new Map(); - this.C = []; - this.T = []; + this.B = []; + this.R = []; for (let d = 0, f, g; d < b.length; d++) { f = b[d]; g = f.field || f; if (!g) { throw Error("The tag field from the document descriptor is undefined."); } - f.custom ? this.C[d] = f.custom : (this.C[d] = Y(g, this.K), f.filter && ("string" === typeof this.C[d] && (this.C[d] = new String(this.C[d])), this.C[d].I = f.filter)); - this.T[d] = g; + f.custom ? this.B[d] = f.custom : (this.B[d] = Y(g, this.I), f.filter && ("string" === typeof this.B[d] && (this.B[d] = new String(this.B[d])), this.B[d].G = f.filter)); + this.R[d] = g; this.tag.set(g, new Map()); } } @@ -1095,7 +1145,7 @@ u.remove = function(a) { for (var c of this.index.values()) { c.remove(a, !0); } - if (this.h.has(a)) { + if (this.reg.has(a)) { if (this.tag && !this.fastupdate) { for (let b of this.tag.values()) { for (let e of b) { @@ -1106,7 +1156,7 @@ u.remove = function(a) { } } this.store && this.store.delete(a); - this.h.delete(a); + this.reg.delete(a); } this.cache && this.cache.remove(a); return this; @@ -1124,7 +1174,7 @@ u.clear = function() { return this; }; u.contain = function(a) { - return this.h.has(a); + return this.reg.has(a); }; u.cleanup = function() { for (const a of this.index.values()) { @@ -1156,7 +1206,7 @@ u.export = function(a, c, b, e, d, f) { switch(d) { case 1: c = "tag"; - h = this.G; + h = this.D; b = null; break; case 2: @@ -1176,13 +1226,13 @@ u.import = function(a, c) { if (c) { switch(z(c) && (c = JSON.parse(c)), a) { case "tag": - this.G = c; + this.D = c; break; case "reg": this.fastupdate = !1; - this.h = c; + this.reg = c; for (let e = 0, d; e < this.field.length; e++) { - d = this.index[this.field[e]], d.h = c, d.fastupdate = !1; + d = this.index[this.field[e]], d.reg = c, d.fastupdate = !1; } break; case "store": diff --git a/dist/flexsearch.compact.min.js b/dist/flexsearch.compact.min.js index 498cc83..4977752 100644 --- a/dist/flexsearch.compact.min.js +++ b/dist/flexsearch.compact.min.js @@ -15,35 +15,37 @@ function z(a){return"string"===typeof a}function E(a){return"object"===typeof a} ["\u0477","\u0475"],["\u04c2","\u0436"],["\u04d1","\u0430"],["\u04d3","\u0430"],["\u04d7","\u0435"],["\u04db","\u04d9"],["\u04dd","\u0436"],["\u04df","\u0437"],["\u04e3","\u0438"],["\u04e5","\u0438"],["\u04e7","\u043e"],["\u04eb","\u04e9"],["\u04ed","\u044d"],["\u04ef","\u0443"],["\u04f1","\u0443"],["\u04f3","\u0443"],["\u04f5","\u0447"]];const ca=/[^\p{L}\p{N}]+/u,da=/(\d{3})/g,ea=/(\D)(\d{3})/g,fa=/(\d{3})(\D)/g,H="".normalize&&/[\u0300-\u036f]/g;function I(a){if(!this)return new I(...arguments);for(let c=0;cthis.stemmer.get(l)),k=1);this.matcher&& -1this.matcher.get(l)),k=1);g&&k&&(g.lengththis.R&&(this.J.clear(),this.G=this.G/1.1|0));g&&b.push(g)}this.finalize&&(b=this.finalize(b)||b);this.cache&&a.length<=this.A&&(this.H.set(a,b),this.H.size>this.R&&(this.H.clear(),this.A=this.A/1.1|0));return b};function ha(a){a.L=null;a.H.clear();a.J.clear()};function ia(a,c,b){a=("object"===typeof a?""+a.query:a).toLowerCase();let e=this.cache.get(a);if(!e){e=this.search(a,c,b);if(e.then){const d=this;e.then(function(f){d.cache.set(a,f);return f})}this.cache.set(a,e)}return e}function J(a){this.limit=a&&!0!==a?a:1E3;this.cache=new Map;this.A=""}J.prototype.set=function(a,c){this.cache.set(this.A=a,c);this.cache.size>this.limit&&this.cache.delete(this.cache.keys().next().value)}; -J.prototype.get=function(a){const c=this.cache.get(a);c&&this.A!==a&&(this.cache.delete(a),this.cache.set(this.A=a,c));return c};J.prototype.remove=function(a){for(const c of this.cache){const b=c[0];c[1].includes(a)&&this.cache.delete(b)}};J.prototype.clear=function(){this.cache.clear();this.A=""};const ja={normalize:function(a){return a.toLowerCase()},dedupe:!1};const K=new Map([["b","p"],["v","f"],["w","f"],["z","s"],["x","s"],["d","t"],["n","m"],["c","k"],["g","k"],["j","k"],["q","k"],["i","e"],["y","e"],["u","o"]]);const ka=new Map([["ai","ei"],["ae","a"],["oe","o"],["ue","u"],["sh","s"],["ch","c"],["th","t"],["ph","f"],["pf","f"]]),la=[/([^aeo])h([aeo$])/g,"$1$2",/([aeo])h([^aeo]|$)/g,"$1$2"];const ma={a:"",e:"",i:"",o:"",u:"",y:"",b:1,f:1,p:1,v:1,c:2,g:2,j:2,k:2,q:2,s:2,x:2,z:2,"\u00df":2,d:3,t:3,l:4,m:5,n:5,r:6};const na=/[\x00-\x7F]+/g;const oa=/[\x00-\x7F]+/g;const pa=/[\x00-\x7F]+/g;var qa={LatinExact:{normalize:!1,dedupe:!1},LatinDefault:ja,LatinSimple:{normalize:!0,dedupe:!0},LatinBalance:{normalize:!0,dedupe:!0,mapper:K},LatinAdvanced:{normalize:!0,dedupe:!0,mapper:K,replacer:la,matcher:ka},LatinExtra:{normalize:!0,dedupe:!0,mapper:K,replacer:la.concat([/(?!^)[aeoy]/g,""]),matcher:ka},LatinSoundex:{normalize:!0,dedupe:!1,include:{letter:!0},finalize:function(a){for(let b=0;bf;h--){g=n.substring(f,h);var k=this.score?this.score(c,n,p,g,f):N(t,e,p,d,f);O(this,m,g,k,a,b)}break}case "reverse":if(1< -d){for(h=d-1;0g?0:1),e,p,h-1,k-1),B=this.bidirectional&&n>f;O(this,l,B?f:n,w,a,b,B?n:f)}}}}this.fastupdate||this.h.add(a)}}return this}; -function O(a,c,b,e,d,f,g){let h=g?a.D:a.map,k;c[b]&&g&&(k=c[b])[g]||(g?(c=k||(c[b]=y()),c[g]=1,(k=h.get(g))?h=k:h.set(g,h=new Map)):c[b]=1,(k=h.get(b))?h=k:h.set(b,h=[]),h=h[e]||(h[e]=[]),f&&h.includes(d)||(h.push(d),a.fastupdate&&((c=a.h.get(d))?c.push(h):a.h.set(d,[h]))))}function N(a,c,b,e,d){return b&&1c?c?a.slice(b,b+c):a.slice(b):a;let e=[];for(let d=0,f,g;d=g){b-=g;continue}bc&&(f=f.slice(0,c),g=f.length),e.push(f);else{if(g>=c)return g>c&&(f=f.slice(0,c)),f;e=[f]}c-=g;if(!c)break}return e.length?e=1c||d)b=b.slice(d,c+d)}e=b}return e};function R(a,c,b,e){return(a=S(this,a,c))&&a.length?Q(a,b,e):[]} -function va(a,c,b,e,d,f,g){let h=[];if(a){e=Math.min(a.length,e);for(let k=0,l=0,m;k=d)))break;if(h.length){if(g)return Q(h,d,0);c.push(h);return}}return!b&&h}function S(a,c,b){let e;b&&(e=a.bidirectional&&c>b);a=b?(a=a.D.get(e?c:b))&&a.get(e?b:c):a.map.get(c);return a};M.prototype.remove=function(a,c){const b=this.h.size&&(this.fastupdate?this.h.get(a):this.h.has(a));if(b){if(this.fastupdate)for(let e=0,d;ed.length)d.pop();else{const f=d.indexOf(a);f===b.length-1?d.pop():d.splice(f,1)}}else T(this.map,a),this.depth&&T(this.D,a);c||this.h.delete(a)}this.cache&&this.cache.remove(a);return this}; -function T(a,c){let b=0;if(a.constructor===Array)for(let e=0,d,f;eb.add(a,c)):this.add(a,c)}return this.remove(a).add(a,c)}; -function U(a){let c=0;if(a.constructor===Array)for(let b=0,e;b{f=l}));let h,k;switch(d||(d=0)){case 0:h="reg";if(this.fastupdate){k=y();for(let l of this.h.keys())k[l]=1}else k=this.h;break;case 1:h="cfg";k={doc:0,opt:this.A?1:0};break;case 2:h="map";k=this.map;break;case 3:h="ctx";k=this.D;break;default:"undefined"===typeof b&&f&&f();return}ra(a,c||this,b,h,e,d,k,f);return g}; -u.import=function(a,c){if(c)switch(z(c)&&(c=JSON.parse(c)),a){case "cfg":this.A=!!c.opt;break;case "reg":this.fastupdate=!1;this.h=c;break;case "map":this.map=c;break;case "ctx":this.D=c}};ta(M.prototype);V.prototype.add=function(a,c,b){E(a)&&(c=a,a=F(c,this.key));if(c&&(a||0===a)){if(!b&&this.h.has(a))return this.update(a,c);for(let h=0,k;hthis.stemmer.get(l)),k=1);this.matcher&& +1this.matcher.get(l)),k=1);g&&k&&(g.lengththis.O&&(this.H.clear(),this.D=this.D/1.1|0));g&&b.push(g)}this.finalize&&(b=this.finalize(b)||b);this.cache&&a.length<=this.h&&(this.F.set(a,b),this.F.size>this.O&&(this.F.clear(),this.h=this.h/1.1|0));return b};function ha(a){a.J=null;a.F.clear();a.H.clear()};function ia(a,c,b){a=("object"===typeof a?""+a.query:a).toLowerCase();let e=this.cache.get(a);if(!e){e=this.search(a,c,b);if(e.then){const d=this;e.then(function(f){d.cache.set(a,f);return f})}this.cache.set(a,e)}return e}function J(a){this.limit=a&&!0!==a?a:1E3;this.cache=new Map;this.h=""}J.prototype.set=function(a,c){this.cache.set(this.h=a,c);this.cache.size>this.limit&&this.cache.delete(this.cache.keys().next().value)}; +J.prototype.get=function(a){const c=this.cache.get(a);c&&this.h!==a&&(this.cache.delete(a),this.cache.set(this.h=a,c));return c};J.prototype.remove=function(a){for(const c of this.cache){const b=c[0];c[1].includes(a)&&this.cache.delete(b)}};J.prototype.clear=function(){this.cache.clear();this.h=""};const ja={normalize:function(a){return a.toLowerCase()},dedupe:!1};const K=new Map([["b","p"],["v","f"],["w","f"],["z","s"],["x","s"],["d","t"],["n","m"],["c","k"],["g","k"],["j","k"],["q","k"],["i","e"],["y","e"],["u","o"]]);const ka=new Map([["ai","ei"],["ae","a"],["oe","o"],["ue","u"],["sh","s"],["ch","c"],["th","t"],["ph","f"],["pf","f"]]),la=[/([^aeo])h([aeo$])/g,"$1$2",/([aeo])h([^aeo]|$)/g,"$1$2"];const ma={a:"",e:"",i:"",o:"",u:"",y:"",b:1,f:1,p:1,v:1,c:2,g:2,j:2,k:2,q:2,s:2,x:2,z:2,"\u00df":2,d:3,t:3,l:4,m:5,n:5,r:6};const na=/[\x00-\x7F]+/g;const oa=/[\x00-\x7F]+/g;const pa=/[\x00-\x7F]+/g;var qa={LatinExact:{normalize:!1,dedupe:!1},LatinDefault:ja,LatinSimple:{normalize:!0,dedupe:!0},LatinBalance:{normalize:!0,dedupe:!0,mapper:K},LatinAdvanced:{normalize:!0,dedupe:!0,mapper:K,replacer:la,matcher:ka},LatinExtra:{normalize:!0,dedupe:!0,mapper:K,replacer:la.concat([/(?!^)[aeoy]/g,""]),matcher:ka},LatinSoundex:{normalize:!0,dedupe:!1,include:{letter:!0},finalize:function(a){for(let b=0;bf;h--){g=n.substring(f,h);var k=this.score?this.score(c,n,p,g,f):N(t,e,p,d,f);O(this,m,g,k,a,b)}break}case "reverse":if(1< +d){for(h=d-1;0g?0:1),e,p,h-1,k-1),B=this.bidirectional&&n>f;O(this,l,B?f:n,w,a,b,B?n:f)}}}}this.fastupdate||this.reg.add(a)}}return this}; +function O(a,c,b,e,d,f,g){let h=g?a.ctx:a.map,k;c[b]&&g&&(k=c[b])[g]||(g?(c=k||(c[b]=y()),c[g]=1,(k=h.get(g))?h=k:h.set(g,h=new Map)):c[b]=1,(k=h.get(b))?h=k:h.set(b,h=[]),h=h[e]||(h[e]=[]),f&&h.includes(d)||(h.push(d),a.fastupdate&&((c=a.reg.get(d))?c.push(h):a.reg.set(d,[h]))))}function N(a,c,b,e,d){return b&&1c?c?a.slice(b,b+c):a.slice(b):a;let e=[];for(let d=0,f,g;d=g){b-=g;continue}bc&&(f=f.slice(0,c),g=f.length),e.push(f);else{if(g>=c)return g>c&&(f=f.slice(0,c)),f;e=[f]}c-=g;if(!c)break}return e.length?e=1c||d)b=b.slice(d,c+d)}e=b}return e};function R(a,c,b,e){return(a=S(this,a,c))&&a.length?Q(a,b,e):[]} +function va(a,c,b,e,d,f,g){let h=[];if(a){e=Math.min(a.length,e);for(let k=0,l=0,m;k=d)))break;if(h.length){if(g)return Q(h,d,0);c.push(h);return}}return!b&&h}function S(a,c,b){let e;b&&(e=a.bidirectional&&c>b);a=b?(a=a.ctx.get(e?c:b))&&a.get(e?b:c):a.map.get(c);return a};M.prototype.remove=function(a,c){const b=this.reg.size&&(this.fastupdate?this.reg.get(a):this.reg.has(a));if(b){if(this.fastupdate)for(let e=0,d;ed.length)d.pop();else{const f=d.indexOf(a);f===b.length-1?d.pop():d.splice(f,1)}}else T(this.map,a),this.depth&&T(this.ctx,a);c||this.reg.delete(a)}this.cache&&this.cache.remove(a);return this}; +function T(a,c){let b=0;if(a.constructor===Array)for(let e=0,d,f;eb.add(a,c)):this.add(a,c)}return this.remove(a).add(a,c)}; +function U(a){let c=0;if(a.constructor===Array)for(let b=0,e;b{f=l}));let h,k;switch(d||(d=0)){case 0:h="reg";if(this.fastupdate){k=y();for(let l of this.reg.keys())k[l]=1}else k=this.reg;break;case 1:h="cfg";k={doc:0,opt:this.h?1:0};break;case 2:h="map";k=this.map;break;case 3:h="ctx";k=this.ctx;break;default:"undefined"===typeof b&&f&&f();return}ra(a,c||this,b,h,e,d,k,f);return g}; +u.import=function(a,c){if(c)switch(z(c)&&(c=JSON.parse(c)),a){case "cfg":this.h=!!c.opt;break;case "reg":this.fastupdate=!1;this.reg=c;break;case "map":this.map=c;break;case "ctx":this.ctx=c}}; +u.serialize=function(a=!0){if(!this.reg.size)return"";let c="",b="";for(var e of this.reg.keys())b||(b=typeof e),c+=(c?",":"")+("string"===b?'"'+e+'"':e);c="index.reg=new Set(["+c+"]);";e="";for(var d of this.map.entries()){var f=d[0],g=d[1],h="";for(let m=0,q;mb||e)a=a.slice(e,e+b);d&&(a=xa.call(this,a));return a}} -function xa(a){const c=Array(a.length);for(let b=0,e;b{f=k}));d||(d=0);e||(e=0);if(e{f=k}));d||(d=0);e||(e=0);if(e this.stemmer.get(h)), g = 1); - this.matcher && 1 < d.length && (this.H || (this.H = new RegExp("(" + this.F + ")", "g")), d = d.replace(this.H, h => this.matcher.get(h)), g = 1); - d && g && (d.length < this.minlength || this.filter && this.filter.has(d)) && (d = ""); - if (d && (this.mapper || this.dedupe && 1 < d.length)) { - var e = ""; - for (let h = 0, k = "", n, l; h < d.length; h++) { - n = d.charAt(h), n === k && this.dedupe || ((l = this.mapper && this.mapper.get(n)) || "" === l ? l === k && this.dedupe || !(k = l) || (e += l) : e += k = n); + this.stemmer && 2 < e.length && (this.G || (this.G = new RegExp("(?!^)(" + this.B + ")$")), e = e.replace(this.G, h => this.stemmer.get(h)), g = 1); + this.matcher && 1 < e.length && (this.F || (this.F = new RegExp("(" + this.C + ")", "g")), e = e.replace(this.F, h => this.matcher.get(h)), g = 1); + e && g && (e.length < this.minlength || this.filter && this.filter.has(e)) && (e = ""); + if (e && (this.mapper || this.dedupe && 1 < e.length)) { + var d = ""; + for (let h = 0, k = "", m, l; h < e.length; h++) { + m = e.charAt(h), m === k && this.dedupe || ((l = this.mapper && this.mapper.get(m)) || "" === l ? l === k && this.dedupe || !(k = l) || (d += l) : d += k = m); } - d = e; + e = d; } - if (d && this.replacer) { - for (e = 0; d && e < this.replacer.length; e += 2) { - d = d.replace(this.replacer[e], this.replacer[e + 1]); + if (e && this.replacer) { + for (d = 0; e && d < this.replacer.length; d += 2) { + e = e.replace(this.replacer[d], this.replacer[d + 1]); } } - d && b.push(d); + e && b.push(e); } this.finalize && (b = this.finalize(b) || b); return b; @@ -183,10 +183,10 @@ const la = /[\x00-\x7F]+/g; var ma = {LatinExact:{normalize:!1, dedupe:!1}, LatinDefault:K, LatinSimple:{normalize:!0, dedupe:!0}, LatinBalance:{normalize:!0, dedupe:!0, mapper:L}, LatinAdvanced:{normalize:!0, dedupe:!0, mapper:L, replacer:ha, matcher:M}, LatinExtra:{normalize:!0, dedupe:!0, mapper:L, replacer:ha.concat([/(?!^)[aeoy]/g, ""]), matcher:M}, LatinSoundex:{normalize:!0, dedupe:!1, include:{letter:!0}, finalize:function(a) { for (let b = 0; b < a.length; b++) { var c = a[b]; - let e = c.charAt(0), f = ia[e]; - for (let d = 1, g; d < c.length && (g = c.charAt(d), "h" === g || "w" === g || !(g = ia[g]) || g === f || (e += g, f = g, 4 !== e.length)); d++) { + let d = c.charAt(0), f = ia[d]; + for (let e = 1, g; e < c.length && (g = c.charAt(e), "h" === g || "w" === g || !(g = ia[g]) || g === f || (d += g, f = g, 4 !== d.length)); e++) { } - a[b] = e; + a[b] = d; } }}, ArabicDefault:{rtl:!0, normalize:!1, dedupe:!0, prepare:function(a) { return ("" + a).replace(ja, " "); @@ -195,10 +195,10 @@ var ma = {LatinExact:{normalize:!1, dedupe:!1}, LatinDefault:K, LatinSimple:{nor }}, CyrillicDefault:{normalize:!1, dedupe:!0, prepare:function(a) { return ("" + a).replace(la, " "); }}}; -function na(a, c, b, e, f, d, g, h) { - (e = a(b ? b + "." + e : e, JSON.stringify(g))) && e.then ? e.then(function() { - c.export(a, c, b, f, d + 1, h); - }) : c.export(a, c, b, f, d + 1, h); +function na(a, c, b, d, f, e, g, h) { + (d = a(b ? b + "." + d : d, JSON.stringify(g))) && d.then ? d.then(function() { + c.export(a, c, b, f, e + 1, h); + }) : c.export(a, c, b, f, e + 1, h); } ;const oa = {memory:{resolution:1}, performance:{resolution:6, fastupdate:!0, context:{depth:1, resolution:3}}, match:{tokenize:"forward"}, score:{resolution:9, context:{depth:2, resolution:9}}}; function pa(a) { @@ -212,36 +212,36 @@ function N(a) { this[a + "Async"] = function() { var c = arguments; const b = c[c.length - 1]; - let e; - "function" === typeof b && (e = b, delete c[c.length - 1]); + let d; + "function" === typeof b && (d = b, delete c[c.length - 1]); this.async = !0; c = this[a].apply(this, c); this.async = !1; - e && (c.then ? c.then(e) : e(c)); + d && (c.then ? c.then(d) : d(c)); return c; }; } ;y(); -O.prototype.add = function(a, c, b, e) { +O.prototype.add = function(a, c, b, d) { if (c && (a || 0 === a)) { - if (!e && !b && this.h.has(a)) { + if (!d && !b && this.reg.has(a)) { return this.update(a, c); } c = this.encoder.encode(c); - if (e = c.length) { - const n = y(), l = y(), r = this.depth, t = this.resolution; - for (let p = 0; p < e; p++) { - let m = c[this.rtl ? e - 1 - p : p]; - var f = m.length; - if (f && (r || !l[m])) { - var d = this.score ? this.score(c, m, p, null, 0) : P(t, e, p), g = ""; + if (d = c.length) { + const m = y(), l = y(), r = this.depth, t = this.resolution; + for (let p = 0; p < d; p++) { + let n = c[this.rtl ? d - 1 - p : p]; + var f = n.length; + if (f && (r || !l[n])) { + var e = this.score ? this.score(c, n, p, null, 0) : P(t, d, p), g = ""; switch(this.tokenize) { case "full": if (2 < f) { - for (d = 0; d < f; d++) { - for (var h = f; h > d; h--) { - g = m.substring(d, h); - var k = this.score ? this.score(c, m, p, g, d) : P(t, e, p, f, d); + for (e = 0; e < f; e++) { + for (var h = f; h > e; h--) { + g = n.substring(e, h); + var k = this.score ? this.score(c, n, p, g, e) : P(t, d, p, f, e); Q(this, l, g, k, a, b); } } @@ -250,63 +250,63 @@ O.prototype.add = function(a, c, b, e) { case "reverse": if (1 < f) { for (h = f - 1; 0 < h; h--) { - g = m[h] + g, k = this.score ? this.score(c, m, p, g, h) : P(t, e, p, f, h), Q(this, l, g, k, a, b); + g = n[h] + g, k = this.score ? this.score(c, n, p, g, h) : P(t, d, p, f, h), Q(this, l, g, k, a, b); } g = ""; } case "forward": if (1 < f) { for (h = 0; h < f; h++) { - g += m[h], Q(this, l, g, d, a, b); + g += n[h], Q(this, l, g, e, a, b); } break; } default: - if (Q(this, l, m, d, a, b), r && 1 < e && p < e - 1) { - for (f = y(), g = this.K, d = m, h = Math.min(r + 1, e - p), f[d] = 1, k = 1; k < h; k++) { - if ((m = c[this.rtl ? e - 1 - p - k : p + k]) && !f[m]) { - f[m] = 1; - const w = this.score ? this.score(c, d, p, m, k) : P(g + (e / 2 > g ? 0 : 1), e, p, h - 1, k - 1), B = this.bidirectional && m > d; - Q(this, n, B ? d : m, w, a, b, B ? m : d); + if (Q(this, l, n, e, a, b), r && 1 < d && p < d - 1) { + for (f = y(), g = this.I, e = n, h = Math.min(r + 1, d - p), f[e] = 1, k = 1; k < h; k++) { + if ((n = c[this.rtl ? d - 1 - p - k : p + k]) && !f[n]) { + f[n] = 1; + const w = this.score ? this.score(c, e, p, n, k) : P(g + (d / 2 > g ? 0 : 1), d, p, h - 1, k - 1), B = this.bidirectional && n > e; + Q(this, m, B ? e : n, w, a, b, B ? n : e); } } } } } } - this.fastupdate || this.h.add(a); + this.fastupdate || this.reg.add(a); } } return this; }; -function Q(a, c, b, e, f, d, g) { - let h = g ? a.B : a.map, k; - c[b] && g && (k = c[b])[g] || (g ? (c = k || (c[b] = y()), c[g] = 1, (k = h.get(g)) ? h = k : h.set(g, h = new Map())) : c[b] = 1, (k = h.get(b)) ? h = k : h.set(b, h = []), h = h[e] || (h[e] = []), d && h.includes(f) || (h.push(f), a.fastupdate && ((c = a.h.get(f)) ? c.push(h) : a.h.set(f, [h])))); +function Q(a, c, b, d, f, e, g) { + let h = g ? a.ctx : a.map, k; + c[b] && g && (k = c[b])[g] || (g ? (c = k || (c[b] = y()), c[g] = 1, (k = h.get(g)) ? h = k : h.set(g, h = new Map())) : c[b] = 1, (k = h.get(b)) ? h = k : h.set(b, h = []), h = h[d] || (h[d] = []), e && h.includes(f) || (h.push(f), a.fastupdate && ((c = a.reg.get(f)) ? c.push(h) : a.reg.set(f, [h])))); } -function P(a, c, b, e, f) { - return b && 1 < a ? c + (e || 0) <= a ? b + (f || 0) : (a - 1) / (c + (e || 0)) * (b + (f || 0)) + 1 | 0 : 0; +function P(a, c, b, d, f) { + return b && 1 < a ? c + (d || 0) <= a ? b + (f || 0) : (a - 1) / (c + (d || 0)) * (b + (f || 0)) + 1 | 0 : 0; } ;function R(a, c, b) { if (1 === a.length) { return a = a[0], a = b || a.length > c ? c ? a.slice(b, b + c) : a.slice(b) : a; } - let e = []; - for (let f = 0, d, g; f < a.length; f++) { - if ((d = a[f]) && (g = d.length)) { + let d = []; + for (let f = 0, e, g; f < a.length; f++) { + if ((e = a[f]) && (g = e.length)) { if (b) { if (b >= g) { b -= g; continue; } - b < g && (d = c ? d.slice(b, b + c) : d.slice(b), g = d.length, b = 0); + b < g && (e = c ? e.slice(b, b + c) : e.slice(b), g = e.length, b = 0); } - if (e.length) { - g > c && (d = d.slice(0, c), g = d.length), e.push(d); + if (d.length) { + g > c && (e = e.slice(0, c), g = e.length), d.push(e); } else { if (g >= c) { - return g > c && (d = d.slice(0, c)), d; + return g > c && (e = e.slice(0, c)), e; } - e = [d]; + d = [e]; } c -= g; if (!c) { @@ -314,29 +314,29 @@ function P(a, c, b, e, f) { } } } - return e.length ? e = 1 < e.length ? [].concat.apply([], e) : e[0] : e; + return d.length ? d = 1 < d.length ? [].concat.apply([], d) : d[0] : d; } ;function qa(a, c) { - const b = y(), e = y(), f = []; - for (let d = 0; d < a.length; d++) { - b[a[d]] = 1; + const b = y(), d = y(), f = []; + for (let e = 0; e < a.length; e++) { + b[a[e]] = 1; } - for (let d = 0, g; d < c.length; d++) { - g = c[d]; + for (let e = 0, g; e < c.length; e++) { + g = c[e]; for (let h = 0, k; h < g.length; h++) { - k = g[h], b[k] && !e[k] && (e[k] = 1, f.push(k)); + k = g[h], b[k] && !d[k] && (d[k] = 1, f.push(k)); } } return f; } ;O.prototype.search = function(a, c, b) { b || (!c && E(a) ? (b = a, a = "") : E(c) && (b = c, c = 0)); - var e = [], f = 0; + var d = [], f = 0; if (b) { a = b.query || a; c = b.limit || c; f = b.offset || 0; - var d = b.context; + var e = b.context; var g = b.suggest; } a = this.encoder.encode(a); @@ -345,79 +345,79 @@ function P(a, c, b, e, f) { if (1 === b) { return S.call(this, a[0], "", c, f); } - d = this.depth && !1 !== d; - if (2 === b && d && !g) { + e = this.depth && !1 !== e; + if (2 === b && e && !g) { return S.call(this, a[0], a[1], c, f); } var h = 0, k = 0; if (1 < b) { - var n = y(); + var m = y(); const r = []; for (let t = 0, p; t < b; t++) { - if ((p = a[t]) && !n[p]) { + if ((p = a[t]) && !m[p]) { if (g || T(this, p)) { - r.push(p), n[p] = 1; + r.push(p), m[p] = 1; } else { - return e; + return d; } - const m = p.length; - h = Math.max(h, m); - k = k ? Math.min(k, m) : m; + const n = p.length; + h = Math.max(h, n); + k = k ? Math.min(k, n) : n; } } a = r; b = a.length; } if (!b) { - return e; + return d; } - n = 0; + m = 0; if (1 === b) { return S.call(this, a[0], "", c, f); } - if (2 === b && d && !g) { + if (2 === b && e && !g) { return S.call(this, a[0], a[1], c, f); } if (1 < b) { - if (d) { + if (e) { var l = a[0]; - n = 1; + m = 1; } else { 9 < h && 3 < h / k && a.sort(aa); } } - for (let r, t; n < b; n++) { - t = a[n]; - l ? (r = T(this, t, l), r = ra(r, e, g, this.K, c, f, 2 === b), g && !1 === r && e.length || (l = t)) : (r = T(this, t), r = ra(r, e, g, this.resolution, c, f, 1 === b)); + for (let r, t; m < b; m++) { + t = a[m]; + l ? (r = T(this, t, l), r = ra(r, d, g, this.I, c, f, 2 === b), g && !1 === r && d.length || (l = t)) : (r = T(this, t), r = ra(r, d, g, this.resolution, c, f, 1 === b)); if (r) { return r; } - if (g && n === b - 1) { - d = e.length; - if (!d) { + if (g && m === b - 1) { + e = d.length; + if (!e) { if (l) { l = ""; - n = -1; + m = -1; continue; } - return e; + return d; } - if (1 === d) { - return R(e[0], c, f); + if (1 === e) { + return R(d[0], c, f); } } } a: { - a = e; - e = this.resolution; + a = d; + d = this.resolution; l = a.length; b = []; - d = y(); - for (let r = 0, t, p, m, w; r < e; r++) { + e = y(); + for (let r = 0, t, p, n, w; r < d; r++) { for (k = 0; k < l; k++) { - if (m = a[k], r < m.length && (t = m[r])) { - for (n = 0; n < t.length; n++) { - p = t[n], (h = d[p]) ? d[p]++ : (h = 0, d[p] = 1), w = b[h] || (b[h] = []), w.push(p); + if (n = a[k], r < n.length && (t = n[r])) { + for (m = 0; m < t.length; m++) { + p = t[m], (h = e[p]) ? e[p]++ : (h = 0, e[p] = 1), w = b[h] || (b[h] = []), w.push(p); } } } @@ -427,12 +427,12 @@ function P(a, c, b, e, f) { if (1 < b.length) { g = b; a = []; - e = y(); - d = g.length; - for (k = 0; k < d; k++) { - for (l = g[k], h = l.length, n = 0; n < h; n++) { - if (b = l[n], !e[b]) { - if (e[b] = 1, f) { + d = y(); + e = g.length; + for (k = 0; k < e; k++) { + for (l = g[k], h = l.length, m = 0; m < h; m++) { + if (b = l[m], !d[b]) { + if (d[b] = 1, f) { f--; } else { if (a.push(b), a.length === c) { @@ -449,7 +449,7 @@ function P(a, c, b, e, f) { b = c; } else { if (a < l) { - e = []; + d = []; break a; } b = b[a - 1]; @@ -458,20 +458,20 @@ function P(a, c, b, e, f) { } } } - e = b; + d = b; } - return e; + return d; }; -function S(a, c, b, e) { - return (a = T(this, a, c)) && a.length ? R(a, b, e) : []; +function S(a, c, b, d) { + return (a = T(this, a, c)) && a.length ? R(a, b, d) : []; } -function ra(a, c, b, e, f, d, g) { +function ra(a, c, b, d, f, e, g) { let h = []; if (a) { - e = Math.min(a.length, e); - for (let k = 0, n = 0, l; k < e; k++) { + d = Math.min(a.length, d); + for (let k = 0, m = 0, l; k < d; k++) { if (l = a[k]) { - if (d && l && g && (l.length <= d ? (d -= l.length, l = null) : (l = l.slice(d), d = 0)), l && (h[k] = l, g && (n += l.length, n >= f))) { + if (e && l && g && (l.length <= e ? (e -= l.length, l = null) : (l = l.slice(e), e = 0)), l && (h[k] = l, g && (m += l.length, m >= f))) { break; } } @@ -487,39 +487,39 @@ function ra(a, c, b, e, f, d, g) { return !b && h; } function T(a, c, b) { - let e; - b && (e = a.bidirectional && c > b); - a = b ? (a = a.B.get(e ? c : b)) && a.get(e ? b : c) : a.map.get(c); + let d; + b && (d = a.bidirectional && c > b); + a = b ? (a = a.ctx.get(d ? c : b)) && a.get(d ? b : c) : a.map.get(c); return a; } ;O.prototype.remove = function(a, c) { - const b = this.h.size && (this.fastupdate ? this.h.get(a) : this.h.has(a)); + const b = this.reg.size && (this.fastupdate ? this.reg.get(a) : this.reg.has(a)); if (b) { if (this.fastupdate) { - for (let e = 0, f; e < b.length; e++) { - if (f = b[e]) { + for (let d = 0, f; d < b.length; d++) { + if (f = b[d]) { if (2 > f.length) { f.pop(); } else { - const d = f.indexOf(a); - d === b.length - 1 ? f.pop() : f.splice(d, 1); + const e = f.indexOf(a); + e === b.length - 1 ? f.pop() : f.splice(e, 1); } } } } else { - U(this.map, a), this.depth && U(this.B, a); + U(this.map, a), this.depth && U(this.ctx, a); } - c || this.h.delete(a); + c || this.reg.delete(a); } return this; }; function U(a, c) { let b = 0; if (a.constructor === Array) { - for (let e = 0, f, d; e < a.length; e++) { - if ((f = a[e]) && f.length) { - if (d = f.indexOf(c), 0 <= d) { - 1 < f.length ? (f.splice(d, 1), b++) : delete a[e]; + for (let d = 0, f, e; d < a.length; d++) { + if ((f = a[d]) && f.length) { + if (e = f.indexOf(c), 0 <= e) { + 1 < f.length ? (f.splice(e, 1), b++) : delete a[d]; break; } else { b++; @@ -527,9 +527,9 @@ function U(a, c) { } } } else { - for (let e of a) { - const f = e[0], d = U(e[1], c); - d ? b += d : a.delete(f); + for (let d of a) { + const f = d[0], e = U(d[1], c); + e ? b += e : a.delete(f); } } return b; @@ -545,8 +545,8 @@ function U(a, c) { a = {}; } b = a.context || {}; - const e = a.encode || a.encoder || K; - this.encoder = e.encode ? e : "object" === typeof e ? new J(e) : {encode:e}; + const d = a.encode || a.encoder || K; + this.encoder = d.encode ? d : "object" === typeof d ? new J(d) : {encode:d}; let f; this.resolution = a.resolution || 9; this.tokenize = f = a.tokenize || "strict"; @@ -555,57 +555,57 @@ function U(a, c) { this.fastupdate = !!a.fastupdate; this.score = a.score || null; this.map = new Map(); - this.B = new Map(); - this.h = c || (this.fastupdate ? new Map() : new Set()); - this.K = b.resolution || 1; - this.rtl = e.rtl || a.rtl || !1; + this.ctx = new Map(); + this.reg = c || (this.fastupdate ? new Map() : new Set()); + this.I = b.resolution || 1; + this.rtl = d.rtl || a.rtl || !1; } -v = O.prototype; -v.clear = function() { +u = O.prototype; +u.clear = function() { this.map.clear(); - this.B.clear(); - this.h.clear(); + this.ctx.clear(); + this.reg.clear(); return this; }; -v.append = function(a, c) { +u.append = function(a, c) { return this.add(a, c, !0); }; -v.contain = function(a) { - return this.h.has(a); +u.contain = function(a) { + return this.reg.has(a); }; -v.update = function(a, c) { +u.update = function(a, c) { if (this.async) { - const b = this, e = this.remove(a); - return e.then ? e.then(() => b.add(a, c)) : this.add(a, c); + const b = this, d = this.remove(a); + return d.then ? d.then(() => b.add(a, c)) : this.add(a, c); } return this.remove(a).add(a, c); }; function V(a) { let c = 0; if (a.constructor === Array) { - for (let b = 0, e; b < a.length; b++) { - (e = a[b]) && (c += e.length); + for (let b = 0, d; b < a.length; b++) { + (d = a[b]) && (c += d.length); } } else { for (const b of a) { - const e = b[0], f = V(b[1]); - f ? c += f : a.delete(e); + const d = b[0], f = V(b[1]); + f ? c += f : a.delete(d); } } return c; } -v.cleanup = function() { +u.cleanup = function() { if (!this.fastupdate) { return console.info('Cleanup the index isn\'t required when not using "fastupdate".'), this; } V(this.map); - this.depth && V(this.B); + this.depth && V(this.ctx); return this; }; -v.export = function(a, c, b, e, f, d) { +u.export = function(a, c, b, d, f, e) { let g = !0; - "undefined" === typeof d && (g = new Promise(n => { - d = n; + "undefined" === typeof e && (g = new Promise(m => { + e = m; })); let h, k; switch(f || (f = 0)) { @@ -613,16 +613,16 @@ v.export = function(a, c, b, e, f, d) { h = "reg"; if (this.fastupdate) { k = y(); - for (let n of this.h.keys()) { - k[n] = 1; + for (let m of this.reg.keys()) { + k[m] = 1; } } else { - k = this.h; + k = this.reg; } break; case 1: h = "cfg"; - k = {doc:0, opt:this.F ? 1 : 0}; + k = {doc:0, opt:this.C ? 1 : 0}; break; case 2: h = "map"; @@ -630,59 +630,109 @@ v.export = function(a, c, b, e, f, d) { break; case 3: h = "ctx"; - k = this.B; + k = this.ctx; break; default: - "undefined" === typeof b && d && d(); + "undefined" === typeof b && e && e(); return; } - na(a, c || this, b, h, e, f, k, d); + na(a, c || this, b, h, d, f, k, e); return g; }; -v.import = function(a, c) { +u.import = function(a, c) { if (c) { switch(z(c) && (c = JSON.parse(c)), a) { case "cfg": - this.F = !!c.opt; + this.C = !!c.opt; break; case "reg": this.fastupdate = !1; - this.h = c; + this.reg = c; break; case "map": this.map = c; break; case "ctx": - this.B = c; + this.ctx = c; } } }; +u.serialize = function(a = !0) { + if (!this.reg.size) { + return ""; + } + let c = "", b = ""; + for (var d of this.reg.keys()) { + b || (b = typeof d), c += (c ? "," : "") + ("string" === b ? '"' + d + '"' : d); + } + c = "index.reg=new Set([" + c + "]);"; + d = ""; + for (var f of this.map.entries()) { + var e = f[0], g = f[1], h = ""; + for (let l = 0, r; l < g.length; l++) { + r = g[l] || [""]; + var k = ""; + for (var m = 0; m < r.length; m++) { + k += (k ? "," : "") + ("string" === b ? '"' + r[m] + '"' : r[m]); + } + k = "[" + k + "]"; + h += (h ? "," : "") + k; + } + h = '["' + e + '",[' + h + "]]"; + d += (d ? "," : "") + h; + } + d = "index.map=new Map([" + d + "]);"; + f = ""; + for (const l of this.ctx.entries()) { + e = l[0]; + g = l[1]; + for (const r of g.entries()) { + g = r[0]; + h = r[1]; + k = ""; + for (let t = 0, p; t < h.length; t++) { + p = h[t] || [""]; + m = ""; + for (let n = 0; n < p.length; n++) { + m += (m ? "," : "") + ("string" === b ? '"' + p[n] + '"' : p[n]); + } + m = "[" + m + "]"; + k += (k ? "," : "") + m; + } + k = 'new Map([["' + g + '",[' + k + "]]])"; + k = '["' + e + '",' + k + "]"; + f += (f ? "," : "") + k; + } + } + f = "index.ctx=new Map([" + f + "]);"; + return a ? "function inject(index){" + c + d + f + "}" : c + d + f; +}; pa(O.prototype); W.prototype.add = function(a, c, b) { E(a) && (c = a, a = F(c, this.key)); if (c && (a || 0 === a)) { - if (!b && this.h.has(a)) { + if (!b && this.reg.has(a)) { return this.update(a, c); } - for (let f = 0, d; f < this.field.length; f++) { - d = this.C[f]; + for (let f = 0, e; f < this.field.length; f++) { + e = this.A[f]; const g = this.index.get(this.field[f]); - if ("function" === typeof d) { - var e = d(c); - e && g.add(a, e, !1, !0); + if ("function" === typeof e) { + var d = e(c); + d && g.add(a, d, !1, !0); } else { - if (e = d.J, !e || e(c)) { - d.constructor === String ? d = ["" + d] : z(d) && (d = [d]), X(c, d, this.G, 0, g, a, d[0], b); + if (d = e.H, !d || d(c)) { + e.constructor === String ? e = ["" + e] : z(e) && (e = [e]), X(c, e, this.D, 0, g, a, e[0], b); } } } if (this.store && (!b || !this.store.has(a))) { let f; - if (this.A) { + if (this.h) { f = y(); - for (let d = 0, g; d < this.A.length; d++) { - g = this.A[d]; - if ((b = g.J) && !b(c)) { + for (let e = 0, g; e < this.h.length; e++) { + g = this.h[e]; + if ((b = g.H) && !b(c)) { continue; } let h; @@ -691,7 +741,7 @@ W.prototype.add = function(a, c, b) { if (!h) { continue; } - g = [g.L]; + g = [g.J]; } else if (z(g) || g.constructor === String) { f[g] = c[g]; continue; @@ -704,56 +754,56 @@ W.prototype.add = function(a, c, b) { } return this; }; -function Y(a, c, b, e, f, d) { +function Y(a, c, b, d, f, e) { a = a[f]; - if (e === b.length - 1) { - c[f] = d || a; + if (d === b.length - 1) { + c[f] = e || a; } else if (a) { if (a.constructor === Array) { for (c = c[f] = Array(a.length), f = 0; f < a.length; f++) { - Y(a, c, b, e, f); + Y(a, c, b, d, f); } } else { - c = c[f] || (c[f] = y()), f = b[++e], Y(a, c, b, e, f); + c = c[f] || (c[f] = y()), f = b[++d], Y(a, c, b, d, f); } } } -function X(a, c, b, e, f, d, g, h) { +function X(a, c, b, d, f, e, g, h) { if (a = a[g]) { - if (e === c.length - 1) { + if (d === c.length - 1) { if (a.constructor === Array) { - if (b[e]) { + if (b[d]) { for (c = 0; c < a.length; c++) { - f.add(d, a[c], !0, !0); + f.add(e, a[c], !0, !0); } return; } a = a.join(" "); } - f.add(d, a, h, !0); + f.add(e, a, h, !0); } else { if (a.constructor === Array) { for (g = 0; g < a.length; g++) { - X(a, c, b, e, f, d, g, h); + X(a, c, b, d, f, e, g, h); } } else { - g = c[++e], X(a, c, b, e, f, d, g, h); + g = c[++d], X(a, c, b, d, f, e, g, h); } } } } -;W.prototype.search = function(a, c, b, e) { +;W.prototype.search = function(a, c, b, d) { b || (!c && E(a) ? (b = a, a = "") : E(c) && (b = c, c = 0)); let f = []; - var d = []; - let g, h, k, n, l; + var e = []; + let g, h, k, m, l; let r = 0; if (b) { b.constructor === Array && (b = {index:b}); a = b.query || a; var t = b.pluck; h = b.merge; - n = t || b.field || b.index; + m = t || b.field || b.index; l = !1; g = this.store && b.enrich; k = b.suggest; @@ -762,9 +812,9 @@ function X(a, c, b, e, f, d, g, h) { c || (c = 100); if (l) { l.constructor !== Array && (l = [l]); - var m = []; - for (let u = 0, q; u < l.length; u++) { - q = l[u]; + var n = []; + for (let v = 0, q; v < l.length; v++) { + q = l[v]; if (z(q)) { throw Error("A tag option can't be a string, instead it needs a { field: tag } format."); } @@ -772,65 +822,65 @@ function X(a, c, b, e, f, d, g, h) { var w = q.tag; if (w.constructor === Array) { for (var B = 0; B < w.length; B++) { - m.push(q.field, w[B]); + n.push(q.field, w[B]); } } else { - m.push(q.field, w); + n.push(q.field, w); } } else { w = Object.keys(q); for (let C = 0, D, A; C < w.length; C++) { if (D = w[C], A = q[D], A.constructor === Array) { for (B = 0; B < A.length; B++) { - m.push(D, A[B]); + n.push(D, A[B]); } } else { - m.push(D, A); + n.push(D, A); } } } } - if (!m.length) { + if (!n.length) { throw Error("Your tag definition within the search options is probably wrong. No valid tags found."); } - l = m; + l = n; if (!a) { - e = []; - if (m.length) { - for (d = 0; d < m.length; d += 2) { - t = sa.call(this, m[d], m[d + 1], c, p, g), f.push({field:m[d], tag:m[d + 1], result:t}); + d = []; + if (n.length) { + for (e = 0; e < n.length; e += 2) { + t = sa.call(this, n[e], n[e + 1], c, p, g), f.push({field:n[e], tag:n[e + 1], result:t}); } } - return e.length ? Promise.all(e).then(function(u) { - for (let q = 0; q < u.length; q++) { - f[q].result = u[q]; + return d.length ? Promise.all(d).then(function(v) { + for (let q = 0; q < v.length; q++) { + f[q].result = v[q]; } return f; }) : f; } } - z(n) && (n = [n]); + z(m) && (m = [m]); } - n || (n = this.field); - p = !e && (this.worker || this.async) && []; - for (let u = 0, q, C, D; u < n.length; u++) { - C = n[u]; + m || (m = this.field); + p = !d && (this.worker || this.async) && []; + for (let v = 0, q, C, D; v < m.length; v++) { + C = m[v]; let A; z(C) || (A = C, C = A.field, a = A.query || a, c = A.limit || c, k = A.suggest || k); - if (e) { - q = e[u]; + if (d) { + q = d[v]; } else { - if (m = A || b, w = this.index.get(C), l && (m.enrich = !1), p) { - p[u] = w.searchAsync(a, c, m); - m && g && (m.enrich = g); + if (n = A || b, w = this.index.get(C), l && (n.enrich = !1), p) { + p[v] = w.searchAsync(a, c, n); + n && g && (n.enrich = g); continue; } else { - q = w.search(a, c, m), m && g && (m.enrich = g); + q = w.search(a, c, n), n && g && (n.enrich = g); } } D = q && q.length; if (l && D) { - m = []; + n = []; w = 0; for (let G = 0, H, ua; G < l.length; G += 2) { H = this.tag.get(l[G]); @@ -842,13 +892,13 @@ function X(a, c, b, e, f, d, g, h) { } } if (ua = (H = H && H.get(l[G + 1])) && H.length) { - w++, m.push(H); + w++, n.push(H); } else if (!k) { return f; } } if (w) { - q = qa(q, m); + q = qa(q, n); D = q.length; if (!D && !k) { return f; @@ -857,15 +907,15 @@ function X(a, c, b, e, f, d, g, h) { } } if (D) { - d[r] = C, f.push(q), r++; - } else if (1 === n.length) { + e[r] = C, f.push(q), r++; + } else if (1 === m.length) { return f; } } if (p) { - const u = this; + const v = this; return Promise.all(p).then(function(q) { - return q.length ? u.search(a, c, b, q) : q; + return q.length ? v.search(a, c, b, q) : q; }); } if (!r) { @@ -875,52 +925,52 @@ function X(a, c, b, e, f, d, g, h) { return f[0]; } p = []; - for (let u = 0, q; u < d.length; u++) { - q = f[u]; + for (let v = 0, q; v < e.length; v++) { + q = f[v]; g && q.length && !q[0].doc && q.length && (q = ta.call(this, q)); if (t) { return q; } - f[u] = {field:d[u], result:q}; + f[v] = {field:e[v], result:q}; } return h ? va(f, c) : f; }; function va(a, c) { - const b = [], e = y(); - for (let f = 0, d, g; f < a.length; f++) { - d = a[f]; - g = d.result; - for (let h = 0, k, n, l; h < g.length; h++) { - if (n = g[h], k = n.id, l = e[k]) { - l.push(d.field); + const b = [], d = y(); + for (let f = 0, e, g; f < a.length; f++) { + e = a[f]; + g = e.result; + for (let h = 0, k, m, l; h < g.length; h++) { + if (m = g[h], k = m.id, l = d[k]) { + l.push(e.field); } else { if (b.length === c) { return b; } - n.field = e[k] = [d.field]; - b.push(n); + m.field = d[k] = [e.field]; + b.push(m); } } } return b; } -function sa(a, c, b, e, f) { - let d = this.tag.get(a); - if (!d) { +function sa(a, c, b, d, f) { + let e = this.tag.get(a); + if (!e) { return console.warn("Tag '" + a + "' was not found"), []; } - if ((a = (d = d && d.get(c)) && d.length - e) && 0 < a) { - if (a > b || e) { - d = d.slice(e, e + b); + if ((a = (e = e && e.get(c)) && e.length - d) && 0 < a) { + if (a > b || d) { + e = e.slice(d, d + b); } - f && (d = ta.call(this, d)); - return d; + f && (e = ta.call(this, e)); + return e; } } function ta(a) { const c = Array(a.length); - for (let b = 0, e; b < a.length; b++) { - e = a[b], c[b] = {id:e, doc:this.store.get(e)}; + for (let b = 0, d; b < a.length; b++) { + d = a[b], c[b] = {id:d, doc:this.store.get(d)}; } return c; } @@ -930,93 +980,93 @@ function ta(a) { } const c = a.document || a.doc || a; var b; - this.C = []; + this.A = []; this.field = []; - this.G = []; - this.key = (b = c.key || c.id) && Z(b, this.G) || "id"; - this.h = (this.fastupdate = !!a.fastupdate) ? new Map() : new Set(); - this.A = (b = c.store || null) && !0 !== b && []; + this.D = []; + this.key = (b = c.key || c.id) && Z(b, this.D) || "id"; + this.reg = (this.fastupdate = !!a.fastupdate) ? new Map() : new Set(); + this.h = (b = c.store || null) && !0 !== b && []; this.store = b && new Map(); this.async = !1; b = new Map(); - let e = c.index || c.field || c; - z(e) && (e = [e]); - for (let f = 0, d, g; f < e.length; f++) { - d = e[f], z(d) || (g = d, d = d.field), g = E(g) ? Object.assign({}, a, g) : a, b.set(d, new O(g, this.h)), g.custom ? this.C[f] = g.custom : (this.C[f] = Z(d, this.G), g.filter && ("string" === typeof this.C[f] && (this.C[f] = new String(this.C[f])), this.C[f].J = g.filter)), this.field[f] = d; + let d = c.index || c.field || c; + z(d) && (d = [d]); + for (let f = 0, e, g; f < d.length; f++) { + e = d[f], z(e) || (g = e, e = e.field), g = E(g) ? Object.assign({}, a, g) : a, b.set(e, new O(g, this.reg)), g.custom ? this.A[f] = g.custom : (this.A[f] = Z(e, this.D), g.filter && ("string" === typeof this.A[f] && (this.A[f] = new String(this.A[f])), this.A[f].H = g.filter)), this.field[f] = e; } - if (this.A) { + if (this.h) { a = c.store; z(a) && (a = [a]); - for (let f = 0, d, g; f < a.length; f++) { - d = a[f], g = d.field || d, d.custom ? (this.A[f] = d.custom, d.custom.L = g) : (this.A[f] = Z(g, this.G), d.filter && ("string" === typeof this.A[f] && (this.A[f] = new String(this.A[f])), this.A[f].J = d.filter)); + for (let f = 0, e, g; f < a.length; f++) { + e = a[f], g = e.field || e, e.custom ? (this.h[f] = e.custom, e.custom.J = g) : (this.h[f] = Z(g, this.D), e.filter && ("string" === typeof this.h[f] && (this.h[f] = new String(this.h[f])), this.h[f].H = e.filter)); } } this.index = b; } function Z(a, c) { const b = a.split(":"); - let e = 0; + let d = 0; for (let f = 0; f < b.length; f++) { - a = b[f], "]" === a[a.length - 1] && (a = a.substring(0, a.length - 2)) && (c[e] = !0), a && (b[e++] = a); + a = b[f], "]" === a[a.length - 1] && (a = a.substring(0, a.length - 2)) && (c[d] = !0), a && (b[d++] = a); } - e < b.length && (b.length = e); - return 1 < e ? b : b[0]; + d < b.length && (b.length = d); + return 1 < d ? b : b[0]; } -v = W.prototype; -v.append = function(a, c) { +u = W.prototype; +u.append = function(a, c) { return this.add(a, c, !0); }; -v.update = function(a, c) { +u.update = function(a, c) { return this.remove(a).add(a, c); }; -v.remove = function(a) { +u.remove = function(a) { E(a) && (a = F(a, this.key)); for (const c of this.index.values()) { c.remove(a, !0); } - this.h.has(a) && (this.store && this.store.delete(a), this.h.delete(a)); + this.reg.has(a) && (this.store && this.store.delete(a), this.reg.delete(a)); return this; }; -v.clear = function() { +u.clear = function() { for (const a of this.index.values()) { a.clear(); } this.store && this.store.clear(); return this; }; -v.contain = function(a) { - return this.h.has(a); +u.contain = function(a) { + return this.reg.has(a); }; -v.cleanup = function() { +u.cleanup = function() { for (const a of this.index.values()) { a.cleanup(); } return this; }; -v.get = function(a) { +u.get = function(a) { return this.store.get(a); }; -v.set = function(a, c) { +u.set = function(a, c) { this.store.set(a, c); return this; }; -v.export = function(a, c, b, e, f, d) { +u.export = function(a, c, b, d, f, e) { let g; - "undefined" === typeof d && (g = new Promise(k => { - d = k; + "undefined" === typeof e && (g = new Promise(k => { + e = k; })); f || (f = 0); - e || (e = 0); - if (e < this.field.length) { - b = this.field[e]; + d || (d = 0); + if (d < this.field.length) { + b = this.field[d]; var h = this.index[b]; c = this; - h.export(a, c, f ? b : "", e, f++, d) || (e++, c.export(a, c, b, e, 1, d)); + h.export(a, c, f ? b : "", d, f++, e) || (d++, c.export(a, c, b, d, 1, e)); } else { switch(f) { case 1: c = "tag"; - h = this.D; + h = this.B; b = null; break; case 2: @@ -1025,24 +1075,24 @@ v.export = function(a, c, b, e, f, d) { b = null; break; default: - d(); + e(); return; } - na(a, this, b, c, e, f, h, d); + na(a, this, b, c, d, f, h, e); } return g; }; -v.import = function(a, c) { +u.import = function(a, c) { if (c) { switch(z(c) && (c = JSON.parse(c)), a) { case "tag": - this.D = c; + this.B = c; break; case "reg": this.fastupdate = !1; - this.h = c; - for (let e = 0, f; e < this.field.length; e++) { - f = this.index[this.field[e]], f.h = c, f.fastupdate = !1; + this.reg = c; + for (let d = 0, f; d < this.field.length; d++) { + f = this.index[this.field[d]], f.reg = c, f.fastupdate = !1; } break; case "store": diff --git a/dist/flexsearch.compact.module.min.js b/dist/flexsearch.compact.module.min.js index 9ffb669..5b761ee 100644 --- a/dist/flexsearch.compact.module.min.js +++ b/dist/flexsearch.compact.module.min.js @@ -5,7 +5,7 @@ * Hosted by Nextapps GmbH * https://github.com/nextapps-de/flexsearch */ -var v;function x(a,c,b){const d=typeof b,e=typeof a;if("undefined"!==d){if("undefined"!==e){if(b){if("function"===e&&d===e)return function(h){return a(b(h))};c=a.constructor;if(c===b.constructor){if(c===Array)return b.concat(a);if(c===Map){var f=new Map(b);for(var g of a)f.set(g[0],g[1]);return f}if(c===Set){g=new Set(b);for(f of a.values())g.add(f);return g}}}return a}return b}return"undefined"===e?c:a}function y(){return Object.create(null)}function aa(a,c){return c.length-a.length} +var u;function x(a,c,b){const d=typeof b,e=typeof a;if("undefined"!==d){if("undefined"!==e){if(b){if("function"===e&&d===e)return function(h){return a(b(h))};c=a.constructor;if(c===b.constructor){if(c===Array)return b.concat(a);if(c===Map){var f=new Map(b);for(var g of a)f.set(g[0],g[1]);return f}if(c===Set){g=new Set(b);for(f of a.values())g.add(f);return g}}}return a}return b}return"undefined"===e?c:a}function y(){return Object.create(null)}function aa(a,c){return c.length-a.length} function A(a){return"string"===typeof a}function E(a){return"object"===typeof a}function F(a,c){if(A(c))a=a[c];else for(let b=0;a&&bthis.stemmer.get(h)),g=1);this.matcher&&1this.matcher.get(h)),g=1);f&&g&&(f.lengthf;h--){g=m.substring(f,h);var k=this.score?this.score(c,m,p,g,f):P(t,d,p,e,f);Q(this,l,g,k,a,b)}break}case "reverse":if(1< -e){for(h=e-1;0g?0:1),d,p,h-1,k-1),B=this.bidirectional&&m>f;Q(this,n,B?f:m,w,a,b,B?m:f)}}}}this.fastupdate||this.h.add(a)}}return this}; -function Q(a,c,b,d,e,f,g){let h=g?a.B:a.map,k;c[b]&&g&&(k=c[b])[g]||(g?(c=k||(c[b]=y()),c[g]=1,(k=h.get(g))?h=k:h.set(g,h=new Map)):c[b]=1,(k=h.get(b))?h=k:h.set(b,h=[]),h=h[d]||(h[d]=[]),f&&h.includes(e)||(h.push(e),a.fastupdate&&((c=a.h.get(e))?c.push(h):a.h.set(e,[h]))))}function P(a,c,b,d,e){return b&&1c?c?a.slice(b,b+c):a.slice(b):a;let d=[];for(let e=0,f,g;e=g){b-=g;continue}bc&&(f=f.slice(0,c),g=f.length),d.push(f);else{if(g>=c)return g>c&&(f=f.slice(0,c)),f;d=[f]}c-=g;if(!c)break}return d.length?d=1c||e)b=b.slice(e,c+e)}d=b}return d};function S(a,c,b,d){return(a=T(this,a,c))&&a.length?R(a,b,d):[]} -function ra(a,c,b,d,e,f,g){let h=[];if(a){d=Math.min(a.length,d);for(let k=0,n=0,l;k=e)))break;if(h.length){if(g)return R(h,e,0);c.push(h);return}}return!b&&h}function T(a,c,b){let d;b&&(d=a.bidirectional&&c>b);a=b?(a=a.B.get(d?c:b))&&a.get(d?b:c):a.map.get(c);return a};N.prototype.remove=function(a,c){const b=this.h.size&&(this.fastupdate?this.h.get(a):this.h.has(a));if(b){if(this.fastupdate)for(let d=0,e;de.length)e.pop();else{const f=e.indexOf(a);f===b.length-1?e.pop():e.splice(f,1)}}else U(this.map,a),this.depth&&U(this.B,a);c||this.h.delete(a)}return this}; -function U(a,c){let b=0;if(a.constructor===Array)for(let d=0,e,f;db.add(a,c)):this.add(a,c)}return this.remove(a).add(a,c)}; -function V(a){let c=0;if(a.constructor===Array)for(let b=0,d;b{f=n}));let h,k;switch(e||(e=0)){case 0:h="reg";if(this.fastupdate){k=y();for(let n of this.h.keys())k[n]=1}else k=this.h;break;case 1:h="cfg";k={doc:0,opt:this.F?1:0};break;case 2:h="map";k=this.map;break;case 3:h="ctx";k=this.B;break;default:"undefined"===typeof b&&f&&f();return}na(a,c||this,b,h,d,e,k,f);return g}; -v.import=function(a,c){if(c)switch(A(c)&&(c=JSON.parse(c)),a){case "cfg":this.F=!!c.opt;break;case "reg":this.fastupdate=!1;this.h=c;break;case "map":this.map=c;break;case "ctx":this.B=c}};pa(N.prototype);W.prototype.add=function(a,c,b){E(a)&&(c=a,a=F(c,this.key));if(c&&(a||0===a)){if(!b&&this.h.has(a))return this.update(a,c);for(let e=0,f;eb||d)a=a.slice(d,d+b);e&&(a=ta.call(this,a));return a}} -function ta(a){const c=Array(a.length);for(let b=0,d;b{f=k}));e||(e=0);d||(d=0);if(dthis.stemmer.get(h)),g=1);this.matcher&&1this.matcher.get(h)),g=1);f&&g&&(f.lengthf;h--){g=n.substring(f,h);var k=this.score?this.score(c,n,p,g,f):P(t,d,p,e,f);Q(this,l,g,k,a,b)}break}case "reverse":if(1< +e){for(h=e-1;0g?0:1),d,p,h-1,k-1),B=this.bidirectional&&n>f;Q(this,m,B?f:n,w,a,b,B?n:f)}}}}this.fastupdate||this.reg.add(a)}}return this}; +function Q(a,c,b,d,e,f,g){let h=g?a.ctx:a.map,k;c[b]&&g&&(k=c[b])[g]||(g?(c=k||(c[b]=y()),c[g]=1,(k=h.get(g))?h=k:h.set(g,h=new Map)):c[b]=1,(k=h.get(b))?h=k:h.set(b,h=[]),h=h[d]||(h[d]=[]),f&&h.includes(e)||(h.push(e),a.fastupdate&&((c=a.reg.get(e))?c.push(h):a.reg.set(e,[h]))))}function P(a,c,b,d,e){return b&&1c?c?a.slice(b,b+c):a.slice(b):a;let d=[];for(let e=0,f,g;e=g){b-=g;continue}bc&&(f=f.slice(0,c),g=f.length),d.push(f);else{if(g>=c)return g>c&&(f=f.slice(0,c)),f;d=[f]}c-=g;if(!c)break}return d.length?d=1c||e)b=b.slice(e,c+e)}d=b}return d};function S(a,c,b,d){return(a=T(this,a,c))&&a.length?R(a,b,d):[]} +function ra(a,c,b,d,e,f,g){let h=[];if(a){d=Math.min(a.length,d);for(let k=0,m=0,l;k=e)))break;if(h.length){if(g)return R(h,e,0);c.push(h);return}}return!b&&h}function T(a,c,b){let d;b&&(d=a.bidirectional&&c>b);a=b?(a=a.ctx.get(d?c:b))&&a.get(d?b:c):a.map.get(c);return a};N.prototype.remove=function(a,c){const b=this.reg.size&&(this.fastupdate?this.reg.get(a):this.reg.has(a));if(b){if(this.fastupdate)for(let d=0,e;de.length)e.pop();else{const f=e.indexOf(a);f===b.length-1?e.pop():e.splice(f,1)}}else U(this.map,a),this.depth&&U(this.ctx,a);c||this.reg.delete(a)}return this}; +function U(a,c){let b=0;if(a.constructor===Array)for(let d=0,e,f;db.add(a,c)):this.add(a,c)}return this.remove(a).add(a,c)}; +function V(a){let c=0;if(a.constructor===Array)for(let b=0,d;b{f=m}));let h,k;switch(e||(e=0)){case 0:h="reg";if(this.fastupdate){k=y();for(let m of this.reg.keys())k[m]=1}else k=this.reg;break;case 1:h="cfg";k={doc:0,opt:this.C?1:0};break;case 2:h="map";k=this.map;break;case 3:h="ctx";k=this.ctx;break;default:"undefined"===typeof b&&f&&f();return}na(a,c||this,b,h,d,e,k,f);return g}; +u.import=function(a,c){if(c)switch(A(c)&&(c=JSON.parse(c)),a){case "cfg":this.C=!!c.opt;break;case "reg":this.fastupdate=!1;this.reg=c;break;case "map":this.map=c;break;case "ctx":this.ctx=c}}; +u.serialize=function(a=!0){if(!this.reg.size)return"";let c="",b="";for(var d of this.reg.keys())b||(b=typeof d),c+=(c?",":"")+("string"===b?'"'+d+'"':d);c="index.reg=new Set(["+c+"]);";d="";for(var e of this.map.entries()){var f=e[0],g=e[1],h="";for(let l=0,r;lb||d)a=a.slice(d,d+b);e&&(a=ta.call(this,a));return a}} +function ta(a){const c=Array(a.length);for(let b=0,d;b{f=k}));e||(e=0);d||(d=0);if(d this.L && (this.V.clear(), this.A = this.A / 1.1 | 0)); + this.cache && h.length <= this.A && (this.T.set(h, f), this.T.size > this.J && (this.T.clear(), this.A = this.A / 1.1 | 0)); f && d.push(f); } } } } this.finalize && (d = this.finalize(d) || d); - this.cache && a.length <= this.h && (this.P.set(a, d), this.P.size > this.L && (this.P.clear(), this.h = this.h / 1.1 | 0)); + this.cache && a.length <= this.h && (this.N.set(a, d), this.N.size > this.J && (this.N.clear(), this.h = this.h / 1.1 | 0)); return d; }; function Ga(a) { - a.X = null; - a.P.clear(); - a.V.clear(); + a.V = null; + a.N.clear(); + a.T.clear(); } ;function Ha(a, b, c) { a = ("object" === typeof a ? "" + a.query : a).toLowerCase(); @@ -1202,7 +1202,7 @@ function S(a) { return new S(a); } this.index = K(); - this.C = []; + this.B = []; this.size = 0; 32 < a ? (this.h = Sa, this.A = BigInt(a)) : (this.h = Ta, this.A = a); } @@ -1212,7 +1212,7 @@ S.prototype.get = function(a) { }; S.prototype.set = function(a, b) { var c = this.h(a), d = this.index[c]; - d ? (c = d.size, d.set(a, b), (c -= d.size) && this.size++) : (this.index[c] = d = new Map([[a, b]]), this.C.push(d)); + d ? (c = d.size, d.set(a, b), (c -= d.size) && this.size++) : (this.index[c] = d = new Map([[a, b]]), this.B.push(d)); }; function T(a) { a = void 0 === a ? 8 : a; @@ -1221,19 +1221,19 @@ function T(a) { } this.index = K(); this.h = []; - 32 < a ? (this.C = Sa, this.A = BigInt(a)) : (this.C = Ta, this.A = a); + 32 < a ? (this.B = Sa, this.A = BigInt(a)) : (this.B = Ta, this.A = a); } T.prototype.add = function(a) { - var b = this.C(a), c = this.index[b]; + var b = this.B(a), c = this.index[b]; c ? (b = c.size, c.add(a), (b -= c.size) && this.size++) : (this.index[b] = c = new Set([a]), this.h.push(c)); }; w = S.prototype; w.has = T.prototype.has = function(a) { - var b = this.C(a); + var b = this.B(a); return (b = this.index[b]) && b.has(a); }; w.delete = T.prototype.delete = function(a) { - var b = this.C(a); + var b = this.B(a); (b = this.index[b]) && b.delete(a) && this.size--; }; w.clear = T.prototype.clear = function() { @@ -1362,7 +1362,7 @@ function U(a) { ;K(); V.prototype.add = function(a, b, c, d) { if (b && (a || 0 === a)) { - if (!d && !c && this.B.has(a)) { + if (!d && !c && this.reg.has(a)) { return this.update(a, b); } b = this.encoder.encode(b); @@ -1399,7 +1399,7 @@ V.prototype.add = function(a, b, c, d) { } default: if (ab(this, g, l, n, a, c), f && 1 < d && k < d - 1) { - for (m = K(), p = this.da, n = l, q = Math.min(f + 1, d - k), r = m[n] = 1; r < q; r++) { + for (m = K(), p = this.ba, n = l, q = Math.min(f + 1, d - k), r = m[n] = 1; r < q; r++) { if ((l = b[this.rtl ? d - 1 - k - r : k + r]) && !m[l]) { m[l] = 1; var y = this.score ? this.score(b, n, k, l, r) : $a(p + (d / 2 > p ? 0 : 1), d, k, q - 1, r - 1), u = this.bidirectional && l > n; @@ -1410,29 +1410,29 @@ V.prototype.add = function(a, b, c, d) { } } } - this.fastupdate || this.B.add(a); + this.fastupdate || this.reg.add(a); } else { b = ""; } } - this.db && (b || this.R.push({del:a}), this.ga && bb(this)); + this.db && (b || this.O.push({del:a}), this.ea && bb(this)); return this; }; function ab(a, b, c, d, e, g, f) { - var h = f ? a.J : a.map, k; + var h = f ? a.ctx : a.map, k; if (!b[c] || !f || !(k = b[c])[f]) { if (f ? (b = k || (b[c] = K()), b[f] = 1, (k = h.get(f)) ? h = k : h.set(f, h = new Map())) : b[c] = 1, (k = h.get(c)) ? h = k : h.set(c, h = k = []), h = h[d] || (h[d] = []), !g || !h.includes(e)) { if (h.length === Math.pow(2, 31) - 1) { b = new R(h); if (a.fastupdate) { - for (c = x(a.B.values()), g = c.next(); !g.done; g = c.next()) { + for (c = x(a.reg.values()), g = c.next(); !g.done; g = c.next()) { g = g.value, g.includes(h) && (g[g.indexOf(h)] = b); } } k[d] = h = b; } h.push(e); - a.fastupdate && ((d = a.B.get(e)) ? d.push(h) : a.B.set(e, [h])); + a.fastupdate && ((d = a.reg.get(e)) ? d.push(h) : a.reg.set(e, [h])); } } } @@ -1519,12 +1519,12 @@ function cb(a) { if (c.length) { return Promise.all(c).then(function() { a.result.length && (d = [a.result].concat(d)); - a.result = db(d, e, g, f, h, a.M); + a.result = db(d, e, g, f, h, a.K); return h ? a.result : a; }); } this.result.length && (d = [this.result].concat(d)); - this.result = db(d, e, g, f, h, a.M); + this.result = db(d, e, g, f, h, a.K); return h ? this.result : this; }; function db(a, b, c, d, e, g) { @@ -1605,12 +1605,12 @@ function db(a, b, c, d, e, g) { if (c.length) { return Promise.all(c).then(function() { d = [a.result].concat(d); - a.result = eb(d, e, g, f, a.M); + a.result = eb(d, e, g, f, a.K); return f ? a.result : a; }); } d = [this.result].concat(d); - this.result = eb(d, e, g, f, a.M); + this.result = eb(d, e, g, f, a.K); return f ? this.result : this; } return this; @@ -1697,12 +1697,12 @@ function eb(a, b, c, d, e) { if (c.length) { return Promise.all(c).then(function() { a.result.length && (d = [a.result].concat(d)); - a.result = fb(d, e, g, f, !h, a.M); + a.result = fb(d, e, g, f, !h, a.K); return h ? a.result : a; }); } this.result.length && (d = [this.result].concat(d)); - this.result = fb(d, e, g, f, !h, a.M); + this.result = fb(d, e, g, f, !h, a.K); return h ? this.result : this; }; function fb(a, b, c, d, e, g) { @@ -1818,7 +1818,7 @@ function gb(a, b) { } this.index = null; this.result = a || []; - this.M = 0; + this.K = 0; } X.prototype.limit = function(a) { if (this.result.length) { @@ -1844,7 +1844,7 @@ X.prototype.offset = function(a) { return this; }; X.prototype.boost = function(a) { - this.M += a; + this.K += a; return this; }; X.prototype.resolve = function(a, b, c) { @@ -1994,12 +1994,12 @@ V.prototype.search = function(a, b, c) { D = a[u]; return t ? F(E, Y(v, D, t), 8) : F(E, Y(v, D), 7); case 7: - A = E.G; + A = E.F; A = lb(A, d, h, v.resolution, b, e, 1 === m); E.h = 6; break; case 8: - A = E.G, A = lb(A, d, h, v.da, b, e, 2 === m), h && !1 === A && d.length || (t = D); + A = E.F, A = lb(A, d, h, v.ba, b, e, 2 === m), h && !1 === A && d.length || (t = D); case 6: if (A) { return E.return(A); @@ -2031,7 +2031,7 @@ V.prototype.search = function(a, b, c) { } for (k = f = void 0; u < m; u++) { k = a[u]; - t ? (f = Y(this, k, t), f = lb(f, d, h, this.da, b, e, 2 === m), h && !1 === f && d.length || (t = k)) : (f = Y(this, k), f = lb(f, d, h, this.resolution, b, e, 1 === m)); + t ? (f = Y(this, k, t), f = lb(f, d, h, this.ba, b, e, 2 === m), h && !1 === f && d.length || (t = k)) : (f = Y(this, k), f = lb(f, d, h, this.resolution, b, e, 1 === m)); if (f) { return f; } @@ -2086,11 +2086,11 @@ function Y(a, b, c, d, e, g, f, h) { if (a.db) { return c ? a.db.get(k ? c : b, k ? b : c, d, e, g, f, h) : a.db.get(b, "", d, e, g, f, h); } - a = c ? (a = a.J.get(k ? b : c)) && a.get(k ? c : b) : a.map.get(b); + a = c ? (a = a.ctx.get(k ? b : c)) && a.get(k ? c : b) : a.map.get(b); return a; } ;V.prototype.remove = function(a, b) { - var c = this.B.size && (this.fastupdate ? this.B.get(a) : this.B.has(a)); + var c = this.reg.size && (this.fastupdate ? this.reg.get(a) : this.reg.has(a)); if (c) { if (this.fastupdate) { for (var d = 0, e; d < c.length; d++) { @@ -2104,11 +2104,11 @@ function Y(a, b, c, d, e, g, f, h) { } } } else { - mb(this.map, a), this.depth && mb(this.J, a); + mb(this.map, a), this.depth && mb(this.ctx, a); } - b || this.B.delete(a); + b || this.reg.delete(a); } - this.db && (this.R.push({del:a}), this.ga && bb(this)); + this.db && (this.O.push({del:a}), this.ea && bb(this)); this.cache && this.cache.remove(a); return this; }; @@ -2154,17 +2154,17 @@ function mb(a, b) { this.score = a.score || null; (e = a.keystore || 0) && (this.keystore = e); this.map = e ? new S(e) : new Map(); - this.J = e ? new S(e) : new Map(); - this.B = b || (this.fastupdate ? e ? new S(e) : new Map() : e ? new T(e) : new Set()); - this.da = c.resolution || 1; + this.ctx = e ? new S(e) : new Map(); + this.reg = b || (this.fastupdate ? e ? new S(e) : new Map() : e ? new T(e) : new Set()); + this.ba = c.resolution || 1; this.rtl = d.rtl || a.rtl || !1; this.cache = (e = a.cache || null) && new Q(e); this.resolve = !1 !== a.resolve; if (e = a.db) { this.db = e.mount(this); } - this.ga = !1 !== a.commit; - this.R = []; + this.ea = !1 !== a.commit; + this.O = []; this.h = null; } w = V.prototype; @@ -2184,17 +2184,17 @@ function bb(a) { } w.clear = function() { this.map.clear(); - this.J.clear(); - this.B.clear(); + this.ctx.clear(); + this.reg.clear(); this.cache && this.cache.clear(); - this.db && (this.h && clearTimeout(this.h), this.h = null, this.R = [{clear:!0}]); + this.db && (this.h && clearTimeout(this.h), this.h = null, this.O = [{clear:!0}]); return this; }; w.append = function(a, b) { return this.add(a, b, !0); }; w.contain = function(a) { - return this.db ? this.db.has(a) : this.B.has(a); + return this.db ? this.db.has(a) : this.reg.has(a); }; w.update = function(a, b) { if (this.async) { @@ -2225,7 +2225,7 @@ w.cleanup = function() { return console.info('Cleanup the index isn\'t required when not using "fastupdate".'), this; } nb(this.map); - this.depth && nb(this.J); + this.depth && nb(this.ctx); return this; }; w.searchCache = Ha; @@ -2239,11 +2239,11 @@ w.export = function(a, b, c, d, e, g) { var h = "reg"; if (this.fastupdate) { var k = K(); - for (var l = x(this.B.keys()), m = l.next(); !m.done; m = l.next()) { + for (var l = x(this.reg.keys()), m = l.next(); !m.done; m = l.next()) { k[m.value] = 1; } } else { - k = this.B; + k = this.reg; } break; case 1: @@ -2256,7 +2256,7 @@ w.export = function(a, b, c, d, e, g) { break; case 3: h = "ctx"; - k = this.J; + k = this.ctx; break; default: "undefined" === typeof c && g && g(); @@ -2273,16 +2273,68 @@ w.import = function(a, b) { break; case "reg": this.fastupdate = !1; - this.B = b; + this.reg = b; break; case "map": this.map = b; break; case "ctx": - this.J = b; + this.ctx = b; } } }; +w.serialize = function(a) { + a = void 0 === a ? !0 : a; + if (!this.reg.size) { + return ""; + } + for (var b = "", c = "", d = x(this.reg.keys()), e = d.next(); !e.done; e = d.next()) { + e = e.value, c || (c = typeof e), b += (b ? "," : "") + ("string" === c ? '"' + e + '"' : e); + } + b = "index.reg=new Set([" + b + "]);"; + d = ""; + e = x(this.map.entries()); + for (var g = e.next(); !g.done; g = e.next()) { + var f = g.value; + g = f[0]; + f = f[1]; + for (var h = "", k = 0, l; k < f.length; k++) { + l = f[k] || [""]; + for (var m = "", n = 0; n < l.length; n++) { + m += (m ? "," : "") + ("string" === c ? '"' + l[n] + '"' : l[n]); + } + m = "[" + m + "]"; + h += (h ? "," : "") + m; + } + h = '["' + g + '",[' + h + "]]"; + d += (d ? "," : "") + h; + } + d = "index.map=new Map([" + d + "]);"; + e = ""; + g = x(this.ctx.entries()); + for (f = g.next(); !f.done; f = g.next()) { + for (h = f.value, f = h[0], h = x(h[1].entries()), k = h.next(); !k.done; k = h.next()) { + l = k.value; + k = l[0]; + l = l[1]; + m = ""; + n = 0; + for (var p; n < l.length; n++) { + p = l[n] || [""]; + for (var q = "", r = 0; r < p.length; r++) { + q += (q ? "," : "") + ("string" === c ? '"' + p[r] + '"' : p[r]); + } + q = "[" + q + "]"; + m += (m ? "," : "") + q; + } + m = 'new Map([["' + k + '",[' + m + "]]])"; + m = '["' + f + '",' + m + "]"; + e += (e ? "," : "") + m; + } + } + e = "index.ctx=new Map([" + e + "]);"; + return a ? "function inject(index){" + b + d + e + "}" : b + d + e; +}; Za(V.prototype); function ob(a) { var b, c, d, e, g, f, h, k; @@ -2358,25 +2410,25 @@ function rb(a, b, c) { ;Z.prototype.add = function(a, b, c) { M(a) && (b = a, a = ya(b, this.key)); if (b && (a || 0 === a)) { - if (!c && this.B.has(a)) { + if (!c && this.reg.has(a)) { return this.update(a, b); } for (var d = 0, e; d < this.field.length; d++) { - e = this.O[d]; + e = this.M[d]; var g = this.index.get(this.field[d]); if ("function" === typeof e) { (e = e(b)) && g.add(a, e, !1, !0); } else { - var f = e.U; + var f = e.S; if (!f || f(b)) { - e.constructor === String ? e = ["" + e] : L(e) && (e = [e]), tb(b, e, this.W, 0, g, a, e[0], c); + e.constructor === String ? e = ["" + e] : L(e) && (e = [e]), tb(b, e, this.U, 0, g, a, e[0], c); } } } if (this.tag) { - for (d = 0; d < this.N.length; d++) { - f = this.N[d]; - var h = this.ca[d]; + for (d = 0; d < this.L.length; d++) { + f = this.L[d]; + var h = this.aa[d]; g = this.tag.get(h); e = K(); if ("function" === typeof f) { @@ -2384,7 +2436,7 @@ function rb(a, b, c) { continue; } } else { - var k = f.U; + var k = f.S; if (k && !k(b)) { continue; } @@ -2402,14 +2454,14 @@ function rb(a, b, c) { if (k.length === Math.pow(2, 31) - 1) { m = new R(k); if (this.fastupdate) { - for (var n = x(this.B.values()), p = n.next(); !p.done; p = n.next()) { + for (var n = x(this.reg.values()), p = n.next(); !p.done; p = n.next()) { p = p.value, p.includes(k) && (p[p.indexOf(k)] = m); } } g.set(l, k = m); } k.push(a); - this.fastupdate && ((l = this.B.get(a)) ? l.push(k) : this.B.set(a, [k])); + this.fastupdate && ((l = this.reg.get(a)) ? l.push(k) : this.reg.set(a, [k])); } } } @@ -2419,17 +2471,17 @@ function rb(a, b, c) { } } if (this.store && (!c || !this.store.has(a))) { - if (this.I) { + if (this.H) { var q = K(); - for (c = 0; c < this.I.length; c++) { - if (d = this.I[c], g = d.U, !g || g(b)) { + for (c = 0; c < this.H.length; c++) { + if (d = this.H[c], g = d.S, !g || g(b)) { g = void 0; if ("function" === typeof d) { g = d(b); if (!g) { continue; } - d = [d.oa]; + d = [d.ma]; } else if (L(d) || d.constructor === String) { q[d] = b[d]; continue; @@ -2564,7 +2616,7 @@ function tb(a, b, c, d, e, g, f, h) { r = !d && (this.worker || this.async) && []; y = 0; for (v = u = t = void 0; y < l.length; y++) { - if (u = l[y], !this.db || !this.tag || this.O[y]) { + if (u = l[y], !this.db || !this.tag || this.M[y]) { t = void 0; L(u) || (t = u, u = t.field, a = t.query || a, b = t.limit || b, p = t.suggest || p); if (d) { @@ -2575,7 +2627,7 @@ function tb(a, b, c, d, e, g, f, h) { if (m) { if (this.db) { v.tag = m; - var E = t.db.sa; + var E = t.db.qa; v.field = l; } E || (v.enrich = !1); @@ -2721,13 +2773,13 @@ function wb(a) { return new Z(a); } var b = a.document || a.doc || a, c, d; - this.O = []; + this.M = []; this.field = []; - this.W = []; - this.key = (c = b.key || b.id) && yb(c, this.W) || "id"; + this.U = []; + this.key = (c = b.key || b.id) && yb(c, this.U) || "id"; (d = a.keystore || 0) && (this.keystore = d); - this.B = (this.fastupdate = !!a.fastupdate) ? d ? new S(d) : new Map() : d ? new T(d) : new Set(); - this.I = (c = b.store || null) && !0 !== c && []; + this.reg = (this.fastupdate = !!a.fastupdate) ? d ? new S(d) : new Map() : d ? new T(d) : new Set(); + this.H = (c = b.store || null) && !0 !== c && []; this.store = c && (d ? new S(d) : new Map()); this.cache = (c = a.cache || null) && new Q(c); a.cache = !1; @@ -2745,27 +2797,27 @@ function wb(a) { c.set(g, h); h.worker || (this.worker = !1); } - this.worker || c.set(g, new V(f, this.B)); - f.custom ? this.O[e] = f.custom : (this.O[e] = yb(g, this.W), f.filter && ("string" === typeof this.O[e] && (this.O[e] = new String(this.O[e])), this.O[e].U = f.filter)); + this.worker || c.set(g, new V(f, this.reg)); + f.custom ? this.M[e] = f.custom : (this.M[e] = yb(g, this.U), f.filter && ("string" === typeof this.M[e] && (this.M[e] = new String(this.M[e])), this.M[e].S = f.filter)); this.field[e] = g; } - if (this.I) { + if (this.H) { for (d = b.store, L(d) && (d = [d]), e = 0; e < d.length; e++) { - g = d[e], f = g.field || g, g.custom ? (this.I[e] = g.custom, g.custom.oa = f) : (this.I[e] = yb(f, this.W), g.filter && ("string" === typeof this.I[e] && (this.I[e] = new String(this.I[e])), this.I[e].U = g.filter)); + g = d[e], f = g.field || g, g.custom ? (this.H[e] = g.custom, g.custom.ma = f) : (this.H[e] = yb(f, this.U), g.filter && ("string" === typeof this.H[e] && (this.H[e] = new String(this.H[e])), this.H[e].S = g.filter)); } } this.index = c; this.tag = null; if (c = b.tag) { if ("string" === typeof c && (c = [c]), c.length) { - for (this.tag = new Map(), this.N = [], this.ca = [], b = 0; b < c.length; b++) { + for (this.tag = new Map(), this.L = [], this.aa = [], b = 0; b < c.length; b++) { d = c[b]; e = d.field || d; if (!e) { throw Error("The tag field from the document descriptor is undefined."); } - d.custom ? this.N[b] = d.custom : (this.N[b] = yb(e, this.W), d.filter && ("string" === typeof this.N[b] && (this.N[b] = new String(this.N[b])), this.N[b].U = d.filter)); - this.ca[b] = e; + d.custom ? this.L[b] = d.custom : (this.L[b] = yb(e, this.U), d.filter && ("string" === typeof this.L[b] && (this.L[b] = new String(this.L[b])), this.L[b].S = d.filter)); + this.aa[b] = e; this.tag.set(e, new Map()); } } @@ -2776,10 +2828,10 @@ w = Z.prototype; w.mount = function(a) { var b = this.field; if (this.tag) { - for (var c = 0, d; c < this.ca.length; c++) { - d = this.ca[c]; + for (var c = 0, d; c < this.aa.length; c++) { + d = this.aa[c]; var e = this.index.get(d); - e || (this.index.set(d, e = new V({}, this.B)), b === this.field && (b = b.slice(0)), b.push(d)); + e || (this.index.set(d, e = new V({}, this.reg)), b === this.field && (b = b.slice(0)), b.push(d)); e.tag = this.tag.get(d); } } @@ -2793,7 +2845,7 @@ w.mount = function(a) { f.id = a.id; c[e] = f.mount(g); g.document = !0; - e ? g.pa = !0 : g.store = this.store; + e ? g.na = !0 : g.store = this.store; } this.db = this.async = !0; return Promise.all(c); @@ -2809,7 +2861,7 @@ w.commit = function(a, b) { } return F(h, Promise.all(d), 2); } - c.B.clear(); + c.reg.clear(); h.h = 0; }); }; @@ -2831,7 +2883,7 @@ w.remove = function(a) { for (var b = x(this.index.values()), c = b.next(); !c.done; c = b.next()) { c.value.remove(a, !0); } - if (this.B.has(a)) { + if (this.reg.has(a)) { if (this.tag && !this.fastupdate) { for (b = x(this.tag.values()), c = b.next(); !c.done; c = b.next()) { c = c.value; @@ -2845,7 +2897,7 @@ w.remove = function(a) { } } this.store && this.store.delete(a); - this.B.delete(a); + this.reg.delete(a); } this.cache && this.cache.remove(a); return this; @@ -2863,7 +2915,7 @@ w.clear = function() { return this; }; w.contain = function(a) { - return this.db ? this.index.get(this.field[0]).db.has(a) : this.B.has(a); + return this.db ? this.index.get(this.field[0]).db.has(a) : this.reg.has(a); }; w.cleanup = function() { for (var a = x(this.index.values()), b = a.next(); !b.done; b = a.next()) { @@ -2921,10 +2973,10 @@ w.import = function(a, b) { break; case "reg": this.fastupdate = !1; - this.B = b; + this.reg = b; a = 0; for (var c; a < this.field.length; a++) { - c = this.index[this.field[a]], c.B = b, c.fastupdate = !1; + c = this.index[this.field[a]], c.reg = b, c.fastupdate = !1; } break; case "store": @@ -2946,7 +2998,7 @@ function Bb(a, b) { a || console.info("Default storage space was used, because a name was not passed."); this.id = "flexsearch" + (a ? ":" + a.toLowerCase().replace(/[^a-z0-9_\-]/g, "") : ""); this.field = b.field ? b.field.toLowerCase().replace(/[^a-z0-9_\-]/g, "") : ""; - this.sa = !1; + this.qa = !1; this.db = null; this.h = {}; } @@ -3096,8 +3148,8 @@ w.commit = function(a, b, c) { if (b) { return F(h, d.clear(), 12); } - e = a.R; - a.R = []; + e = a.O; + a.O = []; g = 0; f = void 0; case 4: @@ -3107,7 +3159,7 @@ w.commit = function(a, b, c) { } f = e[g]; if (!f.clear) { - e[g] = f.ta; + e[g] = f.ra; h.h = 5; break; } @@ -3125,7 +3177,7 @@ w.commit = function(a, b, c) { h.h = 3; break; } - c || (e = e.concat(xa(a.B))); + c || (e = e.concat(xa(a.reg))); if (!e.length) { h.h = 10; break; @@ -3136,16 +3188,16 @@ w.commit = function(a, b, c) { h.h = 3; break; case 12: - a.R = []; + a.O = []; case 3: - return a.B.size ? F(h, d.transaction("map", "readwrite", function(k) { - for (var l = x(a.map), m = l.next(), n = {}; !m.done; n = {S:void 0, aa:void 0}, m = l.next()) { - m = m.value, n.aa = m[0], n.S = m[1], n.S.length && (b ? k.put(n.S, n.aa) : k.get(n.aa).onsuccess = function(p) { + return a.reg.size ? F(h, d.transaction("map", "readwrite", function(k) { + for (var l = x(a.map), m = l.next(), n = {}; !m.done; n = {P:void 0, Z:void 0}, m = l.next()) { + m = m.value, n.Z = m[0], n.P = m[1], n.P.length && (b ? k.put(n.P, n.Z) : k.get(n.Z).onsuccess = function(p) { return function() { var q = this.result, r; if (q && q.length) { - for (var y = Math.max(q.length, p.S.length), u = 0, t; u < y; u++) { - if ((t = p.S[u]) && t.length) { + for (var y = Math.max(q.length, p.P.length), u = 0, t; u < y; u++) { + if ((t = p.P[u]) && t.length) { if ((r = q[u]) && r.length) { for (var v = 0; v < t.length; v++) { r.push(t[v]); @@ -3157,26 +3209,26 @@ w.commit = function(a, b, c) { } } } else { - q = p.S, r = 1; + q = p.P, r = 1; } - r && k.put(q, p.aa); + r && k.put(q, p.Z); }; }(n)); } }), 13) : h.return(); case 13: return F(h, d.transaction("ctx", "readwrite", function(k) { - for (var l = x(a.J), m = l.next(), n = {}; !m.done; n = {Z:void 0}, m = l.next()) { + for (var l = x(a.ctx), m = l.next(), n = {}; !m.done; n = {X:void 0}, m = l.next()) { m = m.value; - n.Z = m[0]; + n.X = m[0]; m = x(m[1]); - for (var p = m.next(), q = {}; !p.done; q = {T:void 0, ba:void 0}, p = m.next()) { - p = p.value, q.ba = p[0], q.T = p[1], q.T.length && (b ? k.put(q.T, n.Z + ":" + q.ba) : k.get(n.Z + ":" + q.ba).onsuccess = function(r, y) { + for (var p = m.next(), q = {}; !p.done; q = {R:void 0, $:void 0}, p = m.next()) { + p = p.value, q.$ = p[0], q.R = p[1], q.R.length && (b ? k.put(q.R, n.X + ":" + q.$) : k.get(n.X + ":" + q.$).onsuccess = function(r, y) { return function() { var u = this.result, t; if (u && u.length) { - for (var v = Math.max(u.length, r.T.length), A = 0, D; A < v; A++) { - if ((D = r.T[A]) && D.length) { + for (var v = Math.max(u.length, r.R.length), A = 0, D; A < v; A++) { + if ((D = r.R[A]) && D.length) { if ((t = u[A]) && t.length) { for (var C = 0; C < D.length; C++) { t.push(D[C]); @@ -3188,9 +3240,9 @@ w.commit = function(a, b, c) { } } } else { - u = r.T, t = 1; + u = r.R, t = 1; } - t && k.put(u, y.Z + ":" + r.ba); + t && k.put(u, y.X + ":" + r.$); }; }(q, n)); } @@ -3207,12 +3259,12 @@ w.commit = function(a, b, c) { } }), 16); } - if (a.pa) { + if (a.na) { h.h = 16; break; } return F(h, d.transaction("reg", "readwrite", function(k) { - for (var l = x(a.B.keys()), m = l.next(); !m.done; m = l.next()) { + for (var l = x(a.reg.keys()), m = l.next(); !m.done; m = l.next()) { k.put(1, m.value); } }), 16); @@ -3222,18 +3274,18 @@ w.commit = function(a, b, c) { break; } return F(h, d.transaction("tag", "readwrite", function(k) { - for (var l = x(a.tag), m = l.next(), n = {}; !m.done; n = {$:void 0, ea:void 0}, m = l.next()) { - m = m.value, n.ea = m[0], n.$ = m[1], n.$.length && (k.get(n.ea).onsuccess = function(p) { + for (var l = x(a.tag), m = l.next(), n = {}; !m.done; n = {Y:void 0, ca:void 0}, m = l.next()) { + m = m.value, n.ca = m[0], n.Y = m[1], n.Y.length && (k.get(n.ca).onsuccess = function(p) { return function() { var q = this.result; - q = q && q.length ? q.concat(p.$) : p.$; - k.put(q, p.ea); + q = q && q.length ? q.concat(p.Y) : p.Y; + k.put(q, p.ca); }; }(n)); } }), 20); case 20: - a.map.clear(), a.J.clear(), a.tag && a.tag.clear(), a.store && a.store.clear(), a.document || a.B.clear(), h.h = 0; + a.map.clear(), a.ctx.clear(), a.tag && a.tag.clear(), a.store && a.store.clear(), a.document || a.reg.clear(), h.h = 0; } }); }; diff --git a/dist/flexsearch.es5.min.js b/dist/flexsearch.es5.min.js index 6c58eae..4a658e3 100644 --- a/dist/flexsearch.es5.min.js +++ b/dist/flexsearch.es5.min.js @@ -7,115 +7,118 @@ */ (function(self){'use strict';var w;function aa(a){var b=0;return function(){return b>>0)+"_",e=0;return b}); +if("function"==typeof Object.setPrototypeOf)da=Object.setPrototypeOf;else{var ea;a:{var fa={a:!0},ha={};try{ha.__proto__=fa;ea=ha.a;break a}catch(a){}ea=!1}da=ea?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var ia=da;function ja(){this.C=!1;this.A=null;this.F=void 0;this.h=1;this.J=0;this.B=null}function ka(a){if(a.C)throw new TypeError("Generator is already running");a.C=!0}ja.prototype.G=function(a){this.F=a}; +function la(a,b){a.B={oa:b,pa:!0};a.h=a.J}ja.prototype.return=function(a){this.B={return:a};this.h=this.J};function F(a,b,c){a.h=c;return{value:b}}function ma(a){this.h=new ja;this.A=a}function na(a,b){ka(a.h);var c=a.h.A;if(c)return oa(a,"return"in c?c["return"]:function(d){return{value:d,done:!0}},b,a.h.return);a.h.return(b);return G(a)} +function oa(a,b,c,d){try{var e=b.call(a.h.A,c);if(!(e instanceof Object))throw new TypeError("Iterator result "+e+" is not an object");if(!e.done)return a.h.C=!1,e;var h=e.value}catch(f){return a.h.A=null,la(a.h,f),G(a)}a.h.A=null;d.call(a.h,h);return G(a)}function G(a){for(;a.h.h;)try{var b=a.A(a.h);if(b)return a.h.C=!1,{value:b.value,done:!1}}catch(c){a.h.F=void 0,la(a.h,c)}a.h.C=!1;if(a.h.B){b=a.h.B;a.h.B=null;if(b.pa)throw b.oa;return{value:b.return,done:!0}}return{value:void 0,done:!0}} +function pa(a){this.next=function(b){ka(a.h);a.h.A?b=oa(a,a.h.A.next,b,a.h.G):(a.h.G(b),b=G(a));return b};this.throw=function(b){ka(a.h);a.h.A?b=oa(a,a.h.A["throw"],b,a.h.G):(la(a.h,b),b=G(a));return b};this.return=function(b){return na(a,b)};this[Symbol.iterator]=function(){return this}}function qa(a,b){b=new pa(new ma(b));ia&&a.prototype&&ia(b,a.prototype);return b} +function ra(a){function b(d){return a.next(d)}function c(d){return a.throw(d)}return new Promise(function(d,e){function h(f){f.done?d(f.value):Promise.resolve(f.value).then(b,c).then(h,e)}h(a.next())})}function sa(a){return ra(new pa(new ma(a)))} +B("Symbol",function(a){function b(h){if(this instanceof b)throw new TypeError("Symbol is not a constructor");return new c(d+(h||"")+"_"+e++,h)}function c(h,f){this.h=h;ba(this,"description",{configurable:!0,writable:!0,value:f})}if(a)return a;c.prototype.toString=function(){return this.h};var d="jscomp_symbol_"+(1E9*Math.random()>>>0)+"_",e=0;return b}); B("Symbol.iterator",function(a){if(a)return a;a=Symbol("Symbol.iterator");for(var b="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),c=0;cc&&(c=Math.max(c+e,0));cc&&(c=Math.max(c+e,0));cthis.L&&(this.V.clear(),this.A=this.A/1.1|0));f&&d.push(f)}this.finalize&&(d=this.finalize(d)||d);this.cache&&a.length<=this.h&&(this.P.set(a,d),this.P.size>this.L&&(this.P.clear(),this.h=this.h/1.1|0));return d};function Ga(a){a.X=null;a.P.clear();a.V.clear()};function Ha(a,b,c){a=("object"===typeof a?""+a.query:a).toLowerCase();var d=this.cache.get(a);if(!d){d=this.search(a,b,c);if(d.then){var e=this;d.then(function(g){e.cache.set(a,g);return g})}this.cache.set(a,d)}return d}function Q(a){this.limit=a&&!0!==a?a:1E3;this.cache=new Map;this.h=""}Q.prototype.set=function(a,b){this.cache.set(this.h=a,b);this.cache.size>this.limit&&this.cache.delete(this.cache.keys().next().value)}; -Q.prototype.get=function(a){var b=this.cache.get(a);b&&this.h!==a&&(this.cache.delete(a),this.cache.set(this.h=a,b));return b};Q.prototype.remove=function(a){for(var b=x(this.cache),c=b.next();!c.done;c=b.next()){c=c.value;var d=c[0];c[1].includes(a)&&this.cache.delete(d)}};Q.prototype.clear=function(){this.cache.clear();this.h=""};var Ia={normalize:function(a){return a.toLowerCase()},dedupe:!1};var Ja=new Map([["b","p"],["v","f"],["w","f"],["z","s"],["x","s"],["d","t"],["n","m"],["c","k"],["g","k"],["j","k"],["q","k"],["i","e"],["y","e"],["u","o"]]);var Ka=new Map([["ai","ei"],["ae","a"],["oe","o"],["ue","u"],["sh","s"],["ch","c"],["th","t"],["ph","f"],["pf","f"]]),La=[/([^aeo])h([aeo$])/g,"$1$2",/([aeo])h([^aeo]|$)/g,"$1$2"];var Ma={a:"",e:"",i:"",o:"",u:"",y:"",b:1,f:1,p:1,v:1,c:2,g:2,j:2,k:2,q:2,s:2,x:2,z:2,"\u00df":2,d:3,t:3,l:4,m:5,n:5,r:6};var Na=/[\x00-\x7F]+/g;var Oa=/[\x00-\x7F]+/g;var Pa=/[\x00-\x7F]+/g;var Qa={LatinExact:{normalize:!1,dedupe:!1},LatinDefault:Ia,LatinSimple:{normalize:!0,dedupe:!0},LatinBalance:{normalize:!0,dedupe:!0,mapper:Ja},LatinAdvanced:{normalize:!0,dedupe:!0,mapper:Ja,replacer:La,matcher:Ka},LatinExtra:{normalize:!0,dedupe:!0,mapper:Ja,replacer:La.concat([/(?!^)[aeoy]/g,""]),matcher:Ka},LatinSoundex:{normalize:!0,dedupe:!1,include:{letter:!0},finalize:function(a){for(var b=0;b=f.length)b-=f.length;else{b=f[d?"splice":"slice"](b,c);if(f=b.length)if(e=e.length?e.concat(b):b,c-=f,d&&(a.length-=f),!c)break;b=0}return e} -function R(a){if(!this)return new R(a);this.index=a?[a]:[];this.length=a?a.length:0;var b=this;return new Proxy([],{get:function(c,d){if("length"===d)return b.length;if("push"===d)return function(e){b.index[b.index.length-1].push(e);b.length++};if("pop"===d)return function(){if(b.length)return b.length--,b.index[b.index.length-1].pop()};if("indexOf"===d)return function(e){for(var g=0,f=0,h,k;fn;q--){p=l.substring(n,q);var r=this.score?this.score(b,l,k,p,n):$a(h,d,k,m,n);ab(this,g,p,r,a,c)}break}case "reverse":if(1< -m){for(q=m-1;0p?0:1),d,k,q-1,r-1),u=this.bidirectional&&l>n;ab(this,e,u?n:l,y,a,c,u?l:n)}}}}this.fastupdate||this.B.add(a)}else b=""}this.db&& -(b||this.R.push({del:a}),this.ga&&bb(this));return this}; -function ab(a,b,c,d,e,g,f){var h=f?a.J:a.map,k;if(!b[c]||!f||!(k=b[c])[f])if(f?(b=k||(b[c]=K()),b[f]=1,(k=h.get(f))?h=k:h.set(f,h=new Map)):b[c]=1,(k=h.get(c))?h=k:h.set(c,h=k=[]),h=h[d]||(h[d]=[]),!g||!h.includes(e)){if(h.length===Math.pow(2,31)-1){b=new R(h);if(a.fastupdate)for(c=x(a.B.values()),g=c.next();!g.done;g=c.next())g=g.value,g.includes(h)&&(g[g.indexOf(h)]=b);k[d]=h=b}h.push(e);a.fastupdate&&((d=a.B.get(e))?d.push(h):a.B.set(e,[h]))}} -function $a(a,b,c,d,e){return c&&1b?b?a.slice(c,c+b):a.slice(c):a,d?cb(a):a;for(var e=[],g=0,f=void 0,h=void 0;g=h){c-=h;continue}cb&&(f=f.slice(0,b),h=f.length),e.push(f);else{if(h>=b)return h>b&&(f=f.slice(0,b)),d?cb(f):f;e=[f]}b-=h;if(!b)break}if(!e.length)return e;e=1a.length)return e?W(a[0],b,c,d):a[0];d=[];for(var f=0,h=K(),k=za(a),l=0,m;la.length)return[];var g=[],f=0,h=K(),k=za(a);if(!k)return g;for(var l=0,m;la.length)return e?W(a[0],b,c,d):a[0];b=[];c=K();d=0;for(var f;dc||d)f=f.slice(d,c+d)}return f} -function jb(a,b){for(var c=K(),d=K(),e=[],g=0;g=e)))break;if(h.length){if(f)return W(h,e,0);b.push(h);return}}return!c&&h}function Y(a,b,c,d,e,g,f,h){var k;c&&(k=a.bidirectional&&b>c);if(a.db)return c?a.db.get(k?c:b,k?b:c,d,e,g,f,h):a.db.get(b,"",d,e,g,f,h);a=c?(a=a.J.get(k?b:c))&&a.get(k?c:b):a.map.get(b);return a};V.prototype.remove=function(a,b){var c=this.B.size&&(this.fastupdate?this.B.get(a):this.B.has(a));if(c){if(this.fastupdate)for(var d=0,e;de.length)e.pop();else{var g=e.indexOf(a);g===c.length-1?e.pop():e.splice(g,1)}}else mb(this.map,a),this.depth&&mb(this.J,a);b||this.B.delete(a)}this.db&&(this.R.push({del:a}),this.ga&&bb(this));this.cache&&this.cache.remove(a);return this}; -function mb(a,b){var c=0;if(a.constructor===Array)for(var d=0,e=void 0,g;dc||d)a=a.slice(d,d+c);e&&(a=wb.call(this,a));return a}}function wb(a){for(var b=Array(a.length),c=0,d;cthis.J&&(this.T.clear(),this.A=this.A/1.1|0));f&&d.push(f)}this.finalize&&(d=this.finalize(d)||d);this.cache&&a.length<=this.h&&(this.N.set(a,d),this.N.size>this.J&&(this.N.clear(),this.h=this.h/1.1|0));return d};function Ga(a){a.V=null;a.N.clear();a.T.clear()};function Ha(a,b,c){a=("object"===typeof a?""+a.query:a).toLowerCase();var d=this.cache.get(a);if(!d){d=this.search(a,b,c);if(d.then){var e=this;d.then(function(h){e.cache.set(a,h);return h})}this.cache.set(a,d)}return d}function Q(a){this.limit=a&&!0!==a?a:1E3;this.cache=new Map;this.h=""}Q.prototype.set=function(a,b){this.cache.set(this.h=a,b);this.cache.size>this.limit&&this.cache.delete(this.cache.keys().next().value)}; +Q.prototype.get=function(a){var b=this.cache.get(a);b&&this.h!==a&&(this.cache.delete(a),this.cache.set(this.h=a,b));return b};Q.prototype.remove=function(a){for(var b=x(this.cache),c=b.next();!c.done;c=b.next()){c=c.value;var d=c[0];c[1].includes(a)&&this.cache.delete(d)}};Q.prototype.clear=function(){this.cache.clear();this.h=""};var Ia={normalize:function(a){return a.toLowerCase()},dedupe:!1};var Ja=new Map([["b","p"],["v","f"],["w","f"],["z","s"],["x","s"],["d","t"],["n","m"],["c","k"],["g","k"],["j","k"],["q","k"],["i","e"],["y","e"],["u","o"]]);var Ka=new Map([["ai","ei"],["ae","a"],["oe","o"],["ue","u"],["sh","s"],["ch","c"],["th","t"],["ph","f"],["pf","f"]]),La=[/([^aeo])h([aeo$])/g,"$1$2",/([aeo])h([^aeo]|$)/g,"$1$2"];var Ma={a:"",e:"",i:"",o:"",u:"",y:"",b:1,f:1,p:1,v:1,c:2,g:2,j:2,k:2,q:2,s:2,x:2,z:2,"\u00df":2,d:3,t:3,l:4,m:5,n:5,r:6};var Na=/[\x00-\x7F]+/g;var Oa=/[\x00-\x7F]+/g;var Pa=/[\x00-\x7F]+/g;var Qa={LatinExact:{normalize:!1,dedupe:!1},LatinDefault:Ia,LatinSimple:{normalize:!0,dedupe:!0},LatinBalance:{normalize:!0,dedupe:!0,mapper:Ja},LatinAdvanced:{normalize:!0,dedupe:!0,mapper:Ja,replacer:La,matcher:Ka},LatinExtra:{normalize:!0,dedupe:!0,mapper:Ja,replacer:La.concat([/(?!^)[aeoy]/g,""]),matcher:Ka},LatinSoundex:{normalize:!0,dedupe:!1,include:{letter:!0},finalize:function(a){for(var b=0;b=f.length)b-=f.length;else{b=f[d?"splice":"slice"](b,c);if(f=b.length)if(e=e.length?e.concat(b):b,c-=f,d&&(a.length-=f),!c)break;b=0}return e} +function R(a){if(!this)return new R(a);this.index=a?[a]:[];this.length=a?a.length:0;var b=this;return new Proxy([],{get:function(c,d){if("length"===d)return b.length;if("push"===d)return function(e){b.index[b.index.length-1].push(e);b.length++};if("pop"===d)return function(){if(b.length)return b.length--,b.index[b.index.length-1].pop()};if("indexOf"===d)return function(e){for(var h=0,f=0,g,k;fn;q--){p=l.substring(n,q);var r=this.score?this.score(b,l,k,p,n):$a(g,d,k,m,n);ab(this,h,p,r,a,c)}break}case "reverse":if(1< +m){for(q=m-1;0p?0:1),d,k,q-1,r-1),u=this.bidirectional&&l>n;ab(this,e,u?n:l,y,a,c,u?l:n)}}}}this.fastupdate||this.reg.add(a)}else b=""}this.db&& +(b||this.O.push({del:a}),this.ea&&bb(this));return this}; +function ab(a,b,c,d,e,h,f){var g=f?a.ctx:a.map,k;if(!b[c]||!f||!(k=b[c])[f])if(f?(b=k||(b[c]=K()),b[f]=1,(k=g.get(f))?g=k:g.set(f,g=new Map)):b[c]=1,(k=g.get(c))?g=k:g.set(c,g=k=[]),g=g[d]||(g[d]=[]),!h||!g.includes(e)){if(g.length===Math.pow(2,31)-1){b=new R(g);if(a.fastupdate)for(c=x(a.reg.values()),h=c.next();!h.done;h=c.next())h=h.value,h.includes(g)&&(h[h.indexOf(g)]=b);k[d]=g=b}g.push(e);a.fastupdate&&((d=a.reg.get(e))?d.push(g):a.reg.set(e,[g]))}} +function $a(a,b,c,d,e){return c&&1b?b?a.slice(c,c+b):a.slice(c):a,d?cb(a):a;for(var e=[],h=0,f=void 0,g=void 0;h=g){c-=g;continue}cb&&(f=f.slice(0,b),g=f.length),e.push(f);else{if(g>=b)return g>b&&(f=f.slice(0,b)),d?cb(f):f;e=[f]}b-=g;if(!b)break}if(!e.length)return e;e=1a.length)return e?W(a[0],b,c,d):a[0];d=[];for(var f=0,g=K(),k=za(a),l=0,m;la.length)return[];var h=[],f=0,g=K(),k=za(a);if(!k)return h;for(var l=0,m;la.length)return e?W(a[0],b,c,d):a[0];b=[];c=K();d=0;for(var f;dc||d)f=f.slice(d,c+d)}return f} +function jb(a,b){for(var c=K(),d=K(),e=[],h=0;h=e)))break;if(g.length){if(f)return W(g,e,0);b.push(g);return}}return!c&&g}function Y(a,b,c,d,e,h,f,g){var k;c&&(k=a.bidirectional&&b>c);if(a.db)return c?a.db.get(k?c:b,k?b:c,d,e,h,f,g):a.db.get(b,"",d,e,h,f,g);a=c?(a=a.ctx.get(k?b:c))&&a.get(k?c:b):a.map.get(b);return a};V.prototype.remove=function(a,b){var c=this.reg.size&&(this.fastupdate?this.reg.get(a):this.reg.has(a));if(c){if(this.fastupdate)for(var d=0,e;de.length)e.pop();else{var h=e.indexOf(a);h===c.length-1?e.pop():e.splice(h,1)}}else mb(this.map,a),this.depth&&mb(this.ctx,a);b||this.reg.delete(a)}this.db&&(this.O.push({del:a}),this.ea&&bb(this));this.cache&&this.cache.remove(a);return this}; +function mb(a,b){var c=0;if(a.constructor===Array)for(var d=0,e=void 0,h;dc||d)a=a.slice(d,d+c);e&&(a=wb.call(this,a));return a}}function wb(a){for(var b=Array(a.length),c=0,d;c=m.length)d-=m.length;else{for(var n=c?d+Math.min(m.length-d,c):m.length,p=d;p=g.length)return[];if(!b&&!c)return g;g=g.slice(c,c+b);return d?e.enrich(g):g})}; -w.enrich=function(a){"object"!==typeof a&&(a=[a]);for(var b=this.db.transaction("reg","readonly").objectStore("reg"),c=[],d=0;dm&&!g&&"string"===typeof n&&!isNaN(n)&&(m=k.indexOf(parseInt(n,10)))&&(g=1),0<=m)if(e=1,1=m.length)d-=m.length;else{for(var n=c?d+Math.min(m.length-d,c):m.length,p=d;p=h.length)return[];if(!b&&!c)return h;h=h.slice(c,c+b);return d?e.enrich(h):h})}; +w.enrich=function(a){"object"!==typeof a&&(a=[a]);for(var b=this.db.transaction("reg","readonly").objectStore("reg"),c=[],d=0;dm&&!h&&"string"===typeof n&&!isNaN(n)&&(m=k.indexOf(parseInt(n,10)))&&(h=1),0<=m)if(e=1,1 this.stemmer.get(m)), k = 1); - this.matcher && 1 < f.length && (this.v || (this.v = new RegExp("(" + this.s + ")", "g")), f = f.replace(this.v, m => this.matcher.get(m)), k = 1); + this.stemmer && 2 < f.length && (this.u || (this.u = new RegExp("(?!^)(" + this.o + ")$")), f = f.replace(this.u, m => this.stemmer.get(m)), k = 1); + this.matcher && 1 < f.length && (this.s || (this.s = new RegExp("(" + this.m + ")", "g")), f = f.replace(this.s, m => this.matcher.get(m)), k = 1); f && k && (f.length < this.minlength || this.filter && this.filter.has(f)) && (f = ""); if (f && (this.mapper || this.dedupe && 1 < f.length)) { e = ""; @@ -163,30 +163,30 @@ C.prototype.encode = function(a) { f = f.replace(this.replacer[e], this.replacer[e + 1]); } } - this.cache && h.length <= this.o && (this.j.set(h, f), this.j.size > this.B && (this.j.clear(), this.o = this.o / 1.1 | 0)); + this.cache && h.length <= this.l && (this.i.set(h, f), this.i.size > this.v && (this.i.clear(), this.l = this.l / 1.1 | 0)); f && b.push(f); } this.finalize && (b = this.finalize(b) || b); - this.cache && a.length <= this.h && (this.i.set(a, b), this.i.size > this.B && (this.i.clear(), this.h = this.h / 1.1 | 0)); + this.cache && a.length <= this.g && (this.h.set(a, b), this.h.size > this.v && (this.h.clear(), this.g = this.g / 1.1 | 0)); return b; }; function D(a) { - a.m = null; + a.j = null; + a.h.clear(); a.i.clear(); - a.j.clear(); } ;function E(a) { this.limit = a && !0 !== a ? a : 1000; this.cache = new Map(); - this.h = ""; + this.g = ""; } E.prototype.set = function(a, c) { - this.cache.set(this.h = a, c); + this.cache.set(this.g = a, c); this.cache.size > this.limit && this.cache.delete(this.cache.keys().next().value); }; E.prototype.get = function(a) { const c = this.cache.get(a); - c && this.h !== a && (this.cache.delete(a), this.cache.set(this.h = a, c)); + c && this.g !== a && (this.cache.delete(a), this.cache.set(this.g = a, c)); return c; }; E.prototype.remove = function(a) { @@ -197,7 +197,7 @@ E.prototype.remove = function(a) { }; E.prototype.clear = function() { this.cache.clear(); - this.h = ""; + this.g = ""; }; const F = {normalize:function(a) { return a.toLowerCase(); @@ -206,7 +206,7 @@ const G = {memory:{resolution:1}, performance:{resolution:6, fastupdate:!0, cont u(); H.prototype.add = function(a, c, b, d) { if (c && (a || 0 === a)) { - if (!d && !b && this.g.has(a)) { + if (!d && !b && this.reg.has(a)) { return this.update(a, c); } c = this.encoder.encode(c); @@ -245,7 +245,7 @@ H.prototype.add = function(a, c, b, d) { } default: if (J(this, l, q, g, a, b), p && 1 < d && n < d - 1) { - for (e = u(), f = this.C, g = q, h = Math.min(p + 1, d - n), e[g] = 1, k = 1; k < h; k++) { + for (e = u(), f = this.A, g = q, h = Math.min(p + 1, d - n), e[g] = 1, k = 1; k < h; k++) { if ((q = c[this.rtl ? d - 1 - n - k : n + k]) && !e[q]) { e[q] = 1; const A = this.score ? this.score(c, g, n, q, k) : I(f + (d / 2 > f ? 0 : 1), d, n, h - 1, k - 1), M = this.bidirectional && q > g; @@ -256,14 +256,14 @@ H.prototype.add = function(a, c, b, d) { } } } - this.fastupdate || this.g.add(a); + this.fastupdate || this.reg.add(a); } } return this; }; function J(a, c, b, d, e, g, f) { - let h = f ? a.l : a.map, k; - c[b] && f && (k = c[b])[f] || (f ? (c = k || (c[b] = u()), c[f] = 1, (k = h.get(f)) ? h = k : h.set(f, h = new Map())) : c[b] = 1, (k = h.get(b)) ? h = k : h.set(b, h = []), h = h[d] || (h[d] = []), g && h.includes(e) || (h.push(e), a.fastupdate && ((c = a.g.get(e)) ? c.push(h) : a.g.set(e, [h])))); + let h = f ? a.ctx : a.map, k; + c[b] && f && (k = c[b])[f] || (f ? (c = k || (c[b] = u()), c[f] = 1, (k = h.get(f)) ? h = k : h.set(f, h = new Map())) : c[b] = 1, (k = h.get(b)) ? h = k : h.set(b, h = []), h = h[d] || (h[d] = []), g && h.includes(e) || (h.push(e), a.fastupdate && ((c = a.reg.get(e)) ? c.push(h) : a.reg.set(e, [h])))); } function I(a, c, b, d, e) { return b && 1 < a ? c + (d || 0) <= a ? b + (e || 0) : (a - 1) / (c + (d || 0)) * (b + (e || 0)) + 1 | 0 : 0; @@ -357,7 +357,7 @@ function I(a, c, b, d, e) { } for (let p, r; m < b; m++) { r = a[m]; - l ? (p = N(this, r, l), p = O(p, d, f, this.C, c, e, 2 === b), f && !1 === p && d.length || (l = r)) : (p = N(this, r), p = O(p, d, f, this.resolution, c, e, 1 === b)); + l ? (p = N(this, r, l), p = O(p, d, f, this.A, c, e, 2 === b), f && !1 === p && d.length || (l = r)) : (p = N(this, r), p = O(p, d, f, this.resolution, c, e, 1 === b)); if (p) { return p; } @@ -458,11 +458,11 @@ function O(a, c, b, d, e, g, f) { function N(a, c, b) { let d; b && (d = a.bidirectional && c > b); - a = b ? (a = a.l.get(d ? c : b)) && a.get(d ? b : c) : a.map.get(c); + a = b ? (a = a.ctx.get(d ? c : b)) && a.get(d ? b : c) : a.map.get(c); return a; } ;H.prototype.remove = function(a, c) { - const b = this.g.size && (this.fastupdate ? this.g.get(a) : this.g.has(a)); + const b = this.reg.size && (this.fastupdate ? this.reg.get(a) : this.reg.has(a)); if (b) { if (this.fastupdate) { for (let d = 0, e; d < b.length; d++) { @@ -476,9 +476,9 @@ function N(a, c, b) { } } } else { - P(this.map, a), this.depth && P(this.l, a); + P(this.map, a), this.depth && P(this.ctx, a); } - c || this.g.delete(a); + c || this.reg.delete(a); } this.cache && this.cache.remove(a); return this; @@ -526,16 +526,16 @@ function P(a, c) { this.score = a.score || null; e = !1; this.map = new Map(); - this.l = new Map(); - this.g = c || (this.fastupdate ? new Map() : new Set()); - this.C = b.resolution || 1; + this.ctx = new Map(); + this.reg = c || (this.fastupdate ? new Map() : new Set()); + this.A = b.resolution || 1; this.rtl = d.rtl || a.rtl || !1; this.cache = (e = a.cache || null) && new E(e); } H.prototype.clear = function() { this.map.clear(); - this.l.clear(); - this.g.clear(); + this.ctx.clear(); + this.reg.clear(); this.cache && this.cache.clear(); return this; }; @@ -543,7 +543,7 @@ H.prototype.append = function(a, c) { return this.add(a, c, !0); }; H.prototype.contain = function(a) { - return this.g.has(a); + return this.reg.has(a); }; H.prototype.update = function(a, c) { if (this.async) { @@ -571,7 +571,7 @@ H.prototype.cleanup = function() { return console.info('Cleanup the index isn\'t required when not using "fastupdate".'), this; } Q(this.map); - this.depth && Q(this.l); + this.depth && Q(this.ctx); return this; }; H.prototype.searchCache = function(a, c, b) { diff --git a/dist/flexsearch.light.min.js b/dist/flexsearch.light.min.js index 0da94ac..dffb152 100644 --- a/dist/flexsearch.light.min.js +++ b/dist/flexsearch.light.min.js @@ -8,18 +8,18 @@ (function(self){'use strict';function t(a,c,b){const d=typeof b,e=typeof a;if("undefined"!==d){if("undefined"!==e){if(b){if("function"===e&&d===e)return function(h){return a(b(h))};c=a.constructor;if(c===b.constructor){if(c===Array)return b.concat(a);if(c===Map){var g=new Map(b);for(var f of a)g.set(f[0],f[1]);return g}if(c===Set){f=new Set(b);for(g of a.values())f.add(g);return f}}}return a}return b}return"undefined"===e?c:a}function u(){return Object.create(null)}function v(a,c){return c.length-a.length};const w=/[^\p{L}\p{N}]+/u,x=/(\d{3})/g,y=/(\D)(\d{3})/g,z=/(\d{3})(\D)/g,B="".normalize&&/[\u0300-\u036f]/g;function C(a){if(!this)return new C(...arguments);for(let c=0;cthis.stemmer.get(m)),k=1);this.matcher&&1this.matcher.get(m)),k=1);f&&k&&(f.lengththis.B&&(this.j.clear(),this.o=this.o/1.1|0));f&&b.push(f)}this.finalize&&(b=this.finalize(b)||b);this.cache&&a.length<=this.h&&(this.i.set(a,b),this.i.size>this.B&&(this.i.clear(),this.h=this.h/1.1|0));return b};function D(a){a.m=null;a.i.clear();a.j.clear()};function E(a){this.limit=a&&!0!==a?a:1E3;this.cache=new Map;this.h=""}E.prototype.set=function(a,c){this.cache.set(this.h=a,c);this.cache.size>this.limit&&this.cache.delete(this.cache.keys().next().value)};E.prototype.get=function(a){const c=this.cache.get(a);c&&this.h!==a&&(this.cache.delete(a),this.cache.set(this.h=a,c));return c};E.prototype.remove=function(a){for(const c of this.cache){const b=c[0];c[1].includes(a)&&this.cache.delete(b)}}; -E.prototype.clear=function(){this.cache.clear();this.h=""};const F={normalize:function(a){return a.toLowerCase()},dedupe:!1};const G={memory:{resolution:1},performance:{resolution:6,fastupdate:!0,context:{depth:1,resolution:3}},match:{tokenize:"forward"},score:{resolution:9,context:{depth:2,resolution:9}}};u();H.prototype.add=function(a,c,b,d){if(c&&(a||0===a)){if(!d&&!b&&this.g.has(a))return this.update(a,c);c=this.encoder.encode(c);if(d=c.length){const m=u(),l=u(),p=this.depth,r=this.resolution;for(let n=0;ng;h--){f=q.substring(g,h);var k=this.score?this.score(c,q,n,f,g):I(r,d,n,e,g);J(this,l,f,k,a,b)}break}case "reverse":if(1< -e){for(h=e-1;0f?0:1),d,n,h-1,k-1),L=this.bidirectional&&q>g;J(this,m,L?g:q,A,a,b,L?q:g)}}}}this.fastupdate||this.g.add(a)}}return this}; -function J(a,c,b,d,e,g,f){let h=f?a.l:a.map,k;c[b]&&f&&(k=c[b])[f]||(f?(c=k||(c[b]=u()),c[f]=1,(k=h.get(f))?h=k:h.set(f,h=new Map)):c[b]=1,(k=h.get(b))?h=k:h.set(b,h=[]),h=h[d]||(h[d]=[]),g&&h.includes(e)||(h.push(e),a.fastupdate&&((c=a.g.get(e))?c.push(h):a.g.set(e,[h]))))}function I(a,c,b,d,e){return b&&1c?c?a.slice(b,b+c):a.slice(b):a;let d=[];for(let e=0,g,f;e=f){b-=f;continue}bc&&(g=g.slice(0,c),f=g.length),d.push(g);else{if(f>=c)return f>c&&(g=g.slice(0,c)),g;d=[g]}c-=f;if(!c)break}return d.length?d=1this.stemmer.get(m)),k=1);this.matcher&&1this.matcher.get(m)),k=1);f&&k&&(f.lengththis.v&&(this.i.clear(),this.l=this.l/1.1|0));f&&b.push(f)}this.finalize&&(b=this.finalize(b)||b);this.cache&&a.length<=this.g&&(this.h.set(a,b),this.h.size>this.v&&(this.h.clear(),this.g=this.g/1.1|0));return b};function D(a){a.j=null;a.h.clear();a.i.clear()};function E(a){this.limit=a&&!0!==a?a:1E3;this.cache=new Map;this.g=""}E.prototype.set=function(a,c){this.cache.set(this.g=a,c);this.cache.size>this.limit&&this.cache.delete(this.cache.keys().next().value)};E.prototype.get=function(a){const c=this.cache.get(a);c&&this.g!==a&&(this.cache.delete(a),this.cache.set(this.g=a,c));return c};E.prototype.remove=function(a){for(const c of this.cache){const b=c[0];c[1].includes(a)&&this.cache.delete(b)}}; +E.prototype.clear=function(){this.cache.clear();this.g=""};const F={normalize:function(a){return a.toLowerCase()},dedupe:!1};const G={memory:{resolution:1},performance:{resolution:6,fastupdate:!0,context:{depth:1,resolution:3}},match:{tokenize:"forward"},score:{resolution:9,context:{depth:2,resolution:9}}};u();H.prototype.add=function(a,c,b,d){if(c&&(a||0===a)){if(!d&&!b&&this.reg.has(a))return this.update(a,c);c=this.encoder.encode(c);if(d=c.length){const m=u(),l=u(),p=this.depth,r=this.resolution;for(let n=0;ng;h--){f=q.substring(g,h);var k=this.score?this.score(c,q,n,f,g):I(r,d,n,e,g);J(this,l,f,k,a,b)}break}case "reverse":if(1< +e){for(h=e-1;0f?0:1),d,n,h-1,k-1),L=this.bidirectional&&q>g;J(this,m,L?g:q,A,a,b,L?q:g)}}}}this.fastupdate||this.reg.add(a)}}return this}; +function J(a,c,b,d,e,g,f){let h=f?a.ctx:a.map,k;c[b]&&f&&(k=c[b])[f]||(f?(c=k||(c[b]=u()),c[f]=1,(k=h.get(f))?h=k:h.set(f,h=new Map)):c[b]=1,(k=h.get(b))?h=k:h.set(b,h=[]),h=h[d]||(h[d]=[]),g&&h.includes(e)||(h.push(e),a.fastupdate&&((c=a.reg.get(e))?c.push(h):a.reg.set(e,[h]))))}function I(a,c,b,d,e){return b&&1c?c?a.slice(b,b+c):a.slice(b):a;let d=[];for(let e=0,g,f;e=f){b-=f;continue}bc&&(g=g.slice(0,c),f=g.length),d.push(g);else{if(f>=c)return f>c&&(g=g.slice(0,c)),g;d=[g]}c-=f;if(!c)break}return d.length?d=1c||e)b=b.slice(e,c+e)}d=b}return d}; -function M(a,c,b,d){return(a=N(this,a,c))&&a.length?K(a,b,d):[]}function O(a,c,b,d,e,g,f){let h=[];if(a){d=Math.min(a.length,d);for(let k=0,m=0,l;k=e)))break;if(h.length){if(f)return K(h,e,0);c.push(h);return}}return!b&&h}function N(a,c,b){let d;b&&(d=a.bidirectional&&c>b);a=b?(a=a.l.get(d?c:b))&&a.get(d?b:c):a.map.get(c);return a};H.prototype.remove=function(a,c){const b=this.g.size&&(this.fastupdate?this.g.get(a):this.g.has(a));if(b){if(this.fastupdate)for(let d=0,e;de.length)e.pop();else{const g=e.indexOf(a);g===b.length-1?e.pop():e.splice(g,1)}}else P(this.map,a),this.depth&&P(this.l,a);c||this.g.delete(a)}this.cache&&this.cache.remove(a);return this}; -function P(a,c){let b=0;if(a.constructor===Array)for(let d=0,e,g;db.add(a,c)):this.add(a,c)}return this.remove(a).add(a,c)}; -function Q(a){let c=0;if(a.constructor===Array)for(let b=0,d;b=e)))break;if(h.length){if(f)return K(h,e,0);c.push(h);return}}return!b&&h}function N(a,c,b){let d;b&&(d=a.bidirectional&&c>b);a=b?(a=a.ctx.get(d?c:b))&&a.get(d?b:c):a.map.get(c);return a};H.prototype.remove=function(a,c){const b=this.reg.size&&(this.fastupdate?this.reg.get(a):this.reg.has(a));if(b){if(this.fastupdate)for(let d=0,e;de.length)e.pop();else{const g=e.indexOf(a);g===b.length-1?e.pop():e.splice(g,1)}}else P(this.map,a),this.depth&&P(this.ctx,a);c||this.reg.delete(a)}this.cache&&this.cache.remove(a);return this}; +function P(a,c){let b=0;if(a.constructor===Array)for(let d=0,e,g;db.add(a,c)):this.add(a,c)}return this.remove(a).add(a,c)}; +function Q(a){let c=0;if(a.constructor===Array)for(let b=0,d;b this.limit && this.cache.delete(this.cache.keys().next().value); }; v.prototype.get = function(a) { const c = this.cache.get(a); - c && this.B !== a && (this.cache.delete(a), this.cache.set(this.B = a, c)); + c && this.h !== a && (this.cache.delete(a), this.cache.set(this.h = a, c)); return c; }; v.prototype.remove = function(a) { @@ -33,7 +33,7 @@ v.prototype.remove = function(a) { }; v.prototype.clear = function() { this.cache.clear(); - this.B = ""; + this.h = ""; }; const w = new Map([["b", "p"], ["v", "f"], ["w", "f"], ["z", "s"], ["x", "s"], ["d", "t"], ["n", "m"], ["c", "k"], ["g", "k"], ["j", "k"], ["q", "k"], ["i", "e"], ["y", "e"], ["u", "o"]]); const x = new Map([["ai", "ei"], ["ae", "a"], ["oe", "o"], ["ue", "u"], ["sh", "s"], ["ch", "c"], ["th", "t"], ["ph", "f"], ["pf", "f"]]), z = [/([^aeo])h([aeo$])/g, "$1$2", /([aeo])h([^aeo]|$)/g, "$1$2"]; @@ -67,7 +67,7 @@ function G(a) { ;t(); H.prototype.add = function(a, c, b, d) { if (c && (a || 0 === a)) { - if (!d && !b && this.h.has(a)) { + if (!d && !b && this.reg.has(a)) { return this.update(a, c); } c = this.encoder.encode(c); @@ -106,7 +106,7 @@ H.prototype.add = function(a, c, b, d) { } default: if (K(this, m, n, f, a, b), q && 1 < d && l < d - 1) { - for (e = t(), g = this.C, f = n, h = Math.min(q + 1, d - l), e[f] = 1, k = 1; k < h; k++) { + for (e = t(), g = this.A, f = n, h = Math.min(q + 1, d - l), e[f] = 1, k = 1; k < h; k++) { if ((n = c[this.rtl ? d - 1 - l - k : l + k]) && !e[n]) { e[n] = 1; const y = this.score ? this.score(c, f, l, n, k) : I(g + (d / 2 > g ? 0 : 1), d, l, h - 1, k - 1), J = this.bidirectional && n > f; @@ -117,14 +117,14 @@ H.prototype.add = function(a, c, b, d) { } } } - this.fastupdate || this.h.add(a); + this.fastupdate || this.reg.add(a); } } return this; }; function K(a, c, b, d, e, f, g) { - let h = g ? a.A : a.map, k; - c[b] && g && (k = c[b])[g] || (g ? (c = k || (c[b] = t()), c[g] = 1, (k = h.get(g)) ? h = k : h.set(g, h = new Map())) : c[b] = 1, (k = h.get(b)) ? h = k : h.set(b, h = []), h = h[d] || (h[d] = []), f && h.includes(e) || (h.push(e), a.fastupdate && ((c = a.h.get(e)) ? c.push(h) : a.h.set(e, [h])))); + let h = g ? a.ctx : a.map, k; + c[b] && g && (k = c[b])[g] || (g ? (c = k || (c[b] = t()), c[g] = 1, (k = h.get(g)) ? h = k : h.set(g, h = new Map())) : c[b] = 1, (k = h.get(b)) ? h = k : h.set(b, h = []), h = h[d] || (h[d] = []), f && h.includes(e) || (h.push(e), a.fastupdate && ((c = a.reg.get(e)) ? c.push(h) : a.reg.set(e, [h])))); } function I(a, c, b, d, e) { return b && 1 < a ? c + (d || 0) <= a ? b + (e || 0) : (a - 1) / (c + (d || 0)) * (b + (e || 0)) + 1 | 0 : 0; @@ -218,7 +218,7 @@ function I(a, c, b, d, e) { } for (let q, r; p < b; p++) { r = a[p]; - m ? (q = N(this, r, m), q = O(q, d, g, this.C, c, e, 2 === b), g && !1 === q && d.length || (m = r)) : (q = N(this, r), q = O(q, d, g, this.resolution, c, e, 1 === b)); + m ? (q = N(this, r, m), q = O(q, d, g, this.A, c, e, 2 === b), g && !1 === q && d.length || (m = r)) : (q = N(this, r), q = O(q, d, g, this.resolution, c, e, 1 === b)); if (q) { return q; } @@ -319,11 +319,11 @@ function O(a, c, b, d, e, f, g) { function N(a, c, b) { let d; b && (d = a.bidirectional && c > b); - a = b ? (a = a.A.get(d ? c : b)) && a.get(d ? b : c) : a.map.get(c); + a = b ? (a = a.ctx.get(d ? c : b)) && a.get(d ? b : c) : a.map.get(c); return a; } ;H.prototype.remove = function(a, c) { - const b = this.h.size && (this.fastupdate ? this.h.get(a) : this.h.has(a)); + const b = this.reg.size && (this.fastupdate ? this.reg.get(a) : this.reg.has(a)); if (b) { if (this.fastupdate) { for (let d = 0, e; d < b.length; d++) { @@ -337,9 +337,9 @@ function N(a, c, b) { } } } else { - P(this.map, a), this.depth && P(this.A, a); + P(this.map, a), this.depth && P(this.ctx, a); } - c || this.h.delete(a); + c || this.reg.delete(a); } this.cache && this.cache.remove(a); return this; @@ -383,16 +383,16 @@ function P(a, c) { this.score = a.score || null; e = !1; this.map = new Map(); - this.A = new Map(); - this.h = c || (this.fastupdate ? new Map() : new Set()); - this.C = b.resolution || 1; + this.ctx = new Map(); + this.reg = c || (this.fastupdate ? new Map() : new Set()); + this.A = b.resolution || 1; this.rtl = d.rtl || a.rtl || !1; this.cache = (e = a.cache || null) && new v(e); } H.prototype.clear = function() { this.map.clear(); - this.A.clear(); - this.h.clear(); + this.ctx.clear(); + this.reg.clear(); this.cache && this.cache.clear(); return this; }; @@ -400,7 +400,7 @@ H.prototype.append = function(a, c) { return this.add(a, c, !0); }; H.prototype.contain = function(a) { - return this.h.has(a); + return this.reg.has(a); }; H.prototype.update = function(a, c) { if (this.async) { @@ -428,7 +428,7 @@ H.prototype.cleanup = function() { return console.info('Cleanup the index isn\'t required when not using "fastupdate".'), this; } Q(this.map); - this.depth && Q(this.A); + this.depth && Q(this.ctx); return this; }; H.prototype.searchCache = function(a, c, b) { diff --git a/dist/flexsearch.light.module.min.js b/dist/flexsearch.light.module.min.js index 32d6991..86a7a73 100644 --- a/dist/flexsearch.light.module.min.js +++ b/dist/flexsearch.light.module.min.js @@ -5,16 +5,16 @@ * Hosted by Nextapps GmbH * https://github.com/nextapps-de/flexsearch */ -function t(){return Object.create(null)}function u(a,c){return c.length-a.length};function v(a){this.limit=a&&!0!==a?a:1E3;this.cache=new Map;this.B=""}v.prototype.set=function(a,c){this.cache.set(this.B=a,c);this.cache.size>this.limit&&this.cache.delete(this.cache.keys().next().value)};v.prototype.get=function(a){const c=this.cache.get(a);c&&this.B!==a&&(this.cache.delete(a),this.cache.set(this.B=a,c));return c};v.prototype.remove=function(a){for(const c of this.cache){const b=c[0];c[1].includes(a)&&this.cache.delete(b)}}; -v.prototype.clear=function(){this.cache.clear();this.B=""};const w=new Map([["b","p"],["v","f"],["w","f"],["z","s"],["x","s"],["d","t"],["n","m"],["c","k"],["g","k"],["j","k"],["q","k"],["i","e"],["y","e"],["u","o"]]);const x=new Map([["ai","ei"],["ae","a"],["oe","o"],["ue","u"],["sh","s"],["ch","c"],["th","t"],["ph","f"],["pf","f"]]),z=[/([^aeo])h([aeo$])/g,"$1$2",/([aeo])h([^aeo]|$)/g,"$1$2"];const A={a:"",e:"",i:"",o:"",u:"",y:"",b:1,f:1,p:1,v:1,c:2,g:2,j:2,k:2,q:2,s:2,x:2,z:2,"\u00df":2,d:3,t:3,l:4,m:5,n:5,r:6};const B=/[\x00-\x7F]+/g;const C=/[\x00-\x7F]+/g;const D=/[\x00-\x7F]+/g;var E={LatinExact:{normalize:!1,dedupe:!1},LatinDefault:{normalize:function(a){return a.toLowerCase()},dedupe:!1},LatinSimple:{normalize:!0,dedupe:!0},LatinBalance:{normalize:!0,dedupe:!0,mapper:w},LatinAdvanced:{normalize:!0,dedupe:!0,mapper:w,replacer:z,matcher:x},LatinExtra:{normalize:!0,dedupe:!0,mapper:w,replacer:z.concat([/(?!^)[aeoy]/g,""]),matcher:x},LatinSoundex:{normalize:!0,dedupe:!1,include:{letter:!0},finalize:function(a){for(let b=0;bf;h--){g=n.substring(f,h);var k=this.score?this.score(c,n,l,g,f):J(r,d,l,e,f);K(this,m,g,k,a,b)}break}case "reverse":if(1< -e){for(h=e-1;0g?0:1),d,l,h-1,k-1),I=this.bidirectional&&n>f;K(this,p,I?f:n,y,a,b,I?n:f)}}}}this.fastupdate||this.h.add(a)}}return this}; -function K(a,c,b,d,e,f,g){let h=g?a.A:a.map,k;c[b]&&g&&(k=c[b])[g]||(g?(c=k||(c[b]=t()),c[g]=1,(k=h.get(g))?h=k:h.set(g,h=new Map)):c[b]=1,(k=h.get(b))?h=k:h.set(b,h=[]),h=h[d]||(h[d]=[]),f&&h.includes(e)||(h.push(e),a.fastupdate&&((c=a.h.get(e))?c.push(h):a.h.set(e,[h]))))}function J(a,c,b,d,e){return b&&1c?c?a.slice(b,b+c):a.slice(b):a;let d=[];for(let e=0,f,g;e=g){b-=g;continue}bc&&(f=f.slice(0,c),g=f.length),d.push(f);else{if(g>=c)return g>c&&(f=f.slice(0,c)),f;d=[f]}c-=g;if(!c)break}return d.length?d=1this.limit&&this.cache.delete(this.cache.keys().next().value)};v.prototype.get=function(a){const c=this.cache.get(a);c&&this.h!==a&&(this.cache.delete(a),this.cache.set(this.h=a,c));return c};v.prototype.remove=function(a){for(const c of this.cache){const b=c[0];c[1].includes(a)&&this.cache.delete(b)}}; +v.prototype.clear=function(){this.cache.clear();this.h=""};const w=new Map([["b","p"],["v","f"],["w","f"],["z","s"],["x","s"],["d","t"],["n","m"],["c","k"],["g","k"],["j","k"],["q","k"],["i","e"],["y","e"],["u","o"]]);const x=new Map([["ai","ei"],["ae","a"],["oe","o"],["ue","u"],["sh","s"],["ch","c"],["th","t"],["ph","f"],["pf","f"]]),z=[/([^aeo])h([aeo$])/g,"$1$2",/([aeo])h([^aeo]|$)/g,"$1$2"];const A={a:"",e:"",i:"",o:"",u:"",y:"",b:1,f:1,p:1,v:1,c:2,g:2,j:2,k:2,q:2,s:2,x:2,z:2,"\u00df":2,d:3,t:3,l:4,m:5,n:5,r:6};const B=/[\x00-\x7F]+/g;const C=/[\x00-\x7F]+/g;const D=/[\x00-\x7F]+/g;var E={LatinExact:{normalize:!1,dedupe:!1},LatinDefault:{normalize:function(a){return a.toLowerCase()},dedupe:!1},LatinSimple:{normalize:!0,dedupe:!0},LatinBalance:{normalize:!0,dedupe:!0,mapper:w},LatinAdvanced:{normalize:!0,dedupe:!0,mapper:w,replacer:z,matcher:x},LatinExtra:{normalize:!0,dedupe:!0,mapper:w,replacer:z.concat([/(?!^)[aeoy]/g,""]),matcher:x},LatinSoundex:{normalize:!0,dedupe:!1,include:{letter:!0},finalize:function(a){for(let b=0;bf;h--){g=n.substring(f,h);var k=this.score?this.score(c,n,l,g,f):J(r,d,l,e,f);K(this,m,g,k,a,b)}break}case "reverse":if(1< +e){for(h=e-1;0g?0:1),d,l,h-1,k-1),I=this.bidirectional&&n>f;K(this,p,I?f:n,y,a,b,I?n:f)}}}}this.fastupdate||this.reg.add(a)}}return this}; +function K(a,c,b,d,e,f,g){let h=g?a.ctx:a.map,k;c[b]&&g&&(k=c[b])[g]||(g?(c=k||(c[b]=t()),c[g]=1,(k=h.get(g))?h=k:h.set(g,h=new Map)):c[b]=1,(k=h.get(b))?h=k:h.set(b,h=[]),h=h[d]||(h[d]=[]),f&&h.includes(e)||(h.push(e),a.fastupdate&&((c=a.reg.get(e))?c.push(h):a.reg.set(e,[h]))))}function J(a,c,b,d,e){return b&&1c?c?a.slice(b,b+c):a.slice(b):a;let d=[];for(let e=0,f,g;e=g){b-=g;continue}bc&&(f=f.slice(0,c),g=f.length),d.push(f);else{if(g>=c)return g>c&&(f=f.slice(0,c)),f;d=[f]}c-=g;if(!c)break}return d.length?d=1c||e)b=b.slice(e,c+e)}d=b}return d}; -function M(a,c,b,d){return(a=N(this,a,c))&&a.length?L(a,b,d):[]}function O(a,c,b,d,e,f,g){let h=[];if(a){d=Math.min(a.length,d);for(let k=0,p=0,m;k=e)))break;if(h.length){if(g)return L(h,e,0);c.push(h);return}}return!b&&h}function N(a,c,b){let d;b&&(d=a.bidirectional&&c>b);a=b?(a=a.A.get(d?c:b))&&a.get(d?b:c):a.map.get(c);return a};H.prototype.remove=function(a,c){const b=this.h.size&&(this.fastupdate?this.h.get(a):this.h.has(a));if(b){if(this.fastupdate)for(let d=0,e;de.length)e.pop();else{const f=e.indexOf(a);f===b.length-1?e.pop():e.splice(f,1)}}else P(this.map,a),this.depth&&P(this.A,a);c||this.h.delete(a)}this.cache&&this.cache.remove(a);return this}; -function P(a,c){let b=0;if(a.constructor===Array)for(let d=0,e,f;db.add(a,c)):this.add(a,c)}return this.remove(a).add(a,c)}; -function Q(a){let c=0;if(a.constructor===Array)for(let b=0,d;b=e)))break;if(h.length){if(g)return L(h,e,0);c.push(h);return}}return!b&&h}function N(a,c,b){let d;b&&(d=a.bidirectional&&c>b);a=b?(a=a.ctx.get(d?c:b))&&a.get(d?b:c):a.map.get(c);return a};H.prototype.remove=function(a,c){const b=this.reg.size&&(this.fastupdate?this.reg.get(a):this.reg.has(a));if(b){if(this.fastupdate)for(let d=0,e;de.length)e.pop();else{const f=e.indexOf(a);f===b.length-1?e.pop():e.splice(f,1)}}else P(this.map,a),this.depth&&P(this.ctx,a);c||this.reg.delete(a)}this.cache&&this.cache.remove(a);return this}; +function P(a,c){let b=0;if(a.constructor===Array)for(let d=0,e,f;db.add(a,c)):this.add(a,c)}return this.remove(a).add(a,c)}; +function Q(a){let c=0;if(a.constructor===Array)for(let b=0,d;b { +// const split = res.split(":"); +// split[1] = split[1].split("|").map(ids => ids ? ids.split(",") : null); +// return split; +// }); +// flexsearch.map = new Map(map); +// +// input = input.substring(pos_map + 1); +// if(input){ +// const ctx = input.split(";").map(res => { +// const split = res.split(":"); +// const context = split[0].split("+"); +// const map = new Map([ +// [context[1], split[1].split("|").map(ids => ids ? ids.split(",") : null)] +// ]); +// return [context[0], map] +// }); +// flexsearch.ctx = new Map(ctx); +// } +// } \ No newline at end of file diff --git a/dist/module-debug/webpack.js b/dist/module-debug/webpack.js index 4481606..0a1343e 100644 --- a/dist/module-debug/webpack.js +++ b/dist/module-debug/webpack.js @@ -24,10 +24,15 @@ import Charset from "./charset.js"; /** @export */Index.prototype.removeAsync; /** @export */Index.prototype.export; /** @export */Index.prototype.import; +/** @export */Index.prototype.serialize; /** @export */Index.prototype.mount; /** @export */Index.prototype.commit; /** @export */Index.db; +/** @export */Index.prototype.reg; +/** @export */Index.prototype.map; +/** @export */Index.prototype.ctx; + /** @export */Document.prototype.add; /** @export */Document.prototype.append; /** @export */Document.prototype.search; diff --git a/dist/module-min/index.js b/dist/module-min/index.js index e34a00e..99be301 100644 --- a/dist/module-min/index.js +++ b/dist/module-min/index.js @@ -1 +1 @@ -import{IndexOptions,ContextOptions}from"./type.js";import Encoder from"./encoder.js";import Cache,{searchCache}from"./cache.js";import Charset from"./charset.js";import{KeystoreMap,KeystoreSet}from"./keystore.js";import{is_array,is_string}from"./common.js";import{exportIndex,importIndex}from"./serialize.js";import default_encoder from"./charset/latin/default.js";import apply_preset from"./preset.js";import apply_async from"./async.js";import tick from"./profiler.js";import"./index/add.js";import"./index/search.js";import"./index/remove.js";export default function Index(a,b){if(!this)return new Index(a);!1,a=a?apply_preset(a):{};const c=a.context||{},d=a.encode||a.encoder||default_encoder;this.encoder=d.encode?d:"object"==typeof d?new Encoder(d):{encode:d},this.compress=a.compress||a.compression||!1;let e;this.resolution=a.resolution||9,this.tokenize=e=a.tokenize||"strict",this.depth="strict"===e&&c.depth||0,this.bidirectional=!1!==c.bidirectional,this.fastupdate=!!a.fastupdate,this.score=a.score||null,e=a.keystore||0,e&&(this.keystore=e),this.map=e&&!0?new KeystoreMap(e):new Map,this.ctx=e&&!0?new KeystoreMap(e):new Map,this.reg=b||(this.fastupdate?e&&!0?new KeystoreMap(e):new Map:e&&!0?new KeystoreSet(e):new Set),this.resolution_ctx=c.resolution||1,this.rtl=d.rtl||a.rtl||!1,this.cache=(e=a.cache||null)&&new Cache(e),this.resolve=!1!==a.resolve,(e=a.db)&&(this.db=e.mount(this)),this.commit_auto=!1!==a.commit,this.commit_task=[],this.commit_timer=null}Index.prototype.mount=function(a){return this.commit_timer&&(clearTimeout(this.commit_timer),this.commit_timer=null),a.mount(this)},Index.prototype.commit=function(a,b){return this.commit_timer&&(clearTimeout(this.commit_timer),this.commit_timer=null),this.db.commit(this,a,b)};export function autoCommit(a,b,c){a.commit_timer||(a.commit_timer=setTimeout(function(){a.commit_timer=null,a.db.commit(a,b,c)},0))}Index.prototype.clear=function(){return this.map.clear(),this.ctx.clear(),this.reg.clear(),this.cache&&this.cache.clear(),this.db&&(this.commit_timer&&clearTimeout(this.commit_timer),this.commit_timer=null,this.commit_task=[{clear:!0}]),this},Index.prototype.append=function(a,b){return this.add(a,b,!0)},Index.prototype.contain=function(a){return this.db?this.db.has(a):this.reg.has(a)},Index.prototype.update=function(a,b){if(this.async){const c=this,d=this.remove(a);return d.then?d.then(()=>c.add(a,b)):this.add(a,b)}return this.remove(a).add(a,b)};function cleanup_index(a){let b=0;if(is_array(a))for(let c,d=0;dc.add(a,b)):this.add(a,b)}return this.remove(a).add(a,b)};function cleanup_index(a){let b=0;if(is_array(a))for(let c,d=0;d{f=a}));let h,i;switch(e||(e=0)){case 0:if(h="reg",this.fastupdate){i=create_object();for(let a of this.reg.keys())i[a]=1}else i=this.reg;break;case 1:h="cfg",i={doc:0,opt:this.optimize?1:0};break;case 2:h="map",i=this.map;break;case 3:h="ctx",i=this.ctx;break;default:return void("undefined"==typeof c&&f&&f());}return async(a,b||this,c,h,d,e,i,f),g}export function importIndex(a,b){b&&(is_string(b)&&(b=JSON.parse(b)),"cfg"===a?this.optimize=!!b.opt:"reg"===a?(this.fastupdate=!1,this.reg=b):"map"===a?this.map=b:"ctx"===a?this.ctx=b:void 0)}export function exportDocument(a,b,c,d,e,f){let g;if("undefined"==typeof f&&(g=new Promise(a=>{f=a})),e||(e=0),d||(d=0),d{f=a}));let h,i;switch(e||(e=0)){case 0:if(h="reg",this.fastupdate){i=create_object();for(let a of this.reg.keys())i[a]=1}else i=this.reg;break;case 1:h="cfg",i={doc:0,opt:this.optimize?1:0};break;case 2:h="map",i=this.map;break;case 3:h="ctx",i=this.ctx;break;default:return void("undefined"==typeof c&&f&&f());}return async(a,b||this,c,h,d,e,i,f),g}export function importIndex(a,b){b&&(is_string(b)&&(b=JSON.parse(b)),"cfg"===a?this.optimize=!!b.opt:"reg"===a?(this.fastupdate=!1,this.reg=b):"map"===a?this.map=b:"ctx"===a?this.ctx=b:void 0)}export function exportDocument(a,b,c,d,e,f){let g;if("undefined"==typeof f&&(g=new Promise(a=>{f=a})),e||(e=0),d||(d=0),d { +// const split = res.split(":"); +// split[1] = split[1].split("|").map(ids => ids ? ids.split(",") : null); +// return split; +// }); +// flexsearch.map = new Map(map); +// +// input = input.substring(pos_map + 1); +// if(input){ +// const ctx = input.split(";").map(res => { +// const split = res.split(":"); +// const context = split[0].split("+"); +// const map = new Map([ +// [context[1], split[1].split("|").map(ids => ids ? ids.split(",") : null)] +// ]); +// return [context[0], map] +// }); +// flexsearch.ctx = new Map(ctx); +// } +// } \ No newline at end of file diff --git a/dist/module/webpack.js b/dist/module/webpack.js index 4481606..0a1343e 100644 --- a/dist/module/webpack.js +++ b/dist/module/webpack.js @@ -24,10 +24,15 @@ import Charset from "./charset.js"; /** @export */Index.prototype.removeAsync; /** @export */Index.prototype.export; /** @export */Index.prototype.import; +/** @export */Index.prototype.serialize; /** @export */Index.prototype.mount; /** @export */Index.prototype.commit; /** @export */Index.db; +/** @export */Index.prototype.reg; +/** @export */Index.prototype.map; +/** @export */Index.prototype.ctx; + /** @export */Document.prototype.add; /** @export */Document.prototype.append; /** @export */Document.prototype.search; diff --git a/src/index.js b/src/index.js index fa6be4d..c611952 100644 --- a/src/index.js +++ b/src/index.js @@ -30,7 +30,7 @@ import Cache, { searchCache } from "./cache.js"; import Charset from "./charset.js"; import { KeystoreMap, KeystoreSet } from "./keystore.js"; import { is_array, is_string } from "./common.js"; -import { exportIndex, importIndex } from "./serialize.js"; +import { exportIndex, importIndex, serialize } from "./serialize.js"; import default_encoder from "./charset/latin/default.js"; import apply_preset from "./preset.js"; import apply_async from "./async.js"; @@ -262,6 +262,7 @@ if(SUPPORT_SERIALIZE){ Index.prototype.export = exportIndex; Index.prototype.import = importIndex; + Index.prototype.serialize = serialize; } if(SUPPORT_ASYNC){ diff --git a/src/serialize.js b/src/serialize.js index d7dac2b..5b74fb8 100644 --- a/src/serialize.js +++ b/src/serialize.js @@ -279,3 +279,162 @@ export function importDocument(key, data){ } } } + +/* +reg: "1,2,3,4,5,6,7,8,9" +map: "gulliver:1,2,3|4,5,6|7,8,9;" +ctx: "gulliver+travel:1,2,3|4,5,6|7,8,9;" +*/ + +/** + * @this Index + * @param {boolean} withFunctionWrapper + * @return {string} + */ + +export function serialize(withFunctionWrapper = true){ + + if(!this.reg.size) return ""; + + let reg = ''; + let type = ""; + for(const key of this.reg.keys()){ + type || (type = typeof key); + reg += (reg ? ',' : '') + (type === "string" ? '"' + key + '"' : key); + } + reg = 'index.reg=new Set([' + reg + ']);'; + + let map = ''; + for(const item of this.map.entries()){ + const key = item[0]; + const value = item[1]; + let res = ''; + for(let i = 0, ids; i < value.length; i++){ + ids = value[i] || ['']; + let str = ''; + for(let j = 0; j < ids.length; j++){ + str += (str ? ',' : '') + (type === "string" ? '"' + ids[j] + '"' : ids[j]); + } + str = '[' + str + ']'; + res += (res ? ',' : '') + str; + } + res = '["' + key + '",[' + res + ']]'; + map += (map ? ',' : '') + res; + } + map = "index.map=new Map([" + map + "]);"; + + let ctx = ''; + for(const context of this.ctx.entries()){ + const key_ctx = context[0]; + const value_ctx = context[1]; + + for(const item of value_ctx.entries()){ + const key = item[0]; + const value = item[1]; + + let res = ''; + for(let i = 0, ids; i < value.length; i++){ + ids = value[i] || ['']; + let str = ''; + for(let j = 0; j < ids.length; j++){ + str += (str ? ',' : '') + (type === "string" ? '"' + ids[j] + '"' : ids[j]); + } + str = '[' + str + ']'; + res += (res ? ',' : '') + str; + } + res = 'new Map([["' + key + '",[' + res + ']]])'; + res = '["' + key_ctx + '",' + res + ']'; + ctx += (ctx ? ',' : '') + res; + } + } + ctx = "index.ctx=new Map([" + ctx + "]);"; + + return withFunctionWrapper + ? "function inject(index){" + reg + map + ctx + "}" + : reg + map + ctx +} + +// export function exportSnapshot(flexsearch){ +// +// if(!flexsearch.reg.size) return; +// +// let reg = ''; +// let type = ""; +// for(const key of flexsearch.reg.keys()){ +// type || (type = typeof key); +// reg += (reg ? ',' : '') + (type === "string" ? '"' + key + '"' : key); +// } +// reg = "f.reg=[" + reg + "];"; +// +// let map = ''; +// for(const item of flexsearch.map.entries()){ +// const key = item[0]; +// const value = item[1]; +// let res = ''; +// for(let i = 0, ids; i < value.length; i++){ +// ids = value[i] || ['']; +// let str = ''; +// for(let j = 0; j < ids.length; j++){ +// str += (str ? ',' : '') + (type === "string" ? '"' + ids[j] + '"' : ids[j]); +// } +// str = "[ +// res += (res ? '|' : '') + str; +// } +// map += (map ? ';' : '') + key + ':' + res; +// } +// +// +// let ctx = ''; +// for(const context of flexsearch.ctx.entries()){ +// const key_ctx = context[0]; +// const value_ctx = context[1]; +// +// for(const item of value_ctx.entries()){ +// const key = item[0]; +// const value = item[1]; +// +// let res = ''; +// for(let i = 0, ids; i < value.length; i++){ +// ids = value[i] || ['']; +// let str = ''; +// for(let j = 0; j < ids.length; j++){ +// str += (str ? ',' : '') + (type === "string" ? '"' + ids[j] + '"' : ids[j]); +// } +// res += (res ? '|' : '') + str; +// } +// ctx += (ctx ? ';' : '') + key_ctx + '+' + key + ':' + res; +// } +// } +// +// return reg + '#' + map + '#' + ctx; +// } +// +// export function importSnapshot(flexsearch, input){ +// +// if(!input) return; +// +// let pos_reg = input.indexOf("#"); +// const reg = input.substring(0, pos_reg).split(","); +// flexsearch.reg = new Set(reg); +// +// let pos_map = input.indexOf("#", pos_reg + 1); +// const map = input.substring(pos_reg + 1, pos_map).split(";").map(res => { +// const split = res.split(":"); +// split[1] = split[1].split("|").map(ids => ids ? ids.split(",") : null); +// return split; +// }); +// flexsearch.map = new Map(map); +// +// input = input.substring(pos_map + 1); +// if(input){ +// const ctx = input.split(";").map(res => { +// const split = res.split(":"); +// const context = split[0].split("+"); +// const map = new Map([ +// [context[1], split[1].split("|").map(ids => ids ? ids.split(",") : null)] +// ]); +// return [context[0], map] +// }); +// flexsearch.ctx = new Map(ctx); +// } +// } diff --git a/src/webpack.js b/src/webpack.js index 0255f2c..60e510b 100644 --- a/src/webpack.js +++ b/src/webpack.js @@ -6,7 +6,8 @@ import { SUPPORT_ENCODER, SUPPORT_CHARSET, SUPPORT_PERSISTENT, - SUPPORT_RESOLVER + SUPPORT_RESOLVER, + SUPPORT_SERIALIZE } from "./config.js"; // <-- COMPILER BLOCK import { @@ -46,10 +47,17 @@ import Charset from "./charset.js"; /** @export */ Index.prototype.removeAsync; /** @export */ Index.prototype.export; /** @export */ Index.prototype.import; +/** @export */ Index.prototype.serialize; /** @export */ Index.prototype.mount; /** @export */ Index.prototype.commit; /** @export */ Index.db; +if(SUPPORT_SERIALIZE){ +/** @export */ Index.prototype.reg; +/** @export */ Index.prototype.map; +/** @export */ Index.prototype.ctx; +} + /** @export */ Document.prototype.add; /** @export */ Document.prototype.append; /** @export */ Document.prototype.search;