@lokascript/vite-plugin 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/language-keywords.ts","../src/scanner.ts","../src/aggregator.ts","../src/generator.ts","../src/semantic-integration.ts","../src/compiler.ts","../src/compiled-generator.ts","../src/html-transformer.ts","../src/index.ts"],"sourcesContent":["/**\n * Language Keywords for Detection\n *\n * Maps of keywords for each of the 21 supported languages.\n * Used by the scanner to detect which languages are used in hyperscript templates.\n *\n * Note: These are a representative subset of keywords - enough to reliably\n * detect language usage without including every possible keyword variant.\n */\n\nimport type { CustomLanguageKeywords } from './types';\n\n/**\n * All supported language codes.\n */\nexport const SUPPORTED_LANGUAGES = [\n 'en',\n 'es',\n 'pt',\n 'fr',\n 'de',\n 'it',\n 'vi', // Western (Latin script)\n 'pl',\n 'ru',\n 'uk', // Slavic (Latin/Cyrillic)\n 'ja',\n 'zh',\n 'ko', // East Asian\n 'ar', // RTL (Arabic script)\n 'hi',\n 'bn', // South Asian (Indic scripts)\n 'th', // Southeast Asian (Thai script)\n 'tr', // Agglutinative Latin\n 'id',\n 'sw',\n 'qu', // Other\n 'tl', // Tagalog (auto-added)\n] as const;\n\nexport type SupportedLanguage = (typeof SUPPORTED_LANGUAGES)[number];\n\n/**\n * Regional bundle mappings.\n */\nexport const REGIONS = {\n western: ['en', 'es', 'pt', 'fr', 'de', 'it'] as SupportedLanguage[],\n 'east-asian': ['ja', 'zh', 'ko'] as SupportedLanguage[],\n slavic: ['pl', 'ru', 'uk'] as SupportedLanguage[],\n 'south-asian': ['hi', 'bn'] as SupportedLanguage[],\n priority: [\n 'en',\n 'es',\n 'pt',\n 'fr',\n 'de',\n 'it',\n 'ja',\n 'zh',\n 'ko',\n 'ar',\n 'tr',\n 'ru',\n 'hi',\n ] as SupportedLanguage[],\n all: SUPPORTED_LANGUAGES as unknown as SupportedLanguage[],\n};\n\n/**\n * Japanese keywords (hiragana, katakana, kanji).\n * Unique script makes detection straightforward.\n */\nexport const JAPANESE_KEYWORDS = new Set([\n '切り替え',\n '切り替える',\n 'トグル',\n 'トグルする',\n '追加',\n '追加する',\n '加える',\n '削除',\n '削除する',\n '取り除く',\n '表示',\n '表示する',\n '見せる',\n '隠す',\n '非表示',\n '非表示にする',\n '設定',\n '設定する',\n 'セット',\n '増加',\n '増やす',\n 'インクリメント',\n '減少',\n '減らす',\n 'デクリメント',\n '引き金',\n '発火',\n 'トリガー',\n '送る',\n '送信',\n 'もし',\n '条件',\n 'そうでなければ',\n 'それ以外',\n '繰り返し',\n '繰り返す',\n 'リピート',\n '待つ',\n '待機',\n 'の間',\n '間',\n]);\n\n/**\n * Korean keywords (Hangul).\n * Unique script makes detection straightforward.\n */\nexport const KOREAN_KEYWORDS = new Set([\n '토글',\n '전환',\n '추가',\n '제거',\n '삭제',\n '보이다',\n '표시',\n '보이기',\n '숨기다',\n '숨기기',\n '설정',\n '증가',\n '감소',\n '트리거',\n '보내다',\n '만약',\n '아니면',\n '반복',\n '대기',\n '동안',\n]);\n\n/**\n * Chinese keywords (CJK characters).\n * Note: Some overlap with Japanese kanji, but context usually distinguishes.\n */\nexport const CHINESE_KEYWORDS = new Set([\n '切换',\n '添加',\n '加',\n '移除',\n '删除',\n '去掉',\n '显示',\n '展示',\n '隐藏',\n '设置',\n '设定',\n '增加',\n '减少',\n '触发',\n '发送',\n '如果',\n '否则',\n '重复',\n '等待',\n '当',\n]);\n\n/**\n * Arabic keywords (Arabic script).\n * RTL script makes detection straightforward.\n */\nexport const ARABIC_KEYWORDS = new Set([\n 'بدل',\n 'بدّل',\n 'غيّر',\n 'غير',\n 'أضف',\n 'اضف',\n 'زِد',\n 'احذف',\n 'أزل',\n 'امسح',\n 'اظهر',\n 'أظهر',\n 'اعرض',\n 'اخف',\n 'أخفِ',\n 'اخفي',\n 'اضبط',\n 'عيّن',\n 'حدد',\n 'ارفع',\n 'أنقص',\n 'قلل',\n 'تشغيل',\n 'أطلق',\n 'فعّل',\n 'أرسل',\n 'إذا',\n 'وإلا',\n 'خلاف ذلك',\n 'كرر',\n 'انتظر',\n 'بينما',\n]);\n\n/**\n * Spanish keywords (Latin script with accents).\n * Distinguished by specific Spanish words.\n */\nexport const SPANISH_KEYWORDS = new Set([\n 'alternar',\n 'cambiar',\n 'conmutar',\n 'agregar',\n 'añadir',\n 'quitar',\n 'eliminar',\n 'remover',\n 'sacar',\n 'mostrar',\n 'enseñar',\n 'ocultar',\n 'esconder',\n 'establecer',\n 'fijar',\n 'definir',\n 'incrementar',\n 'aumentar',\n 'decrementar',\n 'disminuir',\n 'disparar',\n 'activar',\n 'enviar',\n 'si',\n 'sino',\n 'de lo contrario',\n 'repetir',\n 'esperar',\n 'mientras',\n]);\n\n/**\n * Portuguese keywords (Latin script with accents).\n * Distinguished by specific Portuguese words.\n */\nexport const PORTUGUESE_KEYWORDS = new Set([\n 'alternar',\n 'trocar',\n 'adicionar',\n 'acrescentar',\n 'remover',\n 'eliminar',\n 'apagar',\n 'mostrar',\n 'exibir',\n 'ocultar',\n 'esconder',\n 'definir',\n 'configurar',\n 'incrementar',\n 'aumentar',\n 'decrementar',\n 'diminuir',\n 'disparar',\n 'ativar',\n 'enviar',\n 'se',\n 'senão',\n 'repetir',\n 'esperar',\n 'aguardar',\n 'enquanto',\n]);\n\n/**\n * French keywords (Latin script with accents).\n * Distinguished by specific French words.\n */\nexport const FRENCH_KEYWORDS = new Set([\n 'basculer',\n 'permuter',\n 'alterner',\n 'ajouter',\n 'supprimer',\n 'enlever',\n 'retirer',\n 'montrer',\n 'afficher',\n 'cacher',\n 'masquer',\n 'définir',\n 'établir',\n 'incrémenter',\n 'augmenter',\n 'décrémenter',\n 'diminuer',\n 'déclencher',\n 'envoyer',\n 'si',\n 'sinon',\n 'répéter',\n 'attendre',\n 'pendant',\n]);\n\n/**\n * German keywords (Latin script with umlauts).\n * Distinguished by specific German words.\n */\nexport const GERMAN_KEYWORDS = new Set([\n 'umschalten',\n 'wechseln',\n 'hinzufügen',\n 'entfernen',\n 'löschen',\n 'zeigen',\n 'anzeigen',\n 'verbergen',\n 'verstecken',\n 'festlegen',\n 'definieren',\n 'erhöhen',\n 'verringern',\n 'vermindern',\n 'auslösen',\n 'senden',\n 'schicken',\n 'wenn',\n 'falls',\n 'sonst',\n 'ansonsten',\n 'wiederholen',\n 'warten',\n 'solange',\n 'während',\n]);\n\n/**\n * Turkish keywords (Latin script with special chars).\n * Distinguished by Turkish-specific characters and words.\n */\nexport const TURKISH_KEYWORDS = new Set([\n 'değiştir',\n 'aç/kapat',\n 'ekle',\n 'kaldır',\n 'sil',\n 'göster',\n 'gizle',\n 'ayarla',\n 'yap',\n 'belirle',\n 'artır',\n 'azalt',\n 'tetikle',\n 'gönder',\n 'eğer',\n 'yoksa',\n 'tekrarla',\n 'bekle',\n 'iken',\n]);\n\n/**\n * Indonesian keywords (Latin script).\n * Distinguished by specific Indonesian words.\n */\nexport const INDONESIAN_KEYWORDS = new Set([\n 'alihkan',\n 'ganti',\n 'tukar',\n 'tambah',\n 'tambahkan',\n 'hapus',\n 'buang',\n 'hilangkan',\n 'tampilkan',\n 'perlihatkan',\n 'sembunyikan',\n 'tutup',\n 'atur',\n 'tetapkan',\n 'tingkatkan',\n 'naikkan',\n 'turunkan',\n 'kurangi',\n 'picu',\n 'jalankan',\n 'kirim',\n 'kirimkan',\n 'jika',\n 'kalau',\n 'bila',\n 'selainnya',\n 'ulangi',\n 'tunggu',\n 'selama',\n]);\n\n/**\n * Swahili keywords (Latin script).\n * Distinguished by specific Swahili words.\n */\nexport const SWAHILI_KEYWORDS = new Set([\n 'badilisha',\n 'geuza',\n 'ongeza',\n 'weka',\n 'ondoa',\n 'futa',\n 'toa',\n 'onyesha',\n 'ficha',\n 'mficho',\n 'seti',\n 'punguza',\n 'chochea',\n 'anzisha',\n 'tuma',\n 'peleka',\n 'kama',\n 'ikiwa',\n 'vinginevyo',\n 'sivyo',\n 'rudia',\n 'subiri',\n 'ngoja',\n 'wakati',\n]);\n\n/**\n * Quechua keywords (Latin script).\n * Distinguished by specific Quechua words.\n */\nexport const QUECHUA_KEYWORDS = new Set([\n 't',\n 'tikray',\n 'kutichiy',\n 'yapay',\n 'yapaykuy',\n 'qichuy',\n 'hurquy',\n 'anchuchiy',\n 'rikuchiy',\n 'qawachiy',\n 'pakay',\n 'pakakuy',\n 'churay',\n 'kamaykuy',\n 'yapachiy',\n 'pisiyachiy',\n 'qallarichiy',\n 'kachay',\n 'apachiy',\n 'sichus',\n 'manachus',\n 'hukniraq',\n 'kutipay',\n 'muyu',\n 'suyay',\n 'kaykamaqa',\n]);\n\n/**\n * Italian keywords (Latin script).\n * Distinguished by specific Italian words.\n */\nexport const ITALIAN_KEYWORDS = new Set([\n 'commutare',\n 'alternare',\n 'cambiare',\n 'aggiungere',\n 'aggiungi',\n 'rimuovere',\n 'eliminare',\n 'togliere',\n 'mostrare',\n 'visualizzare',\n 'nascondere',\n 'impostare',\n 'definire',\n 'incrementare',\n 'aumentare',\n 'decrementare',\n 'diminuire',\n 'scatenare',\n 'attivare',\n 'inviare',\n 'se',\n 'altrimenti',\n 'ripetere',\n 'aspettare',\n 'attendere',\n 'mentre',\n]);\n\n/**\n * Vietnamese keywords (Latin script with diacritics).\n * Distinguished by Vietnamese-specific diacritics and words.\n */\nexport const VIETNAMESE_KEYWORDS = new Set([\n 'chuyển đổi',\n 'bật tắt',\n 'chuyển',\n 'thêm',\n 'bổ sung',\n 'xóa',\n 'gỡ bỏ',\n 'loại bỏ',\n 'bỏ',\n 'hiển thị',\n 'hiện',\n 'ẩn',\n 'che',\n 'giấu',\n 'gán',\n 'thiết lập',\n 'đặt',\n 'tăng',\n 'tăng lên',\n 'giảm',\n 'giảm đi',\n 'kích hoạt',\n 'gửi',\n 'nếu',\n 'không thì',\n 'nếu không',\n 'lặp lại',\n 'chờ',\n 'đợi',\n 'trong khi',\n]);\n\n/**\n * Polish keywords (Latin script).\n * Distinguished by Polish-specific characters and words.\n */\nexport const POLISH_KEYWORDS = new Set([\n 'przełącz',\n 'przelacz',\n 'dodaj',\n 'usuń',\n 'usun',\n 'wyczyść',\n 'wyczysc',\n 'pokaż',\n 'pokaz',\n 'wyświetl',\n 'wyswietl',\n 'ukryj',\n 'schowaj',\n 'ustaw',\n 'określ',\n 'okresl',\n 'zwiększ',\n 'zwieksz',\n 'zmniejsz',\n 'wywołaj',\n 'wywolaj',\n 'wyzwól',\n 'wyzwol',\n 'wyślij',\n 'wyslij',\n 'jeśli',\n 'jesli',\n 'jeżeli',\n 'jezeli',\n 'inaczej',\n 'wpp',\n 'powtórz',\n 'powtorz',\n 'czekaj',\n 'poczekaj',\n 'dopóki',\n 'dopoki',\n 'podczas',\n]);\n\n/**\n * Russian keywords (Cyrillic script).\n * Unique script makes detection straightforward.\n */\nexport const RUSSIAN_KEYWORDS = new Set([\n 'переключить',\n 'переключи',\n 'добавить',\n 'добавь',\n 'удалить',\n 'удали',\n 'убрать',\n 'убери',\n 'показать',\n 'покажи',\n 'скрыть',\n 'скрой',\n 'спрятать',\n 'спрячь',\n 'установить',\n 'установи',\n 'задать',\n 'задай',\n 'увеличить',\n 'увеличь',\n 'уменьшить',\n 'уменьши',\n 'вызвать',\n 'вызови',\n 'отправить',\n 'отправь',\n 'если',\n 'иначе',\n 'повторить',\n 'повтори',\n 'ждать',\n 'жди',\n 'подожди',\n 'пока',\n]);\n\n/**\n * Ukrainian keywords (Cyrillic script).\n * Unique script makes detection straightforward.\n */\nexport const UKRAINIAN_KEYWORDS = new Set([\n 'перемкнути',\n 'перемкни',\n 'додати',\n 'додай',\n 'видалити',\n 'видали',\n 'прибрати',\n 'прибери',\n 'показати',\n 'покажи',\n 'сховати',\n 'сховай',\n 'приховати',\n 'приховай',\n 'встановити',\n 'встанови',\n 'задати',\n 'задай',\n 'збільшити',\n 'збільш',\n 'зменшити',\n 'зменш',\n 'викликати',\n 'виклич',\n 'надіслати',\n 'надішли',\n 'якщо',\n 'інакше',\n 'повторити',\n 'повтори',\n 'чекати',\n 'чекай',\n 'зачекай',\n 'поки',\n]);\n\n/**\n * Hindi keywords (Devanagari script).\n * Unique script makes detection straightforward.\n */\nexport const HINDI_KEYWORDS = new Set([\n 'टॉगल',\n 'बदलें',\n 'बदल',\n 'जोड़ें',\n 'जोड़',\n 'हटाएं',\n 'हटा',\n 'मिटाएं',\n 'दिखाएं',\n 'दिखा',\n 'छिपाएं',\n 'छिपा',\n 'सेट',\n 'निर्धारित',\n 'बढ़ाएं',\n 'बढ़ा',\n 'घटाएं',\n 'घटा',\n 'ट्रिगर',\n 'भेजें',\n 'भेज',\n 'अगर',\n 'यदि',\n 'वरना',\n 'नहीं तो',\n 'दोहराएं',\n 'दोहरा',\n 'प्रतीक्षा',\n 'रुकें',\n 'जब तक',\n]);\n\n/**\n * Bengali keywords (Bengali script).\n * Unique script makes detection straightforward.\n */\nexport const BENGALI_KEYWORDS = new Set([\n 'টগল',\n 'পরিবর্তন',\n 'যোগ',\n 'যোগ করুন',\n 'সরান',\n 'সরিয়ে ফেলুন',\n 'মুছুন',\n 'দেখান',\n 'দেখাও',\n 'লুকান',\n 'লুকাও',\n 'সেট',\n 'নির্ধারণ',\n 'বৃদ্ধি',\n 'বাড়ান',\n 'হ্রাস',\n 'কমান',\n 'ট্রিগার',\n 'পাঠান',\n 'পাঠাও',\n 'যদি',\n 'নতুবা',\n 'না হলে',\n 'পুনরাবৃত্তি',\n 'বার বার',\n 'অপেক্ষা',\n 'থামুন',\n 'যতক্ষণ',\n]);\n\n/**\n * Thai keywords (Thai script).\n * Unique script makes detection straightforward.\n */\nexport const THAI_KEYWORDS = new Set([\n 'สลับ',\n 'เพิ่ม',\n 'ลบ',\n 'ลบออก',\n 'แสดง',\n 'ซ่อน',\n 'ตั้ง',\n 'กำหนด',\n 'เพิ่มค่า',\n 'ลดค่า',\n 'ทริกเกอร์',\n 'ส่ง',\n 'ถ้า',\n 'หาก',\n 'ไม่งั้น',\n 'ไม่เช่นนั้น',\n 'ทำซ้ำ',\n 'รอ',\n 'ในขณะที่',\n]);\n\n/**\n * Tagalog keywords (Latin script).\n * TODO: Fill in keywords after completing the semantic profile.\n * Run 'npm run sync-keywords' to auto-populate from profile.\n */\nexport const TL_KEYWORDS = new Set([\n 'palitan',\n 'itoggle',\n 'idagdag',\n 'magdagdag',\n 'alisin',\n 'tanggalin',\n 'ipakita',\n 'magpakita',\n 'itago',\n 'magtago',\n 'itakda',\n 'magtakda',\n 'dagdagan',\n 'taasan',\n 'bawasan',\n 'ibaba',\n 'magpatugtog',\n 'ipadala',\n 'magpadala',\n 'kung',\n 'kapag',\n 'kung_hindi',\n 'kundi',\n 'ulitin',\n 'paulit-ulit',\n 'maghintay',\n 'hintay',\n 'habang',\n]);\n\n/**\n * Map of language code to keyword set.\n */\nexport const LANGUAGE_KEYWORDS: Record<SupportedLanguage, Set<string>> = {\n en: new Set(), // English is the default, no detection needed\n ja: JAPANESE_KEYWORDS,\n ko: KOREAN_KEYWORDS,\n zh: CHINESE_KEYWORDS,\n ar: ARABIC_KEYWORDS,\n es: SPANISH_KEYWORDS,\n pt: PORTUGUESE_KEYWORDS,\n fr: FRENCH_KEYWORDS,\n de: GERMAN_KEYWORDS,\n it: ITALIAN_KEYWORDS,\n vi: VIETNAMESE_KEYWORDS,\n pl: POLISH_KEYWORDS,\n ru: RUSSIAN_KEYWORDS,\n uk: UKRAINIAN_KEYWORDS,\n hi: HINDI_KEYWORDS,\n bn: BENGALI_KEYWORDS,\n th: THAI_KEYWORDS,\n tr: TURKISH_KEYWORDS,\n id: INDONESIAN_KEYWORDS,\n sw: SWAHILI_KEYWORDS,\n qu: QUECHUA_KEYWORDS,\n tl: TL_KEYWORDS,\n};\n\n/**\n * Check if a script contains keywords from a specific language.\n * Returns true if any keyword from the language is found.\n *\n * Uses word boundary matching to avoid false positives from short keywords.\n * For non-Latin scripts (CJK, Arabic, etc.), simple includes is sufficient\n * since these characters don't appear in English/ASCII.\n */\nexport function containsLanguageKeywords(script: string, language: SupportedLanguage): boolean {\n const keywords = LANGUAGE_KEYWORDS[language];\n if (!keywords || keywords.size === 0) return false;\n\n // Non-Latin scripts can use simple includes (no risk of false positives)\n // Includes: CJK (ja, ko, zh), Arabic (ar), Cyrillic (ru, uk), Indic (hi, bn), Thai (th)\n const nonLatinLangs: SupportedLanguage[] = ['ja', 'ko', 'zh', 'ar', 'ru', 'uk', 'hi', 'bn', 'th'];\n if (nonLatinLangs.includes(language)) {\n for (const keyword of keywords) {\n if (script.includes(keyword)) {\n return true;\n }\n }\n return false;\n }\n\n // Latin-script languages need word boundary matching to avoid false positives\n // from short keywords like 'es', 'o', 'si', etc.\n const lowerScript = script.toLowerCase();\n for (const keyword of keywords) {\n // Skip very short keywords (2 chars or less) - too many false positives\n if (keyword.length <= 2) continue;\n\n // Use word boundary matching\n const pattern = new RegExp(`\\\\b${escapeRegExp(keyword.toLowerCase())}\\\\b`);\n if (pattern.test(lowerScript)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Escape special regex characters in a string.\n */\nfunction escapeRegExp(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Detect all languages used in a hyperscript string.\n * Returns a Set of language codes found.\n *\n * Note: English is never detected (it's the default).\n * Only non-English languages are detected.\n */\nexport function detectLanguages(script: string): Set<SupportedLanguage> {\n const detected = new Set<SupportedLanguage>();\n\n for (const lang of SUPPORTED_LANGUAGES) {\n if (lang === 'en') continue; // Skip English\n\n if (containsLanguageKeywords(script, lang)) {\n detected.add(lang);\n }\n }\n\n return detected;\n}\n\n// =============================================================================\n// Custom Keywords Support\n// =============================================================================\n\n/**\n * Runtime keyword registry for custom/extended languages.\n * Use registerCustomKeywords() to add or extend language keywords.\n */\nconst customKeywordRegistry: Map<string, { keywords: Set<string>; isNonLatin: boolean }> =\n new Map();\n\n/**\n * Register custom keywords for a language.\n * Call this before scanning to add or extend language detection.\n *\n * @param code - Language code (e.g., 'es', 'my-lang')\n * @param config - Keyword configuration\n */\nexport function registerCustomKeywords(code: string, config: CustomLanguageKeywords): void {\n const existing = LANGUAGE_KEYWORDS[code as SupportedLanguage];\n const nonLatinLangs = ['ja', 'ko', 'zh', 'ar', 'ru', 'uk', 'hi', 'bn', 'th'];\n const isNonLatin = config.isNonLatin ?? nonLatinLangs.includes(code);\n\n if (config.extend && existing) {\n // Merge with existing keywords\n const merged = new Set([...existing, ...config.keywords]);\n customKeywordRegistry.set(code, { keywords: merged, isNonLatin });\n } else {\n // Replace or add new\n customKeywordRegistry.set(code, { keywords: config.keywords, isNonLatin });\n }\n}\n\n/**\n * Get keywords for a language, including custom registrations.\n */\nexport function getKeywordsForLanguage(code: string): Set<string> | undefined {\n const custom = customKeywordRegistry.get(code);\n if (custom) return custom.keywords;\n return LANGUAGE_KEYWORDS[code as SupportedLanguage];\n}\n\n/**\n * Check if a language uses non-Latin script.\n */\nexport function isNonLatinLanguage(code: string): boolean {\n const custom = customKeywordRegistry.get(code);\n if (custom) return custom.isNonLatin;\n const nonLatinLangs = ['ja', 'ko', 'zh', 'ar', 'ru', 'uk', 'hi', 'bn', 'th'];\n return nonLatinLangs.includes(code);\n}\n\n/**\n * Get all registered language codes (built-in + custom).\n */\nexport function getAllLanguageCodes(): string[] {\n const builtin = [...SUPPORTED_LANGUAGES];\n const custom = [...customKeywordRegistry.keys()];\n return [...new Set([...builtin, ...custom])];\n}\n\n/**\n * Clear all custom keyword registrations.\n */\nexport function clearCustomKeywords(): void {\n customKeywordRegistry.clear();\n}\n\n// =============================================================================\n// Region Detection\n// =============================================================================\n\n/**\n * Get the optimal regional bundle for a set of detected languages.\n * Returns the smallest bundle that covers all detected languages.\n */\nexport function getOptimalRegion(\n languages: Set<SupportedLanguage>\n): 'western' | 'east-asian' | 'slavic' | 'south-asian' | 'priority' | 'all' | null {\n if (languages.size === 0) return null;\n\n const langArray = [...languages];\n\n // Check if all languages fit in western bundle\n if (langArray.every(l => REGIONS.western.includes(l))) {\n return 'western';\n }\n\n // Check if all languages fit in east-asian bundle\n if (langArray.every(l => REGIONS['east-asian'].includes(l))) {\n return 'east-asian';\n }\n\n // Check if all languages fit in slavic bundle\n if (langArray.every(l => REGIONS.slavic.includes(l))) {\n return 'slavic';\n }\n\n // Check if all languages fit in south-asian bundle\n if (langArray.every(l => REGIONS['south-asian'].includes(l))) {\n return 'south-asian';\n }\n\n // Check if all languages fit in priority bundle\n if (langArray.every(l => REGIONS.priority.includes(l))) {\n return 'priority';\n }\n\n // Need full bundle\n return 'all';\n}\n","/**\n * Scanner\n *\n * Detects hyperscript usage in source files by scanning for _=\"...\" attributes.\n * Also detects non-English language keywords for multilingual semantic support.\n */\n\nimport type { FileUsage, HyperfixiPluginOptions } from './types';\nimport { detectLanguages } from './language-keywords';\n\n/**\n * Converts include/exclude options to RegExp\n */\nfunction toRegex(pattern: RegExp | string[] | undefined, defaultPattern: RegExp): RegExp {\n if (!pattern) return defaultPattern;\n if (pattern instanceof RegExp) return pattern;\n if (Array.isArray(pattern)) {\n const escaped = pattern.map(p => p.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'));\n return new RegExp(`(${escaped.join('|')})`);\n }\n return defaultPattern;\n}\n\n/**\n * Scanner class for detecting hyperscript usage in files\n */\nexport class Scanner {\n private include: RegExp;\n private exclude: RegExp;\n private debug: boolean;\n\n constructor(options: Pick<HyperfixiPluginOptions, 'include' | 'exclude' | 'debug'>) {\n this.include = toRegex(\n options.include,\n /\\.(html?|vue|svelte|jsx?|tsx?|astro|php|erb|ejs|hbs|handlebars)$/\n );\n this.exclude = toRegex(options.exclude, /node_modules|\\.git/);\n this.debug = options.debug ?? false;\n }\n\n /**\n * Check if a file should be scanned\n */\n shouldScan(id: string): boolean {\n return this.include.test(id) && !this.exclude.test(id);\n }\n\n /**\n * Scan code for hyperscript usage\n */\n scan(code: string, id: string): FileUsage {\n const usage: FileUsage = {\n commands: new Set(),\n blocks: new Set(),\n positional: false,\n detectedLanguages: new Set(),\n };\n\n // Find all hyperscript in _=\"...\" attributes (single, double, backtick quotes)\n const attrPatterns = [\n /_\\s*=\\s*\"([^\"]+)\"/g, // _=\"...\"\n /_\\s*=\\s*'([^']+)'/g, // _='...'\n /_\\s*=\\s*`([^`]+)`/g, // _=`...`\n /_=\\{`([^`]+)`\\}/g, // _={`...`} (JSX)\n /_=\\{['\"]([^'\"]+)['\"]\\}/g, // _={\"...\"} or _={'...'} (JSX)\n ];\n\n for (const pattern of attrPatterns) {\n let match;\n while ((match = pattern.exec(code))) {\n this.analyzeScript(match[1], usage);\n }\n }\n\n // Also check for hyperscript in script tags\n const scriptPattern = /<script[^>]*type=[\"']?text\\/hyperscript[\"']?[^>]*>([^<]+)<\\/script>/gi;\n let match;\n while ((match = scriptPattern.exec(code))) {\n this.analyzeScript(match[1], usage);\n }\n\n if (\n this.debug &&\n (usage.commands.size > 0 || usage.blocks.size > 0 || usage.detectedLanguages.size > 0)\n ) {\n console.log(`[hyperfixi] Scanned ${id}:`, {\n commands: [...usage.commands],\n blocks: [...usage.blocks],\n positional: usage.positional,\n languages: [...usage.detectedLanguages],\n });\n }\n\n return usage;\n }\n\n /**\n * Analyze a hyperscript snippet for commands, blocks, and expressions\n */\n private analyzeScript(script: string, usage: FileUsage): void {\n // Detect commands\n const commandPattern =\n /\\b(toggle|add|remove|removeClass|show|hide|set|get|put|append|take|increment|decrement|log|send|trigger|wait|transition|go|call|focus|blur|return)\\b/g;\n let match;\n while ((match = commandPattern.exec(script))) {\n usage.commands.add(match[1]);\n }\n\n // Detect blocks\n if (/\\bif\\b/.test(script)) usage.blocks.add('if');\n if (/\\bunless\\b/.test(script)) usage.blocks.add('if'); // unless uses same block as if\n // repeat pattern: handles literals, :localVars, $globalVars, and identifiers\n if (/\\brepeat\\s+(\\d+|:\\w+|\\$\\w+|[\\w.]+)\\s+times?\\b/i.test(script)) usage.blocks.add('repeat');\n if (/\\bfor\\s+(each|every)\\b/i.test(script)) usage.blocks.add('for');\n if (/\\bwhile\\b/.test(script)) usage.blocks.add('while');\n if (/\\bfetch\\b/.test(script)) usage.blocks.add('fetch');\n\n // Detect positional expressions\n if (/\\b(first|last|next|previous|closest|parent)\\b/.test(script)) {\n usage.positional = true;\n }\n\n // Detect non-English languages for multilingual semantic support\n const languages = detectLanguages(script);\n for (const lang of languages) {\n usage.detectedLanguages.add(lang);\n }\n }\n\n /**\n * Scan all files in a project directory\n * Used during production build to scan the entire codebase\n */\n async scanProject(dir: string): Promise<Map<string, FileUsage>> {\n const results = new Map<string, FileUsage>();\n\n try {\n const { glob } = await import('glob');\n const fs = await import('fs');\n\n const files = await glob('**/*.{html,htm,vue,svelte,js,jsx,ts,tsx,astro,php,erb,ejs,hbs}', {\n cwd: dir,\n ignore: ['node_modules/**', 'dist/**', '.git/**'],\n absolute: true,\n });\n\n for (const file of files) {\n if (this.shouldScan(file)) {\n try {\n const code = fs.readFileSync(file, 'utf-8');\n const usage = this.scan(code, file);\n if (\n usage.commands.size > 0 ||\n usage.blocks.size > 0 ||\n usage.positional ||\n usage.detectedLanguages.size > 0\n ) {\n results.set(file, usage);\n }\n } catch {\n // Skip files that can't be read\n }\n }\n }\n } catch (error) {\n console.warn('[hyperfixi] Error scanning project:', error);\n }\n\n return results;\n }\n}\n","/**\n * Aggregator\n *\n * Collects and aggregates hyperscript usage across all scanned files.\n */\n\nimport type { FileUsage, AggregatedUsage } from './types';\n\n/**\n * Aggregator class for collecting usage across files\n */\nexport class Aggregator {\n private fileUsage: Map<string, FileUsage> = new Map();\n private cachedUsage: AggregatedUsage | null = null;\n\n /**\n * Add or update usage for a file\n * @returns true if the overall usage changed\n */\n add(filePath: string, usage: FileUsage): boolean {\n const existing = this.fileUsage.get(filePath);\n\n // Check if anything changed\n if (existing) {\n const commandsEqual = this.setsEqual(existing.commands, usage.commands);\n const blocksEqual = this.setsEqual(existing.blocks, usage.blocks);\n const positionalEqual = existing.positional === usage.positional;\n const languagesEqual = this.setsEqual(existing.detectedLanguages, usage.detectedLanguages);\n\n if (commandsEqual && blocksEqual && positionalEqual && languagesEqual) {\n return false; // No change\n }\n }\n\n // Update file usage\n this.fileUsage.set(filePath, usage);\n this.cachedUsage = null; // Invalidate cache\n\n return true;\n }\n\n /**\n * Remove a file from tracking (e.g., when deleted)\n * @returns true if the overall usage changed\n */\n remove(filePath: string): boolean {\n const existed = this.fileUsage.delete(filePath);\n if (existed) {\n this.cachedUsage = null;\n }\n return existed;\n }\n\n /**\n * Get aggregated usage across all files\n */\n getUsage(): AggregatedUsage {\n if (this.cachedUsage) {\n return this.cachedUsage;\n }\n\n const commands = new Set<string>();\n const blocks = new Set<string>();\n const detectedLanguages = new Set<string>();\n let positional = false;\n\n for (const usage of this.fileUsage.values()) {\n for (const cmd of usage.commands) commands.add(cmd);\n for (const block of usage.blocks) blocks.add(block);\n for (const lang of usage.detectedLanguages) detectedLanguages.add(lang);\n if (usage.positional) positional = true;\n }\n\n this.cachedUsage = {\n commands,\n blocks,\n positional,\n detectedLanguages,\n fileUsage: new Map(this.fileUsage),\n };\n\n return this.cachedUsage;\n }\n\n /**\n * Load usage from a project scan\n */\n loadFromScan(scannedFiles: Map<string, FileUsage>): void {\n this.fileUsage = new Map(scannedFiles);\n this.cachedUsage = null;\n }\n\n /**\n * Check if any hyperscript usage has been detected\n */\n hasUsage(): boolean {\n const usage = this.getUsage();\n return (\n usage.commands.size > 0 ||\n usage.blocks.size > 0 ||\n usage.positional ||\n usage.detectedLanguages.size > 0\n );\n }\n\n /**\n * Get summary for logging\n */\n getSummary(): {\n commands: string[];\n blocks: string[];\n positional: boolean;\n languages: string[];\n fileCount: number;\n } {\n const usage = this.getUsage();\n return {\n commands: [...usage.commands].sort(),\n blocks: [...usage.blocks].sort(),\n positional: usage.positional,\n languages: [...usage.detectedLanguages].sort(),\n fileCount: this.fileUsage.size,\n };\n }\n\n /**\n * Clear all tracked usage\n */\n clear(): void {\n this.fileUsage.clear();\n this.cachedUsage = null;\n }\n\n /**\n * Compare two sets for equality\n */\n private setsEqual<T>(a: Set<T>, b: Set<T>): boolean {\n if (a.size !== b.size) return false;\n for (const item of a) {\n if (!b.has(item)) return false;\n }\n return true;\n }\n}\n","/**\n * Generator\n *\n * Generates minimal HyperFixi bundles based on detected usage.\n * Uses shared templates from @lokascript/core/bundle-generator.\n * Supports multilingual semantic parsing when enabled.\n */\n\nimport type { AggregatedUsage, HyperfixiPluginOptions } from './types';\nimport {\n COMMAND_IMPLEMENTATIONS as COMMAND_IMPL_TS,\n BLOCK_IMPLEMENTATIONS as BLOCK_IMPL_TS,\n STYLE_COMMANDS,\n ELEMENT_ARRAY_COMMANDS,\n} from '@lokascript/core/bundle-generator';\nimport {\n resolveSemanticConfig,\n generateSemanticIntegrationCode,\n getSemanticExports,\n getSemanticBundleSize,\n type SemanticConfig,\n} from './semantic-integration';\n\n// =============================================================================\n// BUNDLE GENERATOR\n// =============================================================================\n\n/**\n * Generator options interface\n */\ninterface GeneratorOptions {\n name: string;\n commands: string[];\n blocks?: string[];\n positionalExpressions?: boolean;\n htmxIntegration?: boolean;\n globalName?: string;\n parserImportPath?: string;\n autoInit?: boolean;\n esModule?: boolean;\n}\n\n/**\n * Strip TypeScript type annotations for JavaScript output.\n */\nfunction stripTypes(code: string): string {\n return (\n code\n // Remove \" as Type\" casts\n .replace(/\\s+as\\s+\\w+(?:\\[\\])?/g, '')\n // Remove \": Type\" in catch clauses like \"catch (error: any)\"\n .replace(/\\((\\w+):\\s*\\w+\\)/g, '($1)')\n // Remove \": Type\" in arrow function params like \"(a: any) =>\"\n .replace(/\\((\\w+):\\s*any\\)/g, '($1)')\n // Remove \"<void>\" generic from Promise<void>[]\n .replace(/Promise<void>\\[\\]/g, 'Promise[]')\n // Clean up Promise<void> standalone\n .replace(/Promise<void>/g, 'Promise')\n // Remove TransitionEvent type\n .replace(/:\\s*TransitionEvent/g, '')\n );\n}\n\n// Get JavaScript-formatted implementations (type annotations stripped)\nconst COMMAND_IMPLEMENTATIONS: Record<string, string> = {};\nconst BLOCK_IMPLEMENTATIONS: Record<string, string> = {};\n\nfor (const [name, code] of Object.entries(COMMAND_IMPL_TS)) {\n COMMAND_IMPLEMENTATIONS[name] = stripTypes(code);\n}\n\nfor (const [name, code] of Object.entries(BLOCK_IMPL_TS)) {\n BLOCK_IMPLEMENTATIONS[name] = stripTypes(code);\n}\n\n/**\n * Generate bundle code from configuration\n */\nfunction generateBundleCode(config: GeneratorOptions): string {\n const {\n name,\n commands,\n blocks = [],\n htmxIntegration = false,\n globalName = 'hyperfixi',\n positionalExpressions = false,\n parserImportPath = '../parser/hybrid',\n autoInit = true,\n esModule = true,\n } = config;\n\n const needsStyleHelpers = commands.some(cmd => STYLE_COMMANDS.includes(cmd));\n const needsElementArrayHelper = commands.some(cmd => ELEMENT_ARRAY_COMMANDS.includes(cmd));\n const hasBlocks = blocks.length > 0;\n const hasReturn = commands.includes('return');\n\n const commandCases = commands\n .filter(cmd => COMMAND_IMPLEMENTATIONS[cmd])\n .map(cmd => COMMAND_IMPLEMENTATIONS[cmd])\n .join('\\n');\n\n const blockCases = blocks\n .filter(block => BLOCK_IMPLEMENTATIONS[block])\n .map(block => BLOCK_IMPLEMENTATIONS[block])\n .join('\\n');\n\n return `/**\n * HyperFixi ${name} Bundle (Auto-Generated)\n *\n * Generated by: @lokascript/vite-plugin\n * Commands: ${commands.join(', ')}${blocks.length > 0 ? `\\n * Blocks: ${blocks.join(', ')}` : ''}${positionalExpressions ? '\\n * Positional expressions: enabled' : ''}\n *\n * DO NOT EDIT - This file is automatically regenerated.\n */\n\n// Parser imports\nimport { HybridParser, addCommandAliases } from '${parserImportPath}';\n\n// Runtime state\nconst globalVars = new Map();\n${hasBlocks ? 'const MAX_LOOP_ITERATIONS = 1000;' : ''}\n\nasync function evaluate(node, ctx) {\n switch (node.type) {\n case 'literal': return node.value;\n\n case 'identifier':\n if (node.value === 'me' || node.value === 'my') return ctx.me;\n if (node.value === 'it') return ctx.it;\n if (node.value === 'you') return ctx.you;\n if (node.value === 'event') return ctx.event;\n if (node.value === 'body') return document.body;\n if (node.value === 'document') return document;\n if (node.value === 'window') return window;\n if (ctx.locals.has(node.value)) return ctx.locals.get(node.value);\n if (node.value in ctx.me) return ctx.me[node.value];\n return node.value;\n\n case 'contextReference':\n // Semantic AST format for context references (me, you, it, etc.)\n switch (node.contextType || node.name) {\n case 'me': return ctx.me;\n case 'it': return ctx.it;\n case 'you': return ctx.you;\n case 'event': return ctx.event;\n case 'body': return document.body;\n case 'document': return document;\n case 'window': return window;\n default: return ctx.me;\n }\n\n case 'variable':\n if (node.scope === 'local') return ctx.locals.get(node.name.slice(1));\n const gName = node.name.slice(1);\n if (globalVars.has(gName)) return globalVars.get(gName);\n return window[node.name];\n\n case 'selector':\n const elements = document.querySelectorAll(node.value);\n return elements.length === 1 ? elements[0] : Array.from(elements);\n\n case 'binary':\n return evaluateBinary(node, ctx);\n\n case 'possessive':\n case 'member':\n const obj = await evaluate(node.object, ctx);\n if (obj == null) return undefined;\n const prop = node.computed ? await evaluate(node.property, ctx) : node.property;\n return obj[prop];\n\n case 'call': {\n let callContext = null;\n let callee;\n\n if (node.callee.type === 'member' || node.callee.type === 'possessive') {\n callContext = await evaluate(node.callee.object, ctx);\n const p = node.callee.computed\n ? await evaluate(node.callee.property, ctx)\n : node.callee.property;\n callee = callContext?.[p];\n } else {\n callee = await evaluate(node.callee, ctx);\n }\n\n const args = await Promise.all(node.args.map(a => evaluate(a, ctx)));\n if (typeof callee === 'function') return callee.apply(callContext, args);\n return undefined;\n }\n${\n positionalExpressions\n ? `\n case 'positional':\n return evaluatePositional(node, ctx);\n`\n : ''\n}\n default: return undefined;\n }\n}\n\nasync function evaluateBinary(node, ctx) {\n if (node.operator === 'has') {\n const left = await evaluate(node.left, ctx);\n if (left instanceof Element && node.right.type === 'selector' && node.right.value.startsWith('.')) {\n return left.classList.contains(node.right.value.slice(1));\n }\n return false;\n }\n\n const left = await evaluate(node.left, ctx);\n const right = await evaluate(node.right, ctx);\n\n switch (node.operator) {\n case '+': return left + right;\n case '-': return left - right;\n case '*': return left * right;\n case '/': return left / right;\n case '%': return left % right;\n case '==': case 'is': return left == right;\n case '!=': case 'is not': return left != right;\n case '<': return left < right;\n case '>': return left > right;\n case '<=': return left <= right;\n case '>=': return left >= right;\n case 'and': case '&&': return left && right;\n case 'or': case '||': return left || right;\n case 'contains': case 'includes':\n if (typeof left === 'string') return left.includes(right);\n if (Array.isArray(left)) return left.includes(right);\n if (left instanceof Element) return left.contains(right);\n return false;\n case 'matches':\n if (left instanceof Element) return left.matches(right);\n if (typeof left === 'string') return new RegExp(right).test(left);\n return false;\n default: return undefined;\n }\n}\n${\n positionalExpressions\n ? `\nfunction evaluatePositional(node, ctx) {\n const target = node.target;\n let elements = [];\n\n let selector = null;\n if (target.type === 'selector') {\n selector = target.value;\n } else if (target.type === 'identifier') {\n selector = target.value;\n } else if (target.type === 'htmlSelector') {\n selector = target.value;\n }\n if (selector) {\n elements = Array.from(document.querySelectorAll(selector));\n }\n\n switch (node.position) {\n case 'first': return elements[0] || null;\n case 'last': return elements[elements.length - 1] || null;\n case 'next': return ctx.me.nextElementSibling;\n case 'previous': return ctx.me.previousElementSibling;\n case 'closest': return target.value ? ctx.me.closest(target.value) : null;\n case 'parent': return ctx.me.parentElement;\n default: return elements[0] || null;\n }\n}\n`\n : ''\n}\n${\n needsStyleHelpers\n ? `\nconst isStyleProp = (prop) => prop?.startsWith('*');\nconst getStyleName = (prop) => prop.substring(1);\nconst setStyleProp = (el, prop, value) => {\n if (!isStyleProp(prop)) return false;\n el.style.setProperty(getStyleName(prop), String(value));\n return true;\n};\n`\n : ''\n}\n\n${\n needsElementArrayHelper\n ? `\nconst toElementArray = (val) => {\n if (Array.isArray(val)) return val.filter(e => e instanceof Element);\n if (val instanceof Element) return [val];\n if (typeof val === 'string') return Array.from(document.querySelectorAll(val));\n return [];\n};\n`\n : ''\n}\n\nasync function executeCommand(cmd, ctx) {\n const getTarget = async () => {\n // Support both HybridParser (cmd.target) and semantic AST (cmd.modifiers.on) formats\n const target = cmd.target || cmd.modifiers?.on;\n if (!target) return [ctx.me];\n const t = await evaluate(target, ctx);\n if (Array.isArray(t)) return t;\n if (t instanceof Element) return [t];\n if (typeof t === 'string') return Array.from(document.querySelectorAll(t));\n return [ctx.me];\n };\n\n const getClassName = (node) => {\n if (!node) return '';\n if (node.type === 'selector') return node.value.slice(1);\n if (node.type === 'string' || node.type === 'literal') {\n const val = node.value;\n return typeof val === 'string' && val.startsWith('.') ? val.slice(1) : String(val);\n }\n if (node.type === 'identifier') return node.value;\n return '';\n };\n\n switch (cmd.name) {\n${commandCases}\n\n default:\n console.warn(\\`${name} bundle: Unknown command '\\${cmd.name}'\\`);\n return null;\n }\n}\n${\n hasBlocks\n ? `\nasync function executeBlock(block, ctx) {\n switch (block.type) {\n${blockCases}\n\n default:\n console.warn(\\`${name} bundle: Unknown block '\\${block.type}'\\`);\n return null;\n }\n}\n`\n : ''\n}\nasync function executeSequence(nodes, ctx) {\n let result;\n for (const node of nodes) {\n if (node.type === 'command') {\n result = await executeCommand(node, ctx);\n }${\n hasBlocks\n ? ` else if (['if', 'repeat', 'for', 'while', 'fetch'].includes(node.type)) {\n result = await executeBlock(node, ctx);\n }`\n : ''\n }\n }\n return result;\n}\n${\n hasBlocks\n ? `\nasync function executeSequenceWithBlocks(nodes, ctx) {\n try {\n return await executeSequence(nodes, ctx);\n } catch (e) {\n if (e?.type === 'return') throw e;\n throw e;\n }\n}\n`\n : ''\n}\nasync function executeAST(ast, me, event) {\n const ctx = { me, event, locals: new Map() };\n\n if (ast.type === 'sequence') {\n ${hasReturn || hasBlocks ? \"try { return await executeSequence(ast.commands, ctx); } catch (e) { if (e?.type === 'return') return e.value; throw e; }\" : 'return executeSequence(ast.commands, ctx);'}\n }\n\n if (ast.type === 'event') {\n const eventNode = ast;\n const eventName = eventNode.event;\n\n if (eventName === 'init') {\n ${hasReturn || hasBlocks ? \"try { await executeSequence(eventNode.body, ctx); } catch (e) { if (e?.type !== 'return') throw e; }\" : 'await executeSequence(eventNode.body, ctx);'}\n return;\n }\n\n const target = eventNode.filter ? await evaluate(eventNode.filter, ctx) : me;\n const targetEl = target instanceof Element ? target : me;\n const mods = eventNode.modifiers;\n\n let handler = async (e) => {\n if (mods.prevent) e.preventDefault();\n if (mods.stop) e.stopPropagation();\n\n const handlerCtx = {\n me, event: e,\n you: e.target instanceof Element ? e.target : undefined,\n locals: new Map(),\n };\n ${hasReturn || hasBlocks ? \"try { await executeSequence(eventNode.body, handlerCtx); } catch (err) { if (err?.type !== 'return') throw err; }\" : 'await executeSequence(eventNode.body, handlerCtx);'}\n };\n\n if (mods.debounce) {\n let timeout;\n const orig = handler;\n handler = async (e) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => orig(e), mods.debounce);\n };\n }\n\n if (mods.throttle) {\n let lastCall = 0;\n const orig = handler;\n handler = async (e) => {\n const now = Date.now();\n if (now - lastCall >= mods.throttle) {\n lastCall = now;\n await orig(e);\n }\n };\n }\n\n targetEl.addEventListener(eventName, handler, { once: !!mods.once });\n return;\n }\n\n // Handle single command (not wrapped in event or sequence)\n if (ast.type === 'command') {\n return executeCommand(ast, ctx);\n }\n\n return null;\n}\n\nfunction processElement(el) {\n const code = el.getAttribute('_');\n if (!code) return;\n\n try {\n const parser = new HybridParser(code);\n const ast = parser.parse();\n executeAST(ast, el);\n } catch (err) {\n console.error('HyperFixi ${name} error:', err, 'Code:', code);\n }\n}\n\nfunction processElements(root = document) {\n const elements = root.querySelectorAll('[_]');\n elements.forEach(processElement);\n}\n\nconst api = {\n version: '1.0.0-${name.toLowerCase().replace(/\\s+/g, '-')}',\n\n parse(code) {\n const parser = new HybridParser(code);\n return parser.parse();\n },\n\n async execute(code, element) {\n const me = element || document.body;\n const parser = new HybridParser(code);\n const ast = parser.parse();\n return executeAST(ast, me);\n },\n\n run: async (code, element) => api.execute(code, element),\n eval: async (code, element) => api.execute(code, element),\n\n init: processElements,\n process: processElements,\n\n commands: ${JSON.stringify(commands)},\n ${blocks.length > 0 ? `blocks: ${JSON.stringify(blocks)},` : ''}\n parserName: 'hybrid',\n};\n${\n autoInit\n ? `\nif (typeof window !== 'undefined') {\n window.${globalName} = api;\n window._hyperscript = api;\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => processElements());\n } else {\n processElements();\n }\n${\n htmxIntegration\n ? `\n document.addEventListener('htmx:afterSettle', (e) => {\n const target = e.detail?.target;\n if (target) processElements(target);\n });\n`\n : ''\n}\n}\n`\n : ''\n}\n${\n esModule\n ? `\nexport default api;\nexport { api, processElements };\n`\n : ''\n}`;\n}\n\n// =============================================================================\n// GENERATOR CLASS\n// =============================================================================\n\n/**\n * Generator class for creating minimal bundles\n */\nexport class Generator {\n private debug: boolean;\n\n constructor(options: Pick<HyperfixiPluginOptions, 'debug'>) {\n this.debug = options.debug ?? false;\n }\n\n /**\n * Generate bundle code from aggregated usage\n */\n generate(usage: AggregatedUsage, options: HyperfixiPluginOptions): string {\n const commands = [...usage.commands, ...(options.extraCommands ?? [])];\n const blocks = [...usage.blocks, ...(options.extraBlocks ?? [])];\n const positional = usage.positional || options.positional || false;\n\n // Resolve semantic configuration\n const semanticConfig = resolveSemanticConfig(options, usage.detectedLanguages);\n\n // If no usage detected and no semantic, return empty module\n if (commands.length === 0 && blocks.length === 0 && !positional && !semanticConfig.enabled) {\n return this.generateEmptyBundle(options);\n }\n\n const config: GeneratorOptions = {\n name: options.bundleName ?? 'ViteAutoGenerated',\n commands,\n blocks,\n positionalExpressions: positional,\n htmxIntegration: options.htmx ?? false,\n globalName: options.globalName ?? 'hyperfixi',\n // Use @lokascript/core package path for virtual module\n parserImportPath: '@lokascript/core/parser/hybrid',\n autoInit: true,\n esModule: true,\n };\n\n if (this.debug) {\n const bundleInfo: Record<string, unknown> = {\n commands,\n blocks,\n positional,\n htmx: config.htmxIntegration,\n semantic: semanticConfig.enabled,\n };\n\n if (semanticConfig.enabled && semanticConfig.bundleType) {\n const sizeInfo = getSemanticBundleSize(semanticConfig.bundleType);\n bundleInfo.semanticBundle = semanticConfig.bundleType;\n bundleInfo.semanticSize = sizeInfo.gzip;\n bundleInfo.languages = [...semanticConfig.languages];\n bundleInfo.grammar = semanticConfig.grammarEnabled;\n }\n\n console.log('[hyperfixi] Generating bundle:', bundleInfo);\n\n // Warn if semantic bundle is large\n if (semanticConfig.bundleType === 'all' || semanticConfig.bundleType === 'priority') {\n console.log(\n `[hyperfixi] Note: Using '${semanticConfig.bundleType}' semantic bundle (${getSemanticBundleSize(semanticConfig.bundleType).gzip}). ` +\n `Consider using 'region' option to select a smaller regional bundle if all languages aren't needed.`\n );\n }\n }\n\n // Generate base bundle code\n let bundleCode = generateBundleCode(config);\n\n // Add semantic integration if enabled\n if (semanticConfig.enabled) {\n bundleCode = this.addSemanticIntegration(bundleCode, semanticConfig);\n }\n\n return bundleCode;\n }\n\n /**\n * Add semantic integration code to the bundle\n */\n private addSemanticIntegration(bundleCode: string, config: SemanticConfig): string {\n const semanticCode = generateSemanticIntegrationCode(config);\n const semanticExports = getSemanticExports(config);\n\n // Insert semantic imports after the parser imports\n const parserImportEnd = bundleCode.indexOf('// Runtime state');\n if (parserImportEnd === -1) {\n // Fallback: prepend to code\n bundleCode = semanticCode + '\\n' + bundleCode;\n } else {\n bundleCode =\n bundleCode.slice(0, parserImportEnd) +\n semanticCode +\n '\\n\\n' +\n bundleCode.slice(parserImportEnd);\n }\n\n // Replace HybridParser usage with parseWithSemantic in processElement\n bundleCode = bundleCode.replace(\n /function processElement\\(el\\) \\{\\s*const code = el\\.getAttribute\\('_'\\);\\s*if \\(!code\\) return;\\s*try \\{\\s*const parser = new HybridParser\\(code\\);\\s*const ast = parser\\.parse\\(\\);/g,\n `function processElement(el) {\n const code = el.getAttribute('_');\n if (!code) return;\n\n try {\n const ast = parseWithSemantic(code);`\n );\n\n // Replace HybridParser usage in api.parse\n bundleCode = bundleCode.replace(\n /parse\\(code\\) \\{\\s*const parser = new HybridParser\\(code\\);\\s*return parser\\.parse\\(\\);/g,\n `parse(code, lang = null) {\n return parseWithSemantic(code, lang);`\n );\n\n // Replace HybridParser usage in api.execute\n bundleCode = bundleCode.replace(\n /async execute\\(code, element\\) \\{\\s*const me = element \\|\\| document\\.body;\\s*const parser = new HybridParser\\(code\\);\\s*const ast = parser\\.parse\\(\\);/g,\n `async execute(code, element, lang = null) {\n const me = element || document.body;\n const ast = parseWithSemantic(code, lang);`\n );\n\n // Add semantic exports to the api object\n if (semanticExports.length > 0) {\n const apiExportsMarker = \"parserName: 'hybrid',\";\n const additionalApiProps = semanticExports.map(exp => ` ${exp},`).join('\\n');\n bundleCode = bundleCode.replace(\n apiExportsMarker,\n `parserName: 'hybrid',\\n${additionalApiProps}`\n );\n }\n\n return bundleCode;\n }\n\n /**\n * Generate an empty bundle when no hyperscript is detected\n */\n private generateEmptyBundle(options: HyperfixiPluginOptions): string {\n const globalName = options.globalName ?? 'hyperfixi';\n\n return `/**\n * HyperFixi Empty Bundle (Auto-Generated)\n *\n * No hyperscript usage detected. This bundle provides a minimal API.\n * Add hyperscript attributes (_=\"...\") to your HTML to enable features.\n *\n * Generated by: @lokascript/vite-plugin\n */\n\nconst api = {\n version: '1.0.0-empty',\n commands: [],\n parserName: 'none',\n\n parse() {\n console.warn('HyperFixi: No parser loaded. Add hyperscript to your HTML to enable parsing.');\n return { type: 'empty' };\n },\n\n async execute(code, element) {\n console.warn('HyperFixi: No commands loaded. Detected commands will be automatically included.');\n return null;\n },\n\n run: async (code, element) => api.execute(code, element),\n eval: async (code, element) => api.execute(code, element),\n\n init() {},\n process() {},\n};\n\nif (typeof window !== 'undefined') {\n (window).${globalName} = api;\n (window)._hyperscript = api;\n}\n\nexport default api;\nexport { api };\n`;\n }\n\n /**\n * Generate a development fallback bundle\n */\n generateDevFallback(fallback: 'hybrid-complete' | 'full'): string {\n const bundle =\n fallback === 'full' ? '@lokascript/core/browser' : '@lokascript/core/browser/hybrid-complete';\n\n return `/**\n * HyperFixi Dev Fallback Bundle\n *\n * Using pre-built ${fallback} bundle for faster development.\n * Production builds will generate minimal bundles.\n *\n * Generated by: @lokascript/vite-plugin\n */\n\nexport * from '${bundle}';\nexport { default } from '${bundle}';\n`;\n }\n}\n","/**\n * Semantic Integration\n *\n * Handles semantic bundle selection and integration layer generation.\n * Used when multilingual semantic support is enabled.\n */\n\nimport type { HyperfixiPluginOptions } from './types';\nimport { REGIONS, type SupportedLanguage } from './language-keywords';\n\n/**\n * Multilingual command aliases.\n * Maps non-English command keywords to their English equivalents.\n */\nconst MULTILINGUAL_COMMAND_ALIASES: Partial<Record<SupportedLanguage, Record<string, string>>> = {\n ja: {\n トグル: 'toggle',\n 切り替え: 'toggle',\n 追加: 'add',\n 削除: 'remove',\n 表示: 'show',\n 隠す: 'hide',\n 非表示: 'hide',\n 設定: 'set',\n セット: 'set',\n 増加: 'increment',\n 減少: 'decrement',\n ログ: 'log',\n 出力: 'log',\n },\n ko: {\n 토글: 'toggle',\n 전환: 'toggle',\n 추가: 'add',\n 제거: 'remove',\n 삭제: 'remove',\n 표시: 'show',\n 숨기다: 'hide',\n 설정: 'set',\n 증가: 'increment',\n 감소: 'decrement',\n 로그: 'log',\n },\n zh: {\n 切换: 'toggle',\n 添加: 'add',\n 移除: 'remove',\n 删除: 'remove',\n 显示: 'show',\n 隐藏: 'hide',\n 设置: 'set',\n 设定: 'set',\n 增加: 'increment',\n 减少: 'decrement',\n 日志: 'log',\n 记录: 'log',\n },\n ar: {\n بدّل: 'toggle',\n بدل: 'toggle',\n أضف: 'add',\n اضف: 'add',\n أزل: 'remove',\n ازل: 'remove',\n احذف: 'remove',\n أظهر: 'show',\n اظهر: 'show',\n أخفِ: 'hide',\n اخف: 'hide',\n ضع: 'set',\n اضع: 'set',\n زِد: 'increment',\n أنقص: 'decrement',\n },\n es: {\n alternar: 'toggle',\n añadir: 'add',\n agregar: 'add',\n quitar: 'remove',\n eliminar: 'remove',\n mostrar: 'show',\n ocultar: 'hide',\n esconder: 'hide',\n establecer: 'set',\n fijar: 'set',\n incrementar: 'increment',\n decrementar: 'decrement',\n },\n pt: {\n alternar: 'toggle',\n adicionar: 'add',\n remover: 'remove',\n mostrar: 'show',\n esconder: 'hide',\n ocultar: 'hide',\n definir: 'set',\n incrementar: 'increment',\n decrementar: 'decrement',\n },\n fr: {\n basculer: 'toggle',\n ajouter: 'add',\n supprimer: 'remove',\n retirer: 'remove',\n afficher: 'show',\n montrer: 'show',\n cacher: 'hide',\n masquer: 'hide',\n définir: 'set',\n incrémenter: 'increment',\n décrémenter: 'decrement',\n },\n de: {\n umschalten: 'toggle',\n hinzufügen: 'add',\n entfernen: 'remove',\n löschen: 'remove',\n anzeigen: 'show',\n zeigen: 'show',\n verbergen: 'hide',\n verstecken: 'hide',\n setzen: 'set',\n festlegen: 'set',\n erhöhen: 'increment',\n verringern: 'decrement',\n },\n tr: {\n değiştir: 'toggle',\n değistir: 'toggle',\n ekle: 'add',\n kaldır: 'remove',\n kaldir: 'remove',\n sil: 'remove',\n göster: 'show',\n gizle: 'hide',\n sakla: 'hide',\n ayarla: 'set',\n belirle: 'set',\n arttır: 'increment',\n azalt: 'decrement',\n },\n id: {\n alih: 'toggle',\n beralih: 'toggle',\n tambah: 'add',\n hapus: 'remove',\n buang: 'remove',\n tampilkan: 'show',\n sembunyikan: 'hide',\n atur: 'set',\n tetapkan: 'set',\n tambahkan: 'increment',\n kurangi: 'decrement',\n },\n sw: {\n badilisha: 'toggle',\n ongeza: 'add',\n ondoa: 'remove',\n futa: 'remove',\n onyesha: 'show',\n ficha: 'hide',\n weka: 'set',\n sanidi: 'set',\n ongezea: 'increment',\n punguza: 'decrement',\n },\n qu: {\n tikray: 'toggle',\n yapay: 'add',\n qichuy: 'remove',\n pichay: 'remove',\n rikuchiy: 'show',\n pakay: 'hide',\n churay: 'set',\n pisiyachiy: 'decrement',\n },\n};\n\n/**\n * Get multilingual command aliases for detected languages.\n * Used by compile mode to configure the compiler with the right aliases.\n */\nexport function getMultilingualCommandAliases(\n languages: Set<SupportedLanguage>\n): Record<string, string> {\n const aliases: Record<string, string> = {};\n\n for (const lang of languages) {\n const langAliases = MULTILINGUAL_COMMAND_ALIASES[lang];\n if (langAliases) {\n Object.assign(aliases, langAliases);\n }\n }\n\n return aliases;\n}\n\n/**\n * Generate code to add multilingual command aliases to HybridParser.\n */\nfunction generateMultilingualAliases(languages: Set<SupportedLanguage>): string {\n const aliases: Record<string, string> = {};\n\n for (const lang of languages) {\n const langAliases = MULTILINGUAL_COMMAND_ALIASES[lang];\n if (langAliases) {\n Object.assign(aliases, langAliases);\n }\n }\n\n if (Object.keys(aliases).length === 0) {\n return `\n// No multilingual aliases needed - just pass through\nfunction preprocessMultilingual(code) { return code; }\n`;\n }\n\n // Generate code to add aliases to HybridParser via addCommandAliases\n const aliasEntries = Object.entries(aliases)\n .map(([key, val]) => ` '${key}': '${val}'`)\n .join(',\\n');\n\n // Build regex pattern to match multilingual keywords\n // Escape special regex characters in keys\n const escapedKeys = Object.keys(aliases)\n .map(k => k.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\n .join('|');\n\n return `\n// Multilingual command aliases for HybridParser fallback\nconst MULTILINGUAL_ALIASES = {\n${aliasEntries}\n};\n\n// Register multilingual aliases with the parser\naddCommandAliases(MULTILINGUAL_ALIASES);\n\n// Preprocessing regex to translate multilingual keywords to English\n// The HybridParser tokenizer only accepts ASCII identifiers, so we need\n// to translate non-ASCII keywords before parsing.\nconst MULTILINGUAL_KEYWORD_REGEX = new RegExp('(^|\\\\\\\\s)(${escapedKeys})(?=\\\\\\\\s|\\\\\\\\.|$)', 'g');\n\n/**\n * Preprocess multilingual code to replace non-ASCII keywords with English equivalents.\n * This is needed because HybridParser's tokenizer only accepts ASCII identifiers.\n */\nfunction preprocessMultilingual(code) {\n return code.replace(MULTILINGUAL_KEYWORD_REGEX, (match, prefix, keyword) => {\n const english = MULTILINGUAL_ALIASES[keyword];\n return english ? prefix + english : match;\n });\n}\n`;\n}\n\n/**\n * Semantic bundle types available.\n * Single-language bundles are available for all 13 supported languages.\n */\nexport type SemanticBundleType =\n // Single-language bundles (all 13 languages)\n | 'en'\n | 'es'\n | 'ja'\n | 'ar'\n | 'ko'\n | 'zh'\n | 'tr'\n | 'pt'\n | 'fr'\n | 'de'\n | 'id'\n | 'qu'\n | 'sw'\n // Regional bundles\n | 'es-en'\n | 'western'\n | 'east-asian'\n | 'priority'\n | 'all';\n\n/**\n * Semantic configuration resolved from options and detected languages.\n */\nexport interface SemanticConfig {\n /** Whether semantic parsing is enabled */\n enabled: boolean;\n\n /** Which semantic bundle to use */\n bundleType: SemanticBundleType | null;\n\n /** All languages to support (detected + explicit) */\n languages: Set<SupportedLanguage>;\n\n /** Whether grammar transformation is enabled */\n grammarEnabled: boolean;\n}\n\n/**\n * Resolve semantic configuration from plugin options and detected languages.\n */\nexport function resolveSemanticConfig(\n options: HyperfixiPluginOptions,\n detectedLanguages: Set<string>\n): SemanticConfig {\n // Check if grammar is enabled (which implies semantic)\n const grammarEnabled = options.grammar ?? false;\n\n // Determine if semantic is enabled\n let semanticEnabled = grammarEnabled; // grammar implies semantic\n if (options.semantic === true || options.semantic === 'auto') {\n semanticEnabled = true;\n } else if (options.semantic === 'en') {\n semanticEnabled = true;\n } else if (options.semantic === false) {\n semanticEnabled = false;\n }\n\n // If not enabled, return early\n if (!semanticEnabled) {\n return {\n enabled: false,\n bundleType: null,\n languages: new Set(),\n grammarEnabled: false,\n };\n }\n\n // Collect all languages\n const languages = new Set<SupportedLanguage>();\n\n // Add detected languages\n for (const lang of detectedLanguages) {\n languages.add(lang as SupportedLanguage);\n }\n\n // Add explicitly configured languages\n if (options.languages) {\n for (const lang of options.languages) {\n languages.add(lang as SupportedLanguage);\n }\n }\n\n // Add extra languages\n if (options.extraLanguages) {\n for (const lang of options.extraLanguages) {\n languages.add(lang as SupportedLanguage);\n }\n }\n\n // Determine bundle type\n let bundleType = selectBundleType(options, languages);\n\n return {\n enabled: true,\n bundleType,\n languages,\n grammarEnabled,\n };\n}\n\n/**\n * Select the optimal semantic bundle type based on options and languages.\n */\nfunction selectBundleType(\n options: HyperfixiPluginOptions,\n languages: Set<SupportedLanguage>\n): SemanticBundleType {\n // If explicit region is set, use it\n if (options.region) {\n return options.region as SemanticBundleType;\n }\n\n // If semantic is 'en', use English-only bundle\n if (options.semantic === 'en') {\n return 'en';\n }\n\n // If explicit languages are set, find optimal bundle\n if (options.languages?.length) {\n return selectOptimalBundle(new Set(options.languages as SupportedLanguage[]));\n }\n\n // Use detected languages\n if (languages.size === 0) {\n // No languages detected, default to English\n return 'en';\n }\n\n return selectOptimalBundle(languages);\n}\n\n/**\n * All languages that have single-language bundles available.\n */\nconst SINGLE_LANGUAGE_BUNDLES: readonly SupportedLanguage[] = [\n 'en',\n 'es',\n 'ja',\n 'ar',\n 'ko',\n 'zh',\n 'tr',\n 'pt',\n 'fr',\n 'de',\n 'id',\n 'qu',\n 'sw',\n] as const;\n\n/**\n * Select the smallest bundle that covers all specified languages.\n */\nexport function selectOptimalBundle(languages: Set<SupportedLanguage>): SemanticBundleType {\n if (languages.size === 0) {\n return 'en';\n }\n\n const langArray = [...languages];\n\n // Check single-language bundles (all 13 languages have individual bundles)\n if (langArray.length === 1) {\n const lang = langArray[0];\n if (SINGLE_LANGUAGE_BUNDLES.includes(lang)) {\n return lang as SemanticBundleType;\n }\n }\n\n // Check if en + es covers it (common bilingual case)\n if (langArray.length === 2 && langArray.includes('en') && langArray.includes('es')) {\n return 'es-en';\n }\n\n // Check if all languages fit in western bundle\n if (langArray.every(l => REGIONS.western.includes(l))) {\n return 'western';\n }\n\n // Check if all languages fit in east-asian bundle\n if (langArray.every(l => REGIONS['east-asian'].includes(l))) {\n return 'east-asian';\n }\n\n // Check if all languages fit in priority bundle\n if (langArray.every(l => REGIONS.priority.includes(l))) {\n return 'priority';\n }\n\n // Need full bundle\n return 'all';\n}\n\n/**\n * Estimated bundle sizes for each semantic bundle type.\n * Used for debug logging to help users understand size impact.\n * Sizes measured from minified bundles (January 2025).\n */\nexport const SEMANTIC_BUNDLE_SIZES: Record<SemanticBundleType, { raw: string; gzip: string }> = {\n // Single-language bundles (all 13 languages)\n en: { raw: '82 KB', gzip: '~20 KB' },\n es: { raw: '64 KB', gzip: '~16 KB' },\n ja: { raw: '67 KB', gzip: '~17 KB' },\n ar: { raw: '66 KB', gzip: '~17 KB' },\n ko: { raw: '69 KB', gzip: '~18 KB' },\n zh: { raw: '58 KB', gzip: '~15 KB' },\n tr: { raw: '73 KB', gzip: '~18 KB' },\n pt: { raw: '56 KB', gzip: '~14 KB' },\n fr: { raw: '57 KB', gzip: '~14 KB' },\n de: { raw: '57 KB', gzip: '~14 KB' },\n id: { raw: '57 KB', gzip: '~14 KB' },\n qu: { raw: '56 KB', gzip: '~14 KB' },\n sw: { raw: '56 KB', gzip: '~14 KB' },\n // Regional bundles\n 'es-en': { raw: '99 KB', gzip: '~25 KB' },\n western: { raw: '127 KB', gzip: '~30 KB' },\n 'east-asian': { raw: '99 KB', gzip: '~24 KB' },\n priority: { raw: '231 KB', gzip: '~48 KB' },\n all: { raw: '324 KB', gzip: '~61 KB' },\n};\n\n/**\n * Get the estimated size for a semantic bundle type.\n */\nexport function getSemanticBundleSize(bundleType: SemanticBundleType): {\n raw: string;\n gzip: string;\n} {\n return SEMANTIC_BUNDLE_SIZES[bundleType] ?? SEMANTIC_BUNDLE_SIZES.all;\n}\n\n/**\n * Get the import path for a semantic bundle type.\n *\n * Note: For ES module usage (Vite, Rollup, etc.), we always use the main entry\n * '@lokascript/semantic' which has proper ES module exports. The regional bundles\n * (browser/en, browser/western, etc.) are IIFE format for direct <script> tag\n * inclusion only.\n *\n * Bundle size optimization for ES modules is achieved through tree-shaking by\n * the bundler, not through pre-built regional bundles.\n */\nexport function getSemanticBundleImport(_bundleType: SemanticBundleType): string {\n // All ES module imports use the main entry which has named exports\n // The regional bundles are IIFE format only (for <script> tags)\n // Note: bundleType is kept for API compatibility but not used for ES modules\n return '@lokascript/semantic';\n}\n\n/**\n * Generate the semantic integration layer code.\n * This is injected into the generated bundle when semantic is enabled.\n */\nexport function generateSemanticIntegrationCode(config: SemanticConfig): string {\n if (!config.enabled || !config.bundleType) {\n return '';\n }\n\n const bundleImport = getSemanticBundleImport(config.bundleType);\n const languages = [...config.languages].join(\"', '\");\n\n let code = `\n// =============================================================================\n// SEMANTIC PARSER INTEGRATION\n// =============================================================================\n\nimport {\n createSemanticAnalyzer,\n buildAST,\n isLanguageSupported,\n} from '${bundleImport}';\n`;\n\n if (config.grammarEnabled) {\n code += `\nimport { GrammarTransformer, translate } from '@lokascript/i18n';\n\nconst grammarTransformer = new GrammarTransformer();\n`;\n }\n\n // Generate multilingual command aliases for HybridParser fallback\n const aliasesCode = generateMultilingualAliases(config.languages);\n\n code += `\nconst semanticAnalyzer = createSemanticAnalyzer();\nconst SUPPORTED_SEMANTIC_LANGUAGES = ['${languages}', 'en'];\nconst SEMANTIC_CONFIDENCE_THRESHOLD = 0.7;\n\n${aliasesCode}\n\n/**\n * Parse hyperscript using semantic parser with auto-language detection.\n * Tries each supported language until one returns a high-confidence result.\n * Falls back to HybridParser if none match.\n *\n * @param code - The hyperscript code to parse\n * @param lang - Optional language hint. If provided, tries this language first.\n */\nfunction parseWithSemantic(code, lang = null) {\n // Determine languages to try: specified lang first, then others\n let languagesToTry = [...SUPPORTED_SEMANTIC_LANGUAGES];\n if (lang && !languagesToTry.includes(lang)) {\n languagesToTry.unshift(lang);\n } else if (lang) {\n // Move specified lang to front\n languagesToTry = [lang, ...languagesToTry.filter(l => l !== lang)];\n }\n\n // Try each language until one succeeds\n for (const tryLang of languagesToTry) {\n if (!isLanguageSupported(tryLang)) continue;\n try {\n const result = semanticAnalyzer.analyze(code, tryLang);\n if (result && result.confidence >= SEMANTIC_CONFIDENCE_THRESHOLD) {\n // buildAST returns {ast, warnings} - extract the ast\n const buildResult = buildAST(result.node);\n const ast = buildResult.ast;\n\n // Semantic parser doesn't fully handle event handlers - fallback to HybridParser\n // Event handlers like \"on click toggle .active\" produce incomplete AST\n if (ast && ast.type === 'command' && ast.name === 'on') {\n break; // Fallback to HybridParser\n }\n\n return ast;\n }\n } catch (e) {\n // Continue trying other languages\n }\n }\n\n // Fallback to HybridParser for event handlers and unrecognized patterns\n // Preprocess to translate non-ASCII keywords to English (tokenizer only accepts ASCII)\n const preprocessedCode = preprocessMultilingual(code);\n return new HybridParser(preprocessedCode).parse();\n}\n`;\n\n if (config.grammarEnabled) {\n code += `\n/**\n * Translate hyperscript between languages.\n */\nfunction translateHyperscript(code, fromLang, toLang) {\n return translate(code, fromLang, toLang);\n}\n`;\n }\n\n return code;\n}\n\n/**\n * Get the list of exports to add when semantic is enabled.\n */\nexport function getSemanticExports(config: SemanticConfig): string[] {\n const exports: string[] = [];\n\n if (config.enabled) {\n exports.push('parseWithSemantic');\n exports.push('SUPPORTED_SEMANTIC_LANGUAGES');\n }\n\n if (config.grammarEnabled) {\n exports.push('translateHyperscript');\n exports.push('grammarTransformer');\n }\n\n return exports;\n}\n","/**\n * Compiler\n *\n * Compiles hyperscript AST to JavaScript at build time.\n * Eliminates the need for runtime parsing.\n *\n * Multilingual support:\n * - For English: Uses HybridParser directly\n * - For other languages: Uses semantic parser to translate → AST → JavaScript\n * - Semantic parsing happens at BUILD time (zero runtime overhead)\n */\n\nimport { HybridParser } from '@lokascript/core/parser/hybrid/parser-core';\nimport type {\n ASTNode,\n CommandNode,\n EventNode,\n VariableNode,\n MemberNode,\n PossessiveNode,\n BinaryNode,\n CallNode,\n IdentifierNode,\n SelectorNode,\n LiteralNode,\n PositionalNode,\n} from '@lokascript/core/parser/hybrid/ast-types';\n\n// =============================================================================\n// SEMANTIC PARSER INTEGRATION (optional)\n// =============================================================================\n\n/**\n * Semantic analyzer interface for multilingual support.\n * This matches the interface from @lokascript/semantic.\n */\ninterface SemanticAnalysisResult {\n confidence: number;\n node?: unknown;\n errors?: string[];\n}\n\ninterface SemanticAnalyzer {\n analyze(input: string, language: string): SemanticAnalysisResult;\n supportsLanguage(language: string): boolean;\n}\n\ntype BuildASTFn = (node: unknown) => { ast: ASTNode; warnings: string[] };\n\n/**\n * Optional semantic parser for multilingual support.\n * Set via setSemanticParser() when semantic package is available.\n */\nlet semanticAnalyzer: SemanticAnalyzer | null = null;\nlet buildASTFn: BuildASTFn | null = null;\n\n/**\n * Configure the semantic parser for multilingual compilation.\n * Call this with the semantic analyzer from @lokascript/semantic.\n *\n * @example\n * ```typescript\n * import { createSemanticAnalyzer, buildAST } from '@lokascript/semantic';\n * import { setSemanticParser } from '@lokascript/vite-plugin';\n *\n * setSemanticParser(createSemanticAnalyzer(), buildAST);\n * ```\n */\nexport function setSemanticParser(analyzer: SemanticAnalyzer, buildAST: BuildASTFn): void {\n semanticAnalyzer = analyzer;\n buildASTFn = buildAST;\n}\n\n/**\n * Clear the semantic parser (for testing).\n */\nexport function clearSemanticParser(): void {\n semanticAnalyzer = null;\n buildASTFn = null;\n}\n\n/**\n * Check if semantic parser is available.\n */\nexport function hasSemanticParser(): boolean {\n return semanticAnalyzer !== null && buildASTFn !== null;\n}\n\n/**\n * Confidence threshold for using semantic parse results.\n */\nconst SEMANTIC_CONFIDENCE_THRESHOLD = 0.7;\n\n// =============================================================================\n// MULTILINGUAL PREPROCESSING\n// =============================================================================\n\n/**\n * Multilingual command aliases for preprocessing.\n * Maps non-ASCII keywords to English equivalents.\n */\nlet multilingualAliases: Record<string, string> = {};\nlet multilingualRegex: RegExp | null = null;\n\n/**\n * Configure multilingual aliases for preprocessing.\n * This allows compilation of non-ASCII keywords by translating them to English\n * before parsing with HybridParser.\n *\n * @example\n * ```typescript\n * setMultilingualAliases({\n * 'トグル': 'toggle',\n * '切り替え': 'toggle',\n * '追加': 'add',\n * 'alternar': 'toggle',\n * '토글': 'toggle',\n * });\n * ```\n */\nexport function setMultilingualAliases(aliases: Record<string, string>): void {\n multilingualAliases = { ...aliases };\n\n if (Object.keys(aliases).length > 0) {\n // Build regex pattern to match multilingual keywords\n const escapedKeys = Object.keys(aliases)\n .map(k => k.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\n .join('|');\n multilingualRegex = new RegExp(`(^|\\\\s)(${escapedKeys})(?=\\\\s|\\\\.|$)`, 'g');\n } else {\n multilingualRegex = null;\n }\n}\n\n/**\n * Clear multilingual aliases (for testing).\n */\nexport function clearMultilingualAliases(): void {\n multilingualAliases = {};\n multilingualRegex = null;\n}\n\n/**\n * Get currently configured multilingual aliases.\n */\nexport function getMultilingualAliases(): Record<string, string> {\n return { ...multilingualAliases };\n}\n\n/**\n * Preprocess code to replace non-ASCII keywords with English equivalents.\n * This is needed because HybridParser's tokenizer only accepts ASCII identifiers.\n */\nfunction preprocessMultilingual(code: string): string {\n if (!multilingualRegex) return code;\n\n return code.replace(multilingualRegex, (match, prefix, keyword) => {\n const english = multilingualAliases[keyword];\n return english ? prefix + english : match;\n });\n}\n\n// =============================================================================\n// SANITIZATION UTILITIES\n// =============================================================================\n\n/**\n * Sanitize a class name for safe interpolation into JavaScript string literals.\n * Only allows valid CSS class name characters.\n */\nfunction sanitizeClassName(name: string): string | null {\n // CSS class names: must start with letter, underscore, or hyphen\n // followed by letters, digits, underscores, or hyphens\n if (!/^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(name)) {\n return null; // Invalid class name - fall back to runtime\n }\n return name;\n}\n\n/**\n * Sanitize a CSS selector for safe interpolation into JavaScript string literals.\n * Escapes characters that could break out of string context.\n */\nfunction sanitizeSelector(selector: string): string {\n return selector\n .replace(/\\\\/g, '\\\\\\\\') // Escape backslashes first\n .replace(/'/g, \"\\\\'\") // Escape single quotes\n .replace(/\\n/g, '\\\\n') // Escape newlines\n .replace(/\\r/g, '\\\\r') // Escape carriage returns\n .replace(/\\0/g, ''); // Remove null bytes\n}\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface CompiledHandler {\n /** Unique handler ID (h0, h1, etc.) */\n id: string;\n\n /** Event name (click, input, etc.) */\n event: string;\n\n /** Event modifiers */\n modifiers: {\n prevent?: boolean;\n stop?: boolean;\n once?: boolean;\n debounce?: number;\n throttle?: number;\n };\n\n /** Compiled JavaScript code */\n code: string;\n\n /** Whether handler needs the mini-evaluator for dynamic expressions */\n needsEvaluator: boolean;\n\n /** Original hyperscript for debugging */\n original: string;\n}\n\nexport interface CompilationResult {\n /** All compiled handlers */\n handlers: CompiledHandler[];\n\n /** Whether any handler needs the expression evaluator */\n needsEvaluator: boolean;\n\n /** Whether any handler needs locals support */\n needsLocals: boolean;\n\n /** Whether any handler needs globals support */\n needsGlobals: boolean;\n\n /** Warnings during compilation */\n warnings: string[];\n\n /** Scripts that couldn't be compiled (need full runtime) */\n fallbacks: Array<{ id: string; script: string; reason: string }>;\n}\n\n// =============================================================================\n// COMPILER\n// =============================================================================\n\n/**\n * Simple hash function for generating stable handler IDs.\n * Uses djb2 algorithm - fast and produces good distribution.\n */\nfunction hashScript(script: string): string {\n let hash = 5381;\n for (let i = 0; i < script.length; i++) {\n hash = ((hash << 5) + hash) ^ script.charCodeAt(i);\n }\n // Convert to base36 for shorter IDs, take first 4 chars\n return Math.abs(hash).toString(36).slice(0, 4);\n}\n\n// Track used IDs to handle collisions\nconst usedIds = new Set<string>();\n\n/**\n * Reset compiler state (for testing and between builds)\n */\nexport function resetCompiler(): void {\n usedIds.clear();\n}\n\n/**\n * Generate a semantic handler ID based on event, command, and content hash.\n * Format: {event}_{command}_{hash}\n * Example: click_toggle_3a2b\n */\nfunction generateHandlerId(event: string, command: string, script: string): string {\n const hash = hashScript(script);\n let id = `${event}_${command}_${hash}`;\n\n // Handle unlikely hash collisions by appending a suffix\n let suffix = 0;\n while (usedIds.has(id)) {\n id = `${event}_${command}_${hash}${suffix++}`;\n }\n\n usedIds.add(id);\n return id;\n}\n\n/**\n * Compile options for multilingual support.\n */\nexport interface CompileOptions {\n /** Language code (ISO 639-1). Defaults to 'en'. */\n language?: string;\n /** Enable debug logging. */\n debug?: boolean;\n}\n\n/**\n * Compile a hyperscript string to JavaScript.\n *\n * For non-English languages, uses the semantic parser (if available)\n * to translate the input to an AST before compilation.\n *\n * @param script - The hyperscript code to compile\n * @param options - Compilation options including language\n * @returns Compiled handler or null if compilation failed\n */\nexport function compile(script: string, options: CompileOptions = {}): CompiledHandler | null {\n const { language = 'en', debug = false } = options;\n\n try {\n let ast: ASTNode;\n\n // For non-English, try semantic parser first\n if (language !== 'en' && semanticAnalyzer && buildASTFn) {\n if (semanticAnalyzer.supportsLanguage(language)) {\n const result = semanticAnalyzer.analyze(script, language);\n\n if (result.node && result.confidence >= SEMANTIC_CONFIDENCE_THRESHOLD) {\n const { ast: builtAST, warnings } = buildASTFn(result.node);\n\n if (debug && warnings.length > 0) {\n console.log(`[hyperfixi] Semantic AST warnings for \"${script}\":`, warnings);\n }\n\n ast = builtAST;\n\n if (debug) {\n console.log(\n `[hyperfixi] Compiled ${language}: \"${script}\" (confidence: ${result.confidence.toFixed(2)})`\n );\n }\n } else {\n // Semantic parsing failed or low confidence\n if (debug) {\n const reason =\n result.errors?.join(', ') || `low confidence (${result.confidence.toFixed(2)})`;\n console.log(`[hyperfixi] Semantic parse failed for \"${script}\": ${reason}`);\n }\n return null;\n }\n } else {\n // Language not supported by semantic parser\n if (debug) {\n console.log(`[hyperfixi] Language \"${language}\" not supported by semantic parser`);\n }\n return null;\n }\n } else if (language !== 'en') {\n // Non-English but no semantic parser available\n if (debug) {\n console.log(\n `[hyperfixi] Semantic parser not available for \"${language}\". Install @lokascript/semantic and call setSemanticParser().`\n );\n }\n return null;\n } else {\n // English or no semantic parser - use HybridParser with preprocessing\n // Preprocessing translates non-ASCII keywords to English before parsing\n const preprocessedScript = preprocessMultilingual(script);\n const parser = new HybridParser(preprocessedScript);\n ast = parser.parse();\n }\n\n return compileAST(ast, script);\n } catch (error) {\n if (debug) {\n console.warn(`[hyperfixi] Failed to compile: ${script}`, error);\n }\n return null;\n }\n}\n\n/**\n * Extract the primary command name from the AST body.\n * Used for generating semantic handler IDs.\n */\nfunction extractPrimaryCommand(body: ASTNode[]): string {\n if (body.length === 0) return 'handler';\n\n const first = body[0];\n if (first.type === 'command') {\n return (first as CommandNode).name || 'cmd';\n }\n return first.type || 'handler';\n}\n\n/**\n * Compile an AST node to a handler\n */\nfunction compileAST(ast: ASTNode, original: string): CompiledHandler | null {\n if (ast.type !== 'event') {\n // Non-event scripts (like behaviors) need full runtime\n return null;\n }\n\n const eventNode = ast as EventNode;\n const event = eventNode.event;\n const modifiers = eventNode.modifiers || {};\n const body = eventNode.body || [];\n\n const { code, needsEvaluator, needsLocals, needsGlobals } = compileBody(body);\n\n if (code === null || code === '') {\n // Body couldn't be compiled or is empty\n return null;\n }\n\n // Generate semantic ID: {event}_{command}_{hash}\n const command = extractPrimaryCommand(body);\n const id = generateHandlerId(event, command, original);\n\n return {\n id,\n event,\n modifiers: {\n prevent: modifiers.prevent,\n stop: modifiers.stop,\n once: modifiers.once,\n debounce: modifiers.debounce,\n throttle: modifiers.throttle,\n },\n code,\n needsEvaluator: needsEvaluator || needsLocals || needsGlobals,\n original,\n };\n}\n\ninterface BodyCompilation {\n code: string | null;\n needsEvaluator: boolean;\n needsLocals: boolean;\n needsGlobals: boolean;\n}\n\n/**\n * Compile a command sequence to JavaScript\n */\nfunction compileBody(nodes: ASTNode[]): BodyCompilation {\n const statements: string[] = [];\n let needsEvaluator = false;\n let needsLocals = false;\n let needsGlobals = false;\n\n for (const node of nodes) {\n const result = compileNode(node);\n if (result === null) {\n return { code: null, needsEvaluator: false, needsLocals: false, needsGlobals: false };\n }\n\n statements.push(result.code);\n needsEvaluator = needsEvaluator || result.needsEvaluator;\n needsLocals = needsLocals || result.needsLocals;\n needsGlobals = needsGlobals || result.needsGlobals;\n }\n\n return {\n code: statements.join('\\n'),\n needsEvaluator,\n needsLocals,\n needsGlobals,\n };\n}\n\ninterface NodeCompilation {\n code: string;\n needsEvaluator: boolean;\n needsLocals: boolean;\n needsGlobals: boolean;\n}\n\n/**\n * Compile a single AST node to JavaScript\n */\nfunction compileNode(node: ASTNode): NodeCompilation | null {\n if (node.type === 'command') {\n return compileCommand(node as CommandNode);\n }\n\n // Blocks (if, repeat, for, while, fetch) need runtime for now\n // Could be expanded later for simple cases\n return null;\n}\n\n/**\n * Compile a command to JavaScript\n */\nfunction compileCommand(cmd: CommandNode): NodeCompilation | null {\n const target = cmd.target ? compileTarget(cmd.target) : 'm';\n\n switch (cmd.name) {\n case 'toggle':\n return compileToggle(cmd.args, target);\n\n case 'add':\n return compileAdd(cmd.args, target);\n\n case 'remove':\n return compileRemove(cmd.args, target);\n\n case 'removeClass':\n return compileRemoveClass(cmd.args, target);\n\n case 'show':\n return {\n code: `${target}.style.display = ''`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n\n case 'hide':\n return {\n code: `${target}.style.display = 'none'`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n\n case 'focus':\n return {\n code: `${target}.focus()`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n\n case 'blur':\n return {\n code: `${target}.blur()`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n\n case 'log':\n return compileLog(cmd.args);\n\n case 'set':\n return compileSet(cmd.args);\n\n case 'increment':\n return compileIncrement(cmd.args);\n\n case 'decrement':\n return compileDecrement(cmd.args);\n\n case 'put':\n return compilePut(cmd.args, target, cmd.modifier);\n\n case 'send':\n case 'trigger':\n return compileTrigger(cmd.args, target);\n\n case 'wait':\n return compileWait(cmd.args);\n\n default:\n // Unknown command - can't compile\n return null;\n }\n}\n\n// =============================================================================\n// COMMAND COMPILERS\n// =============================================================================\n\nfunction compileToggle(args: ASTNode[], target: string): NodeCompilation | null {\n const className = extractClassName(args[0]);\n if (!className) return null;\n\n if (target === 'm') {\n return {\n code: `m.classList.toggle('${className}')`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return {\n code: `${target}.forEach(el => el.classList.toggle('${className}'))`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n}\n\nfunction compileAdd(args: ASTNode[], target: string): NodeCompilation | null {\n const className = extractClassName(args[0]);\n if (!className) return null;\n\n if (target === 'm') {\n return {\n code: `m.classList.add('${className}')`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return {\n code: `${target}.forEach(el => el.classList.add('${className}'))`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n}\n\nfunction compileRemove(args: ASTNode[], target: string): NodeCompilation | null {\n // If no args, remove the element itself\n if (!args || args.length === 0) {\n return {\n code: `${target}.remove()`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n // Otherwise remove a class\n const className = extractClassName(args[0]);\n if (!className) return null;\n\n if (target === 'm') {\n return {\n code: `m.classList.remove('${className}')`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return {\n code: `${target}.forEach(el => el.classList.remove('${className}'))`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n}\n\nfunction compileRemoveClass(args: ASTNode[], target: string): NodeCompilation | null {\n const className = extractClassName(args[0]);\n if (!className) return null;\n\n if (target === 'm') {\n return {\n code: `m.classList.remove('${className}')`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return {\n code: `${target}.forEach(el => el.classList.remove('${className}'))`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n}\n\nfunction compileLog(args: ASTNode[]): NodeCompilation | null {\n const compiled = args.map(compileExpression).filter(Boolean);\n if (compiled.length !== args.length) {\n // Some args couldn't be compiled\n return {\n code: `console.log(${compiled.join(', ')})`,\n needsEvaluator: true,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return {\n code: `console.log(${compiled.join(', ')})`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n}\n\nfunction compileSet(args: ASTNode[]): NodeCompilation | null {\n if (args.length < 2) return null;\n\n const [target, value] = args;\n const compiledValue = compileExpression(value);\n if (!compiledValue) return null;\n\n // Local variable (:varName)\n if (target.type === 'variable') {\n const varNode = target as VariableNode;\n if (varNode.scope === 'local') {\n const varName = varNode.name.slice(1);\n return {\n code: `L.${varName} = ${compiledValue}`,\n needsEvaluator: false,\n needsLocals: true,\n needsGlobals: false,\n };\n }\n // Global variable ($varName)\n if (varNode.scope === 'global') {\n const varName = varNode.name.slice(1);\n return {\n code: `G.${varName} = ${compiledValue}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: true,\n };\n }\n }\n\n // Property assignment (element's property)\n if (target.type === 'possessive') {\n const possNode = target as PossessiveNode;\n const obj = compileExpression(possNode.object);\n const prop = possNode.property;\n if (!obj) return null;\n\n // Style property (*opacity, *color, etc.)\n if (prop.startsWith('*')) {\n const styleProp = prop.slice(1);\n return {\n code: `${obj}.style.${styleProp} = ${compiledValue}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return {\n code: `${obj}.${prop} = ${compiledValue}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n if (target.type === 'member') {\n const memNode = target as MemberNode;\n const obj = compileExpression(memNode.object);\n const prop = typeof memNode.property === 'string' ? memNode.property : null;\n if (!obj || !prop) return null;\n\n // Style property (*opacity, *color, etc.)\n if (prop.startsWith('*')) {\n const styleProp = prop.slice(1);\n return {\n code: `${obj}.style.${styleProp} = ${compiledValue}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return {\n code: `${obj}.${prop} = ${compiledValue}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return null;\n}\n\nfunction compileIncrement(args: ASTNode[]): NodeCompilation | null {\n if (args.length < 1) return null;\n\n const target = args[0];\n const amount = args.length > 1 ? compileExpression(args[1]) : '1';\n\n if (target.type === 'variable') {\n const varNode = target as VariableNode;\n if (varNode.scope === 'local') {\n const varName = varNode.name.slice(1);\n return {\n code: `L.${varName} = (L.${varName} || 0) + ${amount}`,\n needsEvaluator: false,\n needsLocals: true,\n needsGlobals: false,\n };\n }\n if (varNode.scope === 'global') {\n const varName = varNode.name.slice(1);\n return {\n code: `G.${varName} = (G.${varName} || 0) + ${amount}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: true,\n };\n }\n }\n\n // Element textContent\n const compiled = compileExpression(target);\n if (compiled) {\n return {\n code: `${compiled}.textContent = (parseFloat(${compiled}.textContent) || 0) + ${amount}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return null;\n}\n\nfunction compileDecrement(args: ASTNode[]): NodeCompilation | null {\n if (args.length < 1) return null;\n\n const target = args[0];\n const amount = args.length > 1 ? compileExpression(args[1]) : '1';\n\n if (target.type === 'variable') {\n const varNode = target as VariableNode;\n if (varNode.scope === 'local') {\n const varName = varNode.name.slice(1);\n return {\n code: `L.${varName} = (L.${varName} || 0) - ${amount}`,\n needsEvaluator: false,\n needsLocals: true,\n needsGlobals: false,\n };\n }\n if (varNode.scope === 'global') {\n const varName = varNode.name.slice(1);\n return {\n code: `G.${varName} = (G.${varName} || 0) - ${amount}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: true,\n };\n }\n }\n\n // Element textContent\n const compiled = compileExpression(target);\n if (compiled) {\n return {\n code: `${compiled}.textContent = (parseFloat(${compiled}.textContent) || 0) - ${amount}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return null;\n}\n\nfunction compilePut(args: ASTNode[], target: string, modifier?: string): NodeCompilation | null {\n if (args.length < 1) return null;\n\n const content = compileExpression(args[0]);\n if (!content) return null;\n\n const mod = modifier || 'into';\n\n switch (mod) {\n case 'into':\n return {\n code: `${target}.innerHTML = ${content}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n case 'before':\n return {\n code: `${target}.insertAdjacentHTML('beforebegin', ${content})`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n case 'after':\n return {\n code: `${target}.insertAdjacentHTML('afterend', ${content})`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n case 'at start of':\n return {\n code: `${target}.insertAdjacentHTML('afterbegin', ${content})`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n case 'at end of':\n return {\n code: `${target}.insertAdjacentHTML('beforeend', ${content})`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n default:\n return {\n code: `${target}.innerHTML = ${content}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n}\n\nfunction compileTrigger(args: ASTNode[], target: string): NodeCompilation | null {\n if (args.length < 1) return null;\n\n const eventName = compileExpression(args[0]);\n if (!eventName) return null;\n\n return {\n code: `${target}.dispatchEvent(new CustomEvent(${eventName}, { bubbles: true }))`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n}\n\nfunction compileWait(args: ASTNode[]): NodeCompilation | null {\n if (args.length < 1) return null;\n\n const duration = compileExpression(args[0]);\n if (!duration) return null;\n\n return {\n code: `await new Promise(r => setTimeout(r, ${duration}))`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n}\n\n// =============================================================================\n// EXPRESSION COMPILER\n// =============================================================================\n\nfunction compileExpression(node: ASTNode): string | null {\n if (!node) return null;\n\n switch (node.type) {\n case 'literal': {\n const litNode = node as LiteralNode;\n return JSON.stringify(litNode.value);\n }\n\n case 'identifier': {\n const idNode = node as IdentifierNode;\n const val = idNode.value;\n if (val === 'me' || val === 'my') return 'm';\n if (val === 'you') return 'y';\n if (val === 'it') return 'it';\n if (val === 'event') return 'e';\n if (val === 'body') return 'document.body';\n if (val === 'document') return 'document';\n if (val === 'window') return 'window';\n return val;\n }\n\n case 'variable': {\n const varNode = node as VariableNode;\n const name = varNode.name.slice(1);\n return varNode.scope === 'local' ? `L.${name}` : `G.${name}`;\n }\n\n case 'selector': {\n const selNode = node as SelectorNode;\n const sanitized = sanitizeSelector(selNode.value);\n return `document.querySelector('${sanitized}')`;\n }\n\n case 'possessive': {\n const possNode = node as PossessiveNode;\n const obj = compileExpression(possNode.object);\n const prop = possNode.property;\n if (!obj) return null;\n\n // Style property\n if (prop.startsWith('*')) {\n return `${obj}.style.${prop.slice(1)}`;\n }\n return `${obj}.${prop}`;\n }\n\n case 'member': {\n const memNode = node as MemberNode;\n const obj = compileExpression(memNode.object);\n const prop = typeof memNode.property === 'string' ? memNode.property : null;\n if (!obj || !prop) return null;\n\n // Style property\n if (prop.startsWith('*')) {\n return `${obj}.style.${prop.slice(1)}`;\n }\n return `${obj}.${prop}`;\n }\n\n case 'binary': {\n const binNode = node as BinaryNode;\n const left = compileExpression(binNode.left);\n const right = compileExpression(binNode.right);\n if (!left || !right) return null;\n\n const op = binNode.operator;\n switch (op) {\n case '+':\n case '-':\n case '*':\n case '/':\n case '%':\n return `(${left} ${op} ${right})`;\n case '==':\n case 'is':\n return `(${left} == ${right})`;\n case '!=':\n case 'is not':\n return `(${left} != ${right})`;\n case '<':\n case '>':\n case '<=':\n case '>=':\n return `(${left} ${op} ${right})`;\n case 'and':\n case '&&':\n return `(${left} && ${right})`;\n case 'or':\n case '||':\n return `(${left} || ${right})`;\n case 'has': {\n // Special case: element has .class\n const rightSel = binNode.right as SelectorNode;\n const className = rightSel.value?.slice(1) || '';\n const sanitizedClass = sanitizeClassName(className);\n if (!sanitizedClass) return null; // Invalid class name - fall back to runtime\n return `${left}.classList.contains('${sanitizedClass}')`;\n }\n default:\n return null;\n }\n }\n\n case 'call': {\n const callNode = node as CallNode;\n const callee = callNode.callee;\n const args = (callNode.args || []).map(compileExpression);\n if (args.some((a: string | null) => a === null)) return null;\n\n if (callee.type === 'member' || callee.type === 'possessive') {\n const memCallee = callee as MemberNode | PossessiveNode;\n const obj = compileExpression(memCallee.object);\n const prop = typeof memCallee.property === 'string' ? memCallee.property : null;\n if (!obj || !prop) return null;\n return `${obj}.${prop}(${args.join(', ')})`;\n }\n\n const fn = compileExpression(callee);\n if (!fn) return null;\n return `${fn}(${args.join(', ')})`;\n }\n\n case 'positional': {\n const posNode = node as PositionalNode;\n const position = posNode.position;\n const target = posNode.target;\n\n switch (position) {\n case 'first':\n if (target?.type === 'selector') {\n const selNode = target as SelectorNode;\n const sanitized = sanitizeSelector(selNode.value);\n return `document.querySelector('${sanitized}')`;\n }\n return null; // Arrays need runtime\n\n case 'last':\n if (target?.type === 'selector') {\n const selNode = target as SelectorNode;\n const sanitized = sanitizeSelector(selNode.value);\n return `(()=>{const e=document.querySelectorAll('${sanitized}');return e[e.length-1]})()`;\n }\n return null; // Arrays need runtime\n\n case 'next':\n return 'm.nextElementSibling';\n\n case 'previous':\n return 'm.previousElementSibling';\n\n case 'closest':\n if (target?.type === 'selector') {\n const selNode = target as SelectorNode;\n const sanitized = sanitizeSelector(selNode.value);\n return `m.closest('${sanitized}')`;\n }\n return null;\n\n case 'parent':\n return 'm.parentElement';\n\n default:\n return null;\n }\n }\n\n default:\n return null;\n }\n}\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction compileTarget(target: ASTNode): string {\n if (target.type === 'identifier') {\n const idNode = target as IdentifierNode;\n if (idNode.value === 'me' || idNode.value === 'my') return 'm';\n if (idNode.value === 'you') return 'y';\n }\n\n if (target.type === 'selector') {\n const selNode = target as SelectorNode;\n const sanitized = sanitizeSelector(selNode.value);\n return `document.querySelectorAll('${sanitized}')`;\n }\n\n const compiled = compileExpression(target);\n return compiled || 'm';\n}\n\nfunction extractClassName(node: ASTNode): string | null {\n if (!node) return null;\n\n if (node.type === 'selector') {\n const selNode = node as SelectorNode;\n const val = selNode.value;\n const rawClass = val.startsWith('.') ? val.slice(1) : val;\n // Sanitize class name before returning\n return sanitizeClassName(rawClass);\n }\n\n if (node.type === 'literal' || node.type === 'string') {\n const litNode = node as LiteralNode;\n const val = litNode.value;\n if (typeof val === 'string') {\n const rawClass = val.startsWith('.') ? val.slice(1) : val;\n return sanitizeClassName(rawClass);\n }\n }\n\n if (node.type === 'identifier') {\n const idNode = node as IdentifierNode;\n return sanitizeClassName(idNode.value);\n }\n\n return null;\n}\n","/**\n * Compiled Generator\n *\n * Generates minimal runtime code from compiled handlers.\n * No parser needed - all hyperscript is pre-compiled to JS.\n *\n * Target: ~500 bytes gzipped for simple handlers\n */\n\nimport type { CompiledHandler } from './compiler';\n\nexport interface CompiledBundleOptions {\n /** Compiled handlers */\n handlers: CompiledHandler[];\n\n /** Whether any handler needs locals */\n needsLocals: boolean;\n\n /** Whether any handler needs globals */\n needsGlobals: boolean;\n\n /** Global variable name */\n globalName?: string;\n\n /** Enable htmx integration */\n htmx?: boolean;\n\n /** Include source maps / debug info */\n debug?: boolean;\n}\n\n/**\n * Generate a source map table showing original hyperscript → compiled handler ID.\n * Included in bundle header when debug mode is enabled.\n */\nfunction generateSourceMapTable(handlers: CompiledHandler[]): string {\n if (handlers.length === 0) return '';\n\n const lines = [\n ' *',\n ' * Handler Source Map:',\n ' * ┌─────────────────────────────────────────────────────────────────┐',\n ];\n\n for (const h of handlers) {\n const original = h.original.replace(/\\n/g, ' ').slice(0, 40);\n const truncated = original.length < h.original.length ? original + '...' : original;\n lines.push(` * │ ${h.id.padEnd(20)} ← ${truncated.padEnd(40)} │`);\n }\n\n lines.push(' * └─────────────────────────────────────────────────────────────────┘');\n lines.push(' *');\n\n return lines.join('\\n');\n}\n\n/**\n * Generate minimal runtime bundle from compiled handlers\n */\nexport function generateCompiledBundle(options: CompiledBundleOptions): string {\n const {\n handlers,\n needsLocals,\n needsGlobals,\n globalName = 'hyperfixi',\n htmx = false,\n debug = false,\n } = options;\n\n // Generate handler map with optional debug comments\n const handlerEntries = handlers.map(h => {\n const isAsync = h.code.includes('await');\n const fn = isAsync ? `async(m,e,y)=>{${h.code}}` : `(m,e,y)=>{${h.code}}`;\n\n if (debug) {\n // Include original hyperscript as comment for debugging\n const escapedOriginal = h.original.replace(/\\*/g, '\\\\*').replace(/\\n/g, ' ');\n return `\\n /* ${escapedOriginal} */\\n ${h.id}:${fn}`;\n }\n return `${h.id}:${fn}`;\n });\n\n // Generate event registration for each handler\n const registrations = handlers.map(h => {\n const modsCode = generateModifiersCode(h);\n return ` case '${h.id}': r(el,'${h.event}',H.${h.id}${modsCode}); break;`;\n });\n\n const localsCode = needsLocals ? 'const L={};' : '';\n const globalsCode = needsGlobals ? 'const G={};' : '';\n\n // Generate source map table for debug mode\n const sourceMapTable = debug ? generateSourceMapTable(handlers) : '';\n\n return `/**\n * HyperFixi Compiled Bundle (Auto-Generated)\n *\n * Pre-compiled hyperscript - no runtime parser needed!\n * Handlers: ${handlers.length}\n *\n * DO NOT EDIT - Regenerate with build.\n${sourceMapTable} */\n\n${localsCode}${globalsCode}\nconst H={${handlerEntries.join(',')}};\n\nfunction r(el,ev,fn${hasModifiers(handlers) ? ',m' : ''}){\n let h=e=>fn(el,e,e.target);\n${generateModifierWrappers(handlers)}\n el.addEventListener(ev,h${hasOnce(handlers) ? ',{once:m?.o}' : ''});\n}\n\nfunction init(root=document){\n root.querySelectorAll('[data-h]').forEach(el=>{\n switch(el.dataset.h){\n${registrations.join('\\n')}\n }\n });\n}\n\n${htmx ? `document.addEventListener('htmx:afterSettle',e=>init(e.detail?.target));` : ''}\n\nconst api={\n version:'1.0.0-compiled',\n commands:${JSON.stringify(handlers.map(h => h.id))},\n init,\n process:init,\n};\n\nif(typeof window!=='undefined'){\n window.${globalName}=api;\n window._hyperscript=api;\n document.readyState==='loading'\n ?document.addEventListener('DOMContentLoaded',()=>init())\n :init();\n}\n\nexport default api;\nexport{api,init};\n`;\n}\n\n/**\n * Generate modifiers code for a handler registration\n */\nfunction generateModifiersCode(h: CompiledHandler): string {\n const mods: string[] = [];\n\n if (h.modifiers.prevent) mods.push('p:1');\n if (h.modifiers.stop) mods.push('s:1');\n if (h.modifiers.once) mods.push('o:1');\n if (h.modifiers.debounce) mods.push(`d:${h.modifiers.debounce}`);\n if (h.modifiers.throttle) mods.push(`t:${h.modifiers.throttle}`);\n\n if (mods.length === 0) return '';\n return `,{${mods.join(',')}}`;\n}\n\n/**\n * Check if any handler has modifiers\n */\nfunction hasModifiers(handlers: CompiledHandler[]): boolean {\n return handlers.some(\n h =>\n h.modifiers.prevent ||\n h.modifiers.stop ||\n h.modifiers.once ||\n h.modifiers.debounce ||\n h.modifiers.throttle\n );\n}\n\n/**\n * Check if any handler has .once modifier\n */\nfunction hasOnce(handlers: CompiledHandler[]): boolean {\n return handlers.some(h => h.modifiers.once);\n}\n\n/**\n * Generate modifier wrapper code\n */\nfunction generateModifierWrappers(handlers: CompiledHandler[]): string {\n const lines: string[] = [];\n\n if (handlers.some(h => h.modifiers.prevent || h.modifiers.stop)) {\n lines.push(\n ` if(m?.p||m?.s){const _h=h;h=e=>{m.p&&e.preventDefault();m.s&&e.stopPropagation();_h(e.currentTarget,e,e.target)};}`\n );\n }\n\n if (handlers.some(h => h.modifiers.debounce)) {\n lines.push(\n ` if(m?.d){let t;const _h=h;h=e=>{clearTimeout(t);t=setTimeout(()=>_h(e.currentTarget,e,e.target),m.d)};}`\n );\n }\n\n if (handlers.some(h => h.modifiers.throttle)) {\n lines.push(\n ` if(m?.t){let l=0;const _h=h;h=e=>{const n=Date.now();if(n-l>=m.t){l=n;_h(e.currentTarget,e,e.target)}};}`\n );\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Generate the HTML transformer output\n *\n * Transforms: <button _=\"on click toggle .active\">\n * To: <button data-h=\"click_toggle_3a2b\">\n */\nexport function generateTransformMap(handlers: CompiledHandler[]): Map<string, string> {\n const map = new Map<string, string>();\n\n for (const h of handlers) {\n map.set(h.original, h.id);\n }\n\n return map;\n}\n\n/**\n * Handler manifest entry for debugging\n */\nexport interface HandlerManifestEntry {\n /** Semantic handler ID (e.g., click_toggle_3a2b) */\n id: string;\n /** Event that triggers this handler */\n event: string;\n /** Primary command */\n command: string;\n /** Original hyperscript source */\n original: string;\n /** Compiled JavaScript code */\n compiled: string;\n /** Event modifiers */\n modifiers: {\n prevent?: boolean;\n stop?: boolean;\n once?: boolean;\n debounce?: number;\n throttle?: number;\n };\n}\n\n/**\n * Generate a JSON manifest for debugging.\n * Can be written to a separate file or used in devtools.\n *\n * @example\n * // In vite plugin:\n * const manifest = generateManifest(handlers);\n * fs.writeFileSync('hyperfixi-manifest.json', JSON.stringify(manifest, null, 2));\n */\nexport function generateManifest(handlers: CompiledHandler[]): HandlerManifestEntry[] {\n return handlers.map(h => {\n // Extract command from semantic ID (click_toggle_3a2b → toggle)\n const parts = h.id.split('_');\n const command = parts.length >= 2 ? parts[1] : 'unknown';\n\n return {\n id: h.id,\n event: h.event,\n command,\n original: h.original,\n compiled: h.code,\n modifiers: h.modifiers,\n };\n });\n}\n\n/**\n * Generate a human-readable debug report.\n * Useful for console output or log files.\n */\nexport function generateDebugReport(handlers: CompiledHandler[]): string {\n const lines = [\n '╔══════════════════════════════════════════════════════════════════╗',\n '║ HyperFixi Compiled Handlers Debug Report ║',\n '╠══════════════════════════════════════════════════════════════════╣',\n '',\n ];\n\n for (const h of handlers) {\n lines.push(`┌── ${h.id} ──────────────────────────────────────────────`);\n lines.push(`│ Event: ${h.event}`);\n lines.push(`│ Original: ${h.original}`);\n lines.push(`│ Compiled: ${h.code}`);\n if (Object.values(h.modifiers).some(Boolean)) {\n const mods = Object.entries(h.modifiers)\n .filter(([, v]) => v)\n .map(([k, v]) => `${k}=${v}`)\n .join(', ');\n lines.push(`│ Modifiers: ${mods}`);\n }\n lines.push('└─────────────────────────────────────────────────────────────');\n lines.push('');\n }\n\n lines.push('╚══════════════════════════════════════════════════════════════════╝');\n\n return lines.join('\\n');\n}\n","/**\n * HTML Transformer\n *\n * Transforms HTML files to replace _=\"...\" attributes with data-h=\"...\" attributes\n * for compile mode.\n */\n\nimport type { CompiledHandler } from './compiler';\n\nexport interface TransformResult {\n /** Transformed HTML code */\n code: string;\n\n /** Whether the HTML was modified */\n modified: boolean;\n\n /** Scripts that were found but couldn't be compiled */\n fallbacks: string[];\n}\n\n/**\n * Transform HTML to use compiled handler IDs\n */\nexport function transformHTML(\n html: string,\n handlerMap: Map<string, string>,\n fallbackScripts: Set<string>\n): TransformResult {\n let modified = false;\n const fallbacks: string[] = [];\n\n // Regex patterns for _=\"...\" attributes\n const patterns = [\n /(\\s)_\\s*=\\s*\"([^\"]+)\"/g, // _=\"...\"\n /(\\s)_\\s*=\\s*'([^']+)'/g, // _='...'\n /(\\s)_\\s*=\\s*`([^`]+)`/g, // _=`...`\n ];\n\n let result = html;\n\n for (const pattern of patterns) {\n result = result.replace(pattern, (match, whitespace, script) => {\n const handlerId = handlerMap.get(script);\n\n if (handlerId) {\n modified = true;\n return `${whitespace}data-h=\"${handlerId}\"`;\n }\n\n // Script couldn't be compiled - check if it's a known fallback\n if (fallbackScripts.has(script)) {\n fallbacks.push(script);\n // Keep original for fallback runtime\n return match;\n }\n\n // Unknown script - keep original but warn\n fallbacks.push(script);\n return match;\n });\n }\n\n return {\n code: result,\n modified,\n fallbacks,\n };\n}\n\n/**\n * Build a handler map from compiled handlers\n */\nexport function buildHandlerMap(handlers: CompiledHandler[]): Map<string, string> {\n const map = new Map<string, string>();\n\n for (const handler of handlers) {\n map.set(handler.original, handler.id);\n }\n\n return map;\n}\n\n/**\n * Extract all hyperscript snippets from HTML\n */\nexport function extractScripts(html: string): string[] {\n const scripts: string[] = [];\n\n const patterns = [/_\\s*=\\s*\"([^\"]+)\"/g, /_\\s*=\\s*'([^']+)'/g, /_\\s*=\\s*`([^`]+)`/g];\n\n for (const pattern of patterns) {\n let match;\n while ((match = pattern.exec(html))) {\n scripts.push(match[1]);\n }\n }\n\n return scripts;\n}\n","/**\n * @lokascript/vite-plugin\n *\n * Zero-config Vite plugin that automatically generates minimal HyperFixi bundles\n * based on detected hyperscript usage in your source files.\n *\n * @example\n * ```javascript\n * // vite.config.js\n * import { hyperfixi } from '@lokascript/vite-plugin';\n *\n * export default {\n * plugins: [hyperfixi()]\n * };\n * ```\n *\n * The plugin automatically:\n * - Scans HTML, Vue, Svelte, JSX/TSX files for `_=\"...\"` attributes\n * - Detects which commands, blocks, and expressions are used\n * - Generates a minimal bundle with only needed features\n * - Re-generates on file changes (HMR)\n *\n * @example\n * ```javascript\n * // With options\n * hyperfixi({\n * extraCommands: ['fetch', 'put'], // Always include these commands\n * htmx: true, // Enable htmx integration\n * debug: true, // Enable verbose logging\n * })\n * ```\n *\n * @example\n * ```javascript\n * // Compile mode for smallest bundles (~500 bytes)\n * hyperfixi({\n * mode: 'compile', // Pre-compile hyperscript to JS\n * debug: true,\n * })\n * ```\n */\n\nimport type { Plugin, ViteDevServer, HmrContext } from 'vite';\nimport type { HyperfixiPluginOptions, AggregatedUsage } from './types';\nimport { Scanner } from './scanner';\nimport { Aggregator } from './aggregator';\nimport { Generator } from './generator';\nimport { compile, resetCompiler, setMultilingualAliases, type CompiledHandler } from './compiler';\nimport { generateCompiledBundle } from './compiled-generator';\nimport { transformHTML, extractScripts } from './html-transformer';\nimport { getMultilingualCommandAliases } from './semantic-integration';\nimport type { SupportedLanguage } from './language-keywords';\n\n// Re-export types\nexport type {\n HyperfixiPluginOptions,\n FileUsage,\n AggregatedUsage,\n CustomLanguageKeywords,\n} from './types';\nexport type { CompiledHandler, CompileOptions } from './compiler';\n\n// Re-export semantic parser integration functions for multilingual compile mode\nexport { setSemanticParser, clearSemanticParser, hasSemanticParser } from './compiler';\n\n// Re-export language keyword utilities for customization\nexport {\n SUPPORTED_LANGUAGES,\n REGIONS,\n registerCustomKeywords,\n getKeywordsForLanguage,\n isNonLatinLanguage,\n getAllLanguageCodes,\n clearCustomKeywords,\n detectLanguages,\n getOptimalRegion,\n} from './language-keywords';\nexport type { SupportedLanguage } from './language-keywords';\n\n// Virtual module ID\nconst VIRTUAL_MODULE_ID = 'virtual:hyperfixi';\nconst RESOLVED_VIRTUAL_MODULE_ID = '\\0' + VIRTUAL_MODULE_ID;\n\n// Import aliases that resolve to the virtual module\nconst IMPORT_ALIASES = ['hyperfixi', '@lokascript/core', 'virtual:hyperfixi'];\n\n/**\n * Create the HyperFixi Vite plugin\n *\n * @param options Plugin options\n * @returns Vite plugin\n */\nexport function hyperfixi(options: HyperfixiPluginOptions = {}): Plugin {\n const mode = options.mode ?? 'interpret';\n const scanner = new Scanner(options);\n const aggregator = new Aggregator();\n const generator = new Generator(options);\n\n let server: ViteDevServer | null = null;\n let cachedBundle: string | null = null;\n let lastUsageHash = '';\n let isDev = false;\n\n // Compile mode state\n const compiledHandlers: CompiledHandler[] = [];\n const handlerMap = new Map<string, string>(); // script -> handlerId\n const fallbackScripts = new Set<string>(); // Scripts that couldn't be compiled\n let needsLocals = false;\n let needsGlobals = false;\n\n /**\n * Compute a hash of the current usage for cache invalidation\n */\n function computeUsageHash(usage: AggregatedUsage): string {\n const commands = [...usage.commands].sort().join(',');\n const blocks = [...usage.blocks].sort().join(',');\n const languages = [...usage.detectedLanguages].sort().join(',');\n return `${commands}|${blocks}|${usage.positional}|${languages}`;\n }\n\n /**\n * Invalidate the virtual module in dev server\n */\n function invalidateVirtualModule(): void {\n if (!server) return;\n\n const mod = server.moduleGraph.getModuleById(RESOLVED_VIRTUAL_MODULE_ID);\n if (mod) {\n server.moduleGraph.invalidateModule(mod);\n server.ws.send({ type: 'full-reload' });\n\n if (options.debug) {\n console.log('[hyperfixi] Virtual module invalidated, triggering reload');\n }\n }\n }\n\n /**\n * Compile a hyperscript snippet and add to handlers\n */\n function compileScript(script: string): string | null {\n // Check if already compiled\n if (handlerMap.has(script)) {\n return handlerMap.get(script)!;\n }\n\n // Check if known fallback\n if (fallbackScripts.has(script)) {\n return null;\n }\n\n // Try to compile\n const handler = compile(script);\n\n if (handler) {\n compiledHandlers.push(handler);\n handlerMap.set(script, handler.id);\n\n if (handler.needsEvaluator) {\n // Check if needs locals/globals based on code\n if (handler.code.includes('L.')) needsLocals = true;\n if (handler.code.includes('G.')) needsGlobals = true;\n }\n\n if (options.debug) {\n console.log(`[hyperfixi] Compiled: \"${script}\" -> ${handler.id}`);\n }\n\n return handler.id;\n }\n\n // Couldn't compile - mark as fallback\n fallbackScripts.add(script);\n\n if (options.debug) {\n console.log(`[hyperfixi] Fallback (not compilable): \"${script}\"`);\n }\n\n return null;\n }\n\n /**\n * Generate the bundle code (interpret mode)\n */\n function generateInterpretBundle(): string {\n const usage = aggregator.getUsage();\n const usageHash = computeUsageHash(usage);\n\n // Return cached bundle if usage hasn't changed\n if (cachedBundle && usageHash === lastUsageHash) {\n return cachedBundle;\n }\n\n // In dev mode, optionally use fallback bundle for faster rebuilds\n if (isDev && options.devFallback && options.devFallback !== 'auto') {\n cachedBundle = generator.generateDevFallback(options.devFallback);\n } else {\n cachedBundle = generator.generate(usage, options);\n }\n\n lastUsageHash = usageHash;\n\n if (options.debug) {\n const summary = aggregator.getSummary();\n console.log('[hyperfixi] Bundle generated:', summary);\n }\n\n return cachedBundle;\n }\n\n /**\n * Generate the bundle code (compile mode)\n */\n function generateCompiledBundleCode(): string {\n // Check if we have fallbacks that need the interpreter\n if (fallbackScripts.size > 0) {\n if (options.debug) {\n console.log(`[hyperfixi] ${fallbackScripts.size} scripts need interpreter fallback`);\n }\n // Fall back to interpret mode for this build\n return generateInterpretBundle();\n }\n\n const bundle = generateCompiledBundle({\n handlers: compiledHandlers,\n needsLocals,\n needsGlobals,\n globalName: options.globalName,\n htmx: options.htmx,\n debug: options.debug,\n });\n\n if (options.debug) {\n console.log(`[hyperfixi] Compiled bundle: ${compiledHandlers.length} handlers`);\n }\n\n return bundle;\n }\n\n /**\n * Generate the bundle code (dispatches to correct mode)\n */\n function generateBundle(): string {\n if (mode === 'compile') {\n return generateCompiledBundleCode();\n }\n return generateInterpretBundle();\n }\n\n return {\n name: 'vite-plugin-hyperfixi',\n enforce: 'pre' as const,\n\n /**\n * Configure plugin based on Vite mode\n */\n configResolved(config) {\n isDev = config.command === 'serve';\n\n if (options.debug) {\n console.log('[hyperfixi] Plugin initialized, mode:', isDev ? 'development' : 'production');\n }\n },\n\n /**\n * Store server reference and pre-scan HTML files for HMR\n */\n async configureServer(_server: ViteDevServer) {\n server = _server;\n\n // Pre-scan project to detect hyperscript before first request\n const cwd = _server.config.root;\n if (options.debug) {\n console.log('[hyperfixi] Pre-scanning project:', cwd);\n }\n\n const scannedFiles = await scanner.scanProject(cwd);\n aggregator.loadFromScan(scannedFiles);\n\n if (options.debug) {\n const summary = aggregator.getSummary();\n console.log('[hyperfixi] Pre-scan complete:', summary);\n }\n },\n\n /**\n * Resolve virtual module imports\n */\n resolveId(id: string) {\n if (IMPORT_ALIASES.includes(id)) {\n return RESOLVED_VIRTUAL_MODULE_ID;\n }\n return null;\n },\n\n /**\n * Load the virtual module with generated bundle\n */\n load(id: string) {\n if (id === RESOLVED_VIRTUAL_MODULE_ID) {\n return generateBundle();\n }\n return null;\n },\n\n /**\n * Scan files during transform for hyperscript usage\n */\n transform(code: string, id: string) {\n if (!scanner.shouldScan(id)) {\n return null;\n }\n\n // In compile mode, we compile scripts and transform HTML\n if (mode === 'compile' && !isDev) {\n // Extract and compile all scripts from this file\n const scripts = extractScripts(code);\n\n for (const script of scripts) {\n compileScript(script);\n }\n\n // Transform HTML to use data-h attributes\n const result = transformHTML(code, handlerMap, fallbackScripts);\n\n if (result.modified) {\n if (options.debug) {\n console.log(`[hyperfixi] Transformed: ${id.split('/').pop()}`);\n }\n return { code: result.code, map: null };\n }\n\n return null;\n }\n\n // Interpret mode: just scan for usage\n const usage = scanner.scan(code, id);\n const changed = aggregator.add(id, usage);\n\n // Invalidate virtual module if usage changed\n if (changed && server) {\n // Debounce invalidation slightly to batch multiple file changes\n setImmediate(() => {\n const currentHash = computeUsageHash(aggregator.getUsage());\n if (currentHash !== lastUsageHash) {\n invalidateVirtualModule();\n }\n });\n }\n\n return null; // Don't modify source files in interpret mode\n },\n\n /**\n * Handle file changes in HMR\n */\n async handleHotUpdate(ctx: HmrContext) {\n const { file, read } = ctx;\n\n // Check if a scanned file was changed\n if (scanner.shouldScan(file)) {\n try {\n // Read the updated file content and re-scan\n const content = await read();\n const usage = scanner.scan(content, file);\n const changed = aggregator.add(file, usage);\n\n if (options.debug) {\n console.log('[hyperfixi] HMR: Re-scanned', file.split('/').pop(), usage);\n }\n\n // Invalidate virtual module if usage changed\n if (changed) {\n const currentHash = computeUsageHash(aggregator.getUsage());\n if (currentHash !== lastUsageHash) {\n invalidateVirtualModule();\n }\n }\n } catch {\n // File was deleted, remove from aggregator\n if (aggregator.remove(file)) {\n invalidateVirtualModule();\n }\n }\n }\n\n return undefined;\n },\n\n /**\n * Scan entire project before production build\n */\n async buildStart() {\n if (!isDev) {\n // Reset compile mode state\n if (mode === 'compile') {\n resetCompiler();\n compiledHandlers.length = 0;\n handlerMap.clear();\n fallbackScripts.clear();\n needsLocals = false;\n needsGlobals = false;\n\n if (options.debug) {\n console.log('[hyperfixi] Compile mode: ready for build');\n }\n }\n\n // Production build: scan entire project\n const cwd = process.cwd();\n\n if (options.debug) {\n console.log('[hyperfixi] Scanning project for hyperscript usage...');\n }\n\n const scannedFiles = await scanner.scanProject(cwd);\n aggregator.loadFromScan(scannedFiles);\n\n // Configure multilingual aliases for compile mode\n if (mode === 'compile') {\n const usage = aggregator.getUsage();\n if (usage.detectedLanguages.size > 0) {\n const aliases = getMultilingualCommandAliases(\n usage.detectedLanguages as Set<SupportedLanguage>\n );\n if (Object.keys(aliases).length > 0) {\n setMultilingualAliases(aliases);\n if (options.debug) {\n console.log(\n `[hyperfixi] Compile mode: configured ${Object.keys(aliases).length} multilingual aliases`\n );\n }\n }\n }\n }\n\n if (options.debug) {\n const summary = aggregator.getSummary();\n console.log(`[hyperfixi] Found ${summary.fileCount} files with hyperscript:`, {\n commands: summary.commands,\n blocks: summary.blocks,\n positional: summary.positional,\n languages: summary.languages,\n });\n }\n }\n },\n };\n}\n\n// Default export for convenience\nexport default hyperfixi;\n"],"mappings":"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AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAMM,IAAM,kBAAkB,oBAAI,IAAI;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAMM,IAAM,mBAAmB,oBAAI,IAAI;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAMM,IAAM,qBAAqB,oBAAI,IAAI;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAMM,IAAM,iBAAiB,oBAAI,IAAI;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAMM,IAAM,mBAAmB,oBAAI,IAAI;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAMM,IAAM,gBAAgB,oBAAI,IAAI;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAOM,IAAM,cAAc,oBAAI,IAAI;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAKM,IAAM,oBAA4D;AAAA,EACvE,IAAI,oBAAI,IAAI;AAAA;AAAA,EACZ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAUO,SAAS,yBAAyB,QAAgB,UAAsC;AAC7F,QAAM,WAAW,kBAAkB,QAAQ;AAC3C,MAAI,CAAC,YAAY,SAAS,SAAS,EAAG,QAAO;AAI7C,QAAM,gBAAqC,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAChG,MAAI,cAAc,SAAS,QAAQ,GAAG;AACpC,eAAW,WAAW,UAAU;AAC9B,UAAI,OAAO,SAAS,OAAO,GAAG;AAC5B,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAIA,QAAM,cAAc,OAAO,YAAY;AACvC,aAAW,WAAW,UAAU;AAE9B,QAAI,QAAQ,UAAU,EAAG;AAGzB,UAAM,UAAU,IAAI,OAAO,MAAM,aAAa,QAAQ,YAAY,CAAC,CAAC,KAAK;AACzE,QAAI,QAAQ,KAAK,WAAW,GAAG;AAC7B,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAKA,SAAS,aAAa,KAAqB;AACzC,SAAO,IAAI,QAAQ,uBAAuB,MAAM;AAClD;AASO,SAAS,gBAAgB,QAAwC;AACtE,QAAM,WAAW,oBAAI,IAAuB;AAE5C,aAAW,QAAQ,qBAAqB;AACtC,QAAI,SAAS,KAAM;AAEnB,QAAI,yBAAyB,QAAQ,IAAI,GAAG;AAC1C,eAAS,IAAI,IAAI;AAAA,IACnB;AAAA,EACF;AAEA,SAAO;AACT;AAUA,IAAM,wBACJ,oBAAI,IAAI;AASH,SAAS,uBAAuB,MAAc,QAAsC;AACzF,QAAM,WAAW,kBAAkB,IAAyB;AAC5D,QAAM,gBAAgB,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAC3E,QAAM,aAAa,OAAO,cAAc,cAAc,SAAS,IAAI;AAEnE,MAAI,OAAO,UAAU,UAAU;AAE7B,UAAM,SAAS,oBAAI,IAAI,CAAC,GAAG,UAAU,GAAG,OAAO,QAAQ,CAAC;AACxD,0BAAsB,IAAI,MAAM,EAAE,UAAU,QAAQ,WAAW,CAAC;AAAA,EAClE,OAAO;AAEL,0BAAsB,IAAI,MAAM,EAAE,UAAU,OAAO,UAAU,WAAW,CAAC;AAAA,EAC3E;AACF;AAKO,SAAS,uBAAuB,MAAuC;AAC5E,QAAM,SAAS,sBAAsB,IAAI,IAAI;AAC7C,MAAI,OAAQ,QAAO,OAAO;AAC1B,SAAO,kBAAkB,IAAyB;AACpD;AAKO,SAAS,mBAAmB,MAAuB;AACxD,QAAM,SAAS,sBAAsB,IAAI,IAAI;AAC7C,MAAI,OAAQ,QAAO,OAAO;AAC1B,QAAM,gBAAgB,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAC3E,SAAO,cAAc,SAAS,IAAI;AACpC;AAKO,SAAS,sBAAgC;AAC9C,QAAM,UAAU,CAAC,GAAG,mBAAmB;AACvC,QAAM,SAAS,CAAC,GAAG,sBAAsB,KAAK,CAAC;AAC/C,SAAO,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC;AAC7C;AAKO,SAAS,sBAA4B;AAC1C,wBAAsB,MAAM;AAC9B;AAUO,SAAS,iBACd,WACiF;AACjF,MAAI,UAAU,SAAS,EAAG,QAAO;AAEjC,QAAM,YAAY,CAAC,GAAG,SAAS;AAG/B,MAAI,UAAU,MAAM,OAAK,QAAQ,QAAQ,SAAS,CAAC,CAAC,GAAG;AACrD,WAAO;AAAA,EACT;AAGA,MAAI,UAAU,MAAM,OAAK,QAAQ,YAAY,EAAE,SAAS,CAAC,CAAC,GAAG;AAC3D,WAAO;AAAA,EACT;AAGA,MAAI,UAAU,MAAM,OAAK,QAAQ,OAAO,SAAS,CAAC,CAAC,GAAG;AACpD,WAAO;AAAA,EACT;AAGA,MAAI,UAAU,MAAM,OAAK,QAAQ,aAAa,EAAE,SAAS,CAAC,CAAC,GAAG;AAC5D,WAAO;AAAA,EACT;AAGA,MAAI,UAAU,MAAM,OAAK,QAAQ,SAAS,SAAS,CAAC,CAAC,GAAG;AACtD,WAAO;AAAA,EACT;AAGA,SAAO;AACT;;;AC/9BA,SAAS,QAAQ,SAAwC,gBAAgC;AACvF,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,mBAAmB,OAAQ,QAAO;AACtC,MAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,UAAM,UAAU,QAAQ,IAAI,OAAK,EAAE,QAAQ,uBAAuB,MAAM,CAAC;AACzE,WAAO,IAAI,OAAO,IAAI,QAAQ,KAAK,GAAG,CAAC,GAAG;AAAA,EAC5C;AACA,SAAO;AACT;AAKO,IAAM,UAAN,MAAc;AAAA,EAKnB,YAAY,SAAwE;AAClF,SAAK,UAAU;AAAA,MACb,QAAQ;AAAA,MACR;AAAA,IACF;AACA,SAAK,UAAU,QAAQ,QAAQ,SAAS,oBAAoB;AAC5D,SAAK,QAAQ,QAAQ,SAAS;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,IAAqB;AAC9B,WAAO,KAAK,QAAQ,KAAK,EAAE,KAAK,CAAC,KAAK,QAAQ,KAAK,EAAE;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,MAAc,IAAuB;AACxC,UAAM,QAAmB;AAAA,MACvB,UAAU,oBAAI,IAAI;AAAA,MAClB,QAAQ,oBAAI,IAAI;AAAA,MAChB,YAAY;AAAA,MACZ,mBAAmB,oBAAI,IAAI;AAAA,IAC7B;AAGA,UAAM,eAAe;AAAA,MACnB;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,IACF;AAEA,eAAW,WAAW,cAAc;AAClC,UAAIA;AACJ,aAAQA,SAAQ,QAAQ,KAAK,IAAI,GAAI;AACnC,aAAK,cAAcA,OAAM,CAAC,GAAG,KAAK;AAAA,MACpC;AAAA,IACF;AAGA,UAAM,gBAAgB;AACtB,QAAI;AACJ,WAAQ,QAAQ,cAAc,KAAK,IAAI,GAAI;AACzC,WAAK,cAAc,MAAM,CAAC,GAAG,KAAK;AAAA,IACpC;AAEA,QACE,KAAK,UACJ,MAAM,SAAS,OAAO,KAAK,MAAM,OAAO,OAAO,KAAK,MAAM,kBAAkB,OAAO,IACpF;AACA,cAAQ,IAAI,uBAAuB,EAAE,KAAK;AAAA,QACxC,UAAU,CAAC,GAAG,MAAM,QAAQ;AAAA,QAC5B,QAAQ,CAAC,GAAG,MAAM,MAAM;AAAA,QACxB,YAAY,MAAM;AAAA,QAClB,WAAW,CAAC,GAAG,MAAM,iBAAiB;AAAA,MACxC,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAc,QAAgB,OAAwB;AAE5D,UAAM,iBACJ;AACF,QAAI;AACJ,WAAQ,QAAQ,eAAe,KAAK,MAAM,GAAI;AAC5C,YAAM,SAAS,IAAI,MAAM,CAAC,CAAC;AAAA,IAC7B;AAGA,QAAI,SAAS,KAAK,MAAM,EAAG,OAAM,OAAO,IAAI,IAAI;AAChD,QAAI,aAAa,KAAK,MAAM,EAAG,OAAM,OAAO,IAAI,IAAI;AAEpD,QAAI,iDAAiD,KAAK,MAAM,EAAG,OAAM,OAAO,IAAI,QAAQ;AAC5F,QAAI,0BAA0B,KAAK,MAAM,EAAG,OAAM,OAAO,IAAI,KAAK;AAClE,QAAI,YAAY,KAAK,MAAM,EAAG,OAAM,OAAO,IAAI,OAAO;AACtD,QAAI,YAAY,KAAK,MAAM,EAAG,OAAM,OAAO,IAAI,OAAO;AAGtD,QAAI,gDAAgD,KAAK,MAAM,GAAG;AAChE,YAAM,aAAa;AAAA,IACrB;AAGA,UAAM,YAAY,gBAAgB,MAAM;AACxC,eAAW,QAAQ,WAAW;AAC5B,YAAM,kBAAkB,IAAI,IAAI;AAAA,IAClC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,YAAY,KAA8C;AAC9D,UAAM,UAAU,oBAAI,IAAuB;AAE3C,QAAI;AACF,YAAM,EAAE,KAAK,IAAI,MAAM,OAAO,MAAM;AACpC,YAAM,KAAK,MAAM,OAAO,IAAI;AAE5B,YAAM,QAAQ,MAAM,KAAK,kEAAkE;AAAA,QACzF,KAAK;AAAA,QACL,QAAQ,CAAC,mBAAmB,WAAW,SAAS;AAAA,QAChD,UAAU;AAAA,MACZ,CAAC;AAED,iBAAW,QAAQ,OAAO;AACxB,YAAI,KAAK,WAAW,IAAI,GAAG;AACzB,cAAI;AACF,kBAAM,OAAO,GAAG,aAAa,MAAM,OAAO;AAC1C,kBAAM,QAAQ,KAAK,KAAK,MAAM,IAAI;AAClC,gBACE,MAAM,SAAS,OAAO,KACtB,MAAM,OAAO,OAAO,KACpB,MAAM,cACN,MAAM,kBAAkB,OAAO,GAC/B;AACA,sBAAQ,IAAI,MAAM,KAAK;AAAA,YACzB;AAAA,UACF,QAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,KAAK,uCAAuC,KAAK;AAAA,IAC3D;AAEA,WAAO;AAAA,EACT;AACF;;;AC/JO,IAAM,aAAN,MAAiB;AAAA,EAAjB;AACL,SAAQ,YAAoC,oBAAI,IAAI;AACpD,SAAQ,cAAsC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM9C,IAAI,UAAkB,OAA2B;AAC/C,UAAM,WAAW,KAAK,UAAU,IAAI,QAAQ;AAG5C,QAAI,UAAU;AACZ,YAAM,gBAAgB,KAAK,UAAU,SAAS,UAAU,MAAM,QAAQ;AACtE,YAAM,cAAc,KAAK,UAAU,SAAS,QAAQ,MAAM,MAAM;AAChE,YAAM,kBAAkB,SAAS,eAAe,MAAM;AACtD,YAAM,iBAAiB,KAAK,UAAU,SAAS,mBAAmB,MAAM,iBAAiB;AAEzF,UAAI,iBAAiB,eAAe,mBAAmB,gBAAgB;AACrE,eAAO;AAAA,MACT;AAAA,IACF;AAGA,SAAK,UAAU,IAAI,UAAU,KAAK;AAClC,SAAK,cAAc;AAEnB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,UAA2B;AAChC,UAAM,UAAU,KAAK,UAAU,OAAO,QAAQ;AAC9C,QAAI,SAAS;AACX,WAAK,cAAc;AAAA,IACrB;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,WAA4B;AAC1B,QAAI,KAAK,aAAa;AACpB,aAAO,KAAK;AAAA,IACd;AAEA,UAAM,WAAW,oBAAI,IAAY;AACjC,UAAM,SAAS,oBAAI,IAAY;AAC/B,UAAM,oBAAoB,oBAAI,IAAY;AAC1C,QAAI,aAAa;AAEjB,eAAW,SAAS,KAAK,UAAU,OAAO,GAAG;AAC3C,iBAAW,OAAO,MAAM,SAAU,UAAS,IAAI,GAAG;AAClD,iBAAW,SAAS,MAAM,OAAQ,QAAO,IAAI,KAAK;AAClD,iBAAW,QAAQ,MAAM,kBAAmB,mBAAkB,IAAI,IAAI;AACtE,UAAI,MAAM,WAAY,cAAa;AAAA,IACrC;AAEA,SAAK,cAAc;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,IAAI,IAAI,KAAK,SAAS;AAAA,IACnC;AAEA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,cAA4C;AACvD,SAAK,YAAY,IAAI,IAAI,YAAY;AACrC,SAAK,cAAc;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,WAAoB;AAClB,UAAM,QAAQ,KAAK,SAAS;AAC5B,WACE,MAAM,SAAS,OAAO,KACtB,MAAM,OAAO,OAAO,KACpB,MAAM,cACN,MAAM,kBAAkB,OAAO;AAAA,EAEnC;AAAA;AAAA;AAAA;AAAA,EAKA,aAME;AACA,UAAM,QAAQ,KAAK,SAAS;AAC5B,WAAO;AAAA,MACL,UAAU,CAAC,GAAG,MAAM,QAAQ,EAAE,KAAK;AAAA,MACnC,QAAQ,CAAC,GAAG,MAAM,MAAM,EAAE,KAAK;AAAA,MAC/B,YAAY,MAAM;AAAA,MAClB,WAAW,CAAC,GAAG,MAAM,iBAAiB,EAAE,KAAK;AAAA,MAC7C,WAAW,KAAK,UAAU;AAAA,IAC5B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACZ,SAAK,UAAU,MAAM;AACrB,SAAK,cAAc;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAa,GAAW,GAAoB;AAClD,QAAI,EAAE,SAAS,EAAE,KAAM,QAAO;AAC9B,eAAW,QAAQ,GAAG;AACpB,UAAI,CAAC,EAAE,IAAI,IAAI,EAAG,QAAO;AAAA,IAC3B;AACA,WAAO;AAAA,EACT;AACF;;;ACtIA;AAAA,EACE,2BAA2B;AAAA,EAC3B,yBAAyB;AAAA,EACzB;AAAA,EACA;AAAA,OACK;;;ACAP,IAAM,+BAA2F;AAAA,EAC/F,IAAI;AAAA,IACF,oBAAK;AAAA,IACL,0BAAM;AAAA,IACN,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,oBAAK;AAAA,IACL,cAAI;AAAA,IACJ,oBAAK;AAAA,IACL,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,EACN;AAAA,EACA,IAAI;AAAA,IACF,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,oBAAK;AAAA,IACL,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,EACN;AAAA,EACA,IAAI;AAAA,IACF,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,IACJ,cAAI;AAAA,EACN;AAAA,EACA,IAAI;AAAA,IACF,0BAAM;AAAA,IACN,oBAAK;AAAA,IACL,oBAAK;AAAA,IACL,oBAAK;AAAA,IACL,oBAAK;AAAA,IACL,oBAAK;AAAA,IACL,0BAAM;AAAA,IACN,0BAAM;AAAA,IACN,0BAAM;AAAA,IACN,0BAAM;AAAA,IACN,oBAAK;AAAA,IACL,cAAI;AAAA,IACJ,oBAAK;AAAA,IACL,oBAAK;AAAA,IACL,0BAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,UAAU;AAAA,IACV,aAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AAAA,EACA,IAAI;AAAA,IACF,UAAU;AAAA,IACV,WAAW;AAAA,IACX,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS;AAAA,IACT,SAAS;AAAA,IACT,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AAAA,EACA,IAAI;AAAA,IACF,UAAU;AAAA,IACV,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,cAAS;AAAA,IACT,kBAAa;AAAA,IACb,uBAAa;AAAA,EACf;AAAA,EACA,IAAI;AAAA,IACF,YAAY;AAAA,IACZ,iBAAY;AAAA,IACZ,WAAW;AAAA,IACX,cAAS;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,cAAS;AAAA,IACT,YAAY;AAAA,EACd;AAAA,EACA,IAAI;AAAA,IACF,oBAAU;AAAA,IACV,eAAU;AAAA,IACV,MAAM;AAAA,IACN,aAAQ;AAAA,IACR,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,aAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,aAAQ;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,IAAI;AAAA,IACF,MAAM;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,WAAW;AAAA,IACX,aAAa;AAAA,IACb,MAAM;AAAA,IACN,UAAU;AAAA,IACV,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,IAAI;AAAA,IACF,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA,IAAI;AAAA,IACF,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,EACd;AACF;AAMO,SAAS,8BACd,WACwB;AACxB,QAAM,UAAkC,CAAC;AAEzC,aAAW,QAAQ,WAAW;AAC5B,UAAM,cAAc,6BAA6B,IAAI;AACrD,QAAI,aAAa;AACf,aAAO,OAAO,SAAS,WAAW;AAAA,IACpC;AAAA,EACF;AAEA,SAAO;AACT;AAKA,SAAS,4BAA4B,WAA2C;AAC9E,QAAM,UAAkC,CAAC;AAEzC,aAAW,QAAQ,WAAW;AAC5B,UAAM,cAAc,6BAA6B,IAAI;AACrD,QAAI,aAAa;AACf,aAAO,OAAO,SAAS,WAAW;AAAA,IACpC;AAAA,EACF;AAEA,MAAI,OAAO,KAAK,OAAO,EAAE,WAAW,GAAG;AACrC,WAAO;AAAA;AAAA;AAAA;AAAA,EAIT;AAGA,QAAM,eAAe,OAAO,QAAQ,OAAO,EACxC,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,MAAM,GAAG,OAAO,GAAG,GAAG,EAC1C,KAAK,KAAK;AAIb,QAAM,cAAc,OAAO,KAAK,OAAO,EACpC,IAAI,OAAK,EAAE,QAAQ,uBAAuB,MAAM,CAAC,EACjD,KAAK,GAAG;AAEX,SAAO;AAAA;AAAA;AAAA,EAGP,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2DAS6C,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAatE;AAgDO,SAAS,sBACd,SACA,mBACgB;AAEhB,QAAM,iBAAiB,QAAQ,WAAW;AAG1C,MAAI,kBAAkB;AACtB,MAAI,QAAQ,aAAa,QAAQ,QAAQ,aAAa,QAAQ;AAC5D,sBAAkB;AAAA,EACpB,WAAW,QAAQ,aAAa,MAAM;AACpC,sBAAkB;AAAA,EACpB,WAAW,QAAQ,aAAa,OAAO;AACrC,sBAAkB;AAAA,EACpB;AAGA,MAAI,CAAC,iBAAiB;AACpB,WAAO;AAAA,MACL,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,WAAW,oBAAI,IAAI;AAAA,MACnB,gBAAgB;AAAA,IAClB;AAAA,EACF;AAGA,QAAM,YAAY,oBAAI,IAAuB;AAG7C,aAAW,QAAQ,mBAAmB;AACpC,cAAU,IAAI,IAAyB;AAAA,EACzC;AAGA,MAAI,QAAQ,WAAW;AACrB,eAAW,QAAQ,QAAQ,WAAW;AACpC,gBAAU,IAAI,IAAyB;AAAA,IACzC;AAAA,EACF;AAGA,MAAI,QAAQ,gBAAgB;AAC1B,eAAW,QAAQ,QAAQ,gBAAgB;AACzC,gBAAU,IAAI,IAAyB;AAAA,IACzC;AAAA,EACF;AAGA,MAAI,aAAa,iBAAiB,SAAS,SAAS;AAEpD,SAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAKA,SAAS,iBACP,SACA,WACoB;AAEpB,MAAI,QAAQ,QAAQ;AAClB,WAAO,QAAQ;AAAA,EACjB;AAGA,MAAI,QAAQ,aAAa,MAAM;AAC7B,WAAO;AAAA,EACT;AAGA,MAAI,QAAQ,WAAW,QAAQ;AAC7B,WAAO,oBAAoB,IAAI,IAAI,QAAQ,SAAgC,CAAC;AAAA,EAC9E;AAGA,MAAI,UAAU,SAAS,GAAG;AAExB,WAAO;AAAA,EACT;AAEA,SAAO,oBAAoB,SAAS;AACtC;AAKA,IAAM,0BAAwD;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKO,SAAS,oBAAoB,WAAuD;AACzF,MAAI,UAAU,SAAS,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,CAAC,GAAG,SAAS;AAG/B,MAAI,UAAU,WAAW,GAAG;AAC1B,UAAM,OAAO,UAAU,CAAC;AACxB,QAAI,wBAAwB,SAAS,IAAI,GAAG;AAC1C,aAAO;AAAA,IACT;AAAA,EACF;AAGA,MAAI,UAAU,WAAW,KAAK,UAAU,SAAS,IAAI,KAAK,UAAU,SAAS,IAAI,GAAG;AAClF,WAAO;AAAA,EACT;AAGA,MAAI,UAAU,MAAM,OAAK,QAAQ,QAAQ,SAAS,CAAC,CAAC,GAAG;AACrD,WAAO;AAAA,EACT;AAGA,MAAI,UAAU,MAAM,OAAK,QAAQ,YAAY,EAAE,SAAS,CAAC,CAAC,GAAG;AAC3D,WAAO;AAAA,EACT;AAGA,MAAI,UAAU,MAAM,OAAK,QAAQ,SAAS,SAAS,CAAC,CAAC,GAAG;AACtD,WAAO;AAAA,EACT;AAGA,SAAO;AACT;AAOO,IAAM,wBAAmF;AAAA;AAAA,EAE9F,IAAI,EAAE,KAAK,SAAS,MAAM,SAAS;AAAA,EACnC,IAAI,EAAE,KAAK,SAAS,MAAM,SAAS;AAAA,EACnC,IAAI,EAAE,KAAK,SAAS,MAAM,SAAS;AAAA,EACnC,IAAI,EAAE,KAAK,SAAS,MAAM,SAAS;AAAA,EACnC,IAAI,EAAE,KAAK,SAAS,MAAM,SAAS;AAAA,EACnC,IAAI,EAAE,KAAK,SAAS,MAAM,SAAS;AAAA,EACnC,IAAI,EAAE,KAAK,SAAS,MAAM,SAAS;AAAA,EACnC,IAAI,EAAE,KAAK,SAAS,MAAM,SAAS;AAAA,EACnC,IAAI,EAAE,KAAK,SAAS,MAAM,SAAS;AAAA,EACnC,IAAI,EAAE,KAAK,SAAS,MAAM,SAAS;AAAA,EACnC,IAAI,EAAE,KAAK,SAAS,MAAM,SAAS;AAAA,EACnC,IAAI,EAAE,KAAK,SAAS,MAAM,SAAS;AAAA,EACnC,IAAI,EAAE,KAAK,SAAS,MAAM,SAAS;AAAA;AAAA,EAEnC,SAAS,EAAE,KAAK,SAAS,MAAM,SAAS;AAAA,EACxC,SAAS,EAAE,KAAK,UAAU,MAAM,SAAS;AAAA,EACzC,cAAc,EAAE,KAAK,SAAS,MAAM,SAAS;AAAA,EAC7C,UAAU,EAAE,KAAK,UAAU,MAAM,SAAS;AAAA,EAC1C,KAAK,EAAE,KAAK,UAAU,MAAM,SAAS;AACvC;AAKO,SAAS,sBAAsB,YAGpC;AACA,SAAO,sBAAsB,UAAU,KAAK,sBAAsB;AACpE;AAaO,SAAS,wBAAwB,aAAyC;AAI/E,SAAO;AACT;AAMO,SAAS,gCAAgC,QAAgC;AAC9E,MAAI,CAAC,OAAO,WAAW,CAAC,OAAO,YAAY;AACzC,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,wBAAwB,OAAO,UAAU;AAC9D,QAAM,YAAY,CAAC,GAAG,OAAO,SAAS,EAAE,KAAK,MAAM;AAEnD,MAAI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASH,YAAY;AAAA;AAGpB,MAAI,OAAO,gBAAgB;AACzB,YAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKV;AAGA,QAAM,cAAc,4BAA4B,OAAO,SAAS;AAEhE,UAAQ;AAAA;AAAA,yCAE+B,SAAS;AAAA;AAAA;AAAA,EAGhD,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkDX,MAAI,OAAO,gBAAgB;AACzB,YAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQV;AAEA,SAAO;AACT;AAKO,SAAS,mBAAmB,QAAkC;AACnE,QAAM,UAAoB,CAAC;AAE3B,MAAI,OAAO,SAAS;AAClB,YAAQ,KAAK,mBAAmB;AAChC,YAAQ,KAAK,8BAA8B;AAAA,EAC7C;AAEA,MAAI,OAAO,gBAAgB;AACzB,YAAQ,KAAK,sBAAsB;AACnC,YAAQ,KAAK,oBAAoB;AAAA,EACnC;AAEA,SAAO;AACT;;;ADzkBA,SAAS,WAAW,MAAsB;AACxC,SACE,KAEG,QAAQ,yBAAyB,EAAE,EAEnC,QAAQ,qBAAqB,MAAM,EAEnC,QAAQ,qBAAqB,MAAM,EAEnC,QAAQ,sBAAsB,WAAW,EAEzC,QAAQ,kBAAkB,SAAS,EAEnC,QAAQ,wBAAwB,EAAE;AAEzC;AAGA,IAAM,0BAAkD,CAAC;AACzD,IAAM,wBAAgD,CAAC;AAEvD,WAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,eAAe,GAAG;AAC1D,0BAAwB,IAAI,IAAI,WAAW,IAAI;AACjD;AAEA,WAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,aAAa,GAAG;AACxD,wBAAsB,IAAI,IAAI,WAAW,IAAI;AAC/C;AAKA,SAAS,mBAAmB,QAAkC;AAC5D,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,SAAS,CAAC;AAAA,IACV,kBAAkB;AAAA,IAClB,aAAa;AAAA,IACb,wBAAwB;AAAA,IACxB,mBAAmB;AAAA,IACnB,WAAW;AAAA,IACX,WAAW;AAAA,EACb,IAAI;AAEJ,QAAM,oBAAoB,SAAS,KAAK,SAAO,eAAe,SAAS,GAAG,CAAC;AAC3E,QAAM,0BAA0B,SAAS,KAAK,SAAO,uBAAuB,SAAS,GAAG,CAAC;AACzF,QAAM,YAAY,OAAO,SAAS;AAClC,QAAM,YAAY,SAAS,SAAS,QAAQ;AAE5C,QAAM,eAAe,SAClB,OAAO,SAAO,wBAAwB,GAAG,CAAC,EAC1C,IAAI,SAAO,wBAAwB,GAAG,CAAC,EACvC,KAAK,IAAI;AAEZ,QAAM,aAAa,OAChB,OAAO,WAAS,sBAAsB,KAAK,CAAC,EAC5C,IAAI,WAAS,sBAAsB,KAAK,CAAC,EACzC,KAAK,IAAI;AAEZ,SAAO;AAAA,eACM,IAAI;AAAA;AAAA;AAAA,eAGJ,SAAS,KAAK,IAAI,CAAC,GAAG,OAAO,SAAS,IAAI;AAAA,aAAgB,OAAO,KAAK,IAAI,CAAC,KAAK,EAAE,GAAG,wBAAwB,yCAAyC,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mDAMpH,gBAAgB;AAAA;AAAA;AAAA;AAAA,EAIjE,YAAY,sCAAsC,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsEpD,wBACI;AAAA;AAAA;AAAA,IAIA,EACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4CE,wBACI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA4BA,EACN;AAAA,EAEE,oBACI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,EACN;AAAA;AAAA,EAGE,0BACI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,EACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0BE,YAAY;AAAA;AAAA;AAAA,uBAGS,IAAI;AAAA;AAAA;AAAA;AAAA,EAKzB,YACI;AAAA;AAAA;AAAA,EAGJ,UAAU;AAAA;AAAA;AAAA,uBAGW,IAAI;AAAA;AAAA;AAAA;AAAA,IAKrB,EACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOM,YACI;AAAA;AAAA,SAGA,EACN;AAAA;AAAA;AAAA;AAAA,EAKF,YACI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,EACN;AAAA;AAAA;AAAA;AAAA;AAAA,MAKM,aAAa,YAAY,8HAA8H,4CAA4C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQjM,aAAa,YAAY,yGAAyG,6CAA6C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAiB/K,aAAa,YAAY,sHAAsH,oDAAoD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BA6C5K,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAUf,KAAK,YAAY,EAAE,QAAQ,QAAQ,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAoB7C,KAAK,UAAU,QAAQ,CAAC;AAAA,IAClC,OAAO,SAAS,IAAI,WAAW,KAAK,UAAU,MAAM,CAAC,MAAM,EAAE;AAAA;AAAA;AAAA,EAI/D,WACI;AAAA;AAAA,WAEK,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASnB,kBACI;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,EACN;AAAA;AAAA,IAGM,EACN;AAAA,EAEE,WACI;AAAA;AAAA;AAAA,IAIA,EACN;AACA;AASO,IAAM,YAAN,MAAgB;AAAA,EAGrB,YAAY,SAAgD;AAC1D,SAAK,QAAQ,QAAQ,SAAS;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,OAAwB,SAAyC;AACxE,UAAM,WAAW,CAAC,GAAG,MAAM,UAAU,GAAI,QAAQ,iBAAiB,CAAC,CAAE;AACrE,UAAM,SAAS,CAAC,GAAG,MAAM,QAAQ,GAAI,QAAQ,eAAe,CAAC,CAAE;AAC/D,UAAM,aAAa,MAAM,cAAc,QAAQ,cAAc;AAG7D,UAAM,iBAAiB,sBAAsB,SAAS,MAAM,iBAAiB;AAG7E,QAAI,SAAS,WAAW,KAAK,OAAO,WAAW,KAAK,CAAC,cAAc,CAAC,eAAe,SAAS;AAC1F,aAAO,KAAK,oBAAoB,OAAO;AAAA,IACzC;AAEA,UAAM,SAA2B;AAAA,MAC/B,MAAM,QAAQ,cAAc;AAAA,MAC5B;AAAA,MACA;AAAA,MACA,uBAAuB;AAAA,MACvB,iBAAiB,QAAQ,QAAQ;AAAA,MACjC,YAAY,QAAQ,cAAc;AAAA;AAAA,MAElC,kBAAkB;AAAA,MAClB,UAAU;AAAA,MACV,UAAU;AAAA,IACZ;AAEA,QAAI,KAAK,OAAO;AACd,YAAM,aAAsC;AAAA,QAC1C;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM,OAAO;AAAA,QACb,UAAU,eAAe;AAAA,MAC3B;AAEA,UAAI,eAAe,WAAW,eAAe,YAAY;AACvD,cAAM,WAAW,sBAAsB,eAAe,UAAU;AAChE,mBAAW,iBAAiB,eAAe;AAC3C,mBAAW,eAAe,SAAS;AACnC,mBAAW,YAAY,CAAC,GAAG,eAAe,SAAS;AACnD,mBAAW,UAAU,eAAe;AAAA,MACtC;AAEA,cAAQ,IAAI,kCAAkC,UAAU;AAGxD,UAAI,eAAe,eAAe,SAAS,eAAe,eAAe,YAAY;AACnF,gBAAQ;AAAA,UACN,4BAA4B,eAAe,UAAU,sBAAsB,sBAAsB,eAAe,UAAU,EAAE,IAAI;AAAA,QAElI;AAAA,MACF;AAAA,IACF;AAGA,QAAI,aAAa,mBAAmB,MAAM;AAG1C,QAAI,eAAe,SAAS;AAC1B,mBAAa,KAAK,uBAAuB,YAAY,cAAc;AAAA,IACrE;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,uBAAuB,YAAoB,QAAgC;AACjF,UAAM,eAAe,gCAAgC,MAAM;AAC3D,UAAM,kBAAkB,mBAAmB,MAAM;AAGjD,UAAM,kBAAkB,WAAW,QAAQ,kBAAkB;AAC7D,QAAI,oBAAoB,IAAI;AAE1B,mBAAa,eAAe,OAAO;AAAA,IACrC,OAAO;AACL,mBACE,WAAW,MAAM,GAAG,eAAe,IACnC,eACA,SACA,WAAW,MAAM,eAAe;AAAA,IACpC;AAGA,iBAAa,WAAW;AAAA,MACtB;AAAA,MACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMF;AAGA,iBAAa,WAAW;AAAA,MACtB;AAAA,MACA;AAAA;AAAA,IAEF;AAGA,iBAAa,WAAW;AAAA,MACtB;AAAA,MACA;AAAA;AAAA;AAAA,IAGF;AAGA,QAAI,gBAAgB,SAAS,GAAG;AAC9B,YAAM,mBAAmB;AACzB,YAAM,qBAAqB,gBAAgB,IAAI,SAAO,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI;AAC5E,mBAAa,WAAW;AAAA,QACtB;AAAA,QACA;AAAA,EAA0B,kBAAkB;AAAA,MAC9C;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,oBAAoB,SAAyC;AACnE,UAAM,aAAa,QAAQ,cAAc;AAEzC,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAgCE,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOrB;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB,UAA8C;AAChE,UAAM,SACJ,aAAa,SAAS,6BAA6B;AAErD,WAAO;AAAA;AAAA;AAAA,qBAGU,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAMZ,MAAM;AAAA,2BACI,MAAM;AAAA;AAAA,EAE/B;AACF;;;AEzsBA,SAAS,oBAAoB;AAyC7B,IAAI,mBAA4C;AAChD,IAAI,aAAgC;AAc7B,SAAS,kBAAkB,UAA4B,UAA4B;AACxF,qBAAmB;AACnB,eAAa;AACf;AAKO,SAAS,sBAA4B;AAC1C,qBAAmB;AACnB,eAAa;AACf;AAKO,SAAS,oBAA6B;AAC3C,SAAO,qBAAqB,QAAQ,eAAe;AACrD;AAKA,IAAM,gCAAgC;AAUtC,IAAI,sBAA8C,CAAC;AACnD,IAAI,oBAAmC;AAkBhC,SAAS,uBAAuB,SAAuC;AAC5E,wBAAsB,EAAE,GAAG,QAAQ;AAEnC,MAAI,OAAO,KAAK,OAAO,EAAE,SAAS,GAAG;AAEnC,UAAM,cAAc,OAAO,KAAK,OAAO,EACpC,IAAI,OAAK,EAAE,QAAQ,uBAAuB,MAAM,CAAC,EACjD,KAAK,GAAG;AACX,wBAAoB,IAAI,OAAO,WAAW,WAAW,kBAAkB,GAAG;AAAA,EAC5E,OAAO;AACL,wBAAoB;AAAA,EACtB;AACF;AAqBA,SAAS,uBAAuB,MAAsB;AACpD,MAAI,CAAC,kBAAmB,QAAO;AAE/B,SAAO,KAAK,QAAQ,mBAAmB,CAAC,OAAO,QAAQ,YAAY;AACjE,UAAM,UAAU,oBAAoB,OAAO;AAC3C,WAAO,UAAU,SAAS,UAAU;AAAA,EACtC,CAAC;AACH;AAUA,SAAS,kBAAkB,MAA6B;AAGtD,MAAI,CAAC,8BAA8B,KAAK,IAAI,GAAG;AAC7C,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAMA,SAAS,iBAAiB,UAA0B;AAClD,SAAO,SACJ,QAAQ,OAAO,MAAM,EACrB,QAAQ,MAAM,KAAK,EACnB,QAAQ,OAAO,KAAK,EACpB,QAAQ,OAAO,KAAK,EACpB,QAAQ,OAAO,EAAE;AACtB;AA4DA,SAAS,WAAW,QAAwB;AAC1C,MAAI,OAAO;AACX,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAS,QAAQ,KAAK,OAAQ,OAAO,WAAW,CAAC;AAAA,EACnD;AAEA,SAAO,KAAK,IAAI,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC;AAC/C;AAGA,IAAM,UAAU,oBAAI,IAAY;AAKzB,SAAS,gBAAsB;AACpC,UAAQ,MAAM;AAChB;AAOA,SAAS,kBAAkB,OAAe,SAAiB,QAAwB;AACjF,QAAM,OAAO,WAAW,MAAM;AAC9B,MAAI,KAAK,GAAG,KAAK,IAAI,OAAO,IAAI,IAAI;AAGpC,MAAI,SAAS;AACb,SAAO,QAAQ,IAAI,EAAE,GAAG;AACtB,SAAK,GAAG,KAAK,IAAI,OAAO,IAAI,IAAI,GAAG,QAAQ;AAAA,EAC7C;AAEA,UAAQ,IAAI,EAAE;AACd,SAAO;AACT;AAsBO,SAAS,QAAQ,QAAgB,UAA0B,CAAC,GAA2B;AAC5F,QAAM,EAAE,WAAW,MAAM,QAAQ,MAAM,IAAI;AAE3C,MAAI;AACF,QAAI;AAGJ,QAAI,aAAa,QAAQ,oBAAoB,YAAY;AACvD,UAAI,iBAAiB,iBAAiB,QAAQ,GAAG;AAC/C,cAAM,SAAS,iBAAiB,QAAQ,QAAQ,QAAQ;AAExD,YAAI,OAAO,QAAQ,OAAO,cAAc,+BAA+B;AACrE,gBAAM,EAAE,KAAK,UAAU,SAAS,IAAI,WAAW,OAAO,IAAI;AAE1D,cAAI,SAAS,SAAS,SAAS,GAAG;AAChC,oBAAQ,IAAI,0CAA0C,MAAM,MAAM,QAAQ;AAAA,UAC5E;AAEA,gBAAM;AAEN,cAAI,OAAO;AACT,oBAAQ;AAAA,cACN,wBAAwB,QAAQ,MAAM,MAAM,kBAAkB,OAAO,WAAW,QAAQ,CAAC,CAAC;AAAA,YAC5F;AAAA,UACF;AAAA,QACF,OAAO;AAEL,cAAI,OAAO;AACT,kBAAM,SACJ,OAAO,QAAQ,KAAK,IAAI,KAAK,mBAAmB,OAAO,WAAW,QAAQ,CAAC,CAAC;AAC9E,oBAAQ,IAAI,0CAA0C,MAAM,MAAM,MAAM,EAAE;AAAA,UAC5E;AACA,iBAAO;AAAA,QACT;AAAA,MACF,OAAO;AAEL,YAAI,OAAO;AACT,kBAAQ,IAAI,yBAAyB,QAAQ,oCAAoC;AAAA,QACnF;AACA,eAAO;AAAA,MACT;AAAA,IACF,WAAW,aAAa,MAAM;AAE5B,UAAI,OAAO;AACT,gBAAQ;AAAA,UACN,kDAAkD,QAAQ;AAAA,QAC5D;AAAA,MACF;AACA,aAAO;AAAA,IACT,OAAO;AAGL,YAAM,qBAAqB,uBAAuB,MAAM;AACxD,YAAM,SAAS,IAAI,aAAa,kBAAkB;AAClD,YAAM,OAAO,MAAM;AAAA,IACrB;AAEA,WAAO,WAAW,KAAK,MAAM;AAAA,EAC/B,SAAS,OAAO;AACd,QAAI,OAAO;AACT,cAAQ,KAAK,kCAAkC,MAAM,IAAI,KAAK;AAAA,IAChE;AACA,WAAO;AAAA,EACT;AACF;AAMA,SAAS,sBAAsB,MAAyB;AACtD,MAAI,KAAK,WAAW,EAAG,QAAO;AAE9B,QAAM,QAAQ,KAAK,CAAC;AACpB,MAAI,MAAM,SAAS,WAAW;AAC5B,WAAQ,MAAsB,QAAQ;AAAA,EACxC;AACA,SAAO,MAAM,QAAQ;AACvB;AAKA,SAAS,WAAW,KAAc,UAA0C;AAC1E,MAAI,IAAI,SAAS,SAAS;AAExB,WAAO;AAAA,EACT;AAEA,QAAM,YAAY;AAClB,QAAM,QAAQ,UAAU;AACxB,QAAM,YAAY,UAAU,aAAa,CAAC;AAC1C,QAAM,OAAO,UAAU,QAAQ,CAAC;AAEhC,QAAM,EAAE,MAAM,gBAAgB,aAAa,aAAa,IAAI,YAAY,IAAI;AAE5E,MAAI,SAAS,QAAQ,SAAS,IAAI;AAEhC,WAAO;AAAA,EACT;AAGA,QAAM,UAAU,sBAAsB,IAAI;AAC1C,QAAM,KAAK,kBAAkB,OAAO,SAAS,QAAQ;AAErD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,WAAW;AAAA,MACT,SAAS,UAAU;AAAA,MACnB,MAAM,UAAU;AAAA,MAChB,MAAM,UAAU;AAAA,MAChB,UAAU,UAAU;AAAA,MACpB,UAAU,UAAU;AAAA,IACtB;AAAA,IACA;AAAA,IACA,gBAAgB,kBAAkB,eAAe;AAAA,IACjD;AAAA,EACF;AACF;AAYA,SAAS,YAAY,OAAmC;AACtD,QAAM,aAAuB,CAAC;AAC9B,MAAI,iBAAiB;AACrB,MAAI,cAAc;AAClB,MAAI,eAAe;AAEnB,aAAW,QAAQ,OAAO;AACxB,UAAM,SAAS,YAAY,IAAI;AAC/B,QAAI,WAAW,MAAM;AACnB,aAAO,EAAE,MAAM,MAAM,gBAAgB,OAAO,aAAa,OAAO,cAAc,MAAM;AAAA,IACtF;AAEA,eAAW,KAAK,OAAO,IAAI;AAC3B,qBAAiB,kBAAkB,OAAO;AAC1C,kBAAc,eAAe,OAAO;AACpC,mBAAe,gBAAgB,OAAO;AAAA,EACxC;AAEA,SAAO;AAAA,IACL,MAAM,WAAW,KAAK,IAAI;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAYA,SAAS,YAAY,MAAuC;AAC1D,MAAI,KAAK,SAAS,WAAW;AAC3B,WAAO,eAAe,IAAmB;AAAA,EAC3C;AAIA,SAAO;AACT;AAKA,SAAS,eAAe,KAA0C;AAChE,QAAM,SAAS,IAAI,SAAS,cAAc,IAAI,MAAM,IAAI;AAExD,UAAQ,IAAI,MAAM;AAAA,IAChB,KAAK;AACH,aAAO,cAAc,IAAI,MAAM,MAAM;AAAA,IAEvC,KAAK;AACH,aAAO,WAAW,IAAI,MAAM,MAAM;AAAA,IAEpC,KAAK;AACH,aAAO,cAAc,IAAI,MAAM,MAAM;AAAA,IAEvC,KAAK;AACH,aAAO,mBAAmB,IAAI,MAAM,MAAM;AAAA,IAE5C,KAAK;AACH,aAAO;AAAA,QACL,MAAM,GAAG,MAAM;AAAA,QACf,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,cAAc;AAAA,MAChB;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL,MAAM,GAAG,MAAM;AAAA,QACf,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,cAAc;AAAA,MAChB;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL,MAAM,GAAG,MAAM;AAAA,QACf,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,cAAc;AAAA,MAChB;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL,MAAM,GAAG,MAAM;AAAA,QACf,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,cAAc;AAAA,MAChB;AAAA,IAEF,KAAK;AACH,aAAO,WAAW,IAAI,IAAI;AAAA,IAE5B,KAAK;AACH,aAAO,WAAW,IAAI,IAAI;AAAA,IAE5B,KAAK;AACH,aAAO,iBAAiB,IAAI,IAAI;AAAA,IAElC,KAAK;AACH,aAAO,iBAAiB,IAAI,IAAI;AAAA,IAElC,KAAK;AACH,aAAO,WAAW,IAAI,MAAM,QAAQ,IAAI,QAAQ;AAAA,IAElD,KAAK;AAAA,IACL,KAAK;AACH,aAAO,eAAe,IAAI,MAAM,MAAM;AAAA,IAExC,KAAK;AACH,aAAO,YAAY,IAAI,IAAI;AAAA,IAE7B;AAEE,aAAO;AAAA,EACX;AACF;AAMA,SAAS,cAAc,MAAiB,QAAwC;AAC9E,QAAM,YAAY,iBAAiB,KAAK,CAAC,CAAC;AAC1C,MAAI,CAAC,UAAW,QAAO;AAEvB,MAAI,WAAW,KAAK;AAClB,WAAO;AAAA,MACL,MAAM,uBAAuB,SAAS;AAAA,MACtC,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM,GAAG,MAAM,uCAAuC,SAAS;AAAA,IAC/D,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,cAAc;AAAA,EAChB;AACF;AAEA,SAAS,WAAW,MAAiB,QAAwC;AAC3E,QAAM,YAAY,iBAAiB,KAAK,CAAC,CAAC;AAC1C,MAAI,CAAC,UAAW,QAAO;AAEvB,MAAI,WAAW,KAAK;AAClB,WAAO;AAAA,MACL,MAAM,oBAAoB,SAAS;AAAA,MACnC,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM,GAAG,MAAM,oCAAoC,SAAS;AAAA,IAC5D,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,cAAc;AAAA,EAChB;AACF;AAEA,SAAS,cAAc,MAAiB,QAAwC;AAE9E,MAAI,CAAC,QAAQ,KAAK,WAAW,GAAG;AAC9B,WAAO;AAAA,MACL,MAAM,GAAG,MAAM;AAAA,MACf,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,EACF;AAGA,QAAM,YAAY,iBAAiB,KAAK,CAAC,CAAC;AAC1C,MAAI,CAAC,UAAW,QAAO;AAEvB,MAAI,WAAW,KAAK;AAClB,WAAO;AAAA,MACL,MAAM,uBAAuB,SAAS;AAAA,MACtC,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM,GAAG,MAAM,uCAAuC,SAAS;AAAA,IAC/D,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,cAAc;AAAA,EAChB;AACF;AAEA,SAAS,mBAAmB,MAAiB,QAAwC;AACnF,QAAM,YAAY,iBAAiB,KAAK,CAAC,CAAC;AAC1C,MAAI,CAAC,UAAW,QAAO;AAEvB,MAAI,WAAW,KAAK;AAClB,WAAO;AAAA,MACL,MAAM,uBAAuB,SAAS;AAAA,MACtC,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM,GAAG,MAAM,uCAAuC,SAAS;AAAA,IAC/D,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,cAAc;AAAA,EAChB;AACF;AAEA,SAAS,WAAW,MAAyC;AAC3D,QAAM,WAAW,KAAK,IAAI,iBAAiB,EAAE,OAAO,OAAO;AAC3D,MAAI,SAAS,WAAW,KAAK,QAAQ;AAEnC,WAAO;AAAA,MACL,MAAM,eAAe,SAAS,KAAK,IAAI,CAAC;AAAA,MACxC,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM,eAAe,SAAS,KAAK,IAAI,CAAC;AAAA,IACxC,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,cAAc;AAAA,EAChB;AACF;AAEA,SAAS,WAAW,MAAyC;AAC3D,MAAI,KAAK,SAAS,EAAG,QAAO;AAE5B,QAAM,CAAC,QAAQ,KAAK,IAAI;AACxB,QAAM,gBAAgB,kBAAkB,KAAK;AAC7C,MAAI,CAAC,cAAe,QAAO;AAG3B,MAAI,OAAO,SAAS,YAAY;AAC9B,UAAM,UAAU;AAChB,QAAI,QAAQ,UAAU,SAAS;AAC7B,YAAM,UAAU,QAAQ,KAAK,MAAM,CAAC;AACpC,aAAO;AAAA,QACL,MAAM,KAAK,OAAO,MAAM,aAAa;AAAA,QACrC,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,cAAc;AAAA,MAChB;AAAA,IACF;AAEA,QAAI,QAAQ,UAAU,UAAU;AAC9B,YAAM,UAAU,QAAQ,KAAK,MAAM,CAAC;AACpC,aAAO;AAAA,QACL,MAAM,KAAK,OAAO,MAAM,aAAa;AAAA,QACrC,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAGA,MAAI,OAAO,SAAS,cAAc;AAChC,UAAM,WAAW;AACjB,UAAM,MAAM,kBAAkB,SAAS,MAAM;AAC7C,UAAM,OAAO,SAAS;AACtB,QAAI,CAAC,IAAK,QAAO;AAGjB,QAAI,KAAK,WAAW,GAAG,GAAG;AACxB,YAAM,YAAY,KAAK,MAAM,CAAC;AAC9B,aAAO;AAAA,QACL,MAAM,GAAG,GAAG,UAAU,SAAS,MAAM,aAAa;AAAA,QAClD,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,cAAc;AAAA,MAChB;AAAA,IACF;AAEA,WAAO;AAAA,MACL,MAAM,GAAG,GAAG,IAAI,IAAI,MAAM,aAAa;AAAA,MACvC,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,MAAI,OAAO,SAAS,UAAU;AAC5B,UAAM,UAAU;AAChB,UAAM,MAAM,kBAAkB,QAAQ,MAAM;AAC5C,UAAM,OAAO,OAAO,QAAQ,aAAa,WAAW,QAAQ,WAAW;AACvE,QAAI,CAAC,OAAO,CAAC,KAAM,QAAO;AAG1B,QAAI,KAAK,WAAW,GAAG,GAAG;AACxB,YAAM,YAAY,KAAK,MAAM,CAAC;AAC9B,aAAO;AAAA,QACL,MAAM,GAAG,GAAG,UAAU,SAAS,MAAM,aAAa;AAAA,QAClD,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,cAAc;AAAA,MAChB;AAAA,IACF;AAEA,WAAO;AAAA,MACL,MAAM,GAAG,GAAG,IAAI,IAAI,MAAM,aAAa;AAAA,MACvC,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,iBAAiB,MAAyC;AACjE,MAAI,KAAK,SAAS,EAAG,QAAO;AAE5B,QAAM,SAAS,KAAK,CAAC;AACrB,QAAM,SAAS,KAAK,SAAS,IAAI,kBAAkB,KAAK,CAAC,CAAC,IAAI;AAE9D,MAAI,OAAO,SAAS,YAAY;AAC9B,UAAM,UAAU;AAChB,QAAI,QAAQ,UAAU,SAAS;AAC7B,YAAM,UAAU,QAAQ,KAAK,MAAM,CAAC;AACpC,aAAO;AAAA,QACL,MAAM,KAAK,OAAO,SAAS,OAAO,YAAY,MAAM;AAAA,QACpD,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,cAAc;AAAA,MAChB;AAAA,IACF;AACA,QAAI,QAAQ,UAAU,UAAU;AAC9B,YAAM,UAAU,QAAQ,KAAK,MAAM,CAAC;AACpC,aAAO;AAAA,QACL,MAAM,KAAK,OAAO,SAAS,OAAO,YAAY,MAAM;AAAA,QACpD,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAGA,QAAM,WAAW,kBAAkB,MAAM;AACzC,MAAI,UAAU;AACZ,WAAO;AAAA,MACL,MAAM,GAAG,QAAQ,8BAA8B,QAAQ,yBAAyB,MAAM;AAAA,MACtF,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,iBAAiB,MAAyC;AACjE,MAAI,KAAK,SAAS,EAAG,QAAO;AAE5B,QAAM,SAAS,KAAK,CAAC;AACrB,QAAM,SAAS,KAAK,SAAS,IAAI,kBAAkB,KAAK,CAAC,CAAC,IAAI;AAE9D,MAAI,OAAO,SAAS,YAAY;AAC9B,UAAM,UAAU;AAChB,QAAI,QAAQ,UAAU,SAAS;AAC7B,YAAM,UAAU,QAAQ,KAAK,MAAM,CAAC;AACpC,aAAO;AAAA,QACL,MAAM,KAAK,OAAO,SAAS,OAAO,YAAY,MAAM;AAAA,QACpD,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,cAAc;AAAA,MAChB;AAAA,IACF;AACA,QAAI,QAAQ,UAAU,UAAU;AAC9B,YAAM,UAAU,QAAQ,KAAK,MAAM,CAAC;AACpC,aAAO;AAAA,QACL,MAAM,KAAK,OAAO,SAAS,OAAO,YAAY,MAAM;AAAA,QACpD,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAGA,QAAM,WAAW,kBAAkB,MAAM;AACzC,MAAI,UAAU;AACZ,WAAO;AAAA,MACL,MAAM,GAAG,QAAQ,8BAA8B,QAAQ,yBAAyB,MAAM;AAAA,MACtF,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,WAAW,MAAiB,QAAgB,UAA2C;AAC9F,MAAI,KAAK,SAAS,EAAG,QAAO;AAE5B,QAAM,UAAU,kBAAkB,KAAK,CAAC,CAAC;AACzC,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,MAAM,YAAY;AAExB,UAAQ,KAAK;AAAA,IACX,KAAK;AACH,aAAO;AAAA,QACL,MAAM,GAAG,MAAM,gBAAgB,OAAO;AAAA,QACtC,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,cAAc;AAAA,MAChB;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM,GAAG,MAAM,sCAAsC,OAAO;AAAA,QAC5D,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,cAAc;AAAA,MAChB;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM,GAAG,MAAM,mCAAmC,OAAO;AAAA,QACzD,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,cAAc;AAAA,MAChB;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM,GAAG,MAAM,qCAAqC,OAAO;AAAA,QAC3D,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,cAAc;AAAA,MAChB;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM,GAAG,MAAM,oCAAoC,OAAO;AAAA,QAC1D,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,cAAc;AAAA,MAChB;AAAA,IACF;AACE,aAAO;AAAA,QACL,MAAM,GAAG,MAAM,gBAAgB,OAAO;AAAA,QACtC,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,cAAc;AAAA,MAChB;AAAA,EACJ;AACF;AAEA,SAAS,eAAe,MAAiB,QAAwC;AAC/E,MAAI,KAAK,SAAS,EAAG,QAAO;AAE5B,QAAM,YAAY,kBAAkB,KAAK,CAAC,CAAC;AAC3C,MAAI,CAAC,UAAW,QAAO;AAEvB,SAAO;AAAA,IACL,MAAM,GAAG,MAAM,kCAAkC,SAAS;AAAA,IAC1D,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,cAAc;AAAA,EAChB;AACF;AAEA,SAAS,YAAY,MAAyC;AAC5D,MAAI,KAAK,SAAS,EAAG,QAAO;AAE5B,QAAM,WAAW,kBAAkB,KAAK,CAAC,CAAC;AAC1C,MAAI,CAAC,SAAU,QAAO;AAEtB,SAAO;AAAA,IACL,MAAM,wCAAwC,QAAQ;AAAA,IACtD,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,cAAc;AAAA,EAChB;AACF;AAMA,SAAS,kBAAkB,MAA8B;AACvD,MAAI,CAAC,KAAM,QAAO;AAElB,UAAQ,KAAK,MAAM;AAAA,IACjB,KAAK,WAAW;AACd,YAAM,UAAU;AAChB,aAAO,KAAK,UAAU,QAAQ,KAAK;AAAA,IACrC;AAAA,IAEA,KAAK,cAAc;AACjB,YAAM,SAAS;AACf,YAAM,MAAM,OAAO;AACnB,UAAI,QAAQ,QAAQ,QAAQ,KAAM,QAAO;AACzC,UAAI,QAAQ,MAAO,QAAO;AAC1B,UAAI,QAAQ,KAAM,QAAO;AACzB,UAAI,QAAQ,QAAS,QAAO;AAC5B,UAAI,QAAQ,OAAQ,QAAO;AAC3B,UAAI,QAAQ,WAAY,QAAO;AAC/B,UAAI,QAAQ,SAAU,QAAO;AAC7B,aAAO;AAAA,IACT;AAAA,IAEA,KAAK,YAAY;AACf,YAAM,UAAU;AAChB,YAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AACjC,aAAO,QAAQ,UAAU,UAAU,KAAK,IAAI,KAAK,KAAK,IAAI;AAAA,IAC5D;AAAA,IAEA,KAAK,YAAY;AACf,YAAM,UAAU;AAChB,YAAM,YAAY,iBAAiB,QAAQ,KAAK;AAChD,aAAO,2BAA2B,SAAS;AAAA,IAC7C;AAAA,IAEA,KAAK,cAAc;AACjB,YAAM,WAAW;AACjB,YAAM,MAAM,kBAAkB,SAAS,MAAM;AAC7C,YAAM,OAAO,SAAS;AACtB,UAAI,CAAC,IAAK,QAAO;AAGjB,UAAI,KAAK,WAAW,GAAG,GAAG;AACxB,eAAO,GAAG,GAAG,UAAU,KAAK,MAAM,CAAC,CAAC;AAAA,MACtC;AACA,aAAO,GAAG,GAAG,IAAI,IAAI;AAAA,IACvB;AAAA,IAEA,KAAK,UAAU;AACb,YAAM,UAAU;AAChB,YAAM,MAAM,kBAAkB,QAAQ,MAAM;AAC5C,YAAM,OAAO,OAAO,QAAQ,aAAa,WAAW,QAAQ,WAAW;AACvE,UAAI,CAAC,OAAO,CAAC,KAAM,QAAO;AAG1B,UAAI,KAAK,WAAW,GAAG,GAAG;AACxB,eAAO,GAAG,GAAG,UAAU,KAAK,MAAM,CAAC,CAAC;AAAA,MACtC;AACA,aAAO,GAAG,GAAG,IAAI,IAAI;AAAA,IACvB;AAAA,IAEA,KAAK,UAAU;AACb,YAAM,UAAU;AAChB,YAAM,OAAO,kBAAkB,QAAQ,IAAI;AAC3C,YAAM,QAAQ,kBAAkB,QAAQ,KAAK;AAC7C,UAAI,CAAC,QAAQ,CAAC,MAAO,QAAO;AAE5B,YAAM,KAAK,QAAQ;AACnB,cAAQ,IAAI;AAAA,QACV,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK;AAAA,QAChC,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,IAAI,IAAI,OAAO,KAAK;AAAA,QAC7B,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,IAAI,IAAI,OAAO,KAAK;AAAA,QAC7B,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK;AAAA,QAChC,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,IAAI,IAAI,OAAO,KAAK;AAAA,QAC7B,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,IAAI,IAAI,OAAO,KAAK;AAAA,QAC7B,KAAK,OAAO;AAEV,gBAAM,WAAW,QAAQ;AACzB,gBAAM,YAAY,SAAS,OAAO,MAAM,CAAC,KAAK;AAC9C,gBAAM,iBAAiB,kBAAkB,SAAS;AAClD,cAAI,CAAC,eAAgB,QAAO;AAC5B,iBAAO,GAAG,IAAI,wBAAwB,cAAc;AAAA,QACtD;AAAA,QACA;AACE,iBAAO;AAAA,MACX;AAAA,IACF;AAAA,IAEA,KAAK,QAAQ;AACX,YAAM,WAAW;AACjB,YAAM,SAAS,SAAS;AACxB,YAAM,QAAQ,SAAS,QAAQ,CAAC,GAAG,IAAI,iBAAiB;AACxD,UAAI,KAAK,KAAK,CAAC,MAAqB,MAAM,IAAI,EAAG,QAAO;AAExD,UAAI,OAAO,SAAS,YAAY,OAAO,SAAS,cAAc;AAC5D,cAAM,YAAY;AAClB,cAAM,MAAM,kBAAkB,UAAU,MAAM;AAC9C,cAAM,OAAO,OAAO,UAAU,aAAa,WAAW,UAAU,WAAW;AAC3E,YAAI,CAAC,OAAO,CAAC,KAAM,QAAO;AAC1B,eAAO,GAAG,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC;AAAA,MAC1C;AAEA,YAAM,KAAK,kBAAkB,MAAM;AACnC,UAAI,CAAC,GAAI,QAAO;AAChB,aAAO,GAAG,EAAE,IAAI,KAAK,KAAK,IAAI,CAAC;AAAA,IACjC;AAAA,IAEA,KAAK,cAAc;AACjB,YAAM,UAAU;AAChB,YAAM,WAAW,QAAQ;AACzB,YAAM,SAAS,QAAQ;AAEvB,cAAQ,UAAU;AAAA,QAChB,KAAK;AACH,cAAI,QAAQ,SAAS,YAAY;AAC/B,kBAAM,UAAU;AAChB,kBAAM,YAAY,iBAAiB,QAAQ,KAAK;AAChD,mBAAO,2BAA2B,SAAS;AAAA,UAC7C;AACA,iBAAO;AAAA;AAAA,QAET,KAAK;AACH,cAAI,QAAQ,SAAS,YAAY;AAC/B,kBAAM,UAAU;AAChB,kBAAM,YAAY,iBAAiB,QAAQ,KAAK;AAChD,mBAAO,4CAA4C,SAAS;AAAA,UAC9D;AACA,iBAAO;AAAA;AAAA,QAET,KAAK;AACH,iBAAO;AAAA,QAET,KAAK;AACH,iBAAO;AAAA,QAET,KAAK;AACH,cAAI,QAAQ,SAAS,YAAY;AAC/B,kBAAM,UAAU;AAChB,kBAAM,YAAY,iBAAiB,QAAQ,KAAK;AAChD,mBAAO,cAAc,SAAS;AAAA,UAChC;AACA,iBAAO;AAAA,QAET,KAAK;AACH,iBAAO;AAAA,QAET;AACE,iBAAO;AAAA,MACX;AAAA,IACF;AAAA,IAEA;AACE,aAAO;AAAA,EACX;AACF;AAMA,SAAS,cAAc,QAAyB;AAC9C,MAAI,OAAO,SAAS,cAAc;AAChC,UAAM,SAAS;AACf,QAAI,OAAO,UAAU,QAAQ,OAAO,UAAU,KAAM,QAAO;AAC3D,QAAI,OAAO,UAAU,MAAO,QAAO;AAAA,EACrC;AAEA,MAAI,OAAO,SAAS,YAAY;AAC9B,UAAM,UAAU;AAChB,UAAM,YAAY,iBAAiB,QAAQ,KAAK;AAChD,WAAO,8BAA8B,SAAS;AAAA,EAChD;AAEA,QAAM,WAAW,kBAAkB,MAAM;AACzC,SAAO,YAAY;AACrB;AAEA,SAAS,iBAAiB,MAA8B;AACtD,MAAI,CAAC,KAAM,QAAO;AAElB,MAAI,KAAK,SAAS,YAAY;AAC5B,UAAM,UAAU;AAChB,UAAM,MAAM,QAAQ;AACpB,UAAM,WAAW,IAAI,WAAW,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI;AAEtD,WAAO,kBAAkB,QAAQ;AAAA,EACnC;AAEA,MAAI,KAAK,SAAS,aAAa,KAAK,SAAS,UAAU;AACrD,UAAM,UAAU;AAChB,UAAM,MAAM,QAAQ;AACpB,QAAI,OAAO,QAAQ,UAAU;AAC3B,YAAM,WAAW,IAAI,WAAW,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI;AACtD,aAAO,kBAAkB,QAAQ;AAAA,IACnC;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,cAAc;AAC9B,UAAM,SAAS;AACf,WAAO,kBAAkB,OAAO,KAAK;AAAA,EACvC;AAEA,SAAO;AACT;;;AClmCA,SAAS,uBAAuB,UAAqC;AACnE,MAAI,SAAS,WAAW,EAAG,QAAO;AAElC,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,aAAW,KAAK,UAAU;AACxB,UAAM,WAAW,EAAE,SAAS,QAAQ,OAAO,GAAG,EAAE,MAAM,GAAG,EAAE;AAC3D,UAAM,YAAY,SAAS,SAAS,EAAE,SAAS,SAAS,WAAW,QAAQ;AAC3E,UAAM,KAAK,aAAQ,EAAE,GAAG,OAAO,EAAE,CAAC,WAAM,UAAU,OAAO,EAAE,CAAC,SAAI;AAAA,EAClE;AAEA,QAAM,KAAK,uZAAwE;AACnF,QAAM,KAAK,IAAI;AAEf,SAAO,MAAM,KAAK,IAAI;AACxB;AAKO,SAAS,uBAAuB,SAAwC;AAC7E,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,OAAO;AAAA,IACP,QAAQ;AAAA,EACV,IAAI;AAGJ,QAAM,iBAAiB,SAAS,IAAI,OAAK;AACvC,UAAM,UAAU,EAAE,KAAK,SAAS,OAAO;AACvC,UAAM,KAAK,UAAU,kBAAkB,EAAE,IAAI,MAAM,aAAa,EAAE,IAAI;AAEtE,QAAI,OAAO;AAET,YAAM,kBAAkB,EAAE,SAAS,QAAQ,OAAO,KAAK,EAAE,QAAQ,OAAO,GAAG;AAC3E,aAAO;AAAA,OAAU,eAAe;AAAA,IAAU,EAAE,EAAE,IAAI,EAAE;AAAA,IACtD;AACA,WAAO,GAAG,EAAE,EAAE,IAAI,EAAE;AAAA,EACtB,CAAC;AAGD,QAAM,gBAAgB,SAAS,IAAI,OAAK;AACtC,UAAM,WAAW,sBAAsB,CAAC;AACxC,WAAO,aAAa,EAAE,EAAE,YAAY,EAAE,KAAK,OAAO,EAAE,EAAE,GAAG,QAAQ;AAAA,EACnE,CAAC;AAED,QAAM,aAAa,cAAc,gBAAgB;AACjD,QAAM,cAAc,eAAe,gBAAgB;AAGnD,QAAM,iBAAiB,QAAQ,uBAAuB,QAAQ,IAAI;AAElE,SAAO;AAAA;AAAA;AAAA;AAAA,eAIM,SAAS,MAAM;AAAA;AAAA;AAAA,EAG5B,cAAc;AAAA;AAAA,EAEd,UAAU,GAAG,WAAW;AAAA,WACf,eAAe,KAAK,GAAG,CAAC;AAAA;AAAA,qBAEd,aAAa,QAAQ,IAAI,OAAO,EAAE;AAAA;AAAA,EAErD,yBAAyB,QAAQ,CAAC;AAAA,4BACR,QAAQ,QAAQ,IAAI,iBAAiB,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMjE,cAAc,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxB,OAAO,6EAA6E,EAAE;AAAA;AAAA;AAAA;AAAA,aAI3E,KAAK,UAAU,SAAS,IAAI,OAAK,EAAE,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAMzC,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUrB;AAKA,SAAS,sBAAsB,GAA4B;AACzD,QAAM,OAAiB,CAAC;AAExB,MAAI,EAAE,UAAU,QAAS,MAAK,KAAK,KAAK;AACxC,MAAI,EAAE,UAAU,KAAM,MAAK,KAAK,KAAK;AACrC,MAAI,EAAE,UAAU,KAAM,MAAK,KAAK,KAAK;AACrC,MAAI,EAAE,UAAU,SAAU,MAAK,KAAK,KAAK,EAAE,UAAU,QAAQ,EAAE;AAC/D,MAAI,EAAE,UAAU,SAAU,MAAK,KAAK,KAAK,EAAE,UAAU,QAAQ,EAAE;AAE/D,MAAI,KAAK,WAAW,EAAG,QAAO;AAC9B,SAAO,KAAK,KAAK,KAAK,GAAG,CAAC;AAC5B;AAKA,SAAS,aAAa,UAAsC;AAC1D,SAAO,SAAS;AAAA,IACd,OACE,EAAE,UAAU,WACZ,EAAE,UAAU,QACZ,EAAE,UAAU,QACZ,EAAE,UAAU,YACZ,EAAE,UAAU;AAAA,EAChB;AACF;AAKA,SAAS,QAAQ,UAAsC;AACrD,SAAO,SAAS,KAAK,OAAK,EAAE,UAAU,IAAI;AAC5C;AAKA,SAAS,yBAAyB,UAAqC;AACrE,QAAM,QAAkB,CAAC;AAEzB,MAAI,SAAS,KAAK,OAAK,EAAE,UAAU,WAAW,EAAE,UAAU,IAAI,GAAG;AAC/D,UAAM;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS,KAAK,OAAK,EAAE,UAAU,QAAQ,GAAG;AAC5C,UAAM;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS,KAAK,OAAK,EAAE,UAAU,QAAQ,GAAG;AAC5C,UAAM;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;;;ACrLO,SAAS,cACd,MACA,YACA,iBACiB;AACjB,MAAI,WAAW;AACf,QAAM,YAAsB,CAAC;AAG7B,QAAM,WAAW;AAAA,IACf;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,EACF;AAEA,MAAI,SAAS;AAEb,aAAW,WAAW,UAAU;AAC9B,aAAS,OAAO,QAAQ,SAAS,CAAC,OAAO,YAAY,WAAW;AAC9D,YAAM,YAAY,WAAW,IAAI,MAAM;AAEvC,UAAI,WAAW;AACb,mBAAW;AACX,eAAO,GAAG,UAAU,WAAW,SAAS;AAAA,MAC1C;AAGA,UAAI,gBAAgB,IAAI,MAAM,GAAG;AAC/B,kBAAU,KAAK,MAAM;AAErB,eAAO;AAAA,MACT;AAGA,gBAAU,KAAK,MAAM;AACrB,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF;AACF;AAkBO,SAAS,eAAe,MAAwB;AACrD,QAAM,UAAoB,CAAC;AAE3B,QAAM,WAAW,CAAC,sBAAsB,sBAAsB,oBAAoB;AAElF,aAAW,WAAW,UAAU;AAC9B,QAAI;AACJ,WAAQ,QAAQ,QAAQ,KAAK,IAAI,GAAI;AACnC,cAAQ,KAAK,MAAM,CAAC,CAAC;AAAA,IACvB;AAAA,EACF;AAEA,SAAO;AACT;;;AClBA,IAAM,oBAAoB;AAC1B,IAAM,6BAA6B,OAAO;AAG1C,IAAM,iBAAiB,CAAC,aAAa,oBAAoB,mBAAmB;AAQrE,SAAS,UAAU,UAAkC,CAAC,GAAW;AACtE,QAAM,OAAO,QAAQ,QAAQ;AAC7B,QAAM,UAAU,IAAI,QAAQ,OAAO;AACnC,QAAM,aAAa,IAAI,WAAW;AAClC,QAAM,YAAY,IAAI,UAAU,OAAO;AAEvC,MAAI,SAA+B;AACnC,MAAI,eAA8B;AAClC,MAAI,gBAAgB;AACpB,MAAI,QAAQ;AAGZ,QAAM,mBAAsC,CAAC;AAC7C,QAAM,aAAa,oBAAI,IAAoB;AAC3C,QAAM,kBAAkB,oBAAI,IAAY;AACxC,MAAI,cAAc;AAClB,MAAI,eAAe;AAKnB,WAAS,iBAAiB,OAAgC;AACxD,UAAM,WAAW,CAAC,GAAG,MAAM,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG;AACpD,UAAM,SAAS,CAAC,GAAG,MAAM,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG;AAChD,UAAM,YAAY,CAAC,GAAG,MAAM,iBAAiB,EAAE,KAAK,EAAE,KAAK,GAAG;AAC9D,WAAO,GAAG,QAAQ,IAAI,MAAM,IAAI,MAAM,UAAU,IAAI,SAAS;AAAA,EAC/D;AAKA,WAAS,0BAAgC;AACvC,QAAI,CAAC,OAAQ;AAEb,UAAM,MAAM,OAAO,YAAY,cAAc,0BAA0B;AACvE,QAAI,KAAK;AACP,aAAO,YAAY,iBAAiB,GAAG;AACvC,aAAO,GAAG,KAAK,EAAE,MAAM,cAAc,CAAC;AAEtC,UAAI,QAAQ,OAAO;AACjB,gBAAQ,IAAI,2DAA2D;AAAA,MACzE;AAAA,IACF;AAAA,EACF;AAKA,WAAS,cAAc,QAA+B;AAEpD,QAAI,WAAW,IAAI,MAAM,GAAG;AAC1B,aAAO,WAAW,IAAI,MAAM;AAAA,IAC9B;AAGA,QAAI,gBAAgB,IAAI,MAAM,GAAG;AAC/B,aAAO;AAAA,IACT;AAGA,UAAM,UAAU,QAAQ,MAAM;AAE9B,QAAI,SAAS;AACX,uBAAiB,KAAK,OAAO;AAC7B,iBAAW,IAAI,QAAQ,QAAQ,EAAE;AAEjC,UAAI,QAAQ,gBAAgB;AAE1B,YAAI,QAAQ,KAAK,SAAS,IAAI,EAAG,eAAc;AAC/C,YAAI,QAAQ,KAAK,SAAS,IAAI,EAAG,gBAAe;AAAA,MAClD;AAEA,UAAI,QAAQ,OAAO;AACjB,gBAAQ,IAAI,0BAA0B,MAAM,QAAQ,QAAQ,EAAE,EAAE;AAAA,MAClE;AAEA,aAAO,QAAQ;AAAA,IACjB;AAGA,oBAAgB,IAAI,MAAM;AAE1B,QAAI,QAAQ,OAAO;AACjB,cAAQ,IAAI,2CAA2C,MAAM,GAAG;AAAA,IAClE;AAEA,WAAO;AAAA,EACT;AAKA,WAAS,0BAAkC;AACzC,UAAM,QAAQ,WAAW,SAAS;AAClC,UAAM,YAAY,iBAAiB,KAAK;AAGxC,QAAI,gBAAgB,cAAc,eAAe;AAC/C,aAAO;AAAA,IACT;AAGA,QAAI,SAAS,QAAQ,eAAe,QAAQ,gBAAgB,QAAQ;AAClE,qBAAe,UAAU,oBAAoB,QAAQ,WAAW;AAAA,IAClE,OAAO;AACL,qBAAe,UAAU,SAAS,OAAO,OAAO;AAAA,IAClD;AAEA,oBAAgB;AAEhB,QAAI,QAAQ,OAAO;AACjB,YAAM,UAAU,WAAW,WAAW;AACtC,cAAQ,IAAI,iCAAiC,OAAO;AAAA,IACtD;AAEA,WAAO;AAAA,EACT;AAKA,WAAS,6BAAqC;AAE5C,QAAI,gBAAgB,OAAO,GAAG;AAC5B,UAAI,QAAQ,OAAO;AACjB,gBAAQ,IAAI,eAAe,gBAAgB,IAAI,oCAAoC;AAAA,MACrF;AAEA,aAAO,wBAAwB;AAAA,IACjC;AAEA,UAAM,SAAS,uBAAuB;AAAA,MACpC,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,YAAY,QAAQ;AAAA,MACpB,MAAM,QAAQ;AAAA,MACd,OAAO,QAAQ;AAAA,IACjB,CAAC;AAED,QAAI,QAAQ,OAAO;AACjB,cAAQ,IAAI,gCAAgC,iBAAiB,MAAM,WAAW;AAAA,IAChF;AAEA,WAAO;AAAA,EACT;AAKA,WAAS,iBAAyB;AAChC,QAAI,SAAS,WAAW;AACtB,aAAO,2BAA2B;AAAA,IACpC;AACA,WAAO,wBAAwB;AAAA,EACjC;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA;AAAA;AAAA;AAAA,IAKT,eAAe,QAAQ;AACrB,cAAQ,OAAO,YAAY;AAE3B,UAAI,QAAQ,OAAO;AACjB,gBAAQ,IAAI,yCAAyC,QAAQ,gBAAgB,YAAY;AAAA,MAC3F;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,gBAAgB,SAAwB;AAC5C,eAAS;AAGT,YAAM,MAAM,QAAQ,OAAO;AAC3B,UAAI,QAAQ,OAAO;AACjB,gBAAQ,IAAI,qCAAqC,GAAG;AAAA,MACtD;AAEA,YAAM,eAAe,MAAM,QAAQ,YAAY,GAAG;AAClD,iBAAW,aAAa,YAAY;AAEpC,UAAI,QAAQ,OAAO;AACjB,cAAM,UAAU,WAAW,WAAW;AACtC,gBAAQ,IAAI,kCAAkC,OAAO;AAAA,MACvD;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA,UAAU,IAAY;AACpB,UAAI,eAAe,SAAS,EAAE,GAAG;AAC/B,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,KAAK,IAAY;AACf,UAAI,OAAO,4BAA4B;AACrC,eAAO,eAAe;AAAA,MACxB;AACA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,UAAU,MAAc,IAAY;AAClC,UAAI,CAAC,QAAQ,WAAW,EAAE,GAAG;AAC3B,eAAO;AAAA,MACT;AAGA,UAAI,SAAS,aAAa,CAAC,OAAO;AAEhC,cAAM,UAAU,eAAe,IAAI;AAEnC,mBAAW,UAAU,SAAS;AAC5B,wBAAc,MAAM;AAAA,QACtB;AAGA,cAAM,SAAS,cAAc,MAAM,YAAY,eAAe;AAE9D,YAAI,OAAO,UAAU;AACnB,cAAI,QAAQ,OAAO;AACjB,oBAAQ,IAAI,4BAA4B,GAAG,MAAM,GAAG,EAAE,IAAI,CAAC,EAAE;AAAA,UAC/D;AACA,iBAAO,EAAE,MAAM,OAAO,MAAM,KAAK,KAAK;AAAA,QACxC;AAEA,eAAO;AAAA,MACT;AAGA,YAAM,QAAQ,QAAQ,KAAK,MAAM,EAAE;AACnC,YAAM,UAAU,WAAW,IAAI,IAAI,KAAK;AAGxC,UAAI,WAAW,QAAQ;AAErB,qBAAa,MAAM;AACjB,gBAAM,cAAc,iBAAiB,WAAW,SAAS,CAAC;AAC1D,cAAI,gBAAgB,eAAe;AACjC,oCAAwB;AAAA,UAC1B;AAAA,QACF,CAAC;AAAA,MACH;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,gBAAgB,KAAiB;AACrC,YAAM,EAAE,MAAM,KAAK,IAAI;AAGvB,UAAI,QAAQ,WAAW,IAAI,GAAG;AAC5B,YAAI;AAEF,gBAAM,UAAU,MAAM,KAAK;AAC3B,gBAAM,QAAQ,QAAQ,KAAK,SAAS,IAAI;AACxC,gBAAM,UAAU,WAAW,IAAI,MAAM,KAAK;AAE1C,cAAI,QAAQ,OAAO;AACjB,oBAAQ,IAAI,+BAA+B,KAAK,MAAM,GAAG,EAAE,IAAI,GAAG,KAAK;AAAA,UACzE;AAGA,cAAI,SAAS;AACX,kBAAM,cAAc,iBAAiB,WAAW,SAAS,CAAC;AAC1D,gBAAI,gBAAgB,eAAe;AACjC,sCAAwB;AAAA,YAC1B;AAAA,UACF;AAAA,QACF,QAAQ;AAEN,cAAI,WAAW,OAAO,IAAI,GAAG;AAC3B,oCAAwB;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,aAAa;AACjB,UAAI,CAAC,OAAO;AAEV,YAAI,SAAS,WAAW;AACtB,wBAAc;AACd,2BAAiB,SAAS;AAC1B,qBAAW,MAAM;AACjB,0BAAgB,MAAM;AACtB,wBAAc;AACd,yBAAe;AAEf,cAAI,QAAQ,OAAO;AACjB,oBAAQ,IAAI,2CAA2C;AAAA,UACzD;AAAA,QACF;AAGA,cAAM,MAAM,QAAQ,IAAI;AAExB,YAAI,QAAQ,OAAO;AACjB,kBAAQ,IAAI,uDAAuD;AAAA,QACrE;AAEA,cAAM,eAAe,MAAM,QAAQ,YAAY,GAAG;AAClD,mBAAW,aAAa,YAAY;AAGpC,YAAI,SAAS,WAAW;AACtB,gBAAM,QAAQ,WAAW,SAAS;AAClC,cAAI,MAAM,kBAAkB,OAAO,GAAG;AACpC,kBAAM,UAAU;AAAA,cACd,MAAM;AAAA,YACR;AACA,gBAAI,OAAO,KAAK,OAAO,EAAE,SAAS,GAAG;AACnC,qCAAuB,OAAO;AAC9B,kBAAI,QAAQ,OAAO;AACjB,wBAAQ;AAAA,kBACN,wCAAwC,OAAO,KAAK,OAAO,EAAE,MAAM;AAAA,gBACrE;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI,QAAQ,OAAO;AACjB,gBAAM,UAAU,WAAW,WAAW;AACtC,kBAAQ,IAAI,qBAAqB,QAAQ,SAAS,4BAA4B;AAAA,YAC5E,UAAU,QAAQ;AAAA,YAClB,QAAQ,QAAQ;AAAA,YAChB,YAAY,QAAQ;AAAA,YACpB,WAAW,QAAQ;AAAA,UACrB,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,IAAO,gBAAQ;","names":["match"]}
1
+ {"version":3,"sources":["../src/language-keywords.ts","../src/scanner.ts","../src/aggregator.ts","../src/generator.ts","../src/semantic-integration.ts","../src/compiler.ts","../src/compiled-generator.ts","../src/html-transformer.ts","../src/index.ts"],"sourcesContent":["/**\n * Language Keywords for Detection\n *\n * Maps of keywords for each of the 21 supported languages.\n * Used by the scanner to detect which languages are used in hyperscript templates.\n *\n * Note: These are a representative subset of keywords - enough to reliably\n * detect language usage without including every possible keyword variant.\n */\n\nimport type { CustomLanguageKeywords } from './types';\n\n/**\n * All supported language codes.\n */\nexport const SUPPORTED_LANGUAGES = [\n 'en',\n 'es',\n 'pt',\n 'fr',\n 'de',\n 'it',\n 'vi', // Western (Latin script)\n 'pl',\n 'ru',\n 'uk', // Slavic (Latin/Cyrillic)\n 'ja',\n 'zh',\n 'ko', // East Asian\n 'ar', // RTL (Arabic script)\n 'hi',\n 'bn', // South Asian (Indic scripts)\n 'th', // Southeast Asian (Thai script)\n 'tr', // Agglutinative Latin\n 'id',\n 'sw',\n 'qu', // Other\n 'tl', // Tagalog (auto-added)\n] as const;\n\nexport type SupportedLanguage = (typeof SUPPORTED_LANGUAGES)[number];\n\n/**\n * Regional bundle mappings.\n */\nexport const REGIONS = {\n western: ['en', 'es', 'pt', 'fr', 'de', 'it'] as SupportedLanguage[],\n 'east-asian': ['ja', 'zh', 'ko'] as SupportedLanguage[],\n slavic: ['pl', 'ru', 'uk'] as SupportedLanguage[],\n 'south-asian': ['hi', 'bn'] as SupportedLanguage[],\n priority: [\n 'en',\n 'es',\n 'pt',\n 'fr',\n 'de',\n 'it',\n 'ja',\n 'zh',\n 'ko',\n 'ar',\n 'tr',\n 'ru',\n 'hi',\n ] as SupportedLanguage[],\n all: SUPPORTED_LANGUAGES as unknown as SupportedLanguage[],\n};\n\n/**\n * Japanese keywords (hiragana, katakana, kanji).\n * Unique script makes detection straightforward.\n */\nexport const JAPANESE_KEYWORDS = new Set([\n '切り替え',\n '切り替える',\n 'トグル',\n 'トグルする',\n '追加',\n '追加する',\n '加える',\n '削除',\n '削除する',\n '取り除く',\n '表示',\n '表示する',\n '見せる',\n '隠す',\n '非表示',\n '非表示にする',\n '設定',\n '設定する',\n 'セット',\n '増加',\n '増やす',\n 'インクリメント',\n '減少',\n '減らす',\n 'デクリメント',\n '引き金',\n '発火',\n 'トリガー',\n '送る',\n '送信',\n 'もし',\n '条件',\n 'そうでなければ',\n 'それ以外',\n '繰り返し',\n '繰り返す',\n 'リピート',\n '待つ',\n '待機',\n 'の間',\n '間',\n]);\n\n/**\n * Korean keywords (Hangul).\n * Unique script makes detection straightforward.\n */\nexport const KOREAN_KEYWORDS = new Set([\n '토글',\n '전환',\n '추가',\n '제거',\n '삭제',\n '보이다',\n '표시',\n '보이기',\n '숨기다',\n '숨기기',\n '설정',\n '증가',\n '감소',\n '트리거',\n '보내다',\n '만약',\n '아니면',\n '반복',\n '대기',\n '동안',\n]);\n\n/**\n * Chinese keywords (CJK characters).\n * Note: Some overlap with Japanese kanji, but context usually distinguishes.\n */\nexport const CHINESE_KEYWORDS = new Set([\n '切换',\n '添加',\n '加',\n '移除',\n '删除',\n '去掉',\n '显示',\n '展示',\n '隐藏',\n '设置',\n '设定',\n '增加',\n '减少',\n '触发',\n '发送',\n '如果',\n '否则',\n '重复',\n '等待',\n '当',\n]);\n\n/**\n * Arabic keywords (Arabic script).\n * RTL script makes detection straightforward.\n */\nexport const ARABIC_KEYWORDS = new Set([\n 'بدل',\n 'بدّل',\n 'غيّر',\n 'غير',\n 'أضف',\n 'اضف',\n 'زِد',\n 'احذف',\n 'أزل',\n 'امسح',\n 'اظهر',\n 'أظهر',\n 'اعرض',\n 'اخف',\n 'أخفِ',\n 'اخفي',\n 'اضبط',\n 'عيّن',\n 'حدد',\n 'ارفع',\n 'أنقص',\n 'قلل',\n 'تشغيل',\n 'أطلق',\n 'فعّل',\n 'أرسل',\n 'إذا',\n 'وإلا',\n 'خلاف ذلك',\n 'كرر',\n 'انتظر',\n 'بينما',\n]);\n\n/**\n * Spanish keywords (Latin script with accents).\n * Distinguished by specific Spanish words.\n */\nexport const SPANISH_KEYWORDS = new Set([\n 'alternar',\n 'cambiar',\n 'conmutar',\n 'agregar',\n 'añadir',\n 'quitar',\n 'eliminar',\n 'remover',\n 'sacar',\n 'mostrar',\n 'enseñar',\n 'ocultar',\n 'esconder',\n 'establecer',\n 'fijar',\n 'definir',\n 'incrementar',\n 'aumentar',\n 'decrementar',\n 'disminuir',\n 'disparar',\n 'activar',\n 'enviar',\n 'si',\n 'sino',\n 'de lo contrario',\n 'repetir',\n 'esperar',\n 'mientras',\n]);\n\n/**\n * Portuguese keywords (Latin script with accents).\n * Distinguished by specific Portuguese words.\n */\nexport const PORTUGUESE_KEYWORDS = new Set([\n 'alternar',\n 'trocar',\n 'adicionar',\n 'acrescentar',\n 'remover',\n 'eliminar',\n 'apagar',\n 'mostrar',\n 'exibir',\n 'ocultar',\n 'esconder',\n 'definir',\n 'configurar',\n 'incrementar',\n 'aumentar',\n 'decrementar',\n 'diminuir',\n 'disparar',\n 'ativar',\n 'enviar',\n 'se',\n 'senão',\n 'repetir',\n 'esperar',\n 'aguardar',\n 'enquanto',\n]);\n\n/**\n * French keywords (Latin script with accents).\n * Distinguished by specific French words.\n */\nexport const FRENCH_KEYWORDS = new Set([\n 'basculer',\n 'permuter',\n 'alterner',\n 'ajouter',\n 'supprimer',\n 'enlever',\n 'retirer',\n 'montrer',\n 'afficher',\n 'cacher',\n 'masquer',\n 'définir',\n 'établir',\n 'incrémenter',\n 'augmenter',\n 'décrémenter',\n 'diminuer',\n 'déclencher',\n 'envoyer',\n 'si',\n 'sinon',\n 'répéter',\n 'attendre',\n 'pendant',\n]);\n\n/**\n * German keywords (Latin script with umlauts).\n * Distinguished by specific German words.\n */\nexport const GERMAN_KEYWORDS = new Set([\n 'umschalten',\n 'wechseln',\n 'hinzufügen',\n 'entfernen',\n 'löschen',\n 'zeigen',\n 'anzeigen',\n 'verbergen',\n 'verstecken',\n 'festlegen',\n 'definieren',\n 'erhöhen',\n 'verringern',\n 'vermindern',\n 'auslösen',\n 'senden',\n 'schicken',\n 'wenn',\n 'falls',\n 'sonst',\n 'ansonsten',\n 'wiederholen',\n 'warten',\n 'solange',\n 'während',\n]);\n\n/**\n * Turkish keywords (Latin script with special chars).\n * Distinguished by Turkish-specific characters and words.\n */\nexport const TURKISH_KEYWORDS = new Set([\n 'değiştir',\n 'aç/kapat',\n 'ekle',\n 'kaldır',\n 'sil',\n 'göster',\n 'gizle',\n 'ayarla',\n 'yap',\n 'belirle',\n 'artır',\n 'azalt',\n 'tetikle',\n 'gönder',\n 'eğer',\n 'yoksa',\n 'tekrarla',\n 'bekle',\n 'iken',\n]);\n\n/**\n * Indonesian keywords (Latin script).\n * Distinguished by specific Indonesian words.\n */\nexport const INDONESIAN_KEYWORDS = new Set([\n 'alihkan',\n 'ganti',\n 'tukar',\n 'tambah',\n 'tambahkan',\n 'hapus',\n 'buang',\n 'hilangkan',\n 'tampilkan',\n 'perlihatkan',\n 'sembunyikan',\n 'tutup',\n 'atur',\n 'tetapkan',\n 'tingkatkan',\n 'naikkan',\n 'turunkan',\n 'kurangi',\n 'picu',\n 'jalankan',\n 'kirim',\n 'kirimkan',\n 'jika',\n 'kalau',\n 'bila',\n 'selainnya',\n 'ulangi',\n 'tunggu',\n 'selama',\n]);\n\n/**\n * Swahili keywords (Latin script).\n * Distinguished by specific Swahili words.\n */\nexport const SWAHILI_KEYWORDS = new Set([\n 'badilisha',\n 'geuza',\n 'ongeza',\n 'weka',\n 'ondoa',\n 'futa',\n 'toa',\n 'onyesha',\n 'ficha',\n 'mficho',\n 'seti',\n 'punguza',\n 'chochea',\n 'anzisha',\n 'tuma',\n 'peleka',\n 'kama',\n 'ikiwa',\n 'vinginevyo',\n 'sivyo',\n 'rudia',\n 'subiri',\n 'ngoja',\n 'wakati',\n]);\n\n/**\n * Quechua keywords (Latin script).\n * Distinguished by specific Quechua words.\n */\nexport const QUECHUA_KEYWORDS = new Set([\n 't',\n 'tikray',\n 'kutichiy',\n 'yapay',\n 'yapaykuy',\n 'qichuy',\n 'hurquy',\n 'anchuchiy',\n 'rikuchiy',\n 'qawachiy',\n 'pakay',\n 'pakakuy',\n 'churay',\n 'kamaykuy',\n 'yapachiy',\n 'pisiyachiy',\n 'qallarichiy',\n 'kachay',\n 'apachiy',\n 'sichus',\n 'manachus',\n 'hukniraq',\n 'kutipay',\n 'muyu',\n 'suyay',\n 'kaykamaqa',\n]);\n\n/**\n * Italian keywords (Latin script).\n * Distinguished by specific Italian words.\n */\nexport const ITALIAN_KEYWORDS = new Set([\n 'commutare',\n 'alternare',\n 'cambiare',\n 'aggiungere',\n 'aggiungi',\n 'rimuovere',\n 'eliminare',\n 'togliere',\n 'mostrare',\n 'visualizzare',\n 'nascondere',\n 'impostare',\n 'definire',\n 'incrementare',\n 'aumentare',\n 'decrementare',\n 'diminuire',\n 'scatenare',\n 'attivare',\n 'inviare',\n 'se',\n 'altrimenti',\n 'ripetere',\n 'aspettare',\n 'attendere',\n 'mentre',\n]);\n\n/**\n * Vietnamese keywords (Latin script with diacritics).\n * Distinguished by Vietnamese-specific diacritics and words.\n */\nexport const VIETNAMESE_KEYWORDS = new Set([\n 'chuyển đổi',\n 'bật tắt',\n 'chuyển',\n 'thêm',\n 'bổ sung',\n 'xóa',\n 'gỡ bỏ',\n 'loại bỏ',\n 'bỏ',\n 'hiển thị',\n 'hiện',\n 'ẩn',\n 'che',\n 'giấu',\n 'gán',\n 'thiết lập',\n 'đặt',\n 'tăng',\n 'tăng lên',\n 'giảm',\n 'giảm đi',\n 'kích hoạt',\n 'gửi',\n 'nếu',\n 'không thì',\n 'nếu không',\n 'lặp lại',\n 'chờ',\n 'đợi',\n 'trong khi',\n]);\n\n/**\n * Polish keywords (Latin script).\n * Distinguished by Polish-specific characters and words.\n */\nexport const POLISH_KEYWORDS = new Set([\n 'przełącz',\n 'przelacz',\n 'dodaj',\n 'usuń',\n 'usun',\n 'wyczyść',\n 'wyczysc',\n 'pokaż',\n 'pokaz',\n 'wyświetl',\n 'wyswietl',\n 'ukryj',\n 'schowaj',\n 'ustaw',\n 'określ',\n 'okresl',\n 'zwiększ',\n 'zwieksz',\n 'zmniejsz',\n 'wywołaj',\n 'wywolaj',\n 'wyzwól',\n 'wyzwol',\n 'wyślij',\n 'wyslij',\n 'jeśli',\n 'jesli',\n 'jeżeli',\n 'jezeli',\n 'inaczej',\n 'wpp',\n 'powtórz',\n 'powtorz',\n 'czekaj',\n 'poczekaj',\n 'dopóki',\n 'dopoki',\n 'podczas',\n]);\n\n/**\n * Russian keywords (Cyrillic script).\n * Unique script makes detection straightforward.\n */\nexport const RUSSIAN_KEYWORDS = new Set([\n 'переключить',\n 'переключи',\n 'добавить',\n 'добавь',\n 'удалить',\n 'удали',\n 'убрать',\n 'убери',\n 'показать',\n 'покажи',\n 'скрыть',\n 'скрой',\n 'спрятать',\n 'спрячь',\n 'установить',\n 'установи',\n 'задать',\n 'задай',\n 'увеличить',\n 'увеличь',\n 'уменьшить',\n 'уменьши',\n 'вызвать',\n 'вызови',\n 'отправить',\n 'отправь',\n 'если',\n 'иначе',\n 'повторить',\n 'повтори',\n 'ждать',\n 'жди',\n 'подожди',\n 'пока',\n]);\n\n/**\n * Ukrainian keywords (Cyrillic script).\n * Unique script makes detection straightforward.\n */\nexport const UKRAINIAN_KEYWORDS = new Set([\n 'перемкнути',\n 'перемкни',\n 'додати',\n 'додай',\n 'видалити',\n 'видали',\n 'прибрати',\n 'прибери',\n 'показати',\n 'покажи',\n 'сховати',\n 'сховай',\n 'приховати',\n 'приховай',\n 'встановити',\n 'встанови',\n 'задати',\n 'задай',\n 'збільшити',\n 'збільш',\n 'зменшити',\n 'зменш',\n 'викликати',\n 'виклич',\n 'надіслати',\n 'надішли',\n 'якщо',\n 'інакше',\n 'повторити',\n 'повтори',\n 'чекати',\n 'чекай',\n 'зачекай',\n 'поки',\n]);\n\n/**\n * Hindi keywords (Devanagari script).\n * Unique script makes detection straightforward.\n */\nexport const HINDI_KEYWORDS = new Set([\n 'टॉगल',\n 'बदलें',\n 'बदल',\n 'जोड़ें',\n 'जोड़',\n 'हटाएं',\n 'हटा',\n 'मिटाएं',\n 'दिखाएं',\n 'दिखा',\n 'छिपाएं',\n 'छिपा',\n 'सेट',\n 'निर्धारित',\n 'बढ़ाएं',\n 'बढ़ा',\n 'घटाएं',\n 'घटा',\n 'ट्रिगर',\n 'भेजें',\n 'भेज',\n 'अगर',\n 'यदि',\n 'वरना',\n 'नहीं तो',\n 'दोहराएं',\n 'दोहरा',\n 'प्रतीक्षा',\n 'रुकें',\n 'जब तक',\n]);\n\n/**\n * Bengali keywords (Bengali script).\n * Unique script makes detection straightforward.\n */\nexport const BENGALI_KEYWORDS = new Set([\n 'টগল',\n 'পরিবর্তন',\n 'যোগ',\n 'যোগ করুন',\n 'সরান',\n 'সরিয়ে ফেলুন',\n 'মুছুন',\n 'দেখান',\n 'দেখাও',\n 'লুকান',\n 'লুকাও',\n 'সেট',\n 'নির্ধারণ',\n 'বৃদ্ধি',\n 'বাড়ান',\n 'হ্রাস',\n 'কমান',\n 'ট্রিগার',\n 'পাঠান',\n 'পাঠাও',\n 'যদি',\n 'নতুবা',\n 'না হলে',\n 'পুনরাবৃত্তি',\n 'বার বার',\n 'অপেক্ষা',\n 'থামুন',\n 'যতক্ষণ',\n]);\n\n/**\n * Thai keywords (Thai script).\n * Unique script makes detection straightforward.\n */\nexport const THAI_KEYWORDS = new Set([\n 'สลับ',\n 'เพิ่ม',\n 'ลบ',\n 'ลบออก',\n 'แสดง',\n 'ซ่อน',\n 'ตั้ง',\n 'กำหนด',\n 'เพิ่มค่า',\n 'ลดค่า',\n 'ทริกเกอร์',\n 'ส่ง',\n 'ถ้า',\n 'หาก',\n 'ไม่งั้น',\n 'ไม่เช่นนั้น',\n 'ทำซ้ำ',\n 'รอ',\n 'ในขณะที่',\n]);\n\n/**\n * Tagalog keywords (Latin script).\n * TODO: Fill in keywords after completing the semantic profile.\n * Run 'npm run sync-keywords' to auto-populate from profile.\n */\nexport const TL_KEYWORDS = new Set([\n 'palitan',\n 'itoggle',\n 'idagdag',\n 'magdagdag',\n 'alisin',\n 'tanggalin',\n 'ipakita',\n 'magpakita',\n 'itago',\n 'magtago',\n 'itakda',\n 'magtakda',\n 'dagdagan',\n 'taasan',\n 'bawasan',\n 'ibaba',\n 'magpatugtog',\n 'ipadala',\n 'magpadala',\n 'kung',\n 'kapag',\n 'kung_hindi',\n 'kundi',\n 'ulitin',\n 'paulit-ulit',\n 'maghintay',\n 'hintay',\n 'habang',\n]);\n\n/**\n * Map of language code to keyword set.\n */\nexport const LANGUAGE_KEYWORDS: Record<SupportedLanguage, Set<string>> = {\n en: new Set(), // English is the default, no detection needed\n ja: JAPANESE_KEYWORDS,\n ko: KOREAN_KEYWORDS,\n zh: CHINESE_KEYWORDS,\n ar: ARABIC_KEYWORDS,\n es: SPANISH_KEYWORDS,\n pt: PORTUGUESE_KEYWORDS,\n fr: FRENCH_KEYWORDS,\n de: GERMAN_KEYWORDS,\n it: ITALIAN_KEYWORDS,\n vi: VIETNAMESE_KEYWORDS,\n pl: POLISH_KEYWORDS,\n ru: RUSSIAN_KEYWORDS,\n uk: UKRAINIAN_KEYWORDS,\n hi: HINDI_KEYWORDS,\n bn: BENGALI_KEYWORDS,\n th: THAI_KEYWORDS,\n tr: TURKISH_KEYWORDS,\n id: INDONESIAN_KEYWORDS,\n sw: SWAHILI_KEYWORDS,\n qu: QUECHUA_KEYWORDS,\n tl: TL_KEYWORDS,\n};\n\n/**\n * Check if a script contains keywords from a specific language.\n * Returns true if any keyword from the language is found.\n *\n * Uses word boundary matching to avoid false positives from short keywords.\n * For non-Latin scripts (CJK, Arabic, etc.), simple includes is sufficient\n * since these characters don't appear in English/ASCII.\n */\nexport function containsLanguageKeywords(script: string, language: SupportedLanguage): boolean {\n const keywords = LANGUAGE_KEYWORDS[language];\n if (!keywords || keywords.size === 0) return false;\n\n // Non-Latin scripts can use simple includes (no risk of false positives)\n // Includes: CJK (ja, ko, zh), Arabic (ar), Cyrillic (ru, uk), Indic (hi, bn), Thai (th)\n const nonLatinLangs: SupportedLanguage[] = ['ja', 'ko', 'zh', 'ar', 'ru', 'uk', 'hi', 'bn', 'th'];\n if (nonLatinLangs.includes(language)) {\n for (const keyword of keywords) {\n if (script.includes(keyword)) {\n return true;\n }\n }\n return false;\n }\n\n // Latin-script languages need word boundary matching to avoid false positives\n // from short keywords like 'es', 'o', 'si', etc.\n const lowerScript = script.toLowerCase();\n for (const keyword of keywords) {\n // Skip very short keywords (2 chars or less) - too many false positives\n if (keyword.length <= 2) continue;\n\n // Use word boundary matching\n const pattern = new RegExp(`\\\\b${escapeRegExp(keyword.toLowerCase())}\\\\b`);\n if (pattern.test(lowerScript)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Escape special regex characters in a string.\n */\nfunction escapeRegExp(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Detect all languages used in a hyperscript string.\n * Returns a Set of language codes found.\n *\n * Note: English is never detected (it's the default).\n * Only non-English languages are detected.\n */\nexport function detectLanguages(script: string): Set<SupportedLanguage> {\n const detected = new Set<SupportedLanguage>();\n\n for (const lang of SUPPORTED_LANGUAGES) {\n if (lang === 'en') continue; // Skip English\n\n if (containsLanguageKeywords(script, lang)) {\n detected.add(lang);\n }\n }\n\n return detected;\n}\n\n// =============================================================================\n// Custom Keywords Support\n// =============================================================================\n\n/**\n * Runtime keyword registry for custom/extended languages.\n * Use registerCustomKeywords() to add or extend language keywords.\n */\nconst customKeywordRegistry: Map<string, { keywords: Set<string>; isNonLatin: boolean }> =\n new Map();\n\n/**\n * Register custom keywords for a language.\n * Call this before scanning to add or extend language detection.\n *\n * @param code - Language code (e.g., 'es', 'my-lang')\n * @param config - Keyword configuration\n */\nexport function registerCustomKeywords(code: string, config: CustomLanguageKeywords): void {\n const existing = LANGUAGE_KEYWORDS[code as SupportedLanguage];\n const nonLatinLangs = ['ja', 'ko', 'zh', 'ar', 'ru', 'uk', 'hi', 'bn', 'th'];\n const isNonLatin = config.isNonLatin ?? nonLatinLangs.includes(code);\n\n if (config.extend && existing) {\n // Merge with existing keywords\n const merged = new Set([...existing, ...config.keywords]);\n customKeywordRegistry.set(code, { keywords: merged, isNonLatin });\n } else {\n // Replace or add new\n customKeywordRegistry.set(code, { keywords: config.keywords, isNonLatin });\n }\n}\n\n/**\n * Get keywords for a language, including custom registrations.\n */\nexport function getKeywordsForLanguage(code: string): Set<string> | undefined {\n const custom = customKeywordRegistry.get(code);\n if (custom) return custom.keywords;\n return LANGUAGE_KEYWORDS[code as SupportedLanguage];\n}\n\n/**\n * Check if a language uses non-Latin script.\n */\nexport function isNonLatinLanguage(code: string): boolean {\n const custom = customKeywordRegistry.get(code);\n if (custom) return custom.isNonLatin;\n const nonLatinLangs = ['ja', 'ko', 'zh', 'ar', 'ru', 'uk', 'hi', 'bn', 'th'];\n return nonLatinLangs.includes(code);\n}\n\n/**\n * Get all registered language codes (built-in + custom).\n */\nexport function getAllLanguageCodes(): string[] {\n const builtin = [...SUPPORTED_LANGUAGES];\n const custom = [...customKeywordRegistry.keys()];\n return [...new Set([...builtin, ...custom])];\n}\n\n/**\n * Clear all custom keyword registrations.\n */\nexport function clearCustomKeywords(): void {\n customKeywordRegistry.clear();\n}\n\n// =============================================================================\n// Region Detection\n// =============================================================================\n\n/**\n * Get the optimal regional bundle for a set of detected languages.\n * Returns the smallest bundle that covers all detected languages.\n */\nexport function getOptimalRegion(\n languages: Set<SupportedLanguage>\n): 'western' | 'east-asian' | 'slavic' | 'south-asian' | 'priority' | 'all' | null {\n if (languages.size === 0) return null;\n\n const langArray = [...languages];\n\n // Check if all languages fit in western bundle\n if (langArray.every(l => REGIONS.western.includes(l))) {\n return 'western';\n }\n\n // Check if all languages fit in east-asian bundle\n if (langArray.every(l => REGIONS['east-asian'].includes(l))) {\n return 'east-asian';\n }\n\n // Check if all languages fit in slavic bundle\n if (langArray.every(l => REGIONS.slavic.includes(l))) {\n return 'slavic';\n }\n\n // Check if all languages fit in south-asian bundle\n if (langArray.every(l => REGIONS['south-asian'].includes(l))) {\n return 'south-asian';\n }\n\n // Check if all languages fit in priority bundle\n if (langArray.every(l => REGIONS.priority.includes(l))) {\n return 'priority';\n }\n\n // Need full bundle\n return 'all';\n}\n","/**\n * Scanner\n *\n * Detects hyperscript usage in source files by scanning for _=\"...\" attributes.\n * Also detects non-English language keywords for multilingual semantic support.\n */\n\nimport type { FileUsage, HyperfixiPluginOptions, HtmxUsage } from './types';\nimport { detectLanguages } from './language-keywords';\n\n// htmx/fixi attribute patterns\nconst HTMX_REQUEST_PATTERN =\n /\\b(hx-get|hx-post|hx-put|hx-patch|hx-delete)\\s*=\\s*[\"']([^\"']+)[\"']/gi;\nconst FIXI_ACTION_PATTERN = /\\bfx-action\\s*=\\s*[\"']([^\"']+)[\"']/gi;\nconst FIXI_METHOD_PATTERN = /\\bfx-method\\s*=\\s*[\"'](GET|POST|PUT|PATCH|DELETE)[\"']/gi;\nconst HTMX_SWAP_PATTERN = /\\b(hx-swap|fx-swap)\\s*=\\s*[\"']([^\"']+)[\"']/gi;\nconst HTMX_TARGET_PATTERN = /\\b(hx-target|fx-target)\\s*=\\s*[\"']([^\"']+)[\"']/gi;\nconst HTMX_TRIGGER_PATTERN = /\\b(hx-trigger|fx-trigger)\\s*=\\s*[\"']([^\"']+)[\"']/gi;\nconst HTMX_URL_PATTERN = /\\b(hx-push-url|hx-replace-url)\\s*=\\s*[\"'][^\"']+[\"']/gi;\nconst HTMX_CONFIRM_PATTERN = /\\bhx-confirm\\s*=\\s*[\"']/gi;\nconst HTMX_ON_PATTERN = /\\bhx-on:(\\w+)\\s*=\\s*[\"']([^\"']+)[\"']/g;\n\n/**\n * Converts include/exclude options to RegExp\n */\nfunction toRegex(pattern: RegExp | string[] | undefined, defaultPattern: RegExp): RegExp {\n if (!pattern) return defaultPattern;\n if (pattern instanceof RegExp) return pattern;\n if (Array.isArray(pattern)) {\n const escaped = pattern.map(p => p.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'));\n return new RegExp(`(${escaped.join('|')})`);\n }\n return defaultPattern;\n}\n\n/**\n * Scanner class for detecting hyperscript usage in files\n */\nexport class Scanner {\n private include: RegExp;\n private exclude: RegExp;\n private debug: boolean;\n\n constructor(options: Pick<HyperfixiPluginOptions, 'include' | 'exclude' | 'debug'>) {\n this.include = toRegex(\n options.include,\n /\\.(html?|vue|svelte|jsx?|tsx?|astro|php|erb|ejs|hbs|handlebars)$/\n );\n this.exclude = toRegex(options.exclude, /node_modules|\\.git/);\n this.debug = options.debug ?? false;\n }\n\n /**\n * Check if a file should be scanned\n */\n shouldScan(id: string): boolean {\n return this.include.test(id) && !this.exclude.test(id);\n }\n\n /**\n * Scan code for hyperscript usage\n */\n scan(code: string, id: string): FileUsage {\n const usage: FileUsage = {\n commands: new Set(),\n blocks: new Set(),\n positional: false,\n detectedLanguages: new Set(),\n };\n\n // Find all hyperscript in _=\"...\" attributes (single, double, backtick quotes)\n const attrPatterns = [\n /_\\s*=\\s*\"([^\"]+)\"/g, // _=\"...\"\n /_\\s*=\\s*'([^']+)'/g, // _='...'\n /_\\s*=\\s*`([^`]+)`/g, // _=`...`\n /_=\\{`([^`]+)`\\}/g, // _={`...`} (JSX)\n /_=\\{['\"]([^'\"]+)['\"]\\}/g, // _={\"...\"} or _={'...'} (JSX)\n ];\n\n for (const pattern of attrPatterns) {\n let match;\n while ((match = pattern.exec(code))) {\n this.analyzeScript(match[1], usage);\n }\n }\n\n // Also check for hyperscript in script tags\n const scriptPattern = /<script[^>]*type=[\"']?text\\/hyperscript[\"']?[^>]*>([^<]+)<\\/script>/gi;\n let match;\n while ((match = scriptPattern.exec(code))) {\n this.analyzeScript(match[1], usage);\n }\n\n // Scan for htmx/fixi attributes\n const htmxUsage = this.scanHtmxAttributes(code);\n\n if (htmxUsage.hasHtmxAttributes) {\n usage.htmx = htmxUsage;\n this.inferCommandsFromHtmx(htmxUsage, usage);\n\n // Scan hx-on:* handler values as hyperscript\n for (const handlerCode of htmxUsage.onHandlers) {\n this.analyzeScript(handlerCode, usage);\n }\n\n // Check hx-target for positional patterns\n if (/hx-target\\s*=\\s*[\"'](closest|next|previous|find)\\s/i.test(code)) {\n usage.positional = true;\n }\n }\n\n if (\n this.debug &&\n (usage.commands.size > 0 ||\n usage.blocks.size > 0 ||\n usage.detectedLanguages.size > 0 ||\n usage.htmx?.hasHtmxAttributes)\n ) {\n console.log(`[hyperfixi] Scanned ${id}:`, {\n commands: [...usage.commands],\n blocks: [...usage.blocks],\n positional: usage.positional,\n languages: [...usage.detectedLanguages],\n htmx: usage.htmx\n ? {\n hasHtmxAttributes: usage.htmx.hasHtmxAttributes,\n hasFixiAttributes: usage.htmx.hasFixiAttributes,\n httpMethods: [...usage.htmx.httpMethods],\n swapStrategies: [...usage.htmx.swapStrategies],\n }\n : undefined,\n });\n }\n\n return usage;\n }\n\n /**\n * Analyze a hyperscript snippet for commands, blocks, and expressions\n */\n private analyzeScript(script: string, usage: FileUsage): void {\n // Detect commands\n const commandPattern =\n /\\b(toggle|add|remove|removeClass|show|hide|set|get|put|append|take|increment|decrement|log|send|trigger|wait|transition|go|call|focus|blur|return)\\b/g;\n let match;\n while ((match = commandPattern.exec(script))) {\n usage.commands.add(match[1]);\n }\n\n // Detect blocks\n if (/\\bif\\b/.test(script)) usage.blocks.add('if');\n if (/\\bunless\\b/.test(script)) usage.blocks.add('if'); // unless uses same block as if\n // repeat pattern: handles literals, :localVars, $globalVars, and identifiers\n if (/\\brepeat\\s+(\\d+|:\\w+|\\$\\w+|[\\w.]+)\\s+times?\\b/i.test(script)) usage.blocks.add('repeat');\n if (/\\bfor\\s+(each|every)\\b/i.test(script)) usage.blocks.add('for');\n if (/\\bwhile\\b/.test(script)) usage.blocks.add('while');\n if (/\\bfetch\\b/.test(script)) usage.blocks.add('fetch');\n\n // Detect positional expressions\n if (/\\b(first|last|next|previous|closest|parent)\\b/.test(script)) {\n usage.positional = true;\n }\n\n // Detect non-English languages for multilingual semantic support\n const languages = detectLanguages(script);\n for (const lang of languages) {\n usage.detectedLanguages.add(lang);\n }\n }\n\n /**\n * Scan for htmx/fixi attributes\n */\n private scanHtmxAttributes(code: string): HtmxUsage {\n const usage: HtmxUsage = {\n hasHtmxAttributes: false,\n hasFixiAttributes: false,\n httpMethods: new Set(),\n swapStrategies: new Set(),\n onHandlers: [],\n triggerModifiers: new Set(),\n urlManagement: new Set(),\n usesConfirm: false,\n };\n\n // Detect hx-get/post/put/patch/delete\n let match;\n const requestPattern = new RegExp(HTMX_REQUEST_PATTERN.source, 'gi');\n while ((match = requestPattern.exec(code))) {\n usage.hasHtmxAttributes = true;\n usage.httpMethods.add(match[1].replace('hx-', '').toUpperCase());\n }\n\n // Detect fx-action\n if (new RegExp(FIXI_ACTION_PATTERN.source, 'gi').test(code)) {\n usage.hasHtmxAttributes = true;\n usage.hasFixiAttributes = true;\n }\n\n // Detect fx-method\n const fixiMethodPattern = new RegExp(FIXI_METHOD_PATTERN.source, 'gi');\n while ((match = fixiMethodPattern.exec(code))) {\n usage.hasHtmxAttributes = true;\n usage.hasFixiAttributes = true;\n usage.httpMethods.add(match[1].toUpperCase());\n }\n\n // Detect swap strategies\n const swapPattern = new RegExp(HTMX_SWAP_PATTERN.source, 'gi');\n while ((match = swapPattern.exec(code))) {\n usage.hasHtmxAttributes = true;\n usage.swapStrategies.add(match[2].split(/\\s+/)[0]);\n }\n\n // Detect trigger modifiers\n const triggerPattern = new RegExp(HTMX_TRIGGER_PATTERN.source, 'gi');\n while ((match = triggerPattern.exec(code))) {\n usage.hasHtmxAttributes = true;\n const trigger = match[2];\n if (/delay:/i.test(trigger)) usage.triggerModifiers.add('debounce');\n if (/throttle:/i.test(trigger)) usage.triggerModifiers.add('throttle');\n if (/\\bonce\\b/i.test(trigger)) usage.triggerModifiers.add('once');\n }\n\n // Detect URL management\n if (new RegExp(HTMX_URL_PATTERN.source, 'gi').test(code)) {\n usage.hasHtmxAttributes = true;\n if (/hx-push-url/i.test(code)) usage.urlManagement.add('push-url');\n if (/hx-replace-url/i.test(code)) usage.urlManagement.add('replace-url');\n }\n\n // Detect hx-confirm\n if (new RegExp(HTMX_CONFIRM_PATTERN.source, 'gi').test(code)) {\n usage.hasHtmxAttributes = true;\n usage.usesConfirm = true;\n }\n\n // Detect hx-on:* handlers\n const onPattern = new RegExp(HTMX_ON_PATTERN.source, 'g');\n while ((match = onPattern.exec(code))) {\n usage.hasHtmxAttributes = true;\n usage.onHandlers.push(match[2]);\n }\n\n // Check hx-target for positional patterns\n const targetPattern = new RegExp(HTMX_TARGET_PATTERN.source, 'gi');\n while ((match = targetPattern.exec(code))) {\n usage.hasHtmxAttributes = true;\n }\n\n return usage;\n }\n\n /**\n * Infer commands from htmx usage\n */\n private inferCommandsFromHtmx(htmx: HtmxUsage, usage: FileUsage): void {\n // HTTP requests need fetch block\n if (htmx.httpMethods.size > 0) {\n usage.blocks.add('fetch');\n usage.commands.add('put'); // Default swap uses put\n }\n\n // Swap strategy inference\n for (const swap of htmx.swapStrategies) {\n switch (swap.toLowerCase()) {\n case 'morph':\n usage.commands.add('morph');\n break;\n case 'delete':\n usage.commands.add('remove');\n break;\n default:\n usage.commands.add('put');\n }\n }\n\n // hx-confirm needs if block\n if (htmx.usesConfirm) {\n usage.blocks.add('if');\n }\n }\n\n /**\n * Scan all files in a project directory\n * Used during production build to scan the entire codebase\n */\n async scanProject(dir: string): Promise<Map<string, FileUsage>> {\n const results = new Map<string, FileUsage>();\n\n try {\n const { glob } = await import('glob');\n const fs = await import('fs');\n\n const files = await glob('**/*.{html,htm,vue,svelte,js,jsx,ts,tsx,astro,php,erb,ejs,hbs}', {\n cwd: dir,\n ignore: ['node_modules/**', 'dist/**', '.git/**'],\n absolute: true,\n });\n\n for (const file of files) {\n if (this.shouldScan(file)) {\n try {\n const code = fs.readFileSync(file, 'utf-8');\n const usage = this.scan(code, file);\n if (\n usage.commands.size > 0 ||\n usage.blocks.size > 0 ||\n usage.positional ||\n usage.detectedLanguages.size > 0\n ) {\n results.set(file, usage);\n }\n } catch {\n // Skip files that can't be read\n }\n }\n }\n } catch (error) {\n console.warn('[hyperfixi] Error scanning project:', error);\n }\n\n return results;\n }\n}\n","/**\n * Aggregator\n *\n * Collects and aggregates hyperscript usage across all scanned files.\n */\n\nimport type { FileUsage, AggregatedUsage, HtmxUsage } from './types';\n\n/**\n * Aggregator class for collecting usage across files\n */\nexport class Aggregator {\n private fileUsage: Map<string, FileUsage> = new Map();\n private cachedUsage: AggregatedUsage | null = null;\n\n /**\n * Add or update usage for a file\n * @returns true if the overall usage changed\n */\n add(filePath: string, usage: FileUsage): boolean {\n const existing = this.fileUsage.get(filePath);\n\n // Check if anything changed\n if (existing) {\n const commandsEqual = this.setsEqual(existing.commands, usage.commands);\n const blocksEqual = this.setsEqual(existing.blocks, usage.blocks);\n const positionalEqual = existing.positional === usage.positional;\n const languagesEqual = this.setsEqual(existing.detectedLanguages, usage.detectedLanguages);\n const htmxEqual = this.htmxUsageEqual(existing.htmx, usage.htmx);\n\n if (commandsEqual && blocksEqual && positionalEqual && languagesEqual && htmxEqual) {\n return false; // No change\n }\n }\n\n // Update file usage\n this.fileUsage.set(filePath, usage);\n this.cachedUsage = null; // Invalidate cache\n\n return true;\n }\n\n /**\n * Remove a file from tracking (e.g., when deleted)\n * @returns true if the overall usage changed\n */\n remove(filePath: string): boolean {\n const existed = this.fileUsage.delete(filePath);\n if (existed) {\n this.cachedUsage = null;\n }\n return existed;\n }\n\n /**\n * Get aggregated usage across all files\n */\n getUsage(): AggregatedUsage {\n if (this.cachedUsage) {\n return this.cachedUsage;\n }\n\n const commands = new Set<string>();\n const blocks = new Set<string>();\n const detectedLanguages = new Set<string>();\n let positional = false;\n\n // Aggregate htmx usage\n const htmx: HtmxUsage = {\n hasHtmxAttributes: false,\n hasFixiAttributes: false,\n httpMethods: new Set(),\n swapStrategies: new Set(),\n onHandlers: [],\n triggerModifiers: new Set(),\n urlManagement: new Set(),\n usesConfirm: false,\n };\n\n for (const usage of this.fileUsage.values()) {\n for (const cmd of usage.commands) commands.add(cmd);\n for (const block of usage.blocks) blocks.add(block);\n for (const lang of usage.detectedLanguages) detectedLanguages.add(lang);\n if (usage.positional) positional = true;\n\n // Aggregate htmx usage\n if (usage.htmx) {\n if (usage.htmx.hasHtmxAttributes) htmx.hasHtmxAttributes = true;\n if (usage.htmx.hasFixiAttributes) htmx.hasFixiAttributes = true;\n for (const method of usage.htmx.httpMethods) htmx.httpMethods.add(method);\n for (const swap of usage.htmx.swapStrategies) htmx.swapStrategies.add(swap);\n htmx.onHandlers.push(...usage.htmx.onHandlers);\n for (const modifier of usage.htmx.triggerModifiers) htmx.triggerModifiers.add(modifier);\n for (const url of usage.htmx.urlManagement) htmx.urlManagement.add(url);\n if (usage.htmx.usesConfirm) htmx.usesConfirm = true;\n }\n }\n\n this.cachedUsage = {\n commands,\n blocks,\n positional,\n detectedLanguages,\n htmx,\n fileUsage: new Map(this.fileUsage),\n };\n\n return this.cachedUsage;\n }\n\n /**\n * Load usage from a project scan\n */\n loadFromScan(scannedFiles: Map<string, FileUsage>): void {\n this.fileUsage = new Map(scannedFiles);\n this.cachedUsage = null;\n }\n\n /**\n * Check if any hyperscript usage has been detected\n */\n hasUsage(): boolean {\n const usage = this.getUsage();\n return (\n usage.commands.size > 0 ||\n usage.blocks.size > 0 ||\n usage.positional ||\n usage.detectedLanguages.size > 0\n );\n }\n\n /**\n * Get summary for logging\n */\n getSummary(): {\n commands: string[];\n blocks: string[];\n positional: boolean;\n languages: string[];\n fileCount: number;\n } {\n const usage = this.getUsage();\n return {\n commands: [...usage.commands].sort(),\n blocks: [...usage.blocks].sort(),\n positional: usage.positional,\n languages: [...usage.detectedLanguages].sort(),\n fileCount: this.fileUsage.size,\n };\n }\n\n /**\n * Clear all tracked usage\n */\n clear(): void {\n this.fileUsage.clear();\n this.cachedUsage = null;\n }\n\n /**\n * Compare two sets for equality\n */\n private setsEqual<T>(a: Set<T>, b: Set<T>): boolean {\n if (a.size !== b.size) return false;\n for (const item of a) {\n if (!b.has(item)) return false;\n }\n return true;\n }\n\n /**\n * Compare two HtmxUsage objects for equality\n */\n private htmxUsageEqual(a?: HtmxUsage, b?: HtmxUsage): boolean {\n if (!a && !b) return true;\n if (!a || !b) return false;\n return (\n a.hasHtmxAttributes === b.hasHtmxAttributes &&\n a.hasFixiAttributes === b.hasFixiAttributes &&\n this.setsEqual(a.httpMethods, b.httpMethods) &&\n this.setsEqual(a.swapStrategies, b.swapStrategies) &&\n this.setsEqual(a.triggerModifiers, b.triggerModifiers) &&\n this.setsEqual(a.urlManagement, b.urlManagement) &&\n a.usesConfirm === b.usesConfirm\n );\n }\n}\n","/**\n * Generator\n *\n * Generates minimal HyperFixi bundles based on detected usage.\n * Uses shared templates from @lokascript/core/bundle-generator.\n * Supports multilingual semantic parsing when enabled.\n */\n\nimport type { AggregatedUsage, HyperfixiPluginOptions } from './types';\nimport {\n COMMAND_IMPLEMENTATIONS as COMMAND_IMPL_TS,\n BLOCK_IMPLEMENTATIONS as BLOCK_IMPL_TS,\n STYLE_COMMANDS,\n ELEMENT_ARRAY_COMMANDS,\n} from '@lokascript/core/bundle-generator';\nimport {\n resolveSemanticConfig,\n generateSemanticIntegrationCode,\n getSemanticExports,\n getSemanticBundleSize,\n type SemanticConfig,\n} from './semantic-integration';\n\n// =============================================================================\n// BUNDLE GENERATOR\n// =============================================================================\n\n/**\n * Generator options interface\n */\ninterface GeneratorOptions {\n name: string;\n commands: string[];\n blocks?: string[];\n positionalExpressions?: boolean;\n htmxIntegration?: boolean;\n globalName?: string;\n parserImportPath?: string;\n autoInit?: boolean;\n esModule?: boolean;\n}\n\n/**\n * Strip TypeScript type annotations for JavaScript output.\n */\nfunction stripTypes(code: string): string {\n return (\n code\n // Remove \" as Type\" casts\n .replace(/\\s+as\\s+\\w+(?:\\[\\])?/g, '')\n // Remove \": Type\" in catch clauses like \"catch (error: any)\"\n .replace(/\\((\\w+):\\s*\\w+\\)/g, '($1)')\n // Remove \": Type\" in arrow function params like \"(a: any) =>\"\n .replace(/\\((\\w+):\\s*any\\)/g, '($1)')\n // Remove \"<void>\" generic from Promise<void>[]\n .replace(/Promise<void>\\[\\]/g, 'Promise[]')\n // Clean up Promise<void> standalone\n .replace(/Promise<void>/g, 'Promise')\n // Remove TransitionEvent type\n .replace(/:\\s*TransitionEvent/g, '')\n );\n}\n\n// Get JavaScript-formatted implementations (type annotations stripped)\nconst COMMAND_IMPLEMENTATIONS: Record<string, string> = {};\nconst BLOCK_IMPLEMENTATIONS: Record<string, string> = {};\n\nfor (const [name, code] of Object.entries(COMMAND_IMPL_TS)) {\n COMMAND_IMPLEMENTATIONS[name] = stripTypes(code);\n}\n\nfor (const [name, code] of Object.entries(BLOCK_IMPL_TS)) {\n BLOCK_IMPLEMENTATIONS[name] = stripTypes(code);\n}\n\n/**\n * Generate bundle code from configuration\n */\nfunction generateBundleCode(config: GeneratorOptions): string {\n const {\n name,\n commands,\n blocks = [],\n htmxIntegration = false,\n globalName = 'hyperfixi',\n positionalExpressions = false,\n parserImportPath = '../parser/hybrid',\n autoInit = true,\n esModule = true,\n } = config;\n\n const needsStyleHelpers = commands.some(cmd => STYLE_COMMANDS.includes(cmd));\n const needsElementArrayHelper = commands.some(cmd => ELEMENT_ARRAY_COMMANDS.includes(cmd));\n const hasBlocks = blocks.length > 0;\n const hasReturn = commands.includes('return');\n\n const commandCases = commands\n .filter(cmd => COMMAND_IMPLEMENTATIONS[cmd])\n .map(cmd => COMMAND_IMPLEMENTATIONS[cmd])\n .join('\\n');\n\n const blockCases = blocks\n .filter(block => BLOCK_IMPLEMENTATIONS[block])\n .map(block => BLOCK_IMPLEMENTATIONS[block])\n .join('\\n');\n\n return `/**\n * HyperFixi ${name} Bundle (Auto-Generated)\n *\n * Generated by: @lokascript/vite-plugin\n * Commands: ${commands.join(', ')}${blocks.length > 0 ? `\\n * Blocks: ${blocks.join(', ')}` : ''}${positionalExpressions ? '\\n * Positional expressions: enabled' : ''}\n *\n * DO NOT EDIT - This file is automatically regenerated.\n */\n\n// Parser imports\nimport { HybridParser, addCommandAliases } from '${parserImportPath}';\n\n// Runtime state\nconst globalVars = new Map();\n${hasBlocks ? 'const MAX_LOOP_ITERATIONS = 1000;' : ''}\n\nasync function evaluate(node, ctx) {\n switch (node.type) {\n case 'literal': return node.value;\n\n case 'identifier':\n if (node.value === 'me' || node.value === 'my') return ctx.me;\n if (node.value === 'it') return ctx.it;\n if (node.value === 'you') return ctx.you;\n if (node.value === 'event') return ctx.event;\n if (node.value === 'body') return document.body;\n if (node.value === 'document') return document;\n if (node.value === 'window') return window;\n if (ctx.locals.has(node.value)) return ctx.locals.get(node.value);\n if (node.value in ctx.me) return ctx.me[node.value];\n return node.value;\n\n case 'contextReference':\n // Semantic AST format for context references (me, you, it, etc.)\n switch (node.contextType || node.name) {\n case 'me': return ctx.me;\n case 'it': return ctx.it;\n case 'you': return ctx.you;\n case 'event': return ctx.event;\n case 'body': return document.body;\n case 'document': return document;\n case 'window': return window;\n default: return ctx.me;\n }\n\n case 'variable':\n if (node.scope === 'local') return ctx.locals.get(node.name.slice(1));\n const gName = node.name.slice(1);\n if (globalVars.has(gName)) return globalVars.get(gName);\n return window[node.name];\n\n case 'selector':\n const elements = document.querySelectorAll(node.value);\n return elements.length === 1 ? elements[0] : Array.from(elements);\n\n case 'binary':\n return evaluateBinary(node, ctx);\n\n case 'possessive':\n case 'member':\n const obj = await evaluate(node.object, ctx);\n if (obj == null) return undefined;\n const prop = node.computed ? await evaluate(node.property, ctx) : node.property;\n return obj[prop];\n\n case 'call': {\n let callContext = null;\n let callee;\n\n if (node.callee.type === 'member' || node.callee.type === 'possessive') {\n callContext = await evaluate(node.callee.object, ctx);\n const p = node.callee.computed\n ? await evaluate(node.callee.property, ctx)\n : node.callee.property;\n callee = callContext?.[p];\n } else {\n callee = await evaluate(node.callee, ctx);\n }\n\n const args = await Promise.all(node.args.map(a => evaluate(a, ctx)));\n if (typeof callee === 'function') return callee.apply(callContext, args);\n return undefined;\n }\n${\n positionalExpressions\n ? `\n case 'positional':\n return evaluatePositional(node, ctx);\n`\n : ''\n}\n default: return undefined;\n }\n}\n\nasync function evaluateBinary(node, ctx) {\n if (node.operator === 'has') {\n const left = await evaluate(node.left, ctx);\n if (left instanceof Element && node.right.type === 'selector' && node.right.value.startsWith('.')) {\n return left.classList.contains(node.right.value.slice(1));\n }\n return false;\n }\n\n const left = await evaluate(node.left, ctx);\n const right = await evaluate(node.right, ctx);\n\n switch (node.operator) {\n case '+': return left + right;\n case '-': return left - right;\n case '*': return left * right;\n case '/': return left / right;\n case '%': return left % right;\n case '==': case 'is': return left == right;\n case '!=': case 'is not': return left != right;\n case '<': return left < right;\n case '>': return left > right;\n case '<=': return left <= right;\n case '>=': return left >= right;\n case 'and': case '&&': return left && right;\n case 'or': case '||': return left || right;\n case 'contains': case 'includes':\n if (typeof left === 'string') return left.includes(right);\n if (Array.isArray(left)) return left.includes(right);\n if (left instanceof Element) return left.contains(right);\n return false;\n case 'matches':\n if (left instanceof Element) return left.matches(right);\n if (typeof left === 'string') return new RegExp(right).test(left);\n return false;\n default: return undefined;\n }\n}\n${\n positionalExpressions\n ? `\nfunction evaluatePositional(node, ctx) {\n const target = node.target;\n let elements = [];\n\n let selector = null;\n if (target.type === 'selector') {\n selector = target.value;\n } else if (target.type === 'identifier') {\n selector = target.value;\n } else if (target.type === 'htmlSelector') {\n selector = target.value;\n }\n if (selector) {\n elements = Array.from(document.querySelectorAll(selector));\n }\n\n switch (node.position) {\n case 'first': return elements[0] || null;\n case 'last': return elements[elements.length - 1] || null;\n case 'next': return ctx.me.nextElementSibling;\n case 'previous': return ctx.me.previousElementSibling;\n case 'closest': return target.value ? ctx.me.closest(target.value) : null;\n case 'parent': return ctx.me.parentElement;\n default: return elements[0] || null;\n }\n}\n`\n : ''\n}\n${\n needsStyleHelpers\n ? `\nconst isStyleProp = (prop) => prop?.startsWith('*');\nconst getStyleName = (prop) => prop.substring(1);\nconst setStyleProp = (el, prop, value) => {\n if (!isStyleProp(prop)) return false;\n el.style.setProperty(getStyleName(prop), String(value));\n return true;\n};\n`\n : ''\n}\n\n${\n needsElementArrayHelper\n ? `\nconst toElementArray = (val) => {\n if (Array.isArray(val)) return val.filter(e => e instanceof Element);\n if (val instanceof Element) return [val];\n if (typeof val === 'string') return Array.from(document.querySelectorAll(val));\n return [];\n};\n`\n : ''\n}\n\nasync function executeCommand(cmd, ctx) {\n const getTarget = async () => {\n // Support both HybridParser (cmd.target) and semantic AST (cmd.modifiers.on) formats\n const target = cmd.target || cmd.modifiers?.on;\n if (!target) return [ctx.me];\n const t = await evaluate(target, ctx);\n if (Array.isArray(t)) return t;\n if (t instanceof Element) return [t];\n if (typeof t === 'string') return Array.from(document.querySelectorAll(t));\n return [ctx.me];\n };\n\n const getClassName = (node) => {\n if (!node) return '';\n if (node.type === 'selector') return node.value.slice(1);\n if (node.type === 'string' || node.type === 'literal') {\n const val = node.value;\n return typeof val === 'string' && val.startsWith('.') ? val.slice(1) : String(val);\n }\n if (node.type === 'identifier') return node.value;\n return '';\n };\n\n switch (cmd.name) {\n${commandCases}\n\n default:\n console.warn(\\`${name} bundle: Unknown command '\\${cmd.name}'\\`);\n return null;\n }\n}\n${\n hasBlocks\n ? `\nasync function executeBlock(block, ctx) {\n switch (block.type) {\n${blockCases}\n\n default:\n console.warn(\\`${name} bundle: Unknown block '\\${block.type}'\\`);\n return null;\n }\n}\n`\n : ''\n}\nasync function executeSequence(nodes, ctx) {\n let result;\n for (const node of nodes) {\n if (node.type === 'command') {\n result = await executeCommand(node, ctx);\n }${\n hasBlocks\n ? ` else if (['if', 'repeat', 'for', 'while', 'fetch'].includes(node.type)) {\n result = await executeBlock(node, ctx);\n }`\n : ''\n }\n }\n return result;\n}\n${\n hasBlocks\n ? `\nasync function executeSequenceWithBlocks(nodes, ctx) {\n try {\n return await executeSequence(nodes, ctx);\n } catch (e) {\n if (e?.type === 'return') throw e;\n throw e;\n }\n}\n`\n : ''\n}\nasync function executeAST(ast, me, event) {\n const ctx = { me, event, locals: new Map() };\n\n if (ast.type === 'sequence') {\n ${hasReturn || hasBlocks ? \"try { return await executeSequence(ast.commands, ctx); } catch (e) { if (e?.type === 'return') return e.value; throw e; }\" : 'return executeSequence(ast.commands, ctx);'}\n }\n\n if (ast.type === 'event') {\n const eventNode = ast;\n const eventName = eventNode.event;\n\n if (eventName === 'init') {\n ${hasReturn || hasBlocks ? \"try { await executeSequence(eventNode.body, ctx); } catch (e) { if (e?.type !== 'return') throw e; }\" : 'await executeSequence(eventNode.body, ctx);'}\n return;\n }\n\n const target = eventNode.filter ? await evaluate(eventNode.filter, ctx) : me;\n const targetEl = target instanceof Element ? target : me;\n const mods = eventNode.modifiers;\n\n let handler = async (e) => {\n if (mods.prevent) e.preventDefault();\n if (mods.stop) e.stopPropagation();\n\n const handlerCtx = {\n me, event: e,\n you: e.target instanceof Element ? e.target : undefined,\n locals: new Map(),\n };\n ${hasReturn || hasBlocks ? \"try { await executeSequence(eventNode.body, handlerCtx); } catch (err) { if (err?.type !== 'return') throw err; }\" : 'await executeSequence(eventNode.body, handlerCtx);'}\n };\n\n if (mods.debounce) {\n let timeout;\n const orig = handler;\n handler = async (e) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => orig(e), mods.debounce);\n };\n }\n\n if (mods.throttle) {\n let lastCall = 0;\n const orig = handler;\n handler = async (e) => {\n const now = Date.now();\n if (now - lastCall >= mods.throttle) {\n lastCall = now;\n await orig(e);\n }\n };\n }\n\n targetEl.addEventListener(eventName, handler, { once: !!mods.once });\n return;\n }\n\n // Handle single command (not wrapped in event or sequence)\n if (ast.type === 'command') {\n return executeCommand(ast, ctx);\n }\n\n return null;\n}\n\nfunction processElement(el) {\n const code = el.getAttribute('_');\n if (!code) return;\n\n try {\n const parser = new HybridParser(code);\n const ast = parser.parse();\n executeAST(ast, el);\n } catch (err) {\n console.error('HyperFixi ${name} error:', err, 'Code:', code);\n }\n}\n\nfunction processElements(root = document) {\n const elements = root.querySelectorAll('[_]');\n elements.forEach(processElement);\n}\n\nconst api = {\n version: '1.0.0-${name.toLowerCase().replace(/\\s+/g, '-')}',\n\n parse(code) {\n const parser = new HybridParser(code);\n return parser.parse();\n },\n\n async execute(code, element) {\n const me = element || document.body;\n const parser = new HybridParser(code);\n const ast = parser.parse();\n return executeAST(ast, me);\n },\n\n run: async (code, element) => api.execute(code, element),\n eval: async (code, element) => api.execute(code, element),\n\n init: processElements,\n process: processElements,\n\n commands: ${JSON.stringify(commands)},\n ${blocks.length > 0 ? `blocks: ${JSON.stringify(blocks)},` : ''}\n parserName: 'hybrid',\n};\n${\n autoInit\n ? `\nif (typeof window !== 'undefined') {\n window.${globalName} = api;\n window._hyperscript = api;\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => processElements());\n } else {\n processElements();\n }\n${\n htmxIntegration\n ? `\n document.addEventListener('htmx:afterSettle', (e) => {\n const target = e.detail?.target;\n if (target) processElements(target);\n });\n`\n : ''\n}\n}\n`\n : ''\n}\n${\n esModule\n ? `\nexport default api;\nexport { api, processElements };\n`\n : ''\n}`;\n}\n\n// =============================================================================\n// GENERATOR CLASS\n// =============================================================================\n\n/**\n * Generator class for creating minimal bundles\n */\nexport class Generator {\n private debug: boolean;\n\n constructor(options: Pick<HyperfixiPluginOptions, 'debug'>) {\n this.debug = options.debug ?? false;\n }\n\n /**\n * Generate bundle code from aggregated usage\n */\n generate(usage: AggregatedUsage, options: HyperfixiPluginOptions): string {\n const commands = [...usage.commands, ...(options.extraCommands ?? [])];\n const blocks = [...usage.blocks, ...(options.extraBlocks ?? [])];\n const positional = usage.positional || options.positional || false;\n\n // Resolve semantic configuration\n const semanticConfig = resolveSemanticConfig(options, usage.detectedLanguages);\n\n // If no usage detected and no semantic, return empty module\n if (commands.length === 0 && blocks.length === 0 && !positional && !semanticConfig.enabled) {\n return this.generateEmptyBundle(options);\n }\n\n const config: GeneratorOptions = {\n name: options.bundleName ?? 'ViteAutoGenerated',\n commands,\n blocks,\n positionalExpressions: positional,\n htmxIntegration: options.htmx ?? usage.htmx?.hasHtmxAttributes ?? false,\n globalName: options.globalName ?? 'hyperfixi',\n // Use @lokascript/core package path for virtual module\n parserImportPath: '@lokascript/core/parser/hybrid',\n autoInit: true,\n esModule: true,\n };\n\n if (this.debug) {\n const bundleInfo: Record<string, unknown> = {\n commands,\n blocks,\n positional,\n htmx: config.htmxIntegration,\n semantic: semanticConfig.enabled,\n };\n\n if (semanticConfig.enabled && semanticConfig.bundleType) {\n const sizeInfo = getSemanticBundleSize(semanticConfig.bundleType);\n bundleInfo.semanticBundle = semanticConfig.bundleType;\n bundleInfo.semanticSize = sizeInfo.gzip;\n bundleInfo.languages = [...semanticConfig.languages];\n bundleInfo.grammar = semanticConfig.grammarEnabled;\n }\n\n console.log('[hyperfixi] Generating bundle:', bundleInfo);\n\n // Warn if semantic bundle is large\n if (semanticConfig.bundleType === 'all' || semanticConfig.bundleType === 'priority') {\n console.log(\n `[hyperfixi] Note: Using '${semanticConfig.bundleType}' semantic bundle (${getSemanticBundleSize(semanticConfig.bundleType).gzip}). ` +\n `Consider using 'region' option to select a smaller regional bundle if all languages aren't needed.`\n );\n }\n }\n\n // Generate base bundle code\n let bundleCode = generateBundleCode(config);\n\n // Add semantic integration if enabled\n if (semanticConfig.enabled) {\n bundleCode = this.addSemanticIntegration(bundleCode, semanticConfig);\n }\n\n return bundleCode;\n }\n\n /**\n * Add semantic integration code to the bundle\n */\n private addSemanticIntegration(bundleCode: string, config: SemanticConfig): string {\n const semanticCode = generateSemanticIntegrationCode(config);\n const semanticExports = getSemanticExports(config);\n\n // Insert semantic imports after the parser imports\n const parserImportEnd = bundleCode.indexOf('// Runtime state');\n if (parserImportEnd === -1) {\n // Fallback: prepend to code\n bundleCode = semanticCode + '\\n' + bundleCode;\n } else {\n bundleCode =\n bundleCode.slice(0, parserImportEnd) +\n semanticCode +\n '\\n\\n' +\n bundleCode.slice(parserImportEnd);\n }\n\n // Replace HybridParser usage with parseWithSemantic in processElement\n bundleCode = bundleCode.replace(\n /function processElement\\(el\\) \\{\\s*const code = el\\.getAttribute\\('_'\\);\\s*if \\(!code\\) return;\\s*try \\{\\s*const parser = new HybridParser\\(code\\);\\s*const ast = parser\\.parse\\(\\);/g,\n `function processElement(el) {\n const code = el.getAttribute('_');\n if (!code) return;\n\n try {\n const ast = parseWithSemantic(code);`\n );\n\n // Replace HybridParser usage in api.parse\n bundleCode = bundleCode.replace(\n /parse\\(code\\) \\{\\s*const parser = new HybridParser\\(code\\);\\s*return parser\\.parse\\(\\);/g,\n `parse(code, lang = null) {\n return parseWithSemantic(code, lang);`\n );\n\n // Replace HybridParser usage in api.execute\n bundleCode = bundleCode.replace(\n /async execute\\(code, element\\) \\{\\s*const me = element \\|\\| document\\.body;\\s*const parser = new HybridParser\\(code\\);\\s*const ast = parser\\.parse\\(\\);/g,\n `async execute(code, element, lang = null) {\n const me = element || document.body;\n const ast = parseWithSemantic(code, lang);`\n );\n\n // Add semantic exports to the api object\n if (semanticExports.length > 0) {\n const apiExportsMarker = \"parserName: 'hybrid',\";\n const additionalApiProps = semanticExports.map(exp => ` ${exp},`).join('\\n');\n bundleCode = bundleCode.replace(\n apiExportsMarker,\n `parserName: 'hybrid',\\n${additionalApiProps}`\n );\n }\n\n return bundleCode;\n }\n\n /**\n * Generate an empty bundle when no hyperscript is detected\n */\n private generateEmptyBundle(options: HyperfixiPluginOptions): string {\n const globalName = options.globalName ?? 'hyperfixi';\n\n return `/**\n * HyperFixi Empty Bundle (Auto-Generated)\n *\n * No hyperscript usage detected. This bundle provides a minimal API.\n * Add hyperscript attributes (_=\"...\") to your HTML to enable features.\n *\n * Generated by: @lokascript/vite-plugin\n */\n\nconst api = {\n version: '1.0.0-empty',\n commands: [],\n parserName: 'none',\n\n parse() {\n console.warn('HyperFixi: No parser loaded. Add hyperscript to your HTML to enable parsing.');\n return { type: 'empty' };\n },\n\n async execute(code, element) {\n console.warn('HyperFixi: No commands loaded. Detected commands will be automatically included.');\n return null;\n },\n\n run: async (code, element) => api.execute(code, element),\n eval: async (code, element) => api.execute(code, element),\n\n init() {},\n process() {},\n};\n\nif (typeof window !== 'undefined') {\n (window).${globalName} = api;\n (window)._hyperscript = api;\n}\n\nexport default api;\nexport { api };\n`;\n }\n\n /**\n * Generate a development fallback bundle\n */\n generateDevFallback(fallback: 'hybrid-complete' | 'full'): string {\n const bundle =\n fallback === 'full' ? '@lokascript/core/browser' : '@lokascript/core/browser/hybrid-complete';\n\n return `/**\n * HyperFixi Dev Fallback Bundle\n *\n * Using pre-built ${fallback} bundle for faster development.\n * Production builds will generate minimal bundles.\n *\n * Generated by: @lokascript/vite-plugin\n */\n\nexport * from '${bundle}';\nexport { default } from '${bundle}';\n`;\n }\n}\n","/**\n * Semantic Integration\n *\n * Handles semantic bundle selection and integration layer generation.\n * Used when multilingual semantic support is enabled.\n */\n\nimport type { HyperfixiPluginOptions } from './types';\nimport { REGIONS, type SupportedLanguage } from './language-keywords';\n\n/**\n * Multilingual command aliases.\n * Maps non-English command keywords to their English equivalents.\n */\nconst MULTILINGUAL_COMMAND_ALIASES: Partial<Record<SupportedLanguage, Record<string, string>>> = {\n ja: {\n トグル: 'toggle',\n 切り替え: 'toggle',\n 追加: 'add',\n 削除: 'remove',\n 表示: 'show',\n 隠す: 'hide',\n 非表示: 'hide',\n 設定: 'set',\n セット: 'set',\n 増加: 'increment',\n 減少: 'decrement',\n ログ: 'log',\n 出力: 'log',\n },\n ko: {\n 토글: 'toggle',\n 전환: 'toggle',\n 추가: 'add',\n 제거: 'remove',\n 삭제: 'remove',\n 표시: 'show',\n 숨기다: 'hide',\n 설정: 'set',\n 증가: 'increment',\n 감소: 'decrement',\n 로그: 'log',\n },\n zh: {\n 切换: 'toggle',\n 添加: 'add',\n 移除: 'remove',\n 删除: 'remove',\n 显示: 'show',\n 隐藏: 'hide',\n 设置: 'set',\n 设定: 'set',\n 增加: 'increment',\n 减少: 'decrement',\n 日志: 'log',\n 记录: 'log',\n },\n ar: {\n بدّل: 'toggle',\n بدل: 'toggle',\n أضف: 'add',\n اضف: 'add',\n أزل: 'remove',\n ازل: 'remove',\n احذف: 'remove',\n أظهر: 'show',\n اظهر: 'show',\n أخفِ: 'hide',\n اخف: 'hide',\n ضع: 'set',\n اضع: 'set',\n زِد: 'increment',\n أنقص: 'decrement',\n },\n es: {\n alternar: 'toggle',\n añadir: 'add',\n agregar: 'add',\n quitar: 'remove',\n eliminar: 'remove',\n mostrar: 'show',\n ocultar: 'hide',\n esconder: 'hide',\n establecer: 'set',\n fijar: 'set',\n incrementar: 'increment',\n decrementar: 'decrement',\n },\n pt: {\n alternar: 'toggle',\n adicionar: 'add',\n remover: 'remove',\n mostrar: 'show',\n esconder: 'hide',\n ocultar: 'hide',\n definir: 'set',\n incrementar: 'increment',\n decrementar: 'decrement',\n },\n fr: {\n basculer: 'toggle',\n ajouter: 'add',\n supprimer: 'remove',\n retirer: 'remove',\n afficher: 'show',\n montrer: 'show',\n cacher: 'hide',\n masquer: 'hide',\n définir: 'set',\n incrémenter: 'increment',\n décrémenter: 'decrement',\n },\n de: {\n umschalten: 'toggle',\n hinzufügen: 'add',\n entfernen: 'remove',\n löschen: 'remove',\n anzeigen: 'show',\n zeigen: 'show',\n verbergen: 'hide',\n verstecken: 'hide',\n setzen: 'set',\n festlegen: 'set',\n erhöhen: 'increment',\n verringern: 'decrement',\n },\n tr: {\n değiştir: 'toggle',\n değistir: 'toggle',\n ekle: 'add',\n kaldır: 'remove',\n kaldir: 'remove',\n sil: 'remove',\n göster: 'show',\n gizle: 'hide',\n sakla: 'hide',\n ayarla: 'set',\n belirle: 'set',\n arttır: 'increment',\n azalt: 'decrement',\n },\n id: {\n alih: 'toggle',\n beralih: 'toggle',\n tambah: 'add',\n hapus: 'remove',\n buang: 'remove',\n tampilkan: 'show',\n sembunyikan: 'hide',\n atur: 'set',\n tetapkan: 'set',\n tambahkan: 'increment',\n kurangi: 'decrement',\n },\n sw: {\n badilisha: 'toggle',\n ongeza: 'add',\n ondoa: 'remove',\n futa: 'remove',\n onyesha: 'show',\n ficha: 'hide',\n weka: 'set',\n sanidi: 'set',\n ongezea: 'increment',\n punguza: 'decrement',\n },\n qu: {\n tikray: 'toggle',\n yapay: 'add',\n qichuy: 'remove',\n pichay: 'remove',\n rikuchiy: 'show',\n pakay: 'hide',\n churay: 'set',\n pisiyachiy: 'decrement',\n },\n};\n\n/**\n * Get multilingual command aliases for detected languages.\n * Used by compile mode to configure the compiler with the right aliases.\n */\nexport function getMultilingualCommandAliases(\n languages: Set<SupportedLanguage>\n): Record<string, string> {\n const aliases: Record<string, string> = {};\n\n for (const lang of languages) {\n const langAliases = MULTILINGUAL_COMMAND_ALIASES[lang];\n if (langAliases) {\n Object.assign(aliases, langAliases);\n }\n }\n\n return aliases;\n}\n\n/**\n * Generate code to add multilingual command aliases to HybridParser.\n */\nfunction generateMultilingualAliases(languages: Set<SupportedLanguage>): string {\n const aliases: Record<string, string> = {};\n\n for (const lang of languages) {\n const langAliases = MULTILINGUAL_COMMAND_ALIASES[lang];\n if (langAliases) {\n Object.assign(aliases, langAliases);\n }\n }\n\n if (Object.keys(aliases).length === 0) {\n return `\n// No multilingual aliases needed - just pass through\nfunction preprocessMultilingual(code) { return code; }\n`;\n }\n\n // Generate code to add aliases to HybridParser via addCommandAliases\n const aliasEntries = Object.entries(aliases)\n .map(([key, val]) => ` '${key}': '${val}'`)\n .join(',\\n');\n\n // Build regex pattern to match multilingual keywords\n // Escape special regex characters in keys\n const escapedKeys = Object.keys(aliases)\n .map(k => k.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\n .join('|');\n\n return `\n// Multilingual command aliases for HybridParser fallback\nconst MULTILINGUAL_ALIASES = {\n${aliasEntries}\n};\n\n// Register multilingual aliases with the parser\naddCommandAliases(MULTILINGUAL_ALIASES);\n\n// Preprocessing regex to translate multilingual keywords to English\n// The HybridParser tokenizer only accepts ASCII identifiers, so we need\n// to translate non-ASCII keywords before parsing.\nconst MULTILINGUAL_KEYWORD_REGEX = new RegExp('(^|\\\\\\\\s)(${escapedKeys})(?=\\\\\\\\s|\\\\\\\\.|$)', 'g');\n\n/**\n * Preprocess multilingual code to replace non-ASCII keywords with English equivalents.\n * This is needed because HybridParser's tokenizer only accepts ASCII identifiers.\n */\nfunction preprocessMultilingual(code) {\n return code.replace(MULTILINGUAL_KEYWORD_REGEX, (match, prefix, keyword) => {\n const english = MULTILINGUAL_ALIASES[keyword];\n return english ? prefix + english : match;\n });\n}\n`;\n}\n\n/**\n * Semantic bundle types available.\n * Single-language bundles are available for all 13 supported languages.\n */\nexport type SemanticBundleType =\n // Single-language bundles (all 13 languages)\n | 'en'\n | 'es'\n | 'ja'\n | 'ar'\n | 'ko'\n | 'zh'\n | 'tr'\n | 'pt'\n | 'fr'\n | 'de'\n | 'id'\n | 'qu'\n | 'sw'\n // Regional bundles\n | 'es-en'\n | 'western'\n | 'east-asian'\n | 'priority'\n | 'all';\n\n/**\n * Semantic configuration resolved from options and detected languages.\n */\nexport interface SemanticConfig {\n /** Whether semantic parsing is enabled */\n enabled: boolean;\n\n /** Which semantic bundle to use */\n bundleType: SemanticBundleType | null;\n\n /** All languages to support (detected + explicit) */\n languages: Set<SupportedLanguage>;\n\n /** Whether grammar transformation is enabled */\n grammarEnabled: boolean;\n}\n\n/**\n * Resolve semantic configuration from plugin options and detected languages.\n */\nexport function resolveSemanticConfig(\n options: HyperfixiPluginOptions,\n detectedLanguages: Set<string>\n): SemanticConfig {\n // Check if grammar is enabled (which implies semantic)\n const grammarEnabled = options.grammar ?? false;\n\n // Determine if semantic is enabled\n let semanticEnabled = grammarEnabled; // grammar implies semantic\n if (options.semantic === true || options.semantic === 'auto') {\n semanticEnabled = true;\n } else if (options.semantic === 'en') {\n semanticEnabled = true;\n } else if (options.semantic === false) {\n semanticEnabled = false;\n }\n\n // If not enabled, return early\n if (!semanticEnabled) {\n return {\n enabled: false,\n bundleType: null,\n languages: new Set(),\n grammarEnabled: false,\n };\n }\n\n // Collect all languages\n const languages = new Set<SupportedLanguage>();\n\n // Add detected languages\n for (const lang of detectedLanguages) {\n languages.add(lang as SupportedLanguage);\n }\n\n // Add explicitly configured languages\n if (options.languages) {\n for (const lang of options.languages) {\n languages.add(lang as SupportedLanguage);\n }\n }\n\n // Add extra languages\n if (options.extraLanguages) {\n for (const lang of options.extraLanguages) {\n languages.add(lang as SupportedLanguage);\n }\n }\n\n // Determine bundle type\n let bundleType = selectBundleType(options, languages);\n\n return {\n enabled: true,\n bundleType,\n languages,\n grammarEnabled,\n };\n}\n\n/**\n * Select the optimal semantic bundle type based on options and languages.\n */\nfunction selectBundleType(\n options: HyperfixiPluginOptions,\n languages: Set<SupportedLanguage>\n): SemanticBundleType {\n // If explicit region is set, use it\n if (options.region) {\n return options.region as SemanticBundleType;\n }\n\n // If semantic is 'en', use English-only bundle\n if (options.semantic === 'en') {\n return 'en';\n }\n\n // If explicit languages are set, find optimal bundle\n if (options.languages?.length) {\n return selectOptimalBundle(new Set(options.languages as SupportedLanguage[]));\n }\n\n // Use detected languages\n if (languages.size === 0) {\n // No languages detected, default to English\n return 'en';\n }\n\n return selectOptimalBundle(languages);\n}\n\n/**\n * All languages that have single-language bundles available.\n */\nconst SINGLE_LANGUAGE_BUNDLES: readonly SupportedLanguage[] = [\n 'en',\n 'es',\n 'ja',\n 'ar',\n 'ko',\n 'zh',\n 'tr',\n 'pt',\n 'fr',\n 'de',\n 'id',\n 'qu',\n 'sw',\n] as const;\n\n/**\n * Select the smallest bundle that covers all specified languages.\n */\nexport function selectOptimalBundle(languages: Set<SupportedLanguage>): SemanticBundleType {\n if (languages.size === 0) {\n return 'en';\n }\n\n const langArray = [...languages];\n\n // Check single-language bundles (all 13 languages have individual bundles)\n if (langArray.length === 1) {\n const lang = langArray[0];\n if (SINGLE_LANGUAGE_BUNDLES.includes(lang)) {\n return lang as SemanticBundleType;\n }\n }\n\n // Check if en + es covers it (common bilingual case)\n if (langArray.length === 2 && langArray.includes('en') && langArray.includes('es')) {\n return 'es-en';\n }\n\n // Check if all languages fit in western bundle\n if (langArray.every(l => REGIONS.western.includes(l))) {\n return 'western';\n }\n\n // Check if all languages fit in east-asian bundle\n if (langArray.every(l => REGIONS['east-asian'].includes(l))) {\n return 'east-asian';\n }\n\n // Check if all languages fit in priority bundle\n if (langArray.every(l => REGIONS.priority.includes(l))) {\n return 'priority';\n }\n\n // Need full bundle\n return 'all';\n}\n\n/**\n * Estimated bundle sizes for each semantic bundle type.\n * Used for debug logging to help users understand size impact.\n * Sizes measured from minified bundles (January 2025).\n */\nexport const SEMANTIC_BUNDLE_SIZES: Record<SemanticBundleType, { raw: string; gzip: string }> = {\n // Single-language bundles (all 13 languages)\n en: { raw: '82 KB', gzip: '~20 KB' },\n es: { raw: '64 KB', gzip: '~16 KB' },\n ja: { raw: '67 KB', gzip: '~17 KB' },\n ar: { raw: '66 KB', gzip: '~17 KB' },\n ko: { raw: '69 KB', gzip: '~18 KB' },\n zh: { raw: '58 KB', gzip: '~15 KB' },\n tr: { raw: '73 KB', gzip: '~18 KB' },\n pt: { raw: '56 KB', gzip: '~14 KB' },\n fr: { raw: '57 KB', gzip: '~14 KB' },\n de: { raw: '57 KB', gzip: '~14 KB' },\n id: { raw: '57 KB', gzip: '~14 KB' },\n qu: { raw: '56 KB', gzip: '~14 KB' },\n sw: { raw: '56 KB', gzip: '~14 KB' },\n // Regional bundles\n 'es-en': { raw: '99 KB', gzip: '~25 KB' },\n western: { raw: '127 KB', gzip: '~30 KB' },\n 'east-asian': { raw: '99 KB', gzip: '~24 KB' },\n priority: { raw: '231 KB', gzip: '~48 KB' },\n all: { raw: '324 KB', gzip: '~61 KB' },\n};\n\n/**\n * Get the estimated size for a semantic bundle type.\n */\nexport function getSemanticBundleSize(bundleType: SemanticBundleType): {\n raw: string;\n gzip: string;\n} {\n return SEMANTIC_BUNDLE_SIZES[bundleType] ?? SEMANTIC_BUNDLE_SIZES.all;\n}\n\n/**\n * Get the import path for a semantic bundle type.\n *\n * Note: For ES module usage (Vite, Rollup, etc.), we always use the main entry\n * '@lokascript/semantic' which has proper ES module exports. The regional bundles\n * (browser/en, browser/western, etc.) are IIFE format for direct <script> tag\n * inclusion only.\n *\n * Bundle size optimization for ES modules is achieved through tree-shaking by\n * the bundler, not through pre-built regional bundles.\n */\nexport function getSemanticBundleImport(_bundleType: SemanticBundleType): string {\n // All ES module imports use the main entry which has named exports\n // The regional bundles are IIFE format only (for <script> tags)\n // Note: bundleType is kept for API compatibility but not used for ES modules\n return '@lokascript/semantic';\n}\n\n/**\n * Generate the semantic integration layer code.\n * This is injected into the generated bundle when semantic is enabled.\n */\nexport function generateSemanticIntegrationCode(config: SemanticConfig): string {\n if (!config.enabled || !config.bundleType) {\n return '';\n }\n\n const bundleImport = getSemanticBundleImport(config.bundleType);\n const languages = [...config.languages].join(\"', '\");\n\n let code = `\n// =============================================================================\n// SEMANTIC PARSER INTEGRATION\n// =============================================================================\n\nimport {\n createSemanticAnalyzer,\n buildAST,\n isLanguageSupported,\n} from '${bundleImport}';\n`;\n\n if (config.grammarEnabled) {\n code += `\nimport { GrammarTransformer, translate } from '@lokascript/i18n';\n\nconst grammarTransformer = new GrammarTransformer();\n`;\n }\n\n // Generate multilingual command aliases for HybridParser fallback\n const aliasesCode = generateMultilingualAliases(config.languages);\n\n code += `\nconst semanticAnalyzer = createSemanticAnalyzer();\nconst SUPPORTED_SEMANTIC_LANGUAGES = ['${languages}', 'en'];\nconst SEMANTIC_CONFIDENCE_THRESHOLD = 0.7;\n\n${aliasesCode}\n\n/**\n * Parse hyperscript using semantic parser with auto-language detection.\n * Tries each supported language until one returns a high-confidence result.\n * Falls back to HybridParser if none match.\n *\n * @param code - The hyperscript code to parse\n * @param lang - Optional language hint. If provided, tries this language first.\n */\nfunction parseWithSemantic(code, lang = null) {\n // Determine languages to try: specified lang first, then others\n let languagesToTry = [...SUPPORTED_SEMANTIC_LANGUAGES];\n if (lang && !languagesToTry.includes(lang)) {\n languagesToTry.unshift(lang);\n } else if (lang) {\n // Move specified lang to front\n languagesToTry = [lang, ...languagesToTry.filter(l => l !== lang)];\n }\n\n // Try each language until one succeeds\n for (const tryLang of languagesToTry) {\n if (!isLanguageSupported(tryLang)) continue;\n try {\n const result = semanticAnalyzer.analyze(code, tryLang);\n if (result && result.confidence >= SEMANTIC_CONFIDENCE_THRESHOLD) {\n // buildAST returns {ast, warnings} - extract the ast\n const buildResult = buildAST(result.node);\n const ast = buildResult.ast;\n\n // Semantic parser doesn't fully handle event handlers - fallback to HybridParser\n // Event handlers like \"on click toggle .active\" produce incomplete AST\n if (ast && ast.type === 'command' && ast.name === 'on') {\n break; // Fallback to HybridParser\n }\n\n return ast;\n }\n } catch (e) {\n // Continue trying other languages\n }\n }\n\n // Fallback to HybridParser for event handlers and unrecognized patterns\n // Preprocess to translate non-ASCII keywords to English (tokenizer only accepts ASCII)\n const preprocessedCode = preprocessMultilingual(code);\n return new HybridParser(preprocessedCode).parse();\n}\n`;\n\n if (config.grammarEnabled) {\n code += `\n/**\n * Translate hyperscript between languages.\n */\nfunction translateHyperscript(code, fromLang, toLang) {\n return translate(code, fromLang, toLang);\n}\n`;\n }\n\n return code;\n}\n\n/**\n * Get the list of exports to add when semantic is enabled.\n */\nexport function getSemanticExports(config: SemanticConfig): string[] {\n const exports: string[] = [];\n\n if (config.enabled) {\n exports.push('parseWithSemantic');\n exports.push('SUPPORTED_SEMANTIC_LANGUAGES');\n }\n\n if (config.grammarEnabled) {\n exports.push('translateHyperscript');\n exports.push('grammarTransformer');\n }\n\n return exports;\n}\n","/**\n * Compiler\n *\n * Compiles hyperscript AST to JavaScript at build time.\n * Eliminates the need for runtime parsing.\n *\n * Multilingual support:\n * - For English: Uses HybridParser directly\n * - For other languages: Uses semantic parser to translate → AST → JavaScript\n * - Semantic parsing happens at BUILD time (zero runtime overhead)\n */\n\nimport { HybridParser } from '@lokascript/core/parser/hybrid/parser-core';\nimport type {\n ASTNode,\n CommandNode,\n EventNode,\n VariableNode,\n MemberNode,\n PossessiveNode,\n BinaryNode,\n CallNode,\n IdentifierNode,\n SelectorNode,\n LiteralNode,\n PositionalNode,\n} from '@lokascript/core/parser/hybrid/ast-types';\n\n// =============================================================================\n// SEMANTIC PARSER INTEGRATION (optional)\n// =============================================================================\n\n/**\n * Semantic analyzer interface for multilingual support.\n * This matches the interface from @lokascript/semantic.\n */\ninterface SemanticAnalysisResult {\n confidence: number;\n node?: unknown;\n errors?: string[];\n}\n\ninterface SemanticAnalyzer {\n analyze(input: string, language: string): SemanticAnalysisResult;\n supportsLanguage(language: string): boolean;\n}\n\ntype BuildASTFn = (node: unknown) => { ast: ASTNode; warnings: string[] };\n\n/**\n * Optional semantic parser for multilingual support.\n * Set via setSemanticParser() when semantic package is available.\n */\nlet semanticAnalyzer: SemanticAnalyzer | null = null;\nlet buildASTFn: BuildASTFn | null = null;\n\n/**\n * Configure the semantic parser for multilingual compilation.\n * Call this with the semantic analyzer from @lokascript/semantic.\n *\n * @example\n * ```typescript\n * import { createSemanticAnalyzer, buildAST } from '@lokascript/semantic';\n * import { setSemanticParser } from '@lokascript/vite-plugin';\n *\n * setSemanticParser(createSemanticAnalyzer(), buildAST);\n * ```\n */\nexport function setSemanticParser(analyzer: SemanticAnalyzer, buildAST: BuildASTFn): void {\n semanticAnalyzer = analyzer;\n buildASTFn = buildAST;\n}\n\n/**\n * Clear the semantic parser (for testing).\n */\nexport function clearSemanticParser(): void {\n semanticAnalyzer = null;\n buildASTFn = null;\n}\n\n/**\n * Check if semantic parser is available.\n */\nexport function hasSemanticParser(): boolean {\n return semanticAnalyzer !== null && buildASTFn !== null;\n}\n\n/**\n * Confidence threshold for using semantic parse results.\n */\nconst SEMANTIC_CONFIDENCE_THRESHOLD = 0.7;\n\n// =============================================================================\n// MULTILINGUAL PREPROCESSING\n// =============================================================================\n\n/**\n * Multilingual command aliases for preprocessing.\n * Maps non-ASCII keywords to English equivalents.\n */\nlet multilingualAliases: Record<string, string> = {};\nlet multilingualRegex: RegExp | null = null;\n\n/**\n * Configure multilingual aliases for preprocessing.\n * This allows compilation of non-ASCII keywords by translating them to English\n * before parsing with HybridParser.\n *\n * @example\n * ```typescript\n * setMultilingualAliases({\n * 'トグル': 'toggle',\n * '切り替え': 'toggle',\n * '追加': 'add',\n * 'alternar': 'toggle',\n * '토글': 'toggle',\n * });\n * ```\n */\nexport function setMultilingualAliases(aliases: Record<string, string>): void {\n multilingualAliases = { ...aliases };\n\n if (Object.keys(aliases).length > 0) {\n // Build regex pattern to match multilingual keywords\n const escapedKeys = Object.keys(aliases)\n .map(k => k.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\n .join('|');\n multilingualRegex = new RegExp(`(^|\\\\s)(${escapedKeys})(?=\\\\s|\\\\.|$)`, 'g');\n } else {\n multilingualRegex = null;\n }\n}\n\n/**\n * Clear multilingual aliases (for testing).\n */\nexport function clearMultilingualAliases(): void {\n multilingualAliases = {};\n multilingualRegex = null;\n}\n\n/**\n * Get currently configured multilingual aliases.\n */\nexport function getMultilingualAliases(): Record<string, string> {\n return { ...multilingualAliases };\n}\n\n/**\n * Preprocess code to replace non-ASCII keywords with English equivalents.\n * This is needed because HybridParser's tokenizer only accepts ASCII identifiers.\n */\nfunction preprocessMultilingual(code: string): string {\n if (!multilingualRegex) return code;\n\n return code.replace(multilingualRegex, (match, prefix, keyword) => {\n const english = multilingualAliases[keyword];\n return english ? prefix + english : match;\n });\n}\n\n// =============================================================================\n// SANITIZATION UTILITIES\n// =============================================================================\n\n/**\n * Sanitize a class name for safe interpolation into JavaScript string literals.\n * Only allows valid CSS class name characters.\n */\nfunction sanitizeClassName(name: string): string | null {\n // CSS class names: must start with letter, underscore, or hyphen\n // followed by letters, digits, underscores, or hyphens\n if (!/^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(name)) {\n return null; // Invalid class name - fall back to runtime\n }\n return name;\n}\n\n/**\n * Sanitize a CSS selector for safe interpolation into JavaScript string literals.\n * Escapes characters that could break out of string context.\n */\nfunction sanitizeSelector(selector: string): string {\n return selector\n .replace(/\\\\/g, '\\\\\\\\') // Escape backslashes first\n .replace(/'/g, \"\\\\'\") // Escape single quotes\n .replace(/\\n/g, '\\\\n') // Escape newlines\n .replace(/\\r/g, '\\\\r') // Escape carriage returns\n .replace(/\\0/g, ''); // Remove null bytes\n}\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface CompiledHandler {\n /** Unique handler ID (h0, h1, etc.) */\n id: string;\n\n /** Event name (click, input, etc.) */\n event: string;\n\n /** Event modifiers */\n modifiers: {\n prevent?: boolean;\n stop?: boolean;\n once?: boolean;\n debounce?: number;\n throttle?: number;\n };\n\n /** Compiled JavaScript code */\n code: string;\n\n /** Whether handler needs the mini-evaluator for dynamic expressions */\n needsEvaluator: boolean;\n\n /** Original hyperscript for debugging */\n original: string;\n}\n\nexport interface CompilationResult {\n /** All compiled handlers */\n handlers: CompiledHandler[];\n\n /** Whether any handler needs the expression evaluator */\n needsEvaluator: boolean;\n\n /** Whether any handler needs locals support */\n needsLocals: boolean;\n\n /** Whether any handler needs globals support */\n needsGlobals: boolean;\n\n /** Warnings during compilation */\n warnings: string[];\n\n /** Scripts that couldn't be compiled (need full runtime) */\n fallbacks: Array<{ id: string; script: string; reason: string }>;\n}\n\n// =============================================================================\n// COMPILER\n// =============================================================================\n\n/**\n * Simple hash function for generating stable handler IDs.\n * Uses djb2 algorithm - fast and produces good distribution.\n */\nfunction hashScript(script: string): string {\n let hash = 5381;\n for (let i = 0; i < script.length; i++) {\n hash = ((hash << 5) + hash) ^ script.charCodeAt(i);\n }\n // Convert to base36 for shorter IDs, take first 4 chars\n return Math.abs(hash).toString(36).slice(0, 4);\n}\n\n// Track used IDs to handle collisions\nconst usedIds = new Set<string>();\n\n/**\n * Reset compiler state (for testing and between builds)\n */\nexport function resetCompiler(): void {\n usedIds.clear();\n}\n\n/**\n * Generate a semantic handler ID based on event, command, and content hash.\n * Format: {event}_{command}_{hash}\n * Example: click_toggle_3a2b\n */\nfunction generateHandlerId(event: string, command: string, script: string): string {\n const hash = hashScript(script);\n let id = `${event}_${command}_${hash}`;\n\n // Handle unlikely hash collisions by appending a suffix\n let suffix = 0;\n while (usedIds.has(id)) {\n id = `${event}_${command}_${hash}${suffix++}`;\n }\n\n usedIds.add(id);\n return id;\n}\n\n/**\n * Compile options for multilingual support.\n */\nexport interface CompileOptions {\n /** Language code (ISO 639-1). Defaults to 'en'. */\n language?: string;\n /** Enable debug logging. */\n debug?: boolean;\n}\n\n/**\n * Compile a hyperscript string to JavaScript.\n *\n * For non-English languages, uses the semantic parser (if available)\n * to translate the input to an AST before compilation.\n *\n * @param script - The hyperscript code to compile\n * @param options - Compilation options including language\n * @returns Compiled handler or null if compilation failed\n */\nexport function compile(script: string, options: CompileOptions = {}): CompiledHandler | null {\n const { language = 'en', debug = false } = options;\n\n try {\n let ast: ASTNode;\n\n // For non-English, try semantic parser first\n if (language !== 'en' && semanticAnalyzer && buildASTFn) {\n if (semanticAnalyzer.supportsLanguage(language)) {\n const result = semanticAnalyzer.analyze(script, language);\n\n if (result.node && result.confidence >= SEMANTIC_CONFIDENCE_THRESHOLD) {\n const { ast: builtAST, warnings } = buildASTFn(result.node);\n\n if (debug && warnings.length > 0) {\n console.log(`[hyperfixi] Semantic AST warnings for \"${script}\":`, warnings);\n }\n\n ast = builtAST;\n\n if (debug) {\n console.log(\n `[hyperfixi] Compiled ${language}: \"${script}\" (confidence: ${result.confidence.toFixed(2)})`\n );\n }\n } else {\n // Semantic parsing failed or low confidence\n if (debug) {\n const reason =\n result.errors?.join(', ') || `low confidence (${result.confidence.toFixed(2)})`;\n console.log(`[hyperfixi] Semantic parse failed for \"${script}\": ${reason}`);\n }\n return null;\n }\n } else {\n // Language not supported by semantic parser\n if (debug) {\n console.log(`[hyperfixi] Language \"${language}\" not supported by semantic parser`);\n }\n return null;\n }\n } else if (language !== 'en') {\n // Non-English but no semantic parser available\n if (debug) {\n console.log(\n `[hyperfixi] Semantic parser not available for \"${language}\". Install @lokascript/semantic and call setSemanticParser().`\n );\n }\n return null;\n } else {\n // English or no semantic parser - use HybridParser with preprocessing\n // Preprocessing translates non-ASCII keywords to English before parsing\n const preprocessedScript = preprocessMultilingual(script);\n const parser = new HybridParser(preprocessedScript);\n ast = parser.parse();\n }\n\n return compileAST(ast, script);\n } catch (error) {\n if (debug) {\n console.warn(`[hyperfixi] Failed to compile: ${script}`, error);\n }\n return null;\n }\n}\n\n/**\n * Extract the primary command name from the AST body.\n * Used for generating semantic handler IDs.\n */\nfunction extractPrimaryCommand(body: ASTNode[]): string {\n if (body.length === 0) return 'handler';\n\n const first = body[0];\n if (first.type === 'command') {\n return (first as CommandNode).name || 'cmd';\n }\n return first.type || 'handler';\n}\n\n/**\n * Compile an AST node to a handler\n */\nfunction compileAST(ast: ASTNode, original: string): CompiledHandler | null {\n if (ast.type !== 'event') {\n // Non-event scripts (like behaviors) need full runtime\n return null;\n }\n\n const eventNode = ast as EventNode;\n const event = eventNode.event;\n const modifiers = eventNode.modifiers || {};\n const body = eventNode.body || [];\n\n const { code, needsEvaluator, needsLocals, needsGlobals } = compileBody(body);\n\n if (code === null || code === '') {\n // Body couldn't be compiled or is empty\n return null;\n }\n\n // Generate semantic ID: {event}_{command}_{hash}\n const command = extractPrimaryCommand(body);\n const id = generateHandlerId(event, command, original);\n\n return {\n id,\n event,\n modifiers: {\n prevent: modifiers.prevent,\n stop: modifiers.stop,\n once: modifiers.once,\n debounce: modifiers.debounce,\n throttle: modifiers.throttle,\n },\n code,\n needsEvaluator: needsEvaluator || needsLocals || needsGlobals,\n original,\n };\n}\n\ninterface BodyCompilation {\n code: string | null;\n needsEvaluator: boolean;\n needsLocals: boolean;\n needsGlobals: boolean;\n}\n\n/**\n * Compile a command sequence to JavaScript\n */\nfunction compileBody(nodes: ASTNode[]): BodyCompilation {\n const statements: string[] = [];\n let needsEvaluator = false;\n let needsLocals = false;\n let needsGlobals = false;\n\n for (const node of nodes) {\n const result = compileNode(node);\n if (result === null) {\n return { code: null, needsEvaluator: false, needsLocals: false, needsGlobals: false };\n }\n\n statements.push(result.code);\n needsEvaluator = needsEvaluator || result.needsEvaluator;\n needsLocals = needsLocals || result.needsLocals;\n needsGlobals = needsGlobals || result.needsGlobals;\n }\n\n return {\n code: statements.join('\\n'),\n needsEvaluator,\n needsLocals,\n needsGlobals,\n };\n}\n\ninterface NodeCompilation {\n code: string;\n needsEvaluator: boolean;\n needsLocals: boolean;\n needsGlobals: boolean;\n}\n\n/**\n * Compile a single AST node to JavaScript\n */\nfunction compileNode(node: ASTNode): NodeCompilation | null {\n if (node.type === 'command') {\n return compileCommand(node as CommandNode);\n }\n\n // Blocks (if, repeat, for, while, fetch) need runtime for now\n // Could be expanded later for simple cases\n return null;\n}\n\n/**\n * Compile a command to JavaScript\n */\nfunction compileCommand(cmd: CommandNode): NodeCompilation | null {\n const target = cmd.target ? compileTarget(cmd.target) : 'm';\n\n switch (cmd.name) {\n case 'toggle':\n return compileToggle(cmd.args, target);\n\n case 'add':\n return compileAdd(cmd.args, target);\n\n case 'remove':\n return compileRemove(cmd.args, target);\n\n case 'removeClass':\n return compileRemoveClass(cmd.args, target);\n\n case 'show':\n return {\n code: `${target}.style.display = ''`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n\n case 'hide':\n return {\n code: `${target}.style.display = 'none'`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n\n case 'focus':\n return {\n code: `${target}.focus()`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n\n case 'blur':\n return {\n code: `${target}.blur()`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n\n case 'log':\n return compileLog(cmd.args);\n\n case 'set':\n return compileSet(cmd.args);\n\n case 'increment':\n return compileIncrement(cmd.args);\n\n case 'decrement':\n return compileDecrement(cmd.args);\n\n case 'put':\n return compilePut(cmd.args, target, cmd.modifier);\n\n case 'send':\n case 'trigger':\n return compileTrigger(cmd.args, target);\n\n case 'wait':\n return compileWait(cmd.args);\n\n default:\n // Unknown command - can't compile\n return null;\n }\n}\n\n// =============================================================================\n// COMMAND COMPILERS\n// =============================================================================\n\nfunction compileToggle(args: ASTNode[], target: string): NodeCompilation | null {\n const className = extractClassName(args[0]);\n if (!className) return null;\n\n if (target === 'm') {\n return {\n code: `m.classList.toggle('${className}')`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return {\n code: `${target}.forEach(el => el.classList.toggle('${className}'))`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n}\n\nfunction compileAdd(args: ASTNode[], target: string): NodeCompilation | null {\n const className = extractClassName(args[0]);\n if (!className) return null;\n\n if (target === 'm') {\n return {\n code: `m.classList.add('${className}')`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return {\n code: `${target}.forEach(el => el.classList.add('${className}'))`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n}\n\nfunction compileRemove(args: ASTNode[], target: string): NodeCompilation | null {\n // If no args, remove the element itself\n if (!args || args.length === 0) {\n return {\n code: `${target}.remove()`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n // Otherwise remove a class\n const className = extractClassName(args[0]);\n if (!className) return null;\n\n if (target === 'm') {\n return {\n code: `m.classList.remove('${className}')`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return {\n code: `${target}.forEach(el => el.classList.remove('${className}'))`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n}\n\nfunction compileRemoveClass(args: ASTNode[], target: string): NodeCompilation | null {\n const className = extractClassName(args[0]);\n if (!className) return null;\n\n if (target === 'm') {\n return {\n code: `m.classList.remove('${className}')`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return {\n code: `${target}.forEach(el => el.classList.remove('${className}'))`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n}\n\nfunction compileLog(args: ASTNode[]): NodeCompilation | null {\n const compiled = args.map(compileExpression).filter(Boolean);\n if (compiled.length !== args.length) {\n // Some args couldn't be compiled\n return {\n code: `console.log(${compiled.join(', ')})`,\n needsEvaluator: true,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return {\n code: `console.log(${compiled.join(', ')})`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n}\n\nfunction compileSet(args: ASTNode[]): NodeCompilation | null {\n if (args.length < 2) return null;\n\n const [target, value] = args;\n const compiledValue = compileExpression(value);\n if (!compiledValue) return null;\n\n // Local variable (:varName)\n if (target.type === 'variable') {\n const varNode = target as VariableNode;\n if (varNode.scope === 'local') {\n const varName = varNode.name.slice(1);\n return {\n code: `L.${varName} = ${compiledValue}`,\n needsEvaluator: false,\n needsLocals: true,\n needsGlobals: false,\n };\n }\n // Global variable ($varName)\n if (varNode.scope === 'global') {\n const varName = varNode.name.slice(1);\n return {\n code: `G.${varName} = ${compiledValue}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: true,\n };\n }\n }\n\n // Property assignment (element's property)\n if (target.type === 'possessive') {\n const possNode = target as PossessiveNode;\n const obj = compileExpression(possNode.object);\n const prop = possNode.property;\n if (!obj) return null;\n\n // Style property (*opacity, *color, etc.)\n if (prop.startsWith('*')) {\n const styleProp = prop.slice(1);\n return {\n code: `${obj}.style.${styleProp} = ${compiledValue}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return {\n code: `${obj}.${prop} = ${compiledValue}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n if (target.type === 'member') {\n const memNode = target as MemberNode;\n const obj = compileExpression(memNode.object);\n const prop = typeof memNode.property === 'string' ? memNode.property : null;\n if (!obj || !prop) return null;\n\n // Style property (*opacity, *color, etc.)\n if (prop.startsWith('*')) {\n const styleProp = prop.slice(1);\n return {\n code: `${obj}.style.${styleProp} = ${compiledValue}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return {\n code: `${obj}.${prop} = ${compiledValue}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return null;\n}\n\nfunction compileIncrement(args: ASTNode[]): NodeCompilation | null {\n if (args.length < 1) return null;\n\n const target = args[0];\n const amount = args.length > 1 ? compileExpression(args[1]) : '1';\n\n if (target.type === 'variable') {\n const varNode = target as VariableNode;\n if (varNode.scope === 'local') {\n const varName = varNode.name.slice(1);\n return {\n code: `L.${varName} = (L.${varName} || 0) + ${amount}`,\n needsEvaluator: false,\n needsLocals: true,\n needsGlobals: false,\n };\n }\n if (varNode.scope === 'global') {\n const varName = varNode.name.slice(1);\n return {\n code: `G.${varName} = (G.${varName} || 0) + ${amount}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: true,\n };\n }\n }\n\n // Element textContent\n const compiled = compileExpression(target);\n if (compiled) {\n return {\n code: `${compiled}.textContent = (parseFloat(${compiled}.textContent) || 0) + ${amount}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return null;\n}\n\nfunction compileDecrement(args: ASTNode[]): NodeCompilation | null {\n if (args.length < 1) return null;\n\n const target = args[0];\n const amount = args.length > 1 ? compileExpression(args[1]) : '1';\n\n if (target.type === 'variable') {\n const varNode = target as VariableNode;\n if (varNode.scope === 'local') {\n const varName = varNode.name.slice(1);\n return {\n code: `L.${varName} = (L.${varName} || 0) - ${amount}`,\n needsEvaluator: false,\n needsLocals: true,\n needsGlobals: false,\n };\n }\n if (varNode.scope === 'global') {\n const varName = varNode.name.slice(1);\n return {\n code: `G.${varName} = (G.${varName} || 0) - ${amount}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: true,\n };\n }\n }\n\n // Element textContent\n const compiled = compileExpression(target);\n if (compiled) {\n return {\n code: `${compiled}.textContent = (parseFloat(${compiled}.textContent) || 0) - ${amount}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n\n return null;\n}\n\nfunction compilePut(args: ASTNode[], target: string, modifier?: string): NodeCompilation | null {\n if (args.length < 1) return null;\n\n const content = compileExpression(args[0]);\n if (!content) return null;\n\n const mod = modifier || 'into';\n\n switch (mod) {\n case 'into':\n return {\n code: `${target}.innerHTML = ${content}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n case 'before':\n return {\n code: `${target}.insertAdjacentHTML('beforebegin', ${content})`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n case 'after':\n return {\n code: `${target}.insertAdjacentHTML('afterend', ${content})`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n case 'at start of':\n return {\n code: `${target}.insertAdjacentHTML('afterbegin', ${content})`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n case 'at end of':\n return {\n code: `${target}.insertAdjacentHTML('beforeend', ${content})`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n default:\n return {\n code: `${target}.innerHTML = ${content}`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n }\n}\n\nfunction compileTrigger(args: ASTNode[], target: string): NodeCompilation | null {\n if (args.length < 1) return null;\n\n const eventName = compileExpression(args[0]);\n if (!eventName) return null;\n\n return {\n code: `${target}.dispatchEvent(new CustomEvent(${eventName}, { bubbles: true }))`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n}\n\nfunction compileWait(args: ASTNode[]): NodeCompilation | null {\n if (args.length < 1) return null;\n\n const duration = compileExpression(args[0]);\n if (!duration) return null;\n\n return {\n code: `await new Promise(r => setTimeout(r, ${duration}))`,\n needsEvaluator: false,\n needsLocals: false,\n needsGlobals: false,\n };\n}\n\n// =============================================================================\n// EXPRESSION COMPILER\n// =============================================================================\n\nfunction compileExpression(node: ASTNode): string | null {\n if (!node) return null;\n\n switch (node.type) {\n case 'literal': {\n const litNode = node as LiteralNode;\n return JSON.stringify(litNode.value);\n }\n\n case 'identifier': {\n const idNode = node as IdentifierNode;\n const val = idNode.value;\n if (val === 'me' || val === 'my') return 'm';\n if (val === 'you') return 'y';\n if (val === 'it') return 'it';\n if (val === 'event') return 'e';\n if (val === 'body') return 'document.body';\n if (val === 'document') return 'document';\n if (val === 'window') return 'window';\n return val;\n }\n\n case 'variable': {\n const varNode = node as VariableNode;\n const name = varNode.name.slice(1);\n return varNode.scope === 'local' ? `L.${name}` : `G.${name}`;\n }\n\n case 'selector': {\n const selNode = node as SelectorNode;\n const sanitized = sanitizeSelector(selNode.value);\n return `document.querySelector('${sanitized}')`;\n }\n\n case 'possessive': {\n const possNode = node as PossessiveNode;\n const obj = compileExpression(possNode.object);\n const prop = possNode.property;\n if (!obj) return null;\n\n // Style property\n if (prop.startsWith('*')) {\n return `${obj}.style.${prop.slice(1)}`;\n }\n return `${obj}.${prop}`;\n }\n\n case 'member': {\n const memNode = node as MemberNode;\n const obj = compileExpression(memNode.object);\n const prop = typeof memNode.property === 'string' ? memNode.property : null;\n if (!obj || !prop) return null;\n\n // Style property\n if (prop.startsWith('*')) {\n return `${obj}.style.${prop.slice(1)}`;\n }\n return `${obj}.${prop}`;\n }\n\n case 'binary': {\n const binNode = node as BinaryNode;\n const left = compileExpression(binNode.left);\n const right = compileExpression(binNode.right);\n if (!left || !right) return null;\n\n const op = binNode.operator;\n switch (op) {\n case '+':\n case '-':\n case '*':\n case '/':\n case '%':\n return `(${left} ${op} ${right})`;\n case '==':\n case 'is':\n return `(${left} == ${right})`;\n case '!=':\n case 'is not':\n return `(${left} != ${right})`;\n case '<':\n case '>':\n case '<=':\n case '>=':\n return `(${left} ${op} ${right})`;\n case 'and':\n case '&&':\n return `(${left} && ${right})`;\n case 'or':\n case '||':\n return `(${left} || ${right})`;\n case 'has': {\n // Special case: element has .class\n const rightSel = binNode.right as SelectorNode;\n const className = rightSel.value?.slice(1) || '';\n const sanitizedClass = sanitizeClassName(className);\n if (!sanitizedClass) return null; // Invalid class name - fall back to runtime\n return `${left}.classList.contains('${sanitizedClass}')`;\n }\n default:\n return null;\n }\n }\n\n case 'call': {\n const callNode = node as CallNode;\n const callee = callNode.callee;\n const args = (callNode.args || []).map(compileExpression);\n if (args.some((a: string | null) => a === null)) return null;\n\n if (callee.type === 'member' || callee.type === 'possessive') {\n const memCallee = callee as MemberNode | PossessiveNode;\n const obj = compileExpression(memCallee.object);\n const prop = typeof memCallee.property === 'string' ? memCallee.property : null;\n if (!obj || !prop) return null;\n return `${obj}.${prop}(${args.join(', ')})`;\n }\n\n const fn = compileExpression(callee);\n if (!fn) return null;\n return `${fn}(${args.join(', ')})`;\n }\n\n case 'positional': {\n const posNode = node as PositionalNode;\n const position = posNode.position;\n const target = posNode.target;\n\n switch (position) {\n case 'first':\n if (target?.type === 'selector') {\n const selNode = target as SelectorNode;\n const sanitized = sanitizeSelector(selNode.value);\n return `document.querySelector('${sanitized}')`;\n }\n return null; // Arrays need runtime\n\n case 'last':\n if (target?.type === 'selector') {\n const selNode = target as SelectorNode;\n const sanitized = sanitizeSelector(selNode.value);\n return `(()=>{const e=document.querySelectorAll('${sanitized}');return e[e.length-1]})()`;\n }\n return null; // Arrays need runtime\n\n case 'next':\n return 'm.nextElementSibling';\n\n case 'previous':\n return 'm.previousElementSibling';\n\n case 'closest':\n if (target?.type === 'selector') {\n const selNode = target as SelectorNode;\n const sanitized = sanitizeSelector(selNode.value);\n return `m.closest('${sanitized}')`;\n }\n return null;\n\n case 'parent':\n return 'm.parentElement';\n\n default:\n return null;\n }\n }\n\n default:\n return null;\n }\n}\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction compileTarget(target: ASTNode): string {\n if (target.type === 'identifier') {\n const idNode = target as IdentifierNode;\n if (idNode.value === 'me' || idNode.value === 'my') return 'm';\n if (idNode.value === 'you') return 'y';\n }\n\n if (target.type === 'selector') {\n const selNode = target as SelectorNode;\n const sanitized = sanitizeSelector(selNode.value);\n return `document.querySelectorAll('${sanitized}')`;\n }\n\n const compiled = compileExpression(target);\n return compiled || 'm';\n}\n\nfunction extractClassName(node: ASTNode): string | null {\n if (!node) return null;\n\n if (node.type === 'selector') {\n const selNode = node as SelectorNode;\n const val = selNode.value;\n const rawClass = val.startsWith('.') ? val.slice(1) : val;\n // Sanitize class name before returning\n return sanitizeClassName(rawClass);\n }\n\n if (node.type === 'literal' || node.type === 'string') {\n const litNode = node as LiteralNode;\n const val = litNode.value;\n if (typeof val === 'string') {\n const rawClass = val.startsWith('.') ? val.slice(1) : val;\n return sanitizeClassName(rawClass);\n }\n }\n\n if (node.type === 'identifier') {\n const idNode = node as IdentifierNode;\n return sanitizeClassName(idNode.value);\n }\n\n return null;\n}\n","/**\n * Compiled Generator\n *\n * Generates minimal runtime code from compiled handlers.\n * No parser needed - all hyperscript is pre-compiled to JS.\n *\n * Target: ~500 bytes gzipped for simple handlers\n */\n\nimport type { CompiledHandler } from './compiler';\n\nexport interface CompiledBundleOptions {\n /** Compiled handlers */\n handlers: CompiledHandler[];\n\n /** Whether any handler needs locals */\n needsLocals: boolean;\n\n /** Whether any handler needs globals */\n needsGlobals: boolean;\n\n /** Global variable name */\n globalName?: string;\n\n /** Enable htmx integration */\n htmx?: boolean;\n\n /** Include source maps / debug info */\n debug?: boolean;\n}\n\n/**\n * Generate a source map table showing original hyperscript → compiled handler ID.\n * Included in bundle header when debug mode is enabled.\n */\nfunction generateSourceMapTable(handlers: CompiledHandler[]): string {\n if (handlers.length === 0) return '';\n\n const lines = [\n ' *',\n ' * Handler Source Map:',\n ' * ┌─────────────────────────────────────────────────────────────────┐',\n ];\n\n for (const h of handlers) {\n const original = h.original.replace(/\\n/g, ' ').slice(0, 40);\n const truncated = original.length < h.original.length ? original + '...' : original;\n lines.push(` * │ ${h.id.padEnd(20)} ← ${truncated.padEnd(40)} │`);\n }\n\n lines.push(' * └─────────────────────────────────────────────────────────────────┘');\n lines.push(' *');\n\n return lines.join('\\n');\n}\n\n/**\n * Generate minimal runtime bundle from compiled handlers\n */\nexport function generateCompiledBundle(options: CompiledBundleOptions): string {\n const {\n handlers,\n needsLocals,\n needsGlobals,\n globalName = 'hyperfixi',\n htmx = false,\n debug = false,\n } = options;\n\n // Generate handler map with optional debug comments\n const handlerEntries = handlers.map(h => {\n const isAsync = h.code.includes('await');\n const fn = isAsync ? `async(m,e,y)=>{${h.code}}` : `(m,e,y)=>{${h.code}}`;\n\n if (debug) {\n // Include original hyperscript as comment for debugging\n const escapedOriginal = h.original.replace(/\\*/g, '\\\\*').replace(/\\n/g, ' ');\n return `\\n /* ${escapedOriginal} */\\n ${h.id}:${fn}`;\n }\n return `${h.id}:${fn}`;\n });\n\n // Generate event registration for each handler\n const registrations = handlers.map(h => {\n const modsCode = generateModifiersCode(h);\n return ` case '${h.id}': r(el,'${h.event}',H.${h.id}${modsCode}); break;`;\n });\n\n const localsCode = needsLocals ? 'const L={};' : '';\n const globalsCode = needsGlobals ? 'const G={};' : '';\n\n // Generate source map table for debug mode\n const sourceMapTable = debug ? generateSourceMapTable(handlers) : '';\n\n return `/**\n * HyperFixi Compiled Bundle (Auto-Generated)\n *\n * Pre-compiled hyperscript - no runtime parser needed!\n * Handlers: ${handlers.length}\n *\n * DO NOT EDIT - Regenerate with build.\n${sourceMapTable} */\n\n${localsCode}${globalsCode}\nconst H={${handlerEntries.join(',')}};\n\nfunction r(el,ev,fn${hasModifiers(handlers) ? ',m' : ''}){\n let h=e=>fn(el,e,e.target);\n${generateModifierWrappers(handlers)}\n el.addEventListener(ev,h${hasOnce(handlers) ? ',{once:m?.o}' : ''});\n}\n\nfunction init(root=document){\n root.querySelectorAll('[data-h]').forEach(el=>{\n switch(el.dataset.h){\n${registrations.join('\\n')}\n }\n });\n}\n\n${htmx ? `document.addEventListener('htmx:afterSettle',e=>init(e.detail?.target));` : ''}\n\nconst api={\n version:'1.0.0-compiled',\n commands:${JSON.stringify(handlers.map(h => h.id))},\n init,\n process:init,\n};\n\nif(typeof window!=='undefined'){\n window.${globalName}=api;\n window._hyperscript=api;\n document.readyState==='loading'\n ?document.addEventListener('DOMContentLoaded',()=>init())\n :init();\n}\n\nexport default api;\nexport{api,init};\n`;\n}\n\n/**\n * Generate modifiers code for a handler registration\n */\nfunction generateModifiersCode(h: CompiledHandler): string {\n const mods: string[] = [];\n\n if (h.modifiers.prevent) mods.push('p:1');\n if (h.modifiers.stop) mods.push('s:1');\n if (h.modifiers.once) mods.push('o:1');\n if (h.modifiers.debounce) mods.push(`d:${h.modifiers.debounce}`);\n if (h.modifiers.throttle) mods.push(`t:${h.modifiers.throttle}`);\n\n if (mods.length === 0) return '';\n return `,{${mods.join(',')}}`;\n}\n\n/**\n * Check if any handler has modifiers\n */\nfunction hasModifiers(handlers: CompiledHandler[]): boolean {\n return handlers.some(\n h =>\n h.modifiers.prevent ||\n h.modifiers.stop ||\n h.modifiers.once ||\n h.modifiers.debounce ||\n h.modifiers.throttle\n );\n}\n\n/**\n * Check if any handler has .once modifier\n */\nfunction hasOnce(handlers: CompiledHandler[]): boolean {\n return handlers.some(h => h.modifiers.once);\n}\n\n/**\n * Generate modifier wrapper code\n */\nfunction generateModifierWrappers(handlers: CompiledHandler[]): string {\n const lines: string[] = [];\n\n if (handlers.some(h => h.modifiers.prevent || h.modifiers.stop)) {\n lines.push(\n ` if(m?.p||m?.s){const _h=h;h=e=>{m.p&&e.preventDefault();m.s&&e.stopPropagation();_h(e.currentTarget,e,e.target)};}`\n );\n }\n\n if (handlers.some(h => h.modifiers.debounce)) {\n lines.push(\n ` if(m?.d){let t;const _h=h;h=e=>{clearTimeout(t);t=setTimeout(()=>_h(e.currentTarget,e,e.target),m.d)};}`\n );\n }\n\n if (handlers.some(h => h.modifiers.throttle)) {\n lines.push(\n ` if(m?.t){let l=0;const _h=h;h=e=>{const n=Date.now();if(n-l>=m.t){l=n;_h(e.currentTarget,e,e.target)}};}`\n );\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Generate the HTML transformer output\n *\n * Transforms: <button _=\"on click toggle .active\">\n * To: <button data-h=\"click_toggle_3a2b\">\n */\nexport function generateTransformMap(handlers: CompiledHandler[]): Map<string, string> {\n const map = new Map<string, string>();\n\n for (const h of handlers) {\n map.set(h.original, h.id);\n }\n\n return map;\n}\n\n/**\n * Handler manifest entry for debugging\n */\nexport interface HandlerManifestEntry {\n /** Semantic handler ID (e.g., click_toggle_3a2b) */\n id: string;\n /** Event that triggers this handler */\n event: string;\n /** Primary command */\n command: string;\n /** Original hyperscript source */\n original: string;\n /** Compiled JavaScript code */\n compiled: string;\n /** Event modifiers */\n modifiers: {\n prevent?: boolean;\n stop?: boolean;\n once?: boolean;\n debounce?: number;\n throttle?: number;\n };\n}\n\n/**\n * Generate a JSON manifest for debugging.\n * Can be written to a separate file or used in devtools.\n *\n * @example\n * // In vite plugin:\n * const manifest = generateManifest(handlers);\n * fs.writeFileSync('hyperfixi-manifest.json', JSON.stringify(manifest, null, 2));\n */\nexport function generateManifest(handlers: CompiledHandler[]): HandlerManifestEntry[] {\n return handlers.map(h => {\n // Extract command from semantic ID (click_toggle_3a2b → toggle)\n const parts = h.id.split('_');\n const command = parts.length >= 2 ? parts[1] : 'unknown';\n\n return {\n id: h.id,\n event: h.event,\n command,\n original: h.original,\n compiled: h.code,\n modifiers: h.modifiers,\n };\n });\n}\n\n/**\n * Generate a human-readable debug report.\n * Useful for console output or log files.\n */\nexport function generateDebugReport(handlers: CompiledHandler[]): string {\n const lines = [\n '╔══════════════════════════════════════════════════════════════════╗',\n '║ HyperFixi Compiled Handlers Debug Report ║',\n '╠══════════════════════════════════════════════════════════════════╣',\n '',\n ];\n\n for (const h of handlers) {\n lines.push(`┌── ${h.id} ──────────────────────────────────────────────`);\n lines.push(`│ Event: ${h.event}`);\n lines.push(`│ Original: ${h.original}`);\n lines.push(`│ Compiled: ${h.code}`);\n if (Object.values(h.modifiers).some(Boolean)) {\n const mods = Object.entries(h.modifiers)\n .filter(([, v]) => v)\n .map(([k, v]) => `${k}=${v}`)\n .join(', ');\n lines.push(`│ Modifiers: ${mods}`);\n }\n lines.push('└─────────────────────────────────────────────────────────────');\n lines.push('');\n }\n\n lines.push('╚══════════════════════════════════════════════════════════════════╝');\n\n return lines.join('\\n');\n}\n","/**\n * HTML Transformer\n *\n * Transforms HTML files to replace _=\"...\" attributes with data-h=\"...\" attributes\n * for compile mode.\n */\n\nimport type { CompiledHandler } from './compiler';\n\nexport interface TransformResult {\n /** Transformed HTML code */\n code: string;\n\n /** Whether the HTML was modified */\n modified: boolean;\n\n /** Scripts that were found but couldn't be compiled */\n fallbacks: string[];\n}\n\n/**\n * Transform HTML to use compiled handler IDs\n */\nexport function transformHTML(\n html: string,\n handlerMap: Map<string, string>,\n fallbackScripts: Set<string>\n): TransformResult {\n let modified = false;\n const fallbacks: string[] = [];\n\n // Regex patterns for _=\"...\" attributes\n const patterns = [\n /(\\s)_\\s*=\\s*\"([^\"]+)\"/g, // _=\"...\"\n /(\\s)_\\s*=\\s*'([^']+)'/g, // _='...'\n /(\\s)_\\s*=\\s*`([^`]+)`/g, // _=`...`\n ];\n\n let result = html;\n\n for (const pattern of patterns) {\n result = result.replace(pattern, (match, whitespace, script) => {\n const handlerId = handlerMap.get(script);\n\n if (handlerId) {\n modified = true;\n return `${whitespace}data-h=\"${handlerId}\"`;\n }\n\n // Script couldn't be compiled - check if it's a known fallback\n if (fallbackScripts.has(script)) {\n fallbacks.push(script);\n // Keep original for fallback runtime\n return match;\n }\n\n // Unknown script - keep original but warn\n fallbacks.push(script);\n return match;\n });\n }\n\n return {\n code: result,\n modified,\n fallbacks,\n };\n}\n\n/**\n * Build a handler map from compiled handlers\n */\nexport function buildHandlerMap(handlers: CompiledHandler[]): Map<string, string> {\n const map = new Map<string, string>();\n\n for (const handler of handlers) {\n map.set(handler.original, handler.id);\n }\n\n return map;\n}\n\n/**\n * Extract all hyperscript snippets from HTML\n */\nexport function extractScripts(html: string): string[] {\n const scripts: string[] = [];\n\n const patterns = [/_\\s*=\\s*\"([^\"]+)\"/g, /_\\s*=\\s*'([^']+)'/g, /_\\s*=\\s*`([^`]+)`/g];\n\n for (const pattern of patterns) {\n let match;\n while ((match = pattern.exec(html))) {\n scripts.push(match[1]);\n }\n }\n\n return scripts;\n}\n","/**\n * @lokascript/vite-plugin\n *\n * Zero-config Vite plugin that automatically generates minimal HyperFixi bundles\n * based on detected hyperscript usage in your source files.\n *\n * @example\n * ```javascript\n * // vite.config.js\n * import { hyperfixi } from '@lokascript/vite-plugin';\n *\n * export default {\n * plugins: [hyperfixi()]\n * };\n * ```\n *\n * The plugin automatically:\n * - Scans HTML, Vue, Svelte, JSX/TSX files for `_=\"...\"` attributes\n * - Detects which commands, blocks, and expressions are used\n * - Generates a minimal bundle with only needed features\n * - Re-generates on file changes (HMR)\n *\n * @example\n * ```javascript\n * // With options\n * hyperfixi({\n * extraCommands: ['fetch', 'put'], // Always include these commands\n * htmx: true, // Enable htmx integration\n * debug: true, // Enable verbose logging\n * })\n * ```\n *\n * @example\n * ```javascript\n * // Compile mode for smallest bundles (~500 bytes)\n * hyperfixi({\n * mode: 'compile', // Pre-compile hyperscript to JS\n * debug: true,\n * })\n * ```\n */\n\nimport type { Plugin, ViteDevServer, HmrContext } from 'vite';\nimport type { HyperfixiPluginOptions, AggregatedUsage } from './types';\nimport { Scanner } from './scanner';\nimport { Aggregator } from './aggregator';\nimport { Generator } from './generator';\nimport { compile, resetCompiler, setMultilingualAliases, type CompiledHandler } from './compiler';\nimport { generateCompiledBundle } from './compiled-generator';\nimport { transformHTML, extractScripts } from './html-transformer';\nimport { getMultilingualCommandAliases } from './semantic-integration';\nimport type { SupportedLanguage } from './language-keywords';\n\n// Re-export types\nexport type {\n HyperfixiPluginOptions,\n FileUsage,\n AggregatedUsage,\n CustomLanguageKeywords,\n} from './types';\nexport type { CompiledHandler, CompileOptions } from './compiler';\n\n// Re-export semantic parser integration functions for multilingual compile mode\nexport { setSemanticParser, clearSemanticParser, hasSemanticParser } from './compiler';\n\n// Re-export language keyword utilities for customization\nexport {\n SUPPORTED_LANGUAGES,\n REGIONS,\n registerCustomKeywords,\n getKeywordsForLanguage,\n isNonLatinLanguage,\n getAllLanguageCodes,\n clearCustomKeywords,\n detectLanguages,\n getOptimalRegion,\n} from './language-keywords';\nexport type { SupportedLanguage } from './language-keywords';\n\n// Virtual module ID\nconst VIRTUAL_MODULE_ID = 'virtual:hyperfixi';\nconst RESOLVED_VIRTUAL_MODULE_ID = '\\0' + VIRTUAL_MODULE_ID;\n\n// Import aliases that resolve to the virtual module\nconst IMPORT_ALIASES = ['hyperfixi', '@lokascript/core', 'virtual:hyperfixi'];\n\n/**\n * Create the HyperFixi Vite plugin\n *\n * @param options Plugin options\n * @returns Vite plugin\n */\nexport function hyperfixi(options: HyperfixiPluginOptions = {}): Plugin {\n const mode = options.mode ?? 'interpret';\n const scanner = new Scanner(options);\n const aggregator = new Aggregator();\n const generator = new Generator(options);\n\n let server: ViteDevServer | null = null;\n let cachedBundle: string | null = null;\n let lastUsageHash = '';\n let isDev = false;\n\n // Compile mode state\n const compiledHandlers: CompiledHandler[] = [];\n const handlerMap = new Map<string, string>(); // script -> handlerId\n const fallbackScripts = new Set<string>(); // Scripts that couldn't be compiled\n let needsLocals = false;\n let needsGlobals = false;\n\n /**\n * Compute a hash of the current usage for cache invalidation\n */\n function computeUsageHash(usage: AggregatedUsage): string {\n const commands = [...usage.commands].sort().join(',');\n const blocks = [...usage.blocks].sort().join(',');\n const languages = [...usage.detectedLanguages].sort().join(',');\n return `${commands}|${blocks}|${usage.positional}|${languages}`;\n }\n\n /**\n * Invalidate the virtual module in dev server\n */\n function invalidateVirtualModule(): void {\n if (!server) return;\n\n const mod = server.moduleGraph.getModuleById(RESOLVED_VIRTUAL_MODULE_ID);\n if (mod) {\n server.moduleGraph.invalidateModule(mod);\n server.ws.send({ type: 'full-reload' });\n\n if (options.debug) {\n console.log('[hyperfixi] Virtual module invalidated, triggering reload');\n }\n }\n }\n\n /**\n * Compile a hyperscript snippet and add to handlers\n */\n function compileScript(script: string): string | null {\n // Check if already compiled\n if (handlerMap.has(script)) {\n return handlerMap.get(script)!;\n }\n\n // Check if known fallback\n if (fallbackScripts.has(script)) {\n return null;\n }\n\n // Try to compile\n const handler = compile(script);\n\n if (handler) {\n compiledHandlers.push(handler);\n handlerMap.set(script, handler.id);\n\n if (handler.needsEvaluator) {\n // Check if needs locals/globals based on code\n if (handler.code.includes('L.')) needsLocals = true;\n if (handler.code.includes('G.')) needsGlobals = true;\n }\n\n if (options.debug) {\n console.log(`[hyperfixi] Compiled: \"${script}\" -> ${handler.id}`);\n }\n\n return handler.id;\n }\n\n // Couldn't compile - mark as fallback\n fallbackScripts.add(script);\n\n if (options.debug) {\n console.log(`[hyperfixi] Fallback (not compilable): \"${script}\"`);\n }\n\n return null;\n }\n\n /**\n * Generate the bundle code (interpret mode)\n */\n function generateInterpretBundle(): string {\n const usage = aggregator.getUsage();\n const usageHash = computeUsageHash(usage);\n\n // Return cached bundle if usage hasn't changed\n if (cachedBundle && usageHash === lastUsageHash) {\n return cachedBundle;\n }\n\n // In dev mode, optionally use fallback bundle for faster rebuilds\n if (isDev && options.devFallback && options.devFallback !== 'auto') {\n cachedBundle = generator.generateDevFallback(options.devFallback);\n } else {\n cachedBundle = generator.generate(usage, options);\n }\n\n lastUsageHash = usageHash;\n\n if (options.debug) {\n const summary = aggregator.getSummary();\n console.log('[hyperfixi] Bundle generated:', summary);\n }\n\n return cachedBundle;\n }\n\n /**\n * Generate the bundle code (compile mode)\n */\n function generateCompiledBundleCode(): string {\n // Check if we have fallbacks that need the interpreter\n if (fallbackScripts.size > 0) {\n if (options.debug) {\n console.log(`[hyperfixi] ${fallbackScripts.size} scripts need interpreter fallback`);\n }\n // Fall back to interpret mode for this build\n return generateInterpretBundle();\n }\n\n const bundle = generateCompiledBundle({\n handlers: compiledHandlers,\n needsLocals,\n needsGlobals,\n globalName: options.globalName,\n htmx: options.htmx,\n debug: options.debug,\n });\n\n if (options.debug) {\n console.log(`[hyperfixi] Compiled bundle: ${compiledHandlers.length} handlers`);\n }\n\n return bundle;\n }\n\n /**\n * Generate the bundle code (dispatches to correct mode)\n */\n function generateBundle(): string {\n if (mode === 'compile') {\n return generateCompiledBundleCode();\n }\n return generateInterpretBundle();\n }\n\n return {\n name: 'vite-plugin-hyperfixi',\n enforce: 'pre' as const,\n\n /**\n * Configure plugin based on Vite mode\n */\n configResolved(config) {\n isDev = config.command === 'serve';\n\n if (options.debug) {\n console.log('[hyperfixi] Plugin initialized, mode:', isDev ? 'development' : 'production');\n }\n },\n\n /**\n * Store server reference and pre-scan HTML files for HMR\n */\n async configureServer(_server: ViteDevServer) {\n server = _server;\n\n // Pre-scan project to detect hyperscript before first request\n const cwd = _server.config.root;\n if (options.debug) {\n console.log('[hyperfixi] Pre-scanning project:', cwd);\n }\n\n const scannedFiles = await scanner.scanProject(cwd);\n aggregator.loadFromScan(scannedFiles);\n\n if (options.debug) {\n const summary = aggregator.getSummary();\n console.log('[hyperfixi] Pre-scan complete:', summary);\n }\n },\n\n /**\n * Resolve virtual module imports\n */\n resolveId(id: string) {\n if (IMPORT_ALIASES.includes(id)) {\n return RESOLVED_VIRTUAL_MODULE_ID;\n }\n return null;\n },\n\n /**\n * Load the virtual module with generated bundle\n */\n load(id: string) {\n if (id === RESOLVED_VIRTUAL_MODULE_ID) {\n return generateBundle();\n }\n return null;\n },\n\n /**\n * Scan files during transform for hyperscript usage\n */\n transform(code: string, id: string) {\n if (!scanner.shouldScan(id)) {\n return null;\n }\n\n // In compile mode, we compile scripts and transform HTML\n if (mode === 'compile' && !isDev) {\n // Extract and compile all scripts from this file\n const scripts = extractScripts(code);\n\n for (const script of scripts) {\n compileScript(script);\n }\n\n // Transform HTML to use data-h attributes\n const result = transformHTML(code, handlerMap, fallbackScripts);\n\n if (result.modified) {\n if (options.debug) {\n console.log(`[hyperfixi] Transformed: ${id.split('/').pop()}`);\n }\n return { code: result.code, map: null };\n }\n\n return null;\n }\n\n // Interpret mode: just scan for usage\n const usage = scanner.scan(code, id);\n const changed = aggregator.add(id, usage);\n\n // Invalidate virtual module if usage changed\n if (changed && server) {\n // Debounce invalidation slightly to batch multiple file changes\n setImmediate(() => {\n const currentHash = computeUsageHash(aggregator.getUsage());\n if (currentHash !== lastUsageHash) {\n invalidateVirtualModule();\n }\n });\n }\n\n return null; // Don't modify source files in interpret mode\n },\n\n /**\n * Handle file changes in HMR\n */\n async handleHotUpdate(ctx: HmrContext) {\n const { file, read } = ctx;\n\n // Check if a scanned file was changed\n if (scanner.shouldScan(file)) {\n try {\n // Read the updated file content and re-scan\n const content = await read();\n const usage = scanner.scan(content, file);\n const changed = aggregator.add(file, usage);\n\n if (options.debug) {\n console.log('[hyperfixi] HMR: Re-scanned', file.split('/').pop(), usage);\n }\n\n // Invalidate virtual module if usage changed\n if (changed) {\n const currentHash = computeUsageHash(aggregator.getUsage());\n if (currentHash !== lastUsageHash) {\n invalidateVirtualModule();\n }\n }\n } catch {\n // File was deleted, remove from aggregator\n if (aggregator.remove(file)) {\n invalidateVirtualModule();\n }\n }\n }\n\n return undefined;\n },\n\n /**\n * Scan entire project before production build\n */\n async buildStart() {\n if (!isDev) {\n // Reset compile mode state\n if (mode === 'compile') {\n resetCompiler();\n compiledHandlers.length = 0;\n handlerMap.clear();\n fallbackScripts.clear();\n needsLocals = false;\n needsGlobals = false;\n\n if (options.debug) {\n console.log('[hyperfixi] Compile mode: ready for build');\n }\n }\n\n // Production build: scan entire project\n const cwd = process.cwd();\n\n if (options.debug) {\n console.log('[hyperfixi] Scanning project for hyperscript usage...');\n }\n\n const scannedFiles = await scanner.scanProject(cwd);\n aggregator.loadFromScan(scannedFiles);\n\n // Configure multilingual aliases for compile mode\n if (mode === 'compile') {\n const usage = aggregator.getUsage();\n if (usage.detectedLanguages.size > 0) {\n const aliases = getMultilingualCommandAliases(\n usage.detectedLanguages as Set<SupportedLanguage>\n );\n if (Object.keys(aliases).length > 0) {\n setMultilingualAliases(aliases);\n if (options.debug) {\n console.log(\n `[hyperfixi] Compile mode: configured ${Object.keys(aliases).length} multilingual aliases`\n );\n }\n }\n }\n }\n\n if (options.debug) {\n const summary = aggregator.getSummary();\n console.log(`[hyperfixi] Found ${summary.fileCount} files with hyperscript:`, {\n commands: summary.commands,\n blocks: summary.blocks,\n positional: summary.positional,\n languages: summary.languages,\n });\n }\n }\n },\n };\n}\n\n// Default export for convenience\nexport default hyperfixi;\n"],"mappings":"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AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAMM,IAAM,kBAAkB,oBAAI,IAAI;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAMM,IAAM,mBAAmB,oBAAI,IAAI;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAMM,IAAM,qBAAqB,oBAAI,IAAI;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAA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","names":["match"]}