diff --git a/packages/launchpad/cypress/e2e/scaffold-project.cy.ts b/packages/launchpad/cypress/e2e/scaffold-project.cy.ts index 38efdae2f4da..dda36061fc76 100644 --- a/packages/launchpad/cypress/e2e/scaffold-project.cy.ts +++ b/packages/launchpad/cypress/e2e/scaffold-project.cy.ts @@ -44,6 +44,13 @@ function scaffoldAndOpenE2EProject (opts: { cy.contains('E2E Testing').click() cy.contains('We added the following files to your project:') cy.contains('Continue').click() + // Going through the loading of config + cy.get('[data-cy="loading-spinner"]') + cy.get('[data-cy="loading-spinner"]').should('not.exist') + // No errrors were encountered + cy.get('[data-testid="error-header"]').should('not.exist') + // Asserts that we've made it through the flow + cy.contains('Choose a Browser') } function scaffoldAndOpenCTProject (opts: { diff --git a/packages/server/lib/plugins/child/run_require_async_child.js b/packages/server/lib/plugins/child/run_require_async_child.js index 378bbf5ef217..2c4aba824600 100644 --- a/packages/server/lib/plugins/child/run_require_async_child.js +++ b/packages/server/lib/plugins/child/run_require_async_child.js @@ -1,6 +1,7 @@ require('graceful-fs').gracefulify(require('fs')) const stripAnsi = require('strip-ansi') const debug = require('debug')(`cypress:lifecycle:child:run_require_async_child:${process.pid}`) +const { pathToFileURL } = require('url') const tsNodeUtil = require('./ts_node') const util = require('../util') const { RunPlugins } = require('./run_plugins') @@ -97,12 +98,10 @@ function run (ipc, file, projectRoot) { // 3a. Yes: Use bundleRequire // 3b. No: Continue through to `await import(configFile)` // 4. Use node's dynamic import to import the configFile - let originalError try { return require(file) } catch (err) { - originalError = err if (!err.stack.includes('[ERR_REQUIRE_ESM]') && !err.stack.includes('SyntaxError: Cannot use import statement outside a module')) { throw err } @@ -124,16 +123,10 @@ function run (ipc, file, projectRoot) { debug(`User doesn't have esbuild. Going to use native node imports.`) // We cannot replace the initial `require` with `await import` because - // Certain modules cannot be dynamically imported. If this throws, however, we want - // to show the original error that was thrown, because that's ultimately the source of the problem - try { - return await import(file) - } catch (e) { - // If we aren't able to import the file at all, throw the original error, since that has more accurate information - // of what failed to begin with - debug('esbuild fallback for loading config failed, throwing original error. node import error: %o', e) - throw originalError - } + // Certain modules cannot be dynamically imported. + + // pathToFileURL for windows interop: https://github.com/nodejs/node/issues/31710 + return await import(pathToFileURL(file).href) } throw err diff --git a/system-tests/__snapshots__/config_modules_spec.ts.js b/system-tests/__snapshots__/config_modules_spec.ts.js deleted file mode 100644 index 7b06c15a4063..000000000000 --- a/system-tests/__snapshots__/config_modules_spec.ts.js +++ /dev/null @@ -1,3 +0,0 @@ -exports['cypress config with esm and cjs / does not support modules and ts without esbuild in config-cjs-and-esm/config-with-ts-module'] = ` -STDOUT_ERROR_VALIDATED -` diff --git a/system-tests/test/config_modules_spec.ts b/system-tests/test/config_modules_spec.ts index d6490f8d814b..fc727a36c8ea 100644 --- a/system-tests/test/config_modules_spec.ts +++ b/system-tests/test/config_modules_spec.ts @@ -32,13 +32,6 @@ describe('cypress config with esm and cjs', function () { spec: 'app.cy.js', browser: 'chrome', expectedExitCode: 1, - snapshot: true, - onStdout (stdout) { - expect(stdout).to.include('nearest parent package.json contains "type": "module" which defines all .ts files in that package scope as ES modules') - - // Need to make this stable b/c of filepaths, and snapshot: true is needed to invoke onStdout - return 'STDOUT_ERROR_VALIDATED' - }, }) })