@gschz/astro-plugin-i18n 0.3.7-rc.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/config.ts","../src/core/translations.ts","../src/core/translate.ts","../src/core/language.ts","../src/index.ts","../src/components/LangToggle.tsx","../src/components/TranslatedText.tsx","../src/integration.ts","../src/utils/type-generator.ts","../src/middleware-entrypoint.ts","../src/core/setup.ts"],"names":["config","fs","getTranslation","changeLanguage","React2","path"],"mappings":"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","file":"index.js","sourcesContent":["/**\r\n * Gestion de configuracion para astro-plugin-i18n.\r\n */\r\n\r\nimport type { I18nPluginOptions, Language, TranslationConfig } from \"../types\";\r\n\r\nconst defaultConfig: TranslationConfig = {\r\n defaultLang: undefined,\r\n supportedLangs: [],\r\n translationsDir: \"./src/i18n\",\r\n autoDetect: true,\r\n generateTypes: false,\r\n typesOutputPath: \"./src/types/i18n-types.d.ts\",\r\n missingKeyStrategy: \"key\",\r\n registerAstroIntegration: true,\r\n};\r\n\r\nlet config: TranslationConfig = { ...defaultConfig };\r\n\r\nexport function getConfig(): TranslationConfig {\r\n const currentConfig = config;\r\n\r\n return {\r\n defaultLang: currentConfig.defaultLang || \"en\",\r\n supportedLangs: currentConfig.supportedLangs || [\"en\"],\r\n translationsDir: currentConfig.translationsDir || \"./src/i18n\",\r\n autoDetect: currentConfig.autoDetect !== false,\r\n generateTypes: currentConfig.generateTypes || false,\r\n typesOutputPath:\r\n currentConfig.typesOutputPath || \"./src/types/i18n-types.d.ts\",\r\n missingKeyStrategy: currentConfig.missingKeyStrategy || \"key\",\r\n registerAstroIntegration: currentConfig.registerAstroIntegration ?? true,\r\n ...currentConfig,\r\n };\r\n}\r\n\r\nexport function updateConfig(\r\n options: Partial<I18nPluginOptions> = {},\r\n): TranslationConfig {\r\n config = {\r\n ...config,\r\n ...options,\r\n };\r\n\r\n return { ...config };\r\n}\r\n\r\nexport function resetConfig(): TranslationConfig {\r\n config = { ...defaultConfig };\r\n return { ...config };\r\n}\r\n\r\nexport function initConfig(\r\n options: Partial<I18nPluginOptions> = {},\r\n): TranslationConfig {\r\n config = { ...defaultConfig, ...options };\r\n return { ...config };\r\n}\r\n\r\nexport function getSupportedLanguages(): Language[] {\r\n return getConfig().supportedLangs || [];\r\n}\r\n\r\nexport function getDefaultLanguage(): Language {\r\n const currentConfig = getConfig();\r\n\r\n if (!currentConfig.defaultLang) {\r\n throw new Error(\r\n \"i18n plugin error: Default language is not defined. Please configure 'defaultLang' in your Astro integration options or i18n.config.js.\",\r\n );\r\n }\r\n\r\n return currentConfig.defaultLang;\r\n}\r\n\r\nexport { defaultConfig };\r\n","/**\r\n * Funciones para cargar y gestionar traducciones desde el sistema de archivos.\r\n */\r\n\r\nimport fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport type { Language } from \"../types\";\r\nimport { getConfig } from \"./config\";\r\n\r\nconst translationsCache: Record<Language, Record<string, any>> = {};\r\n\r\nexport async function getTranslationsForLanguage(\r\n lang: Language,\r\n): Promise<Record<string, any>> {\r\n return loadTranslations(lang);\r\n}\r\n\r\nexport async function loadTranslations(\r\n lang: Language,\r\n): Promise<Record<string, any>> {\r\n if (translationsCache[lang]) {\r\n return translationsCache[lang];\r\n }\r\n\r\n try {\r\n const config = getConfig();\r\n const translationsDir = path.resolve(\r\n process.cwd(),\r\n config.translationsDir as string,\r\n );\r\n const filePath = path.join(translationsDir, `${lang}.json`);\r\n\r\n if (!fs.existsSync(filePath)) {\r\n console.warn(\r\n `No translations file found for language: ${lang} at ${filePath}`,\r\n );\r\n return {};\r\n }\r\n\r\n const fileContent = fs.readFileSync(filePath, \"utf-8\");\r\n const translations = JSON.parse(fileContent) as Record<string, any>;\r\n translationsCache[lang] = translations;\r\n\r\n return translations;\r\n } catch (error) {\r\n console.error(`Error loading translations for ${lang}:`, error);\r\n return {};\r\n }\r\n}\r\n\r\nexport async function getTranslation(\r\n key: string,\r\n lang: Language,\r\n): Promise<string> {\r\n const translations = await loadTranslations(lang);\r\n const keys = key.split(\".\");\r\n let result: any = translations;\r\n\r\n for (const part of keys) {\r\n if (!result || typeof result !== \"object\") {\r\n return handleMissingTranslation(key, lang);\r\n }\r\n\r\n result = result[part];\r\n }\r\n\r\n if (typeof result === \"string\") {\r\n return result;\r\n }\r\n\r\n return handleMissingTranslation(key, lang);\r\n}\r\n\r\nasync function handleMissingTranslation(\r\n key: string,\r\n lang: Language,\r\n): Promise<string> {\r\n const config = getConfig();\r\n\r\n switch (config.missingKeyStrategy) {\r\n case \"empty\":\r\n return \"\";\r\n case \"error\":\r\n console.error(`Missing translation for key: ${key} in language: ${lang}`);\r\n return `[MISSING: ${key}]`;\r\n case \"key\":\r\n default:\r\n return key;\r\n }\r\n}\r\n\r\nexport function clearTranslationsCache(): void {\r\n Object.keys(translationsCache).forEach((key) => {\r\n delete translationsCache[key];\r\n });\r\n}\r\n","/**\r\n * Funciones de traduccion y hooks para componentes.\r\n */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport type { Language, TranslationKey, TranslationOptions } from \"../types\";\r\nimport { getConfig } from \"./config\";\r\nimport {\r\n changeLanguage,\r\n getCurrentLanguage,\r\n setupLanguageObserver,\r\n} from \"./language\";\r\n\r\nconst clientTranslationsCache: Record<string, string> = {};\r\n\r\nexport function populateClientCache(\r\n lang: Language,\r\n translations: Record<string, any>,\r\n) {\r\n const flattenTranslations = (\r\n obj: Record<string, any>,\r\n prefix = \"\",\r\n ): Record<string, string> => {\r\n return Object.keys(obj).reduce(\r\n (acc, key) => {\r\n const currentPrefix = prefix.length ? `${prefix}.` : \"\";\r\n\r\n if (typeof obj[key] === \"object\" && obj[key] !== null) {\r\n Object.assign(\r\n acc,\r\n flattenTranslations(obj[key], `${currentPrefix}${key}`),\r\n );\r\n } else {\r\n acc[`${currentPrefix}${key}`] = String(obj[key]);\r\n }\r\n\r\n return acc;\r\n },\r\n {} as Record<string, string>,\r\n );\r\n };\r\n\r\n const flatTranslations = flattenTranslations(translations);\r\n\r\n for (const key in flatTranslations) {\r\n clientTranslationsCache[`${lang}:${key}`] = flatTranslations[key];\r\n }\r\n}\r\n\r\nexport async function translateAsync(\r\n key: TranslationKey,\r\n options?: TranslationOptions,\r\n): Promise<string> {\r\n const lang = options?.lang || getCurrentLanguage();\r\n const { getTranslation } = await import(\"./translations\");\r\n let translation = await getTranslation(key, lang);\r\n\r\n if (options?.values) {\r\n translation = applyVariables(translation, options.values);\r\n }\r\n\r\n return translation;\r\n}\r\n\r\nexport function t(key: TranslationKey, options?: TranslationOptions): string {\r\n const lang = options?.lang || getCurrentLanguage();\r\n const cacheKey = `${lang}:${key}`;\r\n const config = getConfig();\r\n\r\n if (clientTranslationsCache[cacheKey] !== undefined) {\r\n const translation = clientTranslationsCache[cacheKey];\r\n return options?.values\r\n ? applyVariables(translation, options.values)\r\n : translation;\r\n }\r\n\r\n switch (config.missingKeyStrategy) {\r\n case \"empty\":\r\n return \"\";\r\n case \"error\":\r\n console.error(\r\n `Missing client translation for key: ${key} in language: ${lang}`,\r\n );\r\n return `[MISSING: ${key}]`;\r\n case \"key\":\r\n default: {\r\n const keyString = String(key);\r\n return options?.values\r\n ? applyVariables(keyString, options.values)\r\n : keyString;\r\n }\r\n }\r\n}\r\n\r\nfunction applyVariables(\r\n text: string,\r\n values: Record<string, string | number | boolean>,\r\n): string {\r\n return Object.entries(values).reduce((result, [key, value]) => {\r\n return result.replace(new RegExp(`{${key}}`, \"g\"), String(value));\r\n }, text);\r\n}\r\n\r\nexport function useTranslation() {\r\n const [language, setLanguage] = useState<Language>(getCurrentLanguage());\r\n\r\n useEffect(() => {\r\n const unsubscribe = setupLanguageObserver((newLang) => {\r\n setLanguage(newLang);\r\n });\r\n\r\n return () => {\r\n unsubscribe();\r\n };\r\n }, []);\r\n\r\n return {\r\n language,\r\n changeLanguage,\r\n t: (key: TranslationKey, options?: Omit<TranslationOptions, \"lang\">) =>\r\n t(key, { ...options, lang: language }),\r\n };\r\n}\r\n","/**\r\n * Funciones para gestionar el idioma en astro-plugin-i18n.\r\n */\r\n\r\nimport type { I18nPluginOptions, Language } from \"../types\";\r\nimport { getConfig } from \"./config\";\r\nimport { populateClientCache } from \"./translate\";\r\n\r\nexport function getCurrentLanguage(locals?: Record<string, any>): Language {\r\n const localsConfig = locals?.i18n?.config as\r\n | Partial<I18nPluginOptions>\r\n | undefined;\r\n\r\n if (localsConfig?.defaultLang) {\r\n return localsConfig.defaultLang;\r\n }\r\n\r\n const globalConfig = getConfig();\r\n\r\n if (typeof document !== \"undefined\") {\r\n const docLang = document.documentElement.getAttribute(\"lang\");\r\n if (docLang) {\r\n return docLang as Language;\r\n }\r\n\r\n if (typeof localStorage !== \"undefined\") {\r\n const storedLang =\r\n localStorage.getItem(\"language\") || localStorage.getItem(\"lang\");\r\n\r\n if (storedLang) {\r\n return storedLang as Language;\r\n }\r\n }\r\n\r\n if (globalConfig.autoDetect ?? localsConfig?.autoDetect) {\r\n const browserLang = navigator.language.split(\"-\")[0];\r\n if (browserLang) {\r\n return browserLang as Language;\r\n }\r\n }\r\n }\r\n\r\n const defaultLang =\r\n localsConfig?.defaultLang || globalConfig.defaultLang || \"es\";\r\n\r\n if (!globalConfig.defaultLang && !localsConfig?.defaultLang) {\r\n console.debug(\"i18n: Usando idioma por defecto:\", defaultLang);\r\n }\r\n\r\n return defaultLang;\r\n}\r\n\r\nexport function changeLanguage(lang: Language): void {\r\n if (typeof document === \"undefined\") {\r\n return;\r\n }\r\n\r\n document.documentElement.setAttribute(\"lang\", lang);\r\n\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(\"language\", lang);\r\n localStorage.setItem(\"lang\", lang);\r\n }\r\n\r\n document.dispatchEvent(\r\n new CustomEvent(\"languagechange\", { detail: { language: lang } }),\r\n );\r\n}\r\n\r\nexport function setupLanguage(): void {\r\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\r\n return;\r\n }\r\n\r\n const config = getConfig();\r\n let language = config.defaultLang as Language;\r\n\r\n if ((window as any).__INITIAL_I18N_STATE__) {\r\n const initialState = (window as any).__INITIAL_I18N_STATE__;\r\n\r\n if (\r\n initialState.lang &&\r\n config.supportedLangs?.includes(initialState.lang)\r\n ) {\r\n language = initialState.lang;\r\n\r\n if (initialState.translations) {\r\n populateClientCache(language, initialState.translations);\r\n }\r\n }\r\n }\r\n\r\n if (language === config.defaultLang && typeof localStorage !== \"undefined\") {\r\n const storedLang =\r\n localStorage.getItem(\"language\") || localStorage.getItem(\"lang\");\r\n\r\n if (storedLang && config.supportedLangs?.includes(storedLang)) {\r\n language = storedLang as Language;\r\n }\r\n }\r\n\r\n if (language === config.defaultLang && config.autoDetect) {\r\n const browserLang = navigator.language.split(\"-\")[0];\r\n\r\n if (config.supportedLangs?.includes(browserLang)) {\r\n language = browserLang as Language;\r\n }\r\n }\r\n\r\n changeLanguage(language);\r\n}\r\n\r\nexport function setupLanguageObserver(\r\n callback: (lang: Language) => void,\r\n): () => void {\r\n if (typeof document === \"undefined\") {\r\n return () => {};\r\n }\r\n\r\n const handleChange = (event: Event) => {\r\n const customEvent = event as CustomEvent;\r\n\r\n if (customEvent.detail && customEvent.detail.language) {\r\n callback(customEvent.detail.language);\r\n }\r\n };\r\n\r\n document.addEventListener(\"languagechange\", handleChange);\r\n\r\n return () => {\r\n document.removeEventListener(\"languagechange\", handleChange);\r\n };\r\n}\r\n","/**\r\n * Punto de entrada principal para @hkxdv/astro-plugin-i18n.\r\n */\r\n\r\nexport type {\r\n I18nPluginOptions,\r\n Language,\r\n SupportedLanguage,\r\n TranslationConfig,\r\n TranslationKey,\r\n TranslationOptions,\r\n TranslationValues,\r\n} from \"./types\";\r\n\r\nexport {\r\n populateClientCache,\r\n t,\r\n translateAsync,\r\n useTranslation,\r\n} from \"./core/translate\";\r\n\r\nexport {\r\n changeLanguage,\r\n getCurrentLanguage,\r\n setupLanguage,\r\n setupLanguageObserver,\r\n} from \"./core/language\";\r\n\r\nexport {\r\n getConfig,\r\n getDefaultLanguage,\r\n getSupportedLanguages,\r\n initConfig,\r\n resetConfig,\r\n updateConfig,\r\n} from \"./core/config\";\r\n\r\nexport {\r\n clearTranslationsCache,\r\n getTranslation,\r\n getTranslationsForLanguage,\r\n loadTranslations,\r\n} from \"./core/translations\";\r\n\r\nexport { LangToggle } from \"./components/LangToggle\";\r\nexport { TranslatedText } from \"./components/TranslatedText\";\r\nexport { default as createI18nIntegration } from \"./integration\";\r\nexport { generateTranslationTypes } from \"./utils/type-generator\";\r\nexport {\r\n getLanguageRedirect,\r\n isLanguageSupported,\r\n reloadTranslations,\r\n} from \"./core/setup\";\r\n\r\nexport default function createDefaultPlugin() {\r\n return {\r\n name: \"@hkxdv/astro-plugin-i18n\",\r\n version: \"0.3.6-rc.3\",\r\n };\r\n}\r\n","import * as React from \"react\";\r\nimport { setupLanguageObserver } from \"../core/language\";\r\nimport { useTranslation } from \"../core/translate\";\r\nimport type { Language } from \"../types\";\r\n\r\ninterface LangToggleProps {\r\n className?: string;\r\n languages: Array<{\r\n code: Language;\r\n label: string;\r\n }>;\r\n currentLang?: Language;\r\n}\r\n\r\nexport const LangToggle: React.FC<LangToggleProps> = ({\r\n className = \"\",\r\n languages,\r\n currentLang,\r\n}) => {\r\n const { language, changeLanguage } = useTranslation();\r\n const [selectedLang, setSelectedLang] = React.useState<Language>(\r\n currentLang || language,\r\n );\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n const dropdownRef = React.useRef<HTMLDivElement>(null);\r\n\r\n React.useEffect(() => {\r\n const unsubscribe = setupLanguageObserver((newLang) => {\r\n setSelectedLang(newLang);\r\n });\r\n\r\n setSelectedLang(currentLang || language);\r\n return unsubscribe;\r\n }, [currentLang, language]);\r\n\r\n React.useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (\r\n dropdownRef.current &&\r\n !dropdownRef.current.contains(event.target as Node)\r\n ) {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, []);\r\n\r\n const handleLanguageChange = (newLang: Language) => {\r\n setSelectedLang(newLang);\r\n changeLanguage(newLang);\r\n setIsOpen(false);\r\n };\r\n\r\n const toggleDropdown = (event: React.MouseEvent) => {\r\n event.stopPropagation();\r\n setIsOpen(!isOpen);\r\n };\r\n\r\n if (!languages || languages.length === 0) {\r\n console.error(\r\n \"LangToggle component requires a non-empty 'languages' prop.\",\r\n );\r\n return null;\r\n }\r\n\r\n return (\r\n <div\r\n className={`lang-dropdown ${className}`}\r\n ref={dropdownRef}\r\n style={{ position: \"relative\" }}\r\n >\r\n <button\r\n onClick={toggleDropdown}\r\n aria-haspopup=\"true\"\r\n aria-expanded={isOpen}\r\n className=\"dropdown-button\"\r\n style={{\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n padding: \"0.5rem\",\r\n backgroundColor: \"transparent\",\r\n border: \"1px solid rgb(226, 232, 240)\",\r\n borderRadius: \"0.375rem\",\r\n cursor: \"pointer\",\r\n transition: \"background-color 0.2s\",\r\n color: \"inherit\",\r\n width: \"2.5rem\",\r\n height: \"2.5rem\",\r\n }}\r\n >\r\n <LanguagesIcon />\r\n <span\r\n style={{\r\n position: \"absolute\",\r\n width: \"1px\",\r\n height: \"1px\",\r\n padding: \"0\",\r\n margin: \"-1px\",\r\n overflow: \"hidden\",\r\n clip: \"rect(0, 0, 0, 0)\",\r\n whiteSpace: \"nowrap\",\r\n borderWidth: \"0\",\r\n }}\r\n >\r\n Cambiar idioma\r\n </span>\r\n </button>\r\n\r\n {isOpen && (\r\n <div\r\n className=\"dropdown-menu\"\r\n style={{\r\n position: \"absolute\",\r\n right: \"0\",\r\n marginTop: \"0.25rem\",\r\n minWidth: \"8rem\",\r\n zIndex: 50,\r\n background: \"white\",\r\n borderRadius: \"0.375rem\",\r\n boxShadow:\r\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\r\n border: \"1px solid rgb(229, 231, 235)\",\r\n padding: \"0.5rem\",\r\n }}\r\n >\r\n {languages.map((lang) => (\r\n <button\r\n key={lang.code}\r\n onClick={() => handleLanguageChange(lang.code)}\r\n style={{\r\n display: \"block\",\r\n width: \"100%\",\r\n textAlign: \"left\",\r\n padding: \"0.5rem 0.75rem\",\r\n fontSize: \"0.875rem\",\r\n borderRadius: \"0.25rem\",\r\n backgroundColor:\r\n selectedLang === lang.code\r\n ? \"rgb(243, 244, 246)\"\r\n : \"transparent\",\r\n cursor: \"pointer\",\r\n transition: \"background-color 0.2s\",\r\n border: \"none\",\r\n color: \"inherit\",\r\n }}\r\n >\r\n {lang.label}\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nconst LanguagesIcon = () => (\r\n <svg\r\n width=\"1.2rem\"\r\n height=\"1.2rem\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\" />\r\n <path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\" />\r\n </svg>\r\n);\r\n\r\nexport default LangToggle;\r\n","import * as React from \"react\";\r\nimport { t as globalT, useTranslation } from \"../core/translate\";\r\nimport type { TranslationKey } from \"../types\";\r\n\r\ninterface TranslatedTextProps extends Omit<\r\n React.HTMLAttributes<HTMLElement>,\r\n \"children\"\r\n> {\r\n textKey: TranslationKey;\r\n values?: Record<string, string | number | boolean>;\r\n as?: React.ElementType;\r\n lang?: string;\r\n}\r\n\r\nexport const TranslatedText: React.FC<TranslatedTextProps> = ({\r\n textKey,\r\n values,\r\n as = \"span\",\r\n lang,\r\n ...rest\r\n}) => {\r\n const { t: hookT, language: globalLanguage } = useTranslation();\r\n const targetLanguage = lang || globalLanguage;\r\n const translationFunction =\r\n targetLanguage === globalLanguage ? hookT : globalT;\r\n const translatedText = translationFunction(textKey, {\r\n values,\r\n lang: targetLanguage,\r\n });\r\n\r\n return React.createElement(as, rest, translatedText);\r\n};\r\n\r\nexport default React.memo(TranslatedText, (prevProps, nextProps) => {\r\n if (prevProps.textKey !== nextProps.textKey) return false;\r\n if (prevProps.lang !== nextProps.lang) return false;\r\n\r\n if (prevProps.values || nextProps.values) {\r\n if (!prevProps.values || !nextProps.values) return false;\r\n\r\n const prevKeys = Object.keys(prevProps.values);\r\n const nextKeys = Object.keys(nextProps.values);\r\n\r\n if (prevKeys.length !== nextKeys.length) return false;\r\n\r\n for (const key of prevKeys) {\r\n if (!nextKeys.includes(key)) return false;\r\n if (prevProps.values[key] !== nextProps.values[key]) return false;\r\n }\r\n }\r\n\r\n return true;\r\n});\r\n","/**\r\n * Integracion de astro-plugin-i18n con Astro.\r\n */\r\n\r\nimport type { AstroIntegration, HookParameters } from \"astro\";\r\nimport { getConfig, initConfig } from \"./core/config\";\r\nimport type { I18nPluginOptions } from \"./types\";\r\nimport { generateTranslationTypes } from \"./utils/type-generator\";\r\nimport { setOptions } from \"./middleware-entrypoint\";\r\n\r\nconst packageName = \"@hkxdv/astro-plugin-i18n\";\r\n\r\nexport function createI18nIntegration(\r\n options: Partial<I18nPluginOptions> = {},\r\n): AstroIntegration {\r\n validateOptions(options);\r\n setOptions(options);\r\n\r\n return {\r\n name: packageName,\r\n hooks: {\r\n \"astro:config:setup\": async ({\r\n logger,\r\n command,\r\n addMiddleware,\r\n }: HookParameters<\"astro:config:setup\">) => {\r\n logger.info(\r\n `Initializing ${packageName} integration (config stage)...`,\r\n );\r\n\r\n initConfig(options);\r\n logAppliedConfig(logger);\r\n\r\n if (typeof global !== \"undefined\") {\r\n try {\r\n global.__ASTRO_I18N_OPTIONS__ = options;\r\n logger.debug(\r\n \"Config options stored in global object for middleware\",\r\n );\r\n } catch {\r\n logger.warn(\"Failed to store config in global object\");\r\n }\r\n }\r\n\r\n await maybeGenerateTypes(options, command, logger);\r\n\r\n addMiddleware({\r\n entrypoint: \"@hkxdv/astro-plugin-i18n/middleware-entrypoint\",\r\n order: \"pre\",\r\n });\r\n\r\n logger.info(`Added ${packageName} middleware`);\r\n },\r\n\r\n \"astro:server:setup\": ({\r\n logger,\r\n }: HookParameters<\"astro:server:setup\">) => {\r\n logger.info(`Setting up ${packageName} middleware for dev server...`);\r\n setOptions(options);\r\n },\r\n\r\n \"astro:build:start\": async ({\r\n logger,\r\n }: HookParameters<\"astro:build:start\">) => {\r\n logger.info(`Building with ${packageName}...`);\r\n },\r\n\r\n \"astro:build:done\": async ({\r\n logger,\r\n }: HookParameters<\"astro:build:done\">) => {\r\n logger.info(`${packageName} build process contribution completed.`);\r\n },\r\n },\r\n };\r\n}\r\n\r\nfunction validateOptions(\r\n options: Partial<I18nPluginOptions>,\r\n logger?: HookParameters<\"astro:config:setup\">[\"logger\"],\r\n): void {\r\n const logError = (message: string) => {\r\n if (logger) {\r\n logger.error(message);\r\n }\r\n\r\n throw new Error(message);\r\n };\r\n\r\n if (!options.defaultLang || typeof options.defaultLang !== \"string\") {\r\n logError(\r\n \"i18n config error: 'defaultLang' is required and must be a string in Astro integration options.\",\r\n );\r\n }\r\n\r\n if (\r\n !options.supportedLangs ||\r\n !Array.isArray(options.supportedLangs) ||\r\n options.supportedLangs.length === 0\r\n ) {\r\n logError(\r\n \"i18n config error: 'supportedLangs' is required and must be a non-empty array in Astro integration options.\",\r\n );\r\n }\r\n\r\n if (!options.supportedLangs?.includes(options.defaultLang as string)) {\r\n logError(\r\n `i18n config error: 'defaultLang' (\\\"${\r\n options.defaultLang\r\n }\\\") must be included in 'supportedLangs' [${options.supportedLangs?.join(\", \")}].`,\r\n );\r\n }\r\n}\r\n\r\nfunction logAppliedConfig(\r\n logger: HookParameters<\"astro:config:setup\">[\"logger\"],\r\n): void {\r\n const currentConfig = getConfig();\r\n\r\n logger.info(\r\n `i18n config applied: defaultLang=${currentConfig.defaultLang}, supportedLangs=[${currentConfig.supportedLangs?.join(\", \")}]`,\r\n );\r\n\r\n if (!currentConfig.defaultLang) {\r\n logger.warn(\"Warning: defaultLang is missing in applied config!\");\r\n }\r\n}\r\n\r\nasync function maybeGenerateTypes(\r\n options: Partial<I18nPluginOptions>,\r\n command: string,\r\n logger: HookParameters<\"astro:config:setup\">[\"logger\"],\r\n): Promise<void> {\r\n if (options.generateTypes && (command === \"build\" || command === \"dev\")) {\r\n try {\r\n logger.info(\"Attempting to generate i18n types...\");\r\n const typesPath = await generateTranslationTypes();\r\n\r\n if (typesPath) {\r\n logger.info(`Generated i18n translation types at: ${typesPath}`);\r\n } else {\r\n logger.info(\r\n \"i18n type generation skipped (no translations found for default language).\",\r\n );\r\n }\r\n } catch (error) {\r\n logger.error(`Failed to generate i18n translation types: ${error}`);\r\n }\r\n } else if (options.generateTypes) {\r\n logger.info(\r\n \"Skipping i18n type generation (enabled but command is not 'build' or 'dev').\",\r\n );\r\n }\r\n}\r\n\r\nexport default createI18nIntegration;\r\n","/**\r\n * Generador de tipos TypeScript para las claves de traduccion.\r\n */\r\n\r\nimport fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport { getConfig, getDefaultLanguage } from \"../core/config\";\r\nimport { loadTranslations } from \"../core/translations\";\r\n\r\nexport async function generateTranslationTypes(): Promise<string> {\r\n const config = getConfig();\r\n const defaultLang = getDefaultLanguage();\r\n const translations = await loadTranslations(defaultLang);\r\n\r\n if (!translations || Object.keys(translations).length === 0) {\r\n console.warn(\r\n `[i18n-types] No translations found for default language '${defaultLang}' at '${config.translationsDir}'. Types will not be generated.`,\r\n );\r\n return \"\";\r\n }\r\n\r\n const typeDefinitionCode = generateTypeDefinitionCode(\r\n translations,\r\n config.supportedLangs || [],\r\n );\r\n\r\n const outputPath = path.resolve(\r\n process.cwd(),\r\n config.typesOutputPath || \"./src/types/i18n-types.d.ts\",\r\n );\r\n const dirPath = path.dirname(outputPath);\r\n\r\n try {\r\n if (!fs.existsSync(dirPath)) {\r\n fs.mkdirSync(dirPath, { recursive: true });\r\n }\r\n\r\n fs.writeFileSync(outputPath, typeDefinitionCode, \"utf-8\");\r\n console.info(\r\n `[i18n-types] Successfully generated translation types at: ${outputPath}`,\r\n );\r\n return outputPath;\r\n } catch (error) {\r\n console.error(\r\n `[i18n-types] Failed to write types file to ${outputPath}:`,\r\n error,\r\n );\r\n\r\n throw new Error(\r\n `Failed to write i18n types file: ${\r\n error instanceof Error ? error.message : String(error)\r\n }`,\r\n );\r\n }\r\n}\r\n\r\nfunction generateTypeDefinitionCode(\r\n translations: Record<string, any>,\r\n supportedLangs: string[],\r\n): string {\r\n let code = `// This file is automatically generated by @hkxdv/astro-plugin-i18n\r\n// Do not modify it manually, as it will be overwritten.\r\n\r\n/**\r\n * Types for the i18n system generated from the default language translations.\r\n */\r\n\r\n`;\r\n\r\n code += `/**\r\n * Type representing the supported language codes.\r\n */\r\n`;\r\n\r\n const langType =\r\n supportedLangs.length > 0\r\n ? supportedLangs.map((lang) => `'${lang}'`).join(\" | \")\r\n : \"string\";\r\n\r\n code += `export type Lang = ${langType};\r\n\r\n`;\r\n\r\n code += `/**\r\n * Type representing all available translation keys.\r\n */\r\n`;\r\n\r\n const keys: string[] = [];\r\n extractKeysRecursive(translations, \"\", keys);\r\n keys.sort();\r\n\r\n if (keys.length === 0) {\r\n code += `export type I18nKey = string; // No keys found in default language file\r\n`;\r\n } else {\r\n code += `export type I18nKey =\r\n`;\r\n code += keys.map((key) => ` | '${key.replace(/'/g, \"\\\\'\")}'`).join(\"\\n\");\r\n code += `;\r\n`;\r\n }\r\n\r\n code += `\r\n/**\r\n * Options for translation functions like \\`t\\`.\r\n */\r\nexport interface I18nOptions {\r\n values?: Record<string, string | number | boolean>;\r\n lang?: Lang;\r\n}\r\n\r\n/**\r\n * Helper type for the t function signature.\r\n */\r\nexport type TFunction = (key: I18nKey, options?: I18nOptions) => string;\r\n\r\n/**\r\n * Object containing all available translation keys.\r\n */\r\nexport const I18N_KEYS = {\r\n`;\r\n\r\n code += keys\r\n .map(\r\n (key) =>\r\n ` '${key.replace(/'/g, \"\\\\'\")}': '${key.replace(/'/g, \"\\\\'\")}',`,\r\n )\r\n .join(\"\\n\");\r\n\r\n if (code.endsWith(\",\")) {\r\n code = code.slice(0, -1);\r\n }\r\n\r\n code += `\r\n} as const;\r\n`;\r\n\r\n return code;\r\n}\r\n\r\nfunction extractKeysRecursive(\r\n obj: Record<string, any>,\r\n prefix: string,\r\n keys: string[],\r\n): void {\r\n for (const key in obj) {\r\n const fullKey = prefix ? `${prefix}.${key}` : key;\r\n\r\n if (typeof obj[key] === \"object\" && obj[key] !== null) {\r\n extractKeysRecursive(obj[key], fullKey, keys);\r\n } else {\r\n keys.push(fullKey);\r\n }\r\n }\r\n}\r\n","import { defineMiddleware } from \"astro/middleware\";\r\nimport type { APIContext, MiddlewareNext } from \"astro\";\r\nimport type { I18nPluginOptions } from \"./types\";\r\n\r\nlet validatedOptions: Partial<I18nPluginOptions> | null = null;\r\n\r\nexport function setOptions(options: Partial<I18nPluginOptions> | null): void {\r\n validatedOptions = options;\r\n\r\n if (typeof global !== \"undefined\") {\r\n try {\r\n global.__ASTRO_I18N_OPTIONS__ = options || undefined;\r\n } catch {\r\n // No-op.\r\n }\r\n }\r\n}\r\n\r\nfunction getOptions(): Partial<I18nPluginOptions> | null {\r\n if (validatedOptions) {\r\n return validatedOptions;\r\n }\r\n\r\n if (typeof global !== \"undefined\") {\r\n try {\r\n const globalOptions = global.__ASTRO_I18N_OPTIONS__;\r\n if (globalOptions) {\r\n return globalOptions;\r\n }\r\n } catch {\r\n // No-op.\r\n }\r\n }\r\n\r\n console.warn(\r\n \"i18n plugin warning: No options found in middleware. This might cause issues.\",\r\n );\r\n return null;\r\n}\r\n\r\ndeclare global {\r\n interface Locals {\r\n i18n?: {\r\n config?: Partial<I18nPluginOptions>;\r\n };\r\n }\r\n}\r\n\r\nexport const onRequest = defineMiddleware(\r\n (context: APIContext, next: MiddlewareNext) => {\r\n const options = getOptions();\r\n\r\n if (!options) {\r\n console.warn(\"i18n plugin warning: No options available in middleware.\");\r\n }\r\n\r\n if (typeof context.locals === \"object\" && context.locals !== null) {\r\n const locals = context.locals as any;\r\n\r\n if (!locals.i18n) {\r\n locals.i18n = {};\r\n }\r\n\r\n locals.i18n.config = options || {};\r\n\r\n if (!options?.defaultLang) {\r\n console.warn(\r\n \"i18n plugin warning: defaultLang not set in middleware config.\",\r\n );\r\n }\r\n } else {\r\n console.warn(\r\n \"i18n plugin warning: context.locals is not an object in middleware.\",\r\n );\r\n }\r\n\r\n return next();\r\n },\r\n);\r\n\r\nexport default onRequest;\r\n","/**\r\n * Funciones auxiliares relacionadas con la configuracion y gestion de i18n.\r\n */\r\n\r\nimport type { Language } from \"../types\";\r\nimport { getDefaultLanguage, getSupportedLanguages } from \"./config\";\r\nimport { clearTranslationsCache } from \"./translations\";\r\n\r\nexport function reloadTranslations(): void {\r\n clearTranslationsCache();\r\n}\r\n\r\nexport function isLanguageSupported(lang: Language): boolean {\r\n return getSupportedLanguages().includes(lang);\r\n}\r\n\r\nexport function getLanguageRedirect(url: URL): URL | null {\r\n const supportedLangs = getSupportedLanguages();\r\n const defaultLang = getDefaultLanguage();\r\n const segments = url.pathname.split(\"/\").filter(Boolean);\r\n const langSegment = segments[0];\r\n\r\n if (!langSegment || !supportedLangs.includes(langSegment)) {\r\n const newUrl = new URL(url.toString());\r\n newUrl.pathname = `/${defaultLang}${url.pathname}`;\r\n return newUrl;\r\n }\r\n\r\n return null;\r\n}\r\n"]}
@@ -0,0 +1,10 @@
1
+ import { AstroIntegration } from 'astro';
2
+ import { I as I18nPluginOptions } from './index-Dyxmdid5.js';
3
+
4
+ /**
5
+ * Integracion de astro-plugin-i18n con Astro.
6
+ */
7
+
8
+ declare function createI18nIntegration(options?: Partial<I18nPluginOptions>): AstroIntegration;
9
+
10
+ export { createI18nIntegration, createI18nIntegration as default };
@@ -0,0 +1,347 @@
1
+ import fs2 from 'fs';
2
+ import path from 'path';
3
+ import { defineMiddleware } from 'astro/middleware';
4
+
5
+ // src/core/config.ts
6
+ var defaultConfig = {
7
+ defaultLang: void 0,
8
+ supportedLangs: [],
9
+ translationsDir: "./src/i18n",
10
+ autoDetect: true,
11
+ generateTypes: false,
12
+ typesOutputPath: "./src/types/i18n-types.d.ts",
13
+ missingKeyStrategy: "key",
14
+ registerAstroIntegration: true
15
+ };
16
+ var config = { ...defaultConfig };
17
+ function getConfig() {
18
+ const currentConfig = config;
19
+ return {
20
+ defaultLang: currentConfig.defaultLang || "en",
21
+ supportedLangs: currentConfig.supportedLangs || ["en"],
22
+ translationsDir: currentConfig.translationsDir || "./src/i18n",
23
+ autoDetect: currentConfig.autoDetect !== false,
24
+ generateTypes: currentConfig.generateTypes || false,
25
+ typesOutputPath: currentConfig.typesOutputPath || "./src/types/i18n-types.d.ts",
26
+ missingKeyStrategy: currentConfig.missingKeyStrategy || "key",
27
+ registerAstroIntegration: currentConfig.registerAstroIntegration ?? true,
28
+ ...currentConfig
29
+ };
30
+ }
31
+ function initConfig(options = {}) {
32
+ config = { ...defaultConfig, ...options };
33
+ return { ...config };
34
+ }
35
+ function getDefaultLanguage() {
36
+ const currentConfig = getConfig();
37
+ if (!currentConfig.defaultLang) {
38
+ throw new Error(
39
+ "i18n plugin error: Default language is not defined. Please configure 'defaultLang' in your Astro integration options or i18n.config.js."
40
+ );
41
+ }
42
+ return currentConfig.defaultLang;
43
+ }
44
+ var translationsCache = {};
45
+ async function loadTranslations(lang) {
46
+ if (translationsCache[lang]) {
47
+ return translationsCache[lang];
48
+ }
49
+ try {
50
+ const config2 = getConfig();
51
+ const translationsDir = path.resolve(
52
+ process.cwd(),
53
+ config2.translationsDir
54
+ );
55
+ const filePath = path.join(translationsDir, `${lang}.json`);
56
+ if (!fs2.existsSync(filePath)) {
57
+ console.warn(
58
+ `No translations file found for language: ${lang} at ${filePath}`
59
+ );
60
+ return {};
61
+ }
62
+ const fileContent = fs2.readFileSync(filePath, "utf-8");
63
+ const translations = JSON.parse(fileContent);
64
+ translationsCache[lang] = translations;
65
+ return translations;
66
+ } catch (error) {
67
+ console.error(`Error loading translations for ${lang}:`, error);
68
+ return {};
69
+ }
70
+ }
71
+
72
+ // src/utils/type-generator.ts
73
+ async function generateTranslationTypes() {
74
+ const config2 = getConfig();
75
+ const defaultLang = getDefaultLanguage();
76
+ const translations = await loadTranslations(defaultLang);
77
+ if (!translations || Object.keys(translations).length === 0) {
78
+ console.warn(
79
+ `[i18n-types] No translations found for default language '${defaultLang}' at '${config2.translationsDir}'. Types will not be generated.`
80
+ );
81
+ return "";
82
+ }
83
+ const typeDefinitionCode = generateTypeDefinitionCode(
84
+ translations,
85
+ config2.supportedLangs || []
86
+ );
87
+ const outputPath = path.resolve(
88
+ process.cwd(),
89
+ config2.typesOutputPath || "./src/types/i18n-types.d.ts"
90
+ );
91
+ const dirPath = path.dirname(outputPath);
92
+ try {
93
+ if (!fs2.existsSync(dirPath)) {
94
+ fs2.mkdirSync(dirPath, { recursive: true });
95
+ }
96
+ fs2.writeFileSync(outputPath, typeDefinitionCode, "utf-8");
97
+ console.info(
98
+ `[i18n-types] Successfully generated translation types at: ${outputPath}`
99
+ );
100
+ return outputPath;
101
+ } catch (error) {
102
+ console.error(
103
+ `[i18n-types] Failed to write types file to ${outputPath}:`,
104
+ error
105
+ );
106
+ throw new Error(
107
+ `Failed to write i18n types file: ${error instanceof Error ? error.message : String(error)}`
108
+ );
109
+ }
110
+ }
111
+ function generateTypeDefinitionCode(translations, supportedLangs) {
112
+ let code = `// This file is automatically generated by @hkxdv/astro-plugin-i18n
113
+ // Do not modify it manually, as it will be overwritten.
114
+
115
+ /**
116
+ * Types for the i18n system generated from the default language translations.
117
+ */
118
+
119
+ `;
120
+ code += `/**
121
+ * Type representing the supported language codes.
122
+ */
123
+ `;
124
+ const langType = supportedLangs.length > 0 ? supportedLangs.map((lang) => `'${lang}'`).join(" | ") : "string";
125
+ code += `export type Lang = ${langType};
126
+
127
+ `;
128
+ code += `/**
129
+ * Type representing all available translation keys.
130
+ */
131
+ `;
132
+ const keys = [];
133
+ extractKeysRecursive(translations, "", keys);
134
+ keys.sort();
135
+ if (keys.length === 0) {
136
+ code += `export type I18nKey = string; // No keys found in default language file
137
+ `;
138
+ } else {
139
+ code += `export type I18nKey =
140
+ `;
141
+ code += keys.map((key) => ` | '${key.replace(/'/g, "\\'")}'`).join("\n");
142
+ code += `;
143
+ `;
144
+ }
145
+ code += `
146
+ /**
147
+ * Options for translation functions like \`t\`.
148
+ */
149
+ export interface I18nOptions {
150
+ values?: Record<string, string | number | boolean>;
151
+ lang?: Lang;
152
+ }
153
+
154
+ /**
155
+ * Helper type for the t function signature.
156
+ */
157
+ export type TFunction = (key: I18nKey, options?: I18nOptions) => string;
158
+
159
+ /**
160
+ * Object containing all available translation keys.
161
+ */
162
+ export const I18N_KEYS = {
163
+ `;
164
+ code += keys.map(
165
+ (key) => ` '${key.replace(/'/g, "\\'")}': '${key.replace(/'/g, "\\'")}',`
166
+ ).join("\n");
167
+ if (code.endsWith(",")) {
168
+ code = code.slice(0, -1);
169
+ }
170
+ code += `
171
+ } as const;
172
+ `;
173
+ return code;
174
+ }
175
+ function extractKeysRecursive(obj, prefix, keys) {
176
+ for (const key in obj) {
177
+ const fullKey = prefix ? `${prefix}.${key}` : key;
178
+ if (typeof obj[key] === "object" && obj[key] !== null) {
179
+ extractKeysRecursive(obj[key], fullKey, keys);
180
+ } else {
181
+ keys.push(fullKey);
182
+ }
183
+ }
184
+ }
185
+ var validatedOptions = null;
186
+ function setOptions(options) {
187
+ validatedOptions = options;
188
+ if (typeof global !== "undefined") {
189
+ try {
190
+ global.__ASTRO_I18N_OPTIONS__ = options || void 0;
191
+ } catch {
192
+ }
193
+ }
194
+ }
195
+ function getOptions() {
196
+ if (validatedOptions) {
197
+ return validatedOptions;
198
+ }
199
+ if (typeof global !== "undefined") {
200
+ try {
201
+ const globalOptions = global.__ASTRO_I18N_OPTIONS__;
202
+ if (globalOptions) {
203
+ return globalOptions;
204
+ }
205
+ } catch {
206
+ }
207
+ }
208
+ console.warn(
209
+ "i18n plugin warning: No options found in middleware. This might cause issues."
210
+ );
211
+ return null;
212
+ }
213
+ defineMiddleware(
214
+ (context, next) => {
215
+ const options = getOptions();
216
+ if (!options) {
217
+ console.warn("i18n plugin warning: No options available in middleware.");
218
+ }
219
+ if (typeof context.locals === "object" && context.locals !== null) {
220
+ const locals = context.locals;
221
+ if (!locals.i18n) {
222
+ locals.i18n = {};
223
+ }
224
+ locals.i18n.config = options || {};
225
+ if (!options?.defaultLang) {
226
+ console.warn(
227
+ "i18n plugin warning: defaultLang not set in middleware config."
228
+ );
229
+ }
230
+ } else {
231
+ console.warn(
232
+ "i18n plugin warning: context.locals is not an object in middleware."
233
+ );
234
+ }
235
+ return next();
236
+ }
237
+ );
238
+
239
+ // src/integration.ts
240
+ var packageName = "@hkxdv/astro-plugin-i18n";
241
+ function createI18nIntegration(options = {}) {
242
+ validateOptions(options);
243
+ setOptions(options);
244
+ return {
245
+ name: packageName,
246
+ hooks: {
247
+ "astro:config:setup": async ({
248
+ logger,
249
+ command,
250
+ addMiddleware
251
+ }) => {
252
+ logger.info(
253
+ `Initializing ${packageName} integration (config stage)...`
254
+ );
255
+ initConfig(options);
256
+ logAppliedConfig(logger);
257
+ if (typeof global !== "undefined") {
258
+ try {
259
+ global.__ASTRO_I18N_OPTIONS__ = options;
260
+ logger.debug(
261
+ "Config options stored in global object for middleware"
262
+ );
263
+ } catch {
264
+ logger.warn("Failed to store config in global object");
265
+ }
266
+ }
267
+ await maybeGenerateTypes(options, command, logger);
268
+ addMiddleware({
269
+ entrypoint: "@hkxdv/astro-plugin-i18n/middleware-entrypoint",
270
+ order: "pre"
271
+ });
272
+ logger.info(`Added ${packageName} middleware`);
273
+ },
274
+ "astro:server:setup": ({
275
+ logger
276
+ }) => {
277
+ logger.info(`Setting up ${packageName} middleware for dev server...`);
278
+ setOptions(options);
279
+ },
280
+ "astro:build:start": async ({
281
+ logger
282
+ }) => {
283
+ logger.info(`Building with ${packageName}...`);
284
+ },
285
+ "astro:build:done": async ({
286
+ logger
287
+ }) => {
288
+ logger.info(`${packageName} build process contribution completed.`);
289
+ }
290
+ }
291
+ };
292
+ }
293
+ function validateOptions(options, logger) {
294
+ const logError = (message) => {
295
+ throw new Error(message);
296
+ };
297
+ if (!options.defaultLang || typeof options.defaultLang !== "string") {
298
+ logError(
299
+ "i18n config error: 'defaultLang' is required and must be a string in Astro integration options."
300
+ );
301
+ }
302
+ if (!options.supportedLangs || !Array.isArray(options.supportedLangs) || options.supportedLangs.length === 0) {
303
+ logError(
304
+ "i18n config error: 'supportedLangs' is required and must be a non-empty array in Astro integration options."
305
+ );
306
+ }
307
+ if (!options.supportedLangs?.includes(options.defaultLang)) {
308
+ logError(
309
+ `i18n config error: 'defaultLang' ("${options.defaultLang}") must be included in 'supportedLangs' [${options.supportedLangs?.join(", ")}].`
310
+ );
311
+ }
312
+ }
313
+ function logAppliedConfig(logger) {
314
+ const currentConfig = getConfig();
315
+ logger.info(
316
+ `i18n config applied: defaultLang=${currentConfig.defaultLang}, supportedLangs=[${currentConfig.supportedLangs?.join(", ")}]`
317
+ );
318
+ if (!currentConfig.defaultLang) {
319
+ logger.warn("Warning: defaultLang is missing in applied config!");
320
+ }
321
+ }
322
+ async function maybeGenerateTypes(options, command, logger) {
323
+ if (options.generateTypes && (command === "build" || command === "dev")) {
324
+ try {
325
+ logger.info("Attempting to generate i18n types...");
326
+ const typesPath = await generateTranslationTypes();
327
+ if (typesPath) {
328
+ logger.info(`Generated i18n translation types at: ${typesPath}`);
329
+ } else {
330
+ logger.info(
331
+ "i18n type generation skipped (no translations found for default language)."
332
+ );
333
+ }
334
+ } catch (error) {
335
+ logger.error(`Failed to generate i18n translation types: ${error}`);
336
+ }
337
+ } else if (options.generateTypes) {
338
+ logger.info(
339
+ "Skipping i18n type generation (enabled but command is not 'build' or 'dev')."
340
+ );
341
+ }
342
+ }
343
+ var integration_default = createI18nIntegration;
344
+
345
+ export { createI18nIntegration, integration_default as default };
346
+ //# sourceMappingURL=integration.js.map
347
+ //# sourceMappingURL=integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/config.ts","../src/core/translations.ts","../src/utils/type-generator.ts","../src/middleware-entrypoint.ts","../src/integration.ts"],"names":["config","fs","path"],"mappings":"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","file":"integration.js","sourcesContent":["/**\r\n * Gestion de configuracion para astro-plugin-i18n.\r\n */\r\n\r\nimport type { I18nPluginOptions, Language, TranslationConfig } from \"../types\";\r\n\r\nconst defaultConfig: TranslationConfig = {\r\n defaultLang: undefined,\r\n supportedLangs: [],\r\n translationsDir: \"./src/i18n\",\r\n autoDetect: true,\r\n generateTypes: false,\r\n typesOutputPath: \"./src/types/i18n-types.d.ts\",\r\n missingKeyStrategy: \"key\",\r\n registerAstroIntegration: true,\r\n};\r\n\r\nlet config: TranslationConfig = { ...defaultConfig };\r\n\r\nexport function getConfig(): TranslationConfig {\r\n const currentConfig = config;\r\n\r\n return {\r\n defaultLang: currentConfig.defaultLang || \"en\",\r\n supportedLangs: currentConfig.supportedLangs || [\"en\"],\r\n translationsDir: currentConfig.translationsDir || \"./src/i18n\",\r\n autoDetect: currentConfig.autoDetect !== false,\r\n generateTypes: currentConfig.generateTypes || false,\r\n typesOutputPath:\r\n currentConfig.typesOutputPath || \"./src/types/i18n-types.d.ts\",\r\n missingKeyStrategy: currentConfig.missingKeyStrategy || \"key\",\r\n registerAstroIntegration: currentConfig.registerAstroIntegration ?? true,\r\n ...currentConfig,\r\n };\r\n}\r\n\r\nexport function updateConfig(\r\n options: Partial<I18nPluginOptions> = {},\r\n): TranslationConfig {\r\n config = {\r\n ...config,\r\n ...options,\r\n };\r\n\r\n return { ...config };\r\n}\r\n\r\nexport function resetConfig(): TranslationConfig {\r\n config = { ...defaultConfig };\r\n return { ...config };\r\n}\r\n\r\nexport function initConfig(\r\n options: Partial<I18nPluginOptions> = {},\r\n): TranslationConfig {\r\n config = { ...defaultConfig, ...options };\r\n return { ...config };\r\n}\r\n\r\nexport function getSupportedLanguages(): Language[] {\r\n return getConfig().supportedLangs || [];\r\n}\r\n\r\nexport function getDefaultLanguage(): Language {\r\n const currentConfig = getConfig();\r\n\r\n if (!currentConfig.defaultLang) {\r\n throw new Error(\r\n \"i18n plugin error: Default language is not defined. Please configure 'defaultLang' in your Astro integration options or i18n.config.js.\",\r\n );\r\n }\r\n\r\n return currentConfig.defaultLang;\r\n}\r\n\r\nexport { defaultConfig };\r\n","/**\r\n * Funciones para cargar y gestionar traducciones desde el sistema de archivos.\r\n */\r\n\r\nimport fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport type { Language } from \"../types\";\r\nimport { getConfig } from \"./config\";\r\n\r\nconst translationsCache: Record<Language, Record<string, any>> = {};\r\n\r\nexport async function getTranslationsForLanguage(\r\n lang: Language,\r\n): Promise<Record<string, any>> {\r\n return loadTranslations(lang);\r\n}\r\n\r\nexport async function loadTranslations(\r\n lang: Language,\r\n): Promise<Record<string, any>> {\r\n if (translationsCache[lang]) {\r\n return translationsCache[lang];\r\n }\r\n\r\n try {\r\n const config = getConfig();\r\n const translationsDir = path.resolve(\r\n process.cwd(),\r\n config.translationsDir as string,\r\n );\r\n const filePath = path.join(translationsDir, `${lang}.json`);\r\n\r\n if (!fs.existsSync(filePath)) {\r\n console.warn(\r\n `No translations file found for language: ${lang} at ${filePath}`,\r\n );\r\n return {};\r\n }\r\n\r\n const fileContent = fs.readFileSync(filePath, \"utf-8\");\r\n const translations = JSON.parse(fileContent) as Record<string, any>;\r\n translationsCache[lang] = translations;\r\n\r\n return translations;\r\n } catch (error) {\r\n console.error(`Error loading translations for ${lang}:`, error);\r\n return {};\r\n }\r\n}\r\n\r\nexport async function getTranslation(\r\n key: string,\r\n lang: Language,\r\n): Promise<string> {\r\n const translations = await loadTranslations(lang);\r\n const keys = key.split(\".\");\r\n let result: any = translations;\r\n\r\n for (const part of keys) {\r\n if (!result || typeof result !== \"object\") {\r\n return handleMissingTranslation(key, lang);\r\n }\r\n\r\n result = result[part];\r\n }\r\n\r\n if (typeof result === \"string\") {\r\n return result;\r\n }\r\n\r\n return handleMissingTranslation(key, lang);\r\n}\r\n\r\nasync function handleMissingTranslation(\r\n key: string,\r\n lang: Language,\r\n): Promise<string> {\r\n const config = getConfig();\r\n\r\n switch (config.missingKeyStrategy) {\r\n case \"empty\":\r\n return \"\";\r\n case \"error\":\r\n console.error(`Missing translation for key: ${key} in language: ${lang}`);\r\n return `[MISSING: ${key}]`;\r\n case \"key\":\r\n default:\r\n return key;\r\n }\r\n}\r\n\r\nexport function clearTranslationsCache(): void {\r\n Object.keys(translationsCache).forEach((key) => {\r\n delete translationsCache[key];\r\n });\r\n}\r\n","/**\r\n * Generador de tipos TypeScript para las claves de traduccion.\r\n */\r\n\r\nimport fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport { getConfig, getDefaultLanguage } from \"../core/config\";\r\nimport { loadTranslations } from \"../core/translations\";\r\n\r\nexport async function generateTranslationTypes(): Promise<string> {\r\n const config = getConfig();\r\n const defaultLang = getDefaultLanguage();\r\n const translations = await loadTranslations(defaultLang);\r\n\r\n if (!translations || Object.keys(translations).length === 0) {\r\n console.warn(\r\n `[i18n-types] No translations found for default language '${defaultLang}' at '${config.translationsDir}'. Types will not be generated.`,\r\n );\r\n return \"\";\r\n }\r\n\r\n const typeDefinitionCode = generateTypeDefinitionCode(\r\n translations,\r\n config.supportedLangs || [],\r\n );\r\n\r\n const outputPath = path.resolve(\r\n process.cwd(),\r\n config.typesOutputPath || \"./src/types/i18n-types.d.ts\",\r\n );\r\n const dirPath = path.dirname(outputPath);\r\n\r\n try {\r\n if (!fs.existsSync(dirPath)) {\r\n fs.mkdirSync(dirPath, { recursive: true });\r\n }\r\n\r\n fs.writeFileSync(outputPath, typeDefinitionCode, \"utf-8\");\r\n console.info(\r\n `[i18n-types] Successfully generated translation types at: ${outputPath}`,\r\n );\r\n return outputPath;\r\n } catch (error) {\r\n console.error(\r\n `[i18n-types] Failed to write types file to ${outputPath}:`,\r\n error,\r\n );\r\n\r\n throw new Error(\r\n `Failed to write i18n types file: ${\r\n error instanceof Error ? error.message : String(error)\r\n }`,\r\n );\r\n }\r\n}\r\n\r\nfunction generateTypeDefinitionCode(\r\n translations: Record<string, any>,\r\n supportedLangs: string[],\r\n): string {\r\n let code = `// This file is automatically generated by @hkxdv/astro-plugin-i18n\r\n// Do not modify it manually, as it will be overwritten.\r\n\r\n/**\r\n * Types for the i18n system generated from the default language translations.\r\n */\r\n\r\n`;\r\n\r\n code += `/**\r\n * Type representing the supported language codes.\r\n */\r\n`;\r\n\r\n const langType =\r\n supportedLangs.length > 0\r\n ? supportedLangs.map((lang) => `'${lang}'`).join(\" | \")\r\n : \"string\";\r\n\r\n code += `export type Lang = ${langType};\r\n\r\n`;\r\n\r\n code += `/**\r\n * Type representing all available translation keys.\r\n */\r\n`;\r\n\r\n const keys: string[] = [];\r\n extractKeysRecursive(translations, \"\", keys);\r\n keys.sort();\r\n\r\n if (keys.length === 0) {\r\n code += `export type I18nKey = string; // No keys found in default language file\r\n`;\r\n } else {\r\n code += `export type I18nKey =\r\n`;\r\n code += keys.map((key) => ` | '${key.replace(/'/g, \"\\\\'\")}'`).join(\"\\n\");\r\n code += `;\r\n`;\r\n }\r\n\r\n code += `\r\n/**\r\n * Options for translation functions like \\`t\\`.\r\n */\r\nexport interface I18nOptions {\r\n values?: Record<string, string | number | boolean>;\r\n lang?: Lang;\r\n}\r\n\r\n/**\r\n * Helper type for the t function signature.\r\n */\r\nexport type TFunction = (key: I18nKey, options?: I18nOptions) => string;\r\n\r\n/**\r\n * Object containing all available translation keys.\r\n */\r\nexport const I18N_KEYS = {\r\n`;\r\n\r\n code += keys\r\n .map(\r\n (key) =>\r\n ` '${key.replace(/'/g, \"\\\\'\")}': '${key.replace(/'/g, \"\\\\'\")}',`,\r\n )\r\n .join(\"\\n\");\r\n\r\n if (code.endsWith(\",\")) {\r\n code = code.slice(0, -1);\r\n }\r\n\r\n code += `\r\n} as const;\r\n`;\r\n\r\n return code;\r\n}\r\n\r\nfunction extractKeysRecursive(\r\n obj: Record<string, any>,\r\n prefix: string,\r\n keys: string[],\r\n): void {\r\n for (const key in obj) {\r\n const fullKey = prefix ? `${prefix}.${key}` : key;\r\n\r\n if (typeof obj[key] === \"object\" && obj[key] !== null) {\r\n extractKeysRecursive(obj[key], fullKey, keys);\r\n } else {\r\n keys.push(fullKey);\r\n }\r\n }\r\n}\r\n","import { defineMiddleware } from \"astro/middleware\";\r\nimport type { APIContext, MiddlewareNext } from \"astro\";\r\nimport type { I18nPluginOptions } from \"./types\";\r\n\r\nlet validatedOptions: Partial<I18nPluginOptions> | null = null;\r\n\r\nexport function setOptions(options: Partial<I18nPluginOptions> | null): void {\r\n validatedOptions = options;\r\n\r\n if (typeof global !== \"undefined\") {\r\n try {\r\n global.__ASTRO_I18N_OPTIONS__ = options || undefined;\r\n } catch {\r\n // No-op.\r\n }\r\n }\r\n}\r\n\r\nfunction getOptions(): Partial<I18nPluginOptions> | null {\r\n if (validatedOptions) {\r\n return validatedOptions;\r\n }\r\n\r\n if (typeof global !== \"undefined\") {\r\n try {\r\n const globalOptions = global.__ASTRO_I18N_OPTIONS__;\r\n if (globalOptions) {\r\n return globalOptions;\r\n }\r\n } catch {\r\n // No-op.\r\n }\r\n }\r\n\r\n console.warn(\r\n \"i18n plugin warning: No options found in middleware. This might cause issues.\",\r\n );\r\n return null;\r\n}\r\n\r\ndeclare global {\r\n interface Locals {\r\n i18n?: {\r\n config?: Partial<I18nPluginOptions>;\r\n };\r\n }\r\n}\r\n\r\nexport const onRequest = defineMiddleware(\r\n (context: APIContext, next: MiddlewareNext) => {\r\n const options = getOptions();\r\n\r\n if (!options) {\r\n console.warn(\"i18n plugin warning: No options available in middleware.\");\r\n }\r\n\r\n if (typeof context.locals === \"object\" && context.locals !== null) {\r\n const locals = context.locals as any;\r\n\r\n if (!locals.i18n) {\r\n locals.i18n = {};\r\n }\r\n\r\n locals.i18n.config = options || {};\r\n\r\n if (!options?.defaultLang) {\r\n console.warn(\r\n \"i18n plugin warning: defaultLang not set in middleware config.\",\r\n );\r\n }\r\n } else {\r\n console.warn(\r\n \"i18n plugin warning: context.locals is not an object in middleware.\",\r\n );\r\n }\r\n\r\n return next();\r\n },\r\n);\r\n\r\nexport default onRequest;\r\n","/**\r\n * Integracion de astro-plugin-i18n con Astro.\r\n */\r\n\r\nimport type { AstroIntegration, HookParameters } from \"astro\";\r\nimport { getConfig, initConfig } from \"./core/config\";\r\nimport type { I18nPluginOptions } from \"./types\";\r\nimport { generateTranslationTypes } from \"./utils/type-generator\";\r\nimport { setOptions } from \"./middleware-entrypoint\";\r\n\r\nconst packageName = \"@hkxdv/astro-plugin-i18n\";\r\n\r\nexport function createI18nIntegration(\r\n options: Partial<I18nPluginOptions> = {},\r\n): AstroIntegration {\r\n validateOptions(options);\r\n setOptions(options);\r\n\r\n return {\r\n name: packageName,\r\n hooks: {\r\n \"astro:config:setup\": async ({\r\n logger,\r\n command,\r\n addMiddleware,\r\n }: HookParameters<\"astro:config:setup\">) => {\r\n logger.info(\r\n `Initializing ${packageName} integration (config stage)...`,\r\n );\r\n\r\n initConfig(options);\r\n logAppliedConfig(logger);\r\n\r\n if (typeof global !== \"undefined\") {\r\n try {\r\n global.__ASTRO_I18N_OPTIONS__ = options;\r\n logger.debug(\r\n \"Config options stored in global object for middleware\",\r\n );\r\n } catch {\r\n logger.warn(\"Failed to store config in global object\");\r\n }\r\n }\r\n\r\n await maybeGenerateTypes(options, command, logger);\r\n\r\n addMiddleware({\r\n entrypoint: \"@hkxdv/astro-plugin-i18n/middleware-entrypoint\",\r\n order: \"pre\",\r\n });\r\n\r\n logger.info(`Added ${packageName} middleware`);\r\n },\r\n\r\n \"astro:server:setup\": ({\r\n logger,\r\n }: HookParameters<\"astro:server:setup\">) => {\r\n logger.info(`Setting up ${packageName} middleware for dev server...`);\r\n setOptions(options);\r\n },\r\n\r\n \"astro:build:start\": async ({\r\n logger,\r\n }: HookParameters<\"astro:build:start\">) => {\r\n logger.info(`Building with ${packageName}...`);\r\n },\r\n\r\n \"astro:build:done\": async ({\r\n logger,\r\n }: HookParameters<\"astro:build:done\">) => {\r\n logger.info(`${packageName} build process contribution completed.`);\r\n },\r\n },\r\n };\r\n}\r\n\r\nfunction validateOptions(\r\n options: Partial<I18nPluginOptions>,\r\n logger?: HookParameters<\"astro:config:setup\">[\"logger\"],\r\n): void {\r\n const logError = (message: string) => {\r\n if (logger) {\r\n logger.error(message);\r\n }\r\n\r\n throw new Error(message);\r\n };\r\n\r\n if (!options.defaultLang || typeof options.defaultLang !== \"string\") {\r\n logError(\r\n \"i18n config error: 'defaultLang' is required and must be a string in Astro integration options.\",\r\n );\r\n }\r\n\r\n if (\r\n !options.supportedLangs ||\r\n !Array.isArray(options.supportedLangs) ||\r\n options.supportedLangs.length === 0\r\n ) {\r\n logError(\r\n \"i18n config error: 'supportedLangs' is required and must be a non-empty array in Astro integration options.\",\r\n );\r\n }\r\n\r\n if (!options.supportedLangs?.includes(options.defaultLang as string)) {\r\n logError(\r\n `i18n config error: 'defaultLang' (\\\"${\r\n options.defaultLang\r\n }\\\") must be included in 'supportedLangs' [${options.supportedLangs?.join(\", \")}].`,\r\n );\r\n }\r\n}\r\n\r\nfunction logAppliedConfig(\r\n logger: HookParameters<\"astro:config:setup\">[\"logger\"],\r\n): void {\r\n const currentConfig = getConfig();\r\n\r\n logger.info(\r\n `i18n config applied: defaultLang=${currentConfig.defaultLang}, supportedLangs=[${currentConfig.supportedLangs?.join(\", \")}]`,\r\n );\r\n\r\n if (!currentConfig.defaultLang) {\r\n logger.warn(\"Warning: defaultLang is missing in applied config!\");\r\n }\r\n}\r\n\r\nasync function maybeGenerateTypes(\r\n options: Partial<I18nPluginOptions>,\r\n command: string,\r\n logger: HookParameters<\"astro:config:setup\">[\"logger\"],\r\n): Promise<void> {\r\n if (options.generateTypes && (command === \"build\" || command === \"dev\")) {\r\n try {\r\n logger.info(\"Attempting to generate i18n types...\");\r\n const typesPath = await generateTranslationTypes();\r\n\r\n if (typesPath) {\r\n logger.info(`Generated i18n translation types at: ${typesPath}`);\r\n } else {\r\n logger.info(\r\n \"i18n type generation skipped (no translations found for default language).\",\r\n );\r\n }\r\n } catch (error) {\r\n logger.error(`Failed to generate i18n translation types: ${error}`);\r\n }\r\n } else if (options.generateTypes) {\r\n logger.info(\r\n \"Skipping i18n type generation (enabled but command is not 'build' or 'dev').\",\r\n );\r\n }\r\n}\r\n\r\nexport default createI18nIntegration;\r\n"]}
@@ -0,0 +1,14 @@
1
+ import * as astro from 'astro';
2
+ import { I as I18nPluginOptions } from './index-Dyxmdid5.js';
3
+
4
+ declare function setOptions(options: Partial<I18nPluginOptions> | null): void;
5
+ declare global {
6
+ interface Locals {
7
+ i18n?: {
8
+ config?: Partial<I18nPluginOptions>;
9
+ };
10
+ }
11
+ }
12
+ declare const onRequest: astro.MiddlewareHandler;
13
+
14
+ export { onRequest as default, onRequest, setOptions };
@@ -0,0 +1,61 @@
1
+ import { defineMiddleware } from 'astro/middleware';
2
+
3
+ // src/middleware-entrypoint.ts
4
+ var validatedOptions = null;
5
+ function setOptions(options) {
6
+ validatedOptions = options;
7
+ if (typeof global !== "undefined") {
8
+ try {
9
+ global.__ASTRO_I18N_OPTIONS__ = options || void 0;
10
+ } catch {
11
+ }
12
+ }
13
+ }
14
+ function getOptions() {
15
+ if (validatedOptions) {
16
+ return validatedOptions;
17
+ }
18
+ if (typeof global !== "undefined") {
19
+ try {
20
+ const globalOptions = global.__ASTRO_I18N_OPTIONS__;
21
+ if (globalOptions) {
22
+ return globalOptions;
23
+ }
24
+ } catch {
25
+ }
26
+ }
27
+ console.warn(
28
+ "i18n plugin warning: No options found in middleware. This might cause issues."
29
+ );
30
+ return null;
31
+ }
32
+ var onRequest = defineMiddleware(
33
+ (context, next) => {
34
+ const options = getOptions();
35
+ if (!options) {
36
+ console.warn("i18n plugin warning: No options available in middleware.");
37
+ }
38
+ if (typeof context.locals === "object" && context.locals !== null) {
39
+ const locals = context.locals;
40
+ if (!locals.i18n) {
41
+ locals.i18n = {};
42
+ }
43
+ locals.i18n.config = options || {};
44
+ if (!options?.defaultLang) {
45
+ console.warn(
46
+ "i18n plugin warning: defaultLang not set in middleware config."
47
+ );
48
+ }
49
+ } else {
50
+ console.warn(
51
+ "i18n plugin warning: context.locals is not an object in middleware."
52
+ );
53
+ }
54
+ return next();
55
+ }
56
+ );
57
+ var middleware_entrypoint_default = onRequest;
58
+
59
+ export { middleware_entrypoint_default as default, onRequest, setOptions };
60
+ //# sourceMappingURL=middleware-entrypoint.js.map
61
+ //# sourceMappingURL=middleware-entrypoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/middleware-entrypoint.ts"],"names":[],"mappings":";;;AAIA,IAAI,gBAAA,GAAsD,IAAA;AAEnD,SAAS,WAAW,OAAA,EAAkD;AAC3E,EAAA,gBAAA,GAAmB,OAAA;AAEnB,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,yBAAyB,OAAA,IAAW,KAAA,CAAA;AAAA,IAC7C,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;AAEA,SAAS,UAAA,GAAgD;AACvD,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,OAAO,gBAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA,IAAI;AACF,MAAA,MAAM,gBAAgB,MAAA,CAAO,sBAAA;AAC7B,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,OAAO,aAAA;AAAA,MACT;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,IAAA;AAAA,IACN;AAAA,GACF;AACA,EAAA,OAAO,IAAA;AACT;AAUO,IAAM,SAAA,GAAY,gBAAA;AAAA,EACvB,CAAC,SAAqB,IAAA,KAAyB;AAC7C,IAAA,MAAM,UAAU,UAAA,EAAW;AAE3B,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAA,CAAQ,KAAK,0DAA0D,CAAA;AAAA,IACzE;AAEA,IAAA,IAAI,OAAO,OAAA,CAAQ,MAAA,KAAW,QAAA,IAAY,OAAA,CAAQ,WAAW,IAAA,EAAM;AACjE,MAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AAEvB,MAAA,IAAI,CAAC,OAAO,IAAA,EAAM;AAChB,QAAA,MAAA,CAAO,OAAO,EAAC;AAAA,MACjB;AAEA,MAAA,MAAA,CAAO,IAAA,CAAK,MAAA,GAAS,OAAA,IAAW,EAAC;AAEjC,MAAA,IAAI,CAAC,SAAS,WAAA,EAAa;AACzB,QAAA,OAAA,CAAQ,IAAA;AAAA,UACN;AAAA,SACF;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,IAAA,EAAK;AAAA,EACd;AACF;AAEA,IAAO,6BAAA,GAAQ","file":"middleware-entrypoint.js","sourcesContent":["import { defineMiddleware } from \"astro/middleware\";\r\nimport type { APIContext, MiddlewareNext } from \"astro\";\r\nimport type { I18nPluginOptions } from \"./types\";\r\n\r\nlet validatedOptions: Partial<I18nPluginOptions> | null = null;\r\n\r\nexport function setOptions(options: Partial<I18nPluginOptions> | null): void {\r\n validatedOptions = options;\r\n\r\n if (typeof global !== \"undefined\") {\r\n try {\r\n global.__ASTRO_I18N_OPTIONS__ = options || undefined;\r\n } catch {\r\n // No-op.\r\n }\r\n }\r\n}\r\n\r\nfunction getOptions(): Partial<I18nPluginOptions> | null {\r\n if (validatedOptions) {\r\n return validatedOptions;\r\n }\r\n\r\n if (typeof global !== \"undefined\") {\r\n try {\r\n const globalOptions = global.__ASTRO_I18N_OPTIONS__;\r\n if (globalOptions) {\r\n return globalOptions;\r\n }\r\n } catch {\r\n // No-op.\r\n }\r\n }\r\n\r\n console.warn(\r\n \"i18n plugin warning: No options found in middleware. This might cause issues.\",\r\n );\r\n return null;\r\n}\r\n\r\ndeclare global {\r\n interface Locals {\r\n i18n?: {\r\n config?: Partial<I18nPluginOptions>;\r\n };\r\n }\r\n}\r\n\r\nexport const onRequest = defineMiddleware(\r\n (context: APIContext, next: MiddlewareNext) => {\r\n const options = getOptions();\r\n\r\n if (!options) {\r\n console.warn(\"i18n plugin warning: No options available in middleware.\");\r\n }\r\n\r\n if (typeof context.locals === \"object\" && context.locals !== null) {\r\n const locals = context.locals as any;\r\n\r\n if (!locals.i18n) {\r\n locals.i18n = {};\r\n }\r\n\r\n locals.i18n.config = options || {};\r\n\r\n if (!options?.defaultLang) {\r\n console.warn(\r\n \"i18n plugin warning: defaultLang not set in middleware config.\",\r\n );\r\n }\r\n } else {\r\n console.warn(\r\n \"i18n plugin warning: context.locals is not an object in middleware.\",\r\n );\r\n }\r\n\r\n return next();\r\n },\r\n);\r\n\r\nexport default onRequest;\r\n"]}