@bloomreach/clarity-utils 1.0.2 → 1.0.4
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.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.global.js +1 -1
- package/dist/index.js +1564 -166
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1564 -166
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/modes/length.ts","../src/modes/list.ts","../src/enums.ts","../src/modes/score.ts"],"sourcesContent":["import { checkLength } from './modes/length'\nimport { checkList } from './modes/list'\nimport { scoreQuery } from './modes/score'\nimport type { ClarityUtilsConfig, ResolvedConfig } from './types'\nimport { isPunct, tokenize } from './utils'\n\nlet globalResolved: ResolvedConfig = {}\n\nconst setup = async (\n config: ClarityUtilsConfig\n): Promise<{ success: true } | { success: false; error: unknown }> => {\n globalResolved = { ...config }\n const blackJsonPunctSet = new Set<string>()\n const blackJsonWordSet = new Set<string>()\n const whiteSet = new Set<string>()\n\n try {\n await Promise.all([\n config.whiteListJson\n ? fetch(config.whiteListJson)\n .then(r => r.json())\n .then((arr: string[]) => {\n arr.forEach(s => whiteSet.add(s.toLowerCase()))\n })\n : null,\n config.blackListJson\n ? fetch(config.blackListJson)\n .then(r => r.json())\n .then((arr: string[]) => {\n arr.forEach(s => {\n const lower = s.toLowerCase()\n if (isPunct(lower)) blackJsonPunctSet.add(lower)\n else blackJsonWordSet.add(lower)\n })\n })\n : null,\n ])\n globalResolved = {\n ...globalResolved,\n blackJsonPunctSet,\n blackJsonWordSet,\n whiteSet,\n }\n return { success: true }\n } catch (error) {\n return { success: false, error }\n }\n}\n\nconst resolveConfig = (config?: ClarityUtilsConfig): ResolvedConfig => {\n const merged = { ...globalResolved, ...(config ?? {}) }\n merged.blackPunctSet = new Set([...(merged.blackJsonPunctSet ?? [])])\n merged.blackWordSet = new Set([...(merged.blackJsonWordSet ?? [])])\n merged.blackList?.forEach(s => {\n const lower = s.toLowerCase()\n if (isPunct(lower)) {\n merged.blackPunctSet?.add(lower)\n } else {\n merged.blackWordSet?.add(lower)\n }\n })\n\n if (merged.scoreQuestionWords)\n merged.scoreQuestionWords = merged.scoreQuestionWords.map(s => s.toLowerCase())\n if (merged.scorePronouns) merged.scorePronouns = merged.scorePronouns.map(s => s.toLowerCase())\n if (merged.scoreCommonVerbs) merged.scoreCommonVerbs = merged.scoreCommonVerbs.map(s => s.toLowerCase())\n if (merged.scoreStopwords) merged.scoreStopwords = merged.scoreStopwords.map(s => s.toLowerCase())\n\n return merged\n}\n\nconst isSearch = (value: string, config?: ClarityUtilsConfig): boolean => {\n const c = resolveConfig(config)\n const lower = value.toLowerCase()\n\n const tokens = tokenize(lower)\n console.group(`[isSearch] \"${value}\" | mode=${c.mode} | tokens=[${tokens.join(', ')}]`)\n if (c.mode === 'mixed' || c.mode === 'list') {\n console.log(\n `lists: blackWordSet=${c.blackWordSet?.size ?? 0} blackPunctSet=${c.blackPunctSet?.size ?? 0} whiteSet=${c.whiteSet?.size ?? 0} whiteList=${c.whiteList?.length ?? 0}`\n )\n }\n\n let result: boolean\n if (c.mode === 'length') {\n result = checkLength(lower, c)\n } else if (c.mode === 'mixed') {\n result = checkList(lower, c) && checkLength(lower, c)\n } else if (c.mode === 'score') {\n result = scoreQuery(lower, c)\n } else {\n result = scoreQuery(lower, c)\n }\n\n console.log(`→ Result: ${result}`)\n console.groupEnd()\n return result\n}\n\nexport const clarityUtils = { setup, isSearch }\n","export const isPunct = (s: string) => !/\\w/.test(s)\n\nconst CONTRACTIONS: Record<string, string> = {\n \"won't\": 'will not',\n \"can't\": 'cannot',\n \"don't\": 'do not',\n \"doesn't\": 'does not',\n \"didn't\": 'did not',\n \"isn't\": 'is not',\n \"aren't\": 'are not',\n \"wasn't\": 'was not',\n \"weren't\": 'were not',\n \"haven't\": 'have not',\n \"hasn't\": 'has not',\n \"hadn't\": 'had not',\n \"wouldn't\": 'would not',\n \"shouldn't\": 'should not',\n \"couldn't\": 'could not',\n \"what's\": 'what is',\n \"what're\": 'what are',\n \"how's\": 'how is',\n \"where's\": 'where is',\n \"who's\": 'who is',\n \"that's\": 'that is',\n \"there's\": 'there is',\n \"it's\": 'it is',\n \"i'm\": 'i am',\n \"i'd\": 'i would',\n \"i'll\": 'i will',\n \"i've\": 'i have',\n \"we're\": 'we are',\n \"we've\": 'we have',\n \"we'd\": 'we would',\n \"they're\": 'they are',\n \"they've\": 'they have',\n \"you're\": 'you are',\n \"you've\": 'you have',\n \"you'd\": 'you would',\n}\n\nconst expandContractions = (query: string) =>\n query.replace(/[\\w']+/g, word => CONTRACTIONS[word] ?? word)\n\nexport const tokenize = (query: string) =>\n expandContractions(query).split(/\\s+/).filter(Boolean)\n","import type { ResolvedConfig } from '../types'\nimport { tokenize } from '../utils'\n\nexport const checkLength = (value: string, c: ResolvedConfig): boolean => {\n if (!c.maxLength) {\n console.log(' checkLength → true (no maxLength configured)')\n return true\n }\n const wordCount = tokenize(value).length\n const result = wordCount <= c.maxLength\n console.log(` checkLength → ${result} (wordCount=${wordCount} maxLength=${c.maxLength})`)\n return result\n}\n","import type { ResolvedConfig } from '../types'\nimport { tokenize } from '../utils'\n\nconst checkPuncts = (lower: string, c: ResolvedConfig): boolean => {\n for (const punct of c.blackPunctSet ?? []) {\n if (lower.includes(punct)) {\n console.log(` punct \"${punct}\" found in sentence → false (blacklisted)`)\n return false\n }\n }\n return true\n}\n\nconst checkWord = (word: string, c: ResolvedConfig): boolean => {\n if (c.blackWordSet?.has(word)) {\n console.log(` word \"${word}\" → false (blacklisted)`)\n return false\n }\n const hasWhite = (c.whiteSet?.size ?? 0) > 0 || (c.whiteList?.length ?? 0) > 0\n if (hasWhite) {\n const result = !!(c.whiteSet?.has(word) || c.whiteList?.some((s: string) => s.toLowerCase() === word))\n console.log(` word \"${word}\" → ${result} (whitelist check)`)\n return result\n }\n console.log(` word \"${word}\" → true`)\n return true\n}\n\nexport const checkList = (lower: string, c: ResolvedConfig): boolean =>\n checkPuncts(lower, c) && tokenize(lower).every(word => checkWord(word, c))\n","export const DEFAULT_QUESTION_WORDS = [\n 'who',\n 'what',\n 'when',\n 'where',\n 'why',\n 'how',\n 'which',\n 'can',\n 'should',\n 'could',\n 'would',\n 'will',\n 'have',\n 'has',\n 'is',\n 'are',\n 'do',\n 'does',\n 'did',\n]\n\nexport const DEFAULT_PRONOUNS = [\n 'i',\n 'me',\n 'my',\n 'mine',\n 'we',\n 'us',\n 'our',\n 'you',\n 'your',\n 'it',\n 'he',\n 'him',\n 'his',\n 'she',\n 'her',\n 'they',\n 'them',\n 'their',\n]\n\nexport const DEFAULT_COMMON_VERBS = [\n 'is',\n 'are',\n 'was',\n 'were',\n 'do',\n 'does',\n 'did',\n 'have',\n 'need',\n 'want',\n 'look',\n 'help',\n 'know',\n 'think',\n 'make',\n 'create',\n 'find',\n 'get',\n 'buy',\n 'use',\n 'install',\n 'fix',\n 'recommend',\n 'tell',\n 'show',\n 'compare',\n 'explain',\n]\n\nexport const DEFAULT_STOPWORDS = [\n 'the',\n 'a',\n 'an',\n 'i',\n 'me',\n 'my',\n 'is',\n 'it',\n 'in',\n 'on',\n 'at',\n 'to',\n 'for',\n 'of',\n 'and',\n 'or',\n 'but',\n 'not',\n 'so',\n 'if',\n 'by',\n 'with',\n 'from',\n 'that',\n 'this',\n 'about',\n]\n","import { DEFAULT_COMMON_VERBS, DEFAULT_PRONOUNS, DEFAULT_QUESTION_WORDS, DEFAULT_STOPWORDS } from '../enums'\nimport type { ResolvedConfig } from '../types'\nimport { tokenize } from '../utils'\n\nexport const scoreQuery = (query: string, c: ResolvedConfig): boolean => {\n const tokens = tokenize(query)\n if (tokens.length === 0) return true\n\n const questionWords = c.scoreQuestionWords ?? DEFAULT_QUESTION_WORDS\n const pronouns = c.scorePronouns ?? DEFAULT_PRONOUNS\n const commonVerbs = c.scoreCommonVerbs ?? DEFAULT_COMMON_VERBS\n const stopwords = c.scoreStopwords ?? DEFAULT_STOPWORDS\n\n let scoreKeyword = 0\n let scoreConversational = 0\n\n if (tokens.length <= 3) {\n scoreKeyword += 2\n console.log(` [A] token count: word count=${tokens.length} ≤3 → keyword +2`)\n } else if (tokens.length >= 6) {\n scoreConversational += 2\n console.log(` [A] token count: word count=${tokens.length} ≥6 → conversational +2`)\n } else {\n console.log(` [A] token count: word count=${tokens.length} (no score)`)\n }\n\n const matchedQuestionWords = tokens.filter(t => questionWords.includes(t))\n if (matchedQuestionWords.length > 0) {\n scoreConversational += 2\n console.log(` [B] question words: found [${matchedQuestionWords.join(', ')}] → conversational +2`)\n } else {\n console.log(` [B] question words: none`)\n }\n\n const matchedPronouns = tokens.filter(t => pronouns.includes(t))\n if (matchedPronouns.length > 0) {\n scoreConversational += 1\n console.log(` [C] pronouns: found [${matchedPronouns.join(', ')}] → conversational +1`)\n } else {\n console.log(` [C] pronouns: none`)\n }\n\n const matchedVerbs = tokens.filter(t => commonVerbs.includes(t))\n if (matchedVerbs.length > 0) {\n scoreConversational += 1\n console.log(` [D] common verbs: found [${matchedVerbs.join(', ')}] → conversational +1`)\n } else {\n console.log(` [D] common verbs: none`)\n }\n\n if (query.includes('?')) {\n scoreConversational += 3\n console.log(` [E] question mark: found → conversational +3`)\n } else {\n console.log(` [E] question mark: none`)\n }\n\n const stopwordCount = tokens.filter(t => stopwords.includes(t)).length\n const stopwordRatio = stopwordCount / tokens.length\n if (stopwordRatio > 0.4) {\n scoreConversational += 2\n console.log(\n ` [F] stopword ratio: ${stopwordRatio.toFixed(2)} (${stopwordCount}/${tokens.length}) >0.4 → conversational +2`\n )\n } else {\n scoreKeyword += 1\n console.log(\n ` [F] stopword ratio: ${stopwordRatio.toFixed(2)} (${stopwordCount}/${tokens.length}) ≤0.4 → keyword +1`\n )\n }\n\n const avgLen = tokens.reduce((sum, t) => sum + t.length, 0) / tokens.length\n if (avgLen >= 6) {\n scoreKeyword += 1\n console.log(` [G] avg token length: ${avgLen.toFixed(2)} ≥6 → keyword +1`)\n } else {\n console.log(` [G] avg token length: ${avgLen.toFixed(2)} (no score)`)\n }\n\n const result = scoreKeyword >= scoreConversational\n console.log(\n ` scores: keyword=${scoreKeyword} conversational=${scoreConversational} → ${result ? 'keyword' : 'conversational'}`\n )\n return result\n}\n"],"mappings":"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","names":["_a","_b"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/enums.ts","../src/utils.ts","../src/modes/length.ts","../src/modes/list.ts","../src/modes/score.ts"],"sourcesContent":["import { checkLength } from './modes/length'\nimport { checkList } from './modes/list'\nimport { scoreQuery } from './modes/score'\nimport type { ClarityUtilsConfig, ResolvedConfig } from './types'\nimport { isPunct, tokenize } from './utils'\n\nlet globalResolved: ResolvedConfig = {}\n\nconst setup = async (\n config: ClarityUtilsConfig\n): Promise<{ success: true } | { success: false; error: unknown }> => {\n globalResolved = { ...config }\n const blackJsonPunctSet = new Set<string>()\n const blackJsonWordSet = new Set<string>()\n const whiteSet = new Set<string>()\n\n try {\n await Promise.all([\n config.whiteListJson\n ? fetch(config.whiteListJson)\n .then(r => r.json())\n .then((arr: string[]) => {\n arr.forEach(s => whiteSet.add(s.toLowerCase()))\n })\n : null,\n config.blackListJson\n ? fetch(config.blackListJson)\n .then(r => r.json())\n .then((arr: string[]) => {\n arr.forEach(s => {\n const lower = s.toLowerCase()\n if (isPunct(lower)) blackJsonPunctSet.add(lower)\n else blackJsonWordSet.add(lower)\n })\n })\n : null,\n ])\n globalResolved = {\n ...globalResolved,\n blackJsonPunctSet,\n blackJsonWordSet,\n whiteSet,\n }\n return { success: true }\n } catch (error) {\n return { success: false, error }\n }\n}\n\nconst resolveConfig = (config?: ClarityUtilsConfig): ResolvedConfig => {\n const merged = { ...globalResolved, ...(config ?? {}) }\n merged.blackPunctSet = new Set([...(merged.blackJsonPunctSet ?? [])])\n merged.blackWordSet = new Set([...(merged.blackJsonWordSet ?? [])])\n merged.blackList?.forEach(s => {\n const lower = s.toLowerCase()\n if (isPunct(lower)) {\n merged.blackPunctSet?.add(lower)\n } else {\n merged.blackWordSet?.add(lower)\n }\n })\n\n if (merged.scoreQuestionWords)\n merged.scoreQuestionWords = merged.scoreQuestionWords.map(s => s.toLowerCase())\n if (merged.scorePronouns) merged.scorePronouns = merged.scorePronouns.map(s => s.toLowerCase())\n if (merged.scoreCommonVerbs) merged.scoreCommonVerbs = merged.scoreCommonVerbs.map(s => s.toLowerCase())\n if (merged.scoreStopwords) merged.scoreStopwords = merged.scoreStopwords.map(s => s.toLowerCase())\n if (merged.scoreSupportWords) merged.scoreSupportWords = merged.scoreSupportWords.map(s => s.toLowerCase())\n\n return merged\n}\n\nconst isSearch = (value: string, config?: ClarityUtilsConfig): boolean => {\n const c = resolveConfig(config)\n const lower = value.toLowerCase()\n\n const tokens = tokenize(lower)\n console.group(`[isSearch] \"${value}\" | mode=${c.mode} | tokens=[${tokens.join(', ')}]`)\n if (c.mode === 'mixed' || c.mode === 'list') {\n console.log(\n `lists: blackWordSet=${c.blackWordSet?.size ?? 0} blackPunctSet=${c.blackPunctSet?.size ?? 0} whiteSet=${c.whiteSet?.size ?? 0} whiteList=${c.whiteList?.length ?? 0}`\n )\n }\n\n let result: boolean\n if (c.mode === 'length') {\n result = checkLength(lower, c)\n } else if (c.mode === 'mixed') {\n result = checkList(lower, c) && checkLength(lower, c)\n } else if (c.mode === 'score') {\n result = scoreQuery(lower, c)\n } else {\n result = scoreQuery(lower, c)\n }\n\n console.log(`→ Result: ${result}`)\n console.groupEnd()\n return result\n}\n\nexport const clarityUtils = { setup, isSearch }\n","export type LocaleWords = {\n questions: string[]\n pronouns: string[]\n commonVerbs: string[]\n stopwords: string[]\n support: string[]\n // Whole-token expansions applied before tokenization (e.g. \"won't\" → \"will not\").\n contractions?: Record<string, string>\n // Apostrophe-elision prefixes that should be split off as their own token\n // (e.g. for fr \"j'ai\" → \"j' ai\", for it \"c'è\" → \"c' è\"). Listed without the trailing apostrophe.\n elisionPrefixes?: string[]\n}\n\nconst EN_WORDS: LocaleWords = {\n questions: [\n 'who',\n 'what',\n 'when',\n 'where',\n 'why',\n 'how',\n 'which',\n 'can',\n 'should',\n 'could',\n 'would',\n 'will',\n 'have',\n 'has',\n 'is',\n 'are',\n 'do',\n 'does',\n 'did',\n ],\n pronouns: [\n 'i',\n 'me',\n 'my',\n 'mine',\n 'we',\n 'us',\n 'our',\n 'you',\n 'your',\n 'it',\n 'he',\n 'him',\n 'his',\n 'she',\n 'her',\n 'they',\n 'them',\n 'their',\n ],\n commonVerbs: [\n 'is',\n 'are',\n 'was',\n 'were',\n 'do',\n 'does',\n 'did',\n 'have',\n 'need',\n 'want',\n 'look',\n 'help',\n 'know',\n 'think',\n 'make',\n 'create',\n 'find',\n 'get',\n 'buy',\n 'use',\n 'install',\n 'fix',\n 'recommend',\n 'tell',\n 'show',\n 'compare',\n 'explain',\n ],\n stopwords: [\n 'the',\n 'a',\n 'an',\n 'i',\n 'me',\n 'my',\n 'is',\n 'it',\n 'in',\n 'on',\n 'at',\n 'to',\n 'for',\n 'of',\n 'and',\n 'or',\n 'but',\n 'not',\n 'so',\n 'if',\n 'by',\n 'with',\n 'from',\n 'that',\n 'this',\n 'about',\n ],\n support: [\n // Orders / tracking / delivery\n 'order',\n 'package',\n 'shipment',\n 'tracking',\n 'delivery',\n 'delayed',\n 'late',\n 'lost',\n 'missing',\n 'cancel',\n 'modify',\n\n // Returns / refunds / exchanges\n 'return',\n 'exchange',\n 'refund',\n 'replacement',\n 'eligible',\n 'eligibility',\n\n // Product issues\n 'warranty',\n 'damaged',\n 'broken',\n 'defective',\n 'wrong',\n 'incorrect',\n\n // Account / login\n 'password',\n 'login',\n 'account',\n 'locked',\n 'verification',\n 'otp',\n\n // Loyalty / promos / gift cards\n 'loyalty',\n 'rewards',\n 'points',\n 'promo',\n 'coupon',\n 'discount',\n 'gift',\n\n // Shipping / payments / billing\n 'shipping',\n 'payment',\n 'billing',\n 'charged',\n 'charge',\n 'invoice',\n 'receipt',\n 'declined',\n\n // Product info / sizing / inventory\n 'size',\n 'sizing',\n 'fit',\n 'care',\n 'stock',\n 'restock',\n 'availability',\n\n // Company / policy\n 'sustainability',\n 'ethics',\n 'careers',\n 'privacy',\n 'terms',\n\n // Human support\n 'agent',\n 'representative',\n 'support',\n 'human',\n 'talk',\n 'speak',\n 'help',\n\n // Technical / service issues\n 'api',\n 'failure',\n 'server',\n 'technical',\n 'website',\n 'checkout',\n 'app',\n ],\n contractions: {\n \"won't\": 'will not',\n \"can't\": 'cannot',\n \"don't\": 'do not',\n \"doesn't\": 'does not',\n \"didn't\": 'did not',\n \"isn't\": 'is not',\n \"aren't\": 'are not',\n \"wasn't\": 'was not',\n \"weren't\": 'were not',\n \"haven't\": 'have not',\n \"hasn't\": 'has not',\n \"hadn't\": 'had not',\n \"wouldn't\": 'would not',\n \"shouldn't\": 'should not',\n \"couldn't\": 'could not',\n \"what's\": 'what is',\n \"what're\": 'what are',\n \"how's\": 'how is',\n \"where's\": 'where is',\n \"who's\": 'who is',\n \"that's\": 'that is',\n \"there's\": 'there is',\n \"it's\": 'it is',\n \"i'm\": 'i am',\n \"i'd\": 'i would',\n \"i'll\": 'i will',\n \"i've\": 'i have',\n \"we're\": 'we are',\n \"we've\": 'we have',\n \"we'd\": 'we would',\n \"they're\": 'they are',\n \"they've\": 'they have',\n \"you're\": 'you are',\n \"you've\": 'you have',\n \"you'd\": 'you would',\n },\n}\n\nconst DE_WORDS: LocaleWords = {\n questions: [\n 'wer',\n 'was',\n 'wann',\n 'wo',\n 'warum',\n 'wieso',\n 'weshalb',\n 'wie',\n 'welche',\n 'welcher',\n 'welches',\n 'kann',\n 'kannst',\n 'können',\n 'soll',\n 'sollte',\n 'könnte',\n 'würde',\n 'wird',\n 'hat',\n 'habe',\n 'haben',\n 'ist',\n 'sind',\n 'tust',\n 'tun',\n ],\n pronouns: [\n 'ich',\n 'mich',\n 'mir',\n 'mein',\n 'meine',\n 'meiner',\n 'meinen',\n 'wir',\n 'uns',\n 'unser',\n 'unsere',\n 'du',\n 'dich',\n 'dir',\n 'dein',\n 'deine',\n 'sie',\n 'ihnen',\n 'er',\n 'ihn',\n 'ihm',\n 'sein',\n 'seine',\n 'ihr',\n 'ihre',\n 'es',\n ],\n commonVerbs: [\n 'ist',\n 'sind',\n 'war',\n 'waren',\n 'tut',\n 'tun',\n 'tat',\n 'taten',\n 'hat',\n 'habe',\n 'haben',\n 'hatte',\n 'hatten',\n 'brauche',\n 'brauchen',\n 'möchte',\n 'möchten',\n 'will',\n 'willst',\n 'wollen',\n 'suche',\n 'suchen',\n 'hilf',\n 'helfen',\n 'weiß',\n 'denke',\n 'denken',\n 'mache',\n 'machen',\n 'erstelle',\n 'erstellen',\n 'finde',\n 'finden',\n 'kaufe',\n 'kaufen',\n 'benutze',\n 'benutzen',\n 'installiere',\n 'installieren',\n 'repariere',\n 'reparieren',\n 'empfehle',\n 'empfehlen',\n 'sage',\n 'sagen',\n 'zeige',\n 'zeigen',\n 'vergleiche',\n 'vergleichen',\n 'erkläre',\n 'erklären',\n ],\n stopwords: [\n 'der',\n 'die',\n 'das',\n 'den',\n 'dem',\n 'des',\n 'ein',\n 'eine',\n 'einen',\n 'einer',\n 'eines',\n 'ich',\n 'mich',\n 'mein',\n 'ist',\n 'es',\n 'in',\n 'an',\n 'auf',\n 'zu',\n 'für',\n 'von',\n 'und',\n 'oder',\n 'aber',\n 'nicht',\n 'also',\n 'falls',\n 'mit',\n 'aus',\n 'dass',\n 'dieser',\n 'diese',\n 'dieses',\n 'über',\n ],\n support: [\n // Bestellungen / Tracking / Lieferung\n 'bestellung',\n 'bestellungen',\n 'paket',\n 'sendung',\n 'versand',\n 'lieferung',\n 'tracking',\n 'verzögert',\n 'verspätet',\n 'verloren',\n 'fehlt',\n 'fehlend',\n 'stornieren',\n 'storno',\n 'ändern',\n\n // Rücksendungen / Erstattungen / Umtausch\n 'rücksendung',\n 'rückgabe',\n 'retoure',\n 'umtausch',\n 'rückerstattung',\n 'erstattung',\n 'ersatz',\n 'berechtigt',\n 'anspruch',\n\n // Produktprobleme\n 'garantie',\n 'beschädigt',\n 'kaputt',\n 'defekt',\n 'falsch',\n 'fehlerhaft',\n\n // Konto / Anmeldung\n 'passwort',\n 'anmelden',\n 'login',\n 'konto',\n 'gesperrt',\n 'verifizierung',\n 'otp',\n\n // Treue / Aktionen / Geschenke\n 'treue',\n 'treueprogramm',\n 'prämien',\n 'punkte',\n 'aktion',\n 'gutschein',\n 'rabatt',\n 'geschenk',\n 'geschenkkarte',\n\n // Versand / Zahlung / Abrechnung\n 'versandkosten',\n 'zahlung',\n 'abrechnung',\n 'belastet',\n 'rechnung',\n 'beleg',\n 'quittung',\n 'abgelehnt',\n\n // Produktinfo / Größen / Lager\n 'größe',\n 'passform',\n 'pflege',\n 'lager',\n 'verfügbarkeit',\n\n // Unternehmen / Richtlinien\n 'nachhaltigkeit',\n 'ethik',\n 'karriere',\n 'datenschutz',\n 'bedingungen',\n 'agb',\n\n // Menschlicher Support\n 'mitarbeiter',\n 'vertreter',\n 'support',\n 'mensch',\n 'sprechen',\n 'reden',\n 'hilfe',\n\n // Technische / Service-Probleme\n 'api',\n 'fehler',\n 'server',\n 'technisch',\n 'webseite',\n 'kasse',\n 'app',\n\n // More\n 'rückgabe',\n 'zurückgeben',\n 'bestellstatus',\n 'lieferstatus',\n ],\n}\n\nconst FR_WORDS: LocaleWords = {\n questions: [\n 'qui',\n 'que',\n 'quoi',\n 'quand',\n 'où',\n 'pourquoi',\n 'comment',\n 'combien',\n 'quel',\n 'quelle',\n 'quels',\n 'quelles',\n 'peux',\n 'peut',\n 'peuvent',\n 'dois',\n 'doit',\n 'devrait',\n 'pourrait',\n 'aurait',\n 'sera',\n 'est',\n 'sont',\n 'fait',\n 'font',\n 'ai',\n 'as',\n 'a',\n 'avons',\n 'avez',\n 'ont',\n ],\n pronouns: [\n 'je',\n 'moi',\n 'mon',\n 'ma',\n 'mes',\n 'mien',\n 'mienne',\n 'nous',\n 'notre',\n 'nos',\n 'nôtre',\n 'tu',\n 'te',\n 'toi',\n 'ton',\n 'ta',\n 'tes',\n 'vous',\n 'votre',\n 'vos',\n 'il',\n 'lui',\n 'son',\n 'sa',\n 'ses',\n 'elle',\n 'ils',\n 'elles',\n 'leur',\n 'leurs',\n ],\n commonVerbs: [\n 'est',\n 'sont',\n 'était',\n 'étaient',\n 'fait',\n 'font',\n 'faisait',\n 'ai',\n 'as',\n 'a',\n 'avons',\n 'avez',\n 'ont',\n 'avait',\n 'avaient',\n 'besoin',\n 'veux',\n 'veut',\n 'voulons',\n 'voulez',\n 'veulent',\n 'cherche',\n 'cherchons',\n 'cherchez',\n 'aide',\n 'aider',\n 'sais',\n 'sait',\n 'savez',\n 'savons',\n 'pense',\n 'pensons',\n 'pensez',\n 'fais',\n 'faisons',\n 'faites',\n 'crée',\n 'créer',\n 'trouve',\n 'trouver',\n 'achète',\n 'acheter',\n 'utilise',\n 'utiliser',\n 'installe',\n 'installer',\n 'répare',\n 'réparer',\n 'recommande',\n 'recommander',\n 'dis',\n 'dites',\n 'montre',\n 'montrer',\n 'compare',\n 'comparer',\n 'explique',\n 'expliquer',\n ],\n stopwords: [\n 'le',\n 'la',\n 'les',\n 'un',\n 'une',\n 'des',\n 'du',\n 'au',\n 'aux',\n 'je',\n 'me',\n 'mon',\n 'est',\n 'il',\n 'elle',\n 'dans',\n 'sur',\n 'à',\n 'pour',\n 'de',\n 'et',\n 'ou',\n 'mais',\n 'pas',\n 'donc',\n 'si',\n 'par',\n 'avec',\n 'depuis',\n 'que',\n 'ce',\n 'cette',\n 'ces',\n ],\n support: [\n // Commandes / suivi / livraison\n 'commande',\n 'commandes',\n 'colis',\n 'envoi',\n 'expédition',\n 'livraison',\n 'suivi',\n 'retardé',\n 'retard',\n 'perdu',\n 'manquant',\n 'annuler',\n 'annulation',\n 'modifier',\n\n // Retours / remboursements / échanges\n 'retour',\n 'retours',\n 'échange',\n 'remboursement',\n 'remplacement',\n 'éligible',\n 'éligibilité',\n\n // Problèmes produit\n 'garantie',\n 'endommagé',\n 'cassé',\n 'défectueux',\n 'incorrect',\n 'erroné',\n\n // Compte / connexion\n 'mot de passe',\n 'motdepasse',\n 'connexion',\n 'identifiant',\n 'compte',\n 'verrouillé',\n 'vérification',\n 'otp',\n\n // Fidélité / promos / cadeaux\n 'fidélité',\n 'récompenses',\n 'points',\n 'promo',\n 'promotion',\n 'coupon',\n 'remise',\n 'réduction',\n 'cadeau',\n\n // Livraison / paiement / facturation\n 'paiement',\n 'facturation',\n 'facturé',\n 'facture',\n 'reçu',\n 'refusé',\n\n // Info produit / taille / stock\n 'taille',\n 'pointure',\n 'ajustement',\n 'entretien',\n 'stock',\n 'disponibilité',\n\n // Entreprise / politique\n 'durabilité',\n 'éthique',\n 'carrières',\n 'confidentialité',\n 'conditions',\n\n // Support humain\n 'agent',\n 'représentant',\n 'support',\n 'humain',\n 'parler',\n 'aide',\n\n // Technique / service\n 'api',\n 'panne',\n 'serveur',\n 'technique',\n 'site',\n 'paiement',\n 'app',\n 'application',\n\n // More\n 'remboursement',\n 'retard',\n 'site web',\n ],\n elisionPrefixes: ['j', 'n', 'qu', 'l', 'd', 'c', 'm', 't', 's'],\n}\n\nconst IT_WORDS: LocaleWords = {\n questions: [\n 'chi',\n 'cosa',\n 'che',\n 'quando',\n 'dove',\n 'perché',\n 'perchè',\n 'come',\n 'quanto',\n 'quanti',\n 'quante',\n 'quale',\n 'quali',\n 'posso',\n 'può',\n 'possono',\n 'devo',\n 'deve',\n 'dovrebbe',\n 'potrebbe',\n 'vorrebbe',\n 'sarà',\n 'ho',\n 'ha',\n 'hanno',\n 'è',\n 'sono',\n 'fa',\n 'fanno',\n 'fai',\n ],\n pronouns: [\n 'io',\n 'mi',\n 'me',\n 'mio',\n 'mia',\n 'miei',\n 'mie',\n 'noi',\n 'ci',\n 'nostro',\n 'nostra',\n 'nostri',\n 'nostre',\n 'tu',\n 'ti',\n 'te',\n 'tuo',\n 'tua',\n 'tuoi',\n 'tue',\n 'voi',\n 'vi',\n 'vostro',\n 'vostra',\n 'vostri',\n 'vostre',\n 'lui',\n 'lei',\n 'suo',\n 'sua',\n 'suoi',\n 'sue',\n 'loro',\n ],\n commonVerbs: [\n 'è',\n 'sono',\n 'era',\n 'erano',\n 'fa',\n 'fanno',\n 'faceva',\n 'ha',\n 'ho',\n 'hai',\n 'abbiamo',\n 'avete',\n 'hanno',\n 'aveva',\n 'avevano',\n 'bisogno',\n 'voglio',\n 'vuole',\n 'vogliamo',\n 'volete',\n 'vogliono',\n 'cerco',\n 'cerca',\n 'cerchiamo',\n 'cercate',\n 'aiuto',\n 'aiutare',\n 'so',\n 'sa',\n 'sappiamo',\n 'sapete',\n 'penso',\n 'pensa',\n 'pensiamo',\n 'faccio',\n 'facciamo',\n 'fate',\n 'creo',\n 'creare',\n 'trovo',\n 'trovare',\n 'compro',\n 'comprare',\n 'uso',\n 'usare',\n 'installo',\n 'installare',\n 'riparo',\n 'riparare',\n 'raccomando',\n 'raccomandare',\n 'dimmi',\n 'dire',\n 'mostra',\n 'mostrare',\n 'confronto',\n 'confrontare',\n 'spiego',\n 'spiegare',\n ],\n stopwords: [\n 'il',\n 'lo',\n 'la',\n 'i',\n 'gli',\n 'le',\n 'un',\n 'uno',\n 'una',\n 'io',\n 'mi',\n 'mio',\n 'è',\n 'in',\n 'su',\n 'a',\n 'per',\n 'di',\n 'da',\n 'e',\n 'ed',\n 'o',\n 'ma',\n 'non',\n 'così',\n 'se',\n 'con',\n 'che',\n 'questo',\n 'questa',\n 'questi',\n 'queste',\n ],\n support: [\n // Ordini / tracciamento / consegna\n 'ordine',\n 'ordini',\n 'pacco',\n 'spedizione',\n 'consegna',\n 'tracciamento',\n 'ritardato',\n 'ritardo',\n 'perso',\n 'mancante',\n 'annullare',\n 'annullamento',\n 'modificare',\n\n // Resi / rimborsi / cambi\n 'reso',\n 'resi',\n 'cambio',\n 'rimborso',\n 'sostituzione',\n 'idoneo',\n 'idoneità',\n\n // Problemi prodotto\n 'garanzia',\n 'danneggiato',\n 'rotto',\n 'difettoso',\n 'sbagliato',\n 'errato',\n\n // Account / accesso\n 'password',\n 'accesso',\n 'login',\n 'account',\n 'bloccato',\n 'verifica',\n 'otp',\n\n // Fedeltà / promozioni / regali\n 'fedeltà',\n 'premi',\n 'punti',\n 'promozione',\n 'promo',\n 'coupon',\n 'sconto',\n 'regalo',\n\n // Spedizione / pagamento / fatturazione\n 'pagamento',\n 'fatturazione',\n 'addebitato',\n 'fattura',\n 'ricevuta',\n 'rifiutato',\n\n // Info prodotto / taglie / scorte\n 'taglia',\n 'misura',\n 'vestibilità',\n 'cura',\n 'scorta',\n 'disponibilità',\n\n // Azienda / policy\n 'sostenibilità',\n 'etica',\n 'carriere',\n 'privacy',\n 'termini',\n\n // Supporto umano\n 'agente',\n 'rappresentante',\n 'supporto',\n 'umano',\n 'parlare',\n 'aiuto',\n\n // Tecnico / servizio\n 'api',\n 'guasto',\n 'server',\n 'tecnico',\n 'sito',\n 'checkout',\n 'app',\n\n // More\n 'assistenza',\n 'restituzione',\n 'stato ordine',\n ],\n elisionPrefixes: ['c', 'l', 'd', 'un', 'm', 't', 's', 'all', 'nell', 'dell', 'sull', 'quell'],\n}\n\nconst NL_WORDS: LocaleWords = {\n questions: [\n 'wie',\n 'wat',\n 'wanneer',\n 'waar',\n 'waarom',\n 'hoe',\n 'hoeveel',\n 'welke',\n 'welk',\n 'kan',\n 'kunt',\n 'kunnen',\n 'zou',\n 'zal',\n 'moet',\n 'heb',\n 'heeft',\n 'hebben',\n 'is',\n 'zijn',\n 'doe',\n 'doet',\n 'doen',\n ],\n pronouns: [\n 'ik',\n 'mij',\n 'me',\n 'mijn',\n 'wij',\n 'we',\n 'ons',\n 'onze',\n 'jij',\n 'je',\n 'jou',\n 'jouw',\n 'u',\n 'uw',\n 'hij',\n 'hem',\n 'zijn',\n 'zij',\n 'ze',\n 'haar',\n 'hen',\n 'hun',\n 'het',\n ],\n commonVerbs: [\n 'is',\n 'zijn',\n 'was',\n 'waren',\n 'doet',\n 'doe',\n 'doen',\n 'deed',\n 'deden',\n 'heb',\n 'heeft',\n 'hebben',\n 'had',\n 'hadden',\n 'nodig',\n 'wil',\n 'willen',\n 'wilde',\n 'zoek',\n 'zoeken',\n 'help',\n 'helpen',\n 'weet',\n 'weten',\n 'denk',\n 'denken',\n 'maak',\n 'maken',\n 'maakte',\n 'creëer',\n 'creëren',\n 'vind',\n 'vinden',\n 'vond',\n 'koop',\n 'kopen',\n 'gebruik',\n 'gebruiken',\n 'installeer',\n 'installeren',\n 'repareer',\n 'repareren',\n 'raad',\n 'aanraden',\n 'vertel',\n 'vertellen',\n 'toon',\n 'tonen',\n 'vergelijk',\n 'vergelijken',\n 'leg',\n 'uitleggen',\n ],\n stopwords: [\n 'de',\n 'het',\n 'een',\n 'ik',\n 'mij',\n 'mijn',\n 'is',\n 'in',\n 'op',\n 'aan',\n 'naar',\n 'voor',\n 'van',\n 'en',\n 'of',\n 'maar',\n 'niet',\n 'dus',\n 'als',\n 'door',\n 'met',\n 'vanaf',\n 'dat',\n 'dit',\n 'deze',\n 'die',\n 'over',\n ],\n support: [\n // Bestellingen / tracking / levering\n 'bestelling',\n 'bestellingen',\n 'pakket',\n 'zending',\n 'verzending',\n 'levering',\n 'tracking',\n 'vertraagd',\n 'laat',\n 'verloren',\n 'ontbrekend',\n 'annuleren',\n 'wijzigen',\n\n // Retouren / terugbetalingen / ruilen\n 'retour',\n 'retourneren',\n 'ruil',\n 'terugbetaling',\n 'restitutie',\n 'vervanging',\n 'geschikt',\n 'geschiktheid',\n\n // Productproblemen\n 'garantie',\n 'beschadigd',\n 'kapot',\n 'defect',\n 'verkeerd',\n 'onjuist',\n\n // Account / inloggen\n 'wachtwoord',\n 'inloggen',\n 'login',\n 'account',\n 'geblokkeerd',\n 'verificatie',\n 'otp',\n\n // Loyaliteit / promoties / cadeaus\n 'loyaliteit',\n 'beloningen',\n 'punten',\n 'promo',\n 'promotie',\n 'kortingsbon',\n 'korting',\n 'cadeau',\n 'cadeaubon',\n\n // Verzending / betaling / facturering\n 'verzending',\n 'betaling',\n 'facturering',\n 'gefactureerd',\n 'factuur',\n 'bonnetje',\n 'kassabon',\n 'geweigerd',\n\n // Productinfo / maten / voorraad\n 'maat',\n 'pasvorm',\n 'verzorging',\n 'voorraad',\n 'beschikbaarheid',\n\n // Bedrijf / beleid\n 'duurzaamheid',\n 'ethiek',\n 'carrières',\n 'privacy',\n 'voorwaarden',\n\n // Menselijke ondersteuning\n 'medewerker',\n 'vertegenwoordiger',\n 'ondersteuning',\n 'mens',\n 'praten',\n 'spreken',\n 'hulp',\n\n // Technisch / service\n 'api',\n 'storing',\n 'server',\n 'technisch',\n 'website',\n 'afrekenen',\n 'app',\n\n // More\n 'klantenservice',\n 'bestelstatus',\n 'terugsturen',\n ],\n}\n\nconst ES_WORDS: LocaleWords = {\n questions: [\n 'quién',\n 'quien',\n 'qué',\n 'que',\n 'cuándo',\n 'cuando',\n 'dónde',\n 'donde',\n 'porqué',\n 'porque',\n 'cómo',\n 'como',\n 'cuál',\n 'cual',\n 'cuáles',\n 'cuales',\n 'cuánto',\n 'cuanto',\n 'cuántos',\n 'puedo',\n 'puede',\n 'pueden',\n 'podría',\n 'debería',\n 'sería',\n 'ha',\n 'han',\n 'es',\n 'son',\n 'hace',\n 'hacen',\n ],\n pronouns: [\n 'yo',\n 'me',\n 'mí',\n 'mi',\n 'mío',\n 'mía',\n 'míos',\n 'mías',\n 'nosotros',\n 'nosotras',\n 'nos',\n 'nuestro',\n 'nuestra',\n 'nuestros',\n 'nuestras',\n 'tú',\n 'tu',\n 'te',\n 'ti',\n 'tuyo',\n 'tuya',\n 'tuyos',\n 'tuyas',\n 'usted',\n 'ustedes',\n 'vosotros',\n 'vosotras',\n 'vuestro',\n 'vuestra',\n 'él',\n 'ella',\n 'su',\n 'sus',\n 'suyo',\n 'suya',\n 'ellos',\n 'ellas',\n 'les',\n 'los',\n 'las',\n 'le',\n 'la',\n 'lo',\n ],\n commonVerbs: [\n 'es',\n 'son',\n 'era',\n 'eran',\n 'está',\n 'están',\n 'hace',\n 'hacen',\n 'hacía',\n 'ha',\n 'he',\n 'has',\n 'hemos',\n 'habéis',\n 'han',\n 'había',\n 'habían',\n 'necesito',\n 'necesita',\n 'necesitamos',\n 'necesitan',\n 'quiero',\n 'quiere',\n 'queremos',\n 'queréis',\n 'quieren',\n 'busco',\n 'busca',\n 'buscamos',\n 'buscan',\n 'ayuda',\n 'ayudar',\n 'sé',\n 'sabe',\n 'sabemos',\n 'saben',\n 'pienso',\n 'piensa',\n 'pensamos',\n 'hago',\n 'hacemos',\n 'creo',\n 'crear',\n 'encuentro',\n 'encontrar',\n 'compro',\n 'comprar',\n 'uso',\n 'usar',\n 'instalo',\n 'instalar',\n 'reparo',\n 'reparar',\n 'recomiendo',\n 'recomendar',\n 'dime',\n 'decir',\n 'muestra',\n 'mostrar',\n 'comparo',\n 'comparar',\n 'explico',\n 'explicar',\n ],\n stopwords: [\n 'el',\n 'la',\n 'los',\n 'las',\n 'un',\n 'una',\n 'unos',\n 'unas',\n 'yo',\n 'me',\n 'mi',\n 'es',\n 'en',\n 'a',\n 'al',\n 'para',\n 'de',\n 'del',\n 'y',\n 'e',\n 'o',\n 'u',\n 'pero',\n 'no',\n 'así',\n 'si',\n 'por',\n 'con',\n 'desde',\n 'que',\n 'este',\n 'esta',\n 'estos',\n 'estas',\n 'sobre',\n ],\n support: [\n // Pedidos / seguimiento / entrega\n 'pedido',\n 'pedidos',\n 'paquete',\n 'envío',\n 'entrega',\n 'seguimiento',\n 'retrasado',\n 'tarde',\n 'perdido',\n 'faltante',\n 'cancelar',\n 'cancelación',\n 'modificar',\n\n // Devoluciones / reembolsos / cambios\n 'devolución',\n 'devoluciones',\n 'cambio',\n 'reembolso',\n 'reemplazo',\n 'elegible',\n 'elegibilidad',\n\n // Problemas de producto\n 'garantía',\n 'dañado',\n 'roto',\n 'defectuoso',\n 'incorrecto',\n 'equivocado',\n\n // Cuenta / acceso\n 'contraseña',\n 'acceso',\n 'login',\n 'cuenta',\n 'bloqueada',\n 'bloqueado',\n 'verificación',\n 'otp',\n\n // Fidelidad / promos / regalos\n 'fidelidad',\n 'recompensas',\n 'puntos',\n 'promo',\n 'promoción',\n 'cupón',\n 'descuento',\n 'regalo',\n\n // Envío / pago / facturación\n 'envío',\n 'pago',\n 'facturación',\n 'cobrado',\n 'cargo',\n 'factura',\n 'recibo',\n 'rechazado',\n\n // Info producto / tallas / stock\n 'talla',\n 'tamaño',\n 'ajuste',\n 'cuidado',\n 'inventario',\n 'disponibilidad',\n\n // Empresa / política\n 'sostenibilidad',\n 'ética',\n 'carreras',\n 'privacidad',\n 'términos',\n\n // Soporte humano\n 'agente',\n 'representante',\n 'soporte',\n 'humano',\n 'hablar',\n 'ayuda',\n\n // Técnico / servicio\n 'api',\n 'fallo',\n 'servidor',\n 'técnico',\n 'sitio',\n 'pago',\n 'app',\n\n // More\n 'atención al cliente',\n 'estado del pedido',\n 'devolver',\n 'empleo',\n 'trabajo',\n ],\n}\n\nexport const DEFAULT_WORDS: Record<string, LocaleWords> = {\n 'en-gb': EN_WORDS,\n 'en-us': EN_WORDS,\n 'en-ca': EN_WORDS,\n 'de-de': DE_WORDS,\n 'fr-fr': FR_WORDS,\n 'fr-ca': FR_WORDS,\n 'it-it': IT_WORDS,\n 'nl-nl': NL_WORDS,\n 'es-es': ES_WORDS,\n 'es-us': ES_WORDS,\n}\n\nexport const DEFAULT_LOCALE = 'en-us'\n\nexport const resolveDefaultWords = (locale?: string): LocaleWords =>\n DEFAULT_WORDS[locale?.toLowerCase() ?? DEFAULT_LOCALE] ?? DEFAULT_WORDS[DEFAULT_LOCALE]\n","import { resolveDefaultWords } from './enums'\n\nexport const isPunct = (s: string) => !/\\w/.test(s)\n\nconst splitElisions = (query: string, prefixes?: string[]) => {\n if (!prefixes || prefixes.length === 0) return query\n const pattern = new RegExp(`\\\\b(${prefixes.join('|')})'(?=\\\\w)`, 'gi')\n return query.replace(pattern, \"$1' \")\n}\n\nconst expandContractions = (query: string, contractions?: Record<string, string>) => {\n if (!contractions) return query\n return query.replace(/[\\w']+/g, word => contractions[word] ?? word)\n}\n\nexport const tokenize = (query: string, locale?: string) => {\n const words = resolveDefaultWords(locale)\n const elided = splitElisions(query, words.elisionPrefixes)\n const expanded = expandContractions(elided, words.contractions)\n return expanded.split(/\\s+/).filter(Boolean)\n}\n\nexport const matchPhrases = (a: { tokens: string[]; phrases: string[] }) => {\n const matched: string[] = []\n for (const phrase of a.phrases) {\n const phraseTokens = phrase.split(/\\s+/).filter(Boolean)\n if (phraseTokens.length === 0) continue\n if (phraseTokens.length === 1) {\n if (a.tokens.includes(phraseTokens[0])) matched.push(phrase)\n continue\n }\n for (let i = 0; i <= a.tokens.length - phraseTokens.length; i++) {\n let hit = true\n for (let j = 0; j < phraseTokens.length; j++) {\n if (a.tokens[i + j] !== phraseTokens[j]) {\n hit = false\n break\n }\n }\n if (hit) {\n matched.push(phrase)\n break\n }\n }\n }\n return matched\n}\n\nexport const countPhraseTokens = (phrases: string[]) =>\n phrases.reduce((sum, p) => sum + p.split(/\\s+/).filter(Boolean).length, 0)\n\n","import type { ResolvedConfig } from '../types'\nimport { tokenize } from '../utils'\n\nexport const checkLength = (value: string, c: ResolvedConfig): boolean => {\n if (!c.maxLength) {\n console.log(' checkLength → true (no maxLength configured)')\n return true\n }\n const wordCount = tokenize(value).length\n const result = wordCount <= c.maxLength\n console.log(` checkLength → ${result} (wordCount=${wordCount} maxLength=${c.maxLength})`)\n return result\n}\n","import type { ResolvedConfig } from '../types'\nimport { tokenize } from '../utils'\n\nconst checkPuncts = (lower: string, c: ResolvedConfig): boolean => {\n for (const punct of c.blackPunctSet ?? []) {\n if (lower.includes(punct)) {\n console.log(` punct \"${punct}\" found in sentence → false (blacklisted)`)\n return false\n }\n }\n return true\n}\n\nconst checkWord = (word: string, c: ResolvedConfig): boolean => {\n if (c.blackWordSet?.has(word)) {\n console.log(` word \"${word}\" → false (blacklisted)`)\n return false\n }\n const hasWhite = (c.whiteSet?.size ?? 0) > 0 || (c.whiteList?.length ?? 0) > 0\n if (hasWhite) {\n const result = !!(c.whiteSet?.has(word) || c.whiteList?.some((s: string) => s.toLowerCase() === word))\n console.log(` word \"${word}\" → ${result} (whitelist check)`)\n return result\n }\n console.log(` word \"${word}\" → true`)\n return true\n}\n\nexport const checkList = (lower: string, c: ResolvedConfig): boolean =>\n checkPuncts(lower, c) && tokenize(lower).every(word => checkWord(word, c))\n","import { resolveDefaultWords } from '../enums'\nimport type { ResolvedConfig } from '../types'\nimport { countPhraseTokens, matchPhrases, tokenize } from '../utils'\n\nexport const scoreQuery = (query: string, c: ResolvedConfig): boolean => {\n const tokens = tokenize(query, c.locale)\n if (tokens.length === 0) return true\n\n const defaults = resolveDefaultWords(c.locale)\n const questionWords = c.scoreQuestionWords ?? defaults.questions\n const pronouns = c.scorePronouns ?? defaults.pronouns\n const commonVerbs = c.scoreCommonVerbs ?? defaults.commonVerbs\n const stopwords = c.scoreStopwords ?? defaults.stopwords\n const supportWords = c.scoreSupportWords ?? defaults.support\n\n const matchedSupportWords = matchPhrases({ tokens, phrases: supportWords })\n if (matchedSupportWords.length > 0) {\n console.log(` [A] support words: found [${matchedSupportWords.join(', ')}] → conversational (override)`)\n return false\n }\n\n let scoreKeyword = 0\n let scoreConversational = 0\n\n if (tokens.length <= 3) {\n scoreKeyword += 2\n console.log(` [B] token count: word count=${tokens.length} ≤3 → keyword +2`)\n } else if (tokens.length >= 6) {\n scoreConversational += 2\n console.log(` [B] token count: word count=${tokens.length} ≥6 → conversational +2`)\n } else {\n console.log(` [B] token count: word count=${tokens.length} (no score)`)\n }\n\n const matchedQuestionWords = matchPhrases({ tokens, phrases: questionWords })\n if (matchedQuestionWords.length > 0) {\n scoreConversational += 2\n console.log(` [C] question words: found [${matchedQuestionWords.join(', ')}] → conversational +2`)\n } else {\n console.log(` [C] question words: none`)\n }\n\n const matchedPronouns = matchPhrases({ tokens, phrases: pronouns })\n if (matchedPronouns.length > 0) {\n scoreConversational += 1\n console.log(` [D] pronouns: found [${matchedPronouns.join(', ')}] → conversational +1`)\n } else {\n console.log(` [D] pronouns: none`)\n }\n\n const matchedVerbs = matchPhrases({ tokens, phrases: commonVerbs })\n if (matchedVerbs.length > 0) {\n scoreConversational += 1\n console.log(` [E] common verbs: found [${matchedVerbs.join(', ')}] → conversational +1`)\n } else {\n console.log(` [E] common verbs: none`)\n }\n\n if (query.includes('?')) {\n scoreConversational += 3\n console.log(` [F] question mark: found → conversational +3`)\n } else {\n console.log(` [F] question mark: none`)\n }\n\n const stopwordCount = countPhraseTokens(matchPhrases({ tokens, phrases: stopwords }))\n const stopwordRatio = stopwordCount / tokens.length\n if (stopwordRatio > 0.4) {\n scoreConversational += 2\n console.log(\n ` [G] stopword ratio: ${stopwordRatio.toFixed(2)} (${stopwordCount}/${tokens.length}) >0.4 → conversational +2`\n )\n } else {\n scoreKeyword += 1\n console.log(\n ` [G] stopword ratio: ${stopwordRatio.toFixed(2)} (${stopwordCount}/${tokens.length}) ≤0.4 → keyword +1`\n )\n }\n\n const avgLen = tokens.reduce((sum, t) => sum + t.length, 0) / tokens.length\n if (avgLen >= 6) {\n scoreKeyword += 1\n console.log(` [H] avg token length: ${avgLen.toFixed(2)} ≥6 → keyword +1`)\n } else {\n console.log(` [H] avg token length: ${avgLen.toFixed(2)} (no score)`)\n }\n\n const result = scoreKeyword >= scoreConversational\n console.log(\n ` scores: keyword=${scoreKeyword} conversational=${scoreConversational} → ${result ? 'keyword' : 'conversational'}`\n )\n return result\n}\n"],"mappings":"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AAM,WAAwB;AAAA,EAC5B,WAAW;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAS;AAAA;AAAA,IAEP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,IAAM,WAAwB;AAAA,EAC5B,WAAW;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAS;AAAA;AAAA,IAEP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,iBAAiB,CAAC,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAChE;AAEA,IAAM,WAAwB;AAAA,EAC5B,WAAW;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAS;AAAA;AAAA,IAEP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,iBAAiB,CAAC,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,QAAQ,OAAO;AAC9F;AAEA,IAAM,WAAwB;AAAA,EAC5B,WAAW;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAS;AAAA;AAAA,IAEP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,IAAM,WAAwB;AAAA,EAC5B,WAAW;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAS;AAAA;AAAA,IAEP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;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","names":["_a","_b"]}
|