diff --git a/packages/scaffold-config/src/ct-detect-third-party.ts b/packages/scaffold-config/src/ct-detect-third-party.ts index ee531513510b..6c0c03e30156 100644 --- a/packages/scaffold-config/src/ct-detect-third-party.ts +++ b/packages/scaffold-config/src/ct-detect-third-party.ts @@ -44,6 +44,19 @@ const dynamicAbsoluteImport = (filePath: string) => { return dynamicImport(pathToFileURL(filePath).href) as Promise } +/** + * When compiling CJS -> ESM, TS can produce: + * Imported [Module: null prototype] { __esModule: true, default: { default: { type: 'cypress-ct-solid-js', ... } } } + * We just keep getting `default` property until none exists. + */ +function getDefaultExport (mod: T): T { + if (mod?.default) { + return getDefaultExport(mod.default) + } + + return mod?.default ?? mod +} + export async function detectThirdPartyCTFrameworks ( projectRoot: string, ): Promise { @@ -81,11 +94,17 @@ export async function detectThirdPartyCTFrameworks ( debug('Resolve successful: %s', modulePath) - const m = await dynamicAbsoluteImport(modulePath).then((m) => m.default || m) + const m = await dynamicAbsoluteImport(modulePath) + + debug('Imported %o', m) + + const mod = getDefaultExport(m) + + debug('Module is %o', mod) - debug('Import successful: %o', m) + debug('Import successful: %o', mod) - return m + return mod } catch (e) { debug('Ignoring %s due to error resolving: %o', e) }