From 2c5ba64b61ce2516746dd98d890aed0f7c7dfe03 Mon Sep 17 00:00:00 2001 From: windmillcode0 Date: Fri, 4 Oct 2024 14:19:35 -0400 Subject: [PATCH] fix: Friendly error messages for `null` and `undefined` values inside message files (#1041) Co-authored-by: windmillcode0 --- packages/i18n/src/__tests__/build.test.ts | 13 +++++++++++++ packages/i18n/src/build.ts | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/packages/i18n/src/__tests__/build.test.ts b/packages/i18n/src/__tests__/build.test.ts index 7e77b551..ef05be0c 100644 --- a/packages/i18n/src/__tests__/build.test.ts +++ b/packages/i18n/src/__tests__/build.test.ts @@ -161,4 +161,17 @@ describe('Built Tools', () => { ); expect(mockWriteFile).toBeCalledWith('output.d.ts', expectedDts, 'utf8'); }); + + it('should throw an error if messages file contains null or undefined', async () => { + const invalidFileContent = stringifyYAML({ + simple: 'example', + invalidField: null, + }); + + mockReadFile.mockResolvedValue(invalidFileContent); + + await expect(parseMessagesFile('invalid.yml')).rejects.toThrowError( + 'Messages file should not contain `null` (found at "invalidField")', + ); + }); }); diff --git a/packages/i18n/src/build.ts b/packages/i18n/src/build.ts index 8d861a67..7510c452 100644 --- a/packages/i18n/src/build.ts +++ b/packages/i18n/src/build.ts @@ -166,6 +166,11 @@ function _parseMessagesObject( ]; } case 'object': + if ([null, undefined].includes(object)) { + throw new Error( + `Messages file should not contain \`${object}\` (found at "${path.join('.')}")`, + ); + } if (Array.isArray(object)) return object.flatMap((item, i) => _parseMessagesObject(path.concat(String(i)), item, depth + 1),