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),