From 5684b437f71a357c602a4e43476f7274cd66f178 Mon Sep 17 00:00:00 2001 From: Evan Jacobs Date: Thu, 19 Dec 2024 10:20:58 -0500 Subject: [PATCH] fix: handle ESM-style config file --- src/loadUserConfig.js | 3 +++ test/loadUserConfig-test.js | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/loadUserConfig.js b/src/loadUserConfig.js index 522e6ed..830787b 100644 --- a/src/loadUserConfig.js +++ b/src/loadUserConfig.js @@ -11,6 +11,9 @@ async function load(pathToConfigFile) { // await if the config is a function, async or not if (typeof userConfig === 'function') { userConfig = await userConfig(); + } else if (userConfig?.default) { + // handle esm + userConfig = userConfig.default; } return { ...defaultConfig, ...userConfig }; } catch (e) { diff --git a/test/loadUserConfig-test.js b/test/loadUserConfig-test.js index 73e15ca..c452587 100644 --- a/test/loadUserConfig-test.js +++ b/test/loadUserConfig-test.js @@ -186,3 +186,22 @@ it('warns when using an unknown config key', async () => { 'Unknown config key used in .happo.js: "foobar"', ); }); + +it('handles an ESM-style config', async () => { + requireRelative.mockImplementation(() => ({ + __esModule: true, + default: { + apiKey: '1', + apiSecret: '2', + targets: { + firefox: new RemoteBrowserTarget('firefox', { viewport: '800x600' }), + }, + }, + })); + const config = await loadUserConfig('bogus', {}); + expect(config.apiKey).toEqual('1'); + expect(config.apiSecret).toEqual('2'); + expect(config.targets).toEqual({ + firefox: new RemoteBrowserTarget('firefox', { viewport: '800x600' }), + }); +});