@bloomreach/clarity-utils 1.0.4 → 1.0.5

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.
@@ -1,2 +1,2 @@
1
- "use strict";var tmp=(()=>{var y=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var A=(n,e)=>{for(var o in e)y(n,o,{get:e[o],enumerable:!0})},G=(n,e,o,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of B(e))!T.call(n,s)&&s!==o&&y(n,s,{get:()=>e[s],enumerable:!(t=U(e,s))||t.enumerable});return n};var H=n=>G(y({},"__esModule",{value:!0}),n);var se={};A(se,{clarityUtils:()=>te});var q={questions:["who","what","when","where","why","how","which","can","should","could","would","will","have","has","is","are","do","does","did"],pronouns:["i","me","my","mine","we","us","our","you","your","it","he","him","his","she","her","they","them","their"],commonVerbs:["is","are","was","were","do","does","did","have","need","want","look","help","know","think","make","create","find","get","buy","use","install","fix","recommend","tell","show","compare","explain"],stopwords:["the","a","an","i","me","my","is","it","in","on","at","to","for","of","and","or","but","not","so","if","by","with","from","that","this","about"],support:["order","package","shipment","tracking","delivery","delayed","late","lost","missing","cancel","modify","return","exchange","refund","replacement","eligible","eligibility","warranty","damaged","broken","defective","wrong","incorrect","password","login","account","locked","verification","otp","loyalty","rewards","points","promo","coupon","discount","gift","shipping","payment","billing","charged","charge","invoice","receipt","declined","size","sizing","fit","care","stock","restock","availability","sustainability","ethics","careers","privacy","terms","agent","representative","support","human","talk","speak","help","api","failure","server","technical","website","checkout","app"],contractions:{"won't":"will not","can't":"cannot","don't":"do not","doesn't":"does not","didn't":"did not","isn't":"is not","aren't":"are not","wasn't":"was not","weren't":"were not","haven't":"have not","hasn't":"has not","hadn't":"had not","wouldn't":"would not","shouldn't":"should not","couldn't":"could not","what's":"what is","what're":"what are","how's":"how is","where's":"where is","who's":"who is","that's":"that is","there's":"there is","it's":"it is","i'm":"i am","i'd":"i would","i'll":"i will","i've":"i have","we're":"we are","we've":"we have","we'd":"we would","they're":"they are","they've":"they have","you're":"you are","you've":"you have","you'd":"you would"}},N={questions:["wer","was","wann","wo","warum","wieso","weshalb","wie","welche","welcher","welches","kann","kannst","k\xF6nnen","soll","sollte","k\xF6nnte","w\xFCrde","wird","hat","habe","haben","ist","sind","tust","tun"],pronouns:["ich","mich","mir","mein","meine","meiner","meinen","wir","uns","unser","unsere","du","dich","dir","dein","deine","sie","ihnen","er","ihn","ihm","sein","seine","ihr","ihre","es"],commonVerbs:["ist","sind","war","waren","tut","tun","tat","taten","hat","habe","haben","hatte","hatten","brauche","brauchen","m\xF6chte","m\xF6chten","will","willst","wollen","suche","suchen","hilf","helfen","wei\xDF","denke","denken","mache","machen","erstelle","erstellen","finde","finden","kaufe","kaufen","benutze","benutzen","installiere","installieren","repariere","reparieren","empfehle","empfehlen","sage","sagen","zeige","zeigen","vergleiche","vergleichen","erkl\xE4re","erkl\xE4ren"],stopwords:["der","die","das","den","dem","des","ein","eine","einen","einer","eines","ich","mich","mein","ist","es","in","an","auf","zu","f\xFCr","von","und","oder","aber","nicht","also","falls","mit","aus","dass","dieser","diese","dieses","\xFCber"],support:["bestellung","bestellungen","paket","sendung","versand","lieferung","tracking","verz\xF6gert","versp\xE4tet","verloren","fehlt","fehlend","stornieren","storno","\xE4ndern","r\xFCcksendung","r\xFCckgabe","retoure","umtausch","r\xFCckerstattung","erstattung","ersatz","berechtigt","anspruch","garantie","besch\xE4digt","kaputt","defekt","falsch","fehlerhaft","passwort","anmelden","login","konto","gesperrt","verifizierung","otp","treue","treueprogramm","pr\xE4mien","punkte","aktion","gutschein","rabatt","geschenk","geschenkkarte","versandkosten","zahlung","abrechnung","belastet","rechnung","beleg","quittung","abgelehnt","gr\xF6\xDFe","passform","pflege","lager","verf\xFCgbarkeit","nachhaltigkeit","ethik","karriere","datenschutz","bedingungen","agb","mitarbeiter","vertreter","support","mensch","sprechen","reden","hilfe","api","fehler","server","technisch","webseite","kasse","app","r\xFCckgabe","zur\xFCckgeben","bestellstatus","lieferstatus"]},D={questions:["qui","que","quoi","quand","o\xF9","pourquoi","comment","combien","quel","quelle","quels","quelles","peux","peut","peuvent","dois","doit","devrait","pourrait","aurait","sera","est","sont","fait","font","ai","as","a","avons","avez","ont"],pronouns:["je","moi","mon","ma","mes","mien","mienne","nous","notre","nos","n\xF4tre","tu","te","toi","ton","ta","tes","vous","votre","vos","il","lui","son","sa","ses","elle","ils","elles","leur","leurs"],commonVerbs:["est","sont","\xE9tait","\xE9taient","fait","font","faisait","ai","as","a","avons","avez","ont","avait","avaient","besoin","veux","veut","voulons","voulez","veulent","cherche","cherchons","cherchez","aide","aider","sais","sait","savez","savons","pense","pensons","pensez","fais","faisons","faites","cr\xE9e","cr\xE9er","trouve","trouver","ach\xE8te","acheter","utilise","utiliser","installe","installer","r\xE9pare","r\xE9parer","recommande","recommander","dis","dites","montre","montrer","compare","comparer","explique","expliquer"],stopwords:["le","la","les","un","une","des","du","au","aux","je","me","mon","est","il","elle","dans","sur","\xE0","pour","de","et","ou","mais","pas","donc","si","par","avec","depuis","que","ce","cette","ces"],support:["commande","commandes","colis","envoi","exp\xE9dition","livraison","suivi","retard\xE9","retard","perdu","manquant","annuler","annulation","modifier","retour","retours","\xE9change","remboursement","remplacement","\xE9ligible","\xE9ligibilit\xE9","garantie","endommag\xE9","cass\xE9","d\xE9fectueux","incorrect","erron\xE9","mot de passe","motdepasse","connexion","identifiant","compte","verrouill\xE9","v\xE9rification","otp","fid\xE9lit\xE9","r\xE9compenses","points","promo","promotion","coupon","remise","r\xE9duction","cadeau","paiement","facturation","factur\xE9","facture","re\xE7u","refus\xE9","taille","pointure","ajustement","entretien","stock","disponibilit\xE9","durabilit\xE9","\xE9thique","carri\xE8res","confidentialit\xE9","conditions","agent","repr\xE9sentant","support","humain","parler","aide","api","panne","serveur","technique","site","paiement","app","application","remboursement","retard","site web"],elisionPrefixes:["j","n","qu","l","d","c","m","t","s"]},I={questions:["chi","cosa","che","quando","dove","perch\xE9","perch\xE8","come","quanto","quanti","quante","quale","quali","posso","pu\xF2","possono","devo","deve","dovrebbe","potrebbe","vorrebbe","sar\xE0","ho","ha","hanno","\xE8","sono","fa","fanno","fai"],pronouns:["io","mi","me","mio","mia","miei","mie","noi","ci","nostro","nostra","nostri","nostre","tu","ti","te","tuo","tua","tuoi","tue","voi","vi","vostro","vostra","vostri","vostre","lui","lei","suo","sua","suoi","sue","loro"],commonVerbs:["\xE8","sono","era","erano","fa","fanno","faceva","ha","ho","hai","abbiamo","avete","hanno","aveva","avevano","bisogno","voglio","vuole","vogliamo","volete","vogliono","cerco","cerca","cerchiamo","cercate","aiuto","aiutare","so","sa","sappiamo","sapete","penso","pensa","pensiamo","faccio","facciamo","fate","creo","creare","trovo","trovare","compro","comprare","uso","usare","installo","installare","riparo","riparare","raccomando","raccomandare","dimmi","dire","mostra","mostrare","confronto","confrontare","spiego","spiegare"],stopwords:["il","lo","la","i","gli","le","un","uno","una","io","mi","mio","\xE8","in","su","a","per","di","da","e","ed","o","ma","non","cos\xEC","se","con","che","questo","questa","questi","queste"],support:["ordine","ordini","pacco","spedizione","consegna","tracciamento","ritardato","ritardo","perso","mancante","annullare","annullamento","modificare","reso","resi","cambio","rimborso","sostituzione","idoneo","idoneit\xE0","garanzia","danneggiato","rotto","difettoso","sbagliato","errato","password","accesso","login","account","bloccato","verifica","otp","fedelt\xE0","premi","punti","promozione","promo","coupon","sconto","regalo","pagamento","fatturazione","addebitato","fattura","ricevuta","rifiutato","taglia","misura","vestibilit\xE0","cura","scorta","disponibilit\xE0","sostenibilit\xE0","etica","carriere","privacy","termini","agente","rappresentante","supporto","umano","parlare","aiuto","api","guasto","server","tecnico","sito","checkout","app","assistenza","restituzione","stato ordine"],elisionPrefixes:["c","l","d","un","m","t","s","all","nell","dell","sull","quell"]},K={questions:["wie","wat","wanneer","waar","waarom","hoe","hoeveel","welke","welk","kan","kunt","kunnen","zou","zal","moet","heb","heeft","hebben","is","zijn","doe","doet","doen"],pronouns:["ik","mij","me","mijn","wij","we","ons","onze","jij","je","jou","jouw","u","uw","hij","hem","zijn","zij","ze","haar","hen","hun","het"],commonVerbs:["is","zijn","was","waren","doet","doe","doen","deed","deden","heb","heeft","hebben","had","hadden","nodig","wil","willen","wilde","zoek","zoeken","help","helpen","weet","weten","denk","denken","maak","maken","maakte","cre\xEBer","cre\xEBren","vind","vinden","vond","koop","kopen","gebruik","gebruiken","installeer","installeren","repareer","repareren","raad","aanraden","vertel","vertellen","toon","tonen","vergelijk","vergelijken","leg","uitleggen"],stopwords:["de","het","een","ik","mij","mijn","is","in","op","aan","naar","voor","van","en","of","maar","niet","dus","als","door","met","vanaf","dat","dit","deze","die","over"],support:["bestelling","bestellingen","pakket","zending","verzending","levering","tracking","vertraagd","laat","verloren","ontbrekend","annuleren","wijzigen","retour","retourneren","ruil","terugbetaling","restitutie","vervanging","geschikt","geschiktheid","garantie","beschadigd","kapot","defect","verkeerd","onjuist","wachtwoord","inloggen","login","account","geblokkeerd","verificatie","otp","loyaliteit","beloningen","punten","promo","promotie","kortingsbon","korting","cadeau","cadeaubon","verzending","betaling","facturering","gefactureerd","factuur","bonnetje","kassabon","geweigerd","maat","pasvorm","verzorging","voorraad","beschikbaarheid","duurzaamheid","ethiek","carri\xE8res","privacy","voorwaarden","medewerker","vertegenwoordiger","ondersteuning","mens","praten","spreken","hulp","api","storing","server","technisch","website","afrekenen","app","klantenservice","bestelstatus","terugsturen"]},E={questions:["qui\xE9n","quien","qu\xE9","que","cu\xE1ndo","cuando","d\xF3nde","donde","porqu\xE9","porque","c\xF3mo","como","cu\xE1l","cual","cu\xE1les","cuales","cu\xE1nto","cuanto","cu\xE1ntos","puedo","puede","pueden","podr\xEDa","deber\xEDa","ser\xEDa","ha","han","es","son","hace","hacen"],pronouns:["yo","me","m\xED","mi","m\xEDo","m\xEDa","m\xEDos","m\xEDas","nosotros","nosotras","nos","nuestro","nuestra","nuestros","nuestras","t\xFA","tu","te","ti","tuyo","tuya","tuyos","tuyas","usted","ustedes","vosotros","vosotras","vuestro","vuestra","\xE9l","ella","su","sus","suyo","suya","ellos","ellas","les","los","las","le","la","lo"],commonVerbs:["es","son","era","eran","est\xE1","est\xE1n","hace","hacen","hac\xEDa","ha","he","has","hemos","hab\xE9is","han","hab\xEDa","hab\xEDan","necesito","necesita","necesitamos","necesitan","quiero","quiere","queremos","quer\xE9is","quieren","busco","busca","buscamos","buscan","ayuda","ayudar","s\xE9","sabe","sabemos","saben","pienso","piensa","pensamos","hago","hacemos","creo","crear","encuentro","encontrar","compro","comprar","uso","usar","instalo","instalar","reparo","reparar","recomiendo","recomendar","dime","decir","muestra","mostrar","comparo","comparar","explico","explicar"],stopwords:["el","la","los","las","un","una","unos","unas","yo","me","mi","es","en","a","al","para","de","del","y","e","o","u","pero","no","as\xED","si","por","con","desde","que","este","esta","estos","estas","sobre"],support:["pedido","pedidos","paquete","env\xEDo","entrega","seguimiento","retrasado","tarde","perdido","faltante","cancelar","cancelaci\xF3n","modificar","devoluci\xF3n","devoluciones","cambio","reembolso","reemplazo","elegible","elegibilidad","garant\xEDa","da\xF1ado","roto","defectuoso","incorrecto","equivocado","contrase\xF1a","acceso","login","cuenta","bloqueada","bloqueado","verificaci\xF3n","otp","fidelidad","recompensas","puntos","promo","promoci\xF3n","cup\xF3n","descuento","regalo","env\xEDo","pago","facturaci\xF3n","cobrado","cargo","factura","recibo","rechazado","talla","tama\xF1o","ajuste","cuidado","inventario","disponibilidad","sostenibilidad","\xE9tica","carreras","privacidad","t\xE9rminos","agente","representante","soporte","humano","hablar","ayuda","api","fallo","servidor","t\xE9cnico","sitio","pago","app","atenci\xF3n al cliente","estado del pedido","devolver","empleo","trabajo"]},V={"en-gb":q,"en-us":q,"en-ca":q,"de-de":N,"fr-fr":D,"fr-ca":D,"it-it":I,"nl-nl":K,"es-es":E,"es-us":E},F="en-us",f=n=>{var e,o;return(o=V[(e=n==null?void 0:n.toLowerCase())!=null?e:F])!=null?o:V[F]};var z=n=>!/\w/.test(n),M=(n,e)=>{if(!e||e.length===0)return n;let o=new RegExp(`\\b(${e.join("|")})'(?=\\w)`,"gi");return n.replace(o,"$1' ")},X=(n,e)=>e?n.replace(/[\w']+/g,o=>{var t;return(t=e[o])!=null?t:o}):n,p=(n,e)=>{let o=f(e),t=M(n,o.elisionPrefixes);return X(t,o.contractions).split(/\s+/).filter(Boolean)},h=n=>{let e=[];for(let o of n.phrases){let t=o.split(/\s+/).filter(Boolean);if(t.length!==0){if(t.length===1){n.tokens.includes(t[0])&&e.push(o);continue}for(let s=0;s<=n.tokens.length-t.length;s++){let r=!0;for(let a=0;a<t.length;a++)if(n.tokens[s+a]!==t[a]){r=!1;break}if(r){e.push(o);break}}}}return e},J=n=>n.reduce((e,o)=>e+o.split(/\s+/).filter(Boolean).length,0);var L=(n,e)=>{if(!e.maxLength)return console.log(" checkLength \u2192 true (no maxLength configured)"),!0;let o=p(n).length,t=o<=e.maxLength;return console.log(` checkLength \u2192 ${t} (wordCount=${o} maxLength=${e.maxLength})`),t};var Y=(n,e)=>{var o;for(let t of(o=e.blackPunctSet)!=null?o:[])if(n.includes(t))return console.log(` punct "${t}" found in sentence \u2192 false (blacklisted)`),!1;return!0},Z=(n,e)=>{var t,s,r,a,c,u,d;if((t=e.blackWordSet)!=null&&t.has(n))return console.log(` word "${n}" \u2192 false (blacklisted)`),!1;if(((r=(s=e.whiteSet)==null?void 0:s.size)!=null?r:0)>0||((c=(a=e.whiteList)==null?void 0:a.length)!=null?c:0)>0){let l=!!((u=e.whiteSet)!=null&&u.has(n)||(d=e.whiteList)!=null&&d.some(i=>i.toLowerCase()===n));return console.log(` word "${n}" \u2192 ${l} (whitelist check)`),l}return console.log(` word "${n}" \u2192 true`),!0},O=(n,e)=>Y(n,e)&&p(n).every(o=>Z(o,e));var C=(n,e)=>{var W,$,j,R,P;let o=p(n,e.locale);if(o.length===0)return!0;let t=f(e.locale),s=(W=e.scoreQuestionWords)!=null?W:t.questions,r=($=e.scorePronouns)!=null?$:t.pronouns,a=(j=e.scoreCommonVerbs)!=null?j:t.commonVerbs,c=(R=e.scoreStopwords)!=null?R:t.stopwords,u=(P=e.scoreSupportWords)!=null?P:t.support,d=h({tokens:o,phrases:u});if(d.length>0)return console.log(` [A] support words: found [${d.join(", ")}] \u2192 conversational (override)`),!1;let l=0,i=0;o.length<=3?(l+=2,console.log(` [B] token count: word count=${o.length} \u22643 \u2192 keyword +2`)):o.length>=6?(i+=2,console.log(` [B] token count: word count=${o.length} \u22656 \u2192 conversational +2`)):console.log(` [B] token count: word count=${o.length} (no score)`);let m=h({tokens:o,phrases:s});m.length>0?(i+=2,console.log(` [C] question words: found [${m.join(", ")}] \u2192 conversational +2`)):console.log(" [C] question words: none");let g=h({tokens:o,phrases:r});g.length>0?(i+=1,console.log(` [D] pronouns: found [${g.join(", ")}] \u2192 conversational +1`)):console.log(" [D] pronouns: none");let S=h({tokens:o,phrases:a});S.length>0?(i+=1,console.log(` [E] common verbs: found [${S.join(", ")}] \u2192 conversational +1`)):console.log(" [E] common verbs: none"),n.includes("?")?(i+=3,console.log(" [F] question mark: found \u2192 conversational +3")):console.log(" [F] question mark: none");let w=J(h({tokens:o,phrases:c})),b=w/o.length;b>.4?(i+=2,console.log(` [G] stopword ratio: ${b.toFixed(2)} (${w}/${o.length}) >0.4 \u2192 conversational +2`)):(l+=1,console.log(` [G] stopword ratio: ${b.toFixed(2)} (${w}/${o.length}) \u22640.4 \u2192 keyword +1`));let k=o.reduce((_,Q)=>_+Q.length,0)/o.length;k>=6?(l+=1,console.log(` [H] avg token length: ${k.toFixed(2)} \u22656 \u2192 keyword +1`)):console.log(` [H] avg token length: ${k.toFixed(2)} (no score)`);let x=l>=i;return console.log(` scores: keyword=${l} conversational=${i} \u2192 ${x?"keyword":"conversational"}`),x};var v={},ee=async n=>{v={...n};let e=new Set,o=new Set,t=new Set;try{return await Promise.all([n.whiteListJson?fetch(n.whiteListJson).then(s=>s.json()).then(s=>{s.forEach(r=>t.add(r.toLowerCase()))}):null,n.blackListJson?fetch(n.blackListJson).then(s=>s.json()).then(s=>{s.forEach(r=>{let a=r.toLowerCase();z(a)?e.add(a):o.add(a)})}):null]),v={...v,blackJsonPunctSet:e,blackJsonWordSet:o,whiteSet:t},{success:!0}}catch(s){return{success:!1,error:s}}},oe=n=>{var o,t,s;let e={...v,...n!=null?n:{}};return e.blackPunctSet=new Set([...(o=e.blackJsonPunctSet)!=null?o:[]]),e.blackWordSet=new Set([...(t=e.blackJsonWordSet)!=null?t:[]]),(s=e.blackList)==null||s.forEach(r=>{var c,u;let a=r.toLowerCase();z(a)?(c=e.blackPunctSet)==null||c.add(a):(u=e.blackWordSet)==null||u.add(a)}),e.scoreQuestionWords&&(e.scoreQuestionWords=e.scoreQuestionWords.map(r=>r.toLowerCase())),e.scorePronouns&&(e.scorePronouns=e.scorePronouns.map(r=>r.toLowerCase())),e.scoreCommonVerbs&&(e.scoreCommonVerbs=e.scoreCommonVerbs.map(r=>r.toLowerCase())),e.scoreStopwords&&(e.scoreStopwords=e.scoreStopwords.map(r=>r.toLowerCase())),e.scoreSupportWords&&(e.scoreSupportWords=e.scoreSupportWords.map(r=>r.toLowerCase())),e},ne=(n,e)=>{var a,c,u,d,l,i,m,g;let o=oe(e),t=n.toLowerCase(),s=p(t);console.group(`[isSearch] "${n}" | mode=${o.mode} | tokens=[${s.join(", ")}]`),(o.mode==="mixed"||o.mode==="list")&&console.log(`lists: blackWordSet=${(c=(a=o.blackWordSet)==null?void 0:a.size)!=null?c:0} blackPunctSet=${(d=(u=o.blackPunctSet)==null?void 0:u.size)!=null?d:0} whiteSet=${(i=(l=o.whiteSet)==null?void 0:l.size)!=null?i:0} whiteList=${(g=(m=o.whiteList)==null?void 0:m.length)!=null?g:0}`);let r;return o.mode==="length"?r=L(t,o):o.mode==="mixed"?r=O(t,o)&&L(t,o):o.mode==="score"?r=C(t,o):r=C(t,o),console.log(`\u2192 Result: ${r}`),console.groupEnd(),r},te={setup:ee,isSearch:ne};return H(se);})();
1
+ "use strict";var tmp=(()=>{var y=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var A=(n,e)=>{for(var o in e)y(n,o,{get:e[o],enumerable:!0})},G=(n,e,o,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of B(e))!T.call(n,s)&&s!==o&&y(n,s,{get:()=>e[s],enumerable:!(t=U(e,s))||t.enumerable});return n};var H=n=>G(y({},"__esModule",{value:!0}),n);var se={};A(se,{clarityUtils:()=>te});var q={questions:["who","what","when","where","why","how","which","can","should","could","would","will","have","has","is","are","do","does","did"],pronouns:["i","me","my","mine","we","us","our","you","your","it","he","him","his","she","her","they","them","their"],commonVerbs:["is","are","was","were","do","does","did","have","need","want","look","help","know","think","make","create","find","get","buy","use","install","fix","recommend","tell","show","compare","explain"],stopwords:["the","a","an","i","me","my","is","it","in","on","at","to","for","of","and","or","but","not","so","if","by","with","from","that","this","about"],support:["order","package","shipment","tracking","delivery","delayed","late","lost","missing","cancel","modify","return","exchange","refund","replacement","eligible","eligibility","warranty","damaged","broken","defective","wrong","incorrect","password","login","account","locked","verification","otp","loyalty","rewards","reward","points","point","promo","promos","promotion","promotions","coupon","coupons","discount","discounts","gift","gifts","shipping","payment","payments","billing","charged","charge","invoice","receipt","declined","size","sizing","fit","care","stock","restock","availability","sustainability","ethics","careers","privacy","terms","agent","representative","support","human","talk","speak","help","api","failure","server","technical","website","checkout","app"],contractions:{"won't":"will not","can't":"cannot","don't":"do not","doesn't":"does not","didn't":"did not","isn't":"is not","aren't":"are not","wasn't":"was not","weren't":"were not","haven't":"have not","hasn't":"has not","hadn't":"had not","wouldn't":"would not","shouldn't":"should not","couldn't":"could not","what's":"what is","what're":"what are","how's":"how is","where's":"where is","who's":"who is","that's":"that is","there's":"there is","it's":"it is","i'm":"i am","i'd":"i would","i'll":"i will","i've":"i have","we're":"we are","we've":"we have","we'd":"we would","they're":"they are","they've":"they have","you're":"you are","you've":"you have","you'd":"you would"}},N={questions:["wer","was","wann","wo","warum","wieso","weshalb","wie","welche","welcher","welches","kann","kannst","k\xF6nnen","soll","sollte","k\xF6nnte","w\xFCrde","wird","hat","habe","haben","ist","sind","tust","tun"],pronouns:["ich","mich","mir","mein","meine","meiner","meinen","wir","uns","unser","unsere","du","dich","dir","dein","deine","sie","ihnen","er","ihn","ihm","sein","seine","ihr","ihre","es"],commonVerbs:["ist","sind","war","waren","tut","tun","tat","taten","hat","habe","haben","hatte","hatten","brauche","brauchen","m\xF6chte","m\xF6chten","will","willst","wollen","suche","suchen","hilf","helfen","wei\xDF","denke","denken","mache","machen","erstelle","erstellen","finde","finden","kaufe","kaufen","benutze","benutzen","installiere","installieren","repariere","reparieren","empfehle","empfehlen","sage","sagen","zeige","zeigen","vergleiche","vergleichen","erkl\xE4re","erkl\xE4ren"],stopwords:["der","die","das","den","dem","des","ein","eine","einen","einer","eines","ich","mich","mein","ist","es","in","an","auf","zu","f\xFCr","von","und","oder","aber","nicht","also","falls","mit","aus","dass","dieser","diese","dieses","\xFCber"],support:["bestellung","bestellungen","paket","sendung","versand","lieferung","tracking","verz\xF6gert","versp\xE4tet","verloren","fehlt","fehlend","stornieren","storno","\xE4ndern","r\xFCcksendung","r\xFCckgabe","retoure","umtausch","r\xFCckerstattung","erstattung","ersatz","berechtigt","anspruch","garantie","besch\xE4digt","kaputt","defekt","falsch","fehlerhaft","passwort","anmelden","login","konto","gesperrt","verifizierung","otp","treue","treueprogramm","pr\xE4mien","punkte","aktion","gutschein","rabatt","geschenk","geschenkkarte","versandkosten","zahlung","abrechnung","belastet","rechnung","beleg","quittung","abgelehnt","gr\xF6\xDFe","passform","pflege","lager","verf\xFCgbarkeit","nachhaltigkeit","ethik","karriere","datenschutz","bedingungen","agb","mitarbeiter","vertreter","support","mensch","sprechen","reden","hilfe","api","fehler","server","technisch","webseite","kasse","app","r\xFCckgabe","zur\xFCckgeben","bestellstatus","lieferstatus"]},D={questions:["qui","que","quoi","quand","o\xF9","pourquoi","comment","combien","quel","quelle","quels","quelles","peux","peut","peuvent","dois","doit","devrait","pourrait","aurait","sera","est","sont","fait","font","ai","as","a","avons","avez","ont"],pronouns:["je","moi","mon","ma","mes","mien","mienne","nous","notre","nos","n\xF4tre","tu","te","toi","ton","ta","tes","vous","votre","vos","il","lui","son","sa","ses","elle","ils","elles","leur","leurs"],commonVerbs:["est","sont","\xE9tait","\xE9taient","fait","font","faisait","ai","as","a","avons","avez","ont","avait","avaient","besoin","veux","veut","voulons","voulez","veulent","cherche","cherchons","cherchez","aide","aider","sais","sait","savez","savons","pense","pensons","pensez","fais","faisons","faites","cr\xE9e","cr\xE9er","trouve","trouver","ach\xE8te","acheter","utilise","utiliser","installe","installer","r\xE9pare","r\xE9parer","recommande","recommander","dis","dites","montre","montrer","compare","comparer","explique","expliquer"],stopwords:["le","la","les","un","une","des","du","au","aux","je","me","mon","est","il","elle","dans","sur","\xE0","pour","de","et","ou","mais","pas","donc","si","par","avec","depuis","que","ce","cette","ces"],support:["commande","commandes","colis","envoi","exp\xE9dition","livraison","suivi","retard\xE9","retard","perdu","manquant","annuler","annulation","modifier","retour","retours","\xE9change","remboursement","remplacement","\xE9ligible","\xE9ligibilit\xE9","garantie","endommag\xE9","cass\xE9","d\xE9fectueux","incorrect","erron\xE9","mot de passe","motdepasse","connexion","identifiant","compte","verrouill\xE9","v\xE9rification","otp","fid\xE9lit\xE9","r\xE9compenses","points","promo","promotion","coupon","remise","r\xE9duction","cadeau","paiement","facturation","factur\xE9","facture","re\xE7u","refus\xE9","taille","pointure","ajustement","entretien","stock","disponibilit\xE9","durabilit\xE9","\xE9thique","carri\xE8res","confidentialit\xE9","conditions","agent","repr\xE9sentant","support","humain","parler","aide","api","panne","serveur","technique","site","paiement","app","application","remboursement","retard","site web"],elisionPrefixes:["j","n","qu","l","d","c","m","t","s"]},I={questions:["chi","cosa","che","quando","dove","perch\xE9","perch\xE8","come","quanto","quanti","quante","quale","quali","posso","pu\xF2","possono","devo","deve","dovrebbe","potrebbe","vorrebbe","sar\xE0","ho","ha","hanno","\xE8","sono","fa","fanno","fai"],pronouns:["io","mi","me","mio","mia","miei","mie","noi","ci","nostro","nostra","nostri","nostre","tu","ti","te","tuo","tua","tuoi","tue","voi","vi","vostro","vostra","vostri","vostre","lui","lei","suo","sua","suoi","sue","loro"],commonVerbs:["\xE8","sono","era","erano","fa","fanno","faceva","ha","ho","hai","abbiamo","avete","hanno","aveva","avevano","bisogno","voglio","vuole","vogliamo","volete","vogliono","cerco","cerca","cerchiamo","cercate","aiuto","aiutare","so","sa","sappiamo","sapete","penso","pensa","pensiamo","faccio","facciamo","fate","creo","creare","trovo","trovare","compro","comprare","uso","usare","installo","installare","riparo","riparare","raccomando","raccomandare","dimmi","dire","mostra","mostrare","confronto","confrontare","spiego","spiegare"],stopwords:["il","lo","la","i","gli","le","un","uno","una","io","mi","mio","\xE8","in","su","a","per","di","da","e","ed","o","ma","non","cos\xEC","se","con","che","questo","questa","questi","queste"],support:["ordine","ordini","pacco","spedizione","consegna","tracciamento","ritardato","ritardo","perso","mancante","annullare","annullamento","modificare","reso","resi","cambio","rimborso","sostituzione","idoneo","idoneit\xE0","garanzia","danneggiato","rotto","difettoso","sbagliato","errato","password","accesso","login","account","bloccato","verifica","otp","fedelt\xE0","premi","punti","promozione","promo","coupon","sconto","regalo","pagamento","fatturazione","addebitato","fattura","ricevuta","rifiutato","taglia","misura","vestibilit\xE0","cura","scorta","disponibilit\xE0","sostenibilit\xE0","etica","carriere","privacy","termini","agente","rappresentante","supporto","umano","parlare","aiuto","api","guasto","server","tecnico","sito","checkout","app","assistenza","restituzione","stato ordine"],elisionPrefixes:["c","l","d","un","m","t","s","all","nell","dell","sull","quell"]},K={questions:["wie","wat","wanneer","waar","waarom","hoe","hoeveel","welke","welk","kan","kunt","kunnen","zou","zal","moet","heb","heeft","hebben","is","zijn","doe","doet","doen"],pronouns:["ik","mij","me","mijn","wij","we","ons","onze","jij","je","jou","jouw","u","uw","hij","hem","zijn","zij","ze","haar","hen","hun","het"],commonVerbs:["is","zijn","was","waren","doet","doe","doen","deed","deden","heb","heeft","hebben","had","hadden","nodig","wil","willen","wilde","zoek","zoeken","help","helpen","weet","weten","denk","denken","maak","maken","maakte","cre\xEBer","cre\xEBren","vind","vinden","vond","koop","kopen","gebruik","gebruiken","installeer","installeren","repareer","repareren","raad","aanraden","vertel","vertellen","toon","tonen","vergelijk","vergelijken","leg","uitleggen"],stopwords:["de","het","een","ik","mij","mijn","is","in","op","aan","naar","voor","van","en","of","maar","niet","dus","als","door","met","vanaf","dat","dit","deze","die","over"],support:["bestelling","bestellingen","pakket","zending","verzending","levering","tracking","vertraagd","laat","verloren","ontbrekend","annuleren","wijzigen","retour","retourneren","ruil","terugbetaling","restitutie","vervanging","geschikt","geschiktheid","garantie","beschadigd","kapot","defect","verkeerd","onjuist","wachtwoord","inloggen","login","account","geblokkeerd","verificatie","otp","loyaliteit","beloningen","punten","promo","promotie","kortingsbon","korting","cadeau","cadeaubon","verzending","betaling","facturering","gefactureerd","factuur","bonnetje","kassabon","geweigerd","maat","pasvorm","verzorging","voorraad","beschikbaarheid","duurzaamheid","ethiek","carri\xE8res","privacy","voorwaarden","medewerker","vertegenwoordiger","ondersteuning","mens","praten","spreken","hulp","api","storing","server","technisch","website","afrekenen","app","klantenservice","bestelstatus","terugsturen"]},E={questions:["qui\xE9n","quien","qu\xE9","que","cu\xE1ndo","cuando","d\xF3nde","donde","porqu\xE9","porque","c\xF3mo","como","cu\xE1l","cual","cu\xE1les","cuales","cu\xE1nto","cuanto","cu\xE1ntos","puedo","puede","pueden","podr\xEDa","deber\xEDa","ser\xEDa","ha","han","es","son","hace","hacen"],pronouns:["yo","me","m\xED","mi","m\xEDo","m\xEDa","m\xEDos","m\xEDas","nosotros","nosotras","nos","nuestro","nuestra","nuestros","nuestras","t\xFA","tu","te","ti","tuyo","tuya","tuyos","tuyas","usted","ustedes","vosotros","vosotras","vuestro","vuestra","\xE9l","ella","su","sus","suyo","suya","ellos","ellas","les","los","las","le","la","lo"],commonVerbs:["es","son","era","eran","est\xE1","est\xE1n","hace","hacen","hac\xEDa","ha","he","has","hemos","hab\xE9is","han","hab\xEDa","hab\xEDan","necesito","necesita","necesitamos","necesitan","quiero","quiere","queremos","quer\xE9is","quieren","busco","busca","buscamos","buscan","ayuda","ayudar","s\xE9","sabe","sabemos","saben","pienso","piensa","pensamos","hago","hacemos","creo","crear","encuentro","encontrar","compro","comprar","uso","usar","instalo","instalar","reparo","reparar","recomiendo","recomendar","dime","decir","muestra","mostrar","comparo","comparar","explico","explicar"],stopwords:["el","la","los","las","un","una","unos","unas","yo","me","mi","es","en","a","al","para","de","del","y","e","o","u","pero","no","as\xED","si","por","con","desde","que","este","esta","estos","estas","sobre"],support:["pedido","pedidos","paquete","env\xEDo","entrega","seguimiento","retrasado","tarde","perdido","faltante","cancelar","cancelaci\xF3n","modificar","devoluci\xF3n","devoluciones","cambio","reembolso","reemplazo","elegible","elegibilidad","garant\xEDa","da\xF1ado","roto","defectuoso","incorrecto","equivocado","contrase\xF1a","acceso","login","cuenta","bloqueada","bloqueado","verificaci\xF3n","otp","fidelidad","recompensas","puntos","promo","promoci\xF3n","cup\xF3n","descuento","regalo","env\xEDo","pago","facturaci\xF3n","cobrado","cargo","factura","recibo","rechazado","talla","tama\xF1o","ajuste","cuidado","inventario","disponibilidad","sostenibilidad","\xE9tica","carreras","privacidad","t\xE9rminos","agente","representante","soporte","humano","hablar","ayuda","api","fallo","servidor","t\xE9cnico","sitio","pago","app","atenci\xF3n al cliente","estado del pedido","devolver","empleo","trabajo"]},V={"en-gb":q,"en-us":q,"en-ca":q,"de-de":N,"fr-fr":D,"fr-ca":D,"it-it":I,"nl-nl":K,"es-es":E,"es-us":E},F="en-us",f=n=>{var e,o;return(o=V[(e=n==null?void 0:n.toLowerCase())!=null?e:F])!=null?o:V[F]};var z=n=>!/\w/.test(n),M=(n,e)=>{if(!e||e.length===0)return n;let o=new RegExp(`\\b(${e.join("|")})'(?=\\w)`,"gi");return n.replace(o,"$1' ")},X=(n,e)=>e?n.replace(/[\w']+/g,o=>{var t;return(t=e[o])!=null?t:o}):n,p=(n,e)=>{let o=f(e),t=M(n,o.elisionPrefixes);return X(t,o.contractions).split(/\s+/).filter(Boolean)},h=n=>{let e=[];for(let o of n.phrases){let t=o.split(/\s+/).filter(Boolean);if(t.length!==0){if(t.length===1){n.tokens.includes(t[0])&&e.push(o);continue}for(let s=0;s<=n.tokens.length-t.length;s++){let r=!0;for(let a=0;a<t.length;a++)if(n.tokens[s+a]!==t[a]){r=!1;break}if(r){e.push(o);break}}}}return e},J=n=>n.reduce((e,o)=>e+o.split(/\s+/).filter(Boolean).length,0);var L=(n,e)=>{if(!e.maxLength)return console.log(" checkLength \u2192 true (no maxLength configured)"),!0;let o=p(n).length,t=o<=e.maxLength;return console.log(` checkLength \u2192 ${t} (wordCount=${o} maxLength=${e.maxLength})`),t};var Y=(n,e)=>{var o;for(let t of(o=e.blackPunctSet)!=null?o:[])if(n.includes(t))return console.log(` punct "${t}" found in sentence \u2192 false (blacklisted)`),!1;return!0},Z=(n,e)=>{var t,s,r,a,c,u,d;if((t=e.blackWordSet)!=null&&t.has(n))return console.log(` word "${n}" \u2192 false (blacklisted)`),!1;if(((r=(s=e.whiteSet)==null?void 0:s.size)!=null?r:0)>0||((c=(a=e.whiteList)==null?void 0:a.length)!=null?c:0)>0){let l=!!((u=e.whiteSet)!=null&&u.has(n)||(d=e.whiteList)!=null&&d.some(i=>i.toLowerCase()===n));return console.log(` word "${n}" \u2192 ${l} (whitelist check)`),l}return console.log(` word "${n}" \u2192 true`),!0},O=(n,e)=>Y(n,e)&&p(n).every(o=>Z(o,e));var C=(n,e)=>{var W,$,j,R,P;let o=p(n,e.locale);if(o.length===0)return!0;let t=f(e.locale),s=(W=e.scoreQuestionWords)!=null?W:t.questions,r=($=e.scorePronouns)!=null?$:t.pronouns,a=(j=e.scoreCommonVerbs)!=null?j:t.commonVerbs,c=(R=e.scoreStopwords)!=null?R:t.stopwords,u=(P=e.scoreSupportWords)!=null?P:t.support,d=h({tokens:o,phrases:u});if(d.length>0)return console.log(` [A] support words: found [${d.join(", ")}] \u2192 conversational (override)`),!1;let l=0,i=0;o.length<=3?(l+=2,console.log(` [B] token count: word count=${o.length} \u22643 \u2192 keyword +2`)):o.length>=6?(i+=2,console.log(` [B] token count: word count=${o.length} \u22656 \u2192 conversational +2`)):console.log(` [B] token count: word count=${o.length} (no score)`);let m=h({tokens:o,phrases:s});m.length>0?(i+=2,console.log(` [C] question words: found [${m.join(", ")}] \u2192 conversational +2`)):console.log(" [C] question words: none");let g=h({tokens:o,phrases:r});g.length>0?(i+=1,console.log(` [D] pronouns: found [${g.join(", ")}] \u2192 conversational +1`)):console.log(" [D] pronouns: none");let S=h({tokens:o,phrases:a});S.length>0?(i+=1,console.log(` [E] common verbs: found [${S.join(", ")}] \u2192 conversational +1`)):console.log(" [E] common verbs: none"),n.includes("?")?(i+=3,console.log(" [F] question mark: found \u2192 conversational +3")):console.log(" [F] question mark: none");let v=J(h({tokens:o,phrases:c})),b=v/o.length;b>.4?(i+=2,console.log(` [G] stopword ratio: ${b.toFixed(2)} (${v}/${o.length}) >0.4 \u2192 conversational +2`)):(l+=1,console.log(` [G] stopword ratio: ${b.toFixed(2)} (${v}/${o.length}) \u22640.4 \u2192 keyword +1`));let k=o.reduce((_,Q)=>_+Q.length,0)/o.length;k>=6?(l+=1,console.log(` [H] avg token length: ${k.toFixed(2)} \u22656 \u2192 keyword +1`)):console.log(` [H] avg token length: ${k.toFixed(2)} (no score)`);let x=l>=i;return console.log(` scores: keyword=${l} conversational=${i} \u2192 ${x?"keyword":"conversational"}`),x};var w={},ee=async n=>{w={...n};let e=new Set,o=new Set,t=new Set;try{return await Promise.all([n.whiteListJson?fetch(n.whiteListJson).then(s=>s.json()).then(s=>{s.forEach(r=>t.add(r.toLowerCase()))}):null,n.blackListJson?fetch(n.blackListJson).then(s=>s.json()).then(s=>{s.forEach(r=>{let a=r.toLowerCase();z(a)?e.add(a):o.add(a)})}):null]),w={...w,blackJsonPunctSet:e,blackJsonWordSet:o,whiteSet:t},{success:!0}}catch(s){return{success:!1,error:s}}},oe=n=>{var o,t,s;let e={...w,...n!=null?n:{}};return e.blackPunctSet=new Set([...(o=e.blackJsonPunctSet)!=null?o:[]]),e.blackWordSet=new Set([...(t=e.blackJsonWordSet)!=null?t:[]]),(s=e.blackList)==null||s.forEach(r=>{var c,u;let a=r.toLowerCase();z(a)?(c=e.blackPunctSet)==null||c.add(a):(u=e.blackWordSet)==null||u.add(a)}),e.scoreQuestionWords&&(e.scoreQuestionWords=e.scoreQuestionWords.map(r=>r.toLowerCase())),e.scorePronouns&&(e.scorePronouns=e.scorePronouns.map(r=>r.toLowerCase())),e.scoreCommonVerbs&&(e.scoreCommonVerbs=e.scoreCommonVerbs.map(r=>r.toLowerCase())),e.scoreStopwords&&(e.scoreStopwords=e.scoreStopwords.map(r=>r.toLowerCase())),e.scoreSupportWords&&(e.scoreSupportWords=e.scoreSupportWords.map(r=>r.toLowerCase())),e},ne=(n,e)=>{var a,c,u,d,l,i,m,g;let o=oe(e),t=n.toLowerCase(),s=p(t);console.group(`[isSearch] "${n}" | mode=${o.mode} | tokens=[${s.join(", ")}] | locale=${o.locale}`),(o.mode==="mixed"||o.mode==="list")&&console.log(`lists: blackWordSet=${(c=(a=o.blackWordSet)==null?void 0:a.size)!=null?c:0} blackPunctSet=${(d=(u=o.blackPunctSet)==null?void 0:u.size)!=null?d:0} whiteSet=${(i=(l=o.whiteSet)==null?void 0:l.size)!=null?i:0} whiteList=${(g=(m=o.whiteList)==null?void 0:m.length)!=null?g:0}`);let r;return o.mode==="length"?r=L(t,o):o.mode==="mixed"?r=O(t,o)&&L(t,o):o.mode==="score"?r=C(t,o):r=C(t,o),console.log(`\u2192 Result: ${r}`),console.groupEnd(),r},te={setup:ee,isSearch:ne};return H(se);})();
2
2
  window.clarityUtils=tmp.clarityUtils;
package/dist/index.js CHANGED
@@ -161,14 +161,23 @@ var EN_WORDS = {
161
161
  // Loyalty / promos / gift cards
162
162
  "loyalty",
163
163
  "rewards",
164
+ "reward",
164
165
  "points",
166
+ "point",
165
167
  "promo",
168
+ "promos",
169
+ "promotion",
170
+ "promotions",
166
171
  "coupon",
172
+ "coupons",
167
173
  "discount",
174
+ "discounts",
168
175
  "gift",
176
+ "gifts",
169
177
  // Shipping / payments / billing
170
178
  "shipping",
171
179
  "payment",
180
+ "payments",
172
181
  "billing",
173
182
  "charged",
174
183
  "charge",
@@ -1738,7 +1747,7 @@ var isSearch = (value, config) => {
1738
1747
  const c = resolveConfig(config);
1739
1748
  const lower = value.toLowerCase();
1740
1749
  const tokens = tokenize(lower);
1741
- console.group(`[isSearch] "${value}" | mode=${c.mode} | tokens=[${tokens.join(", ")}]`);
1750
+ console.group(`[isSearch] "${value}" | mode=${c.mode} | tokens=[${tokens.join(", ")}] | locale=${c.locale}`);
1742
1751
  if (c.mode === "mixed" || c.mode === "list") {
1743
1752
  console.log(
1744
1753
  `lists: blackWordSet=${(_b = (_a = c.blackWordSet) == null ? void 0 : _a.size) != null ? _b : 0} blackPunctSet=${(_d = (_c = c.blackPunctSet) == null ? void 0 : _c.size) != null ? _d : 0} whiteSet=${(_f = (_e = c.whiteSet) == null ? void 0 : _e.size) != null ? _f : 0} whiteList=${(_h = (_g = c.whiteList) == null ? void 0 : _g.length) != null ? _h : 0}`
package/dist/index.js.map CHANGED
@@ -1 +1 @@
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"]}
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(', ')}] | locale=${c.locale}`)\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 'reward',\n 'points',\n 'point',\n 'promo',\n 'promos',\n 'promotion',\n 'promotions',\n 'coupon',\n 'coupons',\n 'discount',\n 'discounts',\n 'gift',\n 'gifts',\n\n // Shipping / payments / billing\n 'shipping',\n 'payment',\n 'payments',\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","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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ACR,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,UAAU;AAAA,IACV,SAAS;AAAA,EACX;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,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,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","names":["_a","_b"]}
package/dist/index.mjs CHANGED
@@ -135,14 +135,23 @@ var EN_WORDS = {
135
135
  // Loyalty / promos / gift cards
136
136
  "loyalty",
137
137
  "rewards",
138
+ "reward",
138
139
  "points",
140
+ "point",
139
141
  "promo",
142
+ "promos",
143
+ "promotion",
144
+ "promotions",
140
145
  "coupon",
146
+ "coupons",
141
147
  "discount",
148
+ "discounts",
142
149
  "gift",
150
+ "gifts",
143
151
  // Shipping / payments / billing
144
152
  "shipping",
145
153
  "payment",
154
+ "payments",
146
155
  "billing",
147
156
  "charged",
148
157
  "charge",
@@ -1712,7 +1721,7 @@ var isSearch = (value, config) => {
1712
1721
  const c = resolveConfig(config);
1713
1722
  const lower = value.toLowerCase();
1714
1723
  const tokens = tokenize(lower);
1715
- console.group(`[isSearch] "${value}" | mode=${c.mode} | tokens=[${tokens.join(", ")}]`);
1724
+ console.group(`[isSearch] "${value}" | mode=${c.mode} | tokens=[${tokens.join(", ")}] | locale=${c.locale}`);
1716
1725
  if (c.mode === "mixed" || c.mode === "list") {
1717
1726
  console.log(
1718
1727
  `lists: blackWordSet=${(_b = (_a = c.blackWordSet) == null ? void 0 : _a.size) != null ? _b : 0} blackPunctSet=${(_d = (_c = c.blackPunctSet) == null ? void 0 : _c.size) != null ? _d : 0} whiteSet=${(_f = (_e = c.whiteSet) == null ? void 0 : _e.size) != null ? _f : 0} whiteList=${(_h = (_g = c.whiteList) == null ? void 0 : _g.length) != null ? _h : 0}`
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/enums.ts","../src/utils.ts","../src/modes/length.ts","../src/modes/list.ts","../src/modes/score.ts","../src/index.ts"],"sourcesContent":["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","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"],"mappings":";AAaA,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,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,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,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,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;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,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,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,EACF;AAAA,EACA,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,WAAW;AAAA,IACX,UAAU;AAAA,IACV,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,UAAU;AAAA,IACV,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,UAAU;AAAA,IACV,SAAS;AAAA,EACX;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,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;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,I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","names":["_a","_b"]}
1
+ {"version":3,"sources":["../src/enums.ts","../src/utils.ts","../src/modes/length.ts","../src/modes/list.ts","../src/modes/score.ts","../src/index.ts"],"sourcesContent":["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 'reward',\n 'points',\n 'point',\n 'promo',\n 'promos',\n 'promotion',\n 'promotions',\n 'coupon',\n 'coupons',\n 'discount',\n 'discounts',\n 'gift',\n 'gifts',\n\n // Shipping / payments / billing\n 'shipping',\n 'payment',\n 'payments',\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","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","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(', ')}] | locale=${c.locale}`)\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"],"mappings":";AAaA,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,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,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,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,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;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,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,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,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,EACF;AAAA,EACA,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,WAAW;AAAA,IACX,UAAU;AAAA,IACV,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,UAAU;AAAA,IACV,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,UAAU;AAAA,IACV,SAAS;AAAA,EACX;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,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;A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","names":["_a","_b"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bloomreach/clarity-utils",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "Utility functions for Bloomreach Clarity integrations",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",