astro-i18n-aut
Version:
The i18n integration for Astro 🧑🚀
2 lines • 7.86 kB
JavaScript
var __defProp=Object.defineProperty;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});import path from"node:path";import{fileURLToPath}from"node:url";import fg from"fast-glob";import fs from"fs-extra";import slash from"slash";function removeLeadingForwardSlashWindows(path2){return path2.startsWith("/")&&path2[2]===":"?path2.substring(1):path2}__name(removeLeadingForwardSlashWindows,"removeLeadingForwardSlashWindows");var defaultI18nConfig={include:["pages/**/*"],exclude:["pages/api/**/*"],redirectDefaultLocale:308};function ensureValidTrailingSlashAndFormat(config,updateConfig,logger){config.trailingSlash==="ignore"&&config.output==="static"&&(logger.warn('avoid setting config.trailingSlash = "ignore" when config.output = "static"'),logger.warn('config.trailingSlash = "always" && config.build.format = "directory"'),logger.warn('config.trailingSlash = "never" && config.build.format = "file"'),logger.warn(`setting config.trailingSlash = "${config.trailingSlash}"`),updateConfig({trailingSlash:config.build.format==="directory"?"always":"never"})),config.trailingSlash==="always"&&config.build.format==="file"&&(logger.warn('config.trailingSlash = "always" must always be used with config.build.format = "directory"'),logger.warn('setting config.build.format = "directory"'),updateConfig({build:{format:"directory"}})),config.trailingSlash==="never"&&config.build.format==="directory"&&(logger.warn('config.trailingSlash = "never" must always be used with config.build.format = "file"'),logger.warn('setting config.build.format = "file"'),updateConfig({build:{format:"file"}}))}__name(ensureValidTrailingSlashAndFormat,"ensureValidTrailingSlashAndFormat");function createVirtualPlugin(virtualModuleId,json){let resolvedVirtualModuleId="\0"+virtualModuleId;return{name:"vite-plugin:"+virtualModuleId,resolveId(id){if(id===virtualModuleId)return resolvedVirtualModuleId},load(id){if(id===resolvedVirtualModuleId)return`export default ${JSON.stringify(json)}`}}}__name(createVirtualPlugin,"createVirtualPlugin");function createVirtualModules(config,updateConfig,i18nConfig){let virtualAstroi18nautConfig={defaultLocale:i18nConfig.defaultLocale,locales:i18nConfig.locales,redirectDefaultLocale:i18nConfig.redirectDefaultLocale,BASE_URL:getBaseUrl(config),trailingSlash:config.trailingSlash,build:{format:config.build.format}},virtualPlugin=createVirtualPlugin("virtual:astro-i18n-aut",virtualAstroi18nautConfig);updateConfig({vite:{plugins:[virtualPlugin],worker:{plugins:__name(()=>[virtualPlugin],"plugins")},optimizeDeps:{exclude:["virtual:astro-i18n-aut"]}}})}__name(createVirtualModules,"createVirtualModules");function getBaseUrl(config){let base=config.base;return base[0]!=="/"&&(base="/"+base),config.trailingSlash==="always"?base.at(-1)!=="/"&&(base=base+"/"):config.trailingSlash==="never"&&base!=="/"&&base.at(-1)==="/"&&(base=base.slice(0,-1)),base}__name(getBaseUrl,"getBaseUrl");async function ensureValidConfigs(config,updateConfig,i18nConfig,logger){ensureValidTrailingSlashAndFormat(config,updateConfig,logger),createVirtualModules(config,updateConfig,i18nConfig)}__name(ensureValidConfigs,"ensureValidConfigs");function i18n(userI18nConfig){let i18nConfig=Object.assign(defaultI18nConfig,userI18nConfig),{defaultLocale,locales,exclude,include,redirectDefaultLocale}=i18nConfig,pagesPathTmp={};async function removePagesPathTmp(){await Promise.all(Object.values(pagesPathTmp).map(pagePathTmp=>fs.remove(pagePathTmp)))}return __name(removePagesPathTmp,"removePagesPathTmp"),{name:"astro-i18n-integration",hooks:{"astro:config:setup":__name(async({config,updateConfig,addMiddleware,command,injectRoute,logger})=>{ensureValidLocales(locales,defaultLocale,logger),await ensureValidConfigs(config,updateConfig,i18nConfig,logger),addMiddleware({entrypoint:"astro-i18n-aut/middleware",order:"pre"});let configSrcDirPathname=fileURLToPath(config.srcDir),included=ensureGlobsHaveConfigSrcDirPathname(typeof include=="string"?[include]:include,configSrcDirPathname),excluded=ensureGlobsHaveConfigSrcDirPathname(typeof exclude=="string"?[exclude]:exclude,configSrcDirPathname),pagesPath=path.join(configSrcDirPathname,"pages"),pagesPathTmpRoot=path.join(configSrcDirPathname,"astro_tmp_pages");for(let locale of Object.keys(locales))pagesPathTmp[locale]=`${pagesPathTmpRoot}_${locale}`;await removePagesPathTmp(),command==="build"&&await Promise.all(Object.keys(locales).filter(locale=>redirectDefaultLocale===!1||config.output==="server"?locale!==defaultLocale:!0).map(locale=>fs.copy(pagesPath,pagesPathTmp[locale])));let entries=fg.stream(included,{ignore:excluded,onlyFiles:!0}),entry;for await(entry of entries){let parsedPath=path.parse(entry),relativePath=path.relative(pagesPath,parsedPath.dir),extname=parsedPath.ext.slice(1).toLowerCase();if(extname!=="astro"){warnIsInvalidPage(extname,path.join(relativePath,parsedPath.base),configSrcDirPathname,logger);continue}for(let locale of Object.keys(locales)){if((redirectDefaultLocale===!1||config.output==="server")&&locale===defaultLocale)continue;let entrypoint=command==="build"?path.join(pagesPathTmp[locale],relativePath,parsedPath.base):path.join(pagesPath,relativePath,parsedPath.base),pattern=slash(path.join(locale,relativePath,parsedPath.name.endsWith("index")?"":parsedPath.name,config.build.format==="directory"?"/":""));injectRoute({entrypoint,pattern})}}},"astro:config:setup"),"astro:build:done":__name(async()=>{await removePagesPathTmp()},"astro:build:done"),"astro:server:done":__name(async()=>{await removePagesPathTmp()},"astro:server:done")}}}__name(i18n,"i18n");function ensureValidLocales(locales,defaultLocale,logger){if(!Object.keys(locales).includes(defaultLocale)){let errorMessage=`locales ${JSON.stringify(locales)} does not include "${defaultLocale}"`;throw logger.error(errorMessage),new Error(errorMessage)}}__name(ensureValidLocales,"ensureValidLocales");function ensureGlobsHaveConfigSrcDirPathname(filePaths,configSrcDirPathname){return filePaths.map(filePath=>(filePath=path.normalize(removeLeadingForwardSlashWindows(filePath)),filePath.includes(configSrcDirPathname)&&(filePath=path.relative(configSrcDirPathname,filePath)),filePath=path.posix.join(fg.convertPathToPattern(configSrcDirPathname),slash(filePath)),filePath))}__name(ensureGlobsHaveConfigSrcDirPathname,"ensureGlobsHaveConfigSrcDirPathname");var hasWarnedIsInvalidPage=!1;function warnIsInvalidPage(extname,filePath,configSrcDirPathname,logger){return["js","ts","md","mdx","html"].includes(extname)?(hasWarnedIsInvalidPage===!1&&(logger.warn(`exclude or remove non-astro files from "${configSrcDirPathname}pages", as they cannot be translated`),hasWarnedIsInvalidPage=!0),logger.warn(path.join(configSrcDirPathname,"pages",filePath)),!0):!1}__name(warnIsInvalidPage,"warnIsInvalidPage");function removeHtmlExtension(url){return url.endsWith(".html")?url.slice(0,-5):url}__name(removeHtmlExtension,"removeHtmlExtension");function filterSitemapByDefaultLocale({defaultLocale,base:baseUrl="/"}){baseUrl[0]!=="/"&&(baseUrl="/"+baseUrl);let baseUrlWithoutTrailingSlash=baseUrl.at(-1)==="/"?baseUrl.slice(0,-1):baseUrl;return __name(function(page){let pathName=new URL(page).pathname,pathNameWithoutHtmlExtension=removeHtmlExtension(pathName),pathNameWithoutBaseUrl=baseUrl==="/"?pathNameWithoutHtmlExtension:pathNameWithoutHtmlExtension.replace(baseUrlWithoutTrailingSlash,""),pathNameWithoutBaseUrlStartsWithDefaultLocale=pathNameWithoutBaseUrl.slice(1,3)===defaultLocale;return!(pathNameWithoutBaseUrl.length===3&&pathNameWithoutBaseUrlStartsWithDefaultLocale||pathNameWithoutBaseUrl[0]==="/"&&pathNameWithoutBaseUrl[3]==="/"&&pathNameWithoutBaseUrlStartsWithDefaultLocale)},"filter")}__name(filterSitemapByDefaultLocale,"filterSitemapByDefaultLocale");export{i18n as default,defaultI18nConfig,filterSitemapByDefaultLocale,i18n};
//# sourceMappingURL=index.js.map