blob: 30e9a05b88fe7d2adaded7e492332bebe391bf31 [file]
// One disposable Docusaurus process. Pin this adapter to the installed version:
// unlike `build --locale ja`, buildLocale with no single-locale CLI override
// retains the native /ja/ base URL, output path and all language alternatives.
const fs = require('node:fs');
const path = require('node:path');
const {createRequire} = require('node:module');
async function main() {
const [mode, siteDir, outDir, value, samplePlan] = process.argv.slice(2);
const fromSite = createRequire(path.join(siteDir, 'package.json'));
const version = fromSite('@docusaurus/core/package.json').version;
if (version !== '3.6.3') throw new Error(`Revalidate the locale build adapter for Docusaurus ${version}`);
process.env.NODE_ENV = 'production';
process.env.BABEL_ENV = 'production';
delete process.env.DOCUSAURUS_CURRENT_LOCALE;
if (mode === 'plan') {
const {loadContext} = fromSite('@docusaurus/core/lib/server/site.js');
const {localizePath} = fromSite('@docusaurus/utils');
const context = await loadContext({siteDir, outDir});
const {i18n, siteConfig} = context;
const locales = [i18n.defaultLocale, ...i18n.locales.filter(locale => locale !== i18n.defaultLocale)];
fs.writeFileSync(value, JSON.stringify({version, defaultLocale:i18n.defaultLocale,
locales:locales.map(locale => ({locale,
directory:locale === i18n.defaultLocale ? '.' : locale,
baseUrl:localizePath({path:siteConfig.baseUrl, pathType:'url', i18n:{...i18n,currentLocale:locale}}),
}))}, null, 2) + '\n');
} else if (mode === 'build' || mode === 'sample' || mode === 'client') {
const adapter = require('./i18n/compiler-processes.cjs');
const {sourceStamp} = require('./build-locales.cjs');
const stamp = sourceStamp(siteDir);
const compilerMode = process.env.DORIS_COMPILER_MODE ?? 'isolated';
if (!['isolated','parallel'].includes(compilerMode)) throw new Error(`Unknown DORIS_COMPILER_MODE: ${compilerMode}`);
const clientResult = mode !== 'client' && compilerMode === 'isolated'
? await adapter.runClient({siteDir,outDir,locale:value,samplePlan:mode === 'sample' ? samplePlan : null}) : null;
if (clientResult && JSON.stringify(clientResult.source) !== JSON.stringify(sourceStamp(siteDir))) throw new Error('Source changed during isolated client compilation');
const restore = (mode === 'sample' || mode === 'client' && samplePlan) ? await require('./i18n/ci-sample.cjs').install({root:siteDir,outDir,locale:value,planFile:samplePlan}) : () => {};
let restoreCompiler = () => {};
let result;
try {
if (mode === 'client') result = await adapter.buildClient({fromSite,siteDir,outDir,locale:value,samplePlan});
else {
restoreCompiler = adapter.install({fromSite,siteDir,locale:value,clientResult});
const {buildLocale} = fromSite('@docusaurus/core/lib/commands/build/buildLocale.js');
await buildLocale({siteDir, locale:value, cliOptions:{outDir}});
}
} finally {try {restoreCompiler();} finally {restore();}}
if (JSON.stringify(stamp) !== JSON.stringify(sourceStamp(siteDir))) throw new Error('Source changed between compiler phases');
if (mode === 'client') adapter.writeClientResult(siteDir,value,{...result,source:stamp});
else {
if(mode === 'sample' && clientResult)adapter.mergeSamplingScope(siteDir,value,clientResult);
fs.rmSync(adapter.stateDirectory(siteDir,value),{recursive:true,force:true});
}
} else throw new Error(`Unknown locale build mode: ${mode}`);
}
main().catch(error => {console.error(error); process.exitCode = 1;});