From 4ceb24e04b08469924dda13cf3287476291bcd59 Mon Sep 17 00:00:00 2001 From: Sem Postma Date: Thu, 2 Apr 2026 17:08:38 +0200 Subject: [PATCH 1/3] fix: throw proper errors when i18n entries cannot be retrieved --- packages/decap-cms-core/src/lib/i18n.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/decap-cms-core/src/lib/i18n.ts b/packages/decap-cms-core/src/lib/i18n.ts index f7a05aa6acaa..d8a536a4310d 100644 --- a/packages/decap-cms-core/src/lib/i18n.ts +++ b/packages/decap-cms-core/src/lib/i18n.ts @@ -308,18 +308,24 @@ export async function getI18nEntry( if (structure === I18N_STRUCTURE.SINGLE_FILE) { entryValue = mergeSingleFileValue(await getEntryValue(path), defaultLocale, locales); } else { - const entryValues = await Promise.all( + const entryValuesResults = await Promise.allSettled( locales.map(async locale => { const entryPath = getFilePath(structure, extension, path, slug, locale); - const value = await getEntryValue(entryPath).catch(() => null); + const value = await getEntryValue(entryPath); return { value, locale }; }), ); - const nonNullValues = entryValues.filter(e => e.value !== null) as { - value: EntryValue; - locale: string; - }[]; + const nonNullValues = entryValuesResults.filter(e => e.status === 'fulfilled').map(e => e.value); + + if (nonNullValues.length === 0) { + // mergeValues will throw on an empty list, and show the error messages. + const [ + error = new Error('No entry values found for any locale'), + ] = entryValuesResults.filter(e => e.status === 'rejected').map(e => e.reason); + + throw error; + } entryValue = mergeValues(collection, structure, defaultLocale, nonNullValues); } From b1c106ef877c2cf9ce3c405f15a0b6b2b8241d0c Mon Sep 17 00:00:00 2001 From: Sem Postma Date: Thu, 2 Apr 2026 17:11:47 +0200 Subject: [PATCH 2/3] fix: format i18n code --- packages/decap-cms-core/src/lib/i18n.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/decap-cms-core/src/lib/i18n.ts b/packages/decap-cms-core/src/lib/i18n.ts index d8a536a4310d..33319a49b55c 100644 --- a/packages/decap-cms-core/src/lib/i18n.ts +++ b/packages/decap-cms-core/src/lib/i18n.ts @@ -316,13 +316,15 @@ export async function getI18nEntry( }), ); - const nonNullValues = entryValuesResults.filter(e => e.status === 'fulfilled').map(e => e.value); + const nonNullValues = entryValuesResults + .filter(e => e.status === 'fulfilled') + .map(e => e.value); if (nonNullValues.length === 0) { // mergeValues will throw on an empty list, and show the error messages. - const [ - error = new Error('No entry values found for any locale'), - ] = entryValuesResults.filter(e => e.status === 'rejected').map(e => e.reason); + const [error = new Error('No entry values found for any locale')] = entryValuesResults + .filter(e => e.status === 'rejected') + .map(e => e.reason); throw error; } From 48545b5c509141063a159515c57b6ba88f03bc42 Mon Sep 17 00:00:00 2001 From: Sem Postma Date: Thu, 2 Apr 2026 19:44:49 +0200 Subject: [PATCH 3/3] fix: typescript errors for older versions --- packages/decap-cms-core/src/lib/i18n.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/decap-cms-core/src/lib/i18n.ts b/packages/decap-cms-core/src/lib/i18n.ts index 33319a49b55c..f6ad4add9e83 100644 --- a/packages/decap-cms-core/src/lib/i18n.ts +++ b/packages/decap-cms-core/src/lib/i18n.ts @@ -317,14 +317,14 @@ export async function getI18nEntry( ); const nonNullValues = entryValuesResults - .filter(e => e.status === 'fulfilled') - .map(e => e.value); + .map(e => (e.status === 'fulfilled' ? e.value : undefined)) + .filter(e => e !== undefined); if (nonNullValues.length === 0) { // mergeValues will throw on an empty list, and show the error messages. const [error = new Error('No entry values found for any locale')] = entryValuesResults - .filter(e => e.status === 'rejected') - .map(e => e.reason); + .map(e => (e.status === 'rejected' ? e.reason : undefined)) + .filter(e => e !== undefined); throw error; }