From ba4dccb007066666834b77f603f9aad9cb530800 Mon Sep 17 00:00:00 2001 From: Oskar Eichler Date: Tue, 1 Sep 2026 09:16:32 +0300 Subject: [PATCH] fix: await locale manifest write --- build/index.js | 2 +- test/build/localeManifestAwait.test.js | 43 ++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 test/build/localeManifestAwait.test.js diff --git a/build/index.js b/build/index.js index 4dd7708c2..27dda7536 100644 --- a/build/index.js +++ b/build/index.js @@ -30,7 +30,7 @@ async function listLocaleJson(localeArr) { name: localeData.match(localeNameRegex)[1] }) })) - promisifyWriteFile(path.join(__dirname, '../locale.json'), JSON.stringify(localeListArr), 'utf8') + await promisifyWriteFile(path.join(__dirname, '../locale.json'), JSON.stringify(localeListArr), 'utf8') } (async () => { diff --git a/test/build/localeManifestAwait.test.js b/test/build/localeManifestAwait.test.js new file mode 100644 index 000000000..c209e9c9e --- /dev/null +++ b/test/build/localeManifestAwait.test.js @@ -0,0 +1,43 @@ +describe('locale manifest generation', () => { + beforeEach(() => { + jest.resetModules() + }) + + afterEach(() => { + jest.restoreAllMocks() + }) + + it('reports a locale manifest write failure through the build error handler', async () => { + const writeError = new Error('locale manifest write failed') + let rejectWrite + let reportError + const errorReported = new Promise((resolve) => { + reportError = resolve + }) + const consoleError = jest.spyOn(console, 'error').mockImplementation((error) => { + reportError(error) + }) + + jest.doMock('rollup', () => ({ + rollup: () => Promise.resolve({ write: () => Promise.resolve() }) + })) + jest.doMock('../../build/rollup.config', () => config => config) + jest.doMock('ncp', () => ({ ncp: (source, destination, callback) => callback() })) + jest.doMock('fs', () => ({ + readdir: (directory, callback) => callback(null, []), + readFile: (file, encoding, callback) => callback(null, ''), + writeFile: (file, contents, encoding, callback) => { + rejectWrite = () => callback(writeError) + } + })) + + require('../../build') // eslint-disable-line global-require + + await new Promise(resolve => setImmediate(resolve)) + expect(rejectWrite).toEqual(expect.any(Function)) + + rejectWrite() + await expect(errorReported).resolves.toBe(writeError) + expect(consoleError).toHaveBeenCalledTimes(1) + }) +})