1
0
mirror of synced 2025-12-21 19:06:49 -05:00

fall back to English on corrupt content files (#32629)

This commit is contained in:
Peter Bengtsson
2022-11-17 20:11:29 +01:00
committed by GitHub
parent e4a069f014
commit 6d88215b46
3 changed files with 61 additions and 9 deletions

View File

@@ -1,6 +1,20 @@
import path from 'path'
import fs from 'fs/promises'
import Page from './page.js'
import languages from './languages.js'
import Page, { FrontmatterErrorsError } from './page.js'
// If you run `export DEBUG_TRANSLATION_FALLBACKS=true` in your terminal,
// every time a translation file fails to initialize we fall back to English
// and write a warning to stdout.
const DEBUG_TRANSLATION_FALLBACKS = Boolean(
JSON.parse(process.env.DEBUG_TRANSLATION_FALLBACKS || 'false')
)
// If you don't want to fall back to English automatically on corrupt
// translation files, set `export THROW_TRANSLATION_ERRORS=true`
const THROW_TRANSLATION_ERRORS = Boolean(
JSON.parse(process.env.THROW_TRANSLATION_ERRORS || 'false')
)
// Module level cache
const _basePaths = new Map()
@@ -30,11 +44,39 @@ export default async function createTree(originalPath, langObj) {
const relativePath = filepath.replace(`${basePath}/`, '')
// Initialize the Page! This is where the file reads happen.
const page = await Page.init({
basePath,
relativePath,
languageCode: langObj.code,
})
let page
try {
page = await Page.init({
basePath,
relativePath,
languageCode: langObj.code,
})
} catch (err) {
if (
!THROW_TRANSLATION_ERRORS &&
err instanceof FrontmatterErrorsError &&
langObj.code !== 'en'
) {
// Something corrupt in the `.md` file caused it to throw an
// error from reading it in. Let's "gracefully" recover by
// swapping this one out for the English content and pretend it
// exists in this other language.
const englishBasePath = getBasePath(languages.en.dir)
page = await Page.init({
basePath: englishBasePath,
relativePath,
languageCode: langObj.code,
})
if (DEBUG_TRANSLATION_FALLBACKS) {
console.warn(
`Unable to initialized ${path.join(basePath, relativePath)} due to frontmatter errors. ` +
`Will proceed with using ${path.join(englishBasePath, relativePath)} instead.`
)
}
} else {
throw err
}
}
if (!page) {
// Do not throw an error if Early Access is not available.