1;!function(){try { var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof global?global:"undefined"!=typeof window?window:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&((e._debugIds|| (e._debugIds={}))[n]="c33f45a8-6572-5961-cce8-44b371d30081")}catch(e){}}(); 2(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined, 3561534, ((__turbopack_context__) => { 4"use strict"; 5 6/** 7 * Fuse.js v7.5.0 - Lightweight fuzzy-search (http://fusejs.io) 8 * 9 * Copyright (c) 2026 Kiro Risk (http://kiro.me) 10 * All Rights Reserved. Apache Software License 2.0 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 */ //#region src/helpers/typeGuards.ts 14function isArray(value) { 15 return !Array.isArray ? getTag(value) === "[object Array]" : Array.isArray(value); 16} 17function baseToString(value) { 18 if (typeof value == "string") return value; 19 if (typeof value === "bigint") return value.toString(); 20 const result = value + ""; 21 return result == "0" && 1 / value == -Infinity ? "-0" : result; 22} 23function toString(value) { 24 return value == null ? "" : baseToString(value); 25} 26function isString(value) { 27 return typeof value === "string"; 28} 29function isNumber(value) { 30 return typeof value === "number"; 31} 32function isBoolean(value) { 33 return value === true || value === false || isObjectLike(value) && getTag(value) == "[object Boolean]"; 34} 35function isObject(value) { 36 return typeof value === "object"; 37} 38function isObjectLike(value) { 39 return isObject(value) && value !== null; 40} 41function isDefined(value) { 42 return value !== void 0 && value !== null; 43} 44function isBlank(value) { 45 return !value.trim().length; 46} 47function getTag(value) { 48 return value == null ? value === void 0 ? "[object Undefined]" : "[object Null]" : Object.prototype.toString.call(value); 49} 50//#endregion 51//#region src/core/errorMessages.ts 52const INCORRECT_INDEX_TYPE = "Incorrect 'index' type"; 53const INVALID_DOC_INDEX = "Invalid doc index: must be a non-negative integer within the bounds of the docs array"; 54const LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY = (key)=>"Invalid value for key ".concat(key); 55const PATTERN_LENGTH_TOO_LARGE = (max)=>"Pattern length exceeds max of ".concat(max, "."); 56const MISSING_KEY_PROPERTY = (name)=>"Missing ".concat(name, " property in key"); 57const INVALID_KEY_WEIGHT_VALUE = (key)=>"Property 'weight' in key '".concat(key, "' must be a positive integer"); 58const FUSE_MATCH_TOKEN_SEARCH_UNSUPPORTED = "Fuse.match does not support useTokenSearch: token search requires corpus-level statistics (df, fieldCount) that a one-off string comparison does not have. Use new Fuse(...).search(...) instead."; 59//#endregion 60//#region src/tools/KeyStore.ts 61const hasOwn = Object.prototype.hasOwnProperty; 62var KeyStore = class { 63 get(keyId) { 64 return this._keyMap[keyId]; 65 } 66 keys() { 67 return this._keys; 68 } 69 toJSON() { 70 return JSON.stringify(this._keys); 71 } 72 constructor(keys){ 73 this._keys = []; 74 this._keyMap = {}; 75 let totalWeight = 0; 76 keys.forEach((key)=>{ 77 const obj = createKey(key); 78 this._keys.push(obj); 79 this._keyMap[obj.id] = obj; 80 totalWeight += obj.weight; 81 }); 82 this._keys.forEach((key)=>{ 83 key.weight /= totalWeight; 84 }); 85 } 86}; 87function createKey(key) { 88 let path = null; 89 let id = null; 90 let src = null; 91 let weight = 1; 92 let getFn = null; 93 if (isString(key) || isArray(key)) { 94 src = key; 95 path = createKeyPath(key); 96 id = createKeyId(key); 97 } else { 98 var _key_getFn; 99 if (!hasOwn.call(key, "name")) throw new Error(MISSING_KEY_PROPERTY("name")); 100 const name = key.name; 101 src = name; 102 if (hasOwn.call(key, "weight") && key.weight !== void 0) { 103 weight = key.weight; 104 if (weight <= 0) throw new Error(INVALID_KEY_WEIGHT_VALUE(createKeyId(name))); 105 } 106 path = createKeyPath(name); 107 id = createKeyId(name); 108 getFn = (_key_getFn = key.getFn) !== null && _key_getFn !== void 0 ? _key_getFn : null; 109 } 110 return { 111 path, 112 id, 113 weight, 114 src, 115 getFn 116 }; 117} 118function createKeyPath(key) { 119 return isArray(key) ? key : key.split("."); 120} 121function createKeyId(key) { 122 return isArray(key) ? key.join(".") : key; 123} 124//#endregion 125//#region src/helpers/get.ts 126function get(obj, path) { 127 const list = []; 128 let arr = false;
vendor: 6,122 bytes, lines 129-305
129 const deepGet = (obj, path, index, arrayIndex)=>{ 130 if (!isDefined(obj)) return; 131 if (!path[index]) list.push(arrayIndex !== void 0 ? { 132 v: obj, 133 i: arrayIndex 134 } : obj); 135 else { 136 const value = obj[path[index]]; 137 if (!isDefined(value)) return; 138 if (index === path.length - 1 && (isString(value) || isNumber(value) || isBoolean(value) || typeof value === "bigint")) list.push(arrayIndex !== void 0 ? { 139 v: toString(value), 140 i: arrayIndex 141 } : toString(value)); 142 else if (isArray(value)) { 143 arr = true; 144 for(let i = 0, len = value.length; i < len; i += 1)deepGet(value[i], path, index + 1, i); 145 } else if (path.length) deepGet(value, path, index + 1, arrayIndex); 146 } 147 }; 148 deepGet(obj, isString(path) ? path.split(".") : path, 0); 149 return arr ? list : list[0]; 150} 151//#endregion 152//#region src/core/config.ts 153const MatchOptions = { 154 includeMatches: false, 155 findAllMatches: false, 156 minMatchCharLength: 1 157}; 158const BasicOptions = { 159 isCaseSensitive: false, 160 ignoreDiacritics: false, 161 includeScore: false, 162 keys: [], 163 shouldSort: true, 164 sortFn: (a, b)=>a.score === b.score ? a.idx < b.idx ? -1 : 1 : a.score < b.score ? -1 : 1 165}; 166const FuzzyOptions = { 167 location: 0, 168 threshold: .6, 169 distance: 100 170}; 171const AdvancedOptions = { 172 useExtendedSearch: false, 173 useTokenSearch: false, 174 tokenize: void 0, 175 tokenMatch: "any", 176 getFn: get, 177 ignoreLocation: false, 178 ignoreFieldNorm: false, 179 fieldNormWeight: 1 180}; 181const Config = Object.freeze({ 182 ...BasicOptions, 183 ...MatchOptions, 184 ...FuzzyOptions, 185 ...AdvancedOptions 186}); 187//#endregion 188//#region src/tools/fieldNorm.ts 189function isWordSeparator(code) { 190 return code >= 9 && code <= 13 || code === 32 || code === 160; 191} 192function norm() { 193 let weight = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 1, mantissa = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 3; 194 const cache = /* @__PURE__ */ new Map(); 195 const m = Math.pow(10, mantissa); 196 return { 197 get (value) { 198 let numTokens = 0; 199 let inWord = false; 200 for(let i = 0; i < value.length; i++)if (!isWordSeparator(value.charCodeAt(i))) { 201 if (!inWord) { 202 numTokens++; 203 inWord = true; 204 } 205 } else inWord = false; 206 if (numTokens === 0) numTokens = 1; 207 if (cache.has(numTokens)) return cache.get(numTokens); 208 const n = Math.round(m / Math.pow(numTokens, .5 * weight)) / m; 209 cache.set(numTokens, n); 210 return n; 211 }, 212 clear () { 213 cache.clear(); 214 } 215 }; 216} 217//#endregion 218//#region src/tools/FuseIndex.ts 219var FuseIndex = class { 220 setSources() { 221 let docs = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : []; 222 this.docs = docs; 223 } 224 setIndexRecords() { 225 let records = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : []; 226 this.records = records; 227 } 228 setKeys() { 229 let keys = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : []; 230 this.keys = keys; 231 this._keysMap = {}; 232 keys.forEach((key, idx)=>{ 233 this._keysMap[key.id] = idx; 234 }); 235 } 236 create() { 237 if (this.isCreated || !this.docs.length) return; 238 this.isCreated = true; 239 const len = this.docs.length; 240 this.records = new Array(len); 241 let recordCount = 0; 242 if (isString(this.docs[0])) for(let i = 0; i < len; i++){ 243 const record = this._createStringRecord(this.docs[i], i); 244 if (record) this.records[recordCount++] = record; 245 } 246 else for(let i = 0; i < len; i++)this.records[recordCount++] = this._createObjectRecord(this.docs[i], i); 247 this.records.length = recordCount; 248 this.norm.clear(); 249 } 250 add(doc, docIndex) { 251 if (!Number.isInteger(docIndex) || docIndex < 0) throw new Error(INVALID_DOC_INDEX); 252 if (isString(doc)) { 253 const record = this._createStringRecord(doc, docIndex); 254 if (record) this.records.push(record); 255 return record; 256 } 257 const record = this._createObjectRecord(doc, docIndex); 258 this.records.push(record); 259 return record; 260 } 261 removeAt(idx) { 262 if (!Number.isInteger(idx) || idx < 0) throw new Error(INVALID_DOC_INDEX); 263 for(let i = 0, len = this.records.length; i < len; i += 1)if (this.records[i].i === idx) { 264 this.records.splice(i, 1); 265 break; 266 } 267 for(let i = 0, len = this.records.length; i < len; i += 1)if (this.records[i].i > idx) this.records[i].i -= 1; 268 } 269 removeAll(indices) { 270 const toRemove = /* @__PURE__ */ new Set(); 271 for (const v of indices)if (Number.isInteger(v) && v >= 0) toRemove.add(v); 272 if (toRemove.size === 0) return; 273 this.records = this.records.filter((r)=>!toRemove.has(r.i)); 274 const sorted = Array.from(toRemove).sort((a, b)=>a - b); 275 for (const record of this.records){ 276 let lo = 0; 277 let hi = sorted.length; 278 while(lo < hi){ 279 const mid = lo + hi >>> 1; 280 if (sorted[mid] < record.i) lo = mid + 1; 281 else hi = mid; 282 } 283 record.i -= lo; 284 } 285 } 286 getValueForItemAtKeyId(item, keyId) { 287 return item[this._keysMap[keyId]]; 288 } 289 size() { 290 return this.records.length; 291 } 292 _createStringRecord(doc, docIndex) { 293 if (!isDefined(doc) || isBlank(doc)) return null; 294 return { 295 v: doc, 296 i: docIndex, 297 n: this.norm.get(doc) 298 }; 299 } 300 _createObjectRecord(doc, docIndex) { 301 const record = { 302 i: docIndex, 303 $: {} 304 }; 305 for(let keyIndex = 0, keyLen = this.keys.length; keyIndex < keyLen; keyIndex++){
306 const key = this.keys[keyIndex]; 307 const value = key.getFn ? key.getFn(doc) : this.getFn(doc, key.path); 308 if (!isDefined(value)) continue; 309 if (isArray(value)) { 310 const subRecords = []; 311 for(let i = 0, len = value.length; i < len; i += 1){ 312 const item = value[i]; 313 if (!isDefined(item)) continue; 314 if (isString(item)) { 315 if (!isBlank(item)) { 316 const subRecord = { 317 v: item, 318 i, 319 n: this.norm.get(item) 320 }; 321 subRecords.push(subRecord); 322 } 323 } else if (isDefined(item.v)) { 324 const text = isString(item.v) ? item.v : toString(item.v); 325 if (!isBlank(text)) { 326 const subRecord = { 327 v: text, 328 i: item.i, 329 n: this.norm.get(text) 330 }; 331 subRecords.push(subRecord); 332 } 333 } 334 } 335 record.$[keyIndex] = subRecords; 336 } else if (isString(value) && !isBlank(value)) { 337 const subRecord = { 338 v: value, 339 n: this.norm.get(value) 340 }; 341 record.$[keyIndex] = subRecord; 342 } 343 } 344 return record; 345 } 346 toJSON() { 347 return { 348 keys: this.keys.map((param)=>{ 349 let { getFn, ...key } = param; 350 return key; 351 }), 352 records: this.records 353 }; 354 } 355 constructor({ getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}){ 356 this.norm = norm(fieldNormWeight, 3); 357 this.getFn = getFn; 358 this.isCreated = false; 359 this.docs = []; 360 this.keys = []; 361 this._keysMap = {}; 362 this.setIndexRecords(); 363 } 364}; 365function createIndex(keys, docs) { 366 let { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; 367 const myIndex = new FuseIndex({ 368 getFn, 369 fieldNormWeight 370 }); 371 myIndex.setKeys(keys.map(createKey)); 372 myIndex.setSources(docs); 373 myIndex.create(); 374 return myIndex; 375} 376function parseIndex(data) { 377 let { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; 378 const { keys, records } = data; 379 const myIndex = new FuseIndex({ 380 getFn, 381 fieldNormWeight 382 }); 383 myIndex.setKeys(keys); 384 myIndex.setIndexRecords(records); 385 return myIndex; 386} 387//#endregion 388//#region src/search/bitap/convertMaskToIndices.ts 389function convertMaskToIndices() { 390 let matchmask = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [], minMatchCharLength = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Config.minMatchCharLength; 391 const indices = []; 392 let start = -1; 393 let end = -1; 394 let i = 0; 395 for(let len = matchmask.length; i < len; i += 1){ 396 const match = matchmask[i]; 397 if (match && start === -1) start = i; 398 else if (!match && start !== -1) { 399 end = i - 1; 400 if (end - start + 1 >= minMatchCharLength) indices.push([ 401 start, 402 end 403 ]); 404 start = -1; 405 } 406 } 407 if (matchmask[i - 1] && i - start >= minMatchCharLength) indices.push([ 408 start, 409 i - 1 410 ]); 411 return indices; 412} 413//#endregion 414//#region src/search/bitap/search.ts 415function search(text, pattern, patternAlphabet) { 416 let { location = Config.location, distance = Config.distance, threshold = Config.threshold, findAllMatches = Config.findAllMatches, minMatchCharLength = Config.minMatchCharLength, includeMatches = Config.includeMatches, ignoreLocation = Config.ignoreLocation } = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {}; 417 if (pattern.length > 32) throw new Error(PATTERN_LENGTH_TOO_LARGE(32)); 418 const patternLen = pattern.length; 419 const textLen = text.length; 420 const expectedLocation = Math.max(0, Math.min(location, textLen));
vendor: 25,373 bytes, lines 421-1038
421 let currentThreshold = threshold; 422 let bestLocation = expectedLocation; 423 const calcScore = (errors, currentLocation)=>{ 424 const accuracy = errors / patternLen; 425 if (ignoreLocation) return accuracy; 426 const proximity = Math.abs(expectedLocation - currentLocation); 427 if (!distance) return proximity ? 1 : accuracy; 428 return accuracy + proximity / distance; 429 }; 430 const computeMatches = minMatchCharLength > 1 || includeMatches; 431 const matchMask = computeMatches ? Array(textLen) : []; 432 let index; 433 while((index = text.indexOf(pattern, bestLocation)) > -1){ 434 const score = calcScore(0, index); 435 currentThreshold = Math.min(score, currentThreshold); 436 bestLocation = index + patternLen; 437 if (computeMatches) { 438 let i = 0; 439 while(i < patternLen){ 440 matchMask[index + i] = 1; 441 i += 1; 442 } 443 } 444 } 445 bestLocation = -1; 446 let lastBitArr = []; 447 let finalScore = 1; 448 let bestErrors = 0; 449 let binMax = patternLen + textLen; 450 const mask = 1 << patternLen - 1; 451 for(let i = 0; i < patternLen; i += 1){ 452 let binMin = 0; 453 let binMid = binMax; 454 while(binMin < binMid){ 455 if (calcScore(i, expectedLocation + binMid) <= currentThreshold) binMin = binMid; 456 else binMax = binMid; 457 binMid = Math.floor((binMax - binMin) / 2 + binMin); 458 } 459 binMax = binMid; 460 let start = Math.max(1, expectedLocation - binMid + 1); 461 const finish = findAllMatches ? textLen : Math.min(expectedLocation + binMid, textLen) + patternLen; 462 const bitArr = Array(finish + 2); 463 bitArr[finish + 1] = (1 << i) - 1; 464 for(let j = finish; j >= start; j -= 1){ 465 const currentLocation = j - 1; 466 const charMatch = patternAlphabet[text[currentLocation]]; 467 bitArr[j] = (bitArr[j + 1] << 1 | 1) & charMatch; 468 if (i) bitArr[j] |= (lastBitArr[j + 1] | lastBitArr[j]) << 1 | 1 | lastBitArr[j + 1]; 469 if (bitArr[j] & mask) { 470 finalScore = calcScore(i, currentLocation); 471 if (finalScore <= currentThreshold) { 472 currentThreshold = finalScore; 473 bestLocation = currentLocation; 474 bestErrors = i; 475 if (bestLocation <= expectedLocation) break; 476 start = Math.max(1, 2 * expectedLocation - bestLocation); 477 } 478 } 479 } 480 if (calcScore(i + 1, expectedLocation) > currentThreshold) break; 481 lastBitArr = bitArr; 482 } 483 if (computeMatches && bestLocation >= 0) { 484 const matchEnd = Math.min(textLen - 1, bestLocation + patternLen - 1 + bestErrors); 485 for(let k = bestLocation; k <= matchEnd; k += 1)if (patternAlphabet[text[k]]) matchMask[k] = 1; 486 } 487 const result = { 488 isMatch: bestLocation >= 0, 489 score: Math.max(.001, finalScore) 490 }; 491 if (computeMatches) { 492 const indices = convertMaskToIndices(matchMask, minMatchCharLength); 493 if (!indices.length) result.isMatch = false; 494 else if (includeMatches) result.indices = indices; 495 } 496 return result; 497} 498//#endregion 499//#region src/search/bitap/createPatternAlphabet.ts 500function createPatternAlphabet(pattern) { 501 const mask = {}; 502 for(let i = 0, len = pattern.length; i < len; i += 1){ 503 const char = pattern.charAt(i); 504 mask[char] = (mask[char] || 0) | 1 << len - i - 1; 505 } 506 return mask; 507} 508//#endregion 509//#region src/helpers/mergeIndices.ts 510function mergeIndices(indices) { 511 if (indices.length <= 1) return indices; 512 indices.sort((a, b)=>a[0] - b[0] || a[1] - b[1]); 513 const merged = [ 514 indices[0] 515 ]; 516 for(let i = 1, len = indices.length; i < len; i += 1){ 517 const last = merged[merged.length - 1]; 518 const curr = indices[i]; 519 if (curr[0] <= last[1] + 1) last[1] = Math.max(last[1], curr[1]); 520 else merged.push(curr); 521 } 522 return merged; 523} 524//#endregion 525//#region src/helpers/diacritics.ts 526const NON_DECOMPOSABLE_MAP = { 527 "Å": "l", 528 "Å": "L", 529 "Ä": "d", 530 "Ä": "D", 531 "ø": "o", 532 "Ã": "O", 533 "ħ": "h", 534 "Ħ": "H", 535 "ŧ": "t", 536 "Ŧ": "T", 537 "ı": "i", 538 "Ã": "ss" 539}; 540const NON_DECOMPOSABLE_RE = new RegExp("[" + Object.keys(NON_DECOMPOSABLE_MAP).join("") + "]", "g"); 541const stripDiacritics = typeof String.prototype.normalize === "function" ? (str)=>str.normalize("NFD").replace(/[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F]/g, "").replace(NON_DECOMPOSABLE_RE, (ch)=>NON_DECOMPOSABLE_MAP[ch]) : (str)=>str; 542//#endregion 543//#region src/search/bitap/index.ts 544var BitapSearch = class { 545 searchIn(text) { 546 const { isCaseSensitive, ignoreDiacritics, includeMatches } = this.options; 547 text = isCaseSensitive ? text : text.toLowerCase(); 548 text = ignoreDiacritics ? stripDiacritics(text) : text; 549 if (this.pattern === text) { 550 if (text.length < this.options.minMatchCharLength) return { 551 isMatch: false, 552 score: 1 553 }; 554 const result = { 555 isMatch: true, 556 score: 0 557 }; 558 if (includeMatches) result.indices = [ 559 [ 560 0, 561 text.length - 1 562 ] 563 ]; 564 return result; 565 } 566 const { location, distance, threshold, findAllMatches, minMatchCharLength, ignoreLocation } = this.options; 567 const allIndices = []; 568 let totalScore = 0; 569 let hasMatches = false; 570 this.chunks.forEach((param)=>{ 571 let { pattern, alphabet, startIndex } = param; 572 const { isMatch, score, indices } = search(text, pattern, alphabet, { 573 location: location + startIndex, 574 distance, 575 threshold, 576 findAllMatches, 577 minMatchCharLength, 578 includeMatches, 579 ignoreLocation 580 }); 581 if (isMatch) hasMatches = true; 582 totalScore += score; 583 if (isMatch && indices) allIndices.push(...indices); 584 }); 585 const result = { 586 isMatch: hasMatches, 587 score: hasMatches ? totalScore / this.chunks.length : 1 588 }; 589 if (hasMatches && includeMatches) result.indices = mergeIndices(allIndices); 590 return result; 591 } 592 constructor(pattern, { location = Config.location, threshold = Config.threshold, distance = Config.distance, includeMatches = Config.includeMatches, findAllMatches = Config.findAllMatches, minMatchCharLength = Config.minMatchCharLength, isCaseSensitive = Config.isCaseSensitive, ignoreDiacritics = Config.ignoreDiacritics, ignoreLocation = Config.ignoreLocation } = {}){ 593 this.options = { 594 location, 595 threshold, 596 distance, 597 includeMatches, 598 findAllMatches, 599 minMatchCharLength, 600 isCaseSensitive, 601 ignoreDiacritics, 602 ignoreLocation 603 }; 604 pattern = isCaseSensitive ? pattern : pattern.toLowerCase(); 605 pattern = ignoreDiacritics ? stripDiacritics(pattern) : pattern; 606 this.pattern = pattern; 607 this.chunks = []; 608 if (!this.pattern.length) return; 609 const addChunk = (pattern, startIndex)=>{ 610 this.chunks.push({ 611 pattern, 612 alphabet: createPatternAlphabet(pattern), 613 startIndex 614 }); 615 }; 616 const len = this.pattern.length; 617 if (len > 32) { 618 let i = 0; 619 const remainder = len % 32; 620 const end = len - remainder; 621 while(i < end){ 622 addChunk(this.pattern.substr(i, 32), i); 623 i += 32; 624 } 625 if (remainder) { 626 const startIndex = len - 32; 627 addChunk(this.pattern.substr(startIndex), startIndex); 628 } 629 } else addChunk(this.pattern, 0); 630 } 631}; 632//#endregion 633//#region src/search/extended/matchers.ts 634const MULTI_MATCH_TYPES = new Set([ 635 "fuzzy", 636 "include" 637]); 638function isInverse(type) { 639 return type.startsWith("inverse"); 640} 641const matchers = [ 642 { 643 type: "exact", 644 multiRegex: /^="(.*)"$/, 645 singleRegex: /^=(.*)$/, 646 create: (pattern)=>({ 647 type: "exact", 648 search (text) { 649 const isMatch = text === pattern; 650 return { 651 isMatch, 652 score: isMatch ? 0 : 1, 653 indices: [ 654 0, 655 pattern.length - 1 656 ] 657 }; 658 } 659 }) 660 }, 661 { 662 type: "include", 663 multiRegex: /^'"(.*)"$/, 664 singleRegex: /^'(.*)$/, 665 create: (pattern)=>({ 666 type: "include", 667 search (text) { 668 let location = 0; 669 let index; 670 const indices = []; 671 const patternLen = pattern.length; 672 while((index = text.indexOf(pattern, location)) > -1){ 673 location = index + patternLen; 674 indices.push([ 675 index, 676 location - 1 677 ]); 678 } 679 const isMatch = !!indices.length; 680 return { 681 isMatch, 682 score: isMatch ? 0 : 1, 683 indices 684 }; 685 } 686 }) 687 }, 688 { 689 type: "prefix-exact", 690 multiRegex: /^\^"(.*)"$/, 691 singleRegex: /^\^(.*)$/, 692 create: (pattern)=>({ 693 type: "prefix-exact", 694 search (text) { 695 const isMatch = text.startsWith(pattern); 696 return { 697 isMatch, 698 score: isMatch ? 0 : 1, 699 indices: [ 700 0, 701 pattern.length - 1 702 ] 703 }; 704 } 705 }) 706 }, 707 { 708 type: "inverse-prefix-exact", 709 multiRegex: /^!\^"(.*)"$/, 710 singleRegex: /^!\^(.*)$/, 711 create: (pattern)=>({ 712 type: "inverse-prefix-exact", 713 search (text) { 714 const isMatch = !text.startsWith(pattern); 715 return { 716 isMatch, 717 score: isMatch ? 0 : 1, 718 indices: [ 719 0, 720 text.length - 1 721 ] 722 }; 723 } 724 }) 725 }, 726 { 727 type: "inverse-suffix-exact", 728 multiRegex: /^!"(.*)"\$$/, 729 singleRegex: /^!(.*)\$$/, 730 create: (pattern)=>({ 731 type: "inverse-suffix-exact", 732 search (text) { 733 const isMatch = !text.endsWith(pattern); 734 return { 735 isMatch, 736 score: isMatch ? 0 : 1, 737 indices: [ 738 0, 739 text.length - 1 740 ] 741 }; 742 } 743 }) 744 }, 745 { 746 type: "suffix-exact", 747 multiRegex: /^"(.*)"\$$/, 748 singleRegex: /^(.*)\$$/, 749 create: (pattern)=>({ 750 type: "suffix-exact", 751 search (text) { 752 const isMatch = text.endsWith(pattern); 753 return { 754 isMatch, 755 score: isMatch ? 0 : 1, 756 indices: [ 757 text.length - pattern.length, 758 text.length - 1 759 ] 760 }; 761 } 762 }) 763 }, 764 { 765 type: "inverse-exact", 766 multiRegex: /^!"(.*)"$/, 767 singleRegex: /^!(.*)$/, 768 create: (pattern)=>({ 769 type: "inverse-exact", 770 search (text) { 771 const isMatch = text.indexOf(pattern) === -1; 772 return { 773 isMatch, 774 score: isMatch ? 0 : 1, 775 indices: [ 776 0, 777 text.length - 1 778 ] 779 }; 780 } 781 }) 782 }, 783 { 784 type: "fuzzy", 785 multiRegex: /^"(.*)"$/, 786 singleRegex: /^(.*)$/, 787 create: function(pattern) { 788 let options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; 789 var _options_location, _options_threshold, _options_distance, _options_includeMatches, _options_findAllMatches, _options_minMatchCharLength, _options_isCaseSensitive, _options_ignoreDiacritics, _options_ignoreLocation; 790 const bitap = new BitapSearch(pattern, { 791 location: (_options_location = options.location) !== null && _options_location !== void 0 ? _options_location : Config.location, 792 threshold: (_options_threshold = options.threshold) !== null && _options_threshold !== void 0 ? _options_threshold : Config.threshold, 793 distance: (_options_distance = options.distance) !== null && _options_distance !== void 0 ? _options_distance : Config.distance, 794 includeMatches: (_options_includeMatches = options.includeMatches) !== null && _options_includeMatches !== void 0 ? _options_includeMatches : Config.includeMatches, 795 findAllMatches: (_options_findAllMatches = options.findAllMatches) !== null && _options_findAllMatches !== void 0 ? _options_findAllMatches : Config.findAllMatches, 796 minMatchCharLength: (_options_minMatchCharLength = options.minMatchCharLength) !== null && _options_minMatchCharLength !== void 0 ? _options_minMatchCharLength : Config.minMatchCharLength, 797 isCaseSensitive: (_options_isCaseSensitive = options.isCaseSensitive) !== null && _options_isCaseSensitive !== void 0 ? _options_isCaseSensitive : Config.isCaseSensitive, 798 ignoreDiacritics: (_options_ignoreDiacritics = options.ignoreDiacritics) !== null && _options_ignoreDiacritics !== void 0 ? _options_ignoreDiacritics : Config.ignoreDiacritics, 799 ignoreLocation: (_options_ignoreLocation = options.ignoreLocation) !== null && _options_ignoreLocation !== void 0 ? _options_ignoreLocation : Config.ignoreLocation 800 }); 801 return { 802 type: "fuzzy", 803 search (text) { 804 return bitap.searchIn(text); 805 } 806 }; 807 } 808 } 809]; 810//#endregion 811//#region src/search/extended/parseQuery.ts 812const matchersLen = matchers.length; 813const ESCAPED_PIPE = "\0"; 814const OR_TOKEN = "|"; 815function tokenize(pattern) { 816 const tokens = []; 817 const len = pattern.length; 818 let i = 0; 819 while(i < len){ 820 while(i < len && pattern[i] === " ")i++; 821 if (i >= len) break; 822 let j = i; 823 while(j < len && pattern[j] !== " " && pattern[j] !== "\"")j++; 824 if (j < len && pattern[j] === "\"") { 825 j++; 826 while(j < len){ 827 if (pattern[j] === "\"") { 828 const next = j + 1; 829 if (next >= len || pattern[next] === " ") { 830 j++; 831 break; 832 } 833 if (pattern[next] === "$" && (next + 1 >= len || pattern[next + 1] === " ")) { 834 j += 2; 835 break; 836 } 837 } 838 j++; 839 } 840 tokens.push(pattern.substring(i, j)); 841 i = j; 842 } else { 843 while(j < len && pattern[j] !== " ")j++; 844 tokens.push(pattern.substring(i, j)); 845 i = j; 846 } 847 } 848 return tokens; 849} 850function getMatch(pattern, exp) { 851 const matches = pattern.match(exp); 852 return matches ? matches[1] : null; 853} 854function parseQuery(pattern) { 855 let options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; 856 return pattern.replace(/\\\|/g, ESCAPED_PIPE).split(OR_TOKEN).map((item)=>{ 857 const query = tokenize(item.replace(/\u0000/g, "|").trim()).filter((item)=>item && !!item.trim()); 858 const results = []; 859 for(let i = 0, len = query.length; i < len; i += 1){ 860 const queryItem = query[i]; 861 let found = false; 862 let idx = -1; 863 while(!found && ++idx < matchersLen){ 864 const def = matchers[idx]; 865 const token = getMatch(queryItem, def.multiRegex); 866 if (token) { 867 results.push(def.create(token, options)); 868 found = true; 869 } 870 } 871 if (found) continue; 872 idx = -1; 873 while(++idx < matchersLen){ 874 const def = matchers[idx]; 875 const token = getMatch(queryItem, def.singleRegex); 876 if (token) { 877 results.push(def.create(token, options)); 878 break; 879 } 880 } 881 } 882 return results; 883 }); 884} 885//#endregion 886//#region src/search/extended/index.ts 887var ExtendedSearch = class { 888 static condition(_, options) { 889 return options.useExtendedSearch; 890 } 891 searchIn(text) { 892 const query = this.query; 893 if (!query) return { 894 isMatch: false, 895 score: 1 896 }; 897 const { includeMatches, isCaseSensitive, ignoreDiacritics } = this.options; 898 text = isCaseSensitive ? text : text.toLowerCase(); 899 text = ignoreDiacritics ? stripDiacritics(text) : text; 900 let numMatches = 0; 901 const allIndices = []; 902 let totalScore = 0; 903 let hasInverse = false; 904 for(let i = 0, qLen = query.length; i < qLen; i += 1){ 905 const searchers = query[i]; 906 allIndices.length = 0; 907 numMatches = 0; 908 hasInverse = false; 909 for(let j = 0, pLen = searchers.length; j < pLen; j += 1){ 910 const matcher = searchers[j]; 911 const { isMatch, indices, score } = matcher.search(text); 912 if (isMatch) { 913 numMatches += 1; 914 totalScore += score; 915 if (isInverse(matcher.type)) hasInverse = true; 916 if (includeMatches) if (MULTI_MATCH_TYPES.has(matcher.type)) allIndices.push(...indices); 917 else allIndices.push(indices); 918 } else { 919 totalScore = 0; 920 numMatches = 0; 921 allIndices.length = 0; 922 hasInverse = false; 923 break; 924 } 925 } 926 if (numMatches) { 927 const result = { 928 isMatch: true, 929 score: totalScore / numMatches 930 }; 931 if (hasInverse) result.hasInverse = true; 932 if (includeMatches) result.indices = mergeIndices(allIndices); 933 return result; 934 } 935 } 936 return { 937 isMatch: false, 938 score: 1 939 }; 940 } 941 constructor(pattern, { isCaseSensitive = Config.isCaseSensitive, ignoreDiacritics = Config.ignoreDiacritics, includeMatches = Config.includeMatches, minMatchCharLength = Config.minMatchCharLength, ignoreLocation = Config.ignoreLocation, findAllMatches = Config.findAllMatches, location = Config.location, threshold = Config.threshold, distance = Config.distance } = {}){ 942 this.query = null; 943 this.options = { 944 isCaseSensitive, 945 ignoreDiacritics, 946 includeMatches, 947 minMatchCharLength, 948 findAllMatches, 949 ignoreLocation, 950 location, 951 threshold, 952 distance 953 }; 954 pattern = isCaseSensitive ? pattern : pattern.toLowerCase(); 955 pattern = ignoreDiacritics ? stripDiacritics(pattern) : pattern; 956 this.pattern = pattern; 957 this.query = parseQuery(this.pattern, this.options); 958 } 959}; 960//#endregion 961//#region src/core/register.ts 962const registeredSearchers = []; 963function register() { 964 for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){ 965 args[_key] = arguments[_key]; 966 } 967 registeredSearchers.push(...args); 968} 969function createSearcher(pattern, options) { 970 for(let i = 0, len = registeredSearchers.length; i < len; i += 1){ 971 const searcherClass = registeredSearchers[i]; 972 if (searcherClass.condition(pattern, options)) return new searcherClass(pattern, options); 973 } 974 return new BitapSearch(pattern, options); 975} 976//#endregion 977//#region src/core/queryParser.ts 978const LogicalOperator = { 979 AND: "$and", 980 OR: "$or" 981}; 982const KeyType = { 983 PATH: "$path", 984 PATTERN: "$val" 985}; 986const isExpression = (query)=>!!(query[LogicalOperator.AND] || query[LogicalOperator.OR]); 987const isPath = (query)=>!!query[KeyType.PATH]; 988const isLeaf = (query)=>!isArray(query) && isObject(query) && !isExpression(query); 989const convertToExplicit = (query)=>({ 990 [LogicalOperator.AND]: Object.keys(query).map((key)=>({ 991 [key]: query[key] 992 })) 993 }); 994function parse(query, options) { 995 let { auto = true } = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; 996 const next = (query)=>{ 997 if (isString(query)) { 998 const obj = { 999 keyId: null, 1000 pattern: query 1001 }; 1002 if (auto) obj.searcher = createSearcher(query, options); 1003 return obj; 1004 } 1005 const keys = Object.keys(query); 1006 const isQueryPath = isPath(query); 1007 if (!isQueryPath && keys.length > 1 && !isExpression(query)) return next(convertToExplicit(query)); 1008 if (isLeaf(query)) { 1009 const key = isQueryPath ? query[KeyType.PATH] : keys[0]; 1010 const pattern = isQueryPath ? query[KeyType.PATTERN] : query[key]; 1011 if (!isString(pattern)) throw new Error(LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY(key)); 1012 const obj = { 1013 keyId: createKeyId(key), 1014 pattern 1015 }; 1016 if (auto) obj.searcher = createSearcher(pattern, options); 1017 return obj; 1018 } 1019 const node = { 1020 children: [], 1021 operator: keys[0] 1022 }; 1023 keys.forEach((key)=>{ 1024 const value = query[key]; 1025 if (isArray(value)) value.forEach((item)=>{ 1026 node.children.push(next(item)); 1027 }); 1028 }); 1029 return node; 1030 }; 1031 if (!isExpression(query)) query = convertToExplicit(query); 1032 return next(query); 1033} 1034//#endregion 1035//#region src/core/computeScore.ts 1036function computeScoreSingle(matches, param) { 1037 let { ignoreFieldNorm = Config.ignoreFieldNorm } = param; 1038 let totalScore = 1;
1039 matches.forEach((param)=>{ 1040 let { key, norm, score } = param; 1041 const weight = key ? key.weight : null; 1042 totalScore *= Math.pow(score === 0 && weight ? Number.EPSILON : score, (weight || 1) * (ignoreFieldNorm ? 1 : norm)); 1043 }); 1044 return totalScore; 1045} 1046function computeScore(results, param) { 1047 let { ignoreFieldNorm = Config.ignoreFieldNorm } = param; 1048 results.forEach((result)=>{ 1049 result.score = computeScoreSingle(result.matches, { 1050 ignoreFieldNorm 1051 }); 1052 }); 1053} 1054//#endregion 1055//#region src/tools/MaxHeap.ts 1056var MaxHeap = class { 1057 get size() { 1058 return this.heap.length; 1059 } 1060 insert(item) { 1061 if (this.size < this.limit) { 1062 this.heap.push(item); 1063 this._bubbleUp(this.size - 1); 1064 } else if (this.comparator(item, this.heap[0]) < 0) { 1065 this.heap[0] = item; 1066 this._sinkDown(0); 1067 } 1068 } 1069 extractSorted() { 1070 return this.heap.sort(this.comparator); 1071 } 1072 _bubbleUp(i) { 1073 const heap = this.heap; 1074 while(i > 0){ 1075 const parent = i - 1 >> 1; 1076 if (this.comparator(heap[i], heap[parent]) <= 0) break; 1077 const tmp = heap[i]; 1078 heap[i] = heap[parent]; 1079 heap[parent] = tmp; 1080 i = parent; 1081 } 1082 } 1083 _sinkDown(i) { 1084 const heap = this.heap; 1085 const len = heap.length; 1086 let largest = i; 1087 do { 1088 i = largest; 1089 const left = 2 * i + 1; 1090 const right = 2 * i + 2; 1091 if (left < len && this.comparator(heap[left], heap[largest]) > 0) largest = left; 1092 if (right < len && this.comparator(heap[right], heap[largest]) > 0) largest = right; 1093 if (largest !== i) { 1094 const tmp = heap[i]; 1095 heap[i] = heap[largest]; 1096 heap[largest] = tmp; 1097 } 1098 }while (largest !== i) 1099 } 1100 constructor(limit, comparator){ 1101 this.limit = limit; 1102 this.heap = []; 1103 this.comparator = comparator; 1104 } 1105}; 1106//#endregion 1107//#region src/core/formatMatches.ts 1108function formatMatches(result) { 1109 const matches = []; 1110 result.matches.forEach((match)=>{ 1111 if (!isDefined(match.indices) || !match.indices.length) return; 1112 const obj = { 1113 indices: match.indices, 1114 value: match.value 1115 }; 1116 if (match.key) obj.key = match.key.id; 1117 if (match.idx > -1) obj.refIndex = match.idx; 1118 matches.push(obj); 1119 }); 1120 return matches; 1121} 1122//#endregion 1123//#region src/core/format.ts 1124function format(results, docs) { 1125 let { includeMatches = Config.includeMatches, includeScore = Config.includeScore } = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; 1126 return results.map((result)=>{ 1127 const { idx } = result; 1128 const data = { 1129 item: docs[idx], 1130 refIndex: idx 1131 }; 1132 if (includeMatches) data.matches = formatMatches(result); 1133 if (includeScore) data.score = result.score; 1134 return data; 1135 }); 1136} 1137//#endregion 1138//#region src/search/token/analyzer.ts 1139const DEFAULT_TOKEN = RegExp("[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376-\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E-\\u066F\\u0671-\\u06D3\\u06D5\\u06E5-\\u06E6\\u06EE-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4-\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088F\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC-\\u09DD\\u09DF-\\u09E1\\u09F0-\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32-\\u0A33\\u0A35-\\u0A36\\u0A38-\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0-\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C-\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u
11390B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F\\u0BA3-\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5C-\\u0C5D\\u0C60-\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDC-\\u0CDE\\u0CE0-\\u0CE1\\u0CF1-\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32-\\u0E33\\u0E40-\\u0E46\\u0E81-\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2-\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065-\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE-\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C8A\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5-\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183-\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3006\\u3031-\\u3035\\u303B-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7DC\\uA7F1-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD-\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5-\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\\u{10000}-\\u{1000B}\\u{1000D}-\\u{10026}\\u{10028}-\\u{1003A}\\u{1003C}-\\u{1003D}\\u{1003F}-\\u{1004D}\\u{10050}-\\u{1005D}\\u{10080}-\\u{100FA}\\u{10280}-\\u{1029C}\\u{102A0}-\\u{102D0}\\u{10300}-\\u{1031F}\\u{1032D}-\\u{10340}\\u{10342}-\\u{10349}\\u{10350}-\\u{10375}\\u{10380}-\\u{1039D}\\u{103A0}-\\u{103C3}\\u{103C8}-\\u{103CF}\\u{10400}-\\u{1049D}\\u{104B0}-\\u{104D3}\\u{104D8}-\\u{104FB}\\u{10500}-\\u{10527}\\u{10530}-\\u{10563}\\u{10570}-\\u{1057A}\\u{1057C}-\\u{1058A}\\u{1058C}-\\u{10592}\\u{10594}-\\u{10595}\\u{10597}-\\u{105A1}\\u{105A3}-\\u{105B1}\\u{105B3}-\\u{105B9}\\u{105BB}-\\u{105BC}\\u{105C0}-\\u{105F3}\\u{10600}-\\u{10736}\\u{10740}-\\u{10755}\\u{10760}-\\u{10767}\\u{10780}-\\u{10785}\\u{10787}-\\u{107B0}\\u{107B2}-\\u{107BA}\\u{10800}-\\u{10805}\\u{10808}\\u{1080A}-\\u{10835}\\u{10837}-\\u{10838}\\u{1083C}\\u{1083F}-\\u{10855}\\u{10860}-\\u{10876}\\u{10880}-\\u{1089E}\\u{108E0}-\\u{108F2}\\u{108F4}-\\u{108F5}\\u{10900}-\\u{10915}\\u{10920}-\\u{10939}\\u{10940}-\\u{10959}\\u{10980}-\\u{109B7}\\u{109BE}-\\u{109BF}\\u{10A00}\\u{10A10}-\\u{10A13}\\u{10A15}-\\u{10A17}\\u{10A19}-\\u{10A35}\\u{10A60}-\\u{10A7C}\\u{10A80}-\\u{10A9C}\\u{10AC0}-\\u{10AC7}\\u{10AC9}-\\u{10AE4}\\u{10B00}-\\u{10B35}\\u{10B40}-\\u{10B55}\\u{10B60}-\\u{10B72}\\u{10B80}-\\u{10B91}\\u{10C00}-\\u{10C48}\\u{10C80}-\\u{10CB2}\\u{10CC0}-\\u{10CF2}\\u{10D00}-\\u{10D23}\\u{10D4A}-\\u{10D65}\\u{10D6F}-\\u{10D85}\\u{10E80}-\\u{10EA9}\\u{10EB0}-\\u{10EB1}\\u{10EC2}-\\u{10EC7}\\u{10F00}-\\u{10F1C}\\u{10F27}\\u{10F30}-\\u{10F45}\\u{10F70}-\\u{10F81}\\u{10FB0}-\\u{10FC4}\\u{10FE0}-\\u{10FF6}\\u{11003}-\\u{11037}\\u{11071}-\\u{11072}\\u{11075}\\u{11083}-\\u{110AF}\\u{110D0}-\\u{110E8}\\u{11103}-\\u{11126}\\u{11144}\\u{11147}\\u{11150}-\\u{11172}\\u{11176}\\u{11183}-\\u{111B2}\\u{111C1}-\\u{111C4}\\u{111DA}\\u{111DC}\\u{11200}-\\u{11211}\\u{11213}-\\u{1122B}\\u{1123F}-\\u{11240}\\u{11280}-\\u{11286}\\u{11288}\\u{1128A}-\\u{1128D}\\u{1128F}-\\u{1129D}\\u{1129F}-\\u{112A8}\\u{112B0}-\\u{112DE}\\u{11305}-\\u{1130C}\\u{1130F}-\\u{11310}\\u{11313}-\\u{11328}\\u{1132A}-\\u{11330}\\u{11332}-\\u{11333}\\u{11335}-\\u{11339}\\u{1133D}\\u{11350}\\u{1135D}-\\u{11361}\\u{11380}-\\u{11389}\\u{1138B}\\u{1138E}\\u{11390}-\\u{113B5}\\u{113B7}\\u{113D1}\\u{113D3}\\u{11400}-\\u{11434}\\u{11447}-\\u{1144A}\\u{1145F}-\\u{11461}\\u{11480}-\\u{114AF}\\u{114C4}-\\u{114C5}\\u{114C7}\\u{11580}-\\u{115AE}\\u{115D8}-\\u{115DB}\\u{11600}-\\u{1162F}\\u{11644}\\u{11680}-\\u{116AA}\\u{116B8}\\u{11700}-\\u{1171A}\\u{11740}-\\u{11746}\\u{11800}-\\u{1182B}
1139\\u{118A0}-\\u{118DF}\\u{118FF}-\\u{11906}\\u{11909}\\u{1190C}-\\u{11913}\\u{11915}-\\u{11916}\\u{11918}-\\u{1192F}\\u{1193F}\\u{11941}\\u{119A0}-\\u{119A7}\\u{119AA}-\\u{119D0}\\u{119E1}\\u{119E3}\\u{11A00}\\u{11A0B}-\\u{11A32}\\u{11A3A}\\u{11A50}\\u{11A5C}-\\u{11A89}\\u{11A9D}\\u{11AB0}-\\u{11AF8}\\u{11BC0}-\\u{11BE0}\\u{11C00}-\\u{11C08}\\u{11C0A}-\\u{11C2E}\\u{11C40}\\u{11C72}-\\u{11C8F}\\u{11D00}-\\u{11D06}\\u{11D08}-\\u{11D09}\\u{11D0B}-\\u{11D30}\\u{11D46}\\u{11D60}-\\u{11D65}\\u{11D67}-\\u{11D68}\\u{11D6A}-\\u{11D89}\\u{11D98}\\u{11DB0}-\\u{11DDB}\\u{11EE0}-\\u{11EF2}\\u{11F02}\\u{11F04}-\\u{11F10}\\u{11F12}-\\u{11F33}\\u{11FB0}\\u{12000}-\\u{12399}\\u{12480}-\\u{12543}\\u{12F90}-\\u{12FF0}\\u{13000}-\\u{1342F}\\u{13441}-\\u{13446}\\u{13460}-\\u{143FA}\\u{14400}-\\u{14646}\\u{16100}-\\u{1611D}\\u{16800}-\\u{16A38}\\u{16A40}-\\u{16A5E}\\u{16A70}-\\u{16ABE}\\u{16AD0}-\\u{16AED}\\u{16B00}-\\u{16B2F}\\u{16B40}-\\u{16B43}\\u{16B63}-\\u{16B77}\\u{16B7D}-\\u{16B8F}\\u{16D40}-\\u{16D6C}\\u{16E40}-\\u{16E7F}\\u{16EA0}-\\u{16EB8}\\u{16EBB}-\\u{16ED3}\\u{16F00}-\\u{16F4A}\\u{16F50}\\u{16F93}-\\u{16F9F}\\u{16FE0}-\\u{16FE1}\\u{16FE3}\\u{16FF2}-\\u{16FF3}\\u{17000}-\\u{18CD5}\\u{18CFF}-\\u{18D1E}\\u{18D80}-\\u{18DF2}\\u{1AFF0}-\\u{1AFF3}\\u{1AFF5}-\\u{1AFFB}\\u{1AFFD}-\\u{1AFFE}\\u{1B000}-\\u{1B122}\\u{1B132}\\u{1B150}-\\u{1B152}\\u{1B155}\\u{1B164}-\\u{1B167}\\u{1B170}-\\u{1B2FB}\\u{1BC00}-\\u{1BC6A}\\u{1BC70}-\\u{1BC7C}\\u{1BC80}-\\u{1BC88}\\u{1BC90}-\\u{1BC99}\\u{1D400}-\\u{1D454}\\u{1D456}-\\u{1D49C}\\u{1D49E}-\\u{1D49F}\\u{1D4A2}\\u{1D4A5}-\\u{1D4A6}\\u{1D4A9}-\\u{1D4AC}\\u{1D4AE}-\\u{1D4B9}\\u{1D4BB}\\u{1D4BD}-\\u{1D4C3}\\u{1D4C5}-\\u{1D505}\\u{1D507}-\\u{1D50A}\\u{1D50D}-\\u{1D514}\\u{1D516}-\\u{1D51C}\\u{1D51E}-\\u{1D539}\\u{1D53B}-\\u{1D53E}\\u{1D540}-\\u{1D544}\\u{1D546}\\u{1D54A}-\\u{1D550}\\u{1D552}-\\u{1D6A5}\\u{1D6A8}-\\u{1D6C0}\\u{1D6C2}-\\u{1D6DA}\\u{1D6DC}-\\u{1D6FA}\\u{1D6FC}-\\u{1D714}\\u{1D716}-\\u{1D734}\\u{1D736}-\\u{1D74E}\\u{1D750}-\\u{1D76E}\\u{1D770}-\\u{1D788}\\u{1D78A}-\\u{1D7A8}\\u{1D7AA}-\\u{1D7C2}\\u{1D7C4}-\\u{1D7CB}\\u{1DF00}-\\u{1DF1E}\\u{1DF25}-\\u{1DF2A}\\u{1E030}-\\u{1E06D}\\u{1E100}-\\u{1E12C}\\u{1E137}-\\u{1E13D}\\u{1E14E}\\u{1E290}-\\u{1E2AD}\\u{1E2C0}-\\u{1E2EB}\\u{1E4D0}-\\u{1E4EB}\\u{1E5D0}-\\u{1E5ED}\\u{1E5F0}\\u{1E6C0}-\\u{1E6DE}\\u{1E6E0}-\\u{1E6E2}\\u{1E6E4}-\\u{1E6E5}\\u{1E6E7}-\\u{1E6ED}\\u{1E6F0}-\\u{1E6F4}\\u{1E6FE}-\\u{1E6FF}\\u{1E7E0}-\\u{1E7E6}\\u{1E7E8}-\\u{1E7EB}\\u{1E7ED}-\\u{1E7EE}\\u{1E7F0}-\\u{1E7FE}\\u{1E800}-\\u{1E8C4}\\u{1E900}-\\u{1E943}\\u{1E94B}\\u{1EE00}-\\u{1EE03}\\u{1EE05}-\\u{1EE1F}\\u{1EE21}-\\u{1EE22}\\u{1EE24}\\u{1EE27}\\u{1EE29}-\\u{1EE32}\\u{1EE34}-\\u{1EE37}\\u{1EE39}\\u{1EE3B}\\u{1EE42}\\u{1EE47}\\u{1EE49}\\u{1EE4B}\\u{1EE4D}-\\u{1EE4F}\\u{1EE51}-\\u{1EE52}\\u{1EE54}\\u{1EE57}\\u{1EE59}\\u{1EE5B}\\u{1EE5D}\\u{1EE5F}\\u{1EE61}-\\u{1EE62}\\u{1EE64}\\u{1EE67}-\\u{1EE6A}\\u{1EE6C}-\\u{1EE72}\\u{1EE74}-\\u{1EE77}\\u{1EE79}-\\u{1EE7C}\\u{1EE7E}\\u{1EE80}-\\u{1EE89}\\u{1EE8B}-\\u{1EE9B}\\u{1EEA1}-\\u{1EEA3}\\u{1EEA5}-\\u{1EEA9}\\u{1EEAB}-\\u{1EEBB}\\u{20000}-\\u{2A6DF}\\u{2A700}-\\u{2B81D}\\u{2B820}-\\u{2CEAD}\\u{2CEB0}-\\u{2EBE0}\\u{2EBF0}-\\u{2EE5D}\\u{2F800}-\\u{2FA1D}\\u{30000}-\\u{3134A}\\u{31350}-\\u{33479}\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1-\\u05C2\\u05C4-\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7-\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0897-\\u089F\\u08CA-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7-\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2-\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47-\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70-\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2-\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47-\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62-\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u
11390C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55-\\u0C56\\u0C62-\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5-\\u0CD6\\u0CE2-\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B-\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62-\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2-\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\u0F18-\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F3F\\u0F71-\\u0F84\\u0F86-\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1715\\u1732-\\u1734\\u1752-\\u1753\\u1772-\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u180F\\u1885-\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ADD\\u1AE0-\\u1AEB\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099-\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E-\\uA69F\\uA6F0-\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880-\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C-\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7-\\uAAB8\\uAABE-\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5-\\uAAF6\\uABE3-\\uABEA\\uABEC-\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\u{101FD}\\u{102E0}\\u{10376}-\\u{1037A}\\u{10A01}-\\u{10A03}\\u{10A05}-\\u{10A06}\\u{10A0C}-\\u{10A0F}\\u{10A38}-\\u{10A3A}\\u{10A3F}\\u{10AE5}-\\u{10AE6}\\u{10D24}-\\u{10D27}\\u{10D69}-\\u{10D6D}\\u{10EAB}-\\u{10EAC}\\u{10EFA}-\\u{10EFF}\\u{10F46}-\\u{10F50}\\u{10F82}-\\u{10F85}\\u{11000}-\\u{11002}\\u{11038}-\\u{11046}\\u{11070}\\u{11073}-\\u{11074}\\u{1107F}-\\u{11082}\\u{110B0}-\\u{110BA}\\u{110C2}\\u{11100}-\\u{11102}\\u{11127}-\\u{11134}\\u{11145}-\\u{11146}\\u{11173}\\u{11180}-\\u{11182}\\u{111B3}-\\u{111C0}\\u{111C9}-\\u{111CC}\\u{111CE}-\\u{111CF}\\u{1122C}-\\u{11237}\\u{1123E}\\u{11241}\\u{112DF}-\\u{112EA}\\u{11300}-\\u{11303}\\u{1133B}-\\u{1133C}\\u{1133E}-\\u{11344}\\u{11347}-\\u{11348}\\u{1134B}-\\u{1134D}\\u{11357}\\u{11362}-\\u{11363}\\u{11366}-\\u{1136C}\\u{11370}-\\u{11374}\\u{113B8}-\\u{113C0}\\u{113C2}\\u{113C5}\\u{113C7}-\\u{113CA}\\u{113CC}-\\u{113D0}\\u{113D2}\\u{113E1}-\\u{113E2}\\u{11435}-\\u{11446}\\u{1145E}\\u{114B0}-\\u{114C3}\\u{115AF}-\\u{115B5}\\u{115B8}-\\u{115C0}\\u{115DC}-\\u{115DD}\\u{11630}-\\u{11640}\\u{116AB}-\\u{116B7}\\u{1171D}-\\u{1172B}\\u{1182C}-\\u{1183A}\\u{11930}-\\u{11935}\\u{11937}-\\u{11938}\\u{1193B}-\\u{1193E}\\u{11940}\\u{11942}-\\u{11943}\\u{119D1}-\\u{119D7}\\u{119DA}-\\u{119E0}\\u{119E4}\\u{11A01}-\\u{11A0A}\\u{11A33}-\\u{11A39}\\u{11A3B}-\\u{11A3E}\\u{11A47}\\u{11A51}-\\u{11A5B}\\u{11A8A}-\\u{11A99}\\u{11B60}-\\u{11B67}\\u{11C2F}-\\u{11C36}\\u{11C38}-\\u{11C3F}\\u{11C92}-\\u{11CA7}\\u{11CA9}-\\u{11CB6}\\u{11D31}-\\u{11D36}\\u{11D3A}\\u{11D3C}-\\u{11D3D}\\u{11D3F}-\\u{11D45}\\u{11D47}\\u{11D8A}-\\u{11D8E}\\u{11D90}-\\u{11D91}\\u{11D93}-\\u{11D97}\\u{11EF3}-\\u{11EF6}\\u{11F00}-\\u{11F01}\\u{11F03}\\u{11F34}-\\u{11F3A}\\u{11F3E}-\\u{11F42}\\u{11F5A}\\u{13440}\\u{13447}-\\u{13455}\\u{1611E}-\\u{1612F}\\u{16AF0}-\\u{16AF4}\\u{16B30}-\\u{16B36}\\u{16F4F}\\u{16F51}-\\u{16F87}\\u{16F8F}-\\u{16F92}\\u{16FE4}\\u{16FF0}-\\u{16FF1}\\u{1BC9D}-\\u{1BC9E}\\u{1CF00}-\\u{1CF2D}\\u{1CF30}-\\u{1CF46}\\u{1D165}-\\u{1D169}\\u{1D16D}-\\u{1D172}\\u{1D17B}-\\u{1D182}\\u{1D185}-\\u{1D18B}\\u{1D1AA}-\\u{1D1AD}\\u{1D242}-\\u{1D244}\\u{1DA00}-\\u{1DA36}\\u{1DA3B}-\\u{1DA6C}\\u{1DA75}\\u{1DA84}\\u{1DA9B}-\\u{1DA9F}\\u{1DAA1}-\\u{1DAAF}\\u{1E000}-\\u{1E006}\\u{1E008}-\\u{1E018}\\u{1E01B}-\\u{1E021}\\u{1E023}-\\u{1E024}\\u{1E026}-\\u{1E02A}\\u{1E08F}\\u{1E130}-\\u{1E136}\\u{1E2AE}\\u{1E2EC}-\\u{1E2EF}\\u{1E4EC}-\\u{1E4EF}\\u{1E5EE}-\\u{1E5EF}\\u{1E6E3}\\u{1E6E6}\\u{1E6EE}-\\u{1E6EF}\\u{1E6F5}\\u{1E8D0}-\\u{1E8D6}\\u{1E944}-\\u{1E94A}\\u{E0100}-\\u{E01EF}
1139\\u0030-\\u0039\\u00B2-\\u00B3\\u00B9\\u00BC-\\u00BE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D58-\\u0D5E\\u0D66-\\u0D78\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19\\u{10107}-\\u{10133}\\u{10140}-\\u{10178}\\u{1018A}-\\u{1018B}\\u{102E1}-\\u{102FB}\\u{10320}-\\u{10323}\\u{10341}\\u{1034A}\\u{103D1}-\\u{103D5}\\u{104A0}-\\u{104A9}\\u{10858}-\\u{1085F}\\u{10879}-\\u{1087F}\\u{108A7}-\\u{108AF}\\u{108FB}-\\u{108FF}\\u{10916}-\\u{1091B}\\u{109BC}-\\u{109BD}\\u{109C0}-\\u{109CF}\\u{109D2}-\\u{109FF}\\u{10A40}-\\u{10A48}\\u{10A7D}-\\u{10A7E}\\u{10A9D}-\\u{10A9F}\\u{10AEB}-\\u{10AEF}\\u{10B58}-\\u{10B5F}\\u{10B78}-\\u{10B7F}\\u{10BA9}-\\u{10BAF}\\u{10CFA}-\\u{10CFF}\\u{10D30}-\\u{10D39}\\u{10D40}-\\u{10D49}\\u{10E60}-\\u{10E7E}\\u{10F1D}-\\u{10F26}\\u{10F51}-\\u{10F54}\\u{10FC5}-\\u{10FCB}\\u{11052}-\\u{1106F}\\u{110F0}-\\u{110F9}\\u{11136}-\\u{1113F}\\u{111D0}-\\u{111D9}\\u{111E1}-\\u{111F4}\\u{112F0}-\\u{112F9}\\u{11450}-\\u{11459}\\u{114D0}-\\u{114D9}\\u{11650}-\\u{11659}\\u{116C0}-\\u{116C9}\\u{116D0}-\\u{116E3}\\u{11730}-\\u{1173B}\\u{118E0}-\\u{118F2}\\u{11950}-\\u{11959}\\u{11BF0}-\\u{11BF9}\\u{11C50}-\\u{11C6C}\\u{11D50}-\\u{11D59}\\u{11DA0}-\\u{11DA9}\\u{11DE0}-\\u{11DE9}\\u{11F50}-\\u{11F59}\\u{11FC0}-\\u{11FD4}\\u{12400}-\\u{1246E}\\u{16130}-\\u{16139}\\u{16A60}-\\u{16A69}\\u{16AC0}-\\u{16AC9}\\u{16B50}-\\u{16B59}\\u{16B5B}-\\u{16B61}\\u{16D70}-\\u{16D79}\\u{16E80}-\\u{16E96}\\u{16FF4}-\\u{16FF6}\\u{1CCF0}-\\u{1CCF9}\\u{1D2C0}-\\u{1D2D3}\\u{1D2E0}-\\u{1D2F3}\\u{1D360}-\\u{1D378}\\u{1D7CE}-\\u{1D7FF}\\u{1E140}-\\u{1E149}\\u{1E2F0}-\\u{1E2F9}\\u{1E4F0}-\\u{1E4F9}\\u{1E5F1}-\\u{1E5FA}\\u{1E8C7}-\\u{1E8CF}\\u{1E950}-\\u{1E959}\\u{1EC71}-\\u{1ECAB}\\u{1ECAD}-\\u{1ECAF}\\u{1ECB1}-\\u{1ECB4}\\u{1ED01}-\\u{1ED2D}\\u{1ED2F}-\\u{1ED3D}\\u{1F100}-\\u{1F10C}\\u{1FBF0}-\\u{1FBF9}_]+", "gu"); 1140const warned = /* @__PURE__ */ new WeakSet(); 1141function warnNonGlobal(regex) { 1142 if (!warned.has(regex)) { 1143 warned.add(regex); 1144 console.warn("[Fuse] tokenize regex ".concat(regex, " lacks the global flag; only the first match per text will be returned. Add the 'g' flag.")); 1145 } 1146} 1147function resolveTokenize(tokenize) { 1148 if (typeof tokenize === "function") { 1149 let validated = false; 1150 return (text)=>{ 1151 const result = tokenize(text); 1152 if (!validated) { 1153 validated = true; 1154 if (!Array.isArray(result) || result.some((t)=>typeof t !== "string")) throw new Error("[Fuse] tokenize function must return string[]; received ".concat(Array.isArray(result) ? "array containing non-strings" : typeof result, ".")); 1155 } 1156 return result; 1157 }; 1158 } 1159 if (tokenize instanceof RegExp) { 1160 if (!tokenize.global) warnNonGlobal(tokenize); 1161 return (text)=>text.match(tokenize) || []; 1162 } 1163 return (text)=>text.match(DEFAULT_TOKEN) || []; 1164} 1165function createAnalyzer() { 1166 let { isCaseSensitive = false, ignoreDiacritics = false, tokenize } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; 1167 const tokenizeFn = resolveTokenize(tokenize); 1168 return { 1169 tokenize (text) { 1170 if (!isCaseSensitive) text = text.toLowerCase(); 1171 if (ignoreDiacritics) text = stripDiacritics(text); 1172 return tokenizeFn(text); 1173 } 1174 }; 1175} 1176//#endregion 1177//#region src/search/token/index.ts
vendor: 13,233 bytes, lines 1178-1503
1178const MAX_MASK_TERMS = 31; 1179var TokenSearch = class { 1180 static condition(_, options) { 1181 return options.useTokenSearch; 1182 } 1183 searchIn(text) { 1184 if (!this.termSearchers.length) return { 1185 isMatch: false, 1186 score: 1 1187 }; 1188 const allIndices = []; 1189 let weightedScore = 0; 1190 let maxPossibleScore = 0; 1191 let matchedCount = 0; 1192 let matchedMask = 0; 1193 const matchedTerms = this.combineAll && !this.useMask ? /* @__PURE__ */ new Set() : null; 1194 for(let i = 0; i < this.termSearchers.length; i++){ 1195 const result = this.termSearchers[i].searchIn(text); 1196 const idf = this.idfWeights[i]; 1197 maxPossibleScore += idf; 1198 if (result.isMatch) { 1199 matchedCount++; 1200 weightedScore += idf * (1 - result.score); 1201 if (result.indices) allIndices.push(...result.indices); 1202 if (this.combineAll) if (this.useMask) matchedMask |= 1 << i; 1203 else matchedTerms.add(i); 1204 } 1205 } 1206 if (matchedCount === 0) return { 1207 isMatch: false, 1208 score: 1 1209 }; 1210 const normalized = maxPossibleScore > 0 ? 1 - weightedScore / maxPossibleScore : 0; 1211 const searchResult = { 1212 isMatch: true, 1213 score: Math.max(.001, normalized) 1214 }; 1215 if (this.options.includeMatches && allIndices.length) searchResult.indices = mergeIndices(allIndices); 1216 if (this.combineAll) { 1217 if (this.useMask) searchResult.matchedMask = matchedMask; 1218 else searchResult.matchedTerms = matchedTerms; 1219 searchResult.termCount = this.numTerms; 1220 } 1221 return searchResult; 1222 } 1223 constructor(pattern, options){ 1224 this.options = options; 1225 this.analyzer = createAnalyzer({ 1226 isCaseSensitive: options.isCaseSensitive, 1227 ignoreDiacritics: options.ignoreDiacritics, 1228 tokenize: options.tokenize 1229 }); 1230 const queryTerms = this.analyzer.tokenize(pattern); 1231 const { df, fieldCount } = options._invertedIndex; 1232 this.termSearchers = []; 1233 this.idfWeights = []; 1234 for (const term of queryTerms){ 1235 this.termSearchers.push(new BitapSearch(term, { 1236 location: options.location, 1237 threshold: options.threshold, 1238 distance: options.distance, 1239 includeMatches: options.includeMatches, 1240 findAllMatches: options.findAllMatches, 1241 minMatchCharLength: options.minMatchCharLength, 1242 isCaseSensitive: options.isCaseSensitive, 1243 ignoreDiacritics: options.ignoreDiacritics, 1244 ignoreLocation: true 1245 })); 1246 const docFreq = df.get(term) || 0; 1247 const idf = Math.log(1 + (fieldCount - docFreq + .5) / (docFreq + .5)); 1248 this.idfWeights.push(idf); 1249 } 1250 this.combineAll = options.tokenMatch === "all"; 1251 this.numTerms = this.termSearchers.length; 1252 this.useMask = this.numTerms <= 31; 1253 } 1254}; 1255//#endregion 1256//#region src/search/token/InvertedIndex.ts 1257function addField(index, text, docIdx, analyzer) { 1258 const tokens = analyzer.tokenize(text); 1259 if (!tokens.length) return; 1260 index.fieldCount++; 1261 index.docFieldCount.set(docIdx, (index.docFieldCount.get(docIdx) || 0) + 1); 1262 const distinctTerms = new Set(tokens); 1263 let perDocTerms = index.docTermFieldHits.get(docIdx); 1264 if (!perDocTerms) { 1265 perDocTerms = /* @__PURE__ */ new Map(); 1266 index.docTermFieldHits.set(docIdx, perDocTerms); 1267 } 1268 for (const term of distinctTerms){ 1269 perDocTerms.set(term, (perDocTerms.get(term) || 0) + 1); 1270 index.df.set(term, (index.df.get(term) || 0) + 1); 1271 } 1272} 1273function ingestRecord(index, record, keyCount, analyzer) { 1274 const { i: docIdx, v, $: fields } = record; 1275 if (v !== void 0) { 1276 addField(index, v, docIdx, analyzer); 1277 return; 1278 } 1279 if (!fields) return; 1280 for(let keyIdx = 0; keyIdx < keyCount; keyIdx++){ 1281 const value = fields[keyIdx]; 1282 if (!value) continue; 1283 if (Array.isArray(value)) for (const sub of value)addField(index, sub.v, docIdx, analyzer); 1284 else addField(index, value.v, docIdx, analyzer); 1285 } 1286} 1287function buildInvertedIndex(records, keyCount, analyzer) { 1288 const index = { 1289 fieldCount: 0, 1290 df: /* @__PURE__ */ new Map(), 1291 docFieldCount: /* @__PURE__ */ new Map(), 1292 docTermFieldHits: /* @__PURE__ */ new Map() 1293 }; 1294 for (const record of records)ingestRecord(index, record, keyCount, analyzer); 1295 return index; 1296} 1297function addToInvertedIndex(index, record, keyCount, analyzer) { 1298 ingestRecord(index, record, keyCount, analyzer); 1299} 1300function removeFromInvertedIndex(index, docIdx) { 1301 const fieldCount = index.docFieldCount.get(docIdx); 1302 if (fieldCount === void 0) return; 1303 index.fieldCount -= fieldCount; 1304 index.docFieldCount.delete(docIdx); 1305 const perDocTerms = index.docTermFieldHits.get(docIdx); 1306 if (!perDocTerms) return; 1307 for (const [term, hits] of perDocTerms){ 1308 const next = (index.df.get(term) || 0) - hits; 1309 if (next <= 0) index.df.delete(term); 1310 else index.df.set(term, next); 1311 } 1312 index.docTermFieldHits.delete(docIdx); 1313} 1314function removeAndShiftInvertedIndex(index, removedIndices) { 1315 if (removedIndices.length === 0) return; 1316 const sorted = Array.from(new Set(removedIndices)).sort((a, b)=>a - b); 1317 for (const idx of sorted)removeFromInvertedIndex(index, idx); 1318 const shift = (oldIdx)=>{ 1319 let lo = 0; 1320 let hi = sorted.length; 1321 while(lo < hi){ 1322 const mid = lo + hi >>> 1; 1323 if (sorted[mid] < oldIdx) lo = mid + 1; 1324 else hi = mid; 1325 } 1326 return oldIdx - lo; 1327 }; 1328 const firstRemoved = sorted[0]; 1329 const shiftedDocFieldCount = /* @__PURE__ */ new Map(); 1330 for (const [oldKey, count] of index.docFieldCount)shiftedDocFieldCount.set(oldKey > firstRemoved ? shift(oldKey) : oldKey, count); 1331 index.docFieldCount = shiftedDocFieldCount; 1332 const shiftedDocTermFieldHits = /* @__PURE__ */ new Map(); 1333 for (const [oldKey, terms] of index.docTermFieldHits)shiftedDocTermFieldHits.set(oldKey > firstRemoved ? shift(oldKey) : oldKey, terms); 1334 index.docTermFieldHits = shiftedDocTermFieldHits; 1335} 1336//#endregion 1337//#region src/core/index.ts 1338var Fuse = class { 1339 _getSearcher(query) { 1340 if (this._lastQuery === query) return this._lastSearcher; 1341 const searcher = createSearcher(query, this._invertedIndex ? { 1342 ...this.options, 1343 _invertedIndex: this._invertedIndex 1344 } : this.options); 1345 this._lastQuery = query; 1346 this._lastSearcher = searcher; 1347 return searcher; 1348 } 1349 setCollection(docs, index) { 1350 this._docs = docs; 1351 if (index && !(index instanceof FuseIndex)) throw new Error(INCORRECT_INDEX_TYPE); 1352 this._myIndex = index || createIndex(this.options.keys, this._docs, { 1353 getFn: this.options.getFn, 1354 fieldNormWeight: this.options.fieldNormWeight 1355 }); 1356 if (this.options.useTokenSearch) { 1357 const analyzer = createAnalyzer({ 1358 isCaseSensitive: this.options.isCaseSensitive, 1359 ignoreDiacritics: this.options.ignoreDiacritics, 1360 tokenize: this.options.tokenize 1361 }); 1362 this._invertedIndex = buildInvertedIndex(this._myIndex.records, this._myIndex.keys.length, analyzer); 1363 } 1364 this._invalidateSearcherCache(); 1365 } 1366 add(doc) { 1367 if (!isDefined(doc)) return; 1368 this._docs.push(doc); 1369 const record = this._myIndex.add(doc, this._docs.length - 1); 1370 if (this._invertedIndex && record) { 1371 const analyzer = createAnalyzer({ 1372 isCaseSensitive: this.options.isCaseSensitive, 1373 ignoreDiacritics: this.options.ignoreDiacritics, 1374 tokenize: this.options.tokenize 1375 }); 1376 addToInvertedIndex(this._invertedIndex, record, this._myIndex.keys.length, analyzer); 1377 } 1378 this._invalidateSearcherCache(); 1379 } 1380 remove() { 1381 let predicate = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : ()=>false; 1382 const results = []; 1383 const indicesToRemove = []; 1384 for(let i = 0, len = this._docs.length; i < len; i += 1)if (predicate(this._docs[i], i)) { 1385 results.push(this._docs[i]); 1386 indicesToRemove.push(i); 1387 } 1388 if (indicesToRemove.length) { 1389 if (this._invertedIndex) removeAndShiftInvertedIndex(this._invertedIndex, indicesToRemove); 1390 const toRemove = new Set(indicesToRemove); 1391 this._docs = this._docs.filter((_, i)=>!toRemove.has(i)); 1392 this._myIndex.removeAll(indicesToRemove); 1393 this._invalidateSearcherCache(); 1394 } 1395 return results; 1396 } 1397 removeAt(idx) { 1398 if (!Number.isInteger(idx) || idx < 0 || idx >= this._docs.length) throw new Error(INVALID_DOC_INDEX); 1399 if (this._invertedIndex) removeAndShiftInvertedIndex(this._invertedIndex, [ 1400 idx 1401 ]); 1402 const doc = this._docs.splice(idx, 1)[0]; 1403 this._myIndex.removeAt(idx); 1404 this._invalidateSearcherCache(); 1405 return doc; 1406 } 1407 _invalidateSearcherCache() { 1408 this._lastQuery = null; 1409 this._lastSearcher = null; 1410 } 1411 getIndex() { 1412 return this._myIndex; 1413 } 1414 _normalizedKeys() { 1415 return this._myIndex.keys.map((key)=>this._keyStore.get(key.id) || key); 1416 } 1417 search(query, options) { 1418 const { limit = -1 } = options || {}; 1419 const { includeMatches, includeScore, shouldSort, sortFn, ignoreFieldNorm } = this.options; 1420 if (isString(query) && !query.trim()) { 1421 let docs = this._docs.map((item, idx)=>({ 1422 item, 1423 refIndex: idx 1424 })); 1425 if (isNumber(limit) && limit > -1) docs = docs.slice(0, limit); 1426 return docs; 1427 } 1428 const useHeap = shouldSort && isNumber(limit) && limit > 0 && isString(query); 1429 const comparator = sortFn; 1430 const stable = (a, b)=>comparator(a, b) || a.idx - b.idx; 1431 let results; 1432 if (useHeap) { 1433 const heap = new MaxHeap(limit, stable); 1434 if (isString(this._docs[0])) this._searchStringList(query, { 1435 heap, 1436 ignoreFieldNorm 1437 }); 1438 else this._searchObjectList(query, { 1439 heap, 1440 ignoreFieldNorm 1441 }); 1442 results = heap.extractSorted(); 1443 } else { 1444 results = isString(query) ? isString(this._docs[0]) ? this._searchStringList(query) : this._searchObjectList(query) : this._searchLogical(query); 1445 computeScore(results, { 1446 ignoreFieldNorm 1447 }); 1448 if (shouldSort) results.sort(isString(query) ? stable : comparator); 1449 if (isNumber(limit) && limit > -1) results = results.slice(0, limit); 1450 } 1451 return format(results, this._docs, { 1452 includeMatches, 1453 includeScore 1454 }); 1455 } 1456 _searchStringList(query) { 1457 let { heap, ignoreFieldNorm } = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; 1458 const searcher = this._getSearcher(query); 1459 const requireAllTokens = this.options.useTokenSearch && this.options.tokenMatch === "all"; 1460 const { records } = this._myIndex; 1461 const results = heap ? null : []; 1462 records.forEach((param)=>{ 1463 let { v: text, i: idx, n: norm } = param; 1464 if (!isDefined(text)) return; 1465 const searchResult = searcher.searchIn(text); 1466 if (searchResult.isMatch) { 1467 const match = { 1468 score: searchResult.score, 1469 value: text, 1470 norm, 1471 indices: searchResult.indices 1472 }; 1473 if (requireAllTokens) { 1474 match.matchedMask = searchResult.matchedMask; 1475 match.matchedTerms = searchResult.matchedTerms; 1476 match.termCount = searchResult.termCount; 1477 } 1478 const matches = [ 1479 match 1480 ]; 1481 if (!requireAllTokens || this._coversAllTokens(matches)) { 1482 const result = { 1483 item: text, 1484 idx, 1485 matches 1486 }; 1487 if (heap) { 1488 result.score = computeScoreSingle(result.matches, { 1489 ignoreFieldNorm 1490 }); 1491 heap.insert(result); 1492 } else results.push(result); 1493 } 1494 } 1495 }); 1496 return results; 1497 } 1498 _searchLogical(query) { 1499 const expression = parse(query, this.options); 1500 const keys = this._normalizedKeys(); 1501 const evaluate = (node, item, idx)=>{ 1502 if (!("children" in node)) { 1503 const { keyId, searcher }
1503 = node; 1504 let matches; 1505 if (keyId === null) { 1506 matches = []; 1507 keys.forEach((key, keyIndex)=>{ 1508 matches.push(...this._findMatches({ 1509 key, 1510 value: item[keyIndex], 1511 searcher 1512 })); 1513 }); 1514 } else matches = this._findMatches({ 1515 key: this._keyStore.get(keyId), 1516 value: this._myIndex.getValueForItemAtKeyId(item, keyId), 1517 searcher 1518 }); 1519 if (matches && matches.length) return [ 1520 { 1521 idx, 1522 item, 1523 matches 1524 } 1525 ]; 1526 return []; 1527 } 1528 const { children, operator } = node; 1529 const res = []; 1530 for(let i = 0, len = children.length; i < len; i += 1){ 1531 const child = children[i]; 1532 const result = evaluate(child, item, idx); 1533 if (result.length) res.push(...result); 1534 else if (operator === LogicalOperator.AND) return []; 1535 } 1536 return res; 1537 }; 1538 const records = this._myIndex.records; 1539 const resultMap = /* @__PURE__ */ new Map(); 1540 const results = []; 1541 records.forEach((param)=>{ 1542 let { $: item, i: idx } = param; 1543 if (isDefined(item)) { 1544 const expResults = evaluate(expression, item, idx); 1545 if (expResults.length) { 1546 if (!resultMap.has(idx)) { 1547 resultMap.set(idx, { 1548 idx, 1549 item, 1550 matches: [] 1551 }); 1552 results.push(resultMap.get(idx)); 1553 } 1554 expResults.forEach((param)=>{ 1555 let { matches } = param; 1556 resultMap.get(idx).matches.push(...matches); 1557 }); 1558 } 1559 } 1560 }); 1561 return results; 1562 } 1563 _searchObjectList(query) { 1564 let { heap, ignoreFieldNorm } = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; 1565 const searcher = this._getSearcher(query); 1566 const requireAllTokens = this.options.useTokenSearch && this.options.tokenMatch === "all"; 1567 const { records } = this._myIndex; 1568 const keys = this._normalizedKeys(); 1569 const results = heap ? null : []; 1570 records.forEach((param)=>{ 1571 let { $: item, i: idx } = param; 1572 if (!isDefined(item)) return; 1573 const matches = []; 1574 let anyKeyFailed = false; 1575 let hasInverse = false; 1576 keys.forEach((key, keyIndex)=>{ 1577 const keyMatches = this._findMatches({ 1578 key, 1579 value: item[keyIndex], 1580 searcher 1581 }); 1582 if (keyMatches.length) { 1583 matches.push(...keyMatches); 1584 if (keyMatches[0].hasInverse) hasInverse = true; 1585 } else anyKeyFailed = true; 1586 }); 1587 if (hasInverse && anyKeyFailed) return; 1588 if (matches.length && (!requireAllTokens || this._coversAllTokens(matches))) { 1589 const result = { 1590 idx, 1591 item, 1592 matches 1593 }; 1594 if (heap) { 1595 result.score = computeScoreSingle(result.matches, { 1596 ignoreFieldNorm 1597 }); 1598 heap.insert(result); 1599 } else results.push(result); 1600 } 1601 }); 1602 return results; 1603 } 1604 _findMatches(param) { 1605 let { key, value, searcher }
vendor: 3,763 bytes, lines 1605-1715
1605 = param; 1606 if (!isDefined(value)) return []; 1607 const matches = []; 1608 if (isArray(value)) value.forEach((param)=>{ 1609 let { v: text, i: idx, n: norm } = param; 1610 if (!isDefined(text)) return; 1611 const searchResult = searcher.searchIn(text); 1612 if (searchResult.isMatch) { 1613 const match = { 1614 score: searchResult.score, 1615 key, 1616 value: text, 1617 idx, 1618 norm, 1619 indices: searchResult.indices, 1620 hasInverse: searchResult.hasInverse 1621 }; 1622 if (searchResult.termCount !== void 0) { 1623 match.matchedMask = searchResult.matchedMask; 1624 match.matchedTerms = searchResult.matchedTerms; 1625 match.termCount = searchResult.termCount; 1626 } 1627 matches.push(match); 1628 } 1629 }); 1630 else { 1631 const { v: text, n: norm } = value; 1632 const searchResult = searcher.searchIn(text); 1633 if (searchResult.isMatch) { 1634 const match = { 1635 score: searchResult.score, 1636 key, 1637 value: text, 1638 norm, 1639 indices: searchResult.indices, 1640 hasInverse: searchResult.hasInverse 1641 }; 1642 if (searchResult.termCount !== void 0) { 1643 match.matchedMask = searchResult.matchedMask; 1644 match.matchedTerms = searchResult.matchedTerms; 1645 match.termCount = searchResult.termCount; 1646 } 1647 matches.push(match); 1648 } 1649 } 1650 return matches; 1651 } 1652 _coversAllTokens(matches) { 1653 const termCount = matches.length ? matches[0].termCount : void 0; 1654 if (termCount === void 0) return true; 1655 if (termCount <= 31) { 1656 let coverage = 0; 1657 for(let i = 0; i < matches.length; i++)coverage |= matches[i].matchedMask || 0; 1658 return coverage === 2 ** termCount - 1; 1659 } 1660 const coverage = /* @__PURE__ */ new Set(); 1661 for(let i = 0; i < matches.length; i++){ 1662 const terms = matches[i].matchedTerms; 1663 if (terms) for (const t of terms)coverage.add(t); 1664 } 1665 return coverage.size === termCount; 1666 } 1667 constructor(docs, options, index){ 1668 this.options = { 1669 ...Config, 1670 ...options 1671 }; 1672 if (this.options.useExtendedSearch && false) ; 1673 if (this.options.useTokenSearch && false) ; 1674 this._keyStore = new KeyStore(this.options.keys); 1675 this._docs = docs; 1676 this._myIndex = null; 1677 this._invertedIndex = null; 1678 this.setCollection(docs, index); 1679 this._lastQuery = null; 1680 this._lastSearcher = null; 1681 } 1682}; 1683//#endregion 1684//#region src/entry.ts 1685Fuse.version = "7.5.0"; 1686Fuse.createIndex = createIndex; 1687Fuse.parseIndex = parseIndex; 1688Fuse.config = Config; 1689Fuse.match = function(pattern, text, options) { 1690 if (options && options.useTokenSearch) throw new Error(FUSE_MATCH_TOKEN_SEARCH_UNSUPPORTED); 1691 return createSearcher(pattern, { 1692 ...Config, 1693 ...options 1694 }).searchIn(text); 1695}; 1696Fuse.parseQuery = parse; 1697register(ExtendedSearch); 1698register(TokenSearch); 1699Fuse.use = function() { 1700 for(var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++){ 1701 plugins[_key] = arguments[_key]; 1702 } 1703 plugins.forEach((plugin)=>register(plugin)); 1704}; 1705var entry_default = Fuse; 1706; 1707__turbopack_context__.s([ 1708 "default", 1709 0, 1710 entry_default 1711]); 1712}), 1713]); 1714 1715//# debugId=c33f45a8-6572-5961-cce8-44b371d30081
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.