@wcs-colab/plugin-qps 3.1.16-custom.14 → 3.1.16-custom.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.global.js +4 -4
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +12 -5
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var O=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var K=Object.prototype.hasOwnProperty;var $=(e,d)=>{for(var c in d)O(e,c,{get:d[c],enumerable:!0})},J=(e,d,c,r)=>{if(d&&typeof d=="object"||typeof d=="function")for(let t of _(d))!K.call(e,t)&&t!==c&&O(e,t,{get:()=>d[t],enumerable:!(r=q(d,t))||r.enumerable});return e};var H=e=>J(O({},"__esModule",{value:!0}),e);var ne={};$(ne,{pluginQPS:()=>Z});module.exports=H(ne);var T=require("@wcs-colab/orama/components");var p=require("@wcs-colab/orama/trees"),M=require("@wcs-colab/orama/components");function N(e,d,c){for(let r of Object.entries(d)){let t=r[0],n=r[1],o=`${c}${c?".":""}${t}`;if(typeof n=="object"&&!Array.isArray(n)){N(e,n,o);continue}if((0,M.isVectorType)(n))e.searchableProperties.push(o),e.searchablePropertiesWithTypes[o]=n,e.vectorIndexes[o]={type:"Vector",node:new p.vector.VectorIndex((0,M.getVectorSize)(n)),isArray:!1};else{let s=/\[/.test(n);switch(n){case"boolean":case"boolean[]":e.indexes[o]={type:"Bool",node:new p.bool.BoolNode,isArray:s};break;case"number":case"number[]":e.indexes[o]={type:"AVL",node:new p.avl.AVLTree(0,[]),isArray:s};break;case"string":case"string[]":e.indexes[o]={type:"Radix",node:new p.radix.RadixTree,isArray:s};break;case"enum":case"enum[]":e.indexes[o]={type:"Flat",node:new p.flat.FlatTree,isArray:s};break;case"geopoint":e.indexes[o]={type:"BKD",node:new p.bkd.BKDTree,isArray:s};break;default:throw new Error("INVALID_SCHEMA_TYPE: "+o)}e.searchableProperties.push(o),e.searchablePropertiesWithTypes[o]=n}}}var R={exact:1,fuzzy:.6};function F(e){e?.exact!==void 0&&!Number.isNaN(e.exact)&&(R.exact=e.exact),e?.fuzzy!==void 0&&!Number.isNaN(e.fuzzy)&&(R.fuzzy=e.fuzzy)}function Y(e,d){return(e||0)+1}function z(e,d,c,r,t,n,o){let s=e.split(/\.|\?|!/),a=0,u=0;for(let m of s){let i=o.tokenize(m,n,r);for(let l of i){u++,c[l]||(c[l]=0);let f=Math.min(a,20);c.tokenQuantums[t][l]=Y(c.tokenQuantums[t][l],f),d.insert(l,t)}i.length>1&&a++}c.tokensLength.set(t,u)}function B(e){let d=e.tokens,c=e.radixNode,r=e.exact,t=e.tolerance,n=e.stats,o=e.boostPerProp,s=e.resultMap,a=e.whereFiltersIDs,u=n.tokensLength,m=n.tokenQuantums,i=d.length>1,l={term:"",exact:r,tolerance:t},f=new Map,x={},g=d.length;for(let h=0;h<g;h++){let b=d[h];l.term=b;let D=c.find(l);for(let P of Object.keys(D))f.has(P)||f.set(P,{tokenIndex:h,isExact:P===b});x={...x,...D}}let S=new Map,I=Object.keys(x),k=I.length;for(let h=0;h<k;h++){let b=I[h],D=x[b],P=D.length,Q=d.includes(b),W=f.get(b);for(let A=0;A<P;A++){let y=D[A];if(a&&!a.has(y))continue;let te=u.get(y),V=m[y][b]||0,v=Q?R.exact:R.fuzzy;if(i){S.has(y)||S.set(y,{matchedTokens:new Set,sumWeights:0});let w=S.get(y);W&&!w.matchedTokens.has(W.tokenIndex)&&(w.matchedTokens.add(W.tokenIndex),w.sumWeights+=v),s.has(y)||s.set(y,[0,0])}else{let w=V*v;if(!s.has(y)){s.set(y,[w,0]);continue}let E=s.get(y);E[0]=E[0]+w}}}if(i)for(let[h,b]of S){let P=b.matchedTokens.size/g*b.sumWeights,Q=s.get(h);Q&&(Q[0]=P)}}function L(e,d,c,r,t,n,o){let s=o.tokensLength,a=o.tokenQuantums,u=t.tokenize(e,n,c);for(let m of u)d.removeDocumentByWord(m,r,!0);s.delete(r),delete a[r]}var j=require("@wcs-colab/orama/trees"),C=require("@wcs-colab/orama/internals"),G=new j.radix.RadixNode("","",!1),U={tokenQuantums:{},tokensLength:new Map};function X(e,d,c,r,t,n,o,s,a,u,m){let i=new Map,l={tokens:c.tokenize(d,r),radixNode:G,exact:n,tolerance:o,stats:U,boostPerProp:0,all:i,resultMap:i,whereFiltersIDs:m},f=t.length;for(let I=0;I<f;I++){let k=t[I],h=e.stats[k],b=s[k]??1;l.radixNode=e.indexes[k].node,l.stats=h,l.boostPerProp=b,B(l)}let x=Array.from(i),g=x.length,S=[];for(let I=0;I<g;I++){let k=x[I],h=k[0],b=k[1][0];S.push([h,b])}return S}function Z(e={}){e.weights&&F(e.weights);let d=e.tolerance,c=e.multiWordThreshold,r=e.candidatePool,t=e.candidateCap,n=e.phraseMode;return{name:"qps",getComponents(o){return ee(o,{tolerance:d,multiWordThreshold:c,candidatePool:r,candidateCap:t,phraseMode:n})}}}function ee(e,d){return{index:{create:function(){let r={indexes:{},vectorIndexes:{},searchableProperties:[],searchablePropertiesWithTypes:{},stats:{}};return N(r,e,""),r.config=d,r},insert:function(r,t,n,o,s,a,u,m,i,l){if(!(u==="string"||u==="string[]"))return T.index.insert(r,t,n,o,s,a,u,m,i,l);t.stats[n]||(t.stats[n]={tokenQuantums:{},tokensLength:new Map});let f=t.stats[n],x=t.indexes[n].node;if(f.tokenQuantums[s]={},Array.isArray(a))for(let g of a)z(g,x,f,n,s,m,i);else z(a,x,f,n,s,m,i)},remove:function(r,t,n,o,s,a,u,m,i,l){if(!(u==="string"||u==="string[]"))return T.index.remove(r,t,n,o,s,a,u,m,i,l);let f=t.stats[n],x=t.indexes[n].node;if(Array.isArray(a))for(let g of a)L(g,x,n,s,i,m,f);else L(a,x,n,s,i,m,f)},insertDocumentScoreParameters:()=>{throw new Error},insertTokenScoreParameters:()=>{throw new Error},removeDocumentScoreParameters:()=>{throw new Error},removeTokenScoreParameters:()=>{throw new Error},calculateResultScores:()=>{throw new Error},search:X,searchByWhereClause:function(r,t,n,o){let s=Object.entries(n).filter(([i])=>r.indexes[i].type==="Radix");if(s.length===0)return T.index.searchByWhereClause(r,t,n,o);let a;for(let[i,l]of s){let f=[];if(Array.isArray(l))for(let S of l){let I=t.tokenize(S,o)?.[0];f.push(I)}else f=t.tokenize(l,o);let x=r.indexes[i].node,g=new Set;for(let S of f){let k=x.find({term:S,exact:!0})[S];if(k)for(let h of k)g.add(h)}a?a=(0,C.setIntersection)(a,g):a=g}if(Object.entries(n).filter(([i])=>r.indexes[i].type!=="Radix").length===0)return a;let m=T.index.searchByWhereClause(r,t,n,o);return(0,C.setIntersection)(a,m)},getSearchableProperties:function(r){return r.searchableProperties},getSearchablePropertiesWithTypes:function(c){return c.searchablePropertiesWithTypes},load:function(r,t){let n=T.index.load(r,t[0]),o=t[1],s={...n.indexes,...Object.fromEntries(o.radixTrees.map(([a,u,m,i])=>[a,{node:j.radix.RadixNode.fromJSON(i),isArray:u,type:m}]))};return{...n,indexes:s,stats:Object.fromEntries(o.stats.map(([a,{tokenQuantums:u,tokensLength:m}])=>[a,{tokenQuantums:u,tokensLength:new Map(m)}]))}},save:function(r){let t=r,n=Object.entries(t.indexes).filter(([,{type:u}])=>u!=="Radix"),o=T.index.save({...t,indexes:Object.fromEntries(n)}),a={radixTrees:Object.entries(t.indexes).filter(([,{type:u}])=>u==="Radix").map(([u,{node:m,isArray:i,type:l}])=>[u,i,l,m.toJSON()]),stats:Object.entries(r.stats).map(([u,{tokenQuantums:m,tokensLength:i}])=>[u,{tokenQuantums:m,tokensLength:Array.from(i.entries())}])};return[o,a]}}}}0&&(module.exports={pluginQPS});
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/algorithm.ts"],"sourcesContent":["import type {\n AnyOrama,\n SearchableType,\n IIndex,\n SearchableValue,\n Tokenizer,\n OnlyStrings,\n FlattenSchemaProperty,\n TokenScore,\n WhereCondition,\n OramaPluginSync,\n AnySchema,\n ObjectComponents,\n BM25Params\n} from '@wcs-colab/orama'\nimport { index as Index, internalDocumentIDStore } from '@wcs-colab/orama/components'\nimport { insertString, QPSIndex as QPSIndexStorage, recursiveCreate, removeString, searchString, setQpsWeights } from './algorithm.js'\nimport { radix } from '@wcs-colab/orama/trees'\nimport { setIntersection } from '@wcs-colab/orama/internals'\n\ntype InternalDocumentID = internalDocumentIDStore.InternalDocumentID\ntype InternalDocumentIDStore = internalDocumentIDStore.InternalDocumentIDStore\ntype DocumentID = internalDocumentIDStore.DocumentID\n\nconst unusedRadix = new radix.RadixNode('', '', false)\nconst unusedStats = {\n tokenQuantums: {},\n tokensLength: new Map()\n}\n\nfunction search<T extends AnyOrama>(\n index: QPSIndexStorage,\n term: string,\n tokenizer: Tokenizer,\n language: string | undefined,\n propertiesToSearch: string[],\n exact: boolean,\n tolerance: number,\n boost: Partial<Record<OnlyStrings<FlattenSchemaProperty<T>[]>, number>>,\n relevance: Required<BM25Params>,\n docsCount: number,\n whereFiltersIDs: Set<InternalDocumentID> | undefined\n): TokenScore[] {\n const all: Map<InternalDocumentID, [number, number]> = new Map()\n\n const args = {\n tokens: tokenizer.tokenize(term, language),\n radixNode: unusedRadix,\n exact,\n tolerance,\n stats: unusedStats,\n boostPerProp: 0,\n all,\n resultMap: all,\n whereFiltersIDs\n }\n\n const propertiesToSearchLength = propertiesToSearch.length\n for (let i = 0; i < propertiesToSearchLength; i++) {\n const prop = propertiesToSearch[i]\n const stats = index.stats[prop]\n const boostPerProp = boost[prop] ?? 1\n args.radixNode = index.indexes[prop].node as radix.RadixNode\n args.stats = stats\n args.boostPerProp = boostPerProp\n searchString(args)\n }\n\n const g: [number, [number, number]][] = Array.from(all)\n const gLength = g.length\n const res: TokenScore[] = []\n for (let i = 0; i < gLength; i++) {\n const element = g[i]\n const id = element[0]\n const score = element[1][0]\n\n res.push([id, score])\n }\n\n return res\n}\n\nexport interface QPSConfig {\n weights?: {\n exact?: number\n fuzzy?: number\n }\n /** Explicit tolerance to apply when callers omit it. */\n tolerance?: number\n /** Threshold for non-phrase multi-word searches (AND=0, OR=1) */\n multiWordThreshold?: 0 | 1\n /** Maximum QPS hits to fetch before capping for phrase handoff */\n candidatePool?: number\n /** How many of the pooled hits to forward to FuzzyPhrase */\n candidateCap?: number\n /** Whether phrase mode (QPS→FuzzyPhrase) is active */\n phraseMode?: boolean\n}\n\nexport function pluginQPS(config: QPSConfig = {}): OramaPluginSync<unknown> {\n if (config.weights) {\n setQpsWeights(config.weights)\n }\n const defaultTolerance = config.tolerance\n const defaultMultiWordThreshold = config.multiWordThreshold\n const defaultCandidatePool = config.candidatePool\n const defaultCandidateCap = config.candidateCap\n const defaultPhraseMode = config.phraseMode\n return {\n name: 'qps',\n getComponents(schema: AnySchema) {\n return qpsComponents(schema, {\n tolerance: defaultTolerance,\n multiWordThreshold: defaultMultiWordThreshold,\n candidatePool: defaultCandidatePool,\n candidateCap: defaultCandidateCap,\n phraseMode: defaultPhraseMode\n })\n }\n }\n}\n\nfunction qpsComponents(\n schema: AnySchema,\n defaults: {\n tolerance?: number\n multiWordThreshold?: 0 | 1\n candidatePool?: number\n candidateCap?: number\n phraseMode?: boolean\n }\n): Partial<ObjectComponents<any, any, any, any>> {\n return {\n index: {\n create: function create() {\n const indexDatastore: QPSIndexStorage = {\n indexes: {},\n vectorIndexes: {},\n searchableProperties: [],\n searchablePropertiesWithTypes: {},\n stats: {}\n }\n\n recursiveCreate(indexDatastore, schema, '')\n\n // Expose defaults on the datastore for consumers\n ;(indexDatastore as any).config = defaults\n\n return indexDatastore\n },\n insert: function insert(\n implementation: IIndex<QPSIndexStorage>,\n indexDatastorage: QPSIndexStorage,\n prop: string,\n id: DocumentID,\n internalId: InternalDocumentID,\n value: SearchableValue,\n schemaType: SearchableType,\n language: string | undefined,\n tokenizer: Tokenizer,\n docsCount: number\n ) {\n if (!(schemaType === 'string' || schemaType === 'string[]')) {\n return Index.insert(\n implementation as unknown as IIndex<Index.Index>,\n indexDatastorage as unknown as Index.Index,\n prop,\n id,\n internalId,\n value,\n schemaType,\n language,\n tokenizer,\n docsCount\n )\n }\n\n if (!indexDatastorage.stats[prop]) {\n indexDatastorage.stats[prop] = {\n tokenQuantums: {},\n tokensLength: new Map()\n }\n }\n\n const stats = indexDatastorage.stats[prop]\n const radixTree = indexDatastorage.indexes[prop].node as radix.RadixNode\n\n stats.tokenQuantums[internalId] = {}\n\n if (Array.isArray(value)) {\n for (const item of value) {\n insertString(item as string, radixTree, stats, prop, internalId, language, tokenizer)\n }\n } else {\n insertString(value as string, radixTree, stats, prop, internalId, language, tokenizer)\n }\n },\n remove: function remove(\n implementation: IIndex<QPSIndexStorage>,\n indexDatastorage: QPSIndexStorage,\n prop: string,\n id: DocumentID,\n internalId: InternalDocumentID,\n value: SearchableValue,\n schemaType: SearchableType,\n language: string | undefined,\n tokenizer: Tokenizer,\n docsCount: number\n ) {\n if (!(schemaType === 'string' || schemaType === 'string[]')) {\n return Index.remove(\n implementation as unknown as IIndex<Index.Index>,\n indexDatastorage as unknown as Index.Index,\n prop,\n id,\n internalId,\n value,\n schemaType,\n language,\n tokenizer,\n docsCount\n )\n }\n\n const stats = indexDatastorage.stats[prop]\n const radixTree = indexDatastorage.indexes[prop].node as radix.RadixNode\n\n if (Array.isArray(value)) {\n for (const item of value) {\n removeString(item as string, radixTree, prop, internalId, tokenizer, language, stats)\n }\n } else {\n removeString(value as string, radixTree, prop, internalId, tokenizer, language, stats)\n }\n },\n insertDocumentScoreParameters: () => {\n throw new Error()\n },\n insertTokenScoreParameters: () => {\n throw new Error()\n },\n removeDocumentScoreParameters: () => {\n throw new Error()\n },\n removeTokenScoreParameters: () => {\n throw new Error()\n },\n calculateResultScores: () => {\n throw new Error()\n },\n search,\n searchByWhereClause: function searchByWhereClause<T extends AnyOrama>(\n index: QPSIndexStorage,\n tokenizer: Tokenizer,\n filters: Partial<WhereCondition<T['schema']>>,\n language: string | undefined\n ) {\n const stringFiltersList = Object.entries(filters).filter(\n ([propName]) => index.indexes[propName].type === 'Radix'\n )\n\n // If there are no string filters, we can use the regular search\n if (stringFiltersList.length === 0) {\n return Index.searchByWhereClause(index as unknown as Index.Index, tokenizer, filters, language)\n }\n\n let idsFromStringFilters: Set<InternalDocumentID> | undefined\n for (const [propName, filter] of stringFiltersList) {\n let tokens: string[] = []\n\n if (Array.isArray(filter)) {\n for (const item of filter) {\n const token = tokenizer.tokenize(item as string, language)?.[0]\n tokens.push(token)\n }\n } else {\n tokens = tokenizer.tokenize(filter as string, language)\n }\n\n const radixTree = index.indexes[propName].node as radix.RadixNode\n const propIds = new Set<InternalDocumentID>()\n for (const token of tokens) {\n const ret = radixTree.find({\n term: token,\n exact: true\n })\n\n const ids = ret[token]\n\n if (ids) {\n for (const id of ids) {\n propIds.add(id)\n }\n }\n }\n\n if (idsFromStringFilters) {\n idsFromStringFilters = setIntersection(idsFromStringFilters, propIds)\n } else {\n idsFromStringFilters = propIds\n }\n }\n\n // Split the filters into string and non-string filters\n const nonStringFiltersList = Object.entries(filters).filter(\n ([propName]) => index.indexes[propName].type !== 'Radix'\n )\n if (nonStringFiltersList.length === 0) {\n return idsFromStringFilters\n }\n\n const idsFromNonStringFilters = Index.searchByWhereClause(\n index as unknown as Index.Index,\n tokenizer,\n filters,\n language\n )\n\n return setIntersection(idsFromStringFilters!, idsFromNonStringFilters)\n },\n getSearchableProperties: function getSearchableProperties(index: QPSIndexStorage): string[] {\n return index.searchableProperties\n },\n getSearchablePropertiesWithTypes: function (index: QPSIndexStorage) {\n return index.searchablePropertiesWithTypes\n },\n load: function load<R = unknown>(sharedInternalDocumentStore: InternalDocumentIDStore, raw: R): QPSIndexStorage {\n const dump1 = Index.load(sharedInternalDocumentStore, raw[0])\n\n const dump2 = raw[1] as {\n radixTrees: [string, boolean, string, unknown][]\n stats: [\n string,\n {\n tokenQuantums: [InternalDocumentID, Record<string, number>][]\n tokensLength: [InternalDocumentID, number][]\n }\n ][]\n }\n\n const indexes = {\n ...dump1.indexes,\n ...Object.fromEntries(\n dump2.radixTrees.map(([prop, isArray, type, node]) => [\n prop,\n {\n node: radix.RadixNode.fromJSON(node),\n isArray,\n type\n } as Index.Tree\n ])\n )\n }\n\n return {\n ...dump1,\n indexes,\n stats: Object.fromEntries(\n dump2.stats.map(([prop, { tokenQuantums, tokensLength }]) => [\n prop,\n {\n tokenQuantums,\n tokensLength: new Map(tokensLength)\n }\n ])\n )\n } as unknown as QPSIndexStorage\n },\n save: function save<R = unknown>(index: QPSIndexStorage): R {\n const baseIndex = index as unknown as Index.Index\n const nonStringIndexes = Object.entries(baseIndex.indexes).filter(([, { type }]) => type !== 'Radix')\n const dump1 = Index.save({\n ...baseIndex,\n indexes: Object.fromEntries(nonStringIndexes)\n })\n\n const stringIndexes = Object.entries(baseIndex.indexes).filter(([, { type }]) => type === 'Radix')\n const dump2 = {\n radixTrees: stringIndexes.map(([prop, { node, isArray, type }]) => [prop, isArray, type, node.toJSON()]),\n stats: Object.entries(index.stats).map(([prop, { tokenQuantums, tokensLength }]) => [\n prop,\n {\n tokenQuantums,\n tokensLength: Array.from(tokensLength.entries())\n }\n ])\n }\n\n return [dump1, dump2] as unknown as R\n }\n }\n }\n}\n","import { AnyIndexStore, AnyOrama, SearchableType, Tokenizer } from '@wcs-colab/orama'\nimport { avl, bkd, flat, radix, bool, vector } from '@wcs-colab/orama/trees'\nimport { getVectorSize, index as Index, internalDocumentIDStore, isVectorType } from '@wcs-colab/orama/components'\n\ntype InternalDocumentID = internalDocumentIDStore.InternalDocumentID\n\nexport interface QPSIndex extends AnyIndexStore {\n indexes: Record<string, Index.Tree>\n searchableProperties: string[]\n searchablePropertiesWithTypes: Record<string, SearchableType>\n stats: Record<\n string,\n {\n tokenQuantums: Record<InternalDocumentID, Record<string, number>>\n tokensLength: Map<InternalDocumentID, number>\n }\n >\n}\n\nexport function recursiveCreate<T extends AnyOrama>(indexDatastore: QPSIndex, schema: T['schema'], prefix: string) {\n for (const entry of Object.entries<SearchableType>(schema)) {\n const prop = entry[0]\n const type = entry[1]\n const path = `${prefix}${prefix ? '.' : ''}${prop}`\n\n if (typeof type === 'object' && !Array.isArray(type)) {\n // Nested\n recursiveCreate(indexDatastore, type, path)\n continue\n }\n\n if (isVectorType(type)) {\n indexDatastore.searchableProperties.push(path)\n indexDatastore.searchablePropertiesWithTypes[path] = type\n indexDatastore.vectorIndexes[path] = {\n type: 'Vector',\n node: new vector.VectorIndex(getVectorSize(type)),\n isArray: false\n }\n } else {\n const isArray = /\\[/.test(type as string)\n switch (type) {\n case 'boolean':\n case 'boolean[]':\n indexDatastore.indexes[path] = { type: 'Bool', node: new bool.BoolNode(), isArray }\n break\n case 'number':\n case 'number[]':\n indexDatastore.indexes[path] = {\n type: 'AVL',\n node: new avl.AVLTree<number, InternalDocumentID>(0, []),\n isArray\n }\n break\n case 'string':\n case 'string[]':\n indexDatastore.indexes[path] = { type: 'Radix', node: new radix.RadixTree(), isArray }\n break\n case 'enum':\n case 'enum[]':\n indexDatastore.indexes[path] = { type: 'Flat', node: new flat.FlatTree(), isArray }\n break\n case 'geopoint':\n indexDatastore.indexes[path] = { type: 'BKD', node: new bkd.BKDTree(), isArray }\n break\n default:\n throw new Error('INVALID_SCHEMA_TYPE: ' + path)\n }\n\n indexDatastore.searchableProperties.push(path)\n indexDatastore.searchablePropertiesWithTypes[path] = type\n }\n }\n}\n\nconst BIT_MASK_20 = 0b11111111111111111111\n\n// Runtime-configurable weights (default exact=1, fuzzy=0.6)\nconst qpsWeights = {\n exact: 1,\n fuzzy: 0.6\n}\n\nexport function setQpsWeights(weights?: { exact?: number; fuzzy?: number }) {\n if (weights?.exact !== undefined && !Number.isNaN(weights.exact)) {\n qpsWeights.exact = weights.exact\n }\n if (weights?.fuzzy !== undefined && !Number.isNaN(weights.fuzzy)) {\n qpsWeights.fuzzy = weights.fuzzy\n }\n}\n\nexport function calculateTokenQuantum(prevValue: number, bit: number) {\n // if (prevValue < 0) {\n // throw new Error(\"Overflow\")\n // }\n // if (bit < 0 || bit > 20) {\n // throw new Error(\"Invalid bit\")\n // }\n\n const currentCount = count(prevValue)\n const currentSentenceMask = bitmask_20(prevValue)\n const newSentenceMask = currentSentenceMask | (1 << bit)\n return ((currentCount + 1) << 20) | newSentenceMask\n}\n\nexport function insertString(\n value: string,\n radixTree: radix.RadixTree,\n stats: QPSIndex['stats'][string],\n prop: string,\n internalId: InternalDocumentID,\n language: string | undefined,\n tokenizer: Tokenizer\n) {\n const sentences = value.split(/\\.|\\?|!/)\n\n let quantumIndex = 0\n let tokenNumber = 0\n for (const sentence of sentences) {\n const tokens = tokenizer.tokenize(sentence, language, prop)\n\n for (const token of tokens) {\n tokenNumber++\n\n if (!stats[token]) {\n stats[token] = 0\n }\n\n const tokenBitIndex = Math.min(quantumIndex, 20)\n\n stats.tokenQuantums[internalId][token] = calculateTokenQuantum(\n stats.tokenQuantums[internalId][token],\n tokenBitIndex\n )\n\n radixTree.insert(token, internalId)\n }\n\n // Don't increment the quantum index if the sentence is too short\n if (tokens.length > 1) {\n quantumIndex++\n }\n }\n\n stats.tokensLength.set(internalId, tokenNumber)\n}\n\nexport function searchString(prop: {\n tokens: string[]\n radixNode: radix.RadixNode\n exact: boolean\n tolerance: number\n stats: {\n tokensLength: Map<number, number>\n tokenQuantums: Record<number, Record<string, number>>\n }\n boostPerProp: number\n resultMap: Map<number, [number, number]>\n whereFiltersIDs: Set<number> | undefined\n}) {\n const tokens = prop.tokens\n const radixNode = prop.radixNode\n const exact = prop.exact\n const tolerance = prop.tolerance\n const stats = prop.stats\n const boostPerProp = prop.boostPerProp\n const resultMap = prop.resultMap\n const whereFiltersIDs = prop.whereFiltersIDs\n const tokensLength = stats.tokensLength\n const tokenQuantums = stats.tokenQuantums\n const isMultiWord = tokens.length > 1\n\n const findParam = {\n term: '',\n exact,\n tolerance\n }\n\n // Track which query token each found word matches (for coverage calculation)\n const wordToQueryToken = new Map<string, { tokenIndex: number; isExact: boolean }>()\n let foundWords = {} as Record<string, number[]>\n const tokenLength = tokens.length\n for (let i = 0; i < tokenLength; i++) {\n const term = tokens[i]\n findParam.term = term\n const results = radixNode.find(findParam)\n \n // Track which query token each result word matches\n for (const foundWord of Object.keys(results)) {\n if (!wordToQueryToken.has(foundWord)) {\n wordToQueryToken.set(foundWord, { \n tokenIndex: i, \n isExact: foundWord === term \n })\n }\n }\n \n foundWords = {\n ...foundWords,\n ...results\n }\n }\n\n // For multi-word: track per-doc which query tokens matched and their weights\n const docMatchInfo = new Map<number, { matchedTokens: Set<number>; sumWeights: number }>()\n\n const foundKeys = Object.keys(foundWords)\n const foundKeysLength = foundKeys.length\n for (let i = 0; i < foundKeysLength; i++) {\n const key = foundKeys[i]\n const matchedDocs = foundWords[key]\n const matchedDocsLength = matchedDocs.length\n const isExactMatch = tokens.includes(key)\n const queryTokenInfo = wordToQueryToken.get(key)\n\n for (let j = 0; j < matchedDocsLength; j++) {\n const docId = matchedDocs[j]\n\n if (whereFiltersIDs && !whereFiltersIDs.has(docId)) {\n continue\n }\n\n const numberOfQuantums = tokensLength.get(docId)!\n const tokenQuantumDescriptor = tokenQuantums[docId][key]\n\n const occurrence = count(tokenQuantumDescriptor)\n const bitMask = bitmask_20(tokenQuantumDescriptor)\n const weight = isExactMatch ? qpsWeights.exact : qpsWeights.fuzzy\n\n if (isMultiWord) {\n // Multi-word: use coverage × Σ(weight) scoring\n if (!docMatchInfo.has(docId)) {\n docMatchInfo.set(docId, { matchedTokens: new Set(), sumWeights: 0 })\n }\n const info = docMatchInfo.get(docId)!\n \n // Only count each query token once (coverage), but sum best weight per token\n if (queryTokenInfo && !info.matchedTokens.has(queryTokenInfo.tokenIndex)) {\n info.matchedTokens.add(queryTokenInfo.tokenIndex)\n info.sumWeights += weight\n }\n \n // Store bitMask for later\n if (!resultMap.has(docId)) {\n resultMap.set(docId, [0, bitMask])\n } else {\n const current = resultMap.get(docId)!\n current[1] = current[1] | bitMask\n }\n } else {\n // Single word: use occurrence × weight scoring (original behavior)\n const score = occurrence * weight\n\n if (!resultMap.has(docId)) {\n resultMap.set(docId, [score, bitMask])\n continue\n }\n\n const current = resultMap.get(docId)!\n const totalScore = current[0] + score\n current[0] = totalScore\n current[1] = current[1] | bitMask\n }\n }\n }\n\n // For multi-word: calculate final scores using coverage × Σ(weight)\n if (isMultiWord) {\n for (const [docId, info] of docMatchInfo) {\n const coverage = info.matchedTokens.size / tokenLength\n const score = coverage * info.sumWeights\n const current = resultMap.get(docId)\n if (current) {\n current[0] = score\n }\n }\n }\n}\n\nexport function bitmask_20(n: number) {\n return n & BIT_MASK_20\n}\nexport function count(n: number) {\n return n >> 20\n}\n\nexport function numberOfOnes(n: number) {\n let i = 0\n do {\n if (n & 1) {\n ++i\n }\n // eslint-disable-next-line no-cond-assign\n } while ((n >>= 1))\n return i\n}\n\nexport function removeString(\n value: string,\n radixTree: radix.RadixTree,\n prop: string,\n internalId: InternalDocumentID,\n tokenizer: Tokenizer,\n language: string | undefined,\n stats: {\n tokensLength: Map<number, number>\n tokenQuantums: Record<number, Record<string, number>>\n }\n) {\n const tokensLength = stats.tokensLength\n const tokenQuantums = stats.tokenQuantums\n\n const tokens = tokenizer.tokenize(value, language, prop)\n\n for (const token of tokens) {\n radixTree.removeDocumentByWord(token, internalId, true)\n }\n\n tokensLength.delete(internalId)\n delete tokenQuantums[internalId]\n}\n"],"mappings":"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","names":["src_exports","__export","pluginQPS","__toCommonJS","import_components","import_trees","import_components","recursiveCreate","indexDatastore","schema","prefix","entry","prop","type","path","isArray","BIT_MASK_20","qpsWeights","setQpsWeights","weights","calculateTokenQuantum","prevValue","bit","currentCount","count","newSentenceMask","bitmask_20","insertString","value","radixTree","stats","internalId","language","tokenizer","sentences","quantumIndex","tokenNumber","sentence","tokens","token","tokenBitIndex","searchString","radixNode","exact","tolerance","boostPerProp","resultMap","whereFiltersIDs","tokensLength","tokenQuantums","isMultiWord","findParam","wordToQueryToken","foundWords","tokenLength","i","term","results","foundWord","docMatchInfo","foundKeys","foundKeysLength","key","matchedDocs","matchedDocsLength","isExactMatch","queryTokenInfo","j","docId","numberOfQuantums","tokenQuantumDescriptor","occurrence","bitMask","weight","info","current","score","totalScore","n","removeString","value","radixTree","prop","internalId","tokenizer","language","stats","tokensLength","tokenQuantums","tokens","token","import_trees","import_internals","unusedRadix","unusedStats","search","index","term","tokenizer","language","propertiesToSearch","exact","tolerance","boost","relevance","docsCount","whereFiltersIDs","all","args","propertiesToSearchLength","i","prop","stats","boostPerProp","searchString","g","gLength","res","element","id","score","pluginQPS","config","setQpsWeights","defaultTolerance","defaultMultiWordThreshold","defaultCandidatePool","defaultCandidateCap","defaultPhraseMode","schema","qpsComponents","defaults","indexDatastore","recursiveCreate","implementation","indexDatastorage","internalId","value","schemaType","Index","radixTree","item","insertString","removeString","filters","stringFiltersList","propName","idsFromStringFilters","filter","tokens","token","propIds","ids","idsFromNonStringFilters","sharedInternalDocumentStore","raw","dump1","dump2","indexes","isArray","type","node","tokenQuantums","tokensLength","baseIndex","nonStringIndexes"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/algorithm.ts"],"sourcesContent":["import type {\n AnyOrama,\n SearchableType,\n IIndex,\n SearchableValue,\n Tokenizer,\n OnlyStrings,\n FlattenSchemaProperty,\n TokenScore,\n WhereCondition,\n OramaPluginSync,\n AnySchema,\n ObjectComponents,\n BM25Params\n} from '@wcs-colab/orama'\nimport { index as Index, internalDocumentIDStore } from '@wcs-colab/orama/components'\nimport { insertString, QPSIndex as QPSIndexStorage, recursiveCreate, removeString, searchString, setQpsWeights } from './algorithm.js'\nimport { radix } from '@wcs-colab/orama/trees'\nimport { setIntersection } from '@wcs-colab/orama/internals'\n\ntype InternalDocumentID = internalDocumentIDStore.InternalDocumentID\ntype InternalDocumentIDStore = internalDocumentIDStore.InternalDocumentIDStore\ntype DocumentID = internalDocumentIDStore.DocumentID\n\nconst unusedRadix = new radix.RadixNode('', '', false)\nconst unusedStats = {\n tokenQuantums: {},\n tokensLength: new Map()\n}\n\nfunction search<T extends AnyOrama>(\n index: QPSIndexStorage,\n term: string,\n tokenizer: Tokenizer,\n language: string | undefined,\n propertiesToSearch: string[],\n exact: boolean,\n tolerance: number,\n boost: Partial<Record<OnlyStrings<FlattenSchemaProperty<T>[]>, number>>,\n relevance: Required<BM25Params>,\n docsCount: number,\n whereFiltersIDs: Set<InternalDocumentID> | undefined\n): TokenScore[] {\n const all: Map<InternalDocumentID, [number, number]> = new Map()\n\n const args = {\n tokens: tokenizer.tokenize(term, language),\n radixNode: unusedRadix,\n exact,\n tolerance,\n stats: unusedStats,\n boostPerProp: 0,\n all,\n resultMap: all,\n whereFiltersIDs\n }\n\n const propertiesToSearchLength = propertiesToSearch.length\n for (let i = 0; i < propertiesToSearchLength; i++) {\n const prop = propertiesToSearch[i]\n const stats = index.stats[prop]\n const boostPerProp = boost[prop] ?? 1\n args.radixNode = index.indexes[prop].node as radix.RadixNode\n args.stats = stats\n args.boostPerProp = boostPerProp\n searchString(args)\n }\n\n const g: [number, [number, number]][] = Array.from(all)\n const gLength = g.length\n const res: TokenScore[] = []\n for (let i = 0; i < gLength; i++) {\n const element = g[i]\n const id = element[0]\n const score = element[1][0]\n\n res.push([id, score])\n }\n\n return res\n}\n\nexport interface QPSConfig {\n weights?: {\n exact?: number\n fuzzy?: number\n }\n /** Explicit tolerance to apply when callers omit it. */\n tolerance?: number\n /** Threshold for non-phrase multi-word searches (AND=0, OR=1) */\n multiWordThreshold?: 0 | 1\n /** Maximum QPS hits to fetch before capping for phrase handoff */\n candidatePool?: number\n /** How many of the pooled hits to forward to FuzzyPhrase */\n candidateCap?: number\n /** Whether phrase mode (QPS→FuzzyPhrase) is active */\n phraseMode?: boolean\n}\n\nexport function pluginQPS(config: QPSConfig = {}): OramaPluginSync<unknown> {\n if (config.weights) {\n setQpsWeights(config.weights)\n }\n const defaultTolerance = config.tolerance\n const defaultMultiWordThreshold = config.multiWordThreshold\n const defaultCandidatePool = config.candidatePool\n const defaultCandidateCap = config.candidateCap\n const defaultPhraseMode = config.phraseMode\n return {\n name: 'qps',\n getComponents(schema: AnySchema) {\n return qpsComponents(schema, {\n tolerance: defaultTolerance,\n multiWordThreshold: defaultMultiWordThreshold,\n candidatePool: defaultCandidatePool,\n candidateCap: defaultCandidateCap,\n phraseMode: defaultPhraseMode\n })\n }\n }\n}\n\nfunction qpsComponents(\n schema: AnySchema,\n defaults: {\n tolerance?: number\n multiWordThreshold?: 0 | 1\n candidatePool?: number\n candidateCap?: number\n phraseMode?: boolean\n }\n): Partial<ObjectComponents<any, any, any, any>> {\n return {\n index: {\n create: function create() {\n const indexDatastore: QPSIndexStorage = {\n indexes: {},\n vectorIndexes: {},\n searchableProperties: [],\n searchablePropertiesWithTypes: {},\n stats: {}\n }\n\n recursiveCreate(indexDatastore, schema, '')\n\n // Expose defaults on the datastore for consumers\n ;(indexDatastore as any).config = defaults\n\n return indexDatastore\n },\n insert: function insert(\n implementation: IIndex<QPSIndexStorage>,\n indexDatastorage: QPSIndexStorage,\n prop: string,\n id: DocumentID,\n internalId: InternalDocumentID,\n value: SearchableValue,\n schemaType: SearchableType,\n language: string | undefined,\n tokenizer: Tokenizer,\n docsCount: number\n ) {\n if (!(schemaType === 'string' || schemaType === 'string[]')) {\n return Index.insert(\n implementation as unknown as IIndex<Index.Index>,\n indexDatastorage as unknown as Index.Index,\n prop,\n id,\n internalId,\n value,\n schemaType,\n language,\n tokenizer,\n docsCount\n )\n }\n\n if (!indexDatastorage.stats[prop]) {\n indexDatastorage.stats[prop] = {\n tokenQuantums: {},\n tokensLength: new Map()\n }\n }\n\n const stats = indexDatastorage.stats[prop]\n const radixTree = indexDatastorage.indexes[prop].node as radix.RadixNode\n\n stats.tokenQuantums[internalId] = {}\n\n if (Array.isArray(value)) {\n for (const item of value) {\n insertString(item as string, radixTree, stats, prop, internalId, language, tokenizer)\n }\n } else {\n insertString(value as string, radixTree, stats, prop, internalId, language, tokenizer)\n }\n },\n remove: function remove(\n implementation: IIndex<QPSIndexStorage>,\n indexDatastorage: QPSIndexStorage,\n prop: string,\n id: DocumentID,\n internalId: InternalDocumentID,\n value: SearchableValue,\n schemaType: SearchableType,\n language: string | undefined,\n tokenizer: Tokenizer,\n docsCount: number\n ) {\n if (!(schemaType === 'string' || schemaType === 'string[]')) {\n return Index.remove(\n implementation as unknown as IIndex<Index.Index>,\n indexDatastorage as unknown as Index.Index,\n prop,\n id,\n internalId,\n value,\n schemaType,\n language,\n tokenizer,\n docsCount\n )\n }\n\n const stats = indexDatastorage.stats[prop]\n const radixTree = indexDatastorage.indexes[prop].node as radix.RadixNode\n\n if (Array.isArray(value)) {\n for (const item of value) {\n removeString(item as string, radixTree, prop, internalId, tokenizer, language, stats)\n }\n } else {\n removeString(value as string, radixTree, prop, internalId, tokenizer, language, stats)\n }\n },\n insertDocumentScoreParameters: () => {\n throw new Error()\n },\n insertTokenScoreParameters: () => {\n throw new Error()\n },\n removeDocumentScoreParameters: () => {\n throw new Error()\n },\n removeTokenScoreParameters: () => {\n throw new Error()\n },\n calculateResultScores: () => {\n throw new Error()\n },\n search,\n searchByWhereClause: function searchByWhereClause<T extends AnyOrama>(\n index: QPSIndexStorage,\n tokenizer: Tokenizer,\n filters: Partial<WhereCondition<T['schema']>>,\n language: string | undefined\n ) {\n const stringFiltersList = Object.entries(filters).filter(\n ([propName]) => index.indexes[propName].type === 'Radix'\n )\n\n // If there are no string filters, we can use the regular search\n if (stringFiltersList.length === 0) {\n return Index.searchByWhereClause(index as unknown as Index.Index, tokenizer, filters, language)\n }\n\n let idsFromStringFilters: Set<InternalDocumentID> | undefined\n for (const [propName, filter] of stringFiltersList) {\n let tokens: string[] = []\n\n if (Array.isArray(filter)) {\n for (const item of filter) {\n const token = tokenizer.tokenize(item as string, language)?.[0]\n tokens.push(token)\n }\n } else {\n tokens = tokenizer.tokenize(filter as string, language)\n }\n\n const radixTree = index.indexes[propName].node as radix.RadixNode\n const propIds = new Set<InternalDocumentID>()\n for (const token of tokens) {\n const ret = radixTree.find({\n term: token,\n exact: true\n })\n\n const ids = ret[token]\n\n if (ids) {\n for (const id of ids) {\n propIds.add(id)\n }\n }\n }\n\n if (idsFromStringFilters) {\n idsFromStringFilters = setIntersection(idsFromStringFilters, propIds)\n } else {\n idsFromStringFilters = propIds\n }\n }\n\n // Split the filters into string and non-string filters\n const nonStringFiltersList = Object.entries(filters).filter(\n ([propName]) => index.indexes[propName].type !== 'Radix'\n )\n if (nonStringFiltersList.length === 0) {\n return idsFromStringFilters\n }\n\n const idsFromNonStringFilters = Index.searchByWhereClause(\n index as unknown as Index.Index,\n tokenizer,\n filters,\n language\n )\n\n return setIntersection(idsFromStringFilters!, idsFromNonStringFilters)\n },\n getSearchableProperties: function getSearchableProperties(index: QPSIndexStorage): string[] {\n return index.searchableProperties\n },\n getSearchablePropertiesWithTypes: function (index: QPSIndexStorage) {\n return index.searchablePropertiesWithTypes\n },\n load: function load<R = unknown>(sharedInternalDocumentStore: InternalDocumentIDStore, raw: R): QPSIndexStorage {\n const dump1 = Index.load(sharedInternalDocumentStore, raw[0])\n\n const dump2 = raw[1] as {\n radixTrees: [string, boolean, string, unknown][]\n stats: [\n string,\n {\n tokenQuantums: [InternalDocumentID, Record<string, number>][]\n tokensLength: [InternalDocumentID, number][]\n }\n ][]\n }\n\n const indexes = {\n ...dump1.indexes,\n ...Object.fromEntries(\n dump2.radixTrees.map(([prop, isArray, type, node]) => [\n prop,\n {\n node: radix.RadixNode.fromJSON(node),\n isArray,\n type\n } as Index.Tree\n ])\n )\n }\n\n return {\n ...dump1,\n indexes,\n stats: Object.fromEntries(\n dump2.stats.map(([prop, { tokenQuantums, tokensLength }]) => [\n prop,\n {\n tokenQuantums,\n tokensLength: new Map(tokensLength)\n }\n ])\n )\n } as unknown as QPSIndexStorage\n },\n save: function save<R = unknown>(index: QPSIndexStorage): R {\n const baseIndex = index as unknown as Index.Index\n const nonStringIndexes = Object.entries(baseIndex.indexes).filter(([, { type }]) => type !== 'Radix')\n const dump1 = Index.save({\n ...baseIndex,\n indexes: Object.fromEntries(nonStringIndexes)\n })\n\n const stringIndexes = Object.entries(baseIndex.indexes).filter(([, { type }]) => type === 'Radix')\n const dump2 = {\n radixTrees: stringIndexes.map(([prop, { node, isArray, type }]) => [prop, isArray, type, node.toJSON()]),\n stats: Object.entries(index.stats).map(([prop, { tokenQuantums, tokensLength }]) => [\n prop,\n {\n tokenQuantums,\n tokensLength: Array.from(tokensLength.entries())\n }\n ])\n }\n\n return [dump1, dump2] as unknown as R\n }\n }\n }\n}\n","import { AnyIndexStore, AnyOrama, SearchableType, Tokenizer } from '@wcs-colab/orama'\nimport { avl, bkd, flat, radix, bool, vector } from '@wcs-colab/orama/trees'\nimport { getVectorSize, index as Index, internalDocumentIDStore, isVectorType } from '@wcs-colab/orama/components'\n\ntype InternalDocumentID = internalDocumentIDStore.InternalDocumentID\n\nexport interface QPSIndex extends AnyIndexStore {\n indexes: Record<string, Index.Tree>\n searchableProperties: string[]\n searchablePropertiesWithTypes: Record<string, SearchableType>\n stats: Record<\n string,\n {\n tokenQuantums: Record<InternalDocumentID, Record<string, number>>\n tokensLength: Map<InternalDocumentID, number>\n }\n >\n}\n\nexport function recursiveCreate<T extends AnyOrama>(indexDatastore: QPSIndex, schema: T['schema'], prefix: string) {\n for (const entry of Object.entries<SearchableType>(schema)) {\n const prop = entry[0]\n const type = entry[1]\n const path = `${prefix}${prefix ? '.' : ''}${prop}`\n\n if (typeof type === 'object' && !Array.isArray(type)) {\n // Nested\n recursiveCreate(indexDatastore, type, path)\n continue\n }\n\n if (isVectorType(type)) {\n indexDatastore.searchableProperties.push(path)\n indexDatastore.searchablePropertiesWithTypes[path] = type\n indexDatastore.vectorIndexes[path] = {\n type: 'Vector',\n node: new vector.VectorIndex(getVectorSize(type)),\n isArray: false\n }\n } else {\n const isArray = /\\[/.test(type as string)\n switch (type) {\n case 'boolean':\n case 'boolean[]':\n indexDatastore.indexes[path] = { type: 'Bool', node: new bool.BoolNode(), isArray }\n break\n case 'number':\n case 'number[]':\n indexDatastore.indexes[path] = {\n type: 'AVL',\n node: new avl.AVLTree<number, InternalDocumentID>(0, []),\n isArray\n }\n break\n case 'string':\n case 'string[]':\n indexDatastore.indexes[path] = { type: 'Radix', node: new radix.RadixTree(), isArray }\n break\n case 'enum':\n case 'enum[]':\n indexDatastore.indexes[path] = { type: 'Flat', node: new flat.FlatTree(), isArray }\n break\n case 'geopoint':\n indexDatastore.indexes[path] = { type: 'BKD', node: new bkd.BKDTree(), isArray }\n break\n default:\n throw new Error('INVALID_SCHEMA_TYPE: ' + path)\n }\n\n indexDatastore.searchableProperties.push(path)\n indexDatastore.searchablePropertiesWithTypes[path] = type\n }\n }\n}\n\nconst BIT_MASK_20 = 0b11111111111111111111\n\n// Runtime-configurable weights (default exact=1, fuzzy=0.6)\nconst qpsWeights = {\n exact: 1,\n fuzzy: 0.6\n}\n\nexport function setQpsWeights(weights?: { exact?: number; fuzzy?: number }) {\n if (weights?.exact !== undefined && !Number.isNaN(weights.exact)) {\n qpsWeights.exact = weights.exact\n }\n if (weights?.fuzzy !== undefined && !Number.isNaN(weights.fuzzy)) {\n qpsWeights.fuzzy = weights.fuzzy\n }\n}\n\n/**\n * Calculate token quantum - simplified to only track occurrence count.\n * \n * The bitmask for sentence positions was removed because:\n * 1. It was never used for scoring in searchString()\n * 2. numberOfOnes() function was never called\n * 3. Saves ~12ms CPU and ~25MB disk per 10K documents\n * \n * @param prevValue - Previous quantum value (just the count, or undefined for first occurrence)\n * @returns New count value\n */\nexport function calculateTokenQuantum(prevValue: number, _bit: number) {\n // Simply increment the count - handle undefined for first occurrence\n return (prevValue || 0) + 1\n}\n\nexport function insertString(\n value: string,\n radixTree: radix.RadixTree,\n stats: QPSIndex['stats'][string],\n prop: string,\n internalId: InternalDocumentID,\n language: string | undefined,\n tokenizer: Tokenizer\n) {\n const sentences = value.split(/\\.|\\?|!/)\n\n let quantumIndex = 0\n let tokenNumber = 0\n for (const sentence of sentences) {\n const tokens = tokenizer.tokenize(sentence, language, prop)\n\n for (const token of tokens) {\n tokenNumber++\n\n if (!stats[token]) {\n stats[token] = 0\n }\n\n const tokenBitIndex = Math.min(quantumIndex, 20)\n\n stats.tokenQuantums[internalId][token] = calculateTokenQuantum(\n stats.tokenQuantums[internalId][token],\n tokenBitIndex\n )\n\n radixTree.insert(token, internalId)\n }\n\n // Don't increment the quantum index if the sentence is too short\n if (tokens.length > 1) {\n quantumIndex++\n }\n }\n\n stats.tokensLength.set(internalId, tokenNumber)\n}\n\nexport function searchString(prop: {\n tokens: string[]\n radixNode: radix.RadixNode\n exact: boolean\n tolerance: number\n stats: {\n tokensLength: Map<number, number>\n tokenQuantums: Record<number, Record<string, number>>\n }\n boostPerProp: number\n resultMap: Map<number, [number, number]>\n whereFiltersIDs: Set<number> | undefined\n}) {\n const tokens = prop.tokens\n const radixNode = prop.radixNode\n const exact = prop.exact\n const tolerance = prop.tolerance\n const stats = prop.stats\n const boostPerProp = prop.boostPerProp\n const resultMap = prop.resultMap\n const whereFiltersIDs = prop.whereFiltersIDs\n const tokensLength = stats.tokensLength\n const tokenQuantums = stats.tokenQuantums\n const isMultiWord = tokens.length > 1\n\n const findParam = {\n term: '',\n exact,\n tolerance\n }\n\n // Track which query token each found word matches (for coverage calculation)\n const wordToQueryToken = new Map<string, { tokenIndex: number; isExact: boolean }>()\n let foundWords = {} as Record<string, number[]>\n const tokenLength = tokens.length\n for (let i = 0; i < tokenLength; i++) {\n const term = tokens[i]\n findParam.term = term\n const results = radixNode.find(findParam)\n\n // Track which query token each result word matches\n for (const foundWord of Object.keys(results)) {\n if (!wordToQueryToken.has(foundWord)) {\n wordToQueryToken.set(foundWord, {\n tokenIndex: i,\n isExact: foundWord === term\n })\n }\n }\n\n foundWords = {\n ...foundWords,\n ...results\n }\n }\n\n // For multi-word: track per-doc which query tokens matched and their weights\n const docMatchInfo = new Map<number, { matchedTokens: Set<number>; sumWeights: number }>()\n\n const foundKeys = Object.keys(foundWords)\n const foundKeysLength = foundKeys.length\n for (let i = 0; i < foundKeysLength; i++) {\n const key = foundKeys[i]\n const matchedDocs = foundWords[key]\n const matchedDocsLength = matchedDocs.length\n const isExactMatch = tokens.includes(key)\n const queryTokenInfo = wordToQueryToken.get(key)\n\n for (let j = 0; j < matchedDocsLength; j++) {\n const docId = matchedDocs[j]\n\n if (whereFiltersIDs && !whereFiltersIDs.has(docId)) {\n continue\n }\n\n const numberOfQuantums = tokensLength.get(docId)!\n // tokenQuantumDescriptor is now just the occurrence count (simplified)\n const occurrence = tokenQuantums[docId][key] || 0\n const weight = isExactMatch ? qpsWeights.exact : qpsWeights.fuzzy\n\n if (isMultiWord) {\n // Multi-word: use coverage × Σ(weight) scoring\n if (!docMatchInfo.has(docId)) {\n docMatchInfo.set(docId, { matchedTokens: new Set(), sumWeights: 0 })\n }\n const info = docMatchInfo.get(docId)!\n\n // Only count each query token once (coverage), but sum best weight per token\n if (queryTokenInfo && !info.matchedTokens.has(queryTokenInfo.tokenIndex)) {\n info.matchedTokens.add(queryTokenInfo.tokenIndex)\n info.sumWeights += weight\n }\n\n // Ensure doc is in resultMap for scoring\n if (!resultMap.has(docId)) {\n resultMap.set(docId, [0, 0])\n }\n } else {\n // Single word: use occurrence × weight scoring (original behavior)\n const score = occurrence * weight\n\n if (!resultMap.has(docId)) {\n resultMap.set(docId, [score, 0])\n continue\n }\n\n const current = resultMap.get(docId)!\n current[0] = current[0] + score\n }\n }\n }\n\n // For multi-word: calculate final scores using coverage × Σ(weight)\n if (isMultiWord) {\n for (const [docId, info] of docMatchInfo) {\n const coverage = info.matchedTokens.size / tokenLength\n const score = coverage * info.sumWeights\n const current = resultMap.get(docId)\n if (current) {\n current[0] = score\n }\n }\n }\n}\n\nexport function bitmask_20(n: number) {\n // Kept for backward compatibility - returns 0 since bitmask is no longer stored\n return 0\n}\n\n/**\n * Extract occurrence count from token quantum.\n * Simplified: now just returns the value directly (no bit shifting needed).\n */\nexport function count(n: number) {\n return n\n}\n\nexport function numberOfOnes(n: number) {\n let i = 0\n do {\n if (n & 1) {\n ++i\n }\n // eslint-disable-next-line no-cond-assign\n } while ((n >>= 1))\n return i\n}\n\nexport function removeString(\n value: string,\n radixTree: radix.RadixTree,\n prop: string,\n internalId: InternalDocumentID,\n tokenizer: Tokenizer,\n language: string | undefined,\n stats: {\n tokensLength: Map<number, number>\n tokenQuantums: Record<number, Record<string, number>>\n }\n) {\n const tokensLength = stats.tokensLength\n const tokenQuantums = stats.tokenQuantums\n\n const tokens = tokenizer.tokenize(value, language, prop)\n\n for (const token of tokens) {\n radixTree.removeDocumentByWord(token, internalId, true)\n }\n\n tokensLength.delete(internalId)\n delete tokenQuantums[internalId]\n}\n"],"mappings":"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","names":["src_exports","__export","pluginQPS","__toCommonJS","import_components","import_trees","import_components","recursiveCreate","indexDatastore","schema","prefix","entry","prop","type","path","isArray","qpsWeights","setQpsWeights","weights","calculateTokenQuantum","prevValue","_bit","insertString","value","radixTree","stats","prop","internalId","language","tokenizer","sentences","quantumIndex","tokenNumber","sentence","tokens","token","tokenBitIndex","searchString","radixNode","exact","tolerance","boostPerProp","resultMap","whereFiltersIDs","tokensLength","tokenQuantums","isMultiWord","findParam","wordToQueryToken","foundWords","tokenLength","i","term","results","foundWord","docMatchInfo","foundKeys","foundKeysLength","key","matchedDocs","matchedDocsLength","isExactMatch","queryTokenInfo","j","docId","numberOfQuantums","occurrence","weight","info","score","current","removeString","value","radixTree","prop","internalId","tokenizer","language","stats","tokensLength","tokenQuantums","tokens","token","import_trees","import_internals","unusedRadix","unusedStats","search","index","term","tokenizer","language","propertiesToSearch","exact","tolerance","boost","relevance","docsCount","whereFiltersIDs","all","args","propertiesToSearchLength","i","prop","stats","boostPerProp","searchString","g","gLength","res","element","id","score","pluginQPS","config","setQpsWeights","defaultTolerance","defaultMultiWordThreshold","defaultCandidatePool","defaultCandidateCap","defaultPhraseMode","schema","qpsComponents","defaults","indexDatastore","recursiveCreate","implementation","indexDatastorage","internalId","value","schemaType","Index","radixTree","item","insertString","removeString","filters","stringFiltersList","propName","idsFromStringFilters","filter","tokens","token","propIds","ids","idsFromNonStringFilters","sharedInternalDocumentStore","raw","dump1","dump2","indexes","isArray","type","node","tokenQuantums","tokensLength","baseIndex","nonStringIndexes"]}
|
package/dist/index.global.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
"use strict";var orama=orama||{};orama.plugin=orama.plugin||{};orama.plugin.qps=(()=>{var
|
|
2
|
-
- `),
|
|
1
|
+
"use strict";var orama=orama||{};orama.plugin=orama.plugin||{};orama.plugin.qps=(()=>{var Z=Object.defineProperty;var $e=Object.getOwnPropertyDescriptor;var Ge=Object.getOwnPropertyNames;var Ke=Object.prototype.hasOwnProperty;var je=(i,e,t)=>e in i?Z(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var L=(i,e)=>{for(var t in e)Z(i,t,{get:e[t],enumerable:!0})},Qe=(i,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Ge(e))!Ke.call(i,s)&&s!==t&&Z(i,s,{get:()=>e[s],enumerable:!(n=$e(e,s))||n.enumerable});return i};var Ye=i=>Qe(Z({},"__esModule",{value:!0}),i);var S=(i,e,t)=>(je(i,typeof e!="symbol"?e+"":e,t),t);var Ot={};L(Ot,{pluginQPS:()=>Dt});var He={arabic:"ar",armenian:"am",bulgarian:"bg",czech:"cz",danish:"dk",dutch:"nl",english:"en",finnish:"fi",french:"fr",german:"de",greek:"gr",hungarian:"hu",indian:"in",indonesian:"id",irish:"ie",italian:"it",lithuanian:"lt",nepali:"np",norwegian:"no",portuguese:"pt",romanian:"ro",russian:"ru",serbian:"rs",slovenian:"ru",spanish:"es",swedish:"se",tamil:"ta",turkish:"tr",ukrainian:"uk",sanskrit:"sk"};var fe=Object.keys(He);var kt=Date.now().toString().slice(5);var Rt=BigInt(1e3),Et=BigInt(1e6),vt=BigInt(1e9);function xe(i,...e){return i.replace(/%(?:(?<position>\d+)\$)?(?<width>-?\d*\.?\d*)(?<type>[dfs])/g,function(...t){let n=t[t.length-1],{width:s,type:o,position:r}=n,a=r?e[Number.parseInt(r)-1]:e.shift(),c=s===""?0:Number.parseInt(s);switch(o){case"d":return a.toString().padStart(c,"0");case"f":{let l=a,[u,f]=s.split(".").map(d=>Number.parseFloat(d));return typeof f=="number"&&f>=0&&(l=l.toFixed(f)),typeof u=="number"&&u>=0?l.toString().padStart(c,"0"):l.toString()}case"s":return c<0?a.toString().padEnd(-c," "):a.toString().padStart(c," ");default:return a}})}function ee(i,e){return Object.hasOwn===void 0?Object.prototype.hasOwnProperty.call(i,e)?i[e]:void 0:Object.hasOwn(i,e)?i[e]:void 0}var qe={cm:.01,m:1,km:1e3,ft:.3048,yd:.9144,mi:1609.344};function te(i,e){let t=qe[e];if(t===void 0)throw new Error(A("INVALID_DISTANCE_SUFFIX",i).message);return i*t}var Te="intersection"in new Set;function B(...i){if(i.length===0)return new Set;if(i.length===1)return i[0];if(i.length===2){let n=i[0],s=i[1];if(Te)return n.intersection(s);let o=new Set,r=n.size<s.size?n:s,a=r===n?s:n;for(let c of r)a.has(c)&&o.add(c);return o}let e={index:0,size:i[0].size};for(let n=1;n<i.length;n++)i[n].size<e.size&&(e.index=n,e.size=i[n].size);if(Te){let n=i[e.index];for(let s=0;s<i.length;s++)s!==e.index&&(n=n.intersection(i[s]));return n}let t=i[e.index];for(let n=0;n<i.length;n++){if(n===e.index)continue;let s=i[n];for(let o of t)s.has(o)||t.delete(o)}return t}var Xe="union"in new Set;function V(i,e){return Xe?i?i.union(e):e:i?new Set([...i,...e]):new Set(e)}function de(i,e){let t=new Set;for(let n of i)e.has(n)||t.add(n);return t}var Ze=fe.join(`
|
|
2
|
+
- `),et={NO_LANGUAGE_WITH_CUSTOM_TOKENIZER:"Do not pass the language option to create when using a custom tokenizer.",LANGUAGE_NOT_SUPPORTED:`Language "%s" is not supported.
|
|
3
3
|
Supported languages are:
|
|
4
|
-
- ${
|
|
4
|
+
- ${Ze}`,INVALID_STEMMER_FUNCTION_TYPE:"config.stemmer property must be a function.",MISSING_STEMMER:'As of version 1.0.0 @wcs-colab/orama does not ship non English stemmers by default. To solve this, please explicitly import and specify the "%s" stemmer from the package @orama/stemmers. See https://docs.orama.com/docs/orama-js/text-analysis/stemming for more information.',CUSTOM_STOP_WORDS_MUST_BE_FUNCTION_OR_ARRAY:"Custom stop words array must only contain strings.",UNSUPPORTED_COMPONENT:'Unsupported component "%s".',COMPONENT_MUST_BE_FUNCTION:'The component "%s" must be a function.',COMPONENT_MUST_BE_FUNCTION_OR_ARRAY_FUNCTIONS:'The component "%s" must be a function or an array of functions.',INVALID_SCHEMA_TYPE:'Unsupported schema type "%s" at "%s". Expected "string", "boolean" or "number" or array of them.',DOCUMENT_ID_MUST_BE_STRING:'Document id must be of type "string". Got "%s" instead.',DOCUMENT_ALREADY_EXISTS:'A document with id "%s" already exists.',DOCUMENT_DOES_NOT_EXIST:'A document with id "%s" does not exists.',MISSING_DOCUMENT_PROPERTY:'Missing searchable property "%s".',INVALID_DOCUMENT_PROPERTY:'Invalid document property "%s": expected "%s", got "%s"',UNKNOWN_INDEX:'Invalid property name "%s". Expected a wildcard string ("*") or array containing one of the following properties: %s',INVALID_BOOST_VALUE:"Boost value must be a number greater than, or less than 0.",INVALID_FILTER_OPERATION:"You can only use one operation per filter, you requested %d.",SCHEMA_VALIDATION_FAILURE:'Cannot insert document due schema validation failure on "%s" property.',INVALID_SORT_SCHEMA_TYPE:'Unsupported sort schema type "%s" at "%s". Expected "string" or "number".',CANNOT_SORT_BY_ARRAY:'Cannot configure sort for "%s" because it is an array (%s).',UNABLE_TO_SORT_ON_UNKNOWN_FIELD:'Unable to sort on unknown field "%s". Allowed fields: %s',SORT_DISABLED:"Sort is disabled. Please read the documentation at https://docs.orama.com/docs/orama-js for more information.",UNKNOWN_GROUP_BY_PROPERTY:'Unknown groupBy property "%s".',INVALID_GROUP_BY_PROPERTY:'Invalid groupBy property "%s". Allowed types: "%s", but given "%s".',UNKNOWN_FILTER_PROPERTY:'Unknown filter property "%s".',UNKNOWN_VECTOR_PROPERTY:'Unknown vector property "%s". Make sure the property exists in the schema and is configured as a vector.',INVALID_VECTOR_SIZE:'Vector size must be a number greater than 0. Got "%s" instead.',INVALID_VECTOR_VALUE:'Vector value must be a number greater than 0. Got "%s" instead.',INVALID_INPUT_VECTOR:`Property "%s" was declared as a %s-dimensional vector, but got a %s-dimensional vector instead.
|
|
5
5
|
Input vectors must be of the size declared in the schema, as calculating similarity between vectors of different sizes can lead to unexpected results.`,WRONG_SEARCH_PROPERTY_TYPE:'Property "%s" is not searchable. Only "string" properties are searchable.',FACET_NOT_SUPPORTED:`Facet doens't support the type "%s".`,INVALID_DISTANCE_SUFFIX:'Invalid distance suffix "%s". Valid suffixes are: cm, m, km, mi, yd, ft.',INVALID_SEARCH_MODE:'Invalid search mode "%s". Valid modes are: "fulltext", "vector", "hybrid".',MISSING_VECTOR_AND_SECURE_PROXY:"No vector was provided and no secure proxy was configured. Please provide a vector or configure an Orama Secure Proxy to perform hybrid search.",MISSING_TERM:'"term" is a required parameter when performing hybrid search. Please provide a search term.',INVALID_VECTOR_INPUT:'Invalid "vector" property. Expected an object with "value" and "property" properties, but got "%s" instead.',PLUGIN_CRASHED:"A plugin crashed during initialization. Please check the error message for more information:",PLUGIN_SECURE_PROXY_NOT_FOUND:`Could not find '@wcs-colab/plugin-secure-proxy' installed in your Orama instance.
|
|
6
6
|
Please install it before proceeding with creating an answer session.
|
|
7
7
|
Read more at https://docs.orama.com/docs/orama-js/plugins/plugin-secure-proxy#plugin-secure-proxy
|
|
8
8
|
`,PLUGIN_SECURE_PROXY_MISSING_CHAT_MODEL:`Could not find a chat model defined in the secure proxy plugin configuration.
|
|
9
9
|
Please provide a chat model before proceeding with creating an answer session.
|
|
10
10
|
Read more at https://docs.orama.com/docs/orama-js/plugins/plugin-secure-proxy#plugin-secure-proxy
|
|
11
|
-
`,ANSWER_SESSION_LAST_MESSAGE_IS_NOT_ASSISTANT:"The last message in the session is not an assistant message. Cannot regenerate non-assistant messages.",PLUGIN_COMPONENT_CONFLICT:'The component "%s" is already defined. The plugin "%s" is trying to redefine it.'};function A(i,...e){let t=new Error(De(ot[i]??`Unsupported Orama Error code: ${i}`,...e));return t.code=i,"captureStackTrace"in Error.prototype&&Error.captureStackTrace(t),t}var at={string:!1,number:!1,boolean:!1,enum:!1,geopoint:!1,"string[]":!0,"number[]":!0,"boolean[]":!0,"enum[]":!0},ct={"string[]":"string","number[]":"number","boolean[]":"boolean","enum[]":"enum"};function U(i){return typeof i=="string"&&/^vector\[\d+\]$/.test(i)}function pe(i){return typeof i=="string"&&at[i]}function Ne(i){return ct[i]}function oe(i){let e=Number(i.slice(7,-1));switch(!0){case isNaN(e):throw A("INVALID_VECTOR_VALUE",i);case e<=0:throw A("INVALID_VECTOR_SIZE",i);default:return e}}function W(i,e){if(typeof e=="string"){let t=i.idToInternalId.get(e);if(t)return t;let n=i.idToInternalId.size+1;return i.idToInternalId.set(e,n),i.internalIdToId.push(e),n}return e>i.internalIdToId.length?W(i,e.toString()):e}var v={};L(v,{calculateResultScores:()=>Ie,create:()=>Se,createIndex:()=>pt,getSearchableProperties:()=>Be,getSearchablePropertiesWithTypes:()=>Fe,insert:()=>Me,insertDocumentScoreParameters:()=>Re,insertTokenScoreParameters:()=>Ee,insertVector:()=>Le,load:()=>Ue,remove:()=>ze,removeDocumentScoreParameters:()=>ve,removeTokenScoreParameters:()=>_e,save:()=>We,search:()=>Ce,searchByGeoWhereClause:()=>gt,searchByWhereClause:()=>Z});var se={};L(se,{AVLNode:()=>z,AVLTree:()=>K});var z=class i{constructor(e,t){I(this,"k");I(this,"v");I(this,"l",null);I(this,"r",null);I(this,"h",1);this.k=e,this.v=new Set(t)}updateHeight(){this.h=Math.max(i.getHeight(this.l),i.getHeight(this.r))+1}static getHeight(e){return e?e.h:0}getBalanceFactor(){return i.getHeight(this.l)-i.getHeight(this.r)}rotateLeft(){let e=this.r;return this.r=e.l,e.l=this,this.updateHeight(),e.updateHeight(),e}rotateRight(){let e=this.l;return this.l=e.r,e.r=this,this.updateHeight(),e.updateHeight(),e}toJSON(){return{k:this.k,v:Array.from(this.v),l:this.l?this.l.toJSON():null,r:this.r?this.r.toJSON():null,h:this.h}}static fromJSON(e){let t=new i(e.k,e.v);return t.l=e.l?i.fromJSON(e.l):null,t.r=e.r?i.fromJSON(e.r):null,t.h=e.h,t}},K=class i{constructor(e,t){I(this,"root",null);I(this,"insertCount",0);e!==void 0&&t!==void 0&&(this.root=new z(e,t))}insert(e,t,n=1e3){this.root=this.insertNode(this.root,e,t,n)}insertMultiple(e,t,n=1e3){for(let s of t)this.insert(e,s,n)}rebalance(){this.root&&(this.root=this.rebalanceNode(this.root))}toJSON(){return{root:this.root?this.root.toJSON():null,insertCount:this.insertCount}}static fromJSON(e){let t=new i;return t.root=e.root?z.fromJSON(e.root):null,t.insertCount=e.insertCount||0,t}insertNode(e,t,n,s){if(e===null)return new z(t,[n]);let o=[],r=e,a=null;for(;r!==null;)if(o.push({parent:a,node:r}),t<r.k)if(r.l===null){r.l=new z(t,[n]),o.push({parent:r,node:r.l});break}else a=r,r=r.l;else if(t>r.k)if(r.r===null){r.r=new z(t,[n]),o.push({parent:r,node:r.r});break}else a=r,r=r.r;else return r.v.add(n),e;let c=!1;this.insertCount++%s===0&&(c=!0);for(let l=o.length-1;l>=0;l--){let{parent:u,node:f}=o[l];if(f.updateHeight(),c){let d=this.rebalanceNode(f);u?u.l===f?u.l=d:u.r===f&&(u.r=d):e=d}}return e}rebalanceNode(e){let t=e.getBalanceFactor();if(t>1){if(e.l&&e.l.getBalanceFactor()>=0)return e.rotateRight();if(e.l)return e.l=e.l.rotateLeft(),e.rotateRight()}if(t<-1){if(e.r&&e.r.getBalanceFactor()<=0)return e.rotateLeft();if(e.r)return e.r=e.r.rotateRight(),e.rotateLeft()}return e}find(e){let t=this.findNodeByKey(e);return t?t.v:null}contains(e){return this.find(e)!==null}getSize(){let e=0,t=[],n=this.root;for(;n||t.length>0;){for(;n;)t.push(n),n=n.l;n=t.pop(),e++,n=n.r}return e}isBalanced(){if(!this.root)return!0;let e=[this.root];for(;e.length>0;){let t=e.pop(),n=t.getBalanceFactor();if(Math.abs(n)>1)return!1;t.l&&e.push(t.l),t.r&&e.push(t.r)}return!0}remove(e){this.root=this.removeNode(this.root,e)}removeDocument(e,t){let n=this.findNodeByKey(e);n&&(n.v.size===1?this.root=this.removeNode(this.root,e):n.v=new Set([...n.v.values()].filter(s=>s!==t)))}findNodeByKey(e){let t=this.root;for(;t;)if(e<t.k)t=t.l;else if(e>t.k)t=t.r;else return t;return null}removeNode(e,t){if(e===null)return null;let n=[],s=e;for(;s!==null&&s.k!==t;)n.push(s),t<s.k?s=s.l:s=s.r;if(s===null)return e;if(s.l===null||s.r===null){let o=s.l?s.l:s.r;if(n.length===0)e=o;else{let r=n[n.length-1];r.l===s?r.l=o:r.r=o}}else{let o=s,r=s.r;for(;r.l!==null;)o=r,r=r.l;s.k=r.k,s.v=r.v,o.l===r?o.l=r.r:o.r=r.r,s=o}n.push(s);for(let o=n.length-1;o>=0;o--){let r=n[o];r.updateHeight();let a=this.rebalanceNode(r);if(o>0){let c=n[o-1];c.l===r?c.l=a:c.r===r&&(c.r=a)}else e=a}return e}rangeSearch(e,t){let n=new Set,s=[],o=this.root;for(;o||s.length>0;){for(;o;)s.push(o),o=o.l;if(o=s.pop(),o.k>=e&&o.k<=t)for(let r of o.v)n.add(r);if(o.k>t)break;o=o.r}return n}greaterThan(e,t=!1){let n=new Set,s=[],o=this.root;for(;o||s.length>0;){for(;o;)s.push(o),o=o.r;if(o=s.pop(),t&&o.k>=e||!t&&o.k>e)for(let r of o.v)n.add(r);else if(o.k<=e)break;o=o.l}return n}lessThan(e,t=!1){let n=new Set,s=[],o=this.root;for(;o||s.length>0;){for(;o;)s.push(o),o=o.l;if(o=s.pop(),t&&o.k<=e||!t&&o.k<e)for(let r of o.v)n.add(r);else if(o.k>e)break;o=o.r}return n}};var ie={};L(ie,{FlatTree:()=>j});var j=class i{constructor(){I(this,"numberToDocumentId");this.numberToDocumentId=new Map}insert(e,t){this.numberToDocumentId.has(e)?this.numberToDocumentId.get(e).add(t):this.numberToDocumentId.set(e,new Set([t]))}find(e){let t=this.numberToDocumentId.get(e);return t?Array.from(t):null}remove(e){this.numberToDocumentId.delete(e)}removeDocument(e,t){let n=this.numberToDocumentId.get(t);n&&(n.delete(e),n.size===0&&this.numberToDocumentId.delete(t))}contains(e){return this.numberToDocumentId.has(e)}getSize(){let e=0;for(let t of this.numberToDocumentId.values())e+=t.size;return e}filter(e){let t=Object.keys(e);if(t.length!==1)throw new Error("Invalid operation");let n=t[0];switch(n){case"eq":{let s=e[n],o=this.numberToDocumentId.get(s);return o?Array.from(o):[]}case"in":{let s=e[n],o=new Set;for(let r of s){let a=this.numberToDocumentId.get(r);if(a)for(let c of a)o.add(c)}return Array.from(o)}case"nin":{let s=new Set(e[n]),o=new Set;for(let[r,a]of this.numberToDocumentId.entries())if(!s.has(r))for(let c of a)o.add(c);return Array.from(o)}default:throw new Error("Invalid operation")}}filterArr(e){let t=Object.keys(e);if(t.length!==1)throw new Error("Invalid operation");let n=t[0];switch(n){case"containsAll":{let o=e[n].map(a=>this.numberToDocumentId.get(a)??new Set);if(o.length===0)return[];let r=o.reduce((a,c)=>new Set([...a].filter(l=>c.has(l))));return Array.from(r)}case"containsAny":{let o=e[n].map(a=>this.numberToDocumentId.get(a)??new Set);if(o.length===0)return[];let r=o.reduce((a,c)=>new Set([...a,...c]));return Array.from(r)}default:throw new Error("Invalid operation")}}static fromJSON(e){if(!e.numberToDocumentId)throw new Error("Invalid Flat Tree JSON");let t=new i;for(let[n,s]of e.numberToDocumentId)t.numberToDocumentId.set(n,new Set(s));return t}toJSON(){return{numberToDocumentId:Array.from(this.numberToDocumentId.entries()).map(([e,t])=>[e,Array.from(t)])}}};var V={};L(V,{RadixNode:()=>X,RadixTree:()=>Q});var q=!1;function ft(i,e,t){if(t<0)return-1;if(i===e)return 0;let n=i.length,s=e.length;if(n===0)return s<=t?s:-1;if(s===0)return n<=t?n:-1;let o=Math.abs(n-s);if(q){if(i.startsWith(e))return o<=t?o:-1;if(e.startsWith(i))return 0}if(o>t)return-1;let r=[];for(let a=0;a<=n;a++){r[a]=[a];for(let c=1;c<=s;c++)r[a][c]=a===0?c:0}for(let a=1;a<=n;a++){let c=1/0;for(let l=1;l<=s;l++)i[a-1]===e[l-1]?r[a][l]=r[a-1][l-1]:r[a][l]=Math.min(r[a-1][l]+1,r[a][l-1]+1,r[a-1][l-1]+1),c=Math.min(c,r[a][l]);if(c>t)return-1}return r[n][s]<=t?r[n][s]:-1}function me(i,e,t){let n=ft(i,e,t);return{distance:n,isBounded:n>=0}}var X=class i{constructor(e,t,n){I(this,"k");I(this,"s");I(this,"c",new Map);I(this,"d",new Set);I(this,"e");I(this,"w","");this.k=e,this.s=t,this.e=n}updateParent(e){this.w=e.w+this.s}addDocument(e){this.d.add(e)}removeDocument(e){return this.d.delete(e)}findAllWords(e,t,n,s){let o=[this];for(;o.length>0;){let r=o.pop();if(r.e){let{w:a,d:c}=r;if(n&&a!==t)continue;if(ne(e,a)!==null)if(s)if(Math.abs(t.length-a.length)<=s&&me(t,a,s).isBounded)e[a]=[];else continue;else e[a]=[];if(ne(e,a)!=null&&c.size>0){let l=e[a];for(let u of c)l.includes(u)||l.push(u)}}r.c.size>0&&o.push(...r.c.values())}return e}insert(e,t){let n=this,s=0,o=e.length;for(;s<o;){let r=e[s],a=n.c.get(r);if(a){let c=a.s,l=c.length,u=0;for(;u<l&&s+u<o&&c[u]===e[s+u];)u++;if(u===l){if(n=a,s+=u,s===o){a.e||(a.e=!0),a.addDocument(t);return}continue}let f=c.slice(0,u),d=c.slice(u),h=e.slice(s+u),p=new i(f[0],f,!1);if(n.c.set(f[0],p),p.updateParent(n),a.s=d,a.k=d[0],p.c.set(d[0],a),a.updateParent(p),h){let g=new i(h[0],h,!0);g.addDocument(t),p.c.set(h[0],g),g.updateParent(p)}else p.e=!0,p.addDocument(t);return}else{let c=new i(r,e.slice(s),!0);c.addDocument(t),n.c.set(r,c),c.updateParent(n);return}}n.e||(n.e=!0),n.addDocument(t)}_findLevenshtein(e,t,n,s,o){let r=[{node:this,index:t,tolerance:n}];for(;r.length>0;){let{node:a,index:c,tolerance:l}=r.pop();if(q&&a.w.startsWith(e)&&a.w!==e){console.log("[RADIX FIX] Prefix optimization triggered for:",a.w,"term:",e),a.findAllWords(o,e,!1,0);continue}if(q&&a.w.startsWith(e)&&a.w===e&&console.log("[RADIX FIX] Exact match excluded from prefix optimization:",e),l<0)continue;if(a.e){let{w:f,d}=a;if(f&&(me(e,f,s).isBounded&&(o[f]=[]),ne(o,f)!==void 0&&d.size>0)){let h=new Set(o[f]);for(let p of d)h.add(p);o[f]=Array.from(h)}}if(c>=e.length)continue;let u=e[c];if(a.c.has(u)){let f=a.c.get(u);r.push({node:f,index:c+1,tolerance:l})}r.push({node:a,index:c+1,tolerance:l-1});for(let[f,d]of a.c)r.push({node:d,index:c,tolerance:l-1}),f!==u&&r.push({node:d,index:c+1,tolerance:l-1})}}find(e){let{term:t,exact:n,tolerance:s}=e;if(s&&!n){let o={};return this._findLevenshtein(t,0,s,s,o),o}else{let o=this,r=0,a=t.length;for(;r<a;){let l=t[r],u=o.c.get(l);if(u){let f=u.s,d=f.length,h=0;for(;h<d&&r+h<a&&f[h]===t[r+h];)h++;if(h===d)o=u,r+=h;else if(r+h===a)if(h===a-r){if(n)return{};{let p={};return u.findAllWords(p,t,n,s),p}}else return{};else return{}}else return{}}let c={};return o.findAllWords(c,t,n,s),c}}contains(e){let t=this,n=0,s=e.length;for(;n<s;){let o=e[n],r=t.c.get(o);if(r){let a=r.s,c=a.length,l=0;for(;l<c&&n+l<s&&a[l]===e[n+l];)l++;if(l<c)return!1;n+=c,t=r}else return!1}return!0}removeWord(e){if(!e)return!1;let t=this,n=e.length,s=[];for(let o=0;o<n;o++){let r=e[o];if(t.c.has(r)){let a=t.c.get(r);s.push({parent:t,character:r}),o+=a.s.length-1,t=a}else return!1}for(t.d.clear(),t.e=!1;s.length>0&&t.c.size===0&&!t.e&&t.d.size===0;){let{parent:o,character:r}=s.pop();o.c.delete(r),t=o}return!0}removeDocumentByWord(e,t,n=!0){if(!e)return!0;let s=this,o=e.length;for(let r=0;r<o;r++){let a=e[r];if(s.c.has(a)){let c=s.c.get(a);r+=c.s.length-1,s=c,n&&s.w!==e||s.removeDocument(t)}else return!1}return!0}static getCommonPrefix(e,t){let n=Math.min(e.length,t.length),s=0;for(;s<n&&e.charCodeAt(s)===t.charCodeAt(s);)s++;return e.slice(0,s)}toJSON(){return{w:this.w,s:this.s,e:this.e,k:this.k,d:Array.from(this.d),c:Array.from(this.c?.entries())?.map(([e,t])=>[e,t.toJSON()])}}static fromJSON(e){let t=new i(e.k,e.s,e.e);return t.w=e.w,t.d=new Set(e.d),t.c=new Map(e?.c?.map(([n,s])=>[n,i.fromJSON(s)])||[]),t}},Q=class i extends X{constructor(){super("","",!1)}static fromJSON(e){let t=new i;return t.w=e.w,t.s=e.s,t.e=e.e,t.k=e.k,t.d=new Set(e.d),t.c=new Map(e?.c?.map(([n,s])=>[n,X.fromJSON(s)])||[]),t}toJSON(){return super.toJSON()}};var ce={};L(ce,{BKDTree:()=>E});var ae=class i{constructor(e,t){I(this,"point");I(this,"docIDs");I(this,"left");I(this,"right");I(this,"parent");this.point=e,this.docIDs=new Set(t),this.left=null,this.right=null,this.parent=null}toJSON(){return{point:this.point,docIDs:Array.from(this.docIDs),left:this.left?this.left.toJSON():null,right:this.right?this.right.toJSON():null}}static fromJSON(e,t=null){let n=new i(e.point,e.docIDs);return n.parent=t,e.left&&(n.left=i.fromJSON(e.left,n)),e.right&&(n.right=i.fromJSON(e.right,n)),n}},E=class i{constructor(){I(this,"root");I(this,"nodeMap");this.root=null,this.nodeMap=new Map}getPointKey(e){return`${e.lon},${e.lat}`}insert(e,t){let n=this.getPointKey(e),s=this.nodeMap.get(n);if(s){t.forEach(c=>s.docIDs.add(c));return}let o=new ae(e,t);if(this.nodeMap.set(n,o),this.root==null){this.root=o;return}let r=this.root,a=0;for(;;){if(a%2===0)if(e.lon<r.point.lon){if(r.left==null){r.left=o,o.parent=r;return}r=r.left}else{if(r.right==null){r.right=o,o.parent=r;return}r=r.right}else if(e.lat<r.point.lat){if(r.left==null){r.left=o,o.parent=r;return}r=r.left}else{if(r.right==null){r.right=o,o.parent=r;return}r=r.right}a++}}contains(e){let t=this.getPointKey(e);return this.nodeMap.has(t)}getDocIDsByCoordinates(e){let t=this.getPointKey(e),n=this.nodeMap.get(t);return n?Array.from(n.docIDs):null}removeDocByID(e,t){let n=this.getPointKey(e),s=this.nodeMap.get(n);s&&(s.docIDs.delete(t),s.docIDs.size===0&&(this.nodeMap.delete(n),this.deleteNode(s)))}deleteNode(e){let t=e.parent,n=e.left?e.left:e.right;n&&(n.parent=t),t?t.left===e?t.left=n:t.right===e&&(t.right=n):(this.root=n,this.root&&(this.root.parent=null))}searchByRadius(e,t,n=!0,s="asc",o=!1){let r=o?i.vincentyDistance:i.haversineDistance,a=[{node:this.root,depth:0}],c=[];for(;a.length>0;){let{node:l,depth:u}=a.pop();if(l==null)continue;let f=r(e,l.point);(n?f<=t:f>t)&&c.push({point:l.point,docIDs:Array.from(l.docIDs)}),l.left!=null&&a.push({node:l.left,depth:u+1}),l.right!=null&&a.push({node:l.right,depth:u+1})}return s&&c.sort((l,u)=>{let f=r(e,l.point),d=r(e,u.point);return s.toLowerCase()==="asc"?f-d:d-f}),c}searchByPolygon(e,t=!0,n=null,s=!1){let o=[{node:this.root,depth:0}],r=[];for(;o.length>0;){let{node:c,depth:l}=o.pop();if(c==null)continue;c.left!=null&&o.push({node:c.left,depth:l+1}),c.right!=null&&o.push({node:c.right,depth:l+1});let u=i.isPointInPolygon(e,c.point);(u&&t||!u&&!t)&&r.push({point:c.point,docIDs:Array.from(c.docIDs)})}let a=i.calculatePolygonCentroid(e);if(n){let c=s?i.vincentyDistance:i.haversineDistance;r.sort((l,u)=>{let f=c(a,l.point),d=c(a,u.point);return n.toLowerCase()==="asc"?f-d:d-f})}return r}toJSON(){return{root:this.root?this.root.toJSON():null}}static fromJSON(e){let t=new i;return e.root&&(t.root=ae.fromJSON(e.root),t.buildNodeMap(t.root)),t}buildNodeMap(e){if(e==null)return;let t=this.getPointKey(e.point);this.nodeMap.set(t,e),e.left&&this.buildNodeMap(e.left),e.right&&this.buildNodeMap(e.right)}static calculatePolygonCentroid(e){let t=0,n=0,s=0,o=e.length;for(let a=0,c=o-1;a<o;c=a++){let l=e[a].lon,u=e[a].lat,f=e[c].lon,d=e[c].lat,h=l*d-f*u;t+=h,n+=(l+f)*h,s+=(u+d)*h}t/=2;let r=6*t;return n/=r,s/=r,{lon:n,lat:s}}static isPointInPolygon(e,t){let n=!1,s=t.lon,o=t.lat,r=e.length;for(let a=0,c=r-1;a<r;c=a++){let l=e[a].lon,u=e[a].lat,f=e[c].lon,d=e[c].lat;u>o!=d>o&&s<(f-l)*(o-u)/(d-u)+l&&(n=!n)}return n}static haversineDistance(e,t){let n=Math.PI/180,s=e.lat*n,o=t.lat*n,r=(t.lat-e.lat)*n,a=(t.lon-e.lon)*n,c=Math.sin(r/2)*Math.sin(r/2)+Math.cos(s)*Math.cos(o)*Math.sin(a/2)*Math.sin(a/2);return 6371e3*(2*Math.atan2(Math.sqrt(c),Math.sqrt(1-c)))}static vincentyDistance(e,t){let s=.0033528106647474805,o=(1-s)*6378137,r=Math.PI/180,a=e.lat*r,c=t.lat*r,l=(t.lon-e.lon)*r,u=Math.atan((1-s)*Math.tan(a)),f=Math.atan((1-s)*Math.tan(c)),d=Math.sin(u),h=Math.cos(u),p=Math.sin(f),g=Math.cos(f),T=l,b,y=1e3,m,S,x,D,k,N;do{let P=Math.sin(T),M=Math.cos(T);if(m=Math.sqrt(g*P*(g*P)+(h*p-d*g*M)*(h*p-d*g*M)),m===0)return 0;S=d*p+h*g*M,x=Math.atan2(m,S),D=h*g*P/m,k=1-D*D,N=S-2*d*p/k,isNaN(N)&&(N=0);let R=s/16*k*(4+s*(4-3*k));b=T,T=l+(1-R)*s*D*(x+R*m*(N+R*S*(-1+2*N*N)))}while(Math.abs(T-b)>1e-12&&--y>0);if(y===0)return NaN;let w=k*(6378137*6378137-o*o)/(o*o),O=1+w/16384*(4096+w*(-768+w*(320-175*w))),_=w/1024*(256+w*(-128+w*(74-47*w))),J=_*m*(N+_/4*(S*(-1+2*N*N)-_/6*N*(-3+4*m*m)*(-3+4*N*N)));return o*O*(x-J)}};var le={};L(le,{BoolNode:()=>Y});var Y=class i{constructor(){I(this,"true");I(this,"false");this.true=new Set,this.false=new Set}insert(e,t){t?this.true.add(e):this.false.add(e)}delete(e,t){t?this.true.delete(e):this.false.delete(e)}getSize(){return this.true.size+this.false.size}toJSON(){return{true:Array.from(this.true),false:Array.from(this.false)}}static fromJSON(e){let t=new i;return t.true=new Set(e.true),t.false=new Set(e.false),t}};function Oe(i,e,t,n,s,{k:o,b:r,d:a}){return Math.log(1+(t-e+.5)/(e+.5))*(a+i*(o+1))/(i+o*(1-r+r*n/s))}var ue={};L(ue,{DEFAULT_SIMILARITY:()=>dt,VectorIndex:()=>H,findSimilarVectors:()=>we,getMagnitude:()=>ge});var dt=.8,H=class i{constructor(e){I(this,"size");I(this,"vectors",new Map);this.size=e}add(e,t){t instanceof Float32Array||(t=new Float32Array(t));let n=ge(t,this.size);this.vectors.set(e,[n,t])}remove(e){this.vectors.delete(e)}find(e,t,n){return e instanceof Float32Array||(e=new Float32Array(e)),we(e,n,this.vectors,this.size,t)}toJSON(){let e=[];for(let[t,[n,s]]of this.vectors)e.push([t,[n,Array.from(s)]]);return{size:this.size,vectors:e}}static fromJSON(e){let t=e,n=new i(t.size);for(let[s,[o,r]]of t.vectors)n.vectors.set(s,[o,new Float32Array(r)]);return n}};function ge(i,e){let t=0;for(let n=0;n<e;n++)t+=i[n]*i[n];return Math.sqrt(t)}function we(i,e,t,n,s){let o=ge(i,n),r=[],a=e||t.keys();for(let c of a){let l=t.get(c);if(!l)continue;let u=l[0],f=l[1],d=0;for(let p=0;p<n;p++)d+=i[p]*f[p];let h=d/(o*u);h>=s&&r.push([c,h])}return r}function Re(i,e,t,n,s){let o=W(i.sharedInternalDocumentStore,t);i.avgFieldLength[e]=((i.avgFieldLength[e]??0)*(s-1)+n.length)/s,i.fieldLengths[e][o]=n.length,i.frequencies[e][o]={}}function Ee(i,e,t,n,s){let o=0;for(let c of n)c===s&&o++;let r=W(i.sharedInternalDocumentStore,t),a=o/n.length;i.frequencies[e][r][s]=a,s in i.tokenOccurrences[e]||(i.tokenOccurrences[e][s]=0),i.tokenOccurrences[e][s]=(i.tokenOccurrences[e][s]??0)+1}function ve(i,e,t,n){let s=W(i.sharedInternalDocumentStore,t);n>1?i.avgFieldLength[e]=(i.avgFieldLength[e]*n-i.fieldLengths[e][s])/(n-1):i.avgFieldLength[e]=void 0,i.fieldLengths[e][s]=void 0,i.frequencies[e][s]=void 0}function _e(i,e,t){i.tokenOccurrences[e][t]--}function Se(i,e,t,n,s=""){n||(n={sharedInternalDocumentStore:e,indexes:{},vectorIndexes:{},searchableProperties:[],searchablePropertiesWithTypes:{},frequencies:{},tokenOccurrences:{},avgFieldLength:{},fieldLengths:{}});for(let[o,r]of Object.entries(t)){let a=`${s}${s?".":""}${o}`;if(typeof r=="object"&&!Array.isArray(r)){Se(i,e,r,n,a);continue}if(U(r))n.searchableProperties.push(a),n.searchablePropertiesWithTypes[a]=r,n.vectorIndexes[a]={type:"Vector",node:new H(oe(r)),isArray:!1};else{let c=/\[/.test(r);switch(r){case"boolean":case"boolean[]":n.indexes[a]={type:"Bool",node:new Y,isArray:c};break;case"number":case"number[]":n.indexes[a]={type:"AVL",node:new K(0,[]),isArray:c};break;case"string":case"string[]":n.indexes[a]={type:"Radix",node:new Q,isArray:c},n.avgFieldLength[a]=0,n.frequencies[a]={},n.tokenOccurrences[a]={},n.fieldLengths[a]={};break;case"enum":case"enum[]":n.indexes[a]={type:"Flat",node:new j,isArray:c};break;case"geopoint":n.indexes[a]={type:"BKD",node:new E,isArray:c};break;default:throw A("INVALID_SCHEMA_TYPE",Array.isArray(r)?"array":r,a)}n.searchableProperties.push(a),n.searchablePropertiesWithTypes[a]=r}}return n}function ht(i,e,t,n,s,o,r,a){return c=>{let{type:l,node:u}=e.indexes[t];switch(l){case"Bool":{u[c?"true":"false"].add(n);break}case"AVL":{let f=a?.avlRebalanceThreshold??1;u.insert(c,n,f);break}case"Radix":{let f=o.tokenize(c,s,t,!1);i.insertDocumentScoreParameters(e,t,n,f,r);for(let d of f)i.insertTokenScoreParameters(e,t,n,f,d),u.insert(d,n);break}case"Flat":{u.insert(c,n);break}case"BKD":{u.insert(c,[n]);break}}}}function Me(i,e,t,n,s,o,r,a,c,l,u){if(U(r))return Le(e,t,o,n,s);let f=ht(i,e,t,s,a,c,l,u);if(!pe(r))return f(o);let d=o,h=d.length;for(let p=0;p<h;p++)f(d[p])}function Le(i,e,t,n,s){i.vectorIndexes[e].node.add(s,t)}function Ae(i,e,t,n,s,o,r,a,c,l){if(U(r))return e.vectorIndexes[t].node.remove(s),!0;let{type:u,node:f}=e.indexes[t];switch(u){case"AVL":return f.removeDocument(o,s),!0;case"Bool":return f[o?"true":"false"].delete(s),!0;case"Radix":{let d=c.tokenize(o,a,t);i.removeDocumentScoreParameters(e,t,n,l);for(let h of d)i.removeTokenScoreParameters(e,t,h),f.removeDocumentByWord(h,s);return!0}case"Flat":return f.removeDocument(s,o),!0;case"BKD":return f.removeDocByID(o,s),!1}}function ze(i,e,t,n,s,o,r,a,c,l){if(!pe(r))return Ae(i,e,t,n,s,o,r,a,c,l);let u=Ne(r),f=o,d=f.length;for(let h=0;h<d;h++)Ae(i,e,t,n,s,f[h],u,a,c,l);return!0}function Ie(i,e,t,n,s,o,r,a,c,l){let u=Array.from(n),f=i.avgFieldLength[e],d=i.fieldLengths[e],h=i.tokenOccurrences[e],p=i.frequencies[e],g=typeof h[t]=="number"?h[t]??0:0,T=u.length;for(let b=0;b<T;b++){let y=u[b];if(c&&!c.has(y))continue;l.has(y)||l.set(y,new Map);let m=l.get(y);m.set(e,(m.get(e)||0)+1);let S=p?.[y]?.[t]??0,x=Oe(S,g,s,d[y],f,o);r.has(y)?r.set(y,r.get(y)+x*a):r.set(y,x*a)}}function Ce(i,e,t,n,s,o,r,a,c,l,u,f=0){let d=t.tokenize(e,n),h=d.length||1,p=new Map,g=new Map,T=new Map;for(let m of s){if(!(m in i.indexes))continue;let S=i.indexes[m],{type:x}=S;if(x!=="Radix")throw A("WRONG_SEARCH_PROPERTY_TYPE",m);let D=a[m]??1;if(D<=0)throw A("INVALID_BOOST_VALUE",D);d.length===0&&!e&&d.push("");let k=d.length;for(let N=0;N<k;N++){let w=d[N],O=S.node.find({term:w,exact:o,tolerance:r}),_=Object.keys(O);_.length>0&&g.set(w,!0);let J=_.length;for(let $=0;$<J;$++){let P=_[$],M=O[P];Ie(i,m,P,M,l,c,T,D,u,p)}}}let b=Array.from(T.entries()).map(([m,S])=>[m,S]).sort((m,S)=>S[1]-m[1]);if(b.length===0)return[];if(f===1)return b;if(f===0){if(h===1)return b;for(let S of d)if(!g.get(S))return[];return b.filter(([S])=>{let x=p.get(S);return x?Array.from(x.values()).some(D=>D===h):!1})}let y=b.filter(([m])=>{let S=p.get(m);return S?Array.from(S.values()).some(x=>x===h):!1});if(y.length>0){let m=b.filter(([x])=>!y.some(([D])=>D===x)),S=Math.ceil(m.length*f);return[...y,...m.slice(0,S)]}return b}function Z(i,e,t,n){if("and"in t&&t.and&&Array.isArray(t.and)){let r=t.and;if(r.length===0)return new Set;let a=r.map(c=>Z(i,e,c,n));return F(...a)}if("or"in t&&t.or&&Array.isArray(t.or)){let r=t.or;return r.length===0?new Set:r.map(c=>Z(i,e,c,n)).reduce((c,l)=>G(c,l),new Set)}if("not"in t&&t.not){let r=t.not,a=new Set,c=i.sharedInternalDocumentStore;for(let u=1;u<=c.internalIdToId.length;u++)a.add(u);let l=Z(i,e,r,n);return he(a,l)}let s=Object.keys(t),o=s.reduce((r,a)=>({[a]:new Set,...r}),{});for(let r of s){let a=t[r];if(typeof i.indexes[r]>"u")throw A("UNKNOWN_FILTER_PROPERTY",r);let{node:c,type:l,isArray:u}=i.indexes[r];if(l==="Bool"){let d=c,h=a?d.true:d.false;o[r]=G(o[r],h);continue}if(l==="BKD"){let d;if("radius"in a)d="radius";else if("polygon"in a)d="polygon";else throw new Error(`Invalid operation ${a}`);if(d==="radius"){let{value:h,coordinates:p,unit:g="m",inside:T=!0,highPrecision:b=!1}=a[d],y=re(h,g),m=c.searchByRadius(p,y,T,void 0,b);o[r]=ke(o[r],m)}else{let{coordinates:h,inside:p=!0,highPrecision:g=!1}=a[d],T=c.searchByPolygon(h,p,void 0,g);o[r]=ke(o[r],T)}continue}if(l==="Radix"&&(typeof a=="string"||Array.isArray(a))){for(let d of[a].flat()){let h=e.tokenize(d,n,r);for(let p of h){let g=c.find({term:p,exact:!0});o[r]=St(o[r],g)}}continue}let f=Object.keys(a);if(f.length>1)throw A("INVALID_FILTER_OPERATION",f.length);if(l==="Flat"){let d=new Set(u?c.filterArr(a):c.filter(a));o[r]=G(o[r],d);continue}if(l==="AVL"){let d=f[0],h=a[d],p;switch(d){case"gt":{p=c.greaterThan(h,!1);break}case"gte":{p=c.greaterThan(h,!0);break}case"lt":{p=c.lessThan(h,!1);break}case"lte":{p=c.lessThan(h,!0);break}case"eq":{p=c.find(h)??new Set;break}case"between":{let[g,T]=h;p=c.rangeSearch(g,T);break}default:throw A("INVALID_FILTER_OPERATION",d)}o[r]=G(o[r],p)}}return F(...Object.values(o))}function Be(i){return i.searchableProperties}function Fe(i){return i.searchablePropertiesWithTypes}function Ue(i,e){let{indexes:t,vectorIndexes:n,searchableProperties:s,searchablePropertiesWithTypes:o,frequencies:r,tokenOccurrences:a,avgFieldLength:c,fieldLengths:l}=e,u={},f={};for(let d of Object.keys(t)){let{node:h,type:p,isArray:g}=t[d];switch(p){case"Radix":u[d]={type:"Radix",node:Q.fromJSON(h),isArray:g};break;case"Flat":u[d]={type:"Flat",node:j.fromJSON(h),isArray:g};break;case"AVL":u[d]={type:"AVL",node:K.fromJSON(h),isArray:g};break;case"BKD":u[d]={type:"BKD",node:E.fromJSON(h),isArray:g};break;case"Bool":u[d]={type:"Bool",node:Y.fromJSON(h),isArray:g};break;default:u[d]=t[d]}}for(let d of Object.keys(n))f[d]={type:"Vector",isArray:!1,node:H.fromJSON(n[d])};return{sharedInternalDocumentStore:i,indexes:u,vectorIndexes:f,searchableProperties:s,searchablePropertiesWithTypes:o,frequencies:r,tokenOccurrences:a,avgFieldLength:c,fieldLengths:l}}function We(i){let{indexes:e,vectorIndexes:t,searchableProperties:n,searchablePropertiesWithTypes:s,frequencies:o,tokenOccurrences:r,avgFieldLength:a,fieldLengths:c}=i,l={};for(let f of Object.keys(t))l[f]=t[f].node.toJSON();let u={};for(let f of Object.keys(e)){let{type:d,node:h,isArray:p}=e[f];d==="Flat"||d==="Radix"||d==="AVL"||d==="BKD"||d==="Bool"?u[f]={type:d,node:h.toJSON(),isArray:p}:(u[f]=e[f],u[f].node=u[f].node.toJSON())}return{indexes:u,vectorIndexes:l,searchableProperties:n,searchablePropertiesWithTypes:s,frequencies:o,tokenOccurrences:r,avgFieldLength:a,fieldLengths:c}}function pt(){return{create:Se,insert:Me,remove:ze,insertDocumentScoreParameters:Re,insertTokenScoreParameters:Ee,removeDocumentScoreParameters:ve,removeTokenScoreParameters:_e,calculateResultScores:Ie,search:Ce,searchByWhereClause:Z,getSearchableProperties:Be,getSearchablePropertiesWithTypes:Fe,load:Ue,save:We}}function ke(i,e){i||(i=new Set);let t=e.length;for(let n=0;n<t;n++){let s=e[n].docIDs,o=s.length;for(let r=0;r<o;r++)i.add(s[r])}return i}function Pe(i,e,t=!1){let n=t?E.vincentyDistance:E.haversineDistance,s=[],o=[];for(let{point:c}of i)o.push(n(e,c));let r=Math.max(...o),a=0;for(let{docIDs:c}of i){let l=o[a],u=r-l+1;for(let f of c)s.push([f,u]);a++}return s.sort((c,l)=>l[1]-c[1]),s}function mt(i,e){let t=Object.keys(i);if(t.length!==1)return{isGeoOnly:!1};let n=t[0],s=i[n];if(typeof e.indexes[n]>"u")return{isGeoOnly:!1};let{type:o}=e.indexes[n];return o==="BKD"&&s&&("radius"in s||"polygon"in s)?{isGeoOnly:!0,geoProperty:n,geoOperation:s}:{isGeoOnly:!1}}function gt(i,e){let t=i,n=mt(e,t);if(!n.isGeoOnly||!n.geoProperty||!n.geoOperation)return null;let{node:s}=t.indexes[n.geoProperty],o=n.geoOperation,r=s,a;if("radius"in o){let{value:c,coordinates:l,unit:u="m",inside:f=!0,highPrecision:d=!1}=o.radius,h=l,p=re(c,u);return a=r.searchByRadius(h,p,f,"asc",d),Pe(a,h,d)}else if("polygon"in o){let{coordinates:c,inside:l=!0,highPrecision:u=!1}=o.polygon;a=r.searchByPolygon(c,l,"asc",u);let f=E.calculatePolygonCentroid(c);return Pe(a,f,u)}return null}function St(i,e){i||(i=new Set);let t=Object.keys(e),n=t.length;for(let s=0;s<n;s++){let o=e[t[s]],r=o.length;for(let a=0;a<r;a++)i.add(o[a])}return i}var It="[^aeiou]",Ve="[aeiouy]",C=It+"[^aeiouy]*",ee=Ve+"[aeiou]*",In="^("+C+")?"+ee+C,yn="^("+C+")?"+ee+C+"("+ee+")?$",bn="^("+C+")?"+ee+C+ee+C,Tn="^("+C+")?"+Ve;function ye(i,e,t){for(let n of Object.entries(e)){let s=n[0],o=n[1],r=`${t}${t?".":""}${s}`;if(typeof o=="object"&&!Array.isArray(o)){ye(i,o,r);continue}if(U(o))i.searchableProperties.push(r),i.searchablePropertiesWithTypes[r]=o,i.vectorIndexes[r]={type:"Vector",node:new ue.VectorIndex(oe(o)),isArray:!1};else{let a=/\[/.test(o);switch(o){case"boolean":case"boolean[]":i.indexes[r]={type:"Bool",node:new le.BoolNode,isArray:a};break;case"number":case"number[]":i.indexes[r]={type:"AVL",node:new se.AVLTree(0,[]),isArray:a};break;case"string":case"string[]":i.indexes[r]={type:"Radix",node:new V.RadixTree,isArray:a};break;case"enum":case"enum[]":i.indexes[r]={type:"Flat",node:new ie.FlatTree,isArray:a};break;case"geopoint":i.indexes[r]={type:"BKD",node:new ce.BKDTree,isArray:a};break;default:throw new Error("INVALID_SCHEMA_TYPE: "+r)}i.searchableProperties.push(r),i.searchablePropertiesWithTypes[r]=o}}}var Dt=1048575,fe={exact:1,fuzzy:.6};function Je(i){i?.exact!==void 0&&!Number.isNaN(i.exact)&&(fe.exact=i.exact),i?.fuzzy!==void 0&&!Number.isNaN(i.fuzzy)&&(fe.fuzzy=i.fuzzy)}function Nt(i,e){let t=Ke(i),s=Ge(i)|1<<e;return t+1<<20|s}function be(i,e,t,n,s,o,r){let a=i.split(/\.|\?|!/),c=0,l=0;for(let u of a){let f=r.tokenize(u,o,n);for(let d of f){l++,t[d]||(t[d]=0);let h=Math.min(c,20);t.tokenQuantums[s][d]=Nt(t.tokenQuantums[s][d],h),e.insert(d,s)}f.length>1&&c++}t.tokensLength.set(s,l)}function $e(i){let e=i.tokens,t=i.radixNode,n=i.exact,s=i.tolerance,o=i.stats,r=i.boostPerProp,a=i.resultMap,c=i.whereFiltersIDs,l=o.tokensLength,u=o.tokenQuantums,f=e.length>1,d={term:"",exact:n,tolerance:s},h=new Map,p={},g=e.length;for(let m=0;m<g;m++){let S=e[m];d.term=S;let x=t.find(d);for(let D of Object.keys(x))h.has(D)||h.set(D,{tokenIndex:m,isExact:D===S});p={...p,...x}}let T=new Map,b=Object.keys(p),y=b.length;for(let m=0;m<y;m++){let S=b[m],x=p[S],D=x.length,k=e.includes(S),N=h.get(S);for(let w=0;w<D;w++){let O=x[w];if(c&&!c.has(O))continue;let _=l.get(O),J=u[O][S],$=Ke(J),P=Ge(J),M=k?fe.exact:fe.fuzzy;if(f){T.has(O)||T.set(O,{matchedTokens:new Set,sumWeights:0});let R=T.get(O);if(N&&!R.matchedTokens.has(N.tokenIndex)&&(R.matchedTokens.add(N.tokenIndex),R.sumWeights+=M),!a.has(O))a.set(O,[0,P]);else{let B=a.get(O);B[1]=B[1]|P}}else{let R=$*M;if(!a.has(O)){a.set(O,[R,P]);continue}let B=a.get(O),je=B[0]+R;B[0]=je,B[1]=B[1]|P}}}if(f)for(let[m,S]of T){let D=S.matchedTokens.size/g*S.sumWeights,k=a.get(m);k&&(k[0]=D)}}function Ge(i){return i&Dt}function Ke(i){return i>>20}function Te(i,e,t,n,s,o,r){let a=r.tokensLength,c=r.tokenQuantums,l=s.tokenize(i,o,t);for(let u of l)e.removeDocumentByWord(u,n,!0);a.delete(n),delete c[n]}var Ot=new V.RadixNode("","",!1),wt={tokenQuantums:{},tokensLength:new Map};function At(i,e,t,n,s,o,r,a,c,l,u){let f=new Map,d={tokens:t.tokenize(e,n),radixNode:Ot,exact:o,tolerance:r,stats:wt,boostPerProp:0,all:f,resultMap:f,whereFiltersIDs:u},h=s.length;for(let b=0;b<h;b++){let y=s[b],m=i.stats[y],S=a[y]??1;d.radixNode=i.indexes[y].node,d.stats=m,d.boostPerProp=S,$e(d)}let p=Array.from(f),g=p.length,T=[];for(let b=0;b<g;b++){let y=p[b],m=y[0],S=y[1][0];T.push([m,S])}return T}function kt(i={}){i.weights&&Je(i.weights);let e=i.tolerance,t=i.multiWordThreshold,n=i.candidatePool,s=i.candidateCap,o=i.phraseMode;return{name:"qps",getComponents(r){return Pt(r,{tolerance:e,multiWordThreshold:t,candidatePool:n,candidateCap:s,phraseMode:o})}}}function Pt(i,e){return{index:{create:function(){let n={indexes:{},vectorIndexes:{},searchableProperties:[],searchablePropertiesWithTypes:{},stats:{}};return ye(n,i,""),n.config=e,n},insert:function(n,s,o,r,a,c,l,u,f,d){if(!(l==="string"||l==="string[]"))return v.insert(n,s,o,r,a,c,l,u,f,d);s.stats[o]||(s.stats[o]={tokenQuantums:{},tokensLength:new Map});let h=s.stats[o],p=s.indexes[o].node;if(h.tokenQuantums[a]={},Array.isArray(c))for(let g of c)be(g,p,h,o,a,u,f);else be(c,p,h,o,a,u,f)},remove:function(n,s,o,r,a,c,l,u,f,d){if(!(l==="string"||l==="string[]"))return v.remove(n,s,o,r,a,c,l,u,f,d);let h=s.stats[o],p=s.indexes[o].node;if(Array.isArray(c))for(let g of c)Te(g,p,o,a,f,u,h);else Te(c,p,o,a,f,u,h)},insertDocumentScoreParameters:()=>{throw new Error},insertTokenScoreParameters:()=>{throw new Error},removeDocumentScoreParameters:()=>{throw new Error},removeTokenScoreParameters:()=>{throw new Error},calculateResultScores:()=>{throw new Error},search:At,searchByWhereClause:function(n,s,o,r){let a=Object.entries(o).filter(([f])=>n.indexes[f].type==="Radix");if(a.length===0)return v.searchByWhereClause(n,s,o,r);let c;for(let[f,d]of a){let h=[];if(Array.isArray(d))for(let T of d){let b=s.tokenize(T,r)?.[0];h.push(b)}else h=s.tokenize(d,r);let p=n.indexes[f].node,g=new Set;for(let T of h){let y=p.find({term:T,exact:!0})[T];if(y)for(let m of y)g.add(m)}c?c=F(c,g):c=g}if(Object.entries(o).filter(([f])=>n.indexes[f].type!=="Radix").length===0)return c;let u=v.searchByWhereClause(n,s,o,r);return F(c,u)},getSearchableProperties:function(n){return n.searchableProperties},getSearchablePropertiesWithTypes:function(t){return t.searchablePropertiesWithTypes},load:function(n,s){let o=v.load(n,s[0]),r=s[1],a={...o.indexes,...Object.fromEntries(r.radixTrees.map(([c,l,u,f])=>[c,{node:V.RadixNode.fromJSON(f),isArray:l,type:u}]))};return{...o,indexes:a,stats:Object.fromEntries(r.stats.map(([c,{tokenQuantums:l,tokensLength:u}])=>[c,{tokenQuantums:l,tokensLength:new Map(u)}]))}},save:function(n){let s=n,o=Object.entries(s.indexes).filter(([,{type:l}])=>l!=="Radix"),r=v.save({...s,indexes:Object.fromEntries(o)}),c={radixTrees:Object.entries(s.indexes).filter(([,{type:l}])=>l==="Radix").map(([l,{node:u,isArray:f,type:d}])=>[l,f,d,u.toJSON()]),stats:Object.entries(n.stats).map(([l,{tokenQuantums:u,tokensLength:f}])=>[l,{tokenQuantums:u,tokensLength:Array.from(f.entries())}])};return[r,c]}}}}return Ze(Rt);})();
|
|
11
|
+
`,ANSWER_SESSION_LAST_MESSAGE_IS_NOT_ASSISTANT:"The last message in the session is not an assistant message. Cannot regenerate non-assistant messages.",PLUGIN_COMPONENT_CONFLICT:'The component "%s" is already defined. The plugin "%s" is trying to redefine it.'};function A(i,...e){let t=new Error(xe(et[i]??`Unsupported Orama Error code: ${i}`,...e));return t.code=i,"captureStackTrace"in Error.prototype&&Error.captureStackTrace(t),t}var rt={string:!1,number:!1,boolean:!1,enum:!1,geopoint:!1,"string[]":!0,"number[]":!0,"boolean[]":!0,"enum[]":!0},ot={"string[]":"string","number[]":"number","boolean[]":"boolean","enum[]":"enum"};function F(i){return typeof i=="string"&&/^vector\[\d+\]$/.test(i)}function he(i){return typeof i=="string"&&rt[i]}function De(i){return ot[i]}function ne(i){let e=Number(i.slice(7,-1));switch(!0){case isNaN(e):throw A("INVALID_VECTOR_VALUE",i);case e<=0:throw A("INVALID_VECTOR_SIZE",i);default:return e}}function U(i,e){if(typeof e=="string"){let t=i.idToInternalId.get(e);if(t)return t;let n=i.idToInternalId.size+1;return i.idToInternalId.set(e,n),i.internalIdToId.push(e),n}return e>i.internalIdToId.length?U(i,e.toString()):e}var E={};L(E,{calculateResultScores:()=>Ie,create:()=>ge,createIndex:()=>ut,getSearchableProperties:()=>Ce,getSearchablePropertiesWithTypes:()=>Be,insert:()=>_e,insertDocumentScoreParameters:()=>ke,insertTokenScoreParameters:()=>Re,insertVector:()=>Le,load:()=>Fe,remove:()=>Me,removeDocumentScoreParameters:()=>Ee,removeTokenScoreParameters:()=>ve,save:()=>Ue,search:()=>ze,searchByGeoWhereClause:()=>dt,searchByWhereClause:()=>q});var re={};L(re,{AVLNode:()=>M,AVLTree:()=>J});var M=class i{constructor(e,t){S(this,"k");S(this,"v");S(this,"l",null);S(this,"r",null);S(this,"h",1);this.k=e,this.v=new Set(t)}updateHeight(){this.h=Math.max(i.getHeight(this.l),i.getHeight(this.r))+1}static getHeight(e){return e?e.h:0}getBalanceFactor(){return i.getHeight(this.l)-i.getHeight(this.r)}rotateLeft(){let e=this.r;return this.r=e.l,e.l=this,this.updateHeight(),e.updateHeight(),e}rotateRight(){let e=this.l;return this.l=e.r,e.r=this,this.updateHeight(),e.updateHeight(),e}toJSON(){return{k:this.k,v:Array.from(this.v),l:this.l?this.l.toJSON():null,r:this.r?this.r.toJSON():null,h:this.h}}static fromJSON(e){let t=new i(e.k,e.v);return t.l=e.l?i.fromJSON(e.l):null,t.r=e.r?i.fromJSON(e.r):null,t.h=e.h,t}},J=class i{constructor(e,t){S(this,"root",null);S(this,"insertCount",0);e!==void 0&&t!==void 0&&(this.root=new M(e,t))}insert(e,t,n=1e3){this.root=this.insertNode(this.root,e,t,n)}insertMultiple(e,t,n=1e3){for(let s of t)this.insert(e,s,n)}rebalance(){this.root&&(this.root=this.rebalanceNode(this.root))}toJSON(){return{root:this.root?this.root.toJSON():null,insertCount:this.insertCount}}static fromJSON(e){let t=new i;return t.root=e.root?M.fromJSON(e.root):null,t.insertCount=e.insertCount||0,t}insertNode(e,t,n,s){if(e===null)return new M(t,[n]);let o=[],r=e,a=null;for(;r!==null;)if(o.push({parent:a,node:r}),t<r.k)if(r.l===null){r.l=new M(t,[n]),o.push({parent:r,node:r.l});break}else a=r,r=r.l;else if(t>r.k)if(r.r===null){r.r=new M(t,[n]),o.push({parent:r,node:r.r});break}else a=r,r=r.r;else return r.v.add(n),e;let c=!1;this.insertCount++%s===0&&(c=!0);for(let l=o.length-1;l>=0;l--){let{parent:u,node:f}=o[l];if(f.updateHeight(),c){let d=this.rebalanceNode(f);u?u.l===f?u.l=d:u.r===f&&(u.r=d):e=d}}return e}rebalanceNode(e){let t=e.getBalanceFactor();if(t>1){if(e.l&&e.l.getBalanceFactor()>=0)return e.rotateRight();if(e.l)return e.l=e.l.rotateLeft(),e.rotateRight()}if(t<-1){if(e.r&&e.r.getBalanceFactor()<=0)return e.rotateLeft();if(e.r)return e.r=e.r.rotateRight(),e.rotateLeft()}return e}find(e){let t=this.findNodeByKey(e);return t?t.v:null}contains(e){return this.find(e)!==null}getSize(){let e=0,t=[],n=this.root;for(;n||t.length>0;){for(;n;)t.push(n),n=n.l;n=t.pop(),e++,n=n.r}return e}isBalanced(){if(!this.root)return!0;let e=[this.root];for(;e.length>0;){let t=e.pop(),n=t.getBalanceFactor();if(Math.abs(n)>1)return!1;t.l&&e.push(t.l),t.r&&e.push(t.r)}return!0}remove(e){this.root=this.removeNode(this.root,e)}removeDocument(e,t){let n=this.findNodeByKey(e);n&&(n.v.size===1?this.root=this.removeNode(this.root,e):n.v=new Set([...n.v.values()].filter(s=>s!==t)))}findNodeByKey(e){let t=this.root;for(;t;)if(e<t.k)t=t.l;else if(e>t.k)t=t.r;else return t;return null}removeNode(e,t){if(e===null)return null;let n=[],s=e;for(;s!==null&&s.k!==t;)n.push(s),t<s.k?s=s.l:s=s.r;if(s===null)return e;if(s.l===null||s.r===null){let o=s.l?s.l:s.r;if(n.length===0)e=o;else{let r=n[n.length-1];r.l===s?r.l=o:r.r=o}}else{let o=s,r=s.r;for(;r.l!==null;)o=r,r=r.l;s.k=r.k,s.v=r.v,o.l===r?o.l=r.r:o.r=r.r,s=o}n.push(s);for(let o=n.length-1;o>=0;o--){let r=n[o];r.updateHeight();let a=this.rebalanceNode(r);if(o>0){let c=n[o-1];c.l===r?c.l=a:c.r===r&&(c.r=a)}else e=a}return e}rangeSearch(e,t){let n=new Set,s=[],o=this.root;for(;o||s.length>0;){for(;o;)s.push(o),o=o.l;if(o=s.pop(),o.k>=e&&o.k<=t)for(let r of o.v)n.add(r);if(o.k>t)break;o=o.r}return n}greaterThan(e,t=!1){let n=new Set,s=[],o=this.root;for(;o||s.length>0;){for(;o;)s.push(o),o=o.r;if(o=s.pop(),t&&o.k>=e||!t&&o.k>e)for(let r of o.v)n.add(r);else if(o.k<=e)break;o=o.l}return n}lessThan(e,t=!1){let n=new Set,s=[],o=this.root;for(;o||s.length>0;){for(;o;)s.push(o),o=o.l;if(o=s.pop(),t&&o.k<=e||!t&&o.k<e)for(let r of o.v)n.add(r);else if(o.k>e)break;o=o.r}return n}};var oe={};L(oe,{FlatTree:()=>$});var $=class i{constructor(){S(this,"numberToDocumentId");this.numberToDocumentId=new Map}insert(e,t){this.numberToDocumentId.has(e)?this.numberToDocumentId.get(e).add(t):this.numberToDocumentId.set(e,new Set([t]))}find(e){let t=this.numberToDocumentId.get(e);return t?Array.from(t):null}remove(e){this.numberToDocumentId.delete(e)}removeDocument(e,t){let n=this.numberToDocumentId.get(t);n&&(n.delete(e),n.size===0&&this.numberToDocumentId.delete(t))}contains(e){return this.numberToDocumentId.has(e)}getSize(){let e=0;for(let t of this.numberToDocumentId.values())e+=t.size;return e}filter(e){let t=Object.keys(e);if(t.length!==1)throw new Error("Invalid operation");let n=t[0];switch(n){case"eq":{let s=e[n],o=this.numberToDocumentId.get(s);return o?Array.from(o):[]}case"in":{let s=e[n],o=new Set;for(let r of s){let a=this.numberToDocumentId.get(r);if(a)for(let c of a)o.add(c)}return Array.from(o)}case"nin":{let s=new Set(e[n]),o=new Set;for(let[r,a]of this.numberToDocumentId.entries())if(!s.has(r))for(let c of a)o.add(c);return Array.from(o)}default:throw new Error("Invalid operation")}}filterArr(e){let t=Object.keys(e);if(t.length!==1)throw new Error("Invalid operation");let n=t[0];switch(n){case"containsAll":{let o=e[n].map(a=>this.numberToDocumentId.get(a)??new Set);if(o.length===0)return[];let r=o.reduce((a,c)=>new Set([...a].filter(l=>c.has(l))));return Array.from(r)}case"containsAny":{let o=e[n].map(a=>this.numberToDocumentId.get(a)??new Set);if(o.length===0)return[];let r=o.reduce((a,c)=>new Set([...a,...c]));return Array.from(r)}default:throw new Error("Invalid operation")}}static fromJSON(e){if(!e.numberToDocumentId)throw new Error("Invalid Flat Tree JSON");let t=new i;for(let[n,s]of e.numberToDocumentId)t.numberToDocumentId.set(n,new Set(s));return t}toJSON(){return{numberToDocumentId:Array.from(this.numberToDocumentId.entries()).map(([e,t])=>[e,Array.from(t)])}}};var W={};L(W,{RadixNode:()=>H,RadixTree:()=>G});var Y=!1;function at(i,e,t){if(t<0)return-1;if(i===e)return 0;let n=i.length,s=e.length;if(n===0)return s<=t?s:-1;if(s===0)return n<=t?n:-1;let o=Math.abs(n-s);if(Y){if(i.startsWith(e))return o<=t?o:-1;if(e.startsWith(i))return 0}if(o>t)return-1;let r=[];for(let a=0;a<=n;a++){r[a]=[a];for(let c=1;c<=s;c++)r[a][c]=a===0?c:0}for(let a=1;a<=n;a++){let c=1/0;for(let l=1;l<=s;l++)i[a-1]===e[l-1]?r[a][l]=r[a-1][l-1]:r[a][l]=Math.min(r[a-1][l]+1,r[a][l-1]+1,r[a-1][l-1]+1),c=Math.min(c,r[a][l]);if(c>t)return-1}return r[n][s]<=t?r[n][s]:-1}function pe(i,e,t){let n=at(i,e,t);return{distance:n,isBounded:n>=0}}var H=class i{constructor(e,t,n){S(this,"k");S(this,"s");S(this,"c",new Map);S(this,"d",new Set);S(this,"e");S(this,"w","");this.k=e,this.s=t,this.e=n}updateParent(e){this.w=e.w+this.s}addDocument(e){this.d.add(e)}removeDocument(e){return this.d.delete(e)}findAllWords(e,t,n,s){let o=[this];for(;o.length>0;){let r=o.pop();if(r.e){let{w:a,d:c}=r;if(n&&a!==t)continue;if(ee(e,a)!==null)if(s)if(Math.abs(t.length-a.length)<=s&&pe(t,a,s).isBounded)e[a]=[];else continue;else e[a]=[];if(ee(e,a)!=null&&c.size>0){let l=e[a];for(let u of c)l.includes(u)||l.push(u)}}r.c.size>0&&o.push(...r.c.values())}return e}insert(e,t){let n=this,s=0,o=e.length;for(;s<o;){let r=e[s],a=n.c.get(r);if(a){let c=a.s,l=c.length,u=0;for(;u<l&&s+u<o&&c[u]===e[s+u];)u++;if(u===l){if(n=a,s+=u,s===o){a.e||(a.e=!0),a.addDocument(t);return}continue}let f=c.slice(0,u),d=c.slice(u),h=e.slice(s+u),p=new i(f[0],f,!1);if(n.c.set(f[0],p),p.updateParent(n),a.s=d,a.k=d[0],p.c.set(d[0],a),a.updateParent(p),h){let g=new i(h[0],h,!0);g.addDocument(t),p.c.set(h[0],g),g.updateParent(p)}else p.e=!0,p.addDocument(t);return}else{let c=new i(r,e.slice(s),!0);c.addDocument(t),n.c.set(r,c),c.updateParent(n);return}}n.e||(n.e=!0),n.addDocument(t)}_findLevenshtein(e,t,n,s,o){let r=[{node:this,index:t,tolerance:n}];for(;r.length>0;){let{node:a,index:c,tolerance:l}=r.pop();if(Y&&a.w.startsWith(e)&&a.w!==e){console.log("[RADIX FIX] Prefix optimization triggered for:",a.w,"term:",e),a.findAllWords(o,e,!1,0);continue}if(Y&&a.w.startsWith(e)&&a.w===e&&console.log("[RADIX FIX] Exact match excluded from prefix optimization:",e),l<0)continue;if(a.e){let{w:f,d}=a;if(f&&(pe(e,f,s).isBounded&&(o[f]=[]),ee(o,f)!==void 0&&d.size>0)){let h=new Set(o[f]);for(let p of d)h.add(p);o[f]=Array.from(h)}}if(c>=e.length)continue;let u=e[c];if(a.c.has(u)){let f=a.c.get(u);r.push({node:f,index:c+1,tolerance:l})}r.push({node:a,index:c+1,tolerance:l-1});for(let[f,d]of a.c)r.push({node:d,index:c,tolerance:l-1}),f!==u&&r.push({node:d,index:c+1,tolerance:l-1})}}find(e){let{term:t,exact:n,tolerance:s}=e;if(s&&!n){let o={};return this._findLevenshtein(t,0,s,s,o),o}else{let o=this,r=0,a=t.length;for(;r<a;){let l=t[r],u=o.c.get(l);if(u){let f=u.s,d=f.length,h=0;for(;h<d&&r+h<a&&f[h]===t[r+h];)h++;if(h===d)o=u,r+=h;else if(r+h===a)if(h===a-r){if(n)return{};{let p={};return u.findAllWords(p,t,n,s),p}}else return{};else return{}}else return{}}let c={};return o.findAllWords(c,t,n,s),c}}contains(e){let t=this,n=0,s=e.length;for(;n<s;){let o=e[n],r=t.c.get(o);if(r){let a=r.s,c=a.length,l=0;for(;l<c&&n+l<s&&a[l]===e[n+l];)l++;if(l<c)return!1;n+=c,t=r}else return!1}return!0}removeWord(e){if(!e)return!1;let t=this,n=e.length,s=[];for(let o=0;o<n;o++){let r=e[o];if(t.c.has(r)){let a=t.c.get(r);s.push({parent:t,character:r}),o+=a.s.length-1,t=a}else return!1}for(t.d.clear(),t.e=!1;s.length>0&&t.c.size===0&&!t.e&&t.d.size===0;){let{parent:o,character:r}=s.pop();o.c.delete(r),t=o}return!0}removeDocumentByWord(e,t,n=!0){if(!e)return!0;let s=this,o=e.length;for(let r=0;r<o;r++){let a=e[r];if(s.c.has(a)){let c=s.c.get(a);r+=c.s.length-1,s=c,n&&s.w!==e||s.removeDocument(t)}else return!1}return!0}static getCommonPrefix(e,t){let n=Math.min(e.length,t.length),s=0;for(;s<n&&e.charCodeAt(s)===t.charCodeAt(s);)s++;return e.slice(0,s)}toJSON(){return{w:this.w,s:this.s,e:this.e,k:this.k,d:Array.from(this.d),c:Array.from(this.c?.entries())?.map(([e,t])=>[e,t.toJSON()])}}static fromJSON(e){let t=new i(e.k,e.s,e.e);return t.w=e.w,t.d=new Set(e.d),t.c=new Map(e?.c?.map(([n,s])=>[n,i.fromJSON(s)])||[]),t}},G=class i extends H{constructor(){super("","",!1)}static fromJSON(e){let t=new i;return t.w=e.w,t.s=e.s,t.e=e.e,t.k=e.k,t.d=new Set(e.d),t.c=new Map(e?.c?.map(([n,s])=>[n,H.fromJSON(s)])||[]),t}toJSON(){return super.toJSON()}};var ie={};L(ie,{BKDTree:()=>R});var se=class i{constructor(e,t){S(this,"point");S(this,"docIDs");S(this,"left");S(this,"right");S(this,"parent");this.point=e,this.docIDs=new Set(t),this.left=null,this.right=null,this.parent=null}toJSON(){return{point:this.point,docIDs:Array.from(this.docIDs),left:this.left?this.left.toJSON():null,right:this.right?this.right.toJSON():null}}static fromJSON(e,t=null){let n=new i(e.point,e.docIDs);return n.parent=t,e.left&&(n.left=i.fromJSON(e.left,n)),e.right&&(n.right=i.fromJSON(e.right,n)),n}},R=class i{constructor(){S(this,"root");S(this,"nodeMap");this.root=null,this.nodeMap=new Map}getPointKey(e){return`${e.lon},${e.lat}`}insert(e,t){let n=this.getPointKey(e),s=this.nodeMap.get(n);if(s){t.forEach(c=>s.docIDs.add(c));return}let o=new se(e,t);if(this.nodeMap.set(n,o),this.root==null){this.root=o;return}let r=this.root,a=0;for(;;){if(a%2===0)if(e.lon<r.point.lon){if(r.left==null){r.left=o,o.parent=r;return}r=r.left}else{if(r.right==null){r.right=o,o.parent=r;return}r=r.right}else if(e.lat<r.point.lat){if(r.left==null){r.left=o,o.parent=r;return}r=r.left}else{if(r.right==null){r.right=o,o.parent=r;return}r=r.right}a++}}contains(e){let t=this.getPointKey(e);return this.nodeMap.has(t)}getDocIDsByCoordinates(e){let t=this.getPointKey(e),n=this.nodeMap.get(t);return n?Array.from(n.docIDs):null}removeDocByID(e,t){let n=this.getPointKey(e),s=this.nodeMap.get(n);s&&(s.docIDs.delete(t),s.docIDs.size===0&&(this.nodeMap.delete(n),this.deleteNode(s)))}deleteNode(e){let t=e.parent,n=e.left?e.left:e.right;n&&(n.parent=t),t?t.left===e?t.left=n:t.right===e&&(t.right=n):(this.root=n,this.root&&(this.root.parent=null))}searchByRadius(e,t,n=!0,s="asc",o=!1){let r=o?i.vincentyDistance:i.haversineDistance,a=[{node:this.root,depth:0}],c=[];for(;a.length>0;){let{node:l,depth:u}=a.pop();if(l==null)continue;let f=r(e,l.point);(n?f<=t:f>t)&&c.push({point:l.point,docIDs:Array.from(l.docIDs)}),l.left!=null&&a.push({node:l.left,depth:u+1}),l.right!=null&&a.push({node:l.right,depth:u+1})}return s&&c.sort((l,u)=>{let f=r(e,l.point),d=r(e,u.point);return s.toLowerCase()==="asc"?f-d:d-f}),c}searchByPolygon(e,t=!0,n=null,s=!1){let o=[{node:this.root,depth:0}],r=[];for(;o.length>0;){let{node:c,depth:l}=o.pop();if(c==null)continue;c.left!=null&&o.push({node:c.left,depth:l+1}),c.right!=null&&o.push({node:c.right,depth:l+1});let u=i.isPointInPolygon(e,c.point);(u&&t||!u&&!t)&&r.push({point:c.point,docIDs:Array.from(c.docIDs)})}let a=i.calculatePolygonCentroid(e);if(n){let c=s?i.vincentyDistance:i.haversineDistance;r.sort((l,u)=>{let f=c(a,l.point),d=c(a,u.point);return n.toLowerCase()==="asc"?f-d:d-f})}return r}toJSON(){return{root:this.root?this.root.toJSON():null}}static fromJSON(e){let t=new i;return e.root&&(t.root=se.fromJSON(e.root),t.buildNodeMap(t.root)),t}buildNodeMap(e){if(e==null)return;let t=this.getPointKey(e.point);this.nodeMap.set(t,e),e.left&&this.buildNodeMap(e.left),e.right&&this.buildNodeMap(e.right)}static calculatePolygonCentroid(e){let t=0,n=0,s=0,o=e.length;for(let a=0,c=o-1;a<o;c=a++){let l=e[a].lon,u=e[a].lat,f=e[c].lon,d=e[c].lat,h=l*d-f*u;t+=h,n+=(l+f)*h,s+=(u+d)*h}t/=2;let r=6*t;return n/=r,s/=r,{lon:n,lat:s}}static isPointInPolygon(e,t){let n=!1,s=t.lon,o=t.lat,r=e.length;for(let a=0,c=r-1;a<r;c=a++){let l=e[a].lon,u=e[a].lat,f=e[c].lon,d=e[c].lat;u>o!=d>o&&s<(f-l)*(o-u)/(d-u)+l&&(n=!n)}return n}static haversineDistance(e,t){let n=Math.PI/180,s=e.lat*n,o=t.lat*n,r=(t.lat-e.lat)*n,a=(t.lon-e.lon)*n,c=Math.sin(r/2)*Math.sin(r/2)+Math.cos(s)*Math.cos(o)*Math.sin(a/2)*Math.sin(a/2);return 6371e3*(2*Math.atan2(Math.sqrt(c),Math.sqrt(1-c)))}static vincentyDistance(e,t){let s=.0033528106647474805,o=(1-s)*6378137,r=Math.PI/180,a=e.lat*r,c=t.lat*r,l=(t.lon-e.lon)*r,u=Math.atan((1-s)*Math.tan(a)),f=Math.atan((1-s)*Math.tan(c)),d=Math.sin(u),h=Math.cos(u),p=Math.sin(f),g=Math.cos(f),T=l,b,y=1e3,m,I,x,D,k,N;do{let P=Math.sin(T),_=Math.cos(T);if(m=Math.sqrt(g*P*(g*P)+(h*p-d*g*_)*(h*p-d*g*_)),m===0)return 0;I=d*p+h*g*_,x=Math.atan2(m,I),D=h*g*P/m,k=1-D*D,N=I-2*d*p/k,isNaN(N)&&(N=0);let ue=s/16*k*(4+s*(4-3*k));b=T,T=l+(1-ue)*s*D*(x+ue*m*(N+ue*I*(-1+2*N*N)))}while(Math.abs(T-b)>1e-12&&--y>0);if(y===0)return NaN;let w=k*(6378137*6378137-o*o)/(o*o),O=1+w/16384*(4096+w*(-768+w*(320-175*w))),v=w/1024*(256+w*(-128+w*(74-47*w))),Q=v*m*(N+v/4*(I*(-1+2*N*N)-v/6*N*(-3+4*m*m)*(-3+4*N*N)));return o*O*(x-Q)}};var ae={};L(ae,{BoolNode:()=>K});var K=class i{constructor(){S(this,"true");S(this,"false");this.true=new Set,this.false=new Set}insert(e,t){t?this.true.add(e):this.false.add(e)}delete(e,t){t?this.true.delete(e):this.false.delete(e)}getSize(){return this.true.size+this.false.size}toJSON(){return{true:Array.from(this.true),false:Array.from(this.false)}}static fromJSON(e){let t=new i;return t.true=new Set(e.true),t.false=new Set(e.false),t}};function Ne(i,e,t,n,s,{k:o,b:r,d:a}){return Math.log(1+(t-e+.5)/(e+.5))*(a+i*(o+1))/(i+o*(1-r+r*n/s))}var ce={};L(ce,{DEFAULT_SIMILARITY:()=>ct,VectorIndex:()=>j,findSimilarVectors:()=>Oe,getMagnitude:()=>me});var ct=.8,j=class i{constructor(e){S(this,"size");S(this,"vectors",new Map);this.size=e}add(e,t){t instanceof Float32Array||(t=new Float32Array(t));let n=me(t,this.size);this.vectors.set(e,[n,t])}remove(e){this.vectors.delete(e)}find(e,t,n){return e instanceof Float32Array||(e=new Float32Array(e)),Oe(e,n,this.vectors,this.size,t)}toJSON(){let e=[];for(let[t,[n,s]]of this.vectors)e.push([t,[n,Array.from(s)]]);return{size:this.size,vectors:e}}static fromJSON(e){let t=e,n=new i(t.size);for(let[s,[o,r]]of t.vectors)n.vectors.set(s,[o,new Float32Array(r)]);return n}};function me(i,e){let t=0;for(let n=0;n<e;n++)t+=i[n]*i[n];return Math.sqrt(t)}function Oe(i,e,t,n,s){let o=me(i,n),r=[],a=e||t.keys();for(let c of a){let l=t.get(c);if(!l)continue;let u=l[0],f=l[1],d=0;for(let p=0;p<n;p++)d+=i[p]*f[p];let h=d/(o*u);h>=s&&r.push([c,h])}return r}function ke(i,e,t,n,s){let o=U(i.sharedInternalDocumentStore,t);i.avgFieldLength[e]=((i.avgFieldLength[e]??0)*(s-1)+n.length)/s,i.fieldLengths[e][o]=n.length,i.frequencies[e][o]={}}function Re(i,e,t,n,s){let o=0;for(let c of n)c===s&&o++;let r=U(i.sharedInternalDocumentStore,t),a=o/n.length;i.frequencies[e][r][s]=a,s in i.tokenOccurrences[e]||(i.tokenOccurrences[e][s]=0),i.tokenOccurrences[e][s]=(i.tokenOccurrences[e][s]??0)+1}function Ee(i,e,t,n){let s=U(i.sharedInternalDocumentStore,t);n>1?i.avgFieldLength[e]=(i.avgFieldLength[e]*n-i.fieldLengths[e][s])/(n-1):i.avgFieldLength[e]=void 0,i.fieldLengths[e][s]=void 0,i.frequencies[e][s]=void 0}function ve(i,e,t){i.tokenOccurrences[e][t]--}function ge(i,e,t,n,s=""){n||(n={sharedInternalDocumentStore:e,indexes:{},vectorIndexes:{},searchableProperties:[],searchablePropertiesWithTypes:{},frequencies:{},tokenOccurrences:{},avgFieldLength:{},fieldLengths:{}});for(let[o,r]of Object.entries(t)){let a=`${s}${s?".":""}${o}`;if(typeof r=="object"&&!Array.isArray(r)){ge(i,e,r,n,a);continue}if(F(r))n.searchableProperties.push(a),n.searchablePropertiesWithTypes[a]=r,n.vectorIndexes[a]={type:"Vector",node:new j(ne(r)),isArray:!1};else{let c=/\[/.test(r);switch(r){case"boolean":case"boolean[]":n.indexes[a]={type:"Bool",node:new K,isArray:c};break;case"number":case"number[]":n.indexes[a]={type:"AVL",node:new J(0,[]),isArray:c};break;case"string":case"string[]":n.indexes[a]={type:"Radix",node:new G,isArray:c},n.avgFieldLength[a]=0,n.frequencies[a]={},n.tokenOccurrences[a]={},n.fieldLengths[a]={};break;case"enum":case"enum[]":n.indexes[a]={type:"Flat",node:new $,isArray:c};break;case"geopoint":n.indexes[a]={type:"BKD",node:new R,isArray:c};break;default:throw A("INVALID_SCHEMA_TYPE",Array.isArray(r)?"array":r,a)}n.searchableProperties.push(a),n.searchablePropertiesWithTypes[a]=r}}return n}function lt(i,e,t,n,s,o,r,a){return c=>{let{type:l,node:u}=e.indexes[t];switch(l){case"Bool":{u[c?"true":"false"].add(n);break}case"AVL":{let f=a?.avlRebalanceThreshold??1;u.insert(c,n,f);break}case"Radix":{let f=o.tokenize(c,s,t,!1);i.insertDocumentScoreParameters(e,t,n,f,r);for(let d of f)i.insertTokenScoreParameters(e,t,n,f,d),u.insert(d,n);break}case"Flat":{u.insert(c,n);break}case"BKD":{u.insert(c,[n]);break}}}}function _e(i,e,t,n,s,o,r,a,c,l,u){if(F(r))return Le(e,t,o,n,s);let f=lt(i,e,t,s,a,c,l,u);if(!he(r))return f(o);let d=o,h=d.length;for(let p=0;p<h;p++)f(d[p])}function Le(i,e,t,n,s){i.vectorIndexes[e].node.add(s,t)}function we(i,e,t,n,s,o,r,a,c,l){if(F(r))return e.vectorIndexes[t].node.remove(s),!0;let{type:u,node:f}=e.indexes[t];switch(u){case"AVL":return f.removeDocument(o,s),!0;case"Bool":return f[o?"true":"false"].delete(s),!0;case"Radix":{let d=c.tokenize(o,a,t);i.removeDocumentScoreParameters(e,t,n,l);for(let h of d)i.removeTokenScoreParameters(e,t,h),f.removeDocumentByWord(h,s);return!0}case"Flat":return f.removeDocument(s,o),!0;case"BKD":return f.removeDocByID(o,s),!1}}function Me(i,e,t,n,s,o,r,a,c,l){if(!he(r))return we(i,e,t,n,s,o,r,a,c,l);let u=De(r),f=o,d=f.length;for(let h=0;h<d;h++)we(i,e,t,n,s,f[h],u,a,c,l);return!0}function Ie(i,e,t,n,s,o,r,a,c,l){let u=Array.from(n),f=i.avgFieldLength[e],d=i.fieldLengths[e],h=i.tokenOccurrences[e],p=i.frequencies[e],g=typeof h[t]=="number"?h[t]??0:0,T=u.length;for(let b=0;b<T;b++){let y=u[b];if(c&&!c.has(y))continue;l.has(y)||l.set(y,new Map);let m=l.get(y);m.set(e,(m.get(e)||0)+1);let I=p?.[y]?.[t]??0,x=Ne(I,g,s,d[y],f,o);r.has(y)?r.set(y,r.get(y)+x*a):r.set(y,x*a)}}function ze(i,e,t,n,s,o,r,a,c,l,u,f=0){let d=t.tokenize(e,n),h=d.length||1,p=new Map,g=new Map,T=new Map;for(let m of s){if(!(m in i.indexes))continue;let I=i.indexes[m],{type:x}=I;if(x!=="Radix")throw A("WRONG_SEARCH_PROPERTY_TYPE",m);let D=a[m]??1;if(D<=0)throw A("INVALID_BOOST_VALUE",D);d.length===0&&!e&&d.push("");let k=d.length;for(let N=0;N<k;N++){let w=d[N],O=I.node.find({term:w,exact:o,tolerance:r}),v=Object.keys(O);v.length>0&&g.set(w,!0);let Q=v.length;for(let C=0;C<Q;C++){let P=v[C],_=O[P];Ie(i,m,P,_,l,c,T,D,u,p)}}}let b=Array.from(T.entries()).map(([m,I])=>[m,I]).sort((m,I)=>I[1]-m[1]);if(b.length===0)return[];if(f===1)return b;if(f===0){if(h===1)return b;for(let I of d)if(!g.get(I))return[];return b.filter(([I])=>{let x=p.get(I);return x?Array.from(x.values()).some(D=>D===h):!1})}let y=b.filter(([m])=>{let I=p.get(m);return I?Array.from(I.values()).some(x=>x===h):!1});if(y.length>0){let m=b.filter(([x])=>!y.some(([D])=>D===x)),I=Math.ceil(m.length*f);return[...y,...m.slice(0,I)]}return b}function q(i,e,t,n){if("and"in t&&t.and&&Array.isArray(t.and)){let r=t.and;if(r.length===0)return new Set;let a=r.map(c=>q(i,e,c,n));return B(...a)}if("or"in t&&t.or&&Array.isArray(t.or)){let r=t.or;return r.length===0?new Set:r.map(c=>q(i,e,c,n)).reduce((c,l)=>V(c,l),new Set)}if("not"in t&&t.not){let r=t.not,a=new Set,c=i.sharedInternalDocumentStore;for(let u=1;u<=c.internalIdToId.length;u++)a.add(u);let l=q(i,e,r,n);return de(a,l)}let s=Object.keys(t),o=s.reduce((r,a)=>({[a]:new Set,...r}),{});for(let r of s){let a=t[r];if(typeof i.indexes[r]>"u")throw A("UNKNOWN_FILTER_PROPERTY",r);let{node:c,type:l,isArray:u}=i.indexes[r];if(l==="Bool"){let d=c,h=a?d.true:d.false;o[r]=V(o[r],h);continue}if(l==="BKD"){let d;if("radius"in a)d="radius";else if("polygon"in a)d="polygon";else throw new Error(`Invalid operation ${a}`);if(d==="radius"){let{value:h,coordinates:p,unit:g="m",inside:T=!0,highPrecision:b=!1}=a[d],y=te(h,g),m=c.searchByRadius(p,y,T,void 0,b);o[r]=Ae(o[r],m)}else{let{coordinates:h,inside:p=!0,highPrecision:g=!1}=a[d],T=c.searchByPolygon(h,p,void 0,g);o[r]=Ae(o[r],T)}continue}if(l==="Radix"&&(typeof a=="string"||Array.isArray(a))){for(let d of[a].flat()){let h=e.tokenize(d,n,r);for(let p of h){let g=c.find({term:p,exact:!0});o[r]=ht(o[r],g)}}continue}let f=Object.keys(a);if(f.length>1)throw A("INVALID_FILTER_OPERATION",f.length);if(l==="Flat"){let d=new Set(u?c.filterArr(a):c.filter(a));o[r]=V(o[r],d);continue}if(l==="AVL"){let d=f[0],h=a[d],p;switch(d){case"gt":{p=c.greaterThan(h,!1);break}case"gte":{p=c.greaterThan(h,!0);break}case"lt":{p=c.lessThan(h,!1);break}case"lte":{p=c.lessThan(h,!0);break}case"eq":{p=c.find(h)??new Set;break}case"between":{let[g,T]=h;p=c.rangeSearch(g,T);break}default:throw A("INVALID_FILTER_OPERATION",d)}o[r]=V(o[r],p)}}return B(...Object.values(o))}function Ce(i){return i.searchableProperties}function Be(i){return i.searchablePropertiesWithTypes}function Fe(i,e){let{indexes:t,vectorIndexes:n,searchableProperties:s,searchablePropertiesWithTypes:o,frequencies:r,tokenOccurrences:a,avgFieldLength:c,fieldLengths:l}=e,u={},f={};for(let d of Object.keys(t)){let{node:h,type:p,isArray:g}=t[d];switch(p){case"Radix":u[d]={type:"Radix",node:G.fromJSON(h),isArray:g};break;case"Flat":u[d]={type:"Flat",node:$.fromJSON(h),isArray:g};break;case"AVL":u[d]={type:"AVL",node:J.fromJSON(h),isArray:g};break;case"BKD":u[d]={type:"BKD",node:R.fromJSON(h),isArray:g};break;case"Bool":u[d]={type:"Bool",node:K.fromJSON(h),isArray:g};break;default:u[d]=t[d]}}for(let d of Object.keys(n))f[d]={type:"Vector",isArray:!1,node:j.fromJSON(n[d])};return{sharedInternalDocumentStore:i,indexes:u,vectorIndexes:f,searchableProperties:s,searchablePropertiesWithTypes:o,frequencies:r,tokenOccurrences:a,avgFieldLength:c,fieldLengths:l}}function Ue(i){let{indexes:e,vectorIndexes:t,searchableProperties:n,searchablePropertiesWithTypes:s,frequencies:o,tokenOccurrences:r,avgFieldLength:a,fieldLengths:c}=i,l={};for(let f of Object.keys(t))l[f]=t[f].node.toJSON();let u={};for(let f of Object.keys(e)){let{type:d,node:h,isArray:p}=e[f];d==="Flat"||d==="Radix"||d==="AVL"||d==="BKD"||d==="Bool"?u[f]={type:d,node:h.toJSON(),isArray:p}:(u[f]=e[f],u[f].node=u[f].node.toJSON())}return{indexes:u,vectorIndexes:l,searchableProperties:n,searchablePropertiesWithTypes:s,frequencies:o,tokenOccurrences:r,avgFieldLength:a,fieldLengths:c}}function ut(){return{create:ge,insert:_e,remove:Me,insertDocumentScoreParameters:ke,insertTokenScoreParameters:Re,removeDocumentScoreParameters:Ee,removeTokenScoreParameters:ve,calculateResultScores:Ie,search:ze,searchByWhereClause:q,getSearchableProperties:Ce,getSearchablePropertiesWithTypes:Be,load:Fe,save:Ue}}function Ae(i,e){i||(i=new Set);let t=e.length;for(let n=0;n<t;n++){let s=e[n].docIDs,o=s.length;for(let r=0;r<o;r++)i.add(s[r])}return i}function Pe(i,e,t=!1){let n=t?R.vincentyDistance:R.haversineDistance,s=[],o=[];for(let{point:c}of i)o.push(n(e,c));let r=Math.max(...o),a=0;for(let{docIDs:c}of i){let l=o[a],u=r-l+1;for(let f of c)s.push([f,u]);a++}return s.sort((c,l)=>l[1]-c[1]),s}function ft(i,e){let t=Object.keys(i);if(t.length!==1)return{isGeoOnly:!1};let n=t[0],s=i[n];if(typeof e.indexes[n]>"u")return{isGeoOnly:!1};let{type:o}=e.indexes[n];return o==="BKD"&&s&&("radius"in s||"polygon"in s)?{isGeoOnly:!0,geoProperty:n,geoOperation:s}:{isGeoOnly:!1}}function dt(i,e){let t=i,n=ft(e,t);if(!n.isGeoOnly||!n.geoProperty||!n.geoOperation)return null;let{node:s}=t.indexes[n.geoProperty],o=n.geoOperation,r=s,a;if("radius"in o){let{value:c,coordinates:l,unit:u="m",inside:f=!0,highPrecision:d=!1}=o.radius,h=l,p=te(c,u);return a=r.searchByRadius(h,p,f,"asc",d),Pe(a,h,d)}else if("polygon"in o){let{coordinates:c,inside:l=!0,highPrecision:u=!1}=o.polygon;a=r.searchByPolygon(c,l,"asc",u);let f=R.calculatePolygonCentroid(c);return Pe(a,f,u)}return null}function ht(i,e){i||(i=new Set);let t=Object.keys(e),n=t.length;for(let s=0;s<n;s++){let o=e[t[s]],r=o.length;for(let a=0;a<r;a++)i.add(o[a])}return i}var pt="[^aeiou]",We="[aeiouy]",z=pt+"[^aeiouy]*",X=We+"[aeiou]*",hn="^("+z+")?"+X+z,pn="^("+z+")?"+X+z+"("+X+")?$",mn="^("+z+")?"+X+z+X+z,gn="^("+z+")?"+We;function Se(i,e,t){for(let n of Object.entries(e)){let s=n[0],o=n[1],r=`${t}${t?".":""}${s}`;if(typeof o=="object"&&!Array.isArray(o)){Se(i,o,r);continue}if(F(o))i.searchableProperties.push(r),i.searchablePropertiesWithTypes[r]=o,i.vectorIndexes[r]={type:"Vector",node:new ce.VectorIndex(ne(o)),isArray:!1};else{let a=/\[/.test(o);switch(o){case"boolean":case"boolean[]":i.indexes[r]={type:"Bool",node:new ae.BoolNode,isArray:a};break;case"number":case"number[]":i.indexes[r]={type:"AVL",node:new re.AVLTree(0,[]),isArray:a};break;case"string":case"string[]":i.indexes[r]={type:"Radix",node:new W.RadixTree,isArray:a};break;case"enum":case"enum[]":i.indexes[r]={type:"Flat",node:new oe.FlatTree,isArray:a};break;case"geopoint":i.indexes[r]={type:"BKD",node:new ie.BKDTree,isArray:a};break;default:throw new Error("INVALID_SCHEMA_TYPE: "+r)}i.searchableProperties.push(r),i.searchablePropertiesWithTypes[r]=o}}}var le={exact:1,fuzzy:.6};function Ve(i){i?.exact!==void 0&&!Number.isNaN(i.exact)&&(le.exact=i.exact),i?.fuzzy!==void 0&&!Number.isNaN(i.fuzzy)&&(le.fuzzy=i.fuzzy)}function yt(i,e){return(i||0)+1}function ye(i,e,t,n,s,o,r){let a=i.split(/\.|\?|!/),c=0,l=0;for(let u of a){let f=r.tokenize(u,o,n);for(let d of f){l++,t[d]||(t[d]=0);let h=Math.min(c,20);t.tokenQuantums[s][d]=yt(t.tokenQuantums[s][d],h),e.insert(d,s)}f.length>1&&c++}t.tokensLength.set(s,l)}function Je(i){let e=i.tokens,t=i.radixNode,n=i.exact,s=i.tolerance,o=i.stats,r=i.boostPerProp,a=i.resultMap,c=i.whereFiltersIDs,l=o.tokensLength,u=o.tokenQuantums,f=e.length>1,d={term:"",exact:n,tolerance:s},h=new Map,p={},g=e.length;for(let m=0;m<g;m++){let I=e[m];d.term=I;let x=t.find(d);for(let D of Object.keys(x))h.has(D)||h.set(D,{tokenIndex:m,isExact:D===I});p={...p,...x}}let T=new Map,b=Object.keys(p),y=b.length;for(let m=0;m<y;m++){let I=b[m],x=p[I],D=x.length,k=e.includes(I),N=h.get(I);for(let w=0;w<D;w++){let O=x[w];if(c&&!c.has(O))continue;let v=l.get(O),Q=u[O][I]||0,C=k?le.exact:le.fuzzy;if(f){T.has(O)||T.set(O,{matchedTokens:new Set,sumWeights:0});let P=T.get(O);N&&!P.matchedTokens.has(N.tokenIndex)&&(P.matchedTokens.add(N.tokenIndex),P.sumWeights+=C),a.has(O)||a.set(O,[0,0])}else{let P=Q*C;if(!a.has(O)){a.set(O,[P,0]);continue}let _=a.get(O);_[0]=_[0]+P}}}if(f)for(let[m,I]of T){let D=I.matchedTokens.size/g*I.sumWeights,k=a.get(m);k&&(k[0]=D)}}function be(i,e,t,n,s,o,r){let a=r.tokensLength,c=r.tokenQuantums,l=s.tokenize(i,o,t);for(let u of l)e.removeDocumentByWord(u,n,!0);a.delete(n),delete c[n]}var bt=new W.RadixNode("","",!1),Tt={tokenQuantums:{},tokensLength:new Map};function xt(i,e,t,n,s,o,r,a,c,l,u){let f=new Map,d={tokens:t.tokenize(e,n),radixNode:bt,exact:o,tolerance:r,stats:Tt,boostPerProp:0,all:f,resultMap:f,whereFiltersIDs:u},h=s.length;for(let b=0;b<h;b++){let y=s[b],m=i.stats[y],I=a[y]??1;d.radixNode=i.indexes[y].node,d.stats=m,d.boostPerProp=I,Je(d)}let p=Array.from(f),g=p.length,T=[];for(let b=0;b<g;b++){let y=p[b],m=y[0],I=y[1][0];T.push([m,I])}return T}function Dt(i={}){i.weights&&Ve(i.weights);let e=i.tolerance,t=i.multiWordThreshold,n=i.candidatePool,s=i.candidateCap,o=i.phraseMode;return{name:"qps",getComponents(r){return Nt(r,{tolerance:e,multiWordThreshold:t,candidatePool:n,candidateCap:s,phraseMode:o})}}}function Nt(i,e){return{index:{create:function(){let n={indexes:{},vectorIndexes:{},searchableProperties:[],searchablePropertiesWithTypes:{},stats:{}};return Se(n,i,""),n.config=e,n},insert:function(n,s,o,r,a,c,l,u,f,d){if(!(l==="string"||l==="string[]"))return E.insert(n,s,o,r,a,c,l,u,f,d);s.stats[o]||(s.stats[o]={tokenQuantums:{},tokensLength:new Map});let h=s.stats[o],p=s.indexes[o].node;if(h.tokenQuantums[a]={},Array.isArray(c))for(let g of c)ye(g,p,h,o,a,u,f);else ye(c,p,h,o,a,u,f)},remove:function(n,s,o,r,a,c,l,u,f,d){if(!(l==="string"||l==="string[]"))return E.remove(n,s,o,r,a,c,l,u,f,d);let h=s.stats[o],p=s.indexes[o].node;if(Array.isArray(c))for(let g of c)be(g,p,o,a,f,u,h);else be(c,p,o,a,f,u,h)},insertDocumentScoreParameters:()=>{throw new Error},insertTokenScoreParameters:()=>{throw new Error},removeDocumentScoreParameters:()=>{throw new Error},removeTokenScoreParameters:()=>{throw new Error},calculateResultScores:()=>{throw new Error},search:xt,searchByWhereClause:function(n,s,o,r){let a=Object.entries(o).filter(([f])=>n.indexes[f].type==="Radix");if(a.length===0)return E.searchByWhereClause(n,s,o,r);let c;for(let[f,d]of a){let h=[];if(Array.isArray(d))for(let T of d){let b=s.tokenize(T,r)?.[0];h.push(b)}else h=s.tokenize(d,r);let p=n.indexes[f].node,g=new Set;for(let T of h){let y=p.find({term:T,exact:!0})[T];if(y)for(let m of y)g.add(m)}c?c=B(c,g):c=g}if(Object.entries(o).filter(([f])=>n.indexes[f].type!=="Radix").length===0)return c;let u=E.searchByWhereClause(n,s,o,r);return B(c,u)},getSearchableProperties:function(n){return n.searchableProperties},getSearchablePropertiesWithTypes:function(t){return t.searchablePropertiesWithTypes},load:function(n,s){let o=E.load(n,s[0]),r=s[1],a={...o.indexes,...Object.fromEntries(r.radixTrees.map(([c,l,u,f])=>[c,{node:W.RadixNode.fromJSON(f),isArray:l,type:u}]))};return{...o,indexes:a,stats:Object.fromEntries(r.stats.map(([c,{tokenQuantums:l,tokensLength:u}])=>[c,{tokenQuantums:l,tokensLength:new Map(u)}]))}},save:function(n){let s=n,o=Object.entries(s.indexes).filter(([,{type:l}])=>l!=="Radix"),r=E.save({...s,indexes:Object.fromEntries(o)}),c={radixTrees:Object.entries(s.indexes).filter(([,{type:l}])=>l==="Radix").map(([l,{node:u,isArray:f,type:d}])=>[l,f,d,u.toJSON()]),stats:Object.entries(n.stats).map(([l,{tokenQuantums:u,tokensLength:f}])=>[l,{tokenQuantums:u,tokensLength:Array.from(f.entries())}])};return[r,c]}}}}return Ye(Ot);})();
|
|
12
12
|
//# sourceMappingURL=index.global.js.map
|
package/dist/index.global.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/components/tokenizer/languages.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/utils.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/errors.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/components/defaults.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/components/internal-document-id-store.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/components/index.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/trees/avl.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/trees/flat.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/trees/radix.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/components/levenshtein.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/trees/bkd.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/trees/bool.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/components/algorithms.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/trees/vector.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/components/tokenizer/english-stemmer.ts","../src/algorithm.ts"],"sourcesContent":["import type {\n AnyOrama,\n SearchableType,\n IIndex,\n SearchableValue,\n Tokenizer,\n OnlyStrings,\n FlattenSchemaProperty,\n TokenScore,\n WhereCondition,\n OramaPluginSync,\n AnySchema,\n ObjectComponents,\n BM25Params\n} from '@wcs-colab/orama'\nimport { index as Index, internalDocumentIDStore } from '@wcs-colab/orama/components'\nimport { insertString, QPSIndex as QPSIndexStorage, recursiveCreate, removeString, searchString, setQpsWeights } from './algorithm.js'\nimport { radix } from '@wcs-colab/orama/trees'\nimport { setIntersection } from '@wcs-colab/orama/internals'\n\ntype InternalDocumentID = internalDocumentIDStore.InternalDocumentID\ntype InternalDocumentIDStore = internalDocumentIDStore.InternalDocumentIDStore\ntype DocumentID = internalDocumentIDStore.DocumentID\n\nconst unusedRadix = new radix.RadixNode('', '', false)\nconst unusedStats = {\n tokenQuantums: {},\n tokensLength: new Map()\n}\n\nfunction search<T extends AnyOrama>(\n index: QPSIndexStorage,\n term: string,\n tokenizer: Tokenizer,\n language: string | undefined,\n propertiesToSearch: string[],\n exact: boolean,\n tolerance: number,\n boost: Partial<Record<OnlyStrings<FlattenSchemaProperty<T>[]>, number>>,\n relevance: Required<BM25Params>,\n docsCount: number,\n whereFiltersIDs: Set<InternalDocumentID> | undefined\n): TokenScore[] {\n const all: Map<InternalDocumentID, [number, number]> = new Map()\n\n const args = {\n tokens: tokenizer.tokenize(term, language),\n radixNode: unusedRadix,\n exact,\n tolerance,\n stats: unusedStats,\n boostPerProp: 0,\n all,\n resultMap: all,\n whereFiltersIDs\n }\n\n const propertiesToSearchLength = propertiesToSearch.length\n for (let i = 0; i < propertiesToSearchLength; i++) {\n const prop = propertiesToSearch[i]\n const stats = index.stats[prop]\n const boostPerProp = boost[prop] ?? 1\n args.radixNode = index.indexes[prop].node as radix.RadixNode\n args.stats = stats\n args.boostPerProp = boostPerProp\n searchString(args)\n }\n\n const g: [number, [number, number]][] = Array.from(all)\n const gLength = g.length\n const res: TokenScore[] = []\n for (let i = 0; i < gLength; i++) {\n const element = g[i]\n const id = element[0]\n const score = element[1][0]\n\n res.push([id, score])\n }\n\n return res\n}\n\nexport interface QPSConfig {\n weights?: {\n exact?: number\n fuzzy?: number\n }\n /** Explicit tolerance to apply when callers omit it. */\n tolerance?: number\n /** Threshold for non-phrase multi-word searches (AND=0, OR=1) */\n multiWordThreshold?: 0 | 1\n /** Maximum QPS hits to fetch before capping for phrase handoff */\n candidatePool?: number\n /** How many of the pooled hits to forward to FuzzyPhrase */\n candidateCap?: number\n /** Whether phrase mode (QPS→FuzzyPhrase) is active */\n phraseMode?: boolean\n}\n\nexport function pluginQPS(config: QPSConfig = {}): OramaPluginSync<unknown> {\n if (config.weights) {\n setQpsWeights(config.weights)\n }\n const defaultTolerance = config.tolerance\n const defaultMultiWordThreshold = config.multiWordThreshold\n const defaultCandidatePool = config.candidatePool\n const defaultCandidateCap = config.candidateCap\n const defaultPhraseMode = config.phraseMode\n return {\n name: 'qps',\n getComponents(schema: AnySchema) {\n return qpsComponents(schema, {\n tolerance: defaultTolerance,\n multiWordThreshold: defaultMultiWordThreshold,\n candidatePool: defaultCandidatePool,\n candidateCap: defaultCandidateCap,\n phraseMode: defaultPhraseMode\n })\n }\n }\n}\n\nfunction qpsComponents(\n schema: AnySchema,\n defaults: {\n tolerance?: number\n multiWordThreshold?: 0 | 1\n candidatePool?: number\n candidateCap?: number\n phraseMode?: boolean\n }\n): Partial<ObjectComponents<any, any, any, any>> {\n return {\n index: {\n create: function create() {\n const indexDatastore: QPSIndexStorage = {\n indexes: {},\n vectorIndexes: {},\n searchableProperties: [],\n searchablePropertiesWithTypes: {},\n stats: {}\n }\n\n recursiveCreate(indexDatastore, schema, '')\n\n // Expose defaults on the datastore for consumers\n ;(indexDatastore as any).config = defaults\n\n return indexDatastore\n },\n insert: function insert(\n implementation: IIndex<QPSIndexStorage>,\n indexDatastorage: QPSIndexStorage,\n prop: string,\n id: DocumentID,\n internalId: InternalDocumentID,\n value: SearchableValue,\n schemaType: SearchableType,\n language: string | undefined,\n tokenizer: Tokenizer,\n docsCount: number\n ) {\n if (!(schemaType === 'string' || schemaType === 'string[]')) {\n return Index.insert(\n implementation as unknown as IIndex<Index.Index>,\n indexDatastorage as unknown as Index.Index,\n prop,\n id,\n internalId,\n value,\n schemaType,\n language,\n tokenizer,\n docsCount\n )\n }\n\n if (!indexDatastorage.stats[prop]) {\n indexDatastorage.stats[prop] = {\n tokenQuantums: {},\n tokensLength: new Map()\n }\n }\n\n const stats = indexDatastorage.stats[prop]\n const radixTree = indexDatastorage.indexes[prop].node as radix.RadixNode\n\n stats.tokenQuantums[internalId] = {}\n\n if (Array.isArray(value)) {\n for (const item of value) {\n insertString(item as string, radixTree, stats, prop, internalId, language, tokenizer)\n }\n } else {\n insertString(value as string, radixTree, stats, prop, internalId, language, tokenizer)\n }\n },\n remove: function remove(\n implementation: IIndex<QPSIndexStorage>,\n indexDatastorage: QPSIndexStorage,\n prop: string,\n id: DocumentID,\n internalId: InternalDocumentID,\n value: SearchableValue,\n schemaType: SearchableType,\n language: string | undefined,\n tokenizer: Tokenizer,\n docsCount: number\n ) {\n if (!(schemaType === 'string' || schemaType === 'string[]')) {\n return Index.remove(\n implementation as unknown as IIndex<Index.Index>,\n indexDatastorage as unknown as Index.Index,\n prop,\n id,\n internalId,\n value,\n schemaType,\n language,\n tokenizer,\n docsCount\n )\n }\n\n const stats = indexDatastorage.stats[prop]\n const radixTree = indexDatastorage.indexes[prop].node as radix.RadixNode\n\n if (Array.isArray(value)) {\n for (const item of value) {\n removeString(item as string, radixTree, prop, internalId, tokenizer, language, stats)\n }\n } else {\n removeString(value as string, radixTree, prop, internalId, tokenizer, language, stats)\n }\n },\n insertDocumentScoreParameters: () => {\n throw new Error()\n },\n insertTokenScoreParameters: () => {\n throw new Error()\n },\n removeDocumentScoreParameters: () => {\n throw new Error()\n },\n removeTokenScoreParameters: () => {\n throw new Error()\n },\n calculateResultScores: () => {\n throw new Error()\n },\n search,\n searchByWhereClause: function searchByWhereClause<T extends AnyOrama>(\n index: QPSIndexStorage,\n tokenizer: Tokenizer,\n filters: Partial<WhereCondition<T['schema']>>,\n language: string | undefined\n ) {\n const stringFiltersList = Object.entries(filters).filter(\n ([propName]) => index.indexes[propName].type === 'Radix'\n )\n\n // If there are no string filters, we can use the regular search\n if (stringFiltersList.length === 0) {\n return Index.searchByWhereClause(index as unknown as Index.Index, tokenizer, filters, language)\n }\n\n let idsFromStringFilters: Set<InternalDocumentID> | undefined\n for (const [propName, filter] of stringFiltersList) {\n let tokens: string[] = []\n\n if (Array.isArray(filter)) {\n for (const item of filter) {\n const token = tokenizer.tokenize(item as string, language)?.[0]\n tokens.push(token)\n }\n } else {\n tokens = tokenizer.tokenize(filter as string, language)\n }\n\n const radixTree = index.indexes[propName].node as radix.RadixNode\n const propIds = new Set<InternalDocumentID>()\n for (const token of tokens) {\n const ret = radixTree.find({\n term: token,\n exact: true\n })\n\n const ids = ret[token]\n\n if (ids) {\n for (const id of ids) {\n propIds.add(id)\n }\n }\n }\n\n if (idsFromStringFilters) {\n idsFromStringFilters = setIntersection(idsFromStringFilters, propIds)\n } else {\n idsFromStringFilters = propIds\n }\n }\n\n // Split the filters into string and non-string filters\n const nonStringFiltersList = Object.entries(filters).filter(\n ([propName]) => index.indexes[propName].type !== 'Radix'\n )\n if (nonStringFiltersList.length === 0) {\n return idsFromStringFilters\n }\n\n const idsFromNonStringFilters = Index.searchByWhereClause(\n index as unknown as Index.Index,\n tokenizer,\n filters,\n language\n )\n\n return setIntersection(idsFromStringFilters!, idsFromNonStringFilters)\n },\n getSearchableProperties: function getSearchableProperties(index: QPSIndexStorage): string[] {\n return index.searchableProperties\n },\n getSearchablePropertiesWithTypes: function (index: QPSIndexStorage) {\n return index.searchablePropertiesWithTypes\n },\n load: function load<R = unknown>(sharedInternalDocumentStore: InternalDocumentIDStore, raw: R): QPSIndexStorage {\n const dump1 = Index.load(sharedInternalDocumentStore, raw[0])\n\n const dump2 = raw[1] as {\n radixTrees: [string, boolean, string, unknown][]\n stats: [\n string,\n {\n tokenQuantums: [InternalDocumentID, Record<string, number>][]\n tokensLength: [InternalDocumentID, number][]\n }\n ][]\n }\n\n const indexes = {\n ...dump1.indexes,\n ...Object.fromEntries(\n dump2.radixTrees.map(([prop, isArray, type, node]) => [\n prop,\n {\n node: radix.RadixNode.fromJSON(node),\n isArray,\n type\n } as Index.Tree\n ])\n )\n }\n\n return {\n ...dump1,\n indexes,\n stats: Object.fromEntries(\n dump2.stats.map(([prop, { tokenQuantums, tokensLength }]) => [\n prop,\n {\n tokenQuantums,\n tokensLength: new Map(tokensLength)\n }\n ])\n )\n } as unknown as QPSIndexStorage\n },\n save: function save<R = unknown>(index: QPSIndexStorage): R {\n const baseIndex = index as unknown as Index.Index\n const nonStringIndexes = Object.entries(baseIndex.indexes).filter(([, { type }]) => type !== 'Radix')\n const dump1 = Index.save({\n ...baseIndex,\n indexes: Object.fromEntries(nonStringIndexes)\n })\n\n const stringIndexes = Object.entries(baseIndex.indexes).filter(([, { type }]) => type === 'Radix')\n const dump2 = {\n radixTrees: stringIndexes.map(([prop, { node, isArray, type }]) => [prop, isArray, type, node.toJSON()]),\n stats: Object.entries(index.stats).map(([prop, { tokenQuantums, tokensLength }]) => [\n prop,\n {\n tokenQuantums,\n tokensLength: Array.from(tokensLength.entries())\n }\n ])\n }\n\n return [dump1, dump2] as unknown as R\n }\n }\n }\n}\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"import { AnyIndexStore, AnyOrama, SearchableType, Tokenizer } from '@wcs-colab/orama'\nimport { avl, bkd, flat, radix, bool, vector } from '@wcs-colab/orama/trees'\nimport { getVectorSize, index as Index, internalDocumentIDStore, isVectorType } from '@wcs-colab/orama/components'\n\ntype InternalDocumentID = internalDocumentIDStore.InternalDocumentID\n\nexport interface QPSIndex extends AnyIndexStore {\n indexes: Record<string, Index.Tree>\n searchableProperties: string[]\n searchablePropertiesWithTypes: Record<string, SearchableType>\n stats: Record<\n string,\n {\n tokenQuantums: Record<InternalDocumentID, Record<string, number>>\n tokensLength: Map<InternalDocumentID, number>\n }\n >\n}\n\nexport function recursiveCreate<T extends AnyOrama>(indexDatastore: QPSIndex, schema: T['schema'], prefix: string) {\n for (const entry of Object.entries<SearchableType>(schema)) {\n const prop = entry[0]\n const type = entry[1]\n const path = `${prefix}${prefix ? '.' : ''}${prop}`\n\n if (typeof type === 'object' && !Array.isArray(type)) {\n // Nested\n recursiveCreate(indexDatastore, type, path)\n continue\n }\n\n if (isVectorType(type)) {\n indexDatastore.searchableProperties.push(path)\n indexDatastore.searchablePropertiesWithTypes[path] = type\n indexDatastore.vectorIndexes[path] = {\n type: 'Vector',\n node: new vector.VectorIndex(getVectorSize(type)),\n isArray: false\n }\n } else {\n const isArray = /\\[/.test(type as string)\n switch (type) {\n case 'boolean':\n case 'boolean[]':\n indexDatastore.indexes[path] = { type: 'Bool', node: new bool.BoolNode(), isArray }\n break\n case 'number':\n case 'number[]':\n indexDatastore.indexes[path] = {\n type: 'AVL',\n node: new avl.AVLTree<number, InternalDocumentID>(0, []),\n isArray\n }\n break\n case 'string':\n case 'string[]':\n indexDatastore.indexes[path] = { type: 'Radix', node: new radix.RadixTree(), isArray }\n break\n case 'enum':\n case 'enum[]':\n indexDatastore.indexes[path] = { type: 'Flat', node: new flat.FlatTree(), isArray }\n break\n case 'geopoint':\n indexDatastore.indexes[path] = { type: 'BKD', node: new bkd.BKDTree(), isArray }\n break\n default:\n throw new Error('INVALID_SCHEMA_TYPE: ' + path)\n }\n\n indexDatastore.searchableProperties.push(path)\n indexDatastore.searchablePropertiesWithTypes[path] = type\n }\n }\n}\n\nconst BIT_MASK_20 = 0b11111111111111111111\n\n// Runtime-configurable weights (default exact=1, fuzzy=0.6)\nconst qpsWeights = {\n exact: 1,\n fuzzy: 0.6\n}\n\nexport function setQpsWeights(weights?: { exact?: number; fuzzy?: number }) {\n if (weights?.exact !== undefined && !Number.isNaN(weights.exact)) {\n qpsWeights.exact = weights.exact\n }\n if (weights?.fuzzy !== undefined && !Number.isNaN(weights.fuzzy)) {\n qpsWeights.fuzzy = weights.fuzzy\n }\n}\n\nexport function calculateTokenQuantum(prevValue: number, bit: number) {\n // if (prevValue < 0) {\n // throw new Error(\"Overflow\")\n // }\n // if (bit < 0 || bit > 20) {\n // throw new Error(\"Invalid bit\")\n // }\n\n const currentCount = count(prevValue)\n const currentSentenceMask = bitmask_20(prevValue)\n const newSentenceMask = currentSentenceMask | (1 << bit)\n return ((currentCount + 1) << 20) | newSentenceMask\n}\n\nexport function insertString(\n value: string,\n radixTree: radix.RadixTree,\n stats: QPSIndex['stats'][string],\n prop: string,\n internalId: InternalDocumentID,\n language: string | undefined,\n tokenizer: Tokenizer\n) {\n const sentences = value.split(/\\.|\\?|!/)\n\n let quantumIndex = 0\n let tokenNumber = 0\n for (const sentence of sentences) {\n const tokens = tokenizer.tokenize(sentence, language, prop)\n\n for (const token of tokens) {\n tokenNumber++\n\n if (!stats[token]) {\n stats[token] = 0\n }\n\n const tokenBitIndex = Math.min(quantumIndex, 20)\n\n stats.tokenQuantums[internalId][token] = calculateTokenQuantum(\n stats.tokenQuantums[internalId][token],\n tokenBitIndex\n )\n\n radixTree.insert(token, internalId)\n }\n\n // Don't increment the quantum index if the sentence is too short\n if (tokens.length > 1) {\n quantumIndex++\n }\n }\n\n stats.tokensLength.set(internalId, tokenNumber)\n}\n\nexport function searchString(prop: {\n tokens: string[]\n radixNode: radix.RadixNode\n exact: boolean\n tolerance: number\n stats: {\n tokensLength: Map<number, number>\n tokenQuantums: Record<number, Record<string, number>>\n }\n boostPerProp: number\n resultMap: Map<number, [number, number]>\n whereFiltersIDs: Set<number> | undefined\n}) {\n const tokens = prop.tokens\n const radixNode = prop.radixNode\n const exact = prop.exact\n const tolerance = prop.tolerance\n const stats = prop.stats\n const boostPerProp = prop.boostPerProp\n const resultMap = prop.resultMap\n const whereFiltersIDs = prop.whereFiltersIDs\n const tokensLength = stats.tokensLength\n const tokenQuantums = stats.tokenQuantums\n const isMultiWord = tokens.length > 1\n\n const findParam = {\n term: '',\n exact,\n tolerance\n }\n\n // Track which query token each found word matches (for coverage calculation)\n const wordToQueryToken = new Map<string, { tokenIndex: number; isExact: boolean }>()\n let foundWords = {} as Record<string, number[]>\n const tokenLength = tokens.length\n for (let i = 0; i < tokenLength; i++) {\n const term = tokens[i]\n findParam.term = term\n const results = radixNode.find(findParam)\n \n // Track which query token each result word matches\n for (const foundWord of Object.keys(results)) {\n if (!wordToQueryToken.has(foundWord)) {\n wordToQueryToken.set(foundWord, { \n tokenIndex: i, \n isExact: foundWord === term \n })\n }\n }\n \n foundWords = {\n ...foundWords,\n ...results\n }\n }\n\n // For multi-word: track per-doc which query tokens matched and their weights\n const docMatchInfo = new Map<number, { matchedTokens: Set<number>; sumWeights: number }>()\n\n const foundKeys = Object.keys(foundWords)\n const foundKeysLength = foundKeys.length\n for (let i = 0; i < foundKeysLength; i++) {\n const key = foundKeys[i]\n const matchedDocs = foundWords[key]\n const matchedDocsLength = matchedDocs.length\n const isExactMatch = tokens.includes(key)\n const queryTokenInfo = wordToQueryToken.get(key)\n\n for (let j = 0; j < matchedDocsLength; j++) {\n const docId = matchedDocs[j]\n\n if (whereFiltersIDs && !whereFiltersIDs.has(docId)) {\n continue\n }\n\n const numberOfQuantums = tokensLength.get(docId)!\n const tokenQuantumDescriptor = tokenQuantums[docId][key]\n\n const occurrence = count(tokenQuantumDescriptor)\n const bitMask = bitmask_20(tokenQuantumDescriptor)\n const weight = isExactMatch ? qpsWeights.exact : qpsWeights.fuzzy\n\n if (isMultiWord) {\n // Multi-word: use coverage × Σ(weight) scoring\n if (!docMatchInfo.has(docId)) {\n docMatchInfo.set(docId, { matchedTokens: new Set(), sumWeights: 0 })\n }\n const info = docMatchInfo.get(docId)!\n \n // Only count each query token once (coverage), but sum best weight per token\n if (queryTokenInfo && !info.matchedTokens.has(queryTokenInfo.tokenIndex)) {\n info.matchedTokens.add(queryTokenInfo.tokenIndex)\n info.sumWeights += weight\n }\n \n // Store bitMask for later\n if (!resultMap.has(docId)) {\n resultMap.set(docId, [0, bitMask])\n } else {\n const current = resultMap.get(docId)!\n current[1] = current[1] | bitMask\n }\n } else {\n // Single word: use occurrence × weight scoring (original behavior)\n const score = occurrence * weight\n\n if (!resultMap.has(docId)) {\n resultMap.set(docId, [score, bitMask])\n continue\n }\n\n const current = resultMap.get(docId)!\n const totalScore = current[0] + score\n current[0] = totalScore\n current[1] = current[1] | bitMask\n }\n }\n }\n\n // For multi-word: calculate final scores using coverage × Σ(weight)\n if (isMultiWord) {\n for (const [docId, info] of docMatchInfo) {\n const coverage = info.matchedTokens.size / tokenLength\n const score = coverage * info.sumWeights\n const current = resultMap.get(docId)\n if (current) {\n current[0] = score\n }\n }\n }\n}\n\nexport function bitmask_20(n: number) {\n return n & BIT_MASK_20\n}\nexport function count(n: number) {\n return n >> 20\n}\n\nexport function numberOfOnes(n: number) {\n let i = 0\n do {\n if (n & 1) {\n ++i\n }\n // eslint-disable-next-line no-cond-assign\n } while ((n >>= 1))\n return i\n}\n\nexport function removeString(\n value: string,\n radixTree: radix.RadixTree,\n prop: string,\n internalId: InternalDocumentID,\n tokenizer: Tokenizer,\n language: string | undefined,\n stats: {\n tokensLength: Map<number, number>\n tokenQuantums: Record<number, Record<string, number>>\n }\n) {\n const tokensLength = stats.tokensLength\n const tokenQuantums = stats.tokenQuantums\n\n const tokens = tokenizer.tokenize(value, language, prop)\n\n for (const token of tokens) {\n radixTree.removeDocumentByWord(token, internalId, true)\n }\n\n tokensLength.delete(internalId)\n delete tokenQuantums[internalId]\n}\n"],"mappings":"8oBAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,eAAAE,KCAO,IAAMC,GAAmC,CAC9C,OAAQ,KACR,SAAU,KACV,UAAW,KACX,MAAO,KACP,OAAQ,KACR,MAAO,KACP,QAAS,KACT,QAAS,KACT,OAAQ,KACR,OAAQ,KACR,MAAO,KACP,UAAW,KACX,OAAQ,KACR,WAAY,KACZ,MAAO,KACP,QAAS,KACT,WAAY,KACZ,OAAQ,KACR,UAAW,KACX,WAAY,KACZ,SAAU,KACV,QAAS,KACT,QAAS,KACT,UAAW,KACX,QAAS,KACT,QAAS,KACT,MAAO,KACP,QAAS,KACT,UAAW,KACX,SAAU,MAoCL,IAAMC,GAAsB,OAAO,KAAKC,EAAQ,EC/DvD,IAAMC,GAAS,KAAK,IAAG,EAAG,SAAQ,EAAG,MAAM,CAAC,EAI5C,IAAMC,GAAO,OAAO,GAAG,EACjBC,GAAQ,OAAO,GAAG,EAClBC,GAAS,OAAO,GAAG,EA+BnB,SAAUC,GAAQC,KAAqBC,EAA4B,CACvE,OAAOD,EAAS,QACd,+DACA,YAAaE,EAA4D,CACvE,IAAMC,EAASD,EAAYA,EAAY,OAAS,CAAC,EAC3C,CAAE,MAAOE,EAAU,KAAAC,EAAM,SAAAC,CAAQ,EAAKH,EAEtCI,EAAcD,EAAWL,EAAK,OAAO,SAASK,CAAQ,EAAI,CAAC,EAAKL,EAAK,MAAK,EAC1EO,EAAQJ,IAAa,GAAK,EAAI,OAAO,SAASA,CAAQ,EAE5D,OAAQC,EAAM,CACZ,IAAK,IACH,OAAOE,EAAY,SAAQ,EAAG,SAASC,EAAO,GAAG,EACnD,IAAK,IAAK,CACR,IAAIC,EAAQF,EACN,CAACG,EAASC,CAAS,EAAIP,EAAS,MAAM,GAAG,EAAE,IAAKQ,GAAM,OAAO,WAAWA,CAAC,CAAC,EAEhF,OAAI,OAAOD,GAAc,UAAYA,GAAa,IAChDF,EAASA,EAAiB,QAAQE,CAAS,GAGtC,OAAOD,GAAY,UAAYA,GAAW,EAAID,EAAM,SAAQ,EAAG,SAASD,EAAO,GAAG,EAAIC,EAAM,SAAQ,CAC7G,CACA,IAAK,IACH,OAAOD,EAAQ,EACVD,EAAuB,SAAQ,EAAG,OAAO,CAACC,EAAO,GAAG,EACpDD,EAAuB,SAAQ,EAAG,SAASC,EAAO,GAAG,EAE5D,QACE,OAAOD,CACX,CACF,CAAC,CAEL,CAkEM,SAAUM,GAA4BC,EAA2BC,EAAgB,CAErF,OAAI,OAAO,SAAW,OACb,OAAO,UAAU,eAAe,KAAKD,EAAQC,CAAQ,EAAID,EAAOC,CAAQ,EAAI,OAG9E,OAAO,OAAOD,EAAQC,CAAQ,EAAID,EAAOC,CAAQ,EAAI,MAC9D,CAsJA,IAAMC,GAAsB,CAC1B,GAAI,IACJ,EAAG,EACH,GAAI,IACJ,GAAI,MACJ,GAAI,MACJ,GAAI,UAGA,SAAUC,GAAwBC,EAAkBC,EAA2B,CACnF,IAAMC,EAAQJ,GAAoBG,CAAI,EAEtC,GAAIC,IAAU,OACZ,MAAM,IAAI,MAAMC,EAAY,0BAA2BH,CAAQ,EAAE,OAAO,EAG1E,OAAOA,EAAWE,CACpB,CA4CA,IAAME,GAAmB,iBAAkB,IAAI,IAEzC,SAAUC,KAAsBC,EAAc,CAElD,GAAIA,EAAK,SAAW,EAClB,OAAO,IAAI,IAGb,GAAIA,EAAK,SAAW,EAClB,OAAOA,EAAK,CAAC,EAGf,GAAIA,EAAK,SAAW,EAAG,CACrB,IAAMC,EAAOD,EAAK,CAAC,EACbE,EAAOF,EAAK,CAAC,EAEnB,GAAIF,GACF,OAAOG,EAAK,aAAaC,CAAI,EAE/B,IAAMC,EAAS,IAAI,IACbC,EAAOH,EAAK,KAAOC,EAAK,KAAOD,EAAOC,EACtCG,EAAQD,IAASH,EAAOC,EAAOD,EACrC,QAAWK,KAASF,EACdC,EAAM,IAAIC,CAAK,GACjBH,EAAO,IAAIG,CAAK,EAGpB,OAAOH,CACT,CAIA,IAAMI,EAAM,CACV,MAAO,EACP,KAAMP,EAAK,CAAC,EAAE,MAEhB,QAASQ,EAAI,EAAGA,EAAIR,EAAK,OAAQQ,IAC3BR,EAAKQ,CAAC,EAAE,KAAOD,EAAI,OACrBA,EAAI,MAAQC,EACZD,EAAI,KAAOP,EAAKQ,CAAC,EAAE,MAIvB,GAAIV,GAAkB,CACpB,IAAIM,EAAOJ,EAAKO,EAAI,KAAK,EACzB,QAASC,EAAI,EAAGA,EAAIR,EAAK,OAAQQ,IAC3BA,IAAMD,EAAI,QAGdH,EAAOA,EAAK,aAAaJ,EAAKQ,CAAC,CAAC,GAGlC,OAAOJ,CACT,CAIA,IAAMA,EAAOJ,EAAKO,EAAI,KAAK,EAC3B,QAASC,EAAI,EAAGA,EAAIR,EAAK,OAAQQ,IAAK,CACpC,GAAIA,IAAMD,EAAI,MACZ,SAEF,IAAMF,EAAQL,EAAKQ,CAAC,EACpB,QAAWF,KAASF,EACbC,EAAM,IAAIC,CAAK,GAClBF,EAAK,OAAOE,CAAK,CAGvB,CAEA,OAAOF,CACT,CAEA,IAAMK,GAAY,UAAW,IAAI,IAC3B,SAAUC,EAAYT,EAA0BC,EAAY,CAChE,OAAIO,GACER,EACKA,EAAK,MAAMC,CAAI,EAEjBA,EAGJD,EAGE,IAAI,IAAI,CAAC,GAAGA,EAAM,GAAGC,CAAI,CAAC,EAFxB,IAAI,IAAIA,CAAI,CAGvB,CAEM,SAAUS,GAAiBV,EAAcC,EAAY,CACzD,IAAMC,EAAS,IAAI,IACnB,QAAWG,KAASL,EACbC,EAAK,IAAII,CAAK,GACjBH,EAAO,IAAIG,CAAK,EAGpB,OAAOH,CACT,CClcA,IAAMS,GAAeC,GAAoB,KAAK;IAAO,EAE/CC,GAAS,CACb,kCAAmC,2EACnC,uBAAwB;;KAAiEF,EAAY,GACrG,8BAA+B,8CAC/B,gBAAiB,mRACjB,4CAA6C,qDAC7C,sBAAuB,8BACvB,2BAA4B,yCAC5B,8CAA+C,kEAC/C,oBAAqB,mGACrB,2BAA4B,0DAC5B,wBAAyB,0CACzB,wBAAyB,2CACzB,0BAA2B,oCAC3B,0BAA2B,0DAC3B,cAAe,uHACf,oBAAqB,6DACrB,yBAA0B,+DAC1B,0BAA2B,yEAC3B,yBAA0B,4EAC1B,qBAAsB,8DACtB,gCAAiC,2DACjC,cAAe,gHACf,0BAA2B,iCAC3B,0BAA2B,sEAC3B,wBAAyB,gCACzB,wBAAyB,2GACzB,oBAAqB,iEACrB,qBAAsB,kEACtB,qBAAsB;wJACtB,2BAA4B,4EAC5B,oBAAqB,uCACrB,wBAAyB,2EACzB,oBAAqB,6EACrB,gCAAiC,kJACjC,aAAc,8FACd,qBAAsB,8GACtB,eAAgB,+FAChB,8BAA+B;;;EAC/B,uCAAwC;;;EACxC,6CAA8C,yGAC9C,0BAA2B,oFASvB,SAAUG,EAAYC,KAAoBC,EAA4B,CAC1E,IAAMC,EAAQ,IAAI,MAAMC,GAAQL,GAAOE,CAAI,GAAK,iCAAiCA,CAAI,GAAI,GAAGC,CAAI,CAAC,EACjG,OAAAC,EAAM,KAAOF,EACT,sBAAuB,MAAM,WAC/B,MAAM,kBAAkBE,CAAK,EAGxBA,CACT,CCmDA,IAAME,GAAiD,CACrD,OAAQ,GACR,OAAQ,GACR,QAAS,GACT,KAAM,GACN,SAAU,GACV,WAAY,GACZ,WAAY,GACZ,YAAa,GACb,SAAU,IAGNC,GAAgE,CACpE,WAAY,SACZ,WAAY,SACZ,YAAa,UACb,SAAU,QAON,SAAUC,EAAaC,EAAa,CACxC,OAAO,OAAOA,GAAS,UAAY,kBAAkB,KAAKA,CAAI,CAChE,CAEM,SAAUC,GAAYD,EAAa,CACvC,OAAO,OAAOA,GAAS,UAAYE,GAAcF,CAAI,CACvD,CAEM,SAAUG,GAAaH,EAAyB,CACpD,OAAOI,GAAWJ,CAAI,CACxB,CAEM,SAAUK,GAAcL,EAAY,CACxC,IAAMM,EAAO,OAAON,EAAK,MAAM,EAAG,EAAE,CAAC,EAErC,OAAQ,GAAM,CACZ,KAAK,MAAMM,CAAI,EACb,MAAMC,EAAY,uBAAwBP,CAAI,EAChD,KAAKM,GAAQ,EACX,MAAMC,EAAY,sBAAuBP,CAAI,EAC/C,QACE,OAAOM,CACX,CACF,CCvHM,SAAUE,EAAsBC,EAAgCC,EAAc,CAClF,GAAI,OAAOA,GAAO,SAAU,CAC1B,IAAMC,EAAaF,EAAM,eAAe,IAAIC,CAAE,EAE9C,GAAIC,EACF,OAAOA,EAGT,IAAMC,EAAYH,EAAM,eAAe,KAAO,EAE9C,OAAAA,EAAM,eAAe,IAAIC,EAAIE,CAAS,EACtCH,EAAM,eAAe,KAAKC,CAAE,EAErBE,CACT,CAEA,OAAIF,EAAKD,EAAM,eAAe,OACrBD,EAAsBC,EAAOC,EAAG,SAAQ,CAAE,EAG5CA,CACT,CCvCA,IAAAG,EAAA,GAAAC,EAAAD,EAAA,2BAAAE,GAAA,WAAAC,GAAA,gBAAAC,GAAA,4BAAAC,GAAA,qCAAAC,GAAA,WAAAC,GAAA,kCAAAC,GAAA,+BAAAC,GAAA,iBAAAC,GAAA,SAAAC,GAAA,WAAAC,GAAA,kCAAAC,GAAA,+BAAAC,GAAA,SAAAC,GAAA,WAAAC,GAAA,2BAAAC,GAAA,wBAAAC,ICnBA,IAAAC,GAAA,GAAAC,EAAAD,GAAA,aAAAE,EAAA,YAAAC,IAAM,IAAOC,EAAP,MAAOC,CAAO,CAOlB,YAAYC,EAAQC,EAAU,CANvBC,EAAA,UACAA,EAAA,UACAA,EAAA,SAA6B,MAC7BA,EAAA,SAA6B,MAC7BA,EAAA,SAAY,GAGjB,KAAK,EAAIF,EACT,KAAK,EAAI,IAAI,IAAIC,CAAK,CACxB,CAEO,cAAY,CACjB,KAAK,EAAI,KAAK,IAAIF,EAAQ,UAAU,KAAK,CAAC,EAAGA,EAAQ,UAAU,KAAK,CAAC,CAAC,EAAI,CAC5E,CAEO,OAAO,UAAgBI,EAA6B,CACzD,OAAOA,EAAOA,EAAK,EAAI,CACzB,CAEO,kBAAgB,CACrB,OAAOJ,EAAQ,UAAU,KAAK,CAAC,EAAIA,EAAQ,UAAU,KAAK,CAAC,CAC7D,CAEO,YAAU,CACf,IAAMK,EAAU,KAAK,EACrB,YAAK,EAAIA,EAAQ,EACjBA,EAAQ,EAAI,KACZ,KAAK,aAAY,EACjBA,EAAQ,aAAY,EACbA,CACT,CAEO,aAAW,CAChB,IAAMA,EAAU,KAAK,EACrB,YAAK,EAAIA,EAAQ,EACjBA,EAAQ,EAAI,KACZ,KAAK,aAAY,EACjBA,EAAQ,aAAY,EACbA,CACT,CAEO,QAAM,CACX,MAAO,CACL,EAAG,KAAK,EACR,EAAG,MAAM,KAAK,KAAK,CAAC,EACpB,EAAG,KAAK,EAAI,KAAK,EAAE,OAAM,EAAK,KAC9B,EAAG,KAAK,EAAI,KAAK,EAAE,OAAM,EAAK,KAC9B,EAAG,KAAK,EAEZ,CAEO,OAAO,SAAeC,EAAS,CACpC,IAAMF,EAAO,IAAIJ,EAAcM,EAAK,EAAGA,EAAK,CAAC,EAC7C,OAAAF,EAAK,EAAIE,EAAK,EAAIN,EAAQ,SAAeM,EAAK,CAAC,EAAI,KACnDF,EAAK,EAAIE,EAAK,EAAIN,EAAQ,SAAeM,EAAK,CAAC,EAAI,KACnDF,EAAK,EAAIE,EAAK,EACPF,CACT,GAGWG,EAAP,MAAOC,CAAO,CAIlB,YAAYP,EAASC,EAAW,CAHzBC,EAAA,YAAgC,MAC/BA,EAAA,mBAAc,GAGhBF,IAAQ,QAAaC,IAAU,SACjC,KAAK,KAAO,IAAIH,EAAQE,EAAKC,CAAK,EAEtC,CAEO,OAAOD,EAAQC,EAAUO,EAAqB,IAAI,CACvD,KAAK,KAAO,KAAK,WAAW,KAAK,KAAMR,EAAKC,EAAOO,CAAkB,CACvE,CAEO,eAAeR,EAAQC,EAAYO,EAAqB,IAAI,CACjE,QAAWC,KAAKR,EACd,KAAK,OAAOD,EAAKS,EAAGD,CAAkB,CAE1C,CAMO,WAAS,CACV,KAAK,OACP,KAAK,KAAO,KAAK,cAAc,KAAK,IAAK,EAE7C,CAEO,QAAM,CACX,MAAO,CACL,KAAM,KAAK,KAAO,KAAK,KAAK,OAAM,EAAK,KACvC,YAAa,KAAK,YAEtB,CAEO,OAAO,SAAeH,EAAS,CACpC,IAAMK,EAAO,IAAIH,EACjB,OAAAG,EAAK,KAAOL,EAAK,KAAOP,EAAQ,SAAeO,EAAK,IAAI,EAAI,KAC5DK,EAAK,YAAcL,EAAK,aAAe,EAChCK,CACT,CAEQ,WAAWP,EAA+BH,EAAQC,EAAUO,EAA0B,CAC5F,GAAIL,IAAS,KACX,OAAO,IAAIL,EAAQE,EAAK,CAACC,CAAK,CAAC,EAGjC,IAAMU,EAAwE,CAAA,EAC1EC,EAAUT,EACVU,EAAkC,KAEtC,KAAOD,IAAY,MAGjB,GAFAD,EAAK,KAAK,CAAE,OAAAE,EAAQ,KAAMD,CAAO,CAAE,EAE/BZ,EAAMY,EAAQ,EAChB,GAAIA,EAAQ,IAAM,KAAM,CACtBA,EAAQ,EAAI,IAAId,EAAQE,EAAK,CAACC,CAAK,CAAC,EACpCU,EAAK,KAAK,CAAE,OAAQC,EAAS,KAAMA,EAAQ,CAAC,CAAE,EAC9C,KACF,MACEC,EAASD,EACTA,EAAUA,EAAQ,UAEXZ,EAAMY,EAAQ,EACvB,GAAIA,EAAQ,IAAM,KAAM,CACtBA,EAAQ,EAAI,IAAId,EAAQE,EAAK,CAACC,CAAK,CAAC,EACpCU,EAAK,KAAK,CAAE,OAAQC,EAAS,KAAMA,EAAQ,CAAC,CAAE,EAC9C,KACF,MACEC,EAASD,EACTA,EAAUA,EAAQ,MAIpB,QAAAA,EAAQ,EAAE,IAAIX,CAAK,EAYZE,EAKX,IAAIW,EAAgB,GAChB,KAAK,cAAgBN,IAAuB,IAC9CM,EAAgB,IAGlB,QAASC,EAAIJ,EAAK,OAAS,EAAGI,GAAK,EAAGA,IAAK,CACzC,GAAM,CAAE,OAAAF,EAAQ,KAAMG,CAAW,EAAKL,EAAKI,CAAC,EAG5C,GAFAC,EAAY,aAAY,EAEpBF,EAAe,CACjB,IAAMG,EAAiB,KAAK,cAAcD,CAAW,EACjDH,EACEA,EAAO,IAAMG,EACfH,EAAO,EAAII,EACFJ,EAAO,IAAMG,IACtBH,EAAO,EAAII,GAIbd,EAAOc,CAEX,CACF,CAEA,OAAOd,CACT,CAEQ,cAAcA,EAAmB,CACvC,IAAMe,EAAgBf,EAAK,iBAAgB,EAE3C,GAAIe,EAAgB,EAAG,CAErB,GAAIf,EAAK,GAAKA,EAAK,EAAE,iBAAgB,GAAM,EAEzC,OAAOA,EAAK,YAAW,EAClB,GAAIA,EAAK,EAEd,OAAAA,EAAK,EAAIA,EAAK,EAAE,WAAU,EACnBA,EAAK,YAAW,CAE3B,CAEA,GAAIe,EAAgB,GAAI,CAEtB,GAAIf,EAAK,GAAKA,EAAK,EAAE,iBAAgB,GAAM,EAEzC,OAAOA,EAAK,WAAU,EACjB,GAAIA,EAAK,EAEd,OAAAA,EAAK,EAAIA,EAAK,EAAE,YAAW,EACpBA,EAAK,WAAU,CAE1B,CAEA,OAAOA,CACT,CAEO,KAAKH,EAAM,CAChB,IAAMG,EAAO,KAAK,cAAcH,CAAG,EACnC,OAAOG,EAAOA,EAAK,EAAI,IACzB,CAEO,SAASH,EAAM,CACpB,OAAO,KAAK,KAAKA,CAAG,IAAM,IAC5B,CAEO,SAAO,CACZ,IAAImB,EAAQ,EACNC,EAAwC,CAAA,EAC1CR,EAAU,KAAK,KAEnB,KAAOA,GAAWQ,EAAM,OAAS,GAAG,CAClC,KAAOR,GACLQ,EAAM,KAAKR,CAAO,EAClBA,EAAUA,EAAQ,EAEpBA,EAAUQ,EAAM,IAAG,EACnBD,IACAP,EAAUA,EAAQ,CACpB,CAEA,OAAOO,CACT,CAEO,YAAU,CACf,GAAI,CAAC,KAAK,KAAM,MAAO,GAEvB,IAAMC,EAA8B,CAAC,KAAK,IAAI,EAE9C,KAAOA,EAAM,OAAS,GAAG,CACvB,IAAMjB,EAAOiB,EAAM,IAAG,EAChBF,EAAgBf,EAAK,iBAAgB,EAC3C,GAAI,KAAK,IAAIe,CAAa,EAAI,EAC5B,MAAO,GAGLf,EAAK,GAAGiB,EAAM,KAAKjB,EAAK,CAAC,EACzBA,EAAK,GAAGiB,EAAM,KAAKjB,EAAK,CAAC,CAC/B,CAEA,MAAO,EACT,CAEO,OAAOH,EAAM,CAClB,KAAK,KAAO,KAAK,WAAW,KAAK,KAAMA,CAAG,CAC5C,CAEO,eAAeA,EAAQqB,EAAK,CACjC,IAAMlB,EAAO,KAAK,cAAcH,CAAG,EAE9BG,IAIDA,EAAK,EAAE,OAAS,EAClB,KAAK,KAAO,KAAK,WAAW,KAAK,KAAMH,CAAG,EAE1CG,EAAK,EAAI,IAAI,IAAI,CAAC,GAAGA,EAAK,EAAE,OAAM,CAAE,EAAE,OAAQM,GAAMA,IAAMY,CAAE,CAAC,EAEjE,CAEQ,cAAcrB,EAAM,CAC1B,IAAIG,EAAO,KAAK,KAChB,KAAOA,GACL,GAAIH,EAAMG,EAAK,EACbA,EAAOA,EAAK,UACHH,EAAMG,EAAK,EACpBA,EAAOA,EAAK,MAEZ,QAAOA,EAGX,OAAO,IACT,CAEQ,WAAWA,EAA+BH,EAAM,CACtD,GAAIG,IAAS,KAAM,OAAO,KAE1B,IAAMQ,EAA6B,CAAA,EAC/BC,EAAUT,EAEd,KAAOS,IAAY,MAAQA,EAAQ,IAAMZ,GACvCW,EAAK,KAAKC,CAAO,EACbZ,EAAMY,EAAQ,EAChBA,EAAUA,EAAQ,EAElBA,EAAUA,EAAQ,EAItB,GAAIA,IAAY,KAEd,OAAOT,EAIT,GAAIS,EAAQ,IAAM,MAAQA,EAAQ,IAAM,KAAM,CAC5C,IAAMU,EAAQV,EAAQ,EAAIA,EAAQ,EAAIA,EAAQ,EAE9C,GAAID,EAAK,SAAW,EAElBR,EAAOmB,MACF,CACL,IAAMT,EAASF,EAAKA,EAAK,OAAS,CAAC,EAC/BE,EAAO,IAAMD,EACfC,EAAO,EAAIS,EAEXT,EAAO,EAAIS,CAEf,CACF,KAAO,CAEL,IAAIC,EAAkBX,EAClBY,EAAYZ,EAAQ,EAExB,KAAOY,EAAU,IAAM,MACrBD,EAAkBC,EAClBA,EAAYA,EAAU,EAIxBZ,EAAQ,EAAIY,EAAU,EACtBZ,EAAQ,EAAIY,EAAU,EAGlBD,EAAgB,IAAMC,EACxBD,EAAgB,EAAIC,EAAU,EAE9BD,EAAgB,EAAIC,EAAU,EAGhCZ,EAAUW,CACZ,CAGAZ,EAAK,KAAKC,CAAO,EACjB,QAASG,EAAIJ,EAAK,OAAS,EAAGI,GAAK,EAAGA,IAAK,CACzC,IAAMC,EAAcL,EAAKI,CAAC,EAC1BC,EAAY,aAAY,EACxB,IAAMC,EAAiB,KAAK,cAAcD,CAAW,EACrD,GAAID,EAAI,EAAG,CACT,IAAMF,EAASF,EAAKI,EAAI,CAAC,EACrBF,EAAO,IAAMG,EACfH,EAAO,EAAII,EACFJ,EAAO,IAAMG,IACtBH,EAAO,EAAII,EAEf,MAEEd,EAAOc,CAEX,CAEA,OAAOd,CACT,CAEO,YAAYsB,EAAQC,EAAM,CAC/B,IAAMC,EAAiB,IAAI,IACrBP,EAA8B,CAAA,EAChCR,EAAU,KAAK,KAEnB,KAAOA,GAAWQ,EAAM,OAAS,GAAG,CAClC,KAAOR,GACLQ,EAAM,KAAKR,CAAO,EAClBA,EAAUA,EAAQ,EAGpB,GADAA,EAAUQ,EAAM,IAAG,EACfR,EAAQ,GAAKa,GAAOb,EAAQ,GAAKc,EACnC,QAAWzB,KAASW,EAAQ,EAC1Be,EAAO,IAAI1B,CAAK,EAGpB,GAAIW,EAAQ,EAAIc,EACd,MAEFd,EAAUA,EAAQ,CACpB,CAEA,OAAOe,CACT,CAEO,YAAY3B,EAAQ4B,EAAY,GAAK,CAC1C,IAAMD,EAAiB,IAAI,IACrBP,EAA8B,CAAA,EAChCR,EAAU,KAAK,KAEnB,KAAOA,GAAWQ,EAAM,OAAS,GAAG,CAClC,KAAOR,GACLQ,EAAM,KAAKR,CAAO,EAClBA,EAAUA,EAAQ,EAGpB,GADAA,EAAUQ,EAAM,IAAG,EACdQ,GAAahB,EAAQ,GAAKZ,GAAS,CAAC4B,GAAahB,EAAQ,EAAIZ,EAChE,QAAWC,KAASW,EAAQ,EAC1Be,EAAO,IAAI1B,CAAK,UAETW,EAAQ,GAAKZ,EACtB,MAEFY,EAAUA,EAAQ,CACpB,CAEA,OAAOe,CACT,CAEO,SAAS3B,EAAQ4B,EAAY,GAAK,CACvC,IAAMD,EAAiB,IAAI,IACrBP,EAA8B,CAAA,EAChCR,EAAU,KAAK,KAEnB,KAAOA,GAAWQ,EAAM,OAAS,GAAG,CAClC,KAAOR,GACLQ,EAAM,KAAKR,CAAO,EAClBA,EAAUA,EAAQ,EAGpB,GADAA,EAAUQ,EAAM,IAAG,EACdQ,GAAahB,EAAQ,GAAKZ,GAAS,CAAC4B,GAAahB,EAAQ,EAAIZ,EAChE,QAAWC,KAASW,EAAQ,EAC1Be,EAAO,IAAI1B,CAAK,UAETW,EAAQ,EAAIZ,EACrB,MAEFY,EAAUA,EAAQ,CACpB,CAEA,OAAOe,CACT,GC1bF,IAAAE,GAAA,GAAAC,EAAAD,GAAA,cAAAE,IAAM,IAAOC,EAAP,MAAOC,CAAQ,CAGnB,aAAA,CAFAC,EAAA,2BAGE,KAAK,mBAAqB,IAAI,GAChC,CAEA,OAAOC,EAA4BC,EAAyB,CACtD,KAAK,mBAAmB,IAAID,CAAG,EACjC,KAAK,mBAAmB,IAAIA,CAAG,EAAG,IAAIC,CAAK,EAE3C,KAAK,mBAAmB,IAAID,EAAK,IAAI,IAAI,CAACC,CAAK,CAAC,CAAC,CAErD,CAEA,KAAKD,EAA0B,CAC7B,IAAME,EAAQ,KAAK,mBAAmB,IAAIF,CAAG,EAC7C,OAAOE,EAAQ,MAAM,KAAKA,CAAK,EAAI,IACrC,CAEA,OAAOF,EAA0B,CAC/B,KAAK,mBAAmB,OAAOA,CAAG,CACpC,CAEA,eAAeG,EAAwBH,EAA0B,CAC/D,IAAME,EAAQ,KAAK,mBAAmB,IAAIF,CAAG,EACzCE,IACFA,EAAM,OAAOC,CAAE,EACXD,EAAM,OAAS,GACjB,KAAK,mBAAmB,OAAOF,CAAG,EAGxC,CAEA,SAASA,EAA0B,CACjC,OAAO,KAAK,mBAAmB,IAAIA,CAAG,CACxC,CAEA,SAAO,CACL,IAAII,EAAO,EACX,QAAWF,KAAS,KAAK,mBAAmB,OAAM,EAChDE,GAAQF,EAAM,KAEhB,OAAOE,CACT,CAEA,OAAOC,EAAiC,CACtC,IAAMC,EAAgB,OAAO,KAAKD,CAAS,EAE3C,GAAIC,EAAc,SAAW,EAC3B,MAAM,IAAI,MAAM,mBAAmB,EAGrC,IAAMC,EAAgBD,EAAc,CAAC,EAErC,OAAQC,EAAe,CACrB,IAAK,KAAM,CACT,IAAMN,EAAQI,EAAUE,CAAa,EAC/BL,EAAQ,KAAK,mBAAmB,IAAID,CAAK,EAC/C,OAAOC,EAAQ,MAAM,KAAKA,CAAK,EAAI,CAAA,CACrC,CACA,IAAK,KAAM,CACT,IAAMM,EAASH,EAAUE,CAAa,EAChCE,EAAqC,IAAI,IAC/C,QAAWR,KAASO,EAAQ,CAC1B,IAAMN,EAAQ,KAAK,mBAAmB,IAAID,CAAK,EAC/C,GAAIC,EACF,QAAWC,KAAMD,EACfO,EAAU,IAAIN,CAAE,CAGtB,CACA,OAAO,MAAM,KAAKM,CAAS,CAC7B,CACA,IAAK,MAAO,CACV,IAAMC,EAAgB,IAAI,IAA2BL,EAAUE,CAAa,CAAE,EACxEE,EAAqC,IAAI,IAC/C,OAAW,CAACT,EAAKE,CAAK,IAAK,KAAK,mBAAmB,QAAO,EACxD,GAAI,CAACQ,EAAc,IAAIV,CAAG,EACxB,QAAWG,KAAMD,EACfO,EAAU,IAAIN,CAAE,EAItB,OAAO,MAAM,KAAKM,CAAS,CAC7B,CACA,QACE,MAAM,IAAI,MAAM,mBAAmB,CACvC,CACF,CAEA,UAAUJ,EAAoC,CAC5C,IAAMC,EAAgB,OAAO,KAAKD,CAAS,EAE3C,GAAIC,EAAc,SAAW,EAC3B,MAAM,IAAI,MAAM,mBAAmB,EAGrC,IAAMC,EAAgBD,EAAc,CAAC,EAErC,OAAQC,EAAe,CACrB,IAAK,cAAe,CAElB,IAAMI,EADSN,EAAUE,CAAa,EAChB,IAAKN,GAAU,KAAK,mBAAmB,IAAIA,CAAK,GAAK,IAAI,GAAK,EACpF,GAAIU,EAAO,SAAW,EAAG,MAAO,CAAA,EAChC,IAAMC,EAAeD,EAAO,OAAO,CAACE,EAAMC,IACjC,IAAI,IAAI,CAAC,GAAGD,CAAI,EAAE,OAAQV,GAAOW,EAAK,IAAIX,CAAE,CAAC,CAAC,CACtD,EACD,OAAO,MAAM,KAAKS,CAAY,CAChC,CACA,IAAK,cAAe,CAElB,IAAMD,EADSN,EAAUE,CAAa,EAChB,IAAKN,GAAU,KAAK,mBAAmB,IAAIA,CAAK,GAAK,IAAI,GAAK,EACpF,GAAIU,EAAO,SAAW,EAAG,MAAO,CAAA,EAChC,IAAMI,EAAQJ,EAAO,OAAO,CAACE,EAAMC,IAC1B,IAAI,IAAI,CAAC,GAAGD,EAAM,GAAGC,CAAI,CAAC,CAClC,EACD,OAAO,MAAM,KAAKC,CAAK,CACzB,CACA,QACE,MAAM,IAAI,MAAM,mBAAmB,CACvC,CACF,CAEA,OAAO,SAASC,EAAS,CACvB,GAAI,CAACA,EAAK,mBACR,MAAM,IAAI,MAAM,wBAAwB,EAG1C,IAAMC,EAAO,IAAInB,EACjB,OAAW,CAACE,EAAKkB,CAAG,IAAKF,EAAK,mBAC5BC,EAAK,mBAAmB,IAAIjB,EAAK,IAAI,IAAIkB,CAAG,CAAC,EAE/C,OAAOD,CACT,CAEA,QAAM,CACJ,MAAO,CACL,mBAAoB,MAAM,KAAK,KAAK,mBAAmB,QAAO,CAAE,EAAE,IAAI,CAAC,CAACjB,EAAKE,CAAK,IAAM,CAACF,EAAK,MAAM,KAAKE,CAAK,CAAC,CAAC,EAEpH,GC/IF,IAAAiB,EAAA,GAAAC,EAAAD,EAAA,eAAAE,EAAA,cAAAC,ICUO,IAAIC,EAAyB,GAepC,SAASC,GAAoBC,EAAcC,EAAcC,EAAiB,CAExE,GAAIA,EAAY,EAAG,MAAO,GAC1B,GAAIF,IAASC,EAAM,MAAO,GAE1B,IAAME,EAAIH,EAAK,OACTI,EAAIH,EAAK,OAGf,GAAIE,IAAM,EAAG,OAAOC,GAAKF,EAAYE,EAAI,GACzC,GAAIA,IAAM,EAAG,OAAOD,GAAKD,EAAYC,EAAI,GAKzC,IAAME,EAAO,KAAK,IAAIF,EAAIC,CAAC,EAI3B,GAAIE,EAAwB,CAE1B,GAAIN,EAAK,WAAWC,CAAI,EAEtB,OAAOI,GAAQH,EAAYG,EAAO,GAGpC,GAAIJ,EAAK,WAAWD,CAAI,EAEtB,MAAO,EAEX,CAGA,GAAIK,EAAOH,EAAW,MAAO,GAG7B,IAAMK,EAAqB,CAAA,EAC3B,QAASC,EAAI,EAAGA,GAAKL,EAAGK,IAAK,CAC3BD,EAAOC,CAAC,EAAI,CAACA,CAAC,EACd,QAASC,EAAI,EAAGA,GAAKL,EAAGK,IACtBF,EAAOC,CAAC,EAAEC,CAAC,EAAID,IAAM,EAAIC,EAAI,CAEjC,CAGA,QAASD,EAAI,EAAGA,GAAKL,EAAGK,IAAK,CAC3B,IAAIE,EAAS,IACb,QAASD,EAAI,EAAGA,GAAKL,EAAGK,IAClBT,EAAKQ,EAAI,CAAC,IAAMP,EAAKQ,EAAI,CAAC,EAC5BF,EAAOC,CAAC,EAAEC,CAAC,EAAIF,EAAOC,EAAI,CAAC,EAAEC,EAAI,CAAC,EAElCF,EAAOC,CAAC,EAAEC,CAAC,EAAI,KAAK,IAClBF,EAAOC,EAAI,CAAC,EAAEC,CAAC,EAAI,EACnBF,EAAOC,CAAC,EAAEC,EAAI,CAAC,EAAI,EACnBF,EAAOC,EAAI,CAAC,EAAEC,EAAI,CAAC,EAAI,GAG3BC,EAAS,KAAK,IAAIA,EAAQH,EAAOC,CAAC,EAAEC,CAAC,CAAC,EAIxC,GAAIC,EAASR,EACX,MAAO,EAEX,CAEA,OAAOK,EAAOJ,CAAC,EAAEC,CAAC,GAAKF,EAAYK,EAAOJ,CAAC,EAAEC,CAAC,EAAI,EACpD,CAiBM,SAAUO,GAAuBC,EAAcC,EAAWC,EAAiB,CAC/E,IAAMC,EAAWC,GAAoBJ,EAAMC,EAAGC,CAAS,EACvD,MAAO,CACL,SAAAC,EACA,UAAWA,GAAY,EAE3B,CDtGM,IAAOE,EAAP,MAAOC,CAAS,CAcpB,YAAYC,EAAaC,EAAiBC,EAAY,CAZ/CC,EAAA,UAEAA,EAAA,UAEAA,EAAA,SAA4B,IAAI,KAEhCA,EAAA,SAA6B,IAAI,KAEjCA,EAAA,UAEAA,EAAA,SAAI,IAGT,KAAK,EAAIH,EACT,KAAK,EAAIC,EACT,KAAK,EAAIC,CACX,CAEO,aAAaE,EAAiB,CACnC,KAAK,EAAIA,EAAO,EAAI,KAAK,CAC3B,CAEO,YAAYC,EAAyB,CAC1C,KAAK,EAAE,IAAIA,CAAK,CAClB,CAEO,eAAeA,EAAyB,CAC7C,OAAO,KAAK,EAAE,OAAOA,CAAK,CAC5B,CAEO,aAAaC,EAAoBC,EAAcC,EAAiBC,EAAkB,CACvF,IAAMC,EAAqB,CAAC,IAAI,EAChC,KAAOA,EAAM,OAAS,GAAG,CACvB,IAAMC,EAAOD,EAAM,IAAG,EAEtB,GAAIC,EAAK,EAAG,CACV,GAAM,CAAE,EAAAC,EAAG,EAAGC,CAAM,EAAKF,EAEzB,GAAIH,GAASI,IAAML,EACjB,SAMF,GAAIO,GAAeR,EAAQM,CAAC,IAAM,KAChC,GAAIH,EAGF,GAFmB,KAAK,IAAIF,EAAK,OAASK,EAAE,MAAM,GAEhCH,GAAaM,GAAuBR,EAAMK,EAAGH,CAAS,EAAE,UACxEH,EAAOM,CAAC,EAAI,CAAA,MAEZ,eAGFN,EAAOM,CAAC,EAAI,CAAA,EAOhB,GAAIE,GAAeR,EAAQM,CAAC,GAAK,MAAQC,EAAO,KAAO,EAAG,CACxD,IAAMG,EAAOV,EAAOM,CAAC,EACrB,QAAWP,KAASQ,EACbG,EAAK,SAASX,CAAK,GACtBW,EAAK,KAAKX,CAAK,CAGrB,CACF,CAEIM,EAAK,EAAE,KAAO,GAChBD,EAAM,KAAK,GAAGC,EAAK,EAAE,OAAM,CAAE,CAEjC,CACA,OAAOL,CACT,CAEO,OAAOW,EAAcC,EAAyB,CACnD,IAAIP,EAAkB,KAClBQ,EAAI,EACFC,EAAaH,EAAK,OAExB,KAAOE,EAAIC,GAAY,CACrB,IAAMC,EAAmBJ,EAAKE,CAAC,EACzBG,EAAYX,EAAK,EAAE,IAAIU,CAAgB,EAE7C,GAAIC,EAAW,CACb,IAAMC,EAAYD,EAAU,EACtBE,EAAkBD,EAAU,OAC9BE,EAAI,EAGR,KAAOA,EAAID,GAAmBL,EAAIM,EAAIL,GAAcG,EAAUE,CAAC,IAAMR,EAAKE,EAAIM,CAAC,GAC7EA,IAGF,GAAIA,IAAMD,EAAiB,CAIzB,GAFAb,EAAOW,EACPH,GAAKM,EACDN,IAAMC,EAAY,CAEfE,EAAU,IACbA,EAAU,EAAI,IAEhBA,EAAU,YAAYJ,CAAK,EAC3B,MACF,CACA,QACF,CAGA,IAAMQ,EAAeH,EAAU,MAAM,EAAGE,CAAC,EACnCE,EAAeJ,EAAU,MAAME,CAAC,EAChCG,EAAeX,EAAK,MAAME,EAAIM,CAAC,EAG/BI,EAAgB,IAAI9B,EAAU2B,EAAa,CAAC,EAAGA,EAAc,EAAK,EAUxE,GATAf,EAAK,EAAE,IAAIe,EAAa,CAAC,EAAGG,CAAa,EACzCA,EAAc,aAAalB,CAAI,EAG/BW,EAAU,EAAIK,EACdL,EAAU,EAAIK,EAAa,CAAC,EAC5BE,EAAc,EAAE,IAAIF,EAAa,CAAC,EAAGL,CAAS,EAC9CA,EAAU,aAAaO,CAAa,EAEhCD,EAAc,CAEhB,IAAME,EAAU,IAAI/B,EAAU6B,EAAa,CAAC,EAAGA,EAAc,EAAI,EACjEE,EAAQ,YAAYZ,CAAK,EACzBW,EAAc,EAAE,IAAID,EAAa,CAAC,EAAGE,CAAO,EAC5CA,EAAQ,aAAaD,CAAa,CACpC,MAEEA,EAAc,EAAI,GAClBA,EAAc,YAAYX,CAAK,EAEjC,MACF,KAAO,CAEL,IAAMY,EAAU,IAAI/B,EAAUsB,EAAkBJ,EAAK,MAAME,CAAC,EAAG,EAAI,EACnEW,EAAQ,YAAYZ,CAAK,EACzBP,EAAK,EAAE,IAAIU,EAAkBS,CAAO,EACpCA,EAAQ,aAAanB,CAAI,EACzB,MACF,CACF,CAGKA,EAAK,IACRA,EAAK,EAAI,IAEXA,EAAK,YAAYO,CAAK,CACxB,CAEQ,iBACNX,EACAwB,EACAtB,EACAuB,EACA1B,EAAkB,CAElB,IAAMI,EAAsE,CAAC,CAAE,KAAM,KAAM,MAAAqB,EAAO,UAAAtB,CAAS,CAAE,EAE7G,KAAOC,EAAM,OAAS,GAAG,CACvB,GAAM,CAAE,KAAAC,EAAM,MAAAoB,EAAO,UAAAtB,CAAS,EAAKC,EAAM,IAAG,EAM5C,GAAIuB,GAA0BtB,EAAK,EAAE,WAAWJ,CAAI,GAAKI,EAAK,IAAMJ,EAAM,CACxE,QAAQ,IAAI,iDAAkDI,EAAK,EAAG,QAASJ,CAAI,EACnFI,EAAK,aAAaL,EAAQC,EAAM,GAAO,CAAC,EACxC,QACF,CAOA,GAJI0B,GAA0BtB,EAAK,EAAE,WAAWJ,CAAI,GAAKI,EAAK,IAAMJ,GAClE,QAAQ,IAAI,6DAA8DA,CAAI,EAG5EE,EAAY,EACd,SAGF,GAAIE,EAAK,EAAG,CACV,GAAM,CAAE,EAAAC,EAAGC,CAAS,EAAKF,EACzB,GAAIC,IACEG,GAAuBR,EAAMK,EAAGoB,CAAiB,EAAE,YACrD1B,EAAOM,CAAC,EAAI,CAAA,GAEVE,GAAeR,EAAQM,CAAC,IAAM,QAAaC,EAAO,KAAO,GAAG,CAC9D,IAAMG,EAAO,IAAI,IAAIV,EAAOM,CAAC,CAAC,EAE9B,QAAWP,KAASQ,EAClBG,EAAK,IAAIX,CAAK,EAEhBC,EAAOM,CAAC,EAAI,MAAM,KAAKI,CAAI,CAC7B,CAEJ,CAEA,GAAIe,GAASxB,EAAK,OAChB,SAGF,IAAM2B,EAAc3B,EAAKwB,CAAK,EAG9B,GAAIpB,EAAK,EAAE,IAAIuB,CAAW,EAAG,CAC3B,IAAMZ,EAAYX,EAAK,EAAE,IAAIuB,CAAW,EACxCxB,EAAM,KAAK,CAAE,KAAMY,EAAW,MAAOS,EAAQ,EAAG,UAAAtB,CAAS,CAAE,CAC7D,CAGAC,EAAM,KAAK,CAAE,KAAMC,EAAM,MAAOoB,EAAQ,EAAG,UAAWtB,EAAY,CAAC,CAAE,EAGrE,OAAW,CAAC0B,EAAWb,CAAS,IAAKX,EAAK,EAExCD,EAAM,KAAK,CAAE,KAAMY,EAAW,MAAOS,EAAO,UAAWtB,EAAY,CAAC,CAAE,EAGlE0B,IAAcD,GAChBxB,EAAM,KAAK,CAAE,KAAMY,EAAW,MAAOS,EAAQ,EAAG,UAAWtB,EAAY,CAAC,CAAE,CAGhF,CACF,CAEO,KAAK2B,EAAkB,CAC5B,GAAM,CAAE,KAAA7B,EAAM,MAAAC,EAAO,UAAAC,CAAS,EAAK2B,EACnC,GAAI3B,GAAa,CAACD,EAAO,CACvB,IAAMF,EAAqB,CAAA,EAC3B,YAAK,iBAAiBC,EAAM,EAAGE,EAAWA,EAAWH,CAAM,EACpDA,CACT,KAAO,CACL,IAAIK,EAAkB,KAClBQ,EAAI,EACFkB,EAAa9B,EAAK,OAExB,KAAOY,EAAIkB,GAAY,CACrB,IAAMF,EAAY5B,EAAKY,CAAC,EAClBG,EAAYX,EAAK,EAAE,IAAIwB,CAAS,EAEtC,GAAIb,EAAW,CACb,IAAMC,EAAYD,EAAU,EACtBE,EAAkBD,EAAU,OAC9BE,EAAI,EAGR,KAAOA,EAAID,GAAmBL,EAAIM,EAAIY,GAAcd,EAAUE,CAAC,IAAMlB,EAAKY,EAAIM,CAAC,GAC7EA,IAGF,GAAIA,IAAMD,EAERb,EAAOW,EACPH,GAAKM,UACIN,EAAIM,IAAMY,EAGnB,GAAIZ,IAAMY,EAAalB,EAAG,CAExB,GAAIX,EAEF,MAAO,CAAA,EACF,CAEL,IAAMF,EAAqB,CAAA,EAE3B,OAAAgB,EAAU,aAAahB,EAAQC,EAAMC,EAAOC,CAAS,EAC9CH,CACT,CACF,KAEE,OAAO,CAAA,MAIT,OAAO,CAAA,CAEX,KAEE,OAAO,CAAA,CAEX,CAGA,IAAMA,EAAqB,CAAA,EAC3B,OAAAK,EAAK,aAAaL,EAAQC,EAAMC,EAAOC,CAAS,EACzCH,CACT,CACF,CAEO,SAASC,EAAY,CAC1B,IAAII,EAAkB,KAClBQ,EAAI,EACFkB,EAAa9B,EAAK,OAExB,KAAOY,EAAIkB,GAAY,CACrB,IAAMF,EAAY5B,EAAKY,CAAC,EAClBG,EAAYX,EAAK,EAAE,IAAIwB,CAAS,EAEtC,GAAIb,EAAW,CACb,IAAMC,EAAYD,EAAU,EACtBE,EAAkBD,EAAU,OAC9BE,EAAI,EAER,KAAOA,EAAID,GAAmBL,EAAIM,EAAIY,GAAcd,EAAUE,CAAC,IAAMlB,EAAKY,EAAIM,CAAC,GAC7EA,IAGF,GAAIA,EAAID,EACN,MAAO,GAGTL,GAAKK,EACLb,EAAOW,CACT,KACE,OAAO,EAEX,CACA,MAAO,EACT,CAEO,WAAWf,EAAY,CAC5B,GAAI,CAACA,EACH,MAAO,GAGT,IAAII,EAAkB,KAChB0B,EAAa9B,EAAK,OAClBG,EAAoD,CAAA,EAC1D,QAASS,EAAI,EAAGA,EAAIkB,EAAYlB,IAAK,CACnC,IAAMgB,EAAY5B,EAAKY,CAAC,EACxB,GAAIR,EAAK,EAAE,IAAIwB,CAAS,EAAG,CACzB,IAAMb,EAAYX,EAAK,EAAE,IAAIwB,CAAS,EACtCzB,EAAM,KAAK,CAAE,OAAQC,EAAM,UAAAwB,CAAS,CAAE,EACtChB,GAAKG,EAAU,EAAE,OAAS,EAC1BX,EAAOW,CACT,KACE,OAAO,EAEX,CAOA,IAJAX,EAAK,EAAE,MAAK,EACZA,EAAK,EAAI,GAGFD,EAAM,OAAS,GAAKC,EAAK,EAAE,OAAS,GAAK,CAACA,EAAK,GAAKA,EAAK,EAAE,OAAS,GAAG,CAC5E,GAAM,CAAE,OAAAP,EAAQ,UAAA+B,CAAS,EAAKzB,EAAM,IAAG,EACvCN,EAAO,EAAE,OAAO+B,CAAS,EACzBxB,EAAOP,CACT,CAEA,MAAO,EACT,CAEO,qBAAqBG,EAAcF,EAA2BG,EAAQ,GAAI,CAC/E,GAAI,CAACD,EACH,MAAO,GAGT,IAAII,EAAkB,KAChB0B,EAAa9B,EAAK,OACxB,QAASY,EAAI,EAAGA,EAAIkB,EAAYlB,IAAK,CACnC,IAAMgB,EAAY5B,EAAKY,CAAC,EACxB,GAAIR,EAAK,EAAE,IAAIwB,CAAS,EAAG,CACzB,IAAMb,EAAYX,EAAK,EAAE,IAAIwB,CAAS,EACtChB,GAAKG,EAAU,EAAE,OAAS,EAC1BX,EAAOW,EAEHd,GAASG,EAAK,IAAMJ,GAGtBI,EAAK,eAAeN,CAAK,CAE7B,KACE,OAAO,EAEX,CACA,MAAO,EACT,CAEQ,OAAO,gBAAgBiC,EAAWC,EAAS,CACjD,IAAMC,EAAM,KAAK,IAAIF,EAAE,OAAQC,EAAE,MAAM,EACnCpB,EAAI,EACR,KAAOA,EAAIqB,GAAOF,EAAE,WAAWnB,CAAC,IAAMoB,EAAE,WAAWpB,CAAC,GAClDA,IAEF,OAAOmB,EAAE,MAAM,EAAGnB,CAAC,CACrB,CAEO,QAAM,CACX,MAAO,CACL,EAAG,KAAK,EACR,EAAG,KAAK,EACR,EAAG,KAAK,EACR,EAAG,KAAK,EACR,EAAG,MAAM,KAAK,KAAK,CAAC,EACpB,EAAG,MAAM,KAAK,KAAK,GAAG,QAAO,CAAE,GAAG,IAAI,CAAC,CAACnB,EAAKW,CAAI,IAAM,CAACX,EAAKW,EAAK,OAAM,CAAE,CAAC,EAE/E,CAEO,OAAO,SAAS8B,EAAS,CAC9B,IAAM9B,EAAO,IAAIZ,EAAU0C,EAAK,EAAGA,EAAK,EAAGA,EAAK,CAAC,EACjD,OAAA9B,EAAK,EAAI8B,EAAK,EACd9B,EAAK,EAAI,IAAI,IAAI8B,EAAK,CAAC,EACvB9B,EAAK,EAAI,IAAI,IAAI8B,GAAM,GAAG,IAAI,CAAC,CAACzC,EAAK0C,CAAQ,IAAqB,CAAC1C,EAAKD,EAAU,SAAS2C,CAAQ,CAAC,CAAC,GAAK,CAAA,CAAE,EACrG/B,CACT,GAGWgC,EAAP,MAAOC,UAAkB9C,CAAS,CACtC,aAAA,CACE,MAAM,GAAI,GAAI,EAAK,CACrB,CAEO,OAAO,SAAS2C,EAAS,CAC9B,IAAMI,EAAO,IAAID,EACjB,OAAAC,EAAK,EAAIJ,EAAK,EACdI,EAAK,EAAIJ,EAAK,EACdI,EAAK,EAAIJ,EAAK,EACdI,EAAK,EAAIJ,EAAK,EACdI,EAAK,EAAI,IAAI,IAAIJ,EAAK,CAAC,EACvBI,EAAK,EAAI,IAAI,IAAIJ,GAAM,GAAG,IAAI,CAAC,CAACzC,EAAK0C,CAAQ,IAAqB,CAAC1C,EAAKF,EAAU,SAAS4C,CAAQ,CAAC,CAAC,GAAK,CAAA,CAAE,EACrGG,CACT,CAEO,QAAM,CACX,OAAO,MAAM,OAAM,CACrB,GEhbF,IAAAC,GAAA,GAAAC,EAAAD,GAAA,aAAAE,IAGA,IAAMC,GAAN,MAAMC,CAAO,CAOX,YAAYC,EAAcC,EAA6B,CANvDC,EAAA,cACAA,EAAA,eACAA,EAAA,aACAA,EAAA,cACAA,EAAA,eAGE,KAAK,MAAQF,EACb,KAAK,OAAS,IAAI,IAAIC,CAAM,EAC5B,KAAK,KAAO,KACZ,KAAK,MAAQ,KACb,KAAK,OAAS,IAChB,CAEA,QAAM,CACJ,MAAO,CACL,MAAO,KAAK,MACZ,OAAQ,MAAM,KAAK,KAAK,MAAM,EAC9B,KAAM,KAAK,KAAO,KAAK,KAAK,OAAM,EAAK,KACvC,MAAO,KAAK,MAAQ,KAAK,MAAM,OAAM,EAAK,KAE9C,CAEA,OAAO,SAASE,EAAWC,EAA4B,KAAI,CACzD,IAAMC,EAAO,IAAIN,EAAQI,EAAK,MAAOA,EAAK,MAAM,EAChD,OAAAE,EAAK,OAASD,EACVD,EAAK,OACPE,EAAK,KAAON,EAAQ,SAASI,EAAK,KAAME,CAAI,GAE1CF,EAAK,QACPE,EAAK,MAAQN,EAAQ,SAASI,EAAK,MAAOE,CAAI,GAEzCA,CACT,GAGWC,EAAP,MAAOC,CAAO,CAIlB,aAAA,CAHAL,EAAA,aACAA,EAAA,gBAGE,KAAK,KAAO,KACZ,KAAK,QAAU,IAAI,GACrB,CAEQ,YAAYF,EAAY,CAC9B,MAAO,GAAGA,EAAM,GAAG,IAAIA,EAAM,GAAG,EAClC,CAEA,OAAOA,EAAcC,EAA4B,CAC/C,IAAMO,EAAW,KAAK,YAAYR,CAAK,EACjCS,EAAe,KAAK,QAAQ,IAAID,CAAQ,EAC9C,GAAIC,EAAc,CAChBR,EAAO,QAASS,GAAOD,EAAa,OAAO,IAAIC,CAAE,CAAC,EAClD,MACF,CAEA,IAAMC,EAAU,IAAIb,GAAQE,EAAOC,CAAM,EAGzC,GAFA,KAAK,QAAQ,IAAIO,EAAUG,CAAO,EAE9B,KAAK,MAAQ,KAAM,CACrB,KAAK,KAAOA,EACZ,MACF,CAEA,IAAIN,EAAO,KAAK,KACZO,EAAQ,EAGZ,OAAa,CAGX,GAFaA,EAAQ,IAER,EACX,GAAIZ,EAAM,IAAMK,EAAK,MAAM,IAAK,CAC9B,GAAIA,EAAK,MAAQ,KAAM,CACrBA,EAAK,KAAOM,EACZA,EAAQ,OAASN,EACjB,MACF,CACAA,EAAOA,EAAK,IACd,KAAO,CACL,GAAIA,EAAK,OAAS,KAAM,CACtBA,EAAK,MAAQM,EACbA,EAAQ,OAASN,EACjB,MACF,CACAA,EAAOA,EAAK,KACd,SAEIL,EAAM,IAAMK,EAAK,MAAM,IAAK,CAC9B,GAAIA,EAAK,MAAQ,KAAM,CACrBA,EAAK,KAAOM,EACZA,EAAQ,OAASN,EACjB,MACF,CACAA,EAAOA,EAAK,IACd,KAAO,CACL,GAAIA,EAAK,OAAS,KAAM,CACtBA,EAAK,MAAQM,EACbA,EAAQ,OAASN,EACjB,MACF,CACAA,EAAOA,EAAK,KACd,CAGFO,GACF,CACF,CAEA,SAASZ,EAAY,CACnB,IAAMQ,EAAW,KAAK,YAAYR,CAAK,EACvC,OAAO,KAAK,QAAQ,IAAIQ,CAAQ,CAClC,CAEA,uBAAuBR,EAAY,CACjC,IAAMQ,EAAW,KAAK,YAAYR,CAAK,EACjCK,EAAO,KAAK,QAAQ,IAAIG,CAAQ,EACtC,OAAIH,EACK,MAAM,KAAKA,EAAK,MAAM,EAExB,IACT,CAEA,cAAcL,EAAca,EAAyB,CACnD,IAAML,EAAW,KAAK,YAAYR,CAAK,EACjCK,EAAO,KAAK,QAAQ,IAAIG,CAAQ,EAClCH,IACFA,EAAK,OAAO,OAAOQ,CAAK,EACpBR,EAAK,OAAO,OAAS,IACvB,KAAK,QAAQ,OAAOG,CAAQ,EAC5B,KAAK,WAAWH,CAAI,GAG1B,CAEQ,WAAWA,EAAa,CAC9B,IAAMD,EAASC,EAAK,OACdS,EAAQT,EAAK,KAAOA,EAAK,KAAOA,EAAK,MACvCS,IACFA,EAAM,OAASV,GAGbA,EACEA,EAAO,OAASC,EAClBD,EAAO,KAAOU,EACLV,EAAO,QAAUC,IAC1BD,EAAO,MAAQU,IAGjB,KAAK,KAAOA,EACR,KAAK,OACP,KAAK,KAAK,OAAS,MAGzB,CAEA,eACEC,EACAC,EACAC,EAAY,GACZC,EAAsB,MACtBC,EAAgB,GAAK,CAErB,IAAMC,EAAaD,EAAgBZ,EAAQ,iBAAmBA,EAAQ,kBAChEc,EAA2D,CAAC,CAAE,KAAM,KAAK,KAAM,MAAO,CAAC,CAAE,EACzFC,EAA4B,CAAA,EAElC,KAAOD,EAAM,OAAS,GAAG,CACvB,GAAM,CAAE,KAAAhB,EAAM,MAAAO,CAAK,EAAKS,EAAM,IAAG,EACjC,GAAIhB,GAAQ,KAAM,SAElB,IAAMkB,EAAOH,EAAWL,EAAQV,EAAK,KAAK,GAEtCY,EAAYM,GAAQP,EAASO,EAAOP,IACtCM,EAAO,KAAK,CAAE,MAAOjB,EAAK,MAAO,OAAQ,MAAM,KAAKA,EAAK,MAAM,CAAC,CAAE,EAGhEA,EAAK,MAAQ,MACfgB,EAAM,KAAK,CAAE,KAAMhB,EAAK,KAAM,MAAOO,EAAQ,CAAC,CAAE,EAE9CP,EAAK,OAAS,MAChBgB,EAAM,KAAK,CAAE,KAAMhB,EAAK,MAAO,MAAOO,EAAQ,CAAC,CAAE,CAErD,CAEA,OAAIM,GACFI,EAAO,KAAK,CAACE,EAAGC,IAAK,CACnB,IAAMC,EAAQN,EAAWL,EAAQS,EAAE,KAAK,EAClCG,EAAQP,EAAWL,EAAQU,EAAE,KAAK,EACxC,OAAOP,EAAK,YAAW,IAAO,MAAQQ,EAAQC,EAAQA,EAAQD,CAChE,CAAC,EAGIJ,CACT,CAEA,gBACEM,EACAX,EAAY,GACZC,EAAsB,KACtBC,EAAgB,GAAK,CAErB,IAAME,EAAsB,CAAC,CAAE,KAAM,KAAK,KAAM,MAAO,CAAC,CAAE,EACpDC,EAA4B,CAAA,EAElC,KAAOD,EAAM,OAAS,GAAG,CACvB,GAAM,CAAE,KAAAhB,EAAM,MAAAO,CAAK,EAAKS,EAAM,IAAG,EACjC,GAAIhB,GAAQ,KAAM,SAEdA,EAAK,MAAQ,MACfgB,EAAM,KAAK,CAAE,KAAMhB,EAAK,KAAM,MAAOO,EAAQ,CAAC,CAAE,EAE9CP,EAAK,OAAS,MAChBgB,EAAM,KAAK,CAAE,KAAMhB,EAAK,MAAO,MAAOO,EAAQ,CAAC,CAAE,EAGnD,IAAMiB,EAAkBtB,EAAQ,iBAAiBqB,EAASvB,EAAK,KAAK,GAE/DwB,GAAmBZ,GAAe,CAACY,GAAmB,CAACZ,IAC1DK,EAAO,KAAK,CAAE,MAAOjB,EAAK,MAAO,OAAQ,MAAM,KAAKA,EAAK,MAAM,CAAC,CAAE,CAEtE,CAEA,IAAMyB,EAAWvB,EAAQ,yBAAyBqB,CAAO,EAEzD,GAAIV,EAAM,CACR,IAAME,EAAaD,EAAgBZ,EAAQ,iBAAmBA,EAAQ,kBACtEe,EAAO,KAAK,CAACE,EAAGC,IAAK,CACnB,IAAMC,EAAQN,EAAWU,EAAUN,EAAE,KAAK,EACpCG,EAAQP,EAAWU,EAAUL,EAAE,KAAK,EAC1C,OAAOP,EAAM,YAAW,IAAO,MAAQQ,EAAQC,EAAQA,EAAQD,CACjE,CAAC,CACH,CAEA,OAAOJ,CACT,CAEA,QAAM,CACJ,MAAO,CACL,KAAM,KAAK,KAAO,KAAK,KAAK,OAAM,EAAK,KAE3C,CAEA,OAAO,SAASnB,EAAS,CACvB,IAAM4B,EAAO,IAAIxB,EACjB,OAAIJ,EAAK,OACP4B,EAAK,KAAOjC,GAAQ,SAASK,EAAK,IAAI,EACtC4B,EAAK,aAAaA,EAAK,IAAI,GAEtBA,CACT,CAEQ,aAAa1B,EAAuB,CAC1C,GAAIA,GAAQ,KAAM,OAClB,IAAMG,EAAW,KAAK,YAAYH,EAAK,KAAK,EAC5C,KAAK,QAAQ,IAAIG,EAAUH,CAAI,EAC3BA,EAAK,MACP,KAAK,aAAaA,EAAK,IAAI,EAEzBA,EAAK,OACP,KAAK,aAAaA,EAAK,KAAK,CAEhC,CAEA,OAAO,yBAAyBuB,EAAgB,CAC9C,IAAII,EAAY,EACZC,EAAY,EACZC,EAAY,EAEVC,EAAgBP,EAAQ,OAC9B,QAASQ,EAAI,EAAGC,EAAIF,EAAgB,EAAGC,EAAID,EAAeE,EAAID,IAAK,CACjE,IAAME,EAAKV,EAAQQ,CAAC,EAAE,IAChBG,EAAKX,EAAQQ,CAAC,EAAE,IAChBI,EAAKZ,EAAQS,CAAC,EAAE,IAChBI,EAAKb,EAAQS,CAAC,EAAE,IAEhBK,EAAcJ,EAAKG,EAAKD,EAAKD,EACnCP,GAAaU,EAEbT,IAAcK,EAAKE,GAAME,EACzBR,IAAcK,EAAKE,GAAMC,CAC3B,CAEAV,GAAa,EACb,IAAMW,EAAqB,EAAIX,EAE/B,OAAAC,GAAaU,EACbT,GAAaS,EAEN,CAAE,IAAKV,EAAW,IAAKC,CAAS,CACzC,CAEA,OAAO,iBAAiBN,EAAkB5B,EAAY,CACpD,IAAI4C,EAAW,GACTC,EAAI7C,EAAM,IACV8C,EAAI9C,EAAM,IACVmC,EAAgBP,EAAQ,OAC9B,QAASQ,EAAI,EAAGC,EAAIF,EAAgB,EAAGC,EAAID,EAAeE,EAAID,IAAK,CACjE,IAAME,EAAKV,EAAQQ,CAAC,EAAE,IAChBG,EAAKX,EAAQQ,CAAC,EAAE,IAChBI,EAAKZ,EAAQS,CAAC,EAAE,IAChBI,EAAKb,EAAQS,CAAC,EAAE,IAEJE,EAAKO,GAAML,EAAKK,GAAKD,GAAML,EAAKF,IAAOQ,EAAIP,IAAQE,EAAKF,GAAMD,IACjEM,EAAW,CAACA,EAC7B,CAEA,OAAOA,CACT,CAEA,OAAO,kBAAkBG,EAAeC,EAAa,CACnD,IAAMC,EAAI,KAAK,GAAK,IACdC,EAAOH,EAAO,IAAME,EACpBE,EAAOH,EAAO,IAAMC,EACpBG,GAAYJ,EAAO,IAAMD,EAAO,KAAOE,EACvCI,GAAYL,EAAO,IAAMD,EAAO,KAAOE,EAEvCzB,EACJ,KAAK,IAAI4B,EAAW,CAAC,EAAI,KAAK,IAAIA,EAAW,CAAC,EAC9C,KAAK,IAAIF,CAAI,EAAI,KAAK,IAAIC,CAAI,EAAI,KAAK,IAAIE,EAAW,CAAC,EAAI,KAAK,IAAIA,EAAW,CAAC,EAGlF,MAAO,SAFG,EAAI,KAAK,MAAM,KAAK,KAAK7B,CAAC,EAAG,KAAK,KAAK,EAAIA,CAAC,CAAC,EAGzD,CAEA,OAAO,iBAAiBuB,EAAeC,EAAa,CAElD,IAAMM,EAAI,qBACJ7B,GAAK,EAAI6B,GAAK,QAEdL,EAAI,KAAK,GAAK,IACdC,EAAOH,EAAO,IAAME,EACpBE,EAAOH,EAAO,IAAMC,EACpBI,GAAYL,EAAO,IAAMD,EAAO,KAAOE,EAEvCM,EAAK,KAAK,MAAM,EAAID,GAAK,KAAK,IAAIJ,CAAI,CAAC,EACvCM,EAAK,KAAK,MAAM,EAAIF,GAAK,KAAK,IAAIH,CAAI,CAAC,EAEvCM,EAAQ,KAAK,IAAIF,CAAE,EACnBG,EAAQ,KAAK,IAAIH,CAAE,EACnBI,EAAQ,KAAK,IAAIH,CAAE,EACnBI,EAAQ,KAAK,IAAIJ,CAAE,EAErBK,EAASR,EACTS,EACAC,EAAiB,IACjBC,EACAC,EACAC,EACAC,EACAC,EACAC,EAEJ,EAAG,CACD,IAAMC,EAAY,KAAK,IAAIT,CAAM,EAC3BU,EAAY,KAAK,IAAIV,CAAM,EAOjC,GALAG,EAAW,KAAK,KACdJ,EAAQU,GAAaV,EAAQU,IAC1BZ,EAAQC,EAAQF,EAAQG,EAAQW,IAAcb,EAAQC,EAAQF,EAAQG,EAAQW,EAAU,EAGzFP,IAAa,EAAG,MAAO,GAE3BC,EAAWR,EAAQE,EAAQD,EAAQE,EAAQW,EAC3CL,EAAQ,KAAK,MAAMF,EAAUC,CAAQ,EAErCE,EAAYT,EAAQE,EAAQU,EAAaN,EACzCI,EAAY,EAAID,EAAWA,EAC3BE,EAAaJ,EAAY,EAAIR,EAAQE,EAASS,EAE1C,MAAMC,CAAU,IAAGA,EAAa,GAEpC,IAAMG,EAAKlB,EAAI,GAAMc,GAAa,EAAId,GAAK,EAAI,EAAIc,IACnDN,EAAaD,EACbA,EACER,GACC,EAAImB,GACHlB,EACAa,GACCD,EAAQM,EAAIR,GAAYK,EAAaG,EAAIP,GAAY,GAAK,EAAII,EAAaA,IAClF,OAAS,KAAK,IAAIR,EAASC,CAAU,EAAI,OAAS,EAAEC,EAAiB,GAErE,GAAIA,IAAmB,EACrB,MAAO,KAGT,IAAMU,EAAYL,GAAa,QAAI,QAAI3C,EAAIA,IAAOA,EAAIA,GAChDiD,EAAI,EAAKD,EAAW,OAAU,KAAOA,GAAY,KAAOA,GAAY,IAAM,IAAMA,KAChFE,EAAKF,EAAW,MAAS,IAAMA,GAAY,KAAOA,GAAY,GAAK,GAAKA,KAExEG,EACJD,EACAX,GACCK,EACEM,EAAI,GACFV,GAAY,GAAK,EAAII,EAAaA,GAChCM,EAAI,EAAKN,GAAc,GAAK,EAAIL,EAAWA,IAAa,GAAK,EAAIK,EAAaA,KAIvF,OAFU5C,EAAIiD,GAAKR,EAAQU,EAG7B,GC3aF,IAAAC,GAAA,GAAAC,EAAAD,GAAA,cAAAE,IAAM,IAAOC,EAAP,MAAOC,CAAQ,CAInB,aAAA,CAHAC,EAAA,aACAA,EAAA,cAGE,KAAK,KAAO,IAAI,IAChB,KAAK,MAAQ,IAAI,GACnB,CAEA,OAAOC,EAAUC,EAAa,CACxBA,EACF,KAAK,KAAK,IAAID,CAAK,EAEnB,KAAK,MAAM,IAAIA,CAAK,CAExB,CAEA,OAAOA,EAAUC,EAAa,CACxBA,EACF,KAAK,KAAK,OAAOD,CAAK,EAEtB,KAAK,MAAM,OAAOA,CAAK,CAE3B,CAEA,SAAO,CACL,OAAO,KAAK,KAAK,KAAO,KAAK,MAAM,IACrC,CAEA,QAAM,CACJ,MAAO,CACL,KAAM,MAAM,KAAK,KAAK,IAAI,EAC1B,MAAO,MAAM,KAAK,KAAK,KAAK,EAEhC,CAEA,OAAO,SAAYE,EAAS,CAC1B,IAAMC,EAAO,IAAIL,EACjB,OAAAK,EAAK,KAAO,IAAI,IAAID,EAAK,IAAI,EAC7BC,EAAK,MAAQ,IAAI,IAAID,EAAK,KAAK,EACxBC,CACT,GC0EI,SAAUC,GACdC,EACAC,EACAC,EACAC,EACAC,EACA,CAAE,EAAAC,EAAG,EAAAC,EAAG,EAAAC,CAAC,EAAwB,CAGjC,OADY,KAAK,IAAI,GAAKL,EAAYD,EAAgB,KAAQA,EAAgB,GAAI,GACnEM,EAAIP,GAAMK,EAAI,KAAQL,EAAKK,GAAK,EAAIC,EAAKA,EAAIH,EAAeC,GAC7E,CCrHA,IAAAI,GAAA,GAAAC,EAAAD,GAAA,wBAAAE,GAAA,gBAAAC,EAAA,uBAAAC,GAAA,iBAAAC,KAAO,IAAMC,GAAqB,GAErBC,EAAP,MAAOC,CAAW,CAGtB,YAAmBC,EAAY,CAAZC,EAAA,aAFXA,EAAA,eAA4D,IAAI,KAErD,KAAA,KAAAD,CAAe,CAElC,IAAIE,EAAwCC,EAAqB,CACzDA,aAAiB,eACrBA,EAAQ,IAAI,aAAaA,CAAK,GAGhC,IAAMC,EAAYC,GAAaF,EAAO,KAAK,IAAI,EAC/C,KAAK,QAAQ,IAAID,EAAoB,CAACE,EAAWD,CAAK,CAAC,CACzD,CAEA,OAAOD,EAAsC,CAC3C,KAAK,QAAQ,OAAOA,CAAkB,CACxC,CAEA,KACEI,EACAC,EACAC,EAAoD,CAEpD,OAAMF,aAAkB,eACtBA,EAAS,IAAI,aAAaA,CAAM,GAGlBG,GAAmBH,EAAQE,EAAiB,KAAK,QAAS,KAAK,KAAMD,CAAU,CAGjG,CAEO,QAAM,CACX,IAAMG,EAAyD,CAAA,EAE/D,OAAW,CAACC,EAAI,CAACP,EAAWE,CAAM,CAAC,IAAK,KAAK,QAC3CI,EAAQ,KAAK,CAACC,EAAI,CAACP,EAAW,MAAM,KAAKE,CAAM,CAAC,CAAC,CAAC,EAGpD,MAAO,CACL,KAAM,KAAK,KACX,QAAAI,EAEJ,CAEO,OAAO,SAASE,EAAS,CAC9B,IAAMC,EAAgFD,EAEhFE,EAAQ,IAAIf,EAAYc,EAAI,IAAI,EACtC,OAAW,CAACF,EAAI,CAACP,EAAWE,CAAM,CAAC,IAAKO,EAAI,QAC1CC,EAAM,QAAQ,IAAIH,EAAI,CAACP,EAAW,IAAI,aAAaE,CAAM,CAAC,CAAC,EAG7D,OAAOQ,CACT,GAGI,SAAUT,GAAaC,EAAsBS,EAAoB,CACrE,IAAIX,EAAY,EAChB,QAASY,EAAI,EAAGA,EAAID,EAAcC,IAChCZ,GAAaE,EAAOU,CAAC,EAAIV,EAAOU,CAAC,EAEnC,OAAO,KAAK,KAAKZ,CAAS,CAC5B,CAGM,SAAUK,GACdQ,EACAC,EACAR,EACAS,EACAC,EAAS,CAET,IAAMC,EAAkBhB,GAAaY,EAAcE,CAAM,EAEnDG,EAAkC,CAAA,EAElCC,EAAOL,GAAcR,EAAQ,KAAI,EAEvC,QAAWc,KAAYD,EAAM,CAC3B,IAAME,EAAQf,EAAQ,IAAIc,CAAQ,EAClC,GAAI,CAACC,EACH,SAEF,IAAMrB,EAAYqB,EAAM,CAAC,EACnBnB,EAASmB,EAAM,CAAC,EAElBC,EAAa,EACjB,QAASV,EAAI,EAAGA,EAAIG,EAAQH,IAC1BU,GAAcT,EAAaD,CAAC,EAAIV,EAAOU,CAAC,EAG1C,IAAMT,EAAamB,GAAcL,EAAkBjB,GAE/CG,GAAca,GAChBE,EAAe,KAAK,CAACE,EAAUjB,CAAU,CAAC,CAE9C,CAEA,OAAOe,CACT,CRhCM,SAAUK,GACdC,EACAC,EACAC,EACAC,EACAC,EAAiB,CAEjB,IAAMC,EAAaC,EAAsBN,EAAM,4BAA6BE,CAAE,EAE9EF,EAAM,eAAeC,CAAI,IAAMD,EAAM,eAAeC,CAAI,GAAK,IAAMG,EAAY,GAAKD,EAAO,QAAUC,EACrGJ,EAAM,aAAaC,CAAI,EAAEI,CAAU,EAAIF,EAAO,OAC9CH,EAAM,YAAYC,CAAI,EAAEI,CAAU,EAAI,CAAA,CACxC,CAEM,SAAUE,GACdP,EACAC,EACAC,EACAC,EACAK,EAAa,CAEb,IAAIC,EAAiB,EAErB,QAAWC,KAAKP,EACVO,IAAMF,GACRC,IAIJ,IAAMJ,EAAaC,EAAsBN,EAAM,4BAA6BE,CAAE,EACxES,EAAKF,EAAiBN,EAAO,OAEnCH,EAAM,YAAYC,CAAI,EAAEI,CAAU,EAAGG,CAAK,EAAIG,EAExCH,KAASR,EAAM,iBAAiBC,CAAI,IACxCD,EAAM,iBAAiBC,CAAI,EAAEO,CAAK,EAAI,GAIxCR,EAAM,iBAAiBC,CAAI,EAAEO,CAAK,GAAKR,EAAM,iBAAiBC,CAAI,EAAEO,CAAK,GAAK,GAAK,CACrF,CAEM,SAAUI,GAA8BZ,EAAcC,EAAcC,EAAgBE,EAAiB,CACzG,IAAMC,EAAaC,EAAsBN,EAAM,4BAA6BE,CAAE,EAE1EE,EAAY,EACdJ,EAAM,eAAeC,CAAI,GACtBD,EAAM,eAAeC,CAAI,EAAIG,EAAYJ,EAAM,aAAaC,CAAI,EAAEI,CAAU,IAAOD,EAAY,GAElGJ,EAAM,eAAeC,CAAI,EAAI,OAE/BD,EAAM,aAAaC,CAAI,EAAEI,CAAU,EAAI,OACvCL,EAAM,YAAYC,CAAI,EAAEI,CAAU,EAAI,MACxC,CAEM,SAAUQ,GAA2Bb,EAAcC,EAAcO,EAAa,CAClFR,EAAM,iBAAiBC,CAAI,EAAEO,CAAK,GACpC,CAEM,SAAUM,GACdC,EACAC,EACAC,EACAjB,EACAkB,EAAS,GAAE,CAENlB,IACHA,EAAQ,CACN,4BAAAgB,EACA,QAAS,CAAA,EACT,cAAe,CAAA,EACf,qBAAsB,CAAA,EACtB,8BAA+B,CAAA,EAC/B,YAAa,CAAA,EACb,iBAAkB,CAAA,EAClB,eAAgB,CAAA,EAChB,aAAc,CAAA,IAIlB,OAAW,CAACf,EAAMkB,CAAI,IAAK,OAAO,QAAwBF,CAAM,EAAG,CACjE,IAAMG,EAAO,GAAGF,CAAM,GAAGA,EAAS,IAAM,EAAE,GAAGjB,CAAI,GAEjD,GAAI,OAAOkB,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAG,CAEpDL,GAAOC,EAAOC,EAA6BG,EAAMnB,EAAOoB,CAAI,EAC5D,QACF,CAEA,GAAIC,EAAaF,CAAI,EACnBnB,EAAM,qBAAqB,KAAKoB,CAAI,EACpCpB,EAAM,8BAA8BoB,CAAI,EAAID,EAC5CnB,EAAM,cAAcoB,CAAI,EAAI,CAC1B,KAAM,SACN,KAAM,IAAIE,EAAYC,GAAcJ,CAAI,CAAC,EACzC,QAAS,QAEN,CACL,IAAMK,EAAU,KAAK,KAAKL,CAAc,EACxC,OAAQA,EAAM,CACZ,IAAK,UACL,IAAK,YACHnB,EAAM,QAAQoB,CAAI,EAAI,CAAE,KAAM,OAAQ,KAAM,IAAIK,EAAY,QAAAD,CAAO,EACnE,MACF,IAAK,SACL,IAAK,WACHxB,EAAM,QAAQoB,CAAI,EAAI,CAAE,KAAM,MAAO,KAAM,IAAIM,EAAoC,EAAG,CAAA,CAAE,EAAG,QAAAF,CAAO,EAClG,MACF,IAAK,SACL,IAAK,WACHxB,EAAM,QAAQoB,CAAI,EAAI,CAAE,KAAM,QAAS,KAAM,IAAIO,EAAa,QAAAH,CAAO,EACrExB,EAAM,eAAeoB,CAAI,EAAI,EAC7BpB,EAAM,YAAYoB,CAAI,EAAI,CAAA,EAC1BpB,EAAM,iBAAiBoB,CAAI,EAAI,CAAA,EAC/BpB,EAAM,aAAaoB,CAAI,EAAI,CAAA,EAC3B,MACF,IAAK,OACL,IAAK,SACHpB,EAAM,QAAQoB,CAAI,EAAI,CAAE,KAAM,OAAQ,KAAM,IAAIQ,EAAY,QAAAJ,CAAO,EACnE,MACF,IAAK,WACHxB,EAAM,QAAQoB,CAAI,EAAI,CAAE,KAAM,MAAO,KAAM,IAAIS,EAAW,QAAAL,CAAO,EACjE,MACF,QACE,MAAMM,EAAY,sBAAuB,MAAM,QAAQX,CAAI,EAAI,QAAUA,EAAMC,CAAI,CACvF,CAEApB,EAAM,qBAAqB,KAAKoB,CAAI,EACpCpB,EAAM,8BAA8BoB,CAAI,EAAID,CAC9C,CACF,CAEA,OAAOnB,CACT,CAEA,SAAS+B,GACPC,EACAhC,EACAC,EACAI,EACA4B,EACAC,EACA9B,EACA+B,EAAuB,CAEvB,OAAQC,GAA0B,CAChC,GAAM,CAAE,KAAAjB,EAAM,KAAAkB,CAAI,EAAKrC,EAAM,QAAQC,CAAI,EACzC,OAAQkB,EAAM,CACZ,IAAK,OAAQ,CACXkB,EAAKD,EAAQ,OAAS,OAAO,EAAE,IAAI/B,CAAU,EAC7C,KACF,CACA,IAAK,MAAO,CACV,IAAMiC,EAAwBH,GAAS,uBAAyB,EAChEE,EAAK,OAAOD,EAAiB/B,EAAYiC,CAAqB,EAC9D,KACF,CACA,IAAK,QAAS,CACZ,IAAMnC,EAAS+B,EAAU,SAASE,EAAiBH,EAAUhC,EAAM,EAAK,EACxE+B,EAAe,8BAA8BhC,EAAOC,EAAMI,EAAYF,EAAQC,CAAS,EAEvF,QAAWI,KAASL,EAClB6B,EAAe,2BAA2BhC,EAAOC,EAAMI,EAAYF,EAAQK,CAAK,EAEhF6B,EAAK,OAAO7B,EAAOH,CAAU,EAG/B,KACF,CACA,IAAK,OAAQ,CACXgC,EAAK,OAAOD,EAA+B/B,CAAU,EACrD,KACF,CACA,IAAK,MAAO,CACVgC,EAAK,OAAOD,EAAiC,CAAC/B,CAAU,CAAC,EACzD,KACF,CACF,CACF,CACF,CAEM,SAAUkC,GACdP,EACAhC,EACAC,EACAC,EACAG,EACA+B,EACAI,EACAP,EACAC,EACA9B,EACA+B,EAAuB,CAEvB,GAAId,EAAamB,CAAU,EACzB,OAAOC,GAAazC,EAAOC,EAAMmC,EAAkClC,EAAIG,CAAU,EAGnF,IAAMqC,EAAeX,GACnBC,EACAhC,EACAC,EACAI,EACA4B,EACAC,EACA9B,EACA+B,CAAO,EAGT,GAAI,CAACQ,GAAYH,CAAU,EACzB,OAAOE,EAAaN,CAAK,EAG3B,IAAMQ,EAAWR,EACXS,EAAiBD,EAAS,OAChC,QAASE,EAAI,EAAGA,EAAID,EAAgBC,IAClCJ,EAAaE,EAASE,CAAC,CAAC,CAE5B,CAEM,SAAUL,GACdzC,EACAC,EACAmC,EACAlC,EACA6C,EAAsC,CAEtC/C,EAAM,cAAcC,CAAI,EAAE,KAAK,IAAI8C,EAAoBX,CAAK,CAC9D,CAEA,SAASY,GACPhB,EACAhC,EACAC,EACAC,EACAG,EACA+B,EACAI,EACAP,EACAC,EACA9B,EAAiB,CAEjB,GAAIiB,EAAamB,CAAU,EACzB,OAAAxC,EAAM,cAAcC,CAAI,EAAE,KAAK,OAAOI,CAAU,EACzC,GAGT,GAAM,CAAE,KAAAc,EAAM,KAAAkB,CAAI,EAAKrC,EAAM,QAAQC,CAAI,EACzC,OAAQkB,EAAM,CACZ,IAAK,MACH,OAAAkB,EAAK,eAAeD,EAAiB/B,CAAU,EACxC,GAET,IAAK,OACH,OAAAgC,EAAKD,EAAQ,OAAS,OAAO,EAAE,OAAO/B,CAAU,EACzC,GAET,IAAK,QAAS,CACZ,IAAMF,EAAS+B,EAAU,SAASE,EAAiBH,EAAUhC,CAAI,EAEjE+B,EAAe,8BAA8BhC,EAAOC,EAAMC,EAAIE,CAAS,EAEvE,QAAWI,KAASL,EAClB6B,EAAe,2BAA2BhC,EAAOC,EAAMO,CAAK,EAC5D6B,EAAK,qBAAqB7B,EAAOH,CAAU,EAG7C,MAAO,EACT,CACA,IAAK,OACH,OAAAgC,EAAK,eAAehC,EAAY+B,CAA6B,EACtD,GAET,IAAK,MACH,OAAAC,EAAK,cAAcD,EAAiC/B,CAAU,EACvD,EAEX,CACF,CAEM,SAAU4C,GACdjB,EACAhC,EACAC,EACAC,EACAG,EACA+B,EACAI,EACAP,EACAC,EACA9B,EAAiB,CAEjB,GAAI,CAACuC,GAAYH,CAAU,EACzB,OAAOQ,GACLhB,EACAhC,EACAC,EACAC,EACAG,EACA+B,EACAI,EACAP,EACAC,EACA9B,CAAS,EAIb,IAAM8C,EAAkBC,GAAaX,CAAiC,EAEhEI,EAAWR,EACXS,EAAiBD,EAAS,OAChC,QAASE,EAAI,EAAGA,EAAID,EAAgBC,IAClCE,GACEhB,EACAhC,EACAC,EACAC,EACAG,EACAuC,EAASE,CAAC,EACVI,EACAjB,EACAC,EACA9B,CAAS,EAIb,MAAO,EACT,CAEM,SAAUgD,GACdpD,EACAC,EACAoD,EACAC,EACAlD,EACAmD,EACAC,EACAC,EACAC,EACAC,EAA+D,CAE/D,IAAMC,EAAc,MAAM,KAAKN,CAAG,EAE5BO,EAAiB7D,EAAM,eAAeC,CAAI,EAC1C6D,EAAe9D,EAAM,aAAaC,CAAI,EACtC8D,EAAmB/D,EAAM,iBAAiBC,CAAI,EAC9C+D,EAAmBhE,EAAM,YAAYC,CAAI,EAGzCgE,EAAkB,OAAOF,EAAiBV,CAAI,GAAM,SAAYU,EAAiBV,CAAI,GAAK,EAAK,EAG/Fa,EAAoBN,EAAY,OACtC,QAASO,EAAI,EAAGA,EAAID,EAAmBC,IAAK,CAC1C,IAAM9D,EAAauD,EAAYO,CAAC,EAChC,GAAIT,GAAmB,CAACA,EAAgB,IAAIrD,CAAU,EACpD,SAIGsD,EAAkB,IAAItD,CAAU,GACnCsD,EAAkB,IAAItD,EAAY,IAAI,GAAK,EAE7C,IAAM+D,EAAkBT,EAAkB,IAAItD,CAAU,EACxD+D,EAAgB,IAAInE,GAAOmE,EAAgB,IAAInE,CAAI,GAAK,GAAK,CAAC,EAE9D,IAAMU,EAAKqD,IAAmB3D,CAAU,IAAIgD,CAAI,GAAK,EAE/CgB,EAAOC,GAAK3D,EAAIsD,EAAiB7D,EAAW0D,EAAazD,CAAU,EAAIwD,EAAgBN,CAAa,EAEtGC,EAAW,IAAInD,CAAU,EAC3BmD,EAAW,IAAInD,EAAYmD,EAAW,IAAInD,CAAU,EAAKgE,EAAOZ,CAAgB,EAEhFD,EAAW,IAAInD,EAAYgE,EAAOZ,CAAgB,CAEtD,CACF,CAEM,SAAUc,GACdvE,EACAqD,EACAnB,EACAD,EACAuC,EACAC,EACAC,EACAC,EACAC,EACAxE,EACAsD,EACAmB,EAAY,EAAC,CAEb,IAAM1E,EAAS+B,EAAU,SAASmB,EAAMpB,CAAQ,EAC1C6C,EAAgB3E,EAAO,QAAU,EAGjCwD,EAAoB,IAAI,IAExBoB,EAAgB,IAAI,IACpBvB,EAAa,IAAI,IAEvB,QAAWvD,KAAQuE,EAAoB,CACrC,GAAI,EAAEvE,KAAQD,EAAM,SAClB,SAGF,IAAMgF,EAAOhF,EAAM,QAAQC,CAAI,EACzB,CAAE,KAAAkB,CAAI,EAAK6D,EACjB,GAAI7D,IAAS,QACX,MAAMW,EAAY,6BAA8B7B,CAAI,EAEtD,IAAMwD,EAAmBkB,EAAM1E,CAAI,GAAK,EACxC,GAAIwD,GAAoB,EACtB,MAAM3B,EAAY,sBAAuB2B,CAAgB,EAIvDtD,EAAO,SAAW,GAAK,CAACkD,GAC1BlD,EAAO,KAAK,EAAE,EAIhB,IAAM8E,EAAc9E,EAAO,OAC3B,QAAS2C,EAAI,EAAGA,EAAImC,EAAanC,IAAK,CACpC,IAAMtC,EAAQL,EAAO2C,CAAC,EAChBoC,EAAeF,EAAK,KAAK,KAAK,CAAE,KAAMxE,EAAO,MAAAiE,EAAO,UAAAC,CAAS,CAAE,EAG/DS,EAAa,OAAO,KAAKD,CAAY,EACvCC,EAAW,OAAS,GACtBJ,EAAc,IAAIvE,EAAO,EAAI,EAI/B,IAAM4E,EAAmBD,EAAW,OACpC,QAASE,EAAI,EAAGA,EAAID,EAAkBC,IAAK,CACzC,IAAMC,EAAOH,EAAWE,CAAC,EACnB/B,EAAM4B,EAAaI,CAAI,EAC7BlC,GACEpD,EACAC,EACAqF,EACAhC,EACAlD,EACAwE,EACApB,EACAC,EACAC,EACAC,CAAiB,CAErB,CACF,CACF,CAGA,IAAM4B,EAAU,MAAM,KAAK/B,EAAW,QAAO,CAAE,EAC5C,IAAI,CAAC,CAACtD,EAAIsF,CAAK,IAAkB,CAACtF,EAAIsF,CAAK,CAAC,EAC5C,KAAK,CAACC,EAAGC,IAAMA,EAAE,CAAC,EAAID,EAAE,CAAC,CAAC,EAE7B,GAAIF,EAAQ,SAAW,EACrB,MAAO,CAAA,EAIT,GAAIV,IAAc,EAChB,OAAOU,EAIT,GAAIV,IAAc,EAAG,CAEnB,GAAIC,IAAkB,EACpB,OAAOS,EAKT,QAAW/E,KAASL,EAClB,GAAI,CAAC4E,EAAc,IAAIvE,CAAK,EAC1B,MAAO,CAAA,EAaX,OARoB+E,EAAQ,OAAO,CAAC,CAACrF,CAAE,IAAK,CAC1C,IAAMkE,EAAkBT,EAAkB,IAAIzD,CAAE,EAChD,OAAKkE,EAGE,MAAM,KAAKA,EAAgB,OAAM,CAAE,EAAE,KAAMuB,GAAYA,IAAYb,CAAa,EAH1D,EAI/B,CAAC,CAGH,CAGA,IAAMc,EAAcL,EAAQ,OAAO,CAAC,CAACrF,CAAE,IAAK,CAC1C,IAAMkE,EAAkBT,EAAkB,IAAIzD,CAAE,EAChD,OAAKkE,EAGE,MAAM,KAAKA,EAAgB,OAAM,CAAE,EAAE,KAAMuB,GAAYA,IAAYb,CAAa,EAH1D,EAI/B,CAAC,EAGD,GAAIc,EAAY,OAAS,EAAG,CAC1B,IAAMC,EAAmBN,EAAQ,OAAO,CAAC,CAACrF,CAAE,IAAM,CAAC0F,EAAY,KAAK,CAAC,CAACE,CAAG,IAAMA,IAAQ5F,CAAE,CAAC,EACpF6F,EAAoB,KAAK,KAAKF,EAAiB,OAAShB,CAAS,EACvE,MAAO,CAAC,GAAGe,EAAa,GAAGC,EAAiB,MAAM,EAAGE,CAAiB,CAAC,CACzE,CAGA,OAAOR,CACT,CAEM,SAAUS,EACdhG,EACAkC,EACA+D,EACAhE,EAA4B,CAG5B,GAAI,QAASgE,GAAWA,EAAQ,KAAO,MAAM,QAAQA,EAAQ,GAAG,EAAG,CACjE,IAAMC,EAAaD,EAAQ,IAC3B,GAAIC,EAAW,SAAW,EACxB,OAAO,IAAI,IAGb,IAAMX,EAAUW,EAAW,IAAKC,GAAWH,EAAoBhG,EAAOkC,EAAWiE,EAAQlE,CAAQ,CAAC,EAClG,OAAOmE,EAAgB,GAAGb,CAAO,CACnC,CAEA,GAAI,OAAQU,GAAWA,EAAQ,IAAM,MAAM,QAAQA,EAAQ,EAAE,EAAG,CAC9D,IAAMI,EAAYJ,EAAQ,GAC1B,OAAII,EAAU,SAAW,EAChB,IAAI,IAGGA,EAAU,IAAKF,GAAWH,EAAoBhG,EAAOkC,EAAWiE,EAAQlE,CAAQ,CAAC,EAElF,OAAO,CAACqE,EAAKC,IAAQC,EAASF,EAAKC,CAAG,EAAG,IAAI,GAAyB,CACvF,CAEA,GAAI,QAASN,GAAWA,EAAQ,IAAK,CACnC,IAAMQ,EAAYR,EAAQ,IAEpBS,EAAU,IAAI,IAGdC,EAAY3G,EAAM,4BACxB,QAAS8C,EAAI,EAAGA,GAAK6D,EAAU,eAAe,OAAQ7D,IACpD4D,EAAQ,IAAI5D,CAAC,EAGf,IAAM8D,EAAYZ,EAAoBhG,EAAOkC,EAAWuE,EAAWxE,CAAQ,EAC3E,OAAO4E,GAAcH,EAASE,CAAS,CACzC,CAGA,IAAME,EAAa,OAAO,KAAKb,CAAO,EAEhCc,EAAsDD,EAAW,OACrE,CAACR,EAAKU,KAAS,CACb,CAACA,CAAG,EAAG,IAAI,IACX,GAAGV,IAEL,CAAA,CAAE,EAGJ,QAAWW,KAASH,EAAY,CAC9B,IAAMI,EAAYjB,EAAQgB,CAAK,EAE/B,GAAI,OAAOjH,EAAM,QAAQiH,CAAK,EAAM,IAClC,MAAMnF,EAAY,0BAA2BmF,CAAK,EAGpD,GAAM,CAAE,KAAA5E,EAAM,KAAAlB,EAAM,QAAAK,CAAO,EAAKxB,EAAM,QAAQiH,CAAK,EAEnD,GAAI9F,IAAS,OAAQ,CACnB,IAAMgG,EAAM9E,EACN+E,EAAcF,EAAYC,EAAI,KAAOA,EAAI,MAC/CJ,EAAWE,CAAK,EAAIT,EAASO,EAAWE,CAAK,EAAGG,CAAW,EAC3D,QACF,CAEA,GAAIjG,IAAS,MAAO,CAClB,IAAIkG,EAEJ,GAAI,WAAaH,EACfG,EAAe,iBACN,YAAcH,EACvBG,EAAe,cAEf,OAAM,IAAI,MAAM,qBAAqBH,CAAS,EAAE,EAGlD,GAAIG,IAAiB,SAAU,CAC7B,GAAM,CACJ,MAAAjF,EACA,YAAAkF,EACA,KAAAC,EAAO,IACP,OAAAC,EAAS,GACT,cAAAC,EAAgB,EAAK,EACnBP,EAAUG,CAAY,EACpBK,EAAmBC,GAAwBvF,EAAOmF,CAAI,EACtDjE,EAAMjB,EAAK,eAAeiF,EAA4BI,EAAkBF,EAAQ,OAAWC,CAAa,EAC9GV,EAAWE,CAAK,EAAIW,GAAab,EAAWE,CAAK,EAAG3D,CAAG,CACzD,KAAO,CACL,GAAM,CACJ,YAAAgE,EACA,OAAAE,EAAS,GACT,cAAAC,EAAgB,EAAK,EACnBP,EAAUG,CAAY,EACpB/D,EAAMjB,EAAK,gBAAgBiF,EAA8BE,EAAQ,OAAWC,CAAa,EAC/FV,EAAWE,CAAK,EAAIW,GAAab,EAAWE,CAAK,EAAG3D,CAAG,CACzD,CAEA,QACF,CAEA,GAAInC,IAAS,UAAY,OAAO+F,GAAc,UAAY,MAAM,QAAQA,CAAS,GAAI,CACnF,QAAWW,IAAO,CAACX,CAAS,EAAE,KAAI,EAAI,CACpC,IAAM7D,EAAOnB,EAAU,SAAS2F,EAAK5F,EAAUgF,CAAK,EACpD,QAAWvG,KAAK2C,EAAM,CACpB,IAAMyE,EAAqBzF,EAAK,KAAK,CAAE,KAAM3B,EAAG,MAAO,EAAI,CAAE,EAC7DqG,EAAWE,CAAK,EAAIc,GAAchB,EAAWE,CAAK,EAAGa,CAAkB,CACzE,CACF,CAEA,QACF,CAEA,IAAME,EAAgB,OAAO,KAAKd,CAAS,EAE3C,GAAIc,EAAc,OAAS,EACzB,MAAMlG,EAAY,2BAA4BkG,EAAc,MAAM,EAGpE,GAAI7G,IAAS,OAAQ,CACnB,IAAMoE,EAAU,IAAI,IAClB/D,EACIa,EAAK,UAAU6E,CAAsC,EACrD7E,EAAK,OAAO6E,CAAmC,CAAC,EAGtDH,EAAWE,CAAK,EAAIT,EAASO,EAAWE,CAAK,EAAG1B,CAAO,EAEvD,QACF,CAEA,GAAIpE,IAAS,MAAO,CAClB,IAAM8G,EAAeD,EAAc,CAAC,EAC9BE,EAAkBhB,EAAiCe,CAAY,EACjEb,EAEJ,OAAQa,EAAc,CACpB,IAAK,KAAM,CACTb,EAAc/E,EAAK,YAAY6F,EAA0B,EAAK,EAC9D,KACF,CACA,IAAK,MAAO,CACVd,EAAc/E,EAAK,YAAY6F,EAA0B,EAAI,EAC7D,KACF,CACA,IAAK,KAAM,CACTd,EAAc/E,EAAK,SAAS6F,EAA0B,EAAK,EAC3D,KACF,CACA,IAAK,MAAO,CACVd,EAAc/E,EAAK,SAAS6F,EAA0B,EAAI,EAC1D,KACF,CACA,IAAK,KAAM,CAETd,EADY/E,EAAK,KAAK6F,CAAwB,GACzB,IAAI,IACzB,KACF,CACA,IAAK,UAAW,CACd,GAAM,CAACC,EAAKC,CAAG,EAAIF,EACnBd,EAAc/E,EAAK,YAAY8F,EAAKC,CAAG,EACvC,KACF,CACA,QACE,MAAMtG,EAAY,2BAA4BmG,CAAY,CAC9D,CAEAlB,EAAWE,CAAK,EAAIT,EAASO,EAAWE,CAAK,EAAGG,CAAW,CAC7D,CACF,CAGA,OAAOhB,EAAgB,GAAG,OAAO,OAAOW,CAAU,CAAC,CACrD,CAEM,SAAUsB,GAAwBrI,EAAY,CAClD,OAAOA,EAAM,oBACf,CAEM,SAAUsI,GAAiCtI,EAAY,CAC3D,OAAOA,EAAM,6BACf,CAEM,SAAUuI,GAAkBvH,EAAsD6G,EAAM,CAC5F,GAAM,CACJ,QAASW,EACT,cAAeC,EACf,qBAAAC,EACA,8BAAAC,EACA,YAAAC,EACA,iBAAAC,EACA,eAAAhF,EACA,aAAAC,CAAY,EACV+D,EAEEiB,EAA4B,CAAA,EAC5BC,EAAwC,CAAA,EAE9C,QAAW9I,KAAQ,OAAO,KAAKuI,CAAU,EAAG,CAC1C,GAAM,CAAE,KAAAnG,EAAM,KAAAlB,EAAM,QAAAK,CAAO,EAAKgH,EAAWvI,CAAI,EAE/C,OAAQkB,EAAM,CACZ,IAAK,QACH2H,EAAQ7I,CAAI,EAAI,CACd,KAAM,QACN,KAAM0B,EAAU,SAASU,CAAI,EAC7B,QAAAb,GAEF,MACF,IAAK,OACHsH,EAAQ7I,CAAI,EAAI,CACd,KAAM,OACN,KAAM2B,EAAS,SAASS,CAAI,EAC5B,QAAAb,GAEF,MACF,IAAK,MACHsH,EAAQ7I,CAAI,EAAI,CACd,KAAM,MACN,KAAMyB,EAAQ,SAASW,CAAI,EAC3B,QAAAb,GAEF,MACF,IAAK,MACHsH,EAAQ7I,CAAI,EAAI,CACd,KAAM,MACN,KAAM4B,EAAQ,SAASQ,CAAI,EAC3B,QAAAb,GAEF,MACF,IAAK,OACHsH,EAAQ7I,CAAI,EAAI,CACd,KAAM,OACN,KAAMwB,EAAS,SAASY,CAAI,EAC5B,QAAAb,GAEF,MACF,QACEsH,EAAQ7I,CAAI,EAAIuI,EAAWvI,CAAI,CACnC,CACF,CAEA,QAAWkH,KAAO,OAAO,KAAKsB,CAAgB,EAC5CM,EAAc5B,CAAG,EAAI,CACnB,KAAM,SACN,QAAS,GACT,KAAM7F,EAAY,SAASmH,EAAiBtB,CAAG,CAAC,GAIpD,MAAO,CACL,4BAAAnG,EACA,QAAA8H,EACA,cAAAC,EACA,qBAAAL,EACA,8BAAAC,EACA,YAAAC,EACA,iBAAAC,EACA,eAAAhF,EACA,aAAAC,EAEJ,CAEM,SAAUkF,GAAkBhJ,EAAY,CAC5C,GAAM,CACJ,QAAA8I,EACA,cAAAC,EACA,qBAAAL,EACA,8BAAAC,EACA,YAAAC,EACA,iBAAAC,EACA,eAAAhF,EACA,aAAAC,CAAY,EACV9D,EAEEiJ,EAA6C,CAAA,EACnD,QAAW9B,KAAO,OAAO,KAAK4B,CAAa,EACzCE,EAAkB9B,CAAG,EAAI4B,EAAc5B,CAAG,EAAE,KAAK,OAAM,EAIzD,IAAM+B,EAAoB,CAAA,EAC1B,QAAWC,KAAQ,OAAO,KAAKL,CAAO,EAAG,CACvC,GAAM,CAAE,KAAA3H,EAAM,KAAAkB,EAAM,QAAAb,CAAO,EAAKsH,EAAQK,CAAI,EACxChI,IAAS,QAAUA,IAAS,SAAWA,IAAS,OAASA,IAAS,OAASA,IAAS,OACtF+H,EAAaC,CAAI,EAAI,CACnB,KAAAhI,EACA,KAAMkB,EAAK,OAAM,EACjB,QAAAb,IAGF0H,EAAaC,CAAI,EAAIL,EAAQK,CAAI,EACjCD,EAAaC,CAAI,EAAE,KAAOD,EAAaC,CAAI,EAAE,KAAK,OAAM,EAE5D,CAEA,MAAO,CACL,QAASD,EACT,cAAeD,EACf,qBAAAP,EACA,8BAAAC,EACA,YAAAC,EACA,iBAAAC,EACA,eAAAhF,EACA,aAAAC,EAEJ,CAEM,SAAUsF,IAAW,CACzB,MAAO,CACL,OAAAtI,GACA,OAAAyB,GACA,OAAAU,GACA,8BAAAlD,GACA,2BAAAQ,GACA,8BAAAK,GACA,2BAAAC,GACA,sBAAAuC,GACA,OAAAmB,GACA,oBAAAyB,EACA,wBAAAqC,GACA,iCAAAC,GACA,KAAAC,GACA,KAAAS,GAEJ,CAEA,SAASpB,GACPrB,EACAjD,EAA4C,CAEvCiD,IACHA,EAAM,IAAI,KAGZ,IAAM8C,EAAY/F,EAAI,OACtB,QAASR,EAAI,EAAGA,EAAIuG,EAAWvG,IAAK,CAClC,IAAMwG,EAAQhG,EAAIR,CAAC,EAAE,OACfuG,EAAYC,EAAM,OACxB,QAASjE,EAAI,EAAGA,EAAIgE,EAAWhE,IAC7BkB,EAAI,IAAI+C,EAAMjE,CAAC,CAAC,CAEpB,CAEA,OAAOkB,CACT,CAEA,SAASgD,GACPjG,EACAkG,EACA/B,EAAgB,GAAK,CAErB,IAAMgC,EAAahC,EAAgB5F,EAAQ,iBAAmBA,EAAQ,kBAChE0D,EAAwB,CAAA,EAGxBmE,EAAsB,CAAA,EAC5B,OAAW,CAAE,MAAAC,CAAK,IAAMrG,EACtBoG,EAAU,KAAKD,EAAWD,EAAaG,CAAK,CAAC,EAE/C,IAAMC,EAAc,KAAK,IAAI,GAAGF,CAAS,EAGrC1J,EAAQ,EACZ,OAAW,CAAE,OAAA6J,CAAM,IAAMvG,EAAK,CAC5B,IAAMwG,EAAWJ,EAAU1J,CAAK,EAG1BwF,EAAQoE,EAAcE,EAAW,EACvC,QAAWC,KAASF,EAClBtE,EAAQ,KAAK,CAACwE,EAAOvE,CAAK,CAAC,EAE7BxF,GACF,CAGA,OAAAuF,EAAQ,KAAK,CAACE,EAAGC,IAAMA,EAAE,CAAC,EAAID,EAAE,CAAC,CAAC,EAC3BF,CACT,CAEA,SAASyE,GACP/D,EACAjG,EAAY,CAEZ,IAAM8G,EAAa,OAAO,KAAKb,CAAO,EAEtC,GAAIa,EAAW,SAAW,EACxB,MAAO,CAAE,UAAW,EAAK,EAG3B,IAAMG,EAAQH,EAAW,CAAC,EACpBI,EAAYjB,EAAQgB,CAAK,EAE/B,GAAI,OAAOjH,EAAM,QAAQiH,CAAK,EAAM,IAClC,MAAO,CAAE,UAAW,EAAK,EAG3B,GAAM,CAAE,KAAA9F,CAAI,EAAKnB,EAAM,QAAQiH,CAAK,EAEpC,OAAI9F,IAAS,OAAS+F,IAAc,WAAYA,GAAa,YAAaA,GACjE,CAAE,UAAW,GAAM,YAAaD,EAAO,aAAcC,CAAS,EAGhE,CAAE,UAAW,EAAK,CAC3B,CAEM,SAAU+C,GACdjK,EACAiG,EAA6C,CAE7C,IAAMiE,EAAalK,EACbmK,EAAUH,GAAqB/D,EAASiE,CAAU,EAExD,GAAI,CAACC,EAAQ,WAAa,CAACA,EAAQ,aAAe,CAACA,EAAQ,aACzD,OAAO,KAGT,GAAM,CAAE,KAAA9H,CAAI,EAAK6H,EAAW,QAAQC,EAAQ,WAAW,EACjDjD,EAAYiD,EAAQ,aAGpBC,EAAU/H,EAEZkD,EAEJ,GAAI,WAAY2B,EAAW,CACzB,GAAM,CACJ,MAAA9E,EACA,YAAAkF,EACA,KAAAC,EAAO,IACP,OAAAC,EAAS,GACT,cAAAC,EAAgB,EAAK,EACnBP,EAAU,OAERsC,EAAclC,EACdI,EAAmBC,GAAwBvF,EAAOmF,CAAI,EAC5D,OAAAhC,EAAU6E,EAAQ,eAAeZ,EAAa9B,EAAkBF,EAAQ,MAAOC,CAAa,EAErF8B,GAAqBhE,EAASiE,EAAa/B,CAAa,CACjE,SAAW,YAAaP,EAAW,CACjC,GAAM,CACJ,YAAAI,EACA,OAAAE,EAAS,GACT,cAAAC,EAAgB,EAAK,EACnBP,EAAU,QAEd3B,EAAU6E,EAAQ,gBAAgB9C,EAAwBE,EAAQ,MAAOC,CAAa,EACtF,IAAM4C,EAAWxI,EAAQ,yBAAyByF,CAAsB,EAExE,OAAOiC,GAAqBhE,EAAS8E,EAAU5C,CAAa,CAC9D,CAEA,OAAO,IACT,CAEA,SAASM,GACPxB,EACAuB,EAA8B,CAEzBvB,IACHA,EAAM,IAAI,KAGZ,IAAM+D,EAAO,OAAO,KAAKxC,CAAkB,EACrCyC,EAAaD,EAAK,OACxB,QAASxH,EAAI,EAAGA,EAAIyH,EAAYzH,IAAK,CACnC,IAAMQ,EAAMwE,EAAmBwC,EAAKxH,CAAC,CAAC,EAChCuG,EAAY/F,EAAI,OACtB,QAAS+B,EAAI,EAAGA,EAAIgE,EAAWhE,IAC7BkB,EAAI,IAAIjD,EAAI+B,CAAC,CAAC,CAElB,CAEA,OAAOkB,CACT,CSzgCA,IAAMiE,GAAI,WAEJC,GAAI,WAEJ,EAAID,GAAI,aAERE,GAAID,GAAI,WAGRE,GAAO,KAAO,EAAI,KAAOD,GAAI,EAE7BE,GAAO,KAAO,EAAI,KAAOF,GAAI,EAAI,IAAMA,GAAI,MAE3CG,GAAO,KAAO,EAAI,KAAOH,GAAI,EAAIA,GAAI,EAErCI,GAAM,KAAO,EAAI,KAAOL,GClCvB,SAASM,GAAoCC,EAA0BC,EAAqBC,EAAgB,CACjH,QAAWC,KAAS,OAAO,QAAwBF,CAAM,EAAG,CAC1D,IAAMG,EAAOD,EAAM,CAAC,EACdE,EAAOF,EAAM,CAAC,EACdG,EAAO,GAAGJ,CAAM,GAAGA,EAAS,IAAM,EAAE,GAAGE,CAAI,GAEjD,GAAI,OAAOC,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAG,CAEpDN,GAAgBC,EAAgBK,EAAMC,CAAI,EAC1C,QACF,CAEA,GAAIC,EAAaF,CAAI,EACnBL,EAAe,qBAAqB,KAAKM,CAAI,EAC7CN,EAAe,8BAA8BM,CAAI,EAAID,EACrDL,EAAe,cAAcM,CAAI,EAAI,CACnC,KAAM,SACN,KAAM,IAAIE,GAAO,YAAYC,GAAcJ,CAAI,CAAC,EAChD,QAAS,EACX,MACK,CACL,IAAMK,EAAU,KAAK,KAAKL,CAAc,EACxC,OAAQA,EAAM,CACZ,IAAK,UACL,IAAK,YACHL,EAAe,QAAQM,CAAI,EAAI,CAAE,KAAM,OAAQ,KAAM,IAAIK,GAAK,SAAY,QAAAD,CAAQ,EAClF,MACF,IAAK,SACL,IAAK,WACHV,EAAe,QAAQM,CAAI,EAAI,CAC7B,KAAM,MACN,KAAM,IAAIM,GAAI,QAAoC,EAAG,CAAC,CAAC,EACvD,QAAAF,CACF,EACA,MACF,IAAK,SACL,IAAK,WACHV,EAAe,QAAQM,CAAI,EAAI,CAAE,KAAM,QAAS,KAAM,IAAIO,EAAM,UAAa,QAAAH,CAAQ,EACrF,MACF,IAAK,OACL,IAAK,SACHV,EAAe,QAAQM,CAAI,EAAI,CAAE,KAAM,OAAQ,KAAM,IAAIQ,GAAK,SAAY,QAAAJ,CAAQ,EAClF,MACF,IAAK,WACHV,EAAe,QAAQM,CAAI,EAAI,CAAE,KAAM,MAAO,KAAM,IAAIS,GAAI,QAAW,QAAAL,CAAQ,EAC/E,MACF,QACE,MAAM,IAAI,MAAM,wBAA0BJ,CAAI,CAClD,CAEAN,EAAe,qBAAqB,KAAKM,CAAI,EAC7CN,EAAe,8BAA8BM,CAAI,EAAID,CACvD,CACF,CACF,CAEA,IAAMW,GAAc,QAGdC,GAAa,CACjB,MAAO,EACP,MAAO,EACT,EAEO,SAASC,GAAcC,EAA8C,CACtEA,GAAS,QAAU,QAAa,CAAC,OAAO,MAAMA,EAAQ,KAAK,IAC7DF,GAAW,MAAQE,EAAQ,OAEzBA,GAAS,QAAU,QAAa,CAAC,OAAO,MAAMA,EAAQ,KAAK,IAC7DF,GAAW,MAAQE,EAAQ,MAE/B,CAEO,SAASC,GAAsBC,EAAmBC,EAAa,CAQpE,IAAMC,EAAeC,GAAMH,CAAS,EAE9BI,EADsBC,GAAWL,CAAS,EACD,GAAKC,EACpD,OAASC,EAAe,GAAM,GAAME,CACtC,CAEO,SAASE,GACdC,EACAC,EACAC,EACA1B,EACA2B,EACAC,EACAC,EACA,CACA,IAAMC,EAAYN,EAAM,MAAM,SAAS,EAEnCO,EAAe,EACfC,EAAc,EAClB,QAAWC,KAAYH,EAAW,CAChC,IAAMI,EAASL,EAAU,SAASI,EAAUL,EAAU5B,CAAI,EAE1D,QAAWmC,KAASD,EAAQ,CAC1BF,IAEKN,EAAMS,CAAK,IACdT,EAAMS,CAAK,EAAI,GAGjB,IAAMC,EAAgB,KAAK,IAAIL,EAAc,EAAE,EAE/CL,EAAM,cAAcC,CAAU,EAAEQ,CAAK,EAAInB,GACvCU,EAAM,cAAcC,CAAU,EAAEQ,CAAK,EACrCC,CACF,EAEAX,EAAU,OAAOU,EAAOR,CAAU,CACpC,CAGIO,EAAO,OAAS,GAClBH,GAEJ,CAEAL,EAAM,aAAa,IAAIC,EAAYK,CAAW,CAChD,CAEO,SAASK,GAAarC,EAY1B,CACD,IAAMkC,EAASlC,EAAK,OACdsC,EAAYtC,EAAK,UACjBuC,EAAQvC,EAAK,MACbwC,EAAYxC,EAAK,UACjB0B,EAAQ1B,EAAK,MACbyC,EAAezC,EAAK,aACpB0C,EAAY1C,EAAK,UACjB2C,EAAkB3C,EAAK,gBACvB4C,EAAelB,EAAM,aACrBmB,EAAgBnB,EAAM,cACtBoB,EAAcZ,EAAO,OAAS,EAE9Ba,EAAY,CAChB,KAAM,GACN,MAAAR,EACA,UAAAC,CACF,EAGMQ,EAAmB,IAAI,IACzBC,EAAa,CAAC,EACZC,EAAchB,EAAO,OAC3B,QAASiB,EAAI,EAAGA,EAAID,EAAaC,IAAK,CACpC,IAAMC,EAAOlB,EAAOiB,CAAC,EACrBJ,EAAU,KAAOK,EACjB,IAAMC,EAAUf,EAAU,KAAKS,CAAS,EAGxC,QAAWO,KAAa,OAAO,KAAKD,CAAO,EACpCL,EAAiB,IAAIM,CAAS,GACjCN,EAAiB,IAAIM,EAAW,CAC9B,WAAYH,EACZ,QAASG,IAAcF,CACzB,CAAC,EAILH,EAAa,CACX,GAAGA,EACH,GAAGI,CACL,CACF,CAGA,IAAME,EAAe,IAAI,IAEnBC,EAAY,OAAO,KAAKP,CAAU,EAClCQ,EAAkBD,EAAU,OAClC,QAASL,EAAI,EAAGA,EAAIM,EAAiBN,IAAK,CACxC,IAAMO,EAAMF,EAAUL,CAAC,EACjBQ,EAAcV,EAAWS,CAAG,EAC5BE,EAAoBD,EAAY,OAChCE,EAAe3B,EAAO,SAASwB,CAAG,EAClCI,EAAiBd,EAAiB,IAAIU,CAAG,EAE/C,QAASK,EAAI,EAAGA,EAAIH,EAAmBG,IAAK,CAC1C,IAAMC,EAAQL,EAAYI,CAAC,EAE3B,GAAIpB,GAAmB,CAACA,EAAgB,IAAIqB,CAAK,EAC/C,SAGF,IAAMC,EAAmBrB,EAAa,IAAIoB,CAAK,EACzCE,EAAyBrB,EAAcmB,CAAK,EAAEN,CAAG,EAEjDS,EAAa/C,GAAM8C,CAAsB,EACzCE,EAAU9C,GAAW4C,CAAsB,EAC3CG,EAASR,EAAehD,GAAW,MAAQA,GAAW,MAE5D,GAAIiC,EAAa,CAEVS,EAAa,IAAIS,CAAK,GACzBT,EAAa,IAAIS,EAAO,CAAE,cAAe,IAAI,IAAO,WAAY,CAAE,CAAC,EAErE,IAAMM,EAAOf,EAAa,IAAIS,CAAK,EASnC,GANIF,GAAkB,CAACQ,EAAK,cAAc,IAAIR,EAAe,UAAU,IACrEQ,EAAK,cAAc,IAAIR,EAAe,UAAU,EAChDQ,EAAK,YAAcD,GAIjB,CAAC3B,EAAU,IAAIsB,CAAK,EACtBtB,EAAU,IAAIsB,EAAO,CAAC,EAAGI,CAAO,CAAC,MAC5B,CACL,IAAMG,EAAU7B,EAAU,IAAIsB,CAAK,EACnCO,EAAQ,CAAC,EAAIA,EAAQ,CAAC,EAAIH,CAC5B,CACF,KAAO,CAEL,IAAMI,EAAQL,EAAaE,EAE3B,GAAI,CAAC3B,EAAU,IAAIsB,CAAK,EAAG,CACzBtB,EAAU,IAAIsB,EAAO,CAACQ,EAAOJ,CAAO,CAAC,EACrC,QACF,CAEA,IAAMG,EAAU7B,EAAU,IAAIsB,CAAK,EAC7BS,GAAaF,EAAQ,CAAC,EAAIC,EAChCD,EAAQ,CAAC,EAAIE,GACbF,EAAQ,CAAC,EAAIA,EAAQ,CAAC,EAAIH,CAC5B,CACF,CACF,CAGA,GAAItB,EACF,OAAW,CAACkB,EAAOM,CAAI,IAAKf,EAAc,CAExC,IAAMiB,EADWF,EAAK,cAAc,KAAOpB,EAClBoB,EAAK,WACxBC,EAAU7B,EAAU,IAAIsB,CAAK,EAC/BO,IACFA,EAAQ,CAAC,EAAIC,EAEjB,CAEJ,CAEO,SAASlD,GAAWoD,EAAW,CACpC,OAAOA,EAAI9D,EACb,CACO,SAASQ,GAAMsD,EAAW,CAC/B,OAAOA,GAAK,EACd,CAaO,SAASC,GACdC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAIA,CACA,IAAMC,EAAeD,EAAM,aACrBE,EAAgBF,EAAM,cAEtBG,EAASL,EAAU,SAASJ,EAAOK,EAAUH,CAAI,EAEvD,QAAWQ,KAASD,EAClBR,EAAU,qBAAqBS,EAAOP,EAAY,EAAI,EAGxDI,EAAa,OAAOJ,CAAU,EAC9B,OAAOK,EAAcL,CAAU,CACjC,ChBzSA,IAAMQ,GAAc,IAAIC,EAAM,UAAU,GAAI,GAAI,EAAK,EAC/CC,GAAc,CAClB,cAAe,CAAC,EAChB,aAAc,IAAI,GACpB,EAEA,SAASC,GACPC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACc,CACd,IAAMC,EAAiD,IAAI,IAErDC,EAAO,CACX,OAAQV,EAAU,SAASD,EAAME,CAAQ,EACzC,UAAWP,GACX,MAAAS,EACA,UAAAC,EACA,MAAOR,GACP,aAAc,EACd,IAAAa,EACA,UAAWA,EACX,gBAAAD,CACF,EAEMG,EAA2BT,EAAmB,OACpD,QAASU,EAAI,EAAGA,EAAID,EAA0BC,IAAK,CACjD,IAAMC,EAAOX,EAAmBU,CAAC,EAC3BE,EAAQhB,EAAM,MAAMe,CAAI,EACxBE,EAAeV,EAAMQ,CAAI,GAAK,EACpCH,EAAK,UAAYZ,EAAM,QAAQe,CAAI,EAAE,KACrCH,EAAK,MAAQI,EACbJ,EAAK,aAAeK,EACpBC,GAAaN,CAAI,CACnB,CAEA,IAAMO,EAAkC,MAAM,KAAKR,CAAG,EAChDS,EAAUD,EAAE,OACZE,EAAoB,CAAC,EAC3B,QAASP,EAAI,EAAGA,EAAIM,EAASN,IAAK,CAChC,IAAMQ,EAAUH,EAAEL,CAAC,EACbS,EAAKD,EAAQ,CAAC,EACdE,EAAQF,EAAQ,CAAC,EAAE,CAAC,EAE1BD,EAAI,KAAK,CAACE,EAAIC,CAAK,CAAC,CACtB,CAEA,OAAOH,CACT,CAmBO,SAASI,GAAUC,EAAoB,CAAC,EAA6B,CACtEA,EAAO,SACTC,GAAcD,EAAO,OAAO,EAE9B,IAAME,EAAmBF,EAAO,UAC1BG,EAA4BH,EAAO,mBACnCI,EAAuBJ,EAAO,cAC9BK,EAAsBL,EAAO,aAC7BM,EAAoBN,EAAO,WACjC,MAAO,CACL,KAAM,MACN,cAAcO,EAAmB,CAC/B,OAAOC,GAAcD,EAAQ,CAC3B,UAAWL,EACX,mBAAoBC,EACpB,cAAeC,EACf,aAAcC,EACd,WAAYC,CACd,CAAC,CACH,CACF,CACF,CAEA,SAASE,GACPD,EACAE,EAO+C,CAC/C,MAAO,CACL,MAAO,CACL,OAAQ,UAAkB,CACxB,IAAMC,EAAkC,CACtC,QAAS,CAAC,EACV,cAAe,CAAC,EAChB,qBAAsB,CAAC,EACvB,8BAA+B,CAAC,EAChC,MAAO,CAAC,CACV,EAEA,OAAAC,GAAgBD,EAAgBH,EAAQ,EAAE,EAGxCG,EAAuB,OAASD,EAE3BC,CACT,EACA,OAAQ,SACNE,EACAC,EACAxB,EACAQ,EACAiB,EACAC,EACAC,EACAvC,EACAD,EACAO,EACA,CACA,GAAI,EAAEiC,IAAe,UAAYA,IAAe,YAC9C,OAAOC,EAAM,OACXL,EACAC,EACAxB,EACAQ,EACAiB,EACAC,EACAC,EACAvC,EACAD,EACAO,CACF,EAGG8B,EAAiB,MAAMxB,CAAI,IAC9BwB,EAAiB,MAAMxB,CAAI,EAAI,CAC7B,cAAe,CAAC,EAChB,aAAc,IAAI,GACpB,GAGF,IAAMC,EAAQuB,EAAiB,MAAMxB,CAAI,EACnC6B,EAAYL,EAAiB,QAAQxB,CAAI,EAAE,KAIjD,GAFAC,EAAM,cAAcwB,CAAU,EAAI,CAAC,EAE/B,MAAM,QAAQC,CAAK,EACrB,QAAWI,KAAQJ,EACjBK,GAAaD,EAAgBD,EAAW5B,EAAOD,EAAMyB,EAAYrC,EAAUD,CAAS,OAGtF4C,GAAaL,EAAiBG,EAAW5B,EAAOD,EAAMyB,EAAYrC,EAAUD,CAAS,CAEzF,EACA,OAAQ,SACNoC,EACAC,EACAxB,EACAQ,EACAiB,EACAC,EACAC,EACAvC,EACAD,EACAO,EACA,CACA,GAAI,EAAEiC,IAAe,UAAYA,IAAe,YAC9C,OAAOC,EAAM,OACXL,EACAC,EACAxB,EACAQ,EACAiB,EACAC,EACAC,EACAvC,EACAD,EACAO,CACF,EAGF,IAAMO,EAAQuB,EAAiB,MAAMxB,CAAI,EACnC6B,EAAYL,EAAiB,QAAQxB,CAAI,EAAE,KAEjD,GAAI,MAAM,QAAQ0B,CAAK,EACrB,QAAWI,KAAQJ,EACjBM,GAAaF,EAAgBD,EAAW7B,EAAMyB,EAAYtC,EAAWC,EAAUa,CAAK,OAGtF+B,GAAaN,EAAiBG,EAAW7B,EAAMyB,EAAYtC,EAAWC,EAAUa,CAAK,CAEzF,EACA,8BAA+B,IAAM,CACnC,MAAM,IAAI,KACZ,EACA,2BAA4B,IAAM,CAChC,MAAM,IAAI,KACZ,EACA,8BAA+B,IAAM,CACnC,MAAM,IAAI,KACZ,EACA,2BAA4B,IAAM,CAChC,MAAM,IAAI,KACZ,EACA,sBAAuB,IAAM,CAC3B,MAAM,IAAI,KACZ,EACA,OAAAjB,GACA,oBAAqB,SACnBC,EACAE,EACA8C,EACA7C,EACA,CACA,IAAM8C,EAAoB,OAAO,QAAQD,CAAO,EAAE,OAChD,CAAC,CAACE,CAAQ,IAAMlD,EAAM,QAAQkD,CAAQ,EAAE,OAAS,OACnD,EAGA,GAAID,EAAkB,SAAW,EAC/B,OAAON,EAAM,oBAAoB3C,EAAiCE,EAAW8C,EAAS7C,CAAQ,EAGhG,IAAIgD,EACJ,OAAW,CAACD,EAAUE,CAAM,IAAKH,EAAmB,CAClD,IAAII,EAAmB,CAAC,EAExB,GAAI,MAAM,QAAQD,CAAM,EACtB,QAAWP,KAAQO,EAAQ,CACzB,IAAME,EAAQpD,EAAU,SAAS2C,EAAgB1C,CAAQ,IAAI,CAAC,EAC9DkD,EAAO,KAAKC,CAAK,CACnB,MAEAD,EAASnD,EAAU,SAASkD,EAAkBjD,CAAQ,EAGxD,IAAMyC,EAAY5C,EAAM,QAAQkD,CAAQ,EAAE,KACpCK,EAAU,IAAI,IACpB,QAAWD,KAASD,EAAQ,CAM1B,IAAMG,EALMZ,EAAU,KAAK,CACzB,KAAMU,EACN,MAAO,EACT,CAAC,EAEeA,CAAK,EAErB,GAAIE,EACF,QAAWjC,KAAMiC,EACfD,EAAQ,IAAIhC,CAAE,CAGpB,CAEI4B,EACFA,EAAuBM,EAAgBN,EAAsBI,CAAO,EAEpEJ,EAAuBI,CAE3B,CAMA,GAH6B,OAAO,QAAQP,CAAO,EAAE,OACnD,CAAC,CAACE,CAAQ,IAAMlD,EAAM,QAAQkD,CAAQ,EAAE,OAAS,OACnD,EACyB,SAAW,EAClC,OAAOC,EAGT,IAAMO,EAA0Bf,EAAM,oBACpC3C,EACAE,EACA8C,EACA7C,CACF,EAEA,OAAOsD,EAAgBN,EAAuBO,CAAuB,CACvE,EACA,wBAAyB,SAAiC1D,EAAkC,CAC1F,OAAOA,EAAM,oBACf,EACA,iCAAkC,SAAUA,EAAwB,CAClE,OAAOA,EAAM,6BACf,EACA,KAAM,SAA2B2D,EAAsDC,EAAyB,CAC9G,IAAMC,EAAQlB,EAAM,KAAKgB,EAA6BC,EAAI,CAAC,CAAC,EAEtDE,EAAQF,EAAI,CAAC,EAWbG,EAAU,CACd,GAAGF,EAAM,QACT,GAAG,OAAO,YACRC,EAAM,WAAW,IAAI,CAAC,CAAC/C,EAAMiD,EAASC,EAAMC,CAAI,IAAM,CACpDnD,EACA,CACE,KAAMlB,EAAM,UAAU,SAASqE,CAAI,EACnC,QAAAF,EACA,KAAAC,CACF,CACF,CAAC,CACH,CACF,EAEA,MAAO,CACL,GAAGJ,EACH,QAAAE,EACA,MAAO,OAAO,YACZD,EAAM,MAAM,IAAI,CAAC,CAAC/C,EAAM,CAAE,cAAAoD,EAAe,aAAAC,CAAa,CAAC,IAAM,CAC3DrD,EACA,CACE,cAAAoD,EACA,aAAc,IAAI,IAAIC,CAAY,CACpC,CACF,CAAC,CACH,CACF,CACF,EACA,KAAM,SAA2BpE,EAA2B,CAC1D,IAAMqE,EAAYrE,EACZsE,EAAmB,OAAO,QAAQD,EAAU,OAAO,EAAE,OAAO,CAAC,CAAC,CAAE,CAAE,KAAAJ,CAAK,CAAC,IAAMA,IAAS,OAAO,EAC9FJ,EAAQlB,EAAM,KAAK,CACvB,GAAG0B,EACH,QAAS,OAAO,YAAYC,CAAgB,CAC9C,CAAC,EAGKR,EAAQ,CACZ,WAFoB,OAAO,QAAQO,EAAU,OAAO,EAAE,OAAO,CAAC,CAAC,CAAE,CAAE,KAAAJ,CAAK,CAAC,IAAMA,IAAS,OAAO,EAErE,IAAI,CAAC,CAAClD,EAAM,CAAE,KAAAmD,EAAM,QAAAF,EAAS,KAAAC,CAAK,CAAC,IAAM,CAAClD,EAAMiD,EAASC,EAAMC,EAAK,OAAO,CAAC,CAAC,EACvG,MAAO,OAAO,QAAQlE,EAAM,KAAK,EAAE,IAAI,CAAC,CAACe,EAAM,CAAE,cAAAoD,EAAe,aAAAC,CAAa,CAAC,IAAM,CAClFrD,EACA,CACE,cAAAoD,EACA,aAAc,MAAM,KAAKC,EAAa,QAAQ,CAAC,CACjD,CACF,CAAC,CACH,EAEA,MAAO,CAACP,EAAOC,CAAK,CACtB,CACF,CACF,CACF","names":["src_exports","__export","pluginQPS","STEMMERS","SUPPORTED_LANGUAGES","STEMMERS","baseId","nano","milli","second","sprintf","template","args","replaceArgs","groups","rawWidth","type","position","replacement","width","value","padding","precision","w","getOwnProperty","object","property","mapDistanceToMeters","convertDistanceToMeters","distance","unit","ratio","createError","withIntersection","setIntersection","sets","set1","set2","result","base","other","value","min","i","withUnion","setUnion","setDifference","allLanguages","SUPPORTED_LANGUAGES","errors","createError","code","args","error","sprintf","IS_ARRAY_TYPE","INNER_TYPE","isVectorType","type","isArrayType","IS_ARRAY_TYPE","getInnerType","INNER_TYPE","getVectorSize","size","createError","getInternalDocumentId","store","id","internalId","currentId","components_exports","__export","calculateResultScores","create","createIndex","getSearchableProperties","getSearchablePropertiesWithTypes","insert","insertDocumentScoreParameters","insertTokenScoreParameters","insertVector","load","remove","removeDocumentScoreParameters","removeTokenScoreParameters","save","search","searchByGeoWhereClause","searchByWhereClause","avl_exports","__export","AVLNode","AVLTree","AVLNode","_AVLNode","key","value","__publicField","node","newRoot","json","AVLTree","_AVLTree","rebalanceThreshold","v","tree","path","current","parent","needRebalance","i","currentNode","rebalancedNode","balanceFactor","count","stack","id","child","successorParent","successor","min","max","result","inclusive","flat_exports","__export","FlatTree","FlatTree","_FlatTree","__publicField","key","value","idSet","id","size","operation","operationKeys","operationType","values","resultSet","excludeValues","idSets","intersection","prev","curr","union","json","tree","ids","radix_exports","__export","RadixNode","RadixTree","ENABLE_PREFIX_MATCHING","_boundedLevenshtein","term","word","tolerance","m","n","diff","ENABLE_PREFIX_MATCHING","matrix","i","j","rowMin","syncBoundedLevenshtein","term","w","tolerance","distance","_boundedLevenshtein","RadixNode","_RadixNode","key","subWord","end","__publicField","parent","docID","output","term","exact","tolerance","stack","node","w","docIDs","getOwnProperty","syncBoundedLevenshtein","docs","word","docId","i","wordLength","currentCharacter","childNode","edgeLabel","edgeLabelLength","j","commonPrefix","newEdgeLabel","newWordLabel","inbetweenNode","newNode","index","originalTolerance","ENABLE_PREFIX_MATCHING","currentChar","character","params","termLength","a","b","len","json","nodeJson","RadixTree","_RadixTree","tree","bkd_exports","__export","BKDTree","BKDNode","_BKDNode","point","docIDs","__publicField","json","parent","node","BKDTree","_BKDTree","pointKey","existingNode","id","newNode","depth","docID","child","center","radius","inclusive","sort","highPrecision","distanceFn","stack","result","dist","a","b","distA","distB","polygon","isInsidePolygon","centroid","tree","totalArea","centroidX","centroidY","polygonLength","i","j","xi","yi","xj","yj","areaSegment","centroidCoordinate","isInside","x","y","coord1","coord2","P","lat1","lat2","deltaLat","deltaLon","f","U1","U2","sinU1","cosU1","sinU2","cosU2","lambda","prevLambda","iterationLimit","sinSigma","cosSigma","sigma","sinAlpha","cos2Alpha","cos2SigmaM","sinLambda","cosLambda","C","uSquared","A","B","deltaSigma","bool_exports","__export","BoolNode","BoolNode","_BoolNode","__publicField","value","bool","json","node","BM25","tf","matchingCount","docsCount","fieldLength","averageFieldLength","k","b","d","vector_exports","__export","DEFAULT_SIMILARITY","VectorIndex","findSimilarVectors","getMagnitude","DEFAULT_SIMILARITY","VectorIndex","_VectorIndex","size","__publicField","internalDocumentId","value","magnitude","getMagnitude","vector","similarity","whereFiltersIDs","findSimilarVectors","vectors","id","json","raw","index","vectorLength","i","targetVector","keys","length","threshold","targetMagnitude","similarVectors","base","vectorId","entry","dotProduct","insertDocumentScoreParameters","index","prop","id","tokens","docsCount","internalId","getInternalDocumentId","insertTokenScoreParameters","token","tokenFrequency","t","tf","removeDocumentScoreParameters","removeTokenScoreParameters","create","orama","sharedInternalDocumentStore","schema","prefix","type","path","isVectorType","VectorIndex","getVectorSize","isArray","BoolNode","AVLTree","RadixTree","FlatTree","BKDTree","createError","insertScalarBuilder","implementation","language","tokenizer","options","value","node","avlRebalanceThreshold","insert","schemaType","insertVector","insertScalar","isArrayType","elements","elementsLength","i","internalDocumentId","removeScalar","remove","innerSchemaType","getInnerType","calculateResultScores","term","ids","bm25Relevance","resultsMap","boostPerProperty","whereFiltersIDs","keywordMatchesMap","documentIDs","avgFieldLength","fieldLengths","oramaOccurrences","oramaFrequencies","termOccurrences","documentIDsLength","k","propertyMatches","bm25","BM25","search","propertiesToSearch","exact","tolerance","boost","relevance","threshold","keywordsCount","tokenFoundMap","tree","tokenLength","searchResult","termsFound","termsFoundLength","j","word","results","score","a","b","matches","fullMatches","remainingResults","fid","additionalResults","searchByWhereClause","filters","andFilters","filter","setIntersection","orFilters","acc","set","setUnion","notFilter","allDocs","docsStore","notResult","setDifference","filterKeys","filtersMap","key","param","operation","idx","filteredIDs","reqOperation","coordinates","unit","inside","highPrecision","distanceInMeters","convertDistanceToMeters","addGeoResult","raw","filteredIDsResults","addFindResult","operationKeys","operationOpt","operationValue","min","max","getSearchableProperties","getSearchablePropertiesWithTypes","load","rawIndexes","rawVectorIndexes","searchableProperties","searchablePropertiesWithTypes","frequencies","tokenOccurrences","indexes","vectorIndexes","save","dumpVectorIndexes","savedIndexes","name","createIndex","idsLength","entry","createGeoTokenScores","centerPoint","distanceFn","distances","point","maxDistance","docIDs","distance","docID","isGeosearchOnlyQuery","searchByGeoWhereClause","indexTyped","geoInfo","bkdNode","centroid","keys","keysLength","c","v","V","mgr0","meq1","mgr1","s_v","recursiveCreate","indexDatastore","schema","prefix","entry","prop","type","path","isVectorType","vector_exports","getVectorSize","isArray","bool_exports","avl_exports","radix_exports","flat_exports","bkd_exports","BIT_MASK_20","qpsWeights","setQpsWeights","weights","calculateTokenQuantum","prevValue","bit","currentCount","count","newSentenceMask","bitmask_20","insertString","value","radixTree","stats","internalId","language","tokenizer","sentences","quantumIndex","tokenNumber","sentence","tokens","token","tokenBitIndex","searchString","radixNode","exact","tolerance","boostPerProp","resultMap","whereFiltersIDs","tokensLength","tokenQuantums","isMultiWord","findParam","wordToQueryToken","foundWords","tokenLength","i","term","results","foundWord","docMatchInfo","foundKeys","foundKeysLength","key","matchedDocs","matchedDocsLength","isExactMatch","queryTokenInfo","j","docId","numberOfQuantums","tokenQuantumDescriptor","occurrence","bitMask","weight","info","current","score","totalScore","n","removeString","value","radixTree","prop","internalId","tokenizer","language","stats","tokensLength","tokenQuantums","tokens","token","unusedRadix","radix_exports","unusedStats","search","index","term","tokenizer","language","propertiesToSearch","exact","tolerance","boost","relevance","docsCount","whereFiltersIDs","all","args","propertiesToSearchLength","i","prop","stats","boostPerProp","searchString","g","gLength","res","element","id","score","pluginQPS","config","setQpsWeights","defaultTolerance","defaultMultiWordThreshold","defaultCandidatePool","defaultCandidateCap","defaultPhraseMode","schema","qpsComponents","defaults","indexDatastore","recursiveCreate","implementation","indexDatastorage","internalId","value","schemaType","components_exports","radixTree","item","insertString","removeString","filters","stringFiltersList","propName","idsFromStringFilters","filter","tokens","token","propIds","ids","setIntersection","idsFromNonStringFilters","sharedInternalDocumentStore","raw","dump1","dump2","indexes","isArray","type","node","tokenQuantums","tokensLength","baseIndex","nonStringIndexes"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/components/tokenizer/languages.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/utils.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/errors.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/components/defaults.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/components/internal-document-id-store.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/components/index.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/trees/avl.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/trees/flat.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/trees/radix.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/components/levenshtein.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/trees/bkd.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/trees/bool.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/components/algorithms.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/trees/vector.ts","../../../node_modules/.pnpm/@wcs-colab+orama@3.1.16-custom.base.4/node_modules/@wcs-colab/orama/src/components/tokenizer/english-stemmer.ts","../src/algorithm.ts"],"sourcesContent":["import type {\n AnyOrama,\n SearchableType,\n IIndex,\n SearchableValue,\n Tokenizer,\n OnlyStrings,\n FlattenSchemaProperty,\n TokenScore,\n WhereCondition,\n OramaPluginSync,\n AnySchema,\n ObjectComponents,\n BM25Params\n} from '@wcs-colab/orama'\nimport { index as Index, internalDocumentIDStore } from '@wcs-colab/orama/components'\nimport { insertString, QPSIndex as QPSIndexStorage, recursiveCreate, removeString, searchString, setQpsWeights } from './algorithm.js'\nimport { radix } from '@wcs-colab/orama/trees'\nimport { setIntersection } from '@wcs-colab/orama/internals'\n\ntype InternalDocumentID = internalDocumentIDStore.InternalDocumentID\ntype InternalDocumentIDStore = internalDocumentIDStore.InternalDocumentIDStore\ntype DocumentID = internalDocumentIDStore.DocumentID\n\nconst unusedRadix = new radix.RadixNode('', '', false)\nconst unusedStats = {\n tokenQuantums: {},\n tokensLength: new Map()\n}\n\nfunction search<T extends AnyOrama>(\n index: QPSIndexStorage,\n term: string,\n tokenizer: Tokenizer,\n language: string | undefined,\n propertiesToSearch: string[],\n exact: boolean,\n tolerance: number,\n boost: Partial<Record<OnlyStrings<FlattenSchemaProperty<T>[]>, number>>,\n relevance: Required<BM25Params>,\n docsCount: number,\n whereFiltersIDs: Set<InternalDocumentID> | undefined\n): TokenScore[] {\n const all: Map<InternalDocumentID, [number, number]> = new Map()\n\n const args = {\n tokens: tokenizer.tokenize(term, language),\n radixNode: unusedRadix,\n exact,\n tolerance,\n stats: unusedStats,\n boostPerProp: 0,\n all,\n resultMap: all,\n whereFiltersIDs\n }\n\n const propertiesToSearchLength = propertiesToSearch.length\n for (let i = 0; i < propertiesToSearchLength; i++) {\n const prop = propertiesToSearch[i]\n const stats = index.stats[prop]\n const boostPerProp = boost[prop] ?? 1\n args.radixNode = index.indexes[prop].node as radix.RadixNode\n args.stats = stats\n args.boostPerProp = boostPerProp\n searchString(args)\n }\n\n const g: [number, [number, number]][] = Array.from(all)\n const gLength = g.length\n const res: TokenScore[] = []\n for (let i = 0; i < gLength; i++) {\n const element = g[i]\n const id = element[0]\n const score = element[1][0]\n\n res.push([id, score])\n }\n\n return res\n}\n\nexport interface QPSConfig {\n weights?: {\n exact?: number\n fuzzy?: number\n }\n /** Explicit tolerance to apply when callers omit it. */\n tolerance?: number\n /** Threshold for non-phrase multi-word searches (AND=0, OR=1) */\n multiWordThreshold?: 0 | 1\n /** Maximum QPS hits to fetch before capping for phrase handoff */\n candidatePool?: number\n /** How many of the pooled hits to forward to FuzzyPhrase */\n candidateCap?: number\n /** Whether phrase mode (QPS→FuzzyPhrase) is active */\n phraseMode?: boolean\n}\n\nexport function pluginQPS(config: QPSConfig = {}): OramaPluginSync<unknown> {\n if (config.weights) {\n setQpsWeights(config.weights)\n }\n const defaultTolerance = config.tolerance\n const defaultMultiWordThreshold = config.multiWordThreshold\n const defaultCandidatePool = config.candidatePool\n const defaultCandidateCap = config.candidateCap\n const defaultPhraseMode = config.phraseMode\n return {\n name: 'qps',\n getComponents(schema: AnySchema) {\n return qpsComponents(schema, {\n tolerance: defaultTolerance,\n multiWordThreshold: defaultMultiWordThreshold,\n candidatePool: defaultCandidatePool,\n candidateCap: defaultCandidateCap,\n phraseMode: defaultPhraseMode\n })\n }\n }\n}\n\nfunction qpsComponents(\n schema: AnySchema,\n defaults: {\n tolerance?: number\n multiWordThreshold?: 0 | 1\n candidatePool?: number\n candidateCap?: number\n phraseMode?: boolean\n }\n): Partial<ObjectComponents<any, any, any, any>> {\n return {\n index: {\n create: function create() {\n const indexDatastore: QPSIndexStorage = {\n indexes: {},\n vectorIndexes: {},\n searchableProperties: [],\n searchablePropertiesWithTypes: {},\n stats: {}\n }\n\n recursiveCreate(indexDatastore, schema, '')\n\n // Expose defaults on the datastore for consumers\n ;(indexDatastore as any).config = defaults\n\n return indexDatastore\n },\n insert: function insert(\n implementation: IIndex<QPSIndexStorage>,\n indexDatastorage: QPSIndexStorage,\n prop: string,\n id: DocumentID,\n internalId: InternalDocumentID,\n value: SearchableValue,\n schemaType: SearchableType,\n language: string | undefined,\n tokenizer: Tokenizer,\n docsCount: number\n ) {\n if (!(schemaType === 'string' || schemaType === 'string[]')) {\n return Index.insert(\n implementation as unknown as IIndex<Index.Index>,\n indexDatastorage as unknown as Index.Index,\n prop,\n id,\n internalId,\n value,\n schemaType,\n language,\n tokenizer,\n docsCount\n )\n }\n\n if (!indexDatastorage.stats[prop]) {\n indexDatastorage.stats[prop] = {\n tokenQuantums: {},\n tokensLength: new Map()\n }\n }\n\n const stats = indexDatastorage.stats[prop]\n const radixTree = indexDatastorage.indexes[prop].node as radix.RadixNode\n\n stats.tokenQuantums[internalId] = {}\n\n if (Array.isArray(value)) {\n for (const item of value) {\n insertString(item as string, radixTree, stats, prop, internalId, language, tokenizer)\n }\n } else {\n insertString(value as string, radixTree, stats, prop, internalId, language, tokenizer)\n }\n },\n remove: function remove(\n implementation: IIndex<QPSIndexStorage>,\n indexDatastorage: QPSIndexStorage,\n prop: string,\n id: DocumentID,\n internalId: InternalDocumentID,\n value: SearchableValue,\n schemaType: SearchableType,\n language: string | undefined,\n tokenizer: Tokenizer,\n docsCount: number\n ) {\n if (!(schemaType === 'string' || schemaType === 'string[]')) {\n return Index.remove(\n implementation as unknown as IIndex<Index.Index>,\n indexDatastorage as unknown as Index.Index,\n prop,\n id,\n internalId,\n value,\n schemaType,\n language,\n tokenizer,\n docsCount\n )\n }\n\n const stats = indexDatastorage.stats[prop]\n const radixTree = indexDatastorage.indexes[prop].node as radix.RadixNode\n\n if (Array.isArray(value)) {\n for (const item of value) {\n removeString(item as string, radixTree, prop, internalId, tokenizer, language, stats)\n }\n } else {\n removeString(value as string, radixTree, prop, internalId, tokenizer, language, stats)\n }\n },\n insertDocumentScoreParameters: () => {\n throw new Error()\n },\n insertTokenScoreParameters: () => {\n throw new Error()\n },\n removeDocumentScoreParameters: () => {\n throw new Error()\n },\n removeTokenScoreParameters: () => {\n throw new Error()\n },\n calculateResultScores: () => {\n throw new Error()\n },\n search,\n searchByWhereClause: function searchByWhereClause<T extends AnyOrama>(\n index: QPSIndexStorage,\n tokenizer: Tokenizer,\n filters: Partial<WhereCondition<T['schema']>>,\n language: string | undefined\n ) {\n const stringFiltersList = Object.entries(filters).filter(\n ([propName]) => index.indexes[propName].type === 'Radix'\n )\n\n // If there are no string filters, we can use the regular search\n if (stringFiltersList.length === 0) {\n return Index.searchByWhereClause(index as unknown as Index.Index, tokenizer, filters, language)\n }\n\n let idsFromStringFilters: Set<InternalDocumentID> | undefined\n for (const [propName, filter] of stringFiltersList) {\n let tokens: string[] = []\n\n if (Array.isArray(filter)) {\n for (const item of filter) {\n const token = tokenizer.tokenize(item as string, language)?.[0]\n tokens.push(token)\n }\n } else {\n tokens = tokenizer.tokenize(filter as string, language)\n }\n\n const radixTree = index.indexes[propName].node as radix.RadixNode\n const propIds = new Set<InternalDocumentID>()\n for (const token of tokens) {\n const ret = radixTree.find({\n term: token,\n exact: true\n })\n\n const ids = ret[token]\n\n if (ids) {\n for (const id of ids) {\n propIds.add(id)\n }\n }\n }\n\n if (idsFromStringFilters) {\n idsFromStringFilters = setIntersection(idsFromStringFilters, propIds)\n } else {\n idsFromStringFilters = propIds\n }\n }\n\n // Split the filters into string and non-string filters\n const nonStringFiltersList = Object.entries(filters).filter(\n ([propName]) => index.indexes[propName].type !== 'Radix'\n )\n if (nonStringFiltersList.length === 0) {\n return idsFromStringFilters\n }\n\n const idsFromNonStringFilters = Index.searchByWhereClause(\n index as unknown as Index.Index,\n tokenizer,\n filters,\n language\n )\n\n return setIntersection(idsFromStringFilters!, idsFromNonStringFilters)\n },\n getSearchableProperties: function getSearchableProperties(index: QPSIndexStorage): string[] {\n return index.searchableProperties\n },\n getSearchablePropertiesWithTypes: function (index: QPSIndexStorage) {\n return index.searchablePropertiesWithTypes\n },\n load: function load<R = unknown>(sharedInternalDocumentStore: InternalDocumentIDStore, raw: R): QPSIndexStorage {\n const dump1 = Index.load(sharedInternalDocumentStore, raw[0])\n\n const dump2 = raw[1] as {\n radixTrees: [string, boolean, string, unknown][]\n stats: [\n string,\n {\n tokenQuantums: [InternalDocumentID, Record<string, number>][]\n tokensLength: [InternalDocumentID, number][]\n }\n ][]\n }\n\n const indexes = {\n ...dump1.indexes,\n ...Object.fromEntries(\n dump2.radixTrees.map(([prop, isArray, type, node]) => [\n prop,\n {\n node: radix.RadixNode.fromJSON(node),\n isArray,\n type\n } as Index.Tree\n ])\n )\n }\n\n return {\n ...dump1,\n indexes,\n stats: Object.fromEntries(\n dump2.stats.map(([prop, { tokenQuantums, tokensLength }]) => [\n prop,\n {\n tokenQuantums,\n tokensLength: new Map(tokensLength)\n }\n ])\n )\n } as unknown as QPSIndexStorage\n },\n save: function save<R = unknown>(index: QPSIndexStorage): R {\n const baseIndex = index as unknown as Index.Index\n const nonStringIndexes = Object.entries(baseIndex.indexes).filter(([, { type }]) => type !== 'Radix')\n const dump1 = Index.save({\n ...baseIndex,\n indexes: Object.fromEntries(nonStringIndexes)\n })\n\n const stringIndexes = Object.entries(baseIndex.indexes).filter(([, { type }]) => type === 'Radix')\n const dump2 = {\n radixTrees: stringIndexes.map(([prop, { node, isArray, type }]) => [prop, isArray, type, node.toJSON()]),\n stats: Object.entries(index.stats).map(([prop, { tokenQuantums, tokensLength }]) => [\n prop,\n {\n tokenQuantums,\n tokensLength: Array.from(tokensLength.entries())\n }\n ])\n }\n\n return [dump1, dump2] as unknown as R\n }\n }\n }\n}\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"import { AnyIndexStore, AnyOrama, SearchableType, Tokenizer } from '@wcs-colab/orama'\nimport { avl, bkd, flat, radix, bool, vector } from '@wcs-colab/orama/trees'\nimport { getVectorSize, index as Index, internalDocumentIDStore, isVectorType } from '@wcs-colab/orama/components'\n\ntype InternalDocumentID = internalDocumentIDStore.InternalDocumentID\n\nexport interface QPSIndex extends AnyIndexStore {\n indexes: Record<string, Index.Tree>\n searchableProperties: string[]\n searchablePropertiesWithTypes: Record<string, SearchableType>\n stats: Record<\n string,\n {\n tokenQuantums: Record<InternalDocumentID, Record<string, number>>\n tokensLength: Map<InternalDocumentID, number>\n }\n >\n}\n\nexport function recursiveCreate<T extends AnyOrama>(indexDatastore: QPSIndex, schema: T['schema'], prefix: string) {\n for (const entry of Object.entries<SearchableType>(schema)) {\n const prop = entry[0]\n const type = entry[1]\n const path = `${prefix}${prefix ? '.' : ''}${prop}`\n\n if (typeof type === 'object' && !Array.isArray(type)) {\n // Nested\n recursiveCreate(indexDatastore, type, path)\n continue\n }\n\n if (isVectorType(type)) {\n indexDatastore.searchableProperties.push(path)\n indexDatastore.searchablePropertiesWithTypes[path] = type\n indexDatastore.vectorIndexes[path] = {\n type: 'Vector',\n node: new vector.VectorIndex(getVectorSize(type)),\n isArray: false\n }\n } else {\n const isArray = /\\[/.test(type as string)\n switch (type) {\n case 'boolean':\n case 'boolean[]':\n indexDatastore.indexes[path] = { type: 'Bool', node: new bool.BoolNode(), isArray }\n break\n case 'number':\n case 'number[]':\n indexDatastore.indexes[path] = {\n type: 'AVL',\n node: new avl.AVLTree<number, InternalDocumentID>(0, []),\n isArray\n }\n break\n case 'string':\n case 'string[]':\n indexDatastore.indexes[path] = { type: 'Radix', node: new radix.RadixTree(), isArray }\n break\n case 'enum':\n case 'enum[]':\n indexDatastore.indexes[path] = { type: 'Flat', node: new flat.FlatTree(), isArray }\n break\n case 'geopoint':\n indexDatastore.indexes[path] = { type: 'BKD', node: new bkd.BKDTree(), isArray }\n break\n default:\n throw new Error('INVALID_SCHEMA_TYPE: ' + path)\n }\n\n indexDatastore.searchableProperties.push(path)\n indexDatastore.searchablePropertiesWithTypes[path] = type\n }\n }\n}\n\nconst BIT_MASK_20 = 0b11111111111111111111\n\n// Runtime-configurable weights (default exact=1, fuzzy=0.6)\nconst qpsWeights = {\n exact: 1,\n fuzzy: 0.6\n}\n\nexport function setQpsWeights(weights?: { exact?: number; fuzzy?: number }) {\n if (weights?.exact !== undefined && !Number.isNaN(weights.exact)) {\n qpsWeights.exact = weights.exact\n }\n if (weights?.fuzzy !== undefined && !Number.isNaN(weights.fuzzy)) {\n qpsWeights.fuzzy = weights.fuzzy\n }\n}\n\n/**\n * Calculate token quantum - simplified to only track occurrence count.\n * \n * The bitmask for sentence positions was removed because:\n * 1. It was never used for scoring in searchString()\n * 2. numberOfOnes() function was never called\n * 3. Saves ~12ms CPU and ~25MB disk per 10K documents\n * \n * @param prevValue - Previous quantum value (just the count, or undefined for first occurrence)\n * @returns New count value\n */\nexport function calculateTokenQuantum(prevValue: number, _bit: number) {\n // Simply increment the count - handle undefined for first occurrence\n return (prevValue || 0) + 1\n}\n\nexport function insertString(\n value: string,\n radixTree: radix.RadixTree,\n stats: QPSIndex['stats'][string],\n prop: string,\n internalId: InternalDocumentID,\n language: string | undefined,\n tokenizer: Tokenizer\n) {\n const sentences = value.split(/\\.|\\?|!/)\n\n let quantumIndex = 0\n let tokenNumber = 0\n for (const sentence of sentences) {\n const tokens = tokenizer.tokenize(sentence, language, prop)\n\n for (const token of tokens) {\n tokenNumber++\n\n if (!stats[token]) {\n stats[token] = 0\n }\n\n const tokenBitIndex = Math.min(quantumIndex, 20)\n\n stats.tokenQuantums[internalId][token] = calculateTokenQuantum(\n stats.tokenQuantums[internalId][token],\n tokenBitIndex\n )\n\n radixTree.insert(token, internalId)\n }\n\n // Don't increment the quantum index if the sentence is too short\n if (tokens.length > 1) {\n quantumIndex++\n }\n }\n\n stats.tokensLength.set(internalId, tokenNumber)\n}\n\nexport function searchString(prop: {\n tokens: string[]\n radixNode: radix.RadixNode\n exact: boolean\n tolerance: number\n stats: {\n tokensLength: Map<number, number>\n tokenQuantums: Record<number, Record<string, number>>\n }\n boostPerProp: number\n resultMap: Map<number, [number, number]>\n whereFiltersIDs: Set<number> | undefined\n}) {\n const tokens = prop.tokens\n const radixNode = prop.radixNode\n const exact = prop.exact\n const tolerance = prop.tolerance\n const stats = prop.stats\n const boostPerProp = prop.boostPerProp\n const resultMap = prop.resultMap\n const whereFiltersIDs = prop.whereFiltersIDs\n const tokensLength = stats.tokensLength\n const tokenQuantums = stats.tokenQuantums\n const isMultiWord = tokens.length > 1\n\n const findParam = {\n term: '',\n exact,\n tolerance\n }\n\n // Track which query token each found word matches (for coverage calculation)\n const wordToQueryToken = new Map<string, { tokenIndex: number; isExact: boolean }>()\n let foundWords = {} as Record<string, number[]>\n const tokenLength = tokens.length\n for (let i = 0; i < tokenLength; i++) {\n const term = tokens[i]\n findParam.term = term\n const results = radixNode.find(findParam)\n\n // Track which query token each result word matches\n for (const foundWord of Object.keys(results)) {\n if (!wordToQueryToken.has(foundWord)) {\n wordToQueryToken.set(foundWord, {\n tokenIndex: i,\n isExact: foundWord === term\n })\n }\n }\n\n foundWords = {\n ...foundWords,\n ...results\n }\n }\n\n // For multi-word: track per-doc which query tokens matched and their weights\n const docMatchInfo = new Map<number, { matchedTokens: Set<number>; sumWeights: number }>()\n\n const foundKeys = Object.keys(foundWords)\n const foundKeysLength = foundKeys.length\n for (let i = 0; i < foundKeysLength; i++) {\n const key = foundKeys[i]\n const matchedDocs = foundWords[key]\n const matchedDocsLength = matchedDocs.length\n const isExactMatch = tokens.includes(key)\n const queryTokenInfo = wordToQueryToken.get(key)\n\n for (let j = 0; j < matchedDocsLength; j++) {\n const docId = matchedDocs[j]\n\n if (whereFiltersIDs && !whereFiltersIDs.has(docId)) {\n continue\n }\n\n const numberOfQuantums = tokensLength.get(docId)!\n // tokenQuantumDescriptor is now just the occurrence count (simplified)\n const occurrence = tokenQuantums[docId][key] || 0\n const weight = isExactMatch ? qpsWeights.exact : qpsWeights.fuzzy\n\n if (isMultiWord) {\n // Multi-word: use coverage × Σ(weight) scoring\n if (!docMatchInfo.has(docId)) {\n docMatchInfo.set(docId, { matchedTokens: new Set(), sumWeights: 0 })\n }\n const info = docMatchInfo.get(docId)!\n\n // Only count each query token once (coverage), but sum best weight per token\n if (queryTokenInfo && !info.matchedTokens.has(queryTokenInfo.tokenIndex)) {\n info.matchedTokens.add(queryTokenInfo.tokenIndex)\n info.sumWeights += weight\n }\n\n // Ensure doc is in resultMap for scoring\n if (!resultMap.has(docId)) {\n resultMap.set(docId, [0, 0])\n }\n } else {\n // Single word: use occurrence × weight scoring (original behavior)\n const score = occurrence * weight\n\n if (!resultMap.has(docId)) {\n resultMap.set(docId, [score, 0])\n continue\n }\n\n const current = resultMap.get(docId)!\n current[0] = current[0] + score\n }\n }\n }\n\n // For multi-word: calculate final scores using coverage × Σ(weight)\n if (isMultiWord) {\n for (const [docId, info] of docMatchInfo) {\n const coverage = info.matchedTokens.size / tokenLength\n const score = coverage * info.sumWeights\n const current = resultMap.get(docId)\n if (current) {\n current[0] = score\n }\n }\n }\n}\n\nexport function bitmask_20(n: number) {\n // Kept for backward compatibility - returns 0 since bitmask is no longer stored\n return 0\n}\n\n/**\n * Extract occurrence count from token quantum.\n * Simplified: now just returns the value directly (no bit shifting needed).\n */\nexport function count(n: number) {\n return n\n}\n\nexport function numberOfOnes(n: number) {\n let i = 0\n do {\n if (n & 1) {\n ++i\n }\n // eslint-disable-next-line no-cond-assign\n } while ((n >>= 1))\n return i\n}\n\nexport function removeString(\n value: string,\n radixTree: radix.RadixTree,\n prop: string,\n internalId: InternalDocumentID,\n tokenizer: Tokenizer,\n language: string | undefined,\n stats: {\n tokensLength: Map<number, number>\n tokenQuantums: Record<number, Record<string, number>>\n }\n) {\n const tokensLength = stats.tokensLength\n const tokenQuantums = stats.tokenQuantums\n\n const tokens = tokenizer.tokenize(value, language, prop)\n\n for (const token of tokens) {\n radixTree.removeDocumentByWord(token, internalId, true)\n }\n\n tokensLength.delete(internalId)\n delete tokenQuantums[internalId]\n}\n"],"mappings":"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","names":["src_exports","__export","pluginQPS","STEMMERS","SUPPORTED_LANGUAGES","STEMMERS","baseId","nano","milli","second","sprintf","template","args","replaceArgs","groups","rawWidth","type","position","replacement","width","value","padding","precision","w","getOwnProperty","object","property","mapDistanceToMeters","convertDistanceToMeters","distance","unit","ratio","createError","withIntersection","setIntersection","sets","set1","set2","result","base","other","value","min","i","withUnion","setUnion","setDifference","allLanguages","SUPPORTED_LANGUAGES","errors","createError","code","args","error","sprintf","IS_ARRAY_TYPE","INNER_TYPE","isVectorType","type","isArrayType","IS_ARRAY_TYPE","getInnerType","INNER_TYPE","getVectorSize","size","createError","getInternalDocumentId","store","id","internalId","currentId","components_exports","__export","calculateResultScores","create","createIndex","getSearchableProperties","getSearchablePropertiesWithTypes","insert","insertDocumentScoreParameters","insertTokenScoreParameters","insertVector","load","remove","removeDocumentScoreParameters","removeTokenScoreParameters","save","search","searchByGeoWhereClause","searchByWhereClause","avl_exports","__export","AVLNode","AVLTree","AVLNode","_AVLNode","key","value","__publicField","node","newRoot","json","AVLTree","_AVLTree","rebalanceThreshold","v","tree","path","current","parent","needRebalance","i","currentNode","rebalancedNode","balanceFactor","count","stack","id","child","successorParent","successor","min","max","result","inclusive","flat_exports","__export","FlatTree","FlatTree","_FlatTree","__publicField","key","value","idSet","id","size","operation","operationKeys","operationType","values","resultSet","excludeValues","idSets","intersection","prev","curr","union","json","tree","ids","radix_exports","__export","RadixNode","RadixTree","ENABLE_PREFIX_MATCHING","_boundedLevenshtein","term","word","tolerance","m","n","diff","ENABLE_PREFIX_MATCHING","matrix","i","j","rowMin","syncBoundedLevenshtein","term","w","tolerance","distance","_boundedLevenshtein","RadixNode","_RadixNode","key","subWord","end","__publicField","parent","docID","output","term","exact","tolerance","stack","node","w","docIDs","getOwnProperty","syncBoundedLevenshtein","docs","word","docId","i","wordLength","currentCharacter","childNode","edgeLabel","edgeLabelLength","j","commonPrefix","newEdgeLabel","newWordLabel","inbetweenNode","newNode","index","originalTolerance","ENABLE_PREFIX_MATCHING","currentChar","character","params","termLength","a","b","len","json","nodeJson","RadixTree","_RadixTree","tree","bkd_exports","__export","BKDTree","BKDNode","_BKDNode","point","docIDs","__publicField","json","parent","node","BKDTree","_BKDTree","pointKey","existingNode","id","newNode","depth","docID","child","center","radius","inclusive","sort","highPrecision","distanceFn","stack","result","dist","a","b","distA","distB","polygon","isInsidePolygon","centroid","tree","totalArea","centroidX","centroidY","polygonLength","i","j","xi","yi","xj","yj","areaSegment","centroidCoordinate","isInside","x","y","coord1","coord2","P","lat1","lat2","deltaLat","deltaLon","f","U1","U2","sinU1","cosU1","sinU2","cosU2","lambda","prevLambda","iterationLimit","sinSigma","cosSigma","sigma","sinAlpha","cos2Alpha","cos2SigmaM","sinLambda","cosLambda","C","uSquared","A","B","deltaSigma","bool_exports","__export","BoolNode","BoolNode","_BoolNode","__publicField","value","bool","json","node","BM25","tf","matchingCount","docsCount","fieldLength","averageFieldLength","k","b","d","vector_exports","__export","DEFAULT_SIMILARITY","VectorIndex","findSimilarVectors","getMagnitude","DEFAULT_SIMILARITY","VectorIndex","_VectorIndex","size","__publicField","internalDocumentId","value","magnitude","getMagnitude","vector","similarity","whereFiltersIDs","findSimilarVectors","vectors","id","json","raw","index","vectorLength","i","targetVector","keys","length","threshold","targetMagnitude","similarVectors","base","vectorId","entry","dotProduct","insertDocumentScoreParameters","index","prop","id","tokens","docsCount","internalId","getInternalDocumentId","insertTokenScoreParameters","token","tokenFrequency","t","tf","removeDocumentScoreParameters","removeTokenScoreParameters","create","orama","sharedInternalDocumentStore","schema","prefix","type","path","isVectorType","VectorIndex","getVectorSize","isArray","BoolNode","AVLTree","RadixTree","FlatTree","BKDTree","createError","insertScalarBuilder","implementation","language","tokenizer","options","value","node","avlRebalanceThreshold","insert","schemaType","insertVector","insertScalar","isArrayType","elements","elementsLength","i","internalDocumentId","removeScalar","remove","innerSchemaType","getInnerType","calculateResultScores","term","ids","bm25Relevance","resultsMap","boostPerProperty","whereFiltersIDs","keywordMatchesMap","documentIDs","avgFieldLength","fieldLengths","oramaOccurrences","oramaFrequencies","termOccurrences","documentIDsLength","k","propertyMatches","bm25","BM25","search","propertiesToSearch","exact","tolerance","boost","relevance","threshold","keywordsCount","tokenFoundMap","tree","tokenLength","searchResult","termsFound","termsFoundLength","j","word","results","score","a","b","matches","fullMatches","remainingResults","fid","additionalResults","searchByWhereClause","filters","andFilters","filter","setIntersection","orFilters","acc","set","setUnion","notFilter","allDocs","docsStore","notResult","setDifference","filterKeys","filtersMap","key","param","operation","idx","filteredIDs","reqOperation","coordinates","unit","inside","highPrecision","distanceInMeters","convertDistanceToMeters","addGeoResult","raw","filteredIDsResults","addFindResult","operationKeys","operationOpt","operationValue","min","max","getSearchableProperties","getSearchablePropertiesWithTypes","load","rawIndexes","rawVectorIndexes","searchableProperties","searchablePropertiesWithTypes","frequencies","tokenOccurrences","indexes","vectorIndexes","save","dumpVectorIndexes","savedIndexes","name","createIndex","idsLength","entry","createGeoTokenScores","centerPoint","distanceFn","distances","point","maxDistance","docIDs","distance","docID","isGeosearchOnlyQuery","searchByGeoWhereClause","indexTyped","geoInfo","bkdNode","centroid","keys","keysLength","c","v","C","V","mgr0","meq1","mgr1","s_v","recursiveCreate","indexDatastore","schema","prefix","entry","prop","type","path","isVectorType","vector_exports","getVectorSize","isArray","bool_exports","avl_exports","radix_exports","flat_exports","bkd_exports","qpsWeights","setQpsWeights","weights","calculateTokenQuantum","prevValue","_bit","insertString","value","radixTree","stats","prop","internalId","language","tokenizer","sentences","quantumIndex","tokenNumber","sentence","tokens","token","tokenBitIndex","searchString","radixNode","exact","tolerance","boostPerProp","resultMap","whereFiltersIDs","tokensLength","tokenQuantums","isMultiWord","findParam","wordToQueryToken","foundWords","tokenLength","i","term","results","foundWord","docMatchInfo","foundKeys","foundKeysLength","key","matchedDocs","matchedDocsLength","isExactMatch","queryTokenInfo","j","docId","numberOfQuantums","occurrence","weight","info","score","current","removeString","value","radixTree","prop","internalId","tokenizer","language","stats","tokensLength","tokenQuantums","tokens","token","unusedRadix","radix_exports","unusedStats","search","index","term","tokenizer","language","propertiesToSearch","exact","tolerance","boost","relevance","docsCount","whereFiltersIDs","all","args","propertiesToSearchLength","i","prop","stats","boostPerProp","searchString","g","gLength","res","element","id","score","pluginQPS","config","setQpsWeights","defaultTolerance","defaultMultiWordThreshold","defaultCandidatePool","defaultCandidateCap","defaultPhraseMode","schema","qpsComponents","defaults","indexDatastore","recursiveCreate","implementation","indexDatastorage","internalId","value","schemaType","components_exports","radixTree","item","insertString","removeString","filters","stringFiltersList","propName","idsFromStringFilters","filter","tokens","token","propIds","ids","setIntersection","idsFromNonStringFilters","sharedInternalDocumentStore","raw","dump1","dump2","indexes","isArray","type","node","tokenQuantums","tokensLength","baseIndex","nonStringIndexes"]}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{index as
|
|
1
|
+
import{index as D}from"@wcs-colab/orama/components";import{avl as F,bkd as B,flat as V,radix as q,bool as _,vector as K}from"@wcs-colab/orama/trees";import{getVectorSize as $,isVectorType as J}from"@wcs-colab/orama/components";function W(e,f,u){for(let o of Object.entries(f)){let t=o[0],n=o[1],r=`${u}${u?".":""}${t}`;if(typeof n=="object"&&!Array.isArray(n)){W(e,n,r);continue}if(J(n))e.searchableProperties.push(r),e.searchablePropertiesWithTypes[r]=n,e.vectorIndexes[r]={type:"Vector",node:new K.VectorIndex($(n)),isArray:!1};else{let s=/\[/.test(n);switch(n){case"boolean":case"boolean[]":e.indexes[r]={type:"Bool",node:new _.BoolNode,isArray:s};break;case"number":case"number[]":e.indexes[r]={type:"AVL",node:new F.AVLTree(0,[]),isArray:s};break;case"string":case"string[]":e.indexes[r]={type:"Radix",node:new q.RadixTree,isArray:s};break;case"enum":case"enum[]":e.indexes[r]={type:"Flat",node:new V.FlatTree,isArray:s};break;case"geopoint":e.indexes[r]={type:"BKD",node:new B.BKDTree,isArray:s};break;default:throw new Error("INVALID_SCHEMA_TYPE: "+r)}e.searchableProperties.push(r),e.searchablePropertiesWithTypes[r]=n}}}var Q={exact:1,fuzzy:.6};function L(e){e?.exact!==void 0&&!Number.isNaN(e.exact)&&(Q.exact=e.exact),e?.fuzzy!==void 0&&!Number.isNaN(e.fuzzy)&&(Q.fuzzy=e.fuzzy)}function H(e,f){return(e||0)+1}function A(e,f,u,o,t,n,r){let s=e.split(/\.|\?|!/),a=0,i=0;for(let d of s){let c=r.tokenize(d,n,o);for(let m of c){i++,u[m]||(u[m]=0);let l=Math.min(a,20);u.tokenQuantums[t][m]=H(u.tokenQuantums[t][m],l),f.insert(m,t)}c.length>1&&a++}u.tokensLength.set(t,i)}function C(e){let f=e.tokens,u=e.radixNode,o=e.exact,t=e.tolerance,n=e.stats,r=e.boostPerProp,s=e.resultMap,a=e.whereFiltersIDs,i=n.tokensLength,d=n.tokenQuantums,c=f.length>1,m={term:"",exact:o,tolerance:t},l=new Map,x={},g=f.length;for(let h=0;h<g;h++){let b=f[h];m.term=b;let P=u.find(m);for(let y of Object.keys(P))l.has(y)||l.set(y,{tokenIndex:h,isExact:y===b});x={...x,...P}}let S=new Map,I=Object.keys(x),p=I.length;for(let h=0;h<p;h++){let b=I[h],P=x[b],y=P.length,w=f.includes(b),R=l.get(b);for(let M=0;M<y;M++){let k=P[M];if(a&&!a.has(k))continue;let Z=i.get(k),E=d[k][b]||0,N=w?Q.exact:Q.fuzzy;if(c){S.has(k)||S.set(k,{matchedTokens:new Set,sumWeights:0});let T=S.get(k);R&&!T.matchedTokens.has(R.tokenIndex)&&(T.matchedTokens.add(R.tokenIndex),T.sumWeights+=N),s.has(k)||s.set(k,[0,0])}else{let T=E*N;if(!s.has(k)){s.set(k,[T,0]);continue}let z=s.get(k);z[0]=z[0]+T}}}if(c)for(let[h,b]of S){let y=b.matchedTokens.size/g*b.sumWeights,w=s.get(h);w&&(w[0]=y)}}function O(e,f,u,o,t,n,r){let s=r.tokensLength,a=r.tokenQuantums,i=t.tokenize(e,n,u);for(let d of i)f.removeDocumentByWord(d,o,!0);s.delete(o),delete a[o]}import{radix as v}from"@wcs-colab/orama/trees";import{setIntersection as j}from"@wcs-colab/orama/internals";var Y=new v.RadixNode("","",!1),G={tokenQuantums:{},tokensLength:new Map};function U(e,f,u,o,t,n,r,s,a,i,d){let c=new Map,m={tokens:u.tokenize(f,o),radixNode:Y,exact:n,tolerance:r,stats:G,boostPerProp:0,all:c,resultMap:c,whereFiltersIDs:d},l=t.length;for(let I=0;I<l;I++){let p=t[I],h=e.stats[p],b=s[p]??1;m.radixNode=e.indexes[p].node,m.stats=h,m.boostPerProp=b,C(m)}let x=Array.from(c),g=x.length,S=[];for(let I=0;I<g;I++){let p=x[I],h=p[0],b=p[1][0];S.push([h,b])}return S}function me(e={}){e.weights&&L(e.weights);let f=e.tolerance,u=e.multiWordThreshold,o=e.candidatePool,t=e.candidateCap,n=e.phraseMode;return{name:"qps",getComponents(r){return X(r,{tolerance:f,multiWordThreshold:u,candidatePool:o,candidateCap:t,phraseMode:n})}}}function X(e,f){return{index:{create:function(){let o={indexes:{},vectorIndexes:{},searchableProperties:[],searchablePropertiesWithTypes:{},stats:{}};return W(o,e,""),o.config=f,o},insert:function(o,t,n,r,s,a,i,d,c,m){if(!(i==="string"||i==="string[]"))return D.insert(o,t,n,r,s,a,i,d,c,m);t.stats[n]||(t.stats[n]={tokenQuantums:{},tokensLength:new Map});let l=t.stats[n],x=t.indexes[n].node;if(l.tokenQuantums[s]={},Array.isArray(a))for(let g of a)A(g,x,l,n,s,d,c);else A(a,x,l,n,s,d,c)},remove:function(o,t,n,r,s,a,i,d,c,m){if(!(i==="string"||i==="string[]"))return D.remove(o,t,n,r,s,a,i,d,c,m);let l=t.stats[n],x=t.indexes[n].node;if(Array.isArray(a))for(let g of a)O(g,x,n,s,c,d,l);else O(a,x,n,s,c,d,l)},insertDocumentScoreParameters:()=>{throw new Error},insertTokenScoreParameters:()=>{throw new Error},removeDocumentScoreParameters:()=>{throw new Error},removeTokenScoreParameters:()=>{throw new Error},calculateResultScores:()=>{throw new Error},search:U,searchByWhereClause:function(o,t,n,r){let s=Object.entries(n).filter(([c])=>o.indexes[c].type==="Radix");if(s.length===0)return D.searchByWhereClause(o,t,n,r);let a;for(let[c,m]of s){let l=[];if(Array.isArray(m))for(let S of m){let I=t.tokenize(S,r)?.[0];l.push(I)}else l=t.tokenize(m,r);let x=o.indexes[c].node,g=new Set;for(let S of l){let p=x.find({term:S,exact:!0})[S];if(p)for(let h of p)g.add(h)}a?a=j(a,g):a=g}if(Object.entries(n).filter(([c])=>o.indexes[c].type!=="Radix").length===0)return a;let d=D.searchByWhereClause(o,t,n,r);return j(a,d)},getSearchableProperties:function(o){return o.searchableProperties},getSearchablePropertiesWithTypes:function(u){return u.searchablePropertiesWithTypes},load:function(o,t){let n=D.load(o,t[0]),r=t[1],s={...n.indexes,...Object.fromEntries(r.radixTrees.map(([a,i,d,c])=>[a,{node:v.RadixNode.fromJSON(c),isArray:i,type:d}]))};return{...n,indexes:s,stats:Object.fromEntries(r.stats.map(([a,{tokenQuantums:i,tokensLength:d}])=>[a,{tokenQuantums:i,tokensLength:new Map(d)}]))}},save:function(o){let t=o,n=Object.entries(t.indexes).filter(([,{type:i}])=>i!=="Radix"),r=D.save({...t,indexes:Object.fromEntries(n)}),a={radixTrees:Object.entries(t.indexes).filter(([,{type:i}])=>i==="Radix").map(([i,{node:d,isArray:c,type:m}])=>[i,c,m,d.toJSON()]),stats:Object.entries(o.stats).map(([i,{tokenQuantums:d,tokensLength:c}])=>[i,{tokenQuantums:d,tokensLength:Array.from(c.entries())}])};return[r,a]}}}}export{me as pluginQPS};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/algorithm.ts"],"sourcesContent":["import type {\n AnyOrama,\n SearchableType,\n IIndex,\n SearchableValue,\n Tokenizer,\n OnlyStrings,\n FlattenSchemaProperty,\n TokenScore,\n WhereCondition,\n OramaPluginSync,\n AnySchema,\n ObjectComponents,\n BM25Params\n} from '@wcs-colab/orama'\nimport { index as Index, internalDocumentIDStore } from '@wcs-colab/orama/components'\nimport { insertString, QPSIndex as QPSIndexStorage, recursiveCreate, removeString, searchString, setQpsWeights } from './algorithm.js'\nimport { radix } from '@wcs-colab/orama/trees'\nimport { setIntersection } from '@wcs-colab/orama/internals'\n\ntype InternalDocumentID = internalDocumentIDStore.InternalDocumentID\ntype InternalDocumentIDStore = internalDocumentIDStore.InternalDocumentIDStore\ntype DocumentID = internalDocumentIDStore.DocumentID\n\nconst unusedRadix = new radix.RadixNode('', '', false)\nconst unusedStats = {\n tokenQuantums: {},\n tokensLength: new Map()\n}\n\nfunction search<T extends AnyOrama>(\n index: QPSIndexStorage,\n term: string,\n tokenizer: Tokenizer,\n language: string | undefined,\n propertiesToSearch: string[],\n exact: boolean,\n tolerance: number,\n boost: Partial<Record<OnlyStrings<FlattenSchemaProperty<T>[]>, number>>,\n relevance: Required<BM25Params>,\n docsCount: number,\n whereFiltersIDs: Set<InternalDocumentID> | undefined\n): TokenScore[] {\n const all: Map<InternalDocumentID, [number, number]> = new Map()\n\n const args = {\n tokens: tokenizer.tokenize(term, language),\n radixNode: unusedRadix,\n exact,\n tolerance,\n stats: unusedStats,\n boostPerProp: 0,\n all,\n resultMap: all,\n whereFiltersIDs\n }\n\n const propertiesToSearchLength = propertiesToSearch.length\n for (let i = 0; i < propertiesToSearchLength; i++) {\n const prop = propertiesToSearch[i]\n const stats = index.stats[prop]\n const boostPerProp = boost[prop] ?? 1\n args.radixNode = index.indexes[prop].node as radix.RadixNode\n args.stats = stats\n args.boostPerProp = boostPerProp\n searchString(args)\n }\n\n const g: [number, [number, number]][] = Array.from(all)\n const gLength = g.length\n const res: TokenScore[] = []\n for (let i = 0; i < gLength; i++) {\n const element = g[i]\n const id = element[0]\n const score = element[1][0]\n\n res.push([id, score])\n }\n\n return res\n}\n\nexport interface QPSConfig {\n weights?: {\n exact?: number\n fuzzy?: number\n }\n /** Explicit tolerance to apply when callers omit it. */\n tolerance?: number\n /** Threshold for non-phrase multi-word searches (AND=0, OR=1) */\n multiWordThreshold?: 0 | 1\n /** Maximum QPS hits to fetch before capping for phrase handoff */\n candidatePool?: number\n /** How many of the pooled hits to forward to FuzzyPhrase */\n candidateCap?: number\n /** Whether phrase mode (QPS→FuzzyPhrase) is active */\n phraseMode?: boolean\n}\n\nexport function pluginQPS(config: QPSConfig = {}): OramaPluginSync<unknown> {\n if (config.weights) {\n setQpsWeights(config.weights)\n }\n const defaultTolerance = config.tolerance\n const defaultMultiWordThreshold = config.multiWordThreshold\n const defaultCandidatePool = config.candidatePool\n const defaultCandidateCap = config.candidateCap\n const defaultPhraseMode = config.phraseMode\n return {\n name: 'qps',\n getComponents(schema: AnySchema) {\n return qpsComponents(schema, {\n tolerance: defaultTolerance,\n multiWordThreshold: defaultMultiWordThreshold,\n candidatePool: defaultCandidatePool,\n candidateCap: defaultCandidateCap,\n phraseMode: defaultPhraseMode\n })\n }\n }\n}\n\nfunction qpsComponents(\n schema: AnySchema,\n defaults: {\n tolerance?: number\n multiWordThreshold?: 0 | 1\n candidatePool?: number\n candidateCap?: number\n phraseMode?: boolean\n }\n): Partial<ObjectComponents<any, any, any, any>> {\n return {\n index: {\n create: function create() {\n const indexDatastore: QPSIndexStorage = {\n indexes: {},\n vectorIndexes: {},\n searchableProperties: [],\n searchablePropertiesWithTypes: {},\n stats: {}\n }\n\n recursiveCreate(indexDatastore, schema, '')\n\n // Expose defaults on the datastore for consumers\n ;(indexDatastore as any).config = defaults\n\n return indexDatastore\n },\n insert: function insert(\n implementation: IIndex<QPSIndexStorage>,\n indexDatastorage: QPSIndexStorage,\n prop: string,\n id: DocumentID,\n internalId: InternalDocumentID,\n value: SearchableValue,\n schemaType: SearchableType,\n language: string | undefined,\n tokenizer: Tokenizer,\n docsCount: number\n ) {\n if (!(schemaType === 'string' || schemaType === 'string[]')) {\n return Index.insert(\n implementation as unknown as IIndex<Index.Index>,\n indexDatastorage as unknown as Index.Index,\n prop,\n id,\n internalId,\n value,\n schemaType,\n language,\n tokenizer,\n docsCount\n )\n }\n\n if (!indexDatastorage.stats[prop]) {\n indexDatastorage.stats[prop] = {\n tokenQuantums: {},\n tokensLength: new Map()\n }\n }\n\n const stats = indexDatastorage.stats[prop]\n const radixTree = indexDatastorage.indexes[prop].node as radix.RadixNode\n\n stats.tokenQuantums[internalId] = {}\n\n if (Array.isArray(value)) {\n for (const item of value) {\n insertString(item as string, radixTree, stats, prop, internalId, language, tokenizer)\n }\n } else {\n insertString(value as string, radixTree, stats, prop, internalId, language, tokenizer)\n }\n },\n remove: function remove(\n implementation: IIndex<QPSIndexStorage>,\n indexDatastorage: QPSIndexStorage,\n prop: string,\n id: DocumentID,\n internalId: InternalDocumentID,\n value: SearchableValue,\n schemaType: SearchableType,\n language: string | undefined,\n tokenizer: Tokenizer,\n docsCount: number\n ) {\n if (!(schemaType === 'string' || schemaType === 'string[]')) {\n return Index.remove(\n implementation as unknown as IIndex<Index.Index>,\n indexDatastorage as unknown as Index.Index,\n prop,\n id,\n internalId,\n value,\n schemaType,\n language,\n tokenizer,\n docsCount\n )\n }\n\n const stats = indexDatastorage.stats[prop]\n const radixTree = indexDatastorage.indexes[prop].node as radix.RadixNode\n\n if (Array.isArray(value)) {\n for (const item of value) {\n removeString(item as string, radixTree, prop, internalId, tokenizer, language, stats)\n }\n } else {\n removeString(value as string, radixTree, prop, internalId, tokenizer, language, stats)\n }\n },\n insertDocumentScoreParameters: () => {\n throw new Error()\n },\n insertTokenScoreParameters: () => {\n throw new Error()\n },\n removeDocumentScoreParameters: () => {\n throw new Error()\n },\n removeTokenScoreParameters: () => {\n throw new Error()\n },\n calculateResultScores: () => {\n throw new Error()\n },\n search,\n searchByWhereClause: function searchByWhereClause<T extends AnyOrama>(\n index: QPSIndexStorage,\n tokenizer: Tokenizer,\n filters: Partial<WhereCondition<T['schema']>>,\n language: string | undefined\n ) {\n const stringFiltersList = Object.entries(filters).filter(\n ([propName]) => index.indexes[propName].type === 'Radix'\n )\n\n // If there are no string filters, we can use the regular search\n if (stringFiltersList.length === 0) {\n return Index.searchByWhereClause(index as unknown as Index.Index, tokenizer, filters, language)\n }\n\n let idsFromStringFilters: Set<InternalDocumentID> | undefined\n for (const [propName, filter] of stringFiltersList) {\n let tokens: string[] = []\n\n if (Array.isArray(filter)) {\n for (const item of filter) {\n const token = tokenizer.tokenize(item as string, language)?.[0]\n tokens.push(token)\n }\n } else {\n tokens = tokenizer.tokenize(filter as string, language)\n }\n\n const radixTree = index.indexes[propName].node as radix.RadixNode\n const propIds = new Set<InternalDocumentID>()\n for (const token of tokens) {\n const ret = radixTree.find({\n term: token,\n exact: true\n })\n\n const ids = ret[token]\n\n if (ids) {\n for (const id of ids) {\n propIds.add(id)\n }\n }\n }\n\n if (idsFromStringFilters) {\n idsFromStringFilters = setIntersection(idsFromStringFilters, propIds)\n } else {\n idsFromStringFilters = propIds\n }\n }\n\n // Split the filters into string and non-string filters\n const nonStringFiltersList = Object.entries(filters).filter(\n ([propName]) => index.indexes[propName].type !== 'Radix'\n )\n if (nonStringFiltersList.length === 0) {\n return idsFromStringFilters\n }\n\n const idsFromNonStringFilters = Index.searchByWhereClause(\n index as unknown as Index.Index,\n tokenizer,\n filters,\n language\n )\n\n return setIntersection(idsFromStringFilters!, idsFromNonStringFilters)\n },\n getSearchableProperties: function getSearchableProperties(index: QPSIndexStorage): string[] {\n return index.searchableProperties\n },\n getSearchablePropertiesWithTypes: function (index: QPSIndexStorage) {\n return index.searchablePropertiesWithTypes\n },\n load: function load<R = unknown>(sharedInternalDocumentStore: InternalDocumentIDStore, raw: R): QPSIndexStorage {\n const dump1 = Index.load(sharedInternalDocumentStore, raw[0])\n\n const dump2 = raw[1] as {\n radixTrees: [string, boolean, string, unknown][]\n stats: [\n string,\n {\n tokenQuantums: [InternalDocumentID, Record<string, number>][]\n tokensLength: [InternalDocumentID, number][]\n }\n ][]\n }\n\n const indexes = {\n ...dump1.indexes,\n ...Object.fromEntries(\n dump2.radixTrees.map(([prop, isArray, type, node]) => [\n prop,\n {\n node: radix.RadixNode.fromJSON(node),\n isArray,\n type\n } as Index.Tree\n ])\n )\n }\n\n return {\n ...dump1,\n indexes,\n stats: Object.fromEntries(\n dump2.stats.map(([prop, { tokenQuantums, tokensLength }]) => [\n prop,\n {\n tokenQuantums,\n tokensLength: new Map(tokensLength)\n }\n ])\n )\n } as unknown as QPSIndexStorage\n },\n save: function save<R = unknown>(index: QPSIndexStorage): R {\n const baseIndex = index as unknown as Index.Index\n const nonStringIndexes = Object.entries(baseIndex.indexes).filter(([, { type }]) => type !== 'Radix')\n const dump1 = Index.save({\n ...baseIndex,\n indexes: Object.fromEntries(nonStringIndexes)\n })\n\n const stringIndexes = Object.entries(baseIndex.indexes).filter(([, { type }]) => type === 'Radix')\n const dump2 = {\n radixTrees: stringIndexes.map(([prop, { node, isArray, type }]) => [prop, isArray, type, node.toJSON()]),\n stats: Object.entries(index.stats).map(([prop, { tokenQuantums, tokensLength }]) => [\n prop,\n {\n tokenQuantums,\n tokensLength: Array.from(tokensLength.entries())\n }\n ])\n }\n\n return [dump1, dump2] as unknown as R\n }\n }\n }\n}\n","import { AnyIndexStore, AnyOrama, SearchableType, Tokenizer } from '@wcs-colab/orama'\nimport { avl, bkd, flat, radix, bool, vector } from '@wcs-colab/orama/trees'\nimport { getVectorSize, index as Index, internalDocumentIDStore, isVectorType } from '@wcs-colab/orama/components'\n\ntype InternalDocumentID = internalDocumentIDStore.InternalDocumentID\n\nexport interface QPSIndex extends AnyIndexStore {\n indexes: Record<string, Index.Tree>\n searchableProperties: string[]\n searchablePropertiesWithTypes: Record<string, SearchableType>\n stats: Record<\n string,\n {\n tokenQuantums: Record<InternalDocumentID, Record<string, number>>\n tokensLength: Map<InternalDocumentID, number>\n }\n >\n}\n\nexport function recursiveCreate<T extends AnyOrama>(indexDatastore: QPSIndex, schema: T['schema'], prefix: string) {\n for (const entry of Object.entries<SearchableType>(schema)) {\n const prop = entry[0]\n const type = entry[1]\n const path = `${prefix}${prefix ? '.' : ''}${prop}`\n\n if (typeof type === 'object' && !Array.isArray(type)) {\n // Nested\n recursiveCreate(indexDatastore, type, path)\n continue\n }\n\n if (isVectorType(type)) {\n indexDatastore.searchableProperties.push(path)\n indexDatastore.searchablePropertiesWithTypes[path] = type\n indexDatastore.vectorIndexes[path] = {\n type: 'Vector',\n node: new vector.VectorIndex(getVectorSize(type)),\n isArray: false\n }\n } else {\n const isArray = /\\[/.test(type as string)\n switch (type) {\n case 'boolean':\n case 'boolean[]':\n indexDatastore.indexes[path] = { type: 'Bool', node: new bool.BoolNode(), isArray }\n break\n case 'number':\n case 'number[]':\n indexDatastore.indexes[path] = {\n type: 'AVL',\n node: new avl.AVLTree<number, InternalDocumentID>(0, []),\n isArray\n }\n break\n case 'string':\n case 'string[]':\n indexDatastore.indexes[path] = { type: 'Radix', node: new radix.RadixTree(), isArray }\n break\n case 'enum':\n case 'enum[]':\n indexDatastore.indexes[path] = { type: 'Flat', node: new flat.FlatTree(), isArray }\n break\n case 'geopoint':\n indexDatastore.indexes[path] = { type: 'BKD', node: new bkd.BKDTree(), isArray }\n break\n default:\n throw new Error('INVALID_SCHEMA_TYPE: ' + path)\n }\n\n indexDatastore.searchableProperties.push(path)\n indexDatastore.searchablePropertiesWithTypes[path] = type\n }\n }\n}\n\nconst BIT_MASK_20 = 0b11111111111111111111\n\n// Runtime-configurable weights (default exact=1, fuzzy=0.6)\nconst qpsWeights = {\n exact: 1,\n fuzzy: 0.6\n}\n\nexport function setQpsWeights(weights?: { exact?: number; fuzzy?: number }) {\n if (weights?.exact !== undefined && !Number.isNaN(weights.exact)) {\n qpsWeights.exact = weights.exact\n }\n if (weights?.fuzzy !== undefined && !Number.isNaN(weights.fuzzy)) {\n qpsWeights.fuzzy = weights.fuzzy\n }\n}\n\nexport function calculateTokenQuantum(prevValue: number, bit: number) {\n // if (prevValue < 0) {\n // throw new Error(\"Overflow\")\n // }\n // if (bit < 0 || bit > 20) {\n // throw new Error(\"Invalid bit\")\n // }\n\n const currentCount = count(prevValue)\n const currentSentenceMask = bitmask_20(prevValue)\n const newSentenceMask = currentSentenceMask | (1 << bit)\n return ((currentCount + 1) << 20) | newSentenceMask\n}\n\nexport function insertString(\n value: string,\n radixTree: radix.RadixTree,\n stats: QPSIndex['stats'][string],\n prop: string,\n internalId: InternalDocumentID,\n language: string | undefined,\n tokenizer: Tokenizer\n) {\n const sentences = value.split(/\\.|\\?|!/)\n\n let quantumIndex = 0\n let tokenNumber = 0\n for (const sentence of sentences) {\n const tokens = tokenizer.tokenize(sentence, language, prop)\n\n for (const token of tokens) {\n tokenNumber++\n\n if (!stats[token]) {\n stats[token] = 0\n }\n\n const tokenBitIndex = Math.min(quantumIndex, 20)\n\n stats.tokenQuantums[internalId][token] = calculateTokenQuantum(\n stats.tokenQuantums[internalId][token],\n tokenBitIndex\n )\n\n radixTree.insert(token, internalId)\n }\n\n // Don't increment the quantum index if the sentence is too short\n if (tokens.length > 1) {\n quantumIndex++\n }\n }\n\n stats.tokensLength.set(internalId, tokenNumber)\n}\n\nexport function searchString(prop: {\n tokens: string[]\n radixNode: radix.RadixNode\n exact: boolean\n tolerance: number\n stats: {\n tokensLength: Map<number, number>\n tokenQuantums: Record<number, Record<string, number>>\n }\n boostPerProp: number\n resultMap: Map<number, [number, number]>\n whereFiltersIDs: Set<number> | undefined\n}) {\n const tokens = prop.tokens\n const radixNode = prop.radixNode\n const exact = prop.exact\n const tolerance = prop.tolerance\n const stats = prop.stats\n const boostPerProp = prop.boostPerProp\n const resultMap = prop.resultMap\n const whereFiltersIDs = prop.whereFiltersIDs\n const tokensLength = stats.tokensLength\n const tokenQuantums = stats.tokenQuantums\n const isMultiWord = tokens.length > 1\n\n const findParam = {\n term: '',\n exact,\n tolerance\n }\n\n // Track which query token each found word matches (for coverage calculation)\n const wordToQueryToken = new Map<string, { tokenIndex: number; isExact: boolean }>()\n let foundWords = {} as Record<string, number[]>\n const tokenLength = tokens.length\n for (let i = 0; i < tokenLength; i++) {\n const term = tokens[i]\n findParam.term = term\n const results = radixNode.find(findParam)\n \n // Track which query token each result word matches\n for (const foundWord of Object.keys(results)) {\n if (!wordToQueryToken.has(foundWord)) {\n wordToQueryToken.set(foundWord, { \n tokenIndex: i, \n isExact: foundWord === term \n })\n }\n }\n \n foundWords = {\n ...foundWords,\n ...results\n }\n }\n\n // For multi-word: track per-doc which query tokens matched and their weights\n const docMatchInfo = new Map<number, { matchedTokens: Set<number>; sumWeights: number }>()\n\n const foundKeys = Object.keys(foundWords)\n const foundKeysLength = foundKeys.length\n for (let i = 0; i < foundKeysLength; i++) {\n const key = foundKeys[i]\n const matchedDocs = foundWords[key]\n const matchedDocsLength = matchedDocs.length\n const isExactMatch = tokens.includes(key)\n const queryTokenInfo = wordToQueryToken.get(key)\n\n for (let j = 0; j < matchedDocsLength; j++) {\n const docId = matchedDocs[j]\n\n if (whereFiltersIDs && !whereFiltersIDs.has(docId)) {\n continue\n }\n\n const numberOfQuantums = tokensLength.get(docId)!\n const tokenQuantumDescriptor = tokenQuantums[docId][key]\n\n const occurrence = count(tokenQuantumDescriptor)\n const bitMask = bitmask_20(tokenQuantumDescriptor)\n const weight = isExactMatch ? qpsWeights.exact : qpsWeights.fuzzy\n\n if (isMultiWord) {\n // Multi-word: use coverage × Σ(weight) scoring\n if (!docMatchInfo.has(docId)) {\n docMatchInfo.set(docId, { matchedTokens: new Set(), sumWeights: 0 })\n }\n const info = docMatchInfo.get(docId)!\n \n // Only count each query token once (coverage), but sum best weight per token\n if (queryTokenInfo && !info.matchedTokens.has(queryTokenInfo.tokenIndex)) {\n info.matchedTokens.add(queryTokenInfo.tokenIndex)\n info.sumWeights += weight\n }\n \n // Store bitMask for later\n if (!resultMap.has(docId)) {\n resultMap.set(docId, [0, bitMask])\n } else {\n const current = resultMap.get(docId)!\n current[1] = current[1] | bitMask\n }\n } else {\n // Single word: use occurrence × weight scoring (original behavior)\n const score = occurrence * weight\n\n if (!resultMap.has(docId)) {\n resultMap.set(docId, [score, bitMask])\n continue\n }\n\n const current = resultMap.get(docId)!\n const totalScore = current[0] + score\n current[0] = totalScore\n current[1] = current[1] | bitMask\n }\n }\n }\n\n // For multi-word: calculate final scores using coverage × Σ(weight)\n if (isMultiWord) {\n for (const [docId, info] of docMatchInfo) {\n const coverage = info.matchedTokens.size / tokenLength\n const score = coverage * info.sumWeights\n const current = resultMap.get(docId)\n if (current) {\n current[0] = score\n }\n }\n }\n}\n\nexport function bitmask_20(n: number) {\n return n & BIT_MASK_20\n}\nexport function count(n: number) {\n return n >> 20\n}\n\nexport function numberOfOnes(n: number) {\n let i = 0\n do {\n if (n & 1) {\n ++i\n }\n // eslint-disable-next-line no-cond-assign\n } while ((n >>= 1))\n return i\n}\n\nexport function removeString(\n value: string,\n radixTree: radix.RadixTree,\n prop: string,\n internalId: InternalDocumentID,\n tokenizer: Tokenizer,\n language: string | undefined,\n stats: {\n tokensLength: Map<number, number>\n tokenQuantums: Record<number, Record<string, number>>\n }\n) {\n const tokensLength = stats.tokensLength\n const tokenQuantums = stats.tokenQuantums\n\n const tokens = tokenizer.tokenize(value, language, prop)\n\n for (const token of tokens) {\n radixTree.removeDocumentByWord(token, internalId, true)\n }\n\n tokensLength.delete(internalId)\n delete tokenQuantums[internalId]\n}\n"],"mappings":"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","names":["Index","avl","bkd","flat","radix","bool","vector","getVectorSize","isVectorType","recursiveCreate","indexDatastore","schema","prefix","entry","prop","type","path","isArray","BIT_MASK_20","qpsWeights","setQpsWeights","weights","calculateTokenQuantum","prevValue","bit","currentCount","count","newSentenceMask","bitmask_20","insertString","value","radixTree","stats","internalId","language","tokenizer","sentences","quantumIndex","tokenNumber","sentence","tokens","token","tokenBitIndex","searchString","radixNode","exact","tolerance","boostPerProp","resultMap","whereFiltersIDs","tokensLength","tokenQuantums","isMultiWord","findParam","wordToQueryToken","foundWords","tokenLength","i","term","results","foundWord","docMatchInfo","foundKeys","foundKeysLength","key","matchedDocs","matchedDocsLength","isExactMatch","queryTokenInfo","j","docId","numberOfQuantums","tokenQuantumDescriptor","occurrence","bitMask","weight","info","current","score","totalScore","n","removeString","value","radixTree","prop","internalId","tokenizer","language","stats","tokensLength","tokenQuantums","tokens","token","radix","setIntersection","unusedRadix","unusedStats","search","index","term","tokenizer","language","propertiesToSearch","exact","tolerance","boost","relevance","docsCount","whereFiltersIDs","all","args","propertiesToSearchLength","i","prop","stats","boostPerProp","searchString","g","gLength","res","element","id","score","pluginQPS","config","setQpsWeights","defaultTolerance","defaultMultiWordThreshold","defaultCandidatePool","defaultCandidateCap","defaultPhraseMode","schema","qpsComponents","defaults","indexDatastore","recursiveCreate","implementation","indexDatastorage","internalId","value","schemaType","Index","radixTree","item","insertString","removeString","filters","stringFiltersList","propName","idsFromStringFilters","filter","tokens","token","propIds","ids","idsFromNonStringFilters","sharedInternalDocumentStore","raw","dump1","dump2","indexes","isArray","type","node","tokenQuantums","tokensLength","baseIndex","nonStringIndexes"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/algorithm.ts"],"sourcesContent":["import type {\n AnyOrama,\n SearchableType,\n IIndex,\n SearchableValue,\n Tokenizer,\n OnlyStrings,\n FlattenSchemaProperty,\n TokenScore,\n WhereCondition,\n OramaPluginSync,\n AnySchema,\n ObjectComponents,\n BM25Params\n} from '@wcs-colab/orama'\nimport { index as Index, internalDocumentIDStore } from '@wcs-colab/orama/components'\nimport { insertString, QPSIndex as QPSIndexStorage, recursiveCreate, removeString, searchString, setQpsWeights } from './algorithm.js'\nimport { radix } from '@wcs-colab/orama/trees'\nimport { setIntersection } from '@wcs-colab/orama/internals'\n\ntype InternalDocumentID = internalDocumentIDStore.InternalDocumentID\ntype InternalDocumentIDStore = internalDocumentIDStore.InternalDocumentIDStore\ntype DocumentID = internalDocumentIDStore.DocumentID\n\nconst unusedRadix = new radix.RadixNode('', '', false)\nconst unusedStats = {\n tokenQuantums: {},\n tokensLength: new Map()\n}\n\nfunction search<T extends AnyOrama>(\n index: QPSIndexStorage,\n term: string,\n tokenizer: Tokenizer,\n language: string | undefined,\n propertiesToSearch: string[],\n exact: boolean,\n tolerance: number,\n boost: Partial<Record<OnlyStrings<FlattenSchemaProperty<T>[]>, number>>,\n relevance: Required<BM25Params>,\n docsCount: number,\n whereFiltersIDs: Set<InternalDocumentID> | undefined\n): TokenScore[] {\n const all: Map<InternalDocumentID, [number, number]> = new Map()\n\n const args = {\n tokens: tokenizer.tokenize(term, language),\n radixNode: unusedRadix,\n exact,\n tolerance,\n stats: unusedStats,\n boostPerProp: 0,\n all,\n resultMap: all,\n whereFiltersIDs\n }\n\n const propertiesToSearchLength = propertiesToSearch.length\n for (let i = 0; i < propertiesToSearchLength; i++) {\n const prop = propertiesToSearch[i]\n const stats = index.stats[prop]\n const boostPerProp = boost[prop] ?? 1\n args.radixNode = index.indexes[prop].node as radix.RadixNode\n args.stats = stats\n args.boostPerProp = boostPerProp\n searchString(args)\n }\n\n const g: [number, [number, number]][] = Array.from(all)\n const gLength = g.length\n const res: TokenScore[] = []\n for (let i = 0; i < gLength; i++) {\n const element = g[i]\n const id = element[0]\n const score = element[1][0]\n\n res.push([id, score])\n }\n\n return res\n}\n\nexport interface QPSConfig {\n weights?: {\n exact?: number\n fuzzy?: number\n }\n /** Explicit tolerance to apply when callers omit it. */\n tolerance?: number\n /** Threshold for non-phrase multi-word searches (AND=0, OR=1) */\n multiWordThreshold?: 0 | 1\n /** Maximum QPS hits to fetch before capping for phrase handoff */\n candidatePool?: number\n /** How many of the pooled hits to forward to FuzzyPhrase */\n candidateCap?: number\n /** Whether phrase mode (QPS→FuzzyPhrase) is active */\n phraseMode?: boolean\n}\n\nexport function pluginQPS(config: QPSConfig = {}): OramaPluginSync<unknown> {\n if (config.weights) {\n setQpsWeights(config.weights)\n }\n const defaultTolerance = config.tolerance\n const defaultMultiWordThreshold = config.multiWordThreshold\n const defaultCandidatePool = config.candidatePool\n const defaultCandidateCap = config.candidateCap\n const defaultPhraseMode = config.phraseMode\n return {\n name: 'qps',\n getComponents(schema: AnySchema) {\n return qpsComponents(schema, {\n tolerance: defaultTolerance,\n multiWordThreshold: defaultMultiWordThreshold,\n candidatePool: defaultCandidatePool,\n candidateCap: defaultCandidateCap,\n phraseMode: defaultPhraseMode\n })\n }\n }\n}\n\nfunction qpsComponents(\n schema: AnySchema,\n defaults: {\n tolerance?: number\n multiWordThreshold?: 0 | 1\n candidatePool?: number\n candidateCap?: number\n phraseMode?: boolean\n }\n): Partial<ObjectComponents<any, any, any, any>> {\n return {\n index: {\n create: function create() {\n const indexDatastore: QPSIndexStorage = {\n indexes: {},\n vectorIndexes: {},\n searchableProperties: [],\n searchablePropertiesWithTypes: {},\n stats: {}\n }\n\n recursiveCreate(indexDatastore, schema, '')\n\n // Expose defaults on the datastore for consumers\n ;(indexDatastore as any).config = defaults\n\n return indexDatastore\n },\n insert: function insert(\n implementation: IIndex<QPSIndexStorage>,\n indexDatastorage: QPSIndexStorage,\n prop: string,\n id: DocumentID,\n internalId: InternalDocumentID,\n value: SearchableValue,\n schemaType: SearchableType,\n language: string | undefined,\n tokenizer: Tokenizer,\n docsCount: number\n ) {\n if (!(schemaType === 'string' || schemaType === 'string[]')) {\n return Index.insert(\n implementation as unknown as IIndex<Index.Index>,\n indexDatastorage as unknown as Index.Index,\n prop,\n id,\n internalId,\n value,\n schemaType,\n language,\n tokenizer,\n docsCount\n )\n }\n\n if (!indexDatastorage.stats[prop]) {\n indexDatastorage.stats[prop] = {\n tokenQuantums: {},\n tokensLength: new Map()\n }\n }\n\n const stats = indexDatastorage.stats[prop]\n const radixTree = indexDatastorage.indexes[prop].node as radix.RadixNode\n\n stats.tokenQuantums[internalId] = {}\n\n if (Array.isArray(value)) {\n for (const item of value) {\n insertString(item as string, radixTree, stats, prop, internalId, language, tokenizer)\n }\n } else {\n insertString(value as string, radixTree, stats, prop, internalId, language, tokenizer)\n }\n },\n remove: function remove(\n implementation: IIndex<QPSIndexStorage>,\n indexDatastorage: QPSIndexStorage,\n prop: string,\n id: DocumentID,\n internalId: InternalDocumentID,\n value: SearchableValue,\n schemaType: SearchableType,\n language: string | undefined,\n tokenizer: Tokenizer,\n docsCount: number\n ) {\n if (!(schemaType === 'string' || schemaType === 'string[]')) {\n return Index.remove(\n implementation as unknown as IIndex<Index.Index>,\n indexDatastorage as unknown as Index.Index,\n prop,\n id,\n internalId,\n value,\n schemaType,\n language,\n tokenizer,\n docsCount\n )\n }\n\n const stats = indexDatastorage.stats[prop]\n const radixTree = indexDatastorage.indexes[prop].node as radix.RadixNode\n\n if (Array.isArray(value)) {\n for (const item of value) {\n removeString(item as string, radixTree, prop, internalId, tokenizer, language, stats)\n }\n } else {\n removeString(value as string, radixTree, prop, internalId, tokenizer, language, stats)\n }\n },\n insertDocumentScoreParameters: () => {\n throw new Error()\n },\n insertTokenScoreParameters: () => {\n throw new Error()\n },\n removeDocumentScoreParameters: () => {\n throw new Error()\n },\n removeTokenScoreParameters: () => {\n throw new Error()\n },\n calculateResultScores: () => {\n throw new Error()\n },\n search,\n searchByWhereClause: function searchByWhereClause<T extends AnyOrama>(\n index: QPSIndexStorage,\n tokenizer: Tokenizer,\n filters: Partial<WhereCondition<T['schema']>>,\n language: string | undefined\n ) {\n const stringFiltersList = Object.entries(filters).filter(\n ([propName]) => index.indexes[propName].type === 'Radix'\n )\n\n // If there are no string filters, we can use the regular search\n if (stringFiltersList.length === 0) {\n return Index.searchByWhereClause(index as unknown as Index.Index, tokenizer, filters, language)\n }\n\n let idsFromStringFilters: Set<InternalDocumentID> | undefined\n for (const [propName, filter] of stringFiltersList) {\n let tokens: string[] = []\n\n if (Array.isArray(filter)) {\n for (const item of filter) {\n const token = tokenizer.tokenize(item as string, language)?.[0]\n tokens.push(token)\n }\n } else {\n tokens = tokenizer.tokenize(filter as string, language)\n }\n\n const radixTree = index.indexes[propName].node as radix.RadixNode\n const propIds = new Set<InternalDocumentID>()\n for (const token of tokens) {\n const ret = radixTree.find({\n term: token,\n exact: true\n })\n\n const ids = ret[token]\n\n if (ids) {\n for (const id of ids) {\n propIds.add(id)\n }\n }\n }\n\n if (idsFromStringFilters) {\n idsFromStringFilters = setIntersection(idsFromStringFilters, propIds)\n } else {\n idsFromStringFilters = propIds\n }\n }\n\n // Split the filters into string and non-string filters\n const nonStringFiltersList = Object.entries(filters).filter(\n ([propName]) => index.indexes[propName].type !== 'Radix'\n )\n if (nonStringFiltersList.length === 0) {\n return idsFromStringFilters\n }\n\n const idsFromNonStringFilters = Index.searchByWhereClause(\n index as unknown as Index.Index,\n tokenizer,\n filters,\n language\n )\n\n return setIntersection(idsFromStringFilters!, idsFromNonStringFilters)\n },\n getSearchableProperties: function getSearchableProperties(index: QPSIndexStorage): string[] {\n return index.searchableProperties\n },\n getSearchablePropertiesWithTypes: function (index: QPSIndexStorage) {\n return index.searchablePropertiesWithTypes\n },\n load: function load<R = unknown>(sharedInternalDocumentStore: InternalDocumentIDStore, raw: R): QPSIndexStorage {\n const dump1 = Index.load(sharedInternalDocumentStore, raw[0])\n\n const dump2 = raw[1] as {\n radixTrees: [string, boolean, string, unknown][]\n stats: [\n string,\n {\n tokenQuantums: [InternalDocumentID, Record<string, number>][]\n tokensLength: [InternalDocumentID, number][]\n }\n ][]\n }\n\n const indexes = {\n ...dump1.indexes,\n ...Object.fromEntries(\n dump2.radixTrees.map(([prop, isArray, type, node]) => [\n prop,\n {\n node: radix.RadixNode.fromJSON(node),\n isArray,\n type\n } as Index.Tree\n ])\n )\n }\n\n return {\n ...dump1,\n indexes,\n stats: Object.fromEntries(\n dump2.stats.map(([prop, { tokenQuantums, tokensLength }]) => [\n prop,\n {\n tokenQuantums,\n tokensLength: new Map(tokensLength)\n }\n ])\n )\n } as unknown as QPSIndexStorage\n },\n save: function save<R = unknown>(index: QPSIndexStorage): R {\n const baseIndex = index as unknown as Index.Index\n const nonStringIndexes = Object.entries(baseIndex.indexes).filter(([, { type }]) => type !== 'Radix')\n const dump1 = Index.save({\n ...baseIndex,\n indexes: Object.fromEntries(nonStringIndexes)\n })\n\n const stringIndexes = Object.entries(baseIndex.indexes).filter(([, { type }]) => type === 'Radix')\n const dump2 = {\n radixTrees: stringIndexes.map(([prop, { node, isArray, type }]) => [prop, isArray, type, node.toJSON()]),\n stats: Object.entries(index.stats).map(([prop, { tokenQuantums, tokensLength }]) => [\n prop,\n {\n tokenQuantums,\n tokensLength: Array.from(tokensLength.entries())\n }\n ])\n }\n\n return [dump1, dump2] as unknown as R\n }\n }\n }\n}\n","import { AnyIndexStore, AnyOrama, SearchableType, Tokenizer } from '@wcs-colab/orama'\nimport { avl, bkd, flat, radix, bool, vector } from '@wcs-colab/orama/trees'\nimport { getVectorSize, index as Index, internalDocumentIDStore, isVectorType } from '@wcs-colab/orama/components'\n\ntype InternalDocumentID = internalDocumentIDStore.InternalDocumentID\n\nexport interface QPSIndex extends AnyIndexStore {\n indexes: Record<string, Index.Tree>\n searchableProperties: string[]\n searchablePropertiesWithTypes: Record<string, SearchableType>\n stats: Record<\n string,\n {\n tokenQuantums: Record<InternalDocumentID, Record<string, number>>\n tokensLength: Map<InternalDocumentID, number>\n }\n >\n}\n\nexport function recursiveCreate<T extends AnyOrama>(indexDatastore: QPSIndex, schema: T['schema'], prefix: string) {\n for (const entry of Object.entries<SearchableType>(schema)) {\n const prop = entry[0]\n const type = entry[1]\n const path = `${prefix}${prefix ? '.' : ''}${prop}`\n\n if (typeof type === 'object' && !Array.isArray(type)) {\n // Nested\n recursiveCreate(indexDatastore, type, path)\n continue\n }\n\n if (isVectorType(type)) {\n indexDatastore.searchableProperties.push(path)\n indexDatastore.searchablePropertiesWithTypes[path] = type\n indexDatastore.vectorIndexes[path] = {\n type: 'Vector',\n node: new vector.VectorIndex(getVectorSize(type)),\n isArray: false\n }\n } else {\n const isArray = /\\[/.test(type as string)\n switch (type) {\n case 'boolean':\n case 'boolean[]':\n indexDatastore.indexes[path] = { type: 'Bool', node: new bool.BoolNode(), isArray }\n break\n case 'number':\n case 'number[]':\n indexDatastore.indexes[path] = {\n type: 'AVL',\n node: new avl.AVLTree<number, InternalDocumentID>(0, []),\n isArray\n }\n break\n case 'string':\n case 'string[]':\n indexDatastore.indexes[path] = { type: 'Radix', node: new radix.RadixTree(), isArray }\n break\n case 'enum':\n case 'enum[]':\n indexDatastore.indexes[path] = { type: 'Flat', node: new flat.FlatTree(), isArray }\n break\n case 'geopoint':\n indexDatastore.indexes[path] = { type: 'BKD', node: new bkd.BKDTree(), isArray }\n break\n default:\n throw new Error('INVALID_SCHEMA_TYPE: ' + path)\n }\n\n indexDatastore.searchableProperties.push(path)\n indexDatastore.searchablePropertiesWithTypes[path] = type\n }\n }\n}\n\nconst BIT_MASK_20 = 0b11111111111111111111\n\n// Runtime-configurable weights (default exact=1, fuzzy=0.6)\nconst qpsWeights = {\n exact: 1,\n fuzzy: 0.6\n}\n\nexport function setQpsWeights(weights?: { exact?: number; fuzzy?: number }) {\n if (weights?.exact !== undefined && !Number.isNaN(weights.exact)) {\n qpsWeights.exact = weights.exact\n }\n if (weights?.fuzzy !== undefined && !Number.isNaN(weights.fuzzy)) {\n qpsWeights.fuzzy = weights.fuzzy\n }\n}\n\n/**\n * Calculate token quantum - simplified to only track occurrence count.\n * \n * The bitmask for sentence positions was removed because:\n * 1. It was never used for scoring in searchString()\n * 2. numberOfOnes() function was never called\n * 3. Saves ~12ms CPU and ~25MB disk per 10K documents\n * \n * @param prevValue - Previous quantum value (just the count, or undefined for first occurrence)\n * @returns New count value\n */\nexport function calculateTokenQuantum(prevValue: number, _bit: number) {\n // Simply increment the count - handle undefined for first occurrence\n return (prevValue || 0) + 1\n}\n\nexport function insertString(\n value: string,\n radixTree: radix.RadixTree,\n stats: QPSIndex['stats'][string],\n prop: string,\n internalId: InternalDocumentID,\n language: string | undefined,\n tokenizer: Tokenizer\n) {\n const sentences = value.split(/\\.|\\?|!/)\n\n let quantumIndex = 0\n let tokenNumber = 0\n for (const sentence of sentences) {\n const tokens = tokenizer.tokenize(sentence, language, prop)\n\n for (const token of tokens) {\n tokenNumber++\n\n if (!stats[token]) {\n stats[token] = 0\n }\n\n const tokenBitIndex = Math.min(quantumIndex, 20)\n\n stats.tokenQuantums[internalId][token] = calculateTokenQuantum(\n stats.tokenQuantums[internalId][token],\n tokenBitIndex\n )\n\n radixTree.insert(token, internalId)\n }\n\n // Don't increment the quantum index if the sentence is too short\n if (tokens.length > 1) {\n quantumIndex++\n }\n }\n\n stats.tokensLength.set(internalId, tokenNumber)\n}\n\nexport function searchString(prop: {\n tokens: string[]\n radixNode: radix.RadixNode\n exact: boolean\n tolerance: number\n stats: {\n tokensLength: Map<number, number>\n tokenQuantums: Record<number, Record<string, number>>\n }\n boostPerProp: number\n resultMap: Map<number, [number, number]>\n whereFiltersIDs: Set<number> | undefined\n}) {\n const tokens = prop.tokens\n const radixNode = prop.radixNode\n const exact = prop.exact\n const tolerance = prop.tolerance\n const stats = prop.stats\n const boostPerProp = prop.boostPerProp\n const resultMap = prop.resultMap\n const whereFiltersIDs = prop.whereFiltersIDs\n const tokensLength = stats.tokensLength\n const tokenQuantums = stats.tokenQuantums\n const isMultiWord = tokens.length > 1\n\n const findParam = {\n term: '',\n exact,\n tolerance\n }\n\n // Track which query token each found word matches (for coverage calculation)\n const wordToQueryToken = new Map<string, { tokenIndex: number; isExact: boolean }>()\n let foundWords = {} as Record<string, number[]>\n const tokenLength = tokens.length\n for (let i = 0; i < tokenLength; i++) {\n const term = tokens[i]\n findParam.term = term\n const results = radixNode.find(findParam)\n\n // Track which query token each result word matches\n for (const foundWord of Object.keys(results)) {\n if (!wordToQueryToken.has(foundWord)) {\n wordToQueryToken.set(foundWord, {\n tokenIndex: i,\n isExact: foundWord === term\n })\n }\n }\n\n foundWords = {\n ...foundWords,\n ...results\n }\n }\n\n // For multi-word: track per-doc which query tokens matched and their weights\n const docMatchInfo = new Map<number, { matchedTokens: Set<number>; sumWeights: number }>()\n\n const foundKeys = Object.keys(foundWords)\n const foundKeysLength = foundKeys.length\n for (let i = 0; i < foundKeysLength; i++) {\n const key = foundKeys[i]\n const matchedDocs = foundWords[key]\n const matchedDocsLength = matchedDocs.length\n const isExactMatch = tokens.includes(key)\n const queryTokenInfo = wordToQueryToken.get(key)\n\n for (let j = 0; j < matchedDocsLength; j++) {\n const docId = matchedDocs[j]\n\n if (whereFiltersIDs && !whereFiltersIDs.has(docId)) {\n continue\n }\n\n const numberOfQuantums = tokensLength.get(docId)!\n // tokenQuantumDescriptor is now just the occurrence count (simplified)\n const occurrence = tokenQuantums[docId][key] || 0\n const weight = isExactMatch ? qpsWeights.exact : qpsWeights.fuzzy\n\n if (isMultiWord) {\n // Multi-word: use coverage × Σ(weight) scoring\n if (!docMatchInfo.has(docId)) {\n docMatchInfo.set(docId, { matchedTokens: new Set(), sumWeights: 0 })\n }\n const info = docMatchInfo.get(docId)!\n\n // Only count each query token once (coverage), but sum best weight per token\n if (queryTokenInfo && !info.matchedTokens.has(queryTokenInfo.tokenIndex)) {\n info.matchedTokens.add(queryTokenInfo.tokenIndex)\n info.sumWeights += weight\n }\n\n // Ensure doc is in resultMap for scoring\n if (!resultMap.has(docId)) {\n resultMap.set(docId, [0, 0])\n }\n } else {\n // Single word: use occurrence × weight scoring (original behavior)\n const score = occurrence * weight\n\n if (!resultMap.has(docId)) {\n resultMap.set(docId, [score, 0])\n continue\n }\n\n const current = resultMap.get(docId)!\n current[0] = current[0] + score\n }\n }\n }\n\n // For multi-word: calculate final scores using coverage × Σ(weight)\n if (isMultiWord) {\n for (const [docId, info] of docMatchInfo) {\n const coverage = info.matchedTokens.size / tokenLength\n const score = coverage * info.sumWeights\n const current = resultMap.get(docId)\n if (current) {\n current[0] = score\n }\n }\n }\n}\n\nexport function bitmask_20(n: number) {\n // Kept for backward compatibility - returns 0 since bitmask is no longer stored\n return 0\n}\n\n/**\n * Extract occurrence count from token quantum.\n * Simplified: now just returns the value directly (no bit shifting needed).\n */\nexport function count(n: number) {\n return n\n}\n\nexport function numberOfOnes(n: number) {\n let i = 0\n do {\n if (n & 1) {\n ++i\n }\n // eslint-disable-next-line no-cond-assign\n } while ((n >>= 1))\n return i\n}\n\nexport function removeString(\n value: string,\n radixTree: radix.RadixTree,\n prop: string,\n internalId: InternalDocumentID,\n tokenizer: Tokenizer,\n language: string | undefined,\n stats: {\n tokensLength: Map<number, number>\n tokenQuantums: Record<number, Record<string, number>>\n }\n) {\n const tokensLength = stats.tokensLength\n const tokenQuantums = stats.tokenQuantums\n\n const tokens = tokenizer.tokenize(value, language, prop)\n\n for (const token of tokens) {\n radixTree.removeDocumentByWord(token, internalId, true)\n }\n\n tokensLength.delete(internalId)\n delete tokenQuantums[internalId]\n}\n"],"mappings":"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","names":["Index","avl","bkd","flat","radix","bool","vector","getVectorSize","isVectorType","recursiveCreate","indexDatastore","schema","prefix","entry","prop","type","path","isArray","qpsWeights","setQpsWeights","weights","calculateTokenQuantum","prevValue","_bit","insertString","value","radixTree","stats","prop","internalId","language","tokenizer","sentences","quantumIndex","tokenNumber","sentence","tokens","token","tokenBitIndex","searchString","radixNode","exact","tolerance","boostPerProp","resultMap","whereFiltersIDs","tokensLength","tokenQuantums","isMultiWord","findParam","wordToQueryToken","foundWords","tokenLength","i","term","results","foundWord","docMatchInfo","foundKeys","foundKeysLength","key","matchedDocs","matchedDocsLength","isExactMatch","queryTokenInfo","j","docId","numberOfQuantums","occurrence","weight","info","score","current","removeString","value","radixTree","prop","internalId","tokenizer","language","stats","tokensLength","tokenQuantums","tokens","token","radix","setIntersection","unusedRadix","unusedStats","search","index","term","tokenizer","language","propertiesToSearch","exact","tolerance","boost","relevance","docsCount","whereFiltersIDs","all","args","propertiesToSearchLength","i","prop","stats","boostPerProp","searchString","g","gLength","res","element","id","score","pluginQPS","config","setQpsWeights","defaultTolerance","defaultMultiWordThreshold","defaultCandidatePool","defaultCandidateCap","defaultPhraseMode","schema","qpsComponents","defaults","indexDatastore","recursiveCreate","implementation","indexDatastorage","internalId","value","schemaType","Index","radixTree","item","insertString","removeString","filters","stringFiltersList","propName","idsFromStringFilters","filter","tokens","token","propIds","ids","idsFromNonStringFilters","sharedInternalDocumentStore","raw","dump1","dump2","indexes","isArray","type","node","tokenQuantums","tokensLength","baseIndex","nonStringIndexes"]}
|
package/package.json
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wcs-colab/plugin-qps",
|
|
3
|
-
"version": "3.1.16-custom.
|
|
3
|
+
"version": "3.1.16-custom.16",
|
|
4
4
|
"description": "Performant search algorithm optimized for descriptive texts",
|
|
5
|
-
"keywords": [
|
|
5
|
+
"keywords": [
|
|
6
|
+
"orama",
|
|
7
|
+
"embeddings",
|
|
8
|
+
"secure proxy",
|
|
9
|
+
"vector search"
|
|
10
|
+
],
|
|
6
11
|
"license": "Apache-2.0",
|
|
7
12
|
"main": "./dist/index.js",
|
|
8
13
|
"type": "module",
|
|
@@ -24,7 +29,9 @@
|
|
|
24
29
|
},
|
|
25
30
|
"sideEffects": false,
|
|
26
31
|
"types": "./dist/index.d.ts",
|
|
27
|
-
"files": [
|
|
32
|
+
"files": [
|
|
33
|
+
"dist"
|
|
34
|
+
],
|
|
28
35
|
"scripts": {
|
|
29
36
|
"build": "tsup --config tsup.lib.js",
|
|
30
37
|
"lint": "exit 0",
|
|
@@ -41,6 +48,6 @@
|
|
|
41
48
|
"typescript": "^5.0.0"
|
|
42
49
|
},
|
|
43
50
|
"dependencies": {
|
|
44
|
-
"@wcs-colab/orama": "npm:@wcs-colab/orama@3.1.16-custom.base.
|
|
51
|
+
"@wcs-colab/orama": "npm:@wcs-colab/orama@3.1.16-custom.base.5"
|
|
45
52
|
}
|
|
46
|
-
}
|
|
53
|
+
}
|