{"version":3,"file":"stop-words.cjs","sources":["../../../src/utils/stop-words.ts"],"sourcesContent":["/**\n * Stop Words Filtering\n * Common words that should be ignored in search queries\n */\n\n/**\n * Default stop words by language\n */\nexport const DEFAULT_STOP_WORDS: Record<string, string[]> = {\n  english: [\n    //\n    \"a\",\n    \"an\",\n    \"and\",\n    \"are\",\n    \"as\",\n    \"at\",\n    \"be\",\n    \"by\",\n    \"for\",\n    \"from\",\n    \"has\",\n    \"he\",\n    \"in\",\n    \"is\",\n    \"it\",\n    \"its\",\n    \"of\",\n    \"on\",\n    \"that\",\n    \"the\",\n    \"to\",\n    \"was\",\n    \"will\",\n    \"with\",\n    \"the\",\n    \"this\",\n    \"but\",\n    \"they\",\n    \"have\",\n    \"had\",\n    \"what\",\n    \"when\",\n    \"where\",\n    \"who\",\n    \"which\",\n    \"why\",\n    \"how\",\n  ],\n  german: [\n    //\n    \"der\",\n    \"die\",\n    \"das\",\n    \"den\",\n    \"dem\",\n    \"des\",\n    \"ein\",\n    \"eine\",\n    \"einer\",\n    \"eines\",\n    \"einem\",\n    \"einen\",\n    \"und\",\n    \"oder\",\n    \"aber\",\n    \"ist\",\n    \"sind\",\n    \"war\",\n    \"waren\",\n    \"hat\",\n    \"haben\",\n    \"wird\",\n    \"werden\",\n    \"von\",\n    \"zu\",\n    \"im\",\n    \"am\",\n    \"um\",\n    \"auf\",\n    \"für\",\n    \"mit\",\n    \"nach\",\n    \"bei\",\n    \"aus\",\n  ],\n  spanish: [\n    //\n    \"el\",\n    \"la\",\n    \"los\",\n    \"las\",\n    \"un\",\n    \"una\",\n    \"unos\",\n    \"unas\",\n    \"de\",\n    \"del\",\n    \"y\",\n    \"o\",\n    \"pero\",\n    \"es\",\n    \"son\",\n    \"era\",\n    \"fueron\",\n    \"ha\",\n    \"han\",\n    \"en\",\n    \"a\",\n    \"al\",\n    \"con\",\n    \"por\",\n    \"para\",\n    \"sin\",\n    \"sobre\",\n    \"entre\",\n  ],\n  french: [\n    //\n    \"le\",\n    \"la\",\n    \"les\",\n    \"un\",\n    \"une\",\n    \"des\",\n    \"du\",\n    \"de\",\n    \"et\",\n    \"ou\",\n    \"mais\",\n    \"est\",\n    \"sont\",\n    \"était\",\n    \"étaient\",\n    \"a\",\n    \"ont\",\n    \"à\",\n    \"au\",\n    \"aux\",\n    \"avec\",\n    \"pour\",\n    \"par\",\n    \"dans\",\n    \"sur\",\n    \"sous\",\n    \"entre\",\n  ],\n};\n\n/**\n * Filter stop words from a query\n */\nexport function filterStopWords(\n  query: string,\n  stopWords: string[] | Set<string>\n): string {\n  const stopWordsSet = stopWords instanceof Set ? stopWords : new Set(stopWords.map(w => w.toLowerCase()));\n  \n  // Split query into words, preserving original case\n  const words = query.split(/\\s+/);\n  const filtered = words.filter(word => !stopWordsSet.has(word.toLowerCase()));\n  \n  // If all words are stop words, return original query to avoid empty search\n  if (filtered.length === 0) {\n    return query;\n  }\n  \n  return filtered.join(' ');\n}\n\n/**\n * Get stop words for specific languages\n */\nexport function getStopWordsForLanguages(languages: string[]): Set<string> {\n  const stopWords = new Set<string>();\n\n  for (const lang of languages) {\n    const langStopWords = DEFAULT_STOP_WORDS[lang.toLowerCase()];\n    if (langStopWords) {\n      langStopWords.forEach((word) => stopWords.add(word));\n    }\n  }\n\n  return stopWords;\n}\n\n/**\n * Check if a word is a stop word\n */\nexport function isStopWord(word: string, stopWords: string[] | Set<string>): boolean {\n  const stopWordsSet = stopWords instanceof Set ? stopWords : new Set(stopWords.map((w) => w.toLowerCase()));\n  return stopWordsSet.has(word.toLowerCase());\n}\n"],"names":[],"mappings":"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"}