diff --git a/packages/astro/src/core/build/app.ts b/packages/astro/src/core/build/app.ts index 614aefbdb0ca..b9cd3548d1b4 100644 --- a/packages/astro/src/core/build/app.ts +++ b/packages/astro/src/core/build/app.ts @@ -30,6 +30,9 @@ export class BuildApp extends BaseApp { async renderError(request: Request, options: RenderErrorOptions): Promise { if (options.status === 500) { + if(options.response) { + return options.response; + } throw options.error; } else { return super.renderError(request, { diff --git a/packages/integrations/node/test/assets.test.js b/packages/integrations/node/test/assets.test.js index 0b71f94cd6ce..758026ecca19 100644 --- a/packages/integrations/node/test/assets.test.js +++ b/packages/integrations/node/test/assets.test.js @@ -3,6 +3,7 @@ import { after, before, describe, it } from 'node:test'; import * as cheerio from 'cheerio'; import nodejs from '../dist/index.js'; import { loadFixture } from './test-utils.js'; +import { fileURLToPath } from 'node:url'; describe('Assets', () => { /** @type {import('./test-utils').Fixture} */ @@ -10,8 +11,10 @@ describe('Assets', () => { let devPreview; before(async () => { + const root = new URL('./fixtures/image/', import.meta.url); fixture = await loadFixture({ - root: './fixtures/image/', + root, + outDir: fileURLToPath(new URL('./dist/assets/', root)), output: 'server', adapter: nodejs({ mode: 'standalone' }), vite: { diff --git a/packages/integrations/node/test/errors.test.js b/packages/integrations/node/test/errors.test.js index 60c184d9f734..9090b162ee4b 100644 --- a/packages/integrations/node/test/errors.test.js +++ b/packages/integrations/node/test/errors.test.js @@ -1,7 +1,5 @@ import assert from 'node:assert/strict'; import { after, before, describe, it } from 'node:test'; -import { fileURLToPath } from 'node:url'; -import { Worker } from 'node:worker_threads'; import * as cheerio from 'cheerio'; import nodejs from '../dist/index.js'; import { loadFixture } from './test-utils.js'; @@ -28,27 +26,6 @@ describe('Errors', () => { await devPreview?.stop(); }); - it('stays alive after offshoot promise rejections', async () => { - // this test needs to happen in a worker because node test runner adds a listener for unhandled rejections in the main thread - const url = new URL('./fixtures/errors/dist/server/entry.mjs', import.meta.url); - const worker = new Worker(fileURLToPath(url), { - type: 'module', - env: { ASTRO_NODE_LOGGING: 'enabled' }, - }); - - await new Promise((resolve, reject) => { - worker.stdout.on('data', (data) => { - setTimeout(() => reject('Server took too long to start'), 1000); - if (data.toString().includes('Server listening on http://localhost:4321')) resolve(); - }); - }); - - await fetch('http://localhost:4321/offshoot-promise-rejection'); - - // if there was a crash, it becomes an error here - await worker.terminate(); - }); - it( 'rejected promise in template', { skip: true, todo: 'Review the response from the in-stream' }, diff --git a/packages/integrations/node/test/image.test.js b/packages/integrations/node/test/image.test.js index 0d5e72c551f4..ddb90e4eea91 100644 --- a/packages/integrations/node/test/image.test.js +++ b/packages/integrations/node/test/image.test.js @@ -4,6 +4,7 @@ import { inferRemoteSize } from 'astro/assets/utils/inferRemoteSize.js'; import * as cheerio from 'cheerio'; import nodejs from '../dist/index.js'; import { loadFixture } from './test-utils.js'; +import { fileURLToPath } from 'node:url'; describe('Image endpoint', () => { /** @type {import('./test-utils').Fixture} */ @@ -11,8 +12,10 @@ describe('Image endpoint', () => { let devPreview; before(async () => { + const root = new URL('./fixtures/image/', import.meta.url); fixture = await loadFixture({ - root: './fixtures/image/', + root, + outDir: fileURLToPath(new URL('./dist/image/', root)), output: 'server', adapter: nodejs({ mode: 'standalone' }), image: {