From fd7be674ef4070a9d919a4910b8520936dd55f6a Mon Sep 17 00:00:00 2001 From: Andrés Correa Casablanca Date: Tue, 19 Mar 2024 16:43:08 +0100 Subject: fix: do not append trailing slash to subresource urls (#10491) * fix: do not append traling slash to subresource urls Signed-off-by: Andres Correa Casablanca * test: fix broken test Signed-off-by: Andres Correa Casablanca * refactor: packages/integrations/node/src/serve-static.ts Co-authored-by: Arsh <69170106+lilnasy@users.noreply.github.com> --------- Signed-off-by: Andres Correa Casablanca Co-authored-by: Arsh <69170106+lilnasy@users.noreply.github.com> --- .../integrations/node/test/trailing-slash.test.js | 423 +++++++++++++++++++++ 1 file changed, 423 insertions(+) create mode 100644 packages/integrations/node/test/trailing-slash.test.js (limited to 'packages/integrations/node/test/trailing-slash.test.js') diff --git a/packages/integrations/node/test/trailing-slash.test.js b/packages/integrations/node/test/trailing-slash.test.js new file mode 100644 index 000000000..64fff1964 --- /dev/null +++ b/packages/integrations/node/test/trailing-slash.test.js @@ -0,0 +1,423 @@ +import { after, before, describe, it } from 'node:test'; +import * as assert from 'node:assert/strict'; +import * as cheerio from 'cheerio'; +import nodejs from '../dist/index.js'; +import { loadFixture } from './test-utils.js'; + +/** + * @typedef {import('../../../astro/test/test-utils').Fixture} Fixture + */ + +async function load() { + const mod = await import( + `./fixtures/trailing-slash/dist/server/entry.mjs?dropcache=${Date.now()}` + ); + return mod; +} + +describe('Trailing slash', () => { + /** @type {import('./test-utils').Fixture} */ + let fixture; + let server; + describe('Always', async () => { + describe('With base', async () => { + before(async () => { + process.env.ASTRO_NODE_AUTOSTART = 'disabled'; + process.env.PRERENDER = true; + + fixture = await loadFixture({ + root: './fixtures/trailing-slash/', + base: '/some-base', + output: 'hybrid', + trailingSlash: 'always', + adapter: nodejs({ mode: 'standalone' }), + }); + await fixture.build(); + const { startServer } = await load(); + let res = startServer(); + server = res.server; + }); + + after(async () => { + await server.stop(); + await fixture.clean(); + delete process.env.PRERENDER; + }); + + it('Can render prerendered base route', async () => { + const res = await fetch(`http://${server.host}:${server.port}`); + const html = await res.text(); + const $ = cheerio.load(html); + + assert.equal(res.status, 200); + assert.equal($('h1').text(), 'Index'); + }); + + it('Can render prerendered route with redirect', async () => { + const res = await fetch(`http://${server.host}:${server.port}/some-base/one`, { + redirect: 'manual', + }); + assert.equal(res.status, 301); + assert.equal(res.headers.get('location'), '/some-base/one/'); + }); + + it('Can render prerendered route with redirect and query params', async () => { + const res = await fetch(`http://${server.host}:${server.port}/some-base/one?foo=bar`, { + redirect: 'manual', + }); + assert.equal(res.status, 301); + assert.equal(res.headers.get('location'), '/some-base/one/?foo=bar'); + }); + + it('Can render prerendered route with query params', async () => { + const res = await fetch(`http://${server.host}:${server.port}/some-base/one/?foo=bar`); + const html = await res.text(); + const $ = cheerio.load(html); + + assert.equal(res.status, 200); + assert.equal($('h1').text(), 'One'); + }); + + it('Does not add trailing slash to subresource urls', async () => { + const res = await fetch(`http://${server.host}:${server.port}/some-base/one.css`); + const css = await res.text(); + + assert.equal(res.status, 200); + assert.equal(css, 'h1 { color: red; }\n'); + }) + }); + describe('Without base', async () => { + before(async () => { + process.env.ASTRO_NODE_AUTOSTART = 'disabled'; + process.env.PRERENDER = true; + + fixture = await loadFixture({ + root: './fixtures/trailing-slash/', + output: 'hybrid', + trailingSlash: 'always', + adapter: nodejs({ mode: 'standalone' }), + }); + await fixture.build(); + const { startServer } = await load(); + let res = startServer(); + server = res.server; + }); + + after(async () => { + await server.stop(); + await fixture.clean(); + delete process.env.PRERENDER; + }); + + it('Can render prerendered base route', async () => { + const res = await fetch(`http://${server.host}:${server.port}`); + const html = await res.text(); + const $ = cheerio.load(html); + + assert.equal(res.status, 200); + assert.equal($('h1').text(), 'Index'); + }); + + it('Can render prerendered route with redirect', async () => { + const res = await fetch(`http://${server.host}:${server.port}/one`, { + redirect: 'manual', + }); + assert.equal(res.status, 301); + assert.equal(res.headers.get('location'), '/one/'); + }); + + it('Can render prerendered route with redirect and query params', async () => { + const res = await fetch(`http://${server.host}:${server.port}/one?foo=bar`, { + redirect: 'manual', + }); + assert.equal(res.status, 301); + assert.equal(res.headers.get('location'), '/one/?foo=bar'); + }); + + it('Can render prerendered route with query params', async () => { + const res = await fetch(`http://${server.host}:${server.port}/one/?foo=bar`); + const html = await res.text(); + const $ = cheerio.load(html); + + assert.equal(res.status, 200); + assert.equal($('h1').text(), 'One'); + }); + + it('Does not add trailing slash to subresource urls', async () => { + const res = await fetch(`http://${server.host}:${server.port}/one.css`); + const css = await res.text(); + + assert.equal(res.status, 200); + assert.equal(css, 'h1 { color: red; }\n'); + }) + }); + }); + describe('Never', async () => { + describe('With base', async () => { + before(async () => { + process.env.ASTRO_NODE_AUTOSTART = 'disabled'; + process.env.PRERENDER = true; + + fixture = await loadFixture({ + root: './fixtures/trailing-slash/', + base: '/some-base', + output: 'hybrid', + trailingSlash: 'never', + adapter: nodejs({ mode: 'standalone' }), + }); + await fixture.build(); + const { startServer } = await load(); + let res = startServer(); + server = res.server; + }); + + after(async () => { + await server.stop(); + await fixture.clean(); + delete process.env.PRERENDER; + }); + + it('Can render prerendered base route', async () => { + const res = await fetch(`http://${server.host}:${server.port}`); + const html = await res.text(); + const $ = cheerio.load(html); + + assert.equal(res.status, 200); + assert.equal($('h1').text(), 'Index'); + }); + + it('Can render prerendered route with redirect', async () => { + const res = await fetch(`http://${server.host}:${server.port}/some-base/one/`, { + redirect: 'manual', + }); + assert.equal(res.status, 301); + assert.equal(res.headers.get('location'), '/some-base/one'); + }); + + it('Can render prerendered route with redirect and query params', async () => { + const res = await fetch(`http://${server.host}:${server.port}/some-base/one/?foo=bar`, { + redirect: 'manual', + }); + + assert.equal(res.status, 301); + assert.equal(res.headers.get('location'), '/some-base/one?foo=bar'); + }); + + it('Can render prerendered route with query params', async () => { + const res = await fetch(`http://${server.host}:${server.port}/some-base/one?foo=bar`); + const html = await res.text(); + const $ = cheerio.load(html); + + assert.equal(res.status, 200); + assert.equal($('h1').text(), 'One'); + }); + }); + describe('Without base', async () => { + before(async () => { + process.env.ASTRO_NODE_AUTOSTART = 'disabled'; + process.env.PRERENDER = true; + + fixture = await loadFixture({ + root: './fixtures/trailing-slash/', + output: 'hybrid', + trailingSlash: 'never', + adapter: nodejs({ mode: 'standalone' }), + }); + await fixture.build(); + const { startServer } = await load(); + let res = startServer(); + server = res.server; + }); + + after(async () => { + await server.stop(); + await fixture.clean(); + delete process.env.PRERENDER; + }); + + it('Can render prerendered base route', async () => { + const res = await fetch(`http://${server.host}:${server.port}`); + const html = await res.text(); + const $ = cheerio.load(html); + + assert.equal(res.status, 200); + assert.equal($('h1').text(), 'Index'); + }); + + it('Can render prerendered route with redirect', async () => { + const res = await fetch(`http://${server.host}:${server.port}/one/`, { + redirect: 'manual', + }); + assert.equal(res.status, 301); + assert.equal(res.headers.get('location'), '/one'); + }); + + it('Can render prerendered route with redirect and query params', async () => { + const res = await fetch(`http://${server.host}:${server.port}/one/?foo=bar`, { + redirect: 'manual', + }); + + assert.equal(res.status, 301); + assert.equal(res.headers.get('location'), '/one?foo=bar'); + }); + + it('Can render prerendered route and query params', async () => { + const res = await fetch(`http://${server.host}:${server.port}/one?foo=bar`); + const html = await res.text(); + const $ = cheerio.load(html); + + assert.equal(res.status, 200); + assert.equal($('h1').text(), 'One'); + }); + }); + }); + describe('Ignore', async () => { + describe('With base', async () => { + before(async () => { + process.env.ASTRO_NODE_AUTOSTART = 'disabled'; + process.env.PRERENDER = true; + + fixture = await loadFixture({ + root: './fixtures/trailing-slash/', + base: '/some-base', + output: 'hybrid', + trailingSlash: 'ignore', + adapter: nodejs({ mode: 'standalone' }), + }); + await fixture.build(); + const { startServer } = await load(); + let res = startServer(); + server = res.server; + }); + + after(async () => { + await server.stop(); + await fixture.clean(); + delete process.env.PRERENDER; + }); + + it('Can render prerendered base route', async () => { + const res = await fetch(`http://${server.host}:${server.port}`); + const html = await res.text(); + const $ = cheerio.load(html); + + assert.equal(res.status, 200); + assert.equal($('h1').text(), 'Index'); + }); + + it('Can render prerendered route with slash', async () => { + const res = await fetch(`http://${server.host}:${server.port}/some-base/one/`, { + redirect: 'manual', + }); + const html = await res.text(); + const $ = cheerio.load(html); + + assert.equal(res.status, 200); + assert.equal($('h1').text(), 'One'); + }); + + it('Can render prerendered route without slash', async () => { + const res = await fetch(`http://${server.host}:${server.port}/some-base/one`, { + redirect: 'manual', + }); + const html = await res.text(); + const $ = cheerio.load(html); + + assert.equal(res.status, 200); + assert.equal($('h1').text(), 'One'); + }); + + it('Can render prerendered route with slash and query params', async () => { + const res = await fetch(`http://${server.host}:${server.port}/some-base/one/?foo=bar`, { + redirect: 'manual', + }); + const html = await res.text(); + const $ = cheerio.load(html); + + assert.equal(res.status, 200); + assert.equal($('h1').text(), 'One'); + }); + + it('Can render prerendered route without slash and with query params', async () => { + const res = await fetch(`http://${server.host}:${server.port}/some-base/one?foo=bar`, { + redirect: 'manual', + }); + const html = await res.text(); + const $ = cheerio.load(html); + + assert.equal(res.status, 200); + assert.equal($('h1').text(), 'One'); + }); + }); + describe('Without base', async () => { + before(async () => { + process.env.ASTRO_NODE_AUTOSTART = 'disabled'; + process.env.PRERENDER = true; + + fixture = await loadFixture({ + root: './fixtures/trailing-slash/', + output: 'hybrid', + trailingSlash: 'ignore', + adapter: nodejs({ mode: 'standalone' }), + }); + await fixture.build(); + const { startServer } = await load(); + let res = startServer(); + server = res.server; + }); + + after(async () => { + await server.stop(); + await fixture.clean(); + delete process.env.PRERENDER; + }); + + it('Can render prerendered base route', async () => { + const res = await fetch(`http://${server.host}:${server.port}`); + const html = await res.text(); + const $ = cheerio.load(html); + + assert.equal(res.status, 200); + assert.equal($('h1').text(), 'Index'); + }); + + it('Can render prerendered route with slash', async () => { + const res = await fetch(`http://${server.host}:${server.port}/one/`); + const html = await res.text(); + const $ = cheerio.load(html); + + assert.equal(res.status, 200); + assert.equal($('h1').text(), 'One'); + }); + + it('Can render prerendered route without slash', async () => { + const res = await fetch(`http://${server.host}:${server.port}/one`); + const html = await res.text(); + const $ = cheerio.load(html); + + assert.equal(res.status, 200); + assert.equal($('h1').text(), 'One'); + }); + + it('Can render prerendered route with slash and query params', async () => { + const res = await fetch(`http://${server.host}:${server.port}/one/?foo=bar`, { + redirect: 'manual', + }); + const html = await res.text(); + const $ = cheerio.load(html); + + assert.equal(res.status, 200); + assert.equal($('h1').text(), 'One'); + }); + + it('Can render prerendered route without slash and with query params', async () => { + const res = await fetch(`http://${server.host}:${server.port}/one?foo=bar`); + const html = await res.text(); + const $ = cheerio.load(html); + + assert.equal(res.status, 200); + assert.equal($('h1').text(), 'One'); + }); + }); + }); +}); -- cgit v1.2.3 From d83b4c4102ec20ec62239584324d763f6bfd54cb Mon Sep 17 00:00:00 2001 From: Andrés Correa Casablanca Date: Tue, 19 Mar 2024 15:44:07 +0000 Subject: [ci] format --- packages/integrations/node/src/serve-static.ts | 2 +- packages/integrations/node/test/trailing-slash.test.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'packages/integrations/node/test/trailing-slash.test.js') diff --git a/packages/integrations/node/src/serve-static.ts b/packages/integrations/node/src/serve-static.ts index 811f748a4..0ec129d9f 100644 --- a/packages/integrations/node/src/serve-static.ts +++ b/packages/integrations/node/src/serve-static.ts @@ -7,7 +7,7 @@ import send from 'send'; import type { Options } from './types.js'; // check for a dot followed by a extension made up of lowercase characters -const isSubresourceRegex = /.+\.[a-z]+$/i +const isSubresourceRegex = /.+\.[a-z]+$/i; /** * Creates a Node.js http listener for static files and prerendered pages. diff --git a/packages/integrations/node/test/trailing-slash.test.js b/packages/integrations/node/test/trailing-slash.test.js index 64fff1964..79d5d247a 100644 --- a/packages/integrations/node/test/trailing-slash.test.js +++ b/packages/integrations/node/test/trailing-slash.test.js @@ -1,5 +1,5 @@ -import { after, before, describe, it } from 'node:test'; import * as assert from 'node:assert/strict'; +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'; @@ -84,7 +84,7 @@ describe('Trailing slash', () => { assert.equal(res.status, 200); assert.equal(css, 'h1 { color: red; }\n'); - }) + }); }); describe('Without base', async () => { before(async () => { @@ -149,7 +149,7 @@ describe('Trailing slash', () => { assert.equal(res.status, 200); assert.equal(css, 'h1 { color: red; }\n'); - }) + }); }); }); describe('Never', async () => { -- cgit v1.2.3 From f79886cb8e8787dd84b24727ae5c7629bab1e363 Mon Sep 17 00:00:00 2001 From: Raz Luvaton <16746759+rluvaton@users.noreply.github.com> Date: Fri, 5 Apr 2024 14:30:59 +0100 Subject: test(@astrojs/node) wait for server listening in trailing-slash tests (#10694) * test(@astrojs/node) wait for server listening in trailing-slash tests * fix missing waitServerListen * fix import statement --------- Co-authored-by: Emanuele Stoppa --- packages/integrations/node/test/prerender.test.js | 1 + packages/integrations/node/test/trailing-slash.test.js | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'packages/integrations/node/test/trailing-slash.test.js') diff --git a/packages/integrations/node/test/prerender.test.js b/packages/integrations/node/test/prerender.test.js index bf34fc99d..29080981a 100644 --- a/packages/integrations/node/test/prerender.test.js +++ b/packages/integrations/node/test/prerender.test.js @@ -329,6 +329,7 @@ describe('Hybrid rendering', () => { const { startServer } = await load(); let res = startServer(); server = res.server; + await waitServerListen(server.server); }); after(async () => { diff --git a/packages/integrations/node/test/trailing-slash.test.js b/packages/integrations/node/test/trailing-slash.test.js index 79d5d247a..ad91a2759 100644 --- a/packages/integrations/node/test/trailing-slash.test.js +++ b/packages/integrations/node/test/trailing-slash.test.js @@ -2,7 +2,7 @@ import * as assert from 'node:assert/strict'; 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 { loadFixture, waitServerListen } from './test-utils.js'; /** * @typedef {import('../../../astro/test/test-utils').Fixture} Fixture @@ -36,6 +36,7 @@ describe('Trailing slash', () => { const { startServer } = await load(); let res = startServer(); server = res.server; + await waitServerListen(server.server); }); after(async () => { @@ -101,6 +102,7 @@ describe('Trailing slash', () => { const { startServer } = await load(); let res = startServer(); server = res.server; + await waitServerListen(server.server); }); after(async () => { @@ -169,6 +171,7 @@ describe('Trailing slash', () => { const { startServer } = await load(); let res = startServer(); server = res.server; + await waitServerListen(server.server); }); after(async () => { @@ -227,6 +230,7 @@ describe('Trailing slash', () => { const { startServer } = await load(); let res = startServer(); server = res.server; + await waitServerListen(server.server); }); after(async () => { @@ -288,6 +292,7 @@ describe('Trailing slash', () => { const { startServer } = await load(); let res = startServer(); server = res.server; + await waitServerListen(server.server); }); after(async () => { @@ -364,6 +369,7 @@ describe('Trailing slash', () => { const { startServer } = await load(); let res = startServer(); server = res.server; + await waitServerListen(server.server); }); after(async () => { -- cgit v1.2.3 From 7a816ccbc3eecba74a93fec3f48236063b5c1df6 Mon Sep 17 00:00:00 2001 From: Bjorn Lu Date: Mon, 17 Jun 2024 14:23:10 +0800 Subject: Refactor prerendering chunk handling (#11245) --- .../integrations/node/test/node-middleware.test.js | 11 +---- .../node/test/prerender-404-500.test.js | 35 +++++++++++----- packages/integrations/node/test/prerender.test.js | 44 +++++++++++++++---- .../integrations/node/test/trailing-slash.test.js | 49 ++++++++++++++++------ 4 files changed, 97 insertions(+), 42 deletions(-) (limited to 'packages/integrations/node/test/trailing-slash.test.js') diff --git a/packages/integrations/node/test/node-middleware.test.js b/packages/integrations/node/test/node-middleware.test.js index fa496e871..d1b016a51 100644 --- a/packages/integrations/node/test/node-middleware.test.js +++ b/packages/integrations/node/test/node-middleware.test.js @@ -9,13 +9,6 @@ import { loadFixture, waitServerListen } from './test-utils.js'; * @typedef {import('../../../astro/test/test-utils').Fixture} Fixture */ -async function load() { - const mod = await import( - `./fixtures/node-middleware/dist/server/entry.mjs?dropcache=${Date.now()}` - ); - return mod; -} - describe('behavior from middleware, standalone', () => { /** @type {import('./test-utils').Fixture} */ let fixture; @@ -29,7 +22,7 @@ describe('behavior from middleware, standalone', () => { adapter: nodejs({ mode: 'standalone' }), }); await fixture.build(); - const { startServer } = await load(); + const { startServer } = await fixture.loadAdapterEntryModule(); let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -69,7 +62,7 @@ describe('behavior from middleware, middleware', () => { adapter: nodejs({ mode: 'middleware' }), }); await fixture.build(); - const { handler } = await load(); + const { handler } = await fixture.loadAdapterEntryModule(); const app = express(); app.use(handler); server = app.listen(8888); diff --git a/packages/integrations/node/test/prerender-404-500.test.js b/packages/integrations/node/test/prerender-404-500.test.js index afa23a151..2535fcb35 100644 --- a/packages/integrations/node/test/prerender-404-500.test.js +++ b/packages/integrations/node/test/prerender-404-500.test.js @@ -8,13 +8,6 @@ import { loadFixture, waitServerListen } from './test-utils.js'; * @typedef {import('../../../astro/test/test-utils').Fixture} Fixture */ -async function load() { - const mod = await import( - `./fixtures/prerender-404-500/dist/server/entry.mjs?dropcache=${Date.now()}` - ); - return mod; -} - describe('Prerender 404', () => { /** @type {import('./test-utils').Fixture} */ let fixture; @@ -32,10 +25,15 @@ describe('Prerender 404', () => { base: '/some-base', root: './fixtures/prerender-404-500/', output: 'server', + outDir: './dist/server-with-base', + build: { + client: './dist/server-with-base/client', + server: './dist/server-with-base/server', + }, adapter: nodejs({ mode: 'standalone' }), }); await fixture.build(); - const { startServer } = await load(); + const { startServer } = await fixture.loadAdapterEntryModule(); let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -117,10 +115,15 @@ describe('Prerender 404', () => { site: 'https://test.info/', root: './fixtures/prerender-404-500/', output: 'server', + outDir: './dist/server-without-base', + build: { + client: './dist/server-without-base/client', + server: './dist/server-without-base/server', + }, adapter: nodejs({ mode: 'standalone' }), }); await fixture.build(); - const { startServer } = await load(); + const { startServer } = await fixture.loadAdapterEntryModule(); let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -181,10 +184,15 @@ describe('Hybrid 404', () => { base: '/some-base', root: './fixtures/prerender-404-500/', output: 'hybrid', + outDir: './dist/hybrid-with-base', + build: { + client: './dist/hybrid-with-base/client', + server: './dist/hybrid-with-base/server', + }, adapter: nodejs({ mode: 'standalone' }), }); await fixture.build(); - const { startServer } = await load(); + const { startServer } = await fixture.loadAdapterEntryModule(); let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -238,10 +246,15 @@ describe('Hybrid 404', () => { site: 'https://test.net/', root: './fixtures/prerender-404-500/', output: 'hybrid', + outDir: './dist/hybrid-without-base', + build: { + client: './dist/hybrid-without-base/client', + server: './dist/hybrid-without-base/server', + }, adapter: nodejs({ mode: 'standalone' }), }); await fixture.build(); - const { startServer } = await load(); + const { startServer } = await fixture.loadAdapterEntryModule(); let res = startServer(); server = res.server; await waitServerListen(server.server); diff --git a/packages/integrations/node/test/prerender.test.js b/packages/integrations/node/test/prerender.test.js index 29080981a..d856d9d3e 100644 --- a/packages/integrations/node/test/prerender.test.js +++ b/packages/integrations/node/test/prerender.test.js @@ -8,10 +8,6 @@ import { loadFixture, waitServerListen } from './test-utils.js'; * @typedef {import('../../../astro/test/test-utils').Fixture} Fixture */ -async function load() { - const mod = await import(`./fixtures/prerender/dist/server/entry.mjs?dropcache=${Date.now()}`); - return mod; -} describe('Prerendering', () => { /** @type {import('./test-utils').Fixture} */ let fixture; @@ -25,10 +21,15 @@ describe('Prerendering', () => { base: '/some-base', root: './fixtures/prerender/', output: 'server', + outDir: './dist/with-base', + build: { + client: './dist/with-base/client', + server: './dist/with-base/server', + }, adapter: nodejs({ mode: 'standalone' }), }); await fixture.build(); - const { startServer } = await load(); + const { startServer } = await fixture.loadAdapterEntryModule(); let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -94,10 +95,15 @@ describe('Prerendering', () => { fixture = await loadFixture({ root: './fixtures/prerender/', output: 'server', + outDir: './dist/without-base', + build: { + client: './dist/without-base/client', + server: './dist/without-base/server', + }, adapter: nodejs({ mode: 'standalone' }), }); await fixture.build(); - const { startServer } = await await load(); + const { startServer } = await fixture.loadAdapterEntryModule(); let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -155,6 +161,11 @@ describe('Prerendering', () => { fixture = await loadFixture({ root: './fixtures/prerender/', output: 'server', + outDir: './dist/dev', + build: { + client: './dist/dev/client', + server: './dist/dev/server', + }, adapter: nodejs({ mode: 'standalone' }), }); devServer = await fixture.startDevServer(); @@ -197,10 +208,15 @@ describe('Hybrid rendering', () => { base: '/some-base', root: './fixtures/prerender/', output: 'hybrid', + outDir: './dist/hybrid-with-base', + build: { + client: './dist/hybrid-with-base/client', + server: './dist/hybrid-with-base/server', + }, adapter: nodejs({ mode: 'standalone' }), }); await fixture.build(); - const { startServer } = await load(); + const { startServer } = await fixture.loadAdapterEntryModule(); let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -264,10 +280,15 @@ describe('Hybrid rendering', () => { fixture = await loadFixture({ root: './fixtures/prerender/', output: 'hybrid', + outDir: './dist/hybrid-without-base', + build: { + client: './dist/hybrid-without-base/client', + server: './dist/hybrid-without-base/server', + }, adapter: nodejs({ mode: 'standalone' }), }); await fixture.build(); - const { startServer } = await load(); + const { startServer } = await fixture.loadAdapterEntryModule(); let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -323,10 +344,15 @@ describe('Hybrid rendering', () => { fixture = await loadFixture({ root: './fixtures/prerender/', output: 'hybrid', + outDir: './dist/hybrid-shared-modules', + build: { + client: './dist/hybrid-shared-modules/client', + server: './dist/hybrid-shared-modules/server', + }, adapter: nodejs({ mode: 'standalone' }), }); await fixture.build(); - const { startServer } = await load(); + const { startServer } = await fixture.loadAdapterEntryModule(); let res = startServer(); server = res.server; await waitServerListen(server.server); diff --git a/packages/integrations/node/test/trailing-slash.test.js b/packages/integrations/node/test/trailing-slash.test.js index ad91a2759..9ea8fcddd 100644 --- a/packages/integrations/node/test/trailing-slash.test.js +++ b/packages/integrations/node/test/trailing-slash.test.js @@ -8,13 +8,6 @@ import { loadFixture, waitServerListen } from './test-utils.js'; * @typedef {import('../../../astro/test/test-utils').Fixture} Fixture */ -async function load() { - const mod = await import( - `./fixtures/trailing-slash/dist/server/entry.mjs?dropcache=${Date.now()}` - ); - return mod; -} - describe('Trailing slash', () => { /** @type {import('./test-utils').Fixture} */ let fixture; @@ -30,10 +23,15 @@ describe('Trailing slash', () => { base: '/some-base', output: 'hybrid', trailingSlash: 'always', + outDir: './dist/always-with-base', + build: { + client: './dist/always-with-base/client', + server: './dist/always-with-base/server', + }, adapter: nodejs({ mode: 'standalone' }), }); await fixture.build(); - const { startServer } = await load(); + const { startServer } = await fixture.loadAdapterEntryModule(); let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -96,10 +94,15 @@ describe('Trailing slash', () => { root: './fixtures/trailing-slash/', output: 'hybrid', trailingSlash: 'always', + outDir: './dist/always-without-base', + build: { + client: './dist/always-without-base/client', + server: './dist/always-without-base/server', + }, adapter: nodejs({ mode: 'standalone' }), }); await fixture.build(); - const { startServer } = await load(); + const { startServer } = await fixture.loadAdapterEntryModule(); let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -165,10 +168,15 @@ describe('Trailing slash', () => { base: '/some-base', output: 'hybrid', trailingSlash: 'never', + outDir: './dist/never-with-base', + build: { + client: './dist/never-with-base/client', + server: './dist/never-with-base/server', + }, adapter: nodejs({ mode: 'standalone' }), }); await fixture.build(); - const { startServer } = await load(); + const { startServer } = await fixture.loadAdapterEntryModule(); let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -224,10 +232,15 @@ describe('Trailing slash', () => { root: './fixtures/trailing-slash/', output: 'hybrid', trailingSlash: 'never', + outDir: './dist/never-without-base', + build: { + client: './dist/never-without-base/client', + server: './dist/never-without-base/server', + }, adapter: nodejs({ mode: 'standalone' }), }); await fixture.build(); - const { startServer } = await load(); + const { startServer } = await fixture.loadAdapterEntryModule(); let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -286,10 +299,15 @@ describe('Trailing slash', () => { base: '/some-base', output: 'hybrid', trailingSlash: 'ignore', + outDir: './dist/ignore-with-base', + build: { + client: './dist/ignore-with-base/client', + server: './dist/ignore-with-base/server', + }, adapter: nodejs({ mode: 'standalone' }), }); await fixture.build(); - const { startServer } = await load(); + const { startServer } = await fixture.loadAdapterEntryModule(); let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -363,10 +381,15 @@ describe('Trailing slash', () => { root: './fixtures/trailing-slash/', output: 'hybrid', trailingSlash: 'ignore', + outDir: './dist/ignore-without-base', + build: { + client: './dist/ignore-without-base/client', + server: './dist/ignore-without-base/server', + }, adapter: nodejs({ mode: 'standalone' }), }); await fixture.build(); - const { startServer } = await load(); + const { startServer } = await fixture.loadAdapterEntryModule(); let res = startServer(); server = res.server; await waitServerListen(server.server); -- cgit v1.2.3 From b93bc0a0c70591e83a88f171dec3ba2ee8abb385 Mon Sep 17 00:00:00 2001 From: Alexander Niebuhr Date: Thu, 29 Aug 2024 08:45:22 +0200 Subject: chore: supress linting --- packages/integrations/node/CHANGELOG.md | 2 +- packages/integrations/node/package.json | 9 ++------- packages/integrations/node/src/index.ts | 2 +- packages/integrations/node/src/log-listening-on.ts | 17 +++++++++++------ packages/integrations/node/src/middleware.ts | 3 +++ packages/integrations/node/src/preview.ts | 9 ++++++--- packages/integrations/node/src/serve-app.ts | 2 +- packages/integrations/node/src/serve-static.ts | 10 ++++++++++ packages/integrations/node/src/standalone.ts | 3 ++- packages/integrations/node/test/api-route.test.js | 10 ++++++++++ packages/integrations/node/test/bad-urls.test.js | 2 +- packages/integrations/node/test/encoded.test.js | 2 ++ packages/integrations/node/test/errors.test.js | 5 +++-- packages/integrations/node/test/headers.test.js | 1 + packages/integrations/node/test/image.test.js | 2 +- packages/integrations/node/test/locals.test.js | 8 ++++++++ packages/integrations/node/test/node-middleware.test.js | 4 ++++ .../integrations/node/test/prerender-404-500.test.js | 12 ++++++++---- packages/integrations/node/test/prerender.test.js | 15 +++++++++++++++ packages/integrations/node/test/test-utils.js | 7 +++++++ packages/integrations/node/test/trailing-slash.test.js | 12 ++++++++++++ packages/integrations/node/test/url.test.js | 6 ++++++ packages/integrations/node/tsconfig.json | 4 +--- 23 files changed, 116 insertions(+), 31 deletions(-) (limited to 'packages/integrations/node/test/trailing-slash.test.js') diff --git a/packages/integrations/node/CHANGELOG.md b/packages/integrations/node/CHANGELOG.md index 044cdbead..481dcb7cc 100644 --- a/packages/integrations/node/CHANGELOG.md +++ b/packages/integrations/node/CHANGELOG.md @@ -764,7 +764,7 @@ { darkMode: true }, { expires: '1 month', - }, + } ); const prefs = Astro.cookies.get('prefs').json(); diff --git a/packages/integrations/node/package.json b/packages/integrations/node/package.json index 42a5a8dc2..6573b2293 100644 --- a/packages/integrations/node/package.json +++ b/packages/integrations/node/package.json @@ -11,10 +11,7 @@ "url": "https://github.com/withastro/astro.git", "directory": "packages/integrations/node" }, - "keywords": [ - "withastro", - "astro-adapter" - ], + "keywords": ["withastro", "astro-adapter"], "bugs": "https://github.com/withastro/astro/issues", "homepage": "https://docs.astro.build/en/guides/integrations-guide/node/", "exports": { @@ -23,9 +20,7 @@ "./preview.js": "./dist/preview.js", "./package.json": "./package.json" }, - "files": [ - "dist" - ], + "files": ["dist"], "scripts": { "build": "tsc", "test": "astro-scripts test \"test/**/*.test.js\"" diff --git a/packages/integrations/node/src/index.ts b/packages/integrations/node/src/index.ts index 42a2ed91f..ec7a2ae3f 100644 --- a/packages/integrations/node/src/index.ts +++ b/packages/integrations/node/src/index.ts @@ -72,7 +72,7 @@ export default function createIntegration(userOptions: UserOptions): AstroIntegr if (config.output === 'static') { logger.warn( - `\`output: "server"\` or \`output: "hybrid"\` is required to use this adapter.`, + `\`output: "server"\` or \`output: "hybrid"\` is required to use this adapter.` ); } }, diff --git a/packages/integrations/node/src/log-listening-on.ts b/packages/integrations/node/src/log-listening-on.ts index 7e299740c..2f774c31c 100644 --- a/packages/integrations/node/src/log-listening-on.ts +++ b/packages/integrations/node/src/log-listening-on.ts @@ -8,20 +8,20 @@ import type { Options } from './types.js'; export async function logListeningOn( logger: AstroIntegrationLogger, server: http.Server | https.Server, - options: Pick, + options: Pick ) { await new Promise((resolve) => server.once('listening', resolve)); const protocol = server instanceof https.Server ? 'https' : 'http'; // Allow to provide host value at runtime const host = getResolvedHostForHttpServer( - process.env.HOST !== undefined && process.env.HOST !== '' ? process.env.HOST : options.host, + process.env.HOST !== undefined && process.env.HOST !== '' ? process.env.HOST : options.host ); const { port } = server.address() as AddressInfo; const address = getNetworkAddress(protocol, host, port); if (host === undefined) { logger.info( - `Server listening on \n local: ${address.local[0]} \t\n network: ${address.network[0]}\n`, + `Server listening on \n local: ${address.local[0]} \t\n network: ${address.network[0]}\n` ); } else { logger.info(`Server listening on ${address.local[0]}`); @@ -32,9 +32,11 @@ function getResolvedHostForHttpServer(host: string | boolean) { if (host === false) { // Use a secure default return 'localhost'; + // biome-ignore lint/style/noUselessElse: } else if (host === true) { // If passed --host in the CLI without arguments return undefined; // undefined typically means 0.0.0.0 or :: (listen on all IPs) + // biome-ignore lint/style/noUselessElse: } else { return host; } @@ -49,29 +51,32 @@ const wildcardHosts = new Set(['0.0.0.0', '::', '0000:0000:0000:0000:0000:0000:0 // this code from vite https://github.com/vitejs/vite/blob/d09bbd093a4b893e78f0bbff5b17c7cf7821f403/packages/vite/src/node/utils.ts#L892-L914 export function getNetworkAddress( + // biome-ignore lint/style/useDefaultParameterLast: protocol: 'http' | 'https' = 'http', hostname: string | undefined, port: number, - base?: string, + base?: string ) { const NetworkAddress: NetworkAddressOpt = { local: [], network: [], }; + // biome-ignore lint/complexity/noForEach: Object.values(os.networkInterfaces()) .flatMap((nInterface) => nInterface ?? []) .filter( (detail) => + // biome-ignore lint/complexity/useOptionalChain: detail && detail.address && (detail.family === 'IPv4' || // @ts-expect-error Node 18.0 - 18.3 returns number - detail.family === 4), + detail.family === 4) ) .forEach((detail) => { let host = detail.address.replace( '127.0.0.1', - hostname === undefined || wildcardHosts.has(hostname) ? 'localhost' : hostname, + hostname === undefined || wildcardHosts.has(hostname) ? 'localhost' : hostname ); // ipv6 host if (host.includes(':')) { diff --git a/packages/integrations/node/src/middleware.ts b/packages/integrations/node/src/middleware.ts index 5cc4c4a46..169404064 100644 --- a/packages/integrations/node/src/middleware.ts +++ b/packages/integrations/node/src/middleware.ts @@ -23,7 +23,9 @@ export default function createMiddleware(app: NodeApp): RequestHandler { const error = req; if (next) { return next(error); + // biome-ignore lint/style/noUselessElse: } else { + // biome-ignore lint/complexity/useArrowFunction: throw error; } } @@ -33,6 +35,7 @@ export default function createMiddleware(app: NodeApp): RequestHandler { logger.error(`Could not render ${req.url}`); console.error(err); if (!res.headersSent) { + // biome-ignore lint/style/noUnusedTemplateLiteral: res.writeHead(500, `Server error`); res.end(); } diff --git a/packages/integrations/node/src/preview.ts b/packages/integrations/node/src/preview.ts index 518155c4a..b6666129d 100644 --- a/packages/integrations/node/src/preview.ts +++ b/packages/integrations/node/src/preview.ts @@ -16,19 +16,22 @@ const createPreviewServer: CreatePreviewServer = async function (preview) { const ssrModule: MaybeServerModule = await import(preview.serverEntrypoint.toString()); if (typeof ssrModule.handler === 'function') { ssrHandler = ssrModule.handler; + // biome-ignore lint/style/noNonNullAssertion: options = ssrModule.options!; + // biome-ignore lint/complexity/useArrowFunction: } else { throw new AstroError( - `The server entrypoint doesn't have a handler. Are you sure this is the right file?`, + `The server entrypoint doesn't have a handler. Are you sure this is the right file?` ); } } catch (err) { if ((err as any).code === 'ERR_MODULE_NOT_FOUND') { throw new AstroError( `The server entrypoint ${fileURLToPath( - preview.serverEntrypoint, - )} does not exist. Have you ran a build yet?`, + preview.serverEntrypoint + )} does not exist. Have you ran a build yet?` ); + // biome-ignore lint/style/noUselessElse: } else { throw err; } diff --git a/packages/integrations/node/src/serve-app.ts b/packages/integrations/node/src/serve-app.ts index 72b4e0fd6..2934a01ab 100644 --- a/packages/integrations/node/src/serve-app.ts +++ b/packages/integrations/node/src/serve-app.ts @@ -39,7 +39,7 @@ export function createAppHandler(app: NodeApp): RequestHandler { addCookieHeader: true, locals, routeData, - }), + }) ); await NodeApp.writeResponse(response, res); } else if (next) { diff --git a/packages/integrations/node/src/serve-static.ts b/packages/integrations/node/src/serve-static.ts index 725f7afa6..f4fa1fa5c 100644 --- a/packages/integrations/node/src/serve-static.ts +++ b/packages/integrations/node/src/serve-static.ts @@ -36,16 +36,21 @@ export function createStaticHandler(app: NodeApp, options: Options) { const hasSlash = urlPath.endsWith('/'); switch (trailingSlash) { case 'never': + // biome-ignore lint/suspicious/noDoubleEquals: if (isDirectory && urlPath != '/' && hasSlash) { + // biome-ignore lint/style/useTemplate: + // biome-ignore lint/suspicious/noFallthroughSwitchClause: pathname = urlPath.slice(0, -1) + (urlQuery ? '?' + urlQuery : ''); res.statusCode = 301; res.setHeader('Location', pathname); return res.end(); + // biome-ignore lint/style/noUselessElse: } else pathname = urlPath; // intentionally fall through case 'ignore': { if (isDirectory && !hasSlash) { + // biome-ignore lint/style/useTemplate: pathname = urlPath + '/index.html'; } else pathname = urlPath; } @@ -53,10 +58,12 @@ export function createStaticHandler(app: NodeApp, options: Options) { case 'always': // trailing slash is not added to "subresources" if (!hasSlash && !isSubresourceRegex.test(urlPath)) { + // biome-ignore lint/style/useTemplate: pathname = urlPath + '/' + (urlQuery ? '?' + urlQuery : ''); res.statusCode = 301; res.setHeader('Location', pathname); return res.end(); + // biome-ignore lint/style/noUselessElse: } else pathname = urlPath; break; } @@ -110,6 +117,7 @@ function resolveClientDir(options: Options) { while (!serverEntryFolderURL.endsWith(serverFolder)) { serverEntryFolderURL = path.dirname(serverEntryFolderURL); } + // biome-ignore lint/style/useTemplate: const serverEntryURL = serverEntryFolderURL + '/entry.mjs'; const clientURL = new URL(appendForwardSlash(rel), serverEntryURL); const client = url.fileURLToPath(clientURL); @@ -117,9 +125,11 @@ function resolveClientDir(options: Options) { } function prependForwardSlash(pth: string) { + // biome-ignore lint/style/useTemplate: return pth.startsWith('/') ? pth : '/' + pth; } function appendForwardSlash(pth: string) { + // biome-ignore lint/style/useTemplate: return pth.endsWith('/') ? pth : pth + '/'; } diff --git a/packages/integrations/node/src/standalone.ts b/packages/integrations/node/src/standalone.ts index 76e672d2f..8ae10a9ba 100644 --- a/packages/integrations/node/src/standalone.ts +++ b/packages/integrations/node/src/standalone.ts @@ -39,6 +39,7 @@ export function createStandaloneHandler(app: NodeApp, options: Options) { return (req: http.IncomingMessage, res: http.ServerResponse) => { try { // validate request path + // biome-ignore lint/style/noNonNullAssertion: decodeURI(req.url!); } catch { res.writeHead(400); @@ -59,7 +60,7 @@ export function createServer(listener: http.RequestListener, host: string, port: key: fs.readFileSync(process.env.SERVER_KEY_PATH), cert: fs.readFileSync(process.env.SERVER_CERT_PATH), }, - listener, + listener ); } else { httpServer = http.createServer(listener); diff --git a/packages/integrations/node/test/api-route.test.js b/packages/integrations/node/test/api-route.test.js index 9743ce42d..63324c51c 100644 --- a/packages/integrations/node/test/api-route.test.js +++ b/packages/integrations/node/test/api-route.test.js @@ -27,6 +27,7 @@ describe('API routes', () => { it('Can get the request body', async () => { const { handler } = await import('./fixtures/api-route/dist/server/entry.mjs'); + // biome-ignore lint/style/useConst: let { req, res, done } = createRequestAndResponse({ method: 'POST', url: '/recipes', @@ -38,8 +39,10 @@ describe('API routes', () => { handler(req, res); + // biome-ignore lint/style/useConst: let [buffer] = await done; + // biome-ignore lint/style/useConst: let json = JSON.parse(buffer.toString('utf-8')); assert.equal(json.length, 1); @@ -50,6 +53,7 @@ describe('API routes', () => { it('Can get binary data', async () => { const { handler } = await import('./fixtures/api-route/dist/server/entry.mjs'); + // biome-ignore lint/style/useConst: let { req, res, done } = createRequestAndResponse({ method: 'POST', url: '/binary', @@ -61,7 +65,9 @@ describe('API routes', () => { handler(req, res); + // biome-ignore lint/style/useConst: let [out] = await done; + // biome-ignore lint/style/useConst: let arr = Array.from(new Uint8Array(out.buffer)); assert.deepEqual(arr, [5, 4, 3, 2, 1]); }); @@ -69,6 +75,7 @@ describe('API routes', () => { it('Can post large binary data', async () => { const { handler } = await import('./fixtures/api-route/dist/server/entry.mjs'); + // biome-ignore lint/style/useConst: let { req, res, done } = createRequestAndResponse({ method: 'POST', url: '/hash', @@ -95,16 +102,19 @@ describe('API routes', () => { expectedDigest = hash.digest(); }); + // biome-ignore lint/style/useConst: let [out] = await done; assert.deepEqual(new Uint8Array(out.buffer), new Uint8Array(expectedDigest)); }); it('Can bail on streaming', async () => { const { handler } = await import('./fixtures/api-route/dist/server/entry.mjs'); + // biome-ignore lint/style/useConst: let { req, res, done } = createRequestAndResponse({ url: '/streaming', }); + // biome-ignore lint/style/useConst: let locals = { cancelledByTheServer: false }; handler(req, res, () => {}, locals); diff --git a/packages/integrations/node/test/bad-urls.test.js b/packages/integrations/node/test/bad-urls.test.js index 9323516e8..cdc0158ff 100644 --- a/packages/integrations/node/test/bad-urls.test.js +++ b/packages/integrations/node/test/bad-urls.test.js @@ -39,7 +39,7 @@ describe('Bad URLs', () => { assert.equal( statusCodes.includes(fetchResult.status), true, - `${weirdUrl} returned something else than 400, 404, or 500`, + `${weirdUrl} returned something else than 400, 404, or 500` ); } const stillWork = await fixture.fetch('/'); diff --git a/packages/integrations/node/test/encoded.test.js b/packages/integrations/node/test/encoded.test.js index edc6ae78b..bea3e95f1 100644 --- a/packages/integrations/node/test/encoded.test.js +++ b/packages/integrations/node/test/encoded.test.js @@ -18,6 +18,7 @@ describe('Encoded Pathname', () => { it('Can get an Astro file', async () => { const { handler } = await import('./fixtures/encoded/dist/server/entry.mjs'); + // biome-ignore lint/style/useConst: let { req, res, text } = createRequestAndResponse({ url: '/什么', }); @@ -32,6 +33,7 @@ describe('Encoded Pathname', () => { it('Can get a Markdown file', async () => { const { handler } = await import('./fixtures/encoded/dist/server/entry.mjs'); + // biome-ignore lint/style/useConst: let { req, res, text } = createRequestAndResponse({ url: '/blog/什么', }); diff --git a/packages/integrations/node/test/errors.test.js b/packages/integrations/node/test/errors.test.js index 802fa6e25..9bf4aa29b 100644 --- a/packages/integrations/node/test/errors.test.js +++ b/packages/integrations/node/test/errors.test.js @@ -20,6 +20,7 @@ describe('Errors', () => { }); let devPreview; + // biome-ignore lint/suspicious/noDuplicateTestHooks: before(async () => { // The two tests that need the server to run are skipped // devPreview = await fixture.preview(); @@ -58,7 +59,7 @@ describe('Errors', () => { const $ = cheerio.load(html); assert.equal($('p').text().trim(), 'Internal server error'); - }, + } ); it( @@ -86,6 +87,6 @@ describe('Errors', () => { } else { throw new Error('The response should take at most 2 chunks.'); } - }, + } ); }); diff --git a/packages/integrations/node/test/headers.test.js b/packages/integrations/node/test/headers.test.js index 00b1766c7..8342e28da 100644 --- a/packages/integrations/node/test/headers.test.js +++ b/packages/integrations/node/test/headers.test.js @@ -132,6 +132,7 @@ describe('Node Adapter Headers', () => { async function runTest(url, expectedHeaders) { const { handler } = await import('./fixtures/headers/dist/server/entry.mjs'); + // biome-ignore lint/style/useConst: let { req, res, done } = createRequestAndResponse({ method: 'GET', url, diff --git a/packages/integrations/node/test/image.test.js b/packages/integrations/node/test/image.test.js index 5303fe37e..c4758f96b 100644 --- a/packages/integrations/node/test/image.test.js +++ b/packages/integrations/node/test/image.test.js @@ -28,7 +28,7 @@ describe.skip('Image endpoint', () => { assert.equal(res.status, 200); const resImage = await fixture.fetch( - '/_image?href=/_astro/some_penguin.97ef5f92.png&w=50&f=webp', + '/_image?href=/_astro/some_penguin.97ef5f92.png&w=50&f=webp' ); assert.equal(resImage.status, 200); diff --git a/packages/integrations/node/test/locals.test.js b/packages/integrations/node/test/locals.test.js index 6d2776079..a232ed299 100644 --- a/packages/integrations/node/test/locals.test.js +++ b/packages/integrations/node/test/locals.test.js @@ -18,15 +18,18 @@ describe('API routes', () => { it('Can use locals added by node middleware', async () => { const { handler } = await import('./fixtures/locals/dist/server/entry.mjs'); + // biome-ignore lint/style/useConst: let { req, res, text } = createRequestAndResponse({ url: '/from-node-middleware', }); + // biome-ignore lint/style/useConst: let locals = { foo: 'bar' }; handler(req, res, () => {}, locals); req.send(); + // biome-ignore lint/style/useConst: let html = await text(); assert.equal(html.includes('

bar

'), true); @@ -34,6 +37,7 @@ describe('API routes', () => { it('Throws an error when provided non-objects as locals', async () => { const { handler } = await import('./fixtures/locals/dist/server/entry.mjs'); + // biome-ignore lint/style/useConst: let { req, res, done } = createRequestAndResponse({ url: '/from-node-middleware', }); @@ -62,18 +66,22 @@ describe('API routes', () => { it('Can access locals in API', async () => { const { handler } = await import('./fixtures/locals/dist/server/entry.mjs'); + // biome-ignore lint/style/useConst: let { req, res, done } = createRequestAndResponse({ method: 'POST', url: '/api', }); + // biome-ignore lint/style/useConst: let locals = { foo: 'bar' }; handler(req, res, () => {}, locals); req.send(); + // biome-ignore lint/style/useConst: let [buffer] = await done; + // biome-ignore lint/style/useConst: let json = JSON.parse(buffer.toString('utf-8')); assert.equal(json.foo, 'bar'); diff --git a/packages/integrations/node/test/node-middleware.test.js b/packages/integrations/node/test/node-middleware.test.js index d1b016a51..0ff741a7f 100644 --- a/packages/integrations/node/test/node-middleware.test.js +++ b/packages/integrations/node/test/node-middleware.test.js @@ -23,6 +23,7 @@ describe('behavior from middleware, standalone', () => { }); await fixture.build(); const { startServer } = await fixture.loadAdapterEntryModule(); + // biome-ignore lint/style/useConst: let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -31,6 +32,7 @@ describe('behavior from middleware, standalone', () => { after(async () => { await server.stop(); await fixture.clean(); + // biome-ignore lint/performance/noDelete: delete process.env.PRERENDER; }); @@ -71,10 +73,12 @@ describe('behavior from middleware, middleware', () => { after(async () => { server.close(); await fixture.clean(); + // biome-ignore lint/performance/noDelete: delete process.env.PRERENDER; }); it('when mode is standalone', async () => { + // biome-ignore lint/style/noUnusedTemplateLiteral: const res = await fetch(`http://localhost:8888/ssr`); assert.equal(res.status, 200); diff --git a/packages/integrations/node/test/prerender-404-500.test.js b/packages/integrations/node/test/prerender-404-500.test.js index 2535fcb35..0cc669c45 100644 --- a/packages/integrations/node/test/prerender-404-500.test.js +++ b/packages/integrations/node/test/prerender-404-500.test.js @@ -34,6 +34,7 @@ describe('Prerender 404', () => { }); await fixture.build(); const { startServer } = await fixture.loadAdapterEntryModule(); + // biome-ignore lint/style/useConst: let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -42,7 +43,7 @@ describe('Prerender 404', () => { after(async () => { await server.stop(); await fixture.clean(); - delete process.env.PRERENDER; + process.env.PRERENDER = undefined; }); it('Can render SSR route', async () => { @@ -124,6 +125,7 @@ describe('Prerender 404', () => { }); await fixture.build(); const { startServer } = await fixture.loadAdapterEntryModule(); + // biome-ignore lint/style/useConst: let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -132,7 +134,7 @@ describe('Prerender 404', () => { after(async () => { await server.stop(); await fixture.clean(); - delete process.env.PRERENDER; + process.env.PRERENDER = undefined; }); it('Can render SSR route', async () => { @@ -193,6 +195,7 @@ describe('Hybrid 404', () => { }); await fixture.build(); const { startServer } = await fixture.loadAdapterEntryModule(); + // biome-ignore lint/style/useConst: let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -201,7 +204,7 @@ describe('Hybrid 404', () => { after(async () => { await server.stop(); await fixture.clean(); - delete process.env.PRERENDER; + process.env.PRERENDER = undefined; }); it('Can render SSR route', async () => { @@ -255,6 +258,7 @@ describe('Hybrid 404', () => { }); await fixture.build(); const { startServer } = await fixture.loadAdapterEntryModule(); + // biome-ignore lint/style/useConst: let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -263,7 +267,7 @@ describe('Hybrid 404', () => { after(async () => { await server.stop(); await fixture.clean(); - delete process.env.PRERENDER; + process.env.PRERENDER = undefined; }); it('Can render SSR route', async () => { diff --git a/packages/integrations/node/test/prerender.test.js b/packages/integrations/node/test/prerender.test.js index e699a1b3c..e4d8cbb4a 100644 --- a/packages/integrations/node/test/prerender.test.js +++ b/packages/integrations/node/test/prerender.test.js @@ -30,6 +30,7 @@ describe('Prerendering', () => { }); await fixture.build(); const { startServer } = await fixture.loadAdapterEntryModule(); + // biome-ignore lint/style/useConst: let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -38,6 +39,7 @@ describe('Prerendering', () => { after(async () => { await server.stop(); await fixture.clean(); + // biome-ignore lint/performance/noDelete: delete process.env.PRERENDER; }); @@ -105,6 +107,7 @@ describe('Prerendering', () => { }); await fixture.build(); const { startServer } = await fixture.loadAdapterEntryModule(); + // biome-ignore lint/style/useConst: let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -113,6 +116,7 @@ describe('Prerendering', () => { after(async () => { await server.stop(); await fixture.clean(); + // biome-ignore lint/performance/noDelete: delete process.env.PRERENDER; }); @@ -181,6 +185,7 @@ describe('Prerendering', () => { }); await fixture.build(); const { startServer } = await fixture.loadAdapterEntryModule(); + // biome-ignore lint/style/useConst: let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -189,6 +194,7 @@ describe('Prerendering', () => { after(async () => { await server.stop(); await fixture.clean(); + // biome-ignore lint/performance/noDelete: delete process.env.PRERENDER; }); @@ -233,10 +239,12 @@ describe('Prerendering', () => { after(async () => { await devServer.stop(); + // biome-ignore lint/performance/noDelete: delete process.env.PRERENDER; }); it('Can render SSR route', async () => { + // biome-ignore lint/style/noUnusedTemplateLiteral: const res = await fixture.fetch(`/one`); const html = await res.text(); const $ = cheerio.load(html); @@ -246,6 +254,7 @@ describe('Prerendering', () => { }); it('Can render prerendered route', async () => { + // biome-ignore lint/style/noUnusedTemplateLiteral: const res = await fixture.fetch(`/two`); const html = await res.text(); const $ = cheerio.load(html); @@ -277,6 +286,7 @@ describe('Hybrid rendering', () => { }); await fixture.build(); const { startServer } = await fixture.loadAdapterEntryModule(); + // biome-ignore lint/style/useConst: let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -285,6 +295,7 @@ describe('Hybrid rendering', () => { after(async () => { await server.stop(); await fixture.clean(); + // biome-ignore lint/performance/noDelete: delete process.env.PRERENDER; }); @@ -350,6 +361,7 @@ describe('Hybrid rendering', () => { }); await fixture.build(); const { startServer } = await fixture.loadAdapterEntryModule(); + // biome-ignore lint/style/useConst: let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -358,6 +370,7 @@ describe('Hybrid rendering', () => { after(async () => { await server.stop(); await fixture.clean(); + // biome-ignore lint/performance/noDelete: delete process.env.PRERENDER; }); @@ -415,6 +428,7 @@ describe('Hybrid rendering', () => { }); await fixture.build(); const { startServer } = await fixture.loadAdapterEntryModule(); + // biome-ignore lint/style/useConst: let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -423,6 +437,7 @@ describe('Hybrid rendering', () => { after(async () => { await server.stop(); await fixture.clean(); + // biome-ignore lint/performance/noDelete: delete process.env.PRERENDER; }); diff --git a/packages/integrations/node/test/test-utils.js b/packages/integrations/node/test/test-utils.js index 10faba5cf..86b871f93 100644 --- a/packages/integrations/node/test/test-utils.js +++ b/packages/integrations/node/test/test-utils.js @@ -20,17 +20,21 @@ export function loadFixture(inlineConfig) { } export function createRequestAndResponse(reqOptions) { + // biome-ignore lint/style/useConst: let req = httpMocks.createRequest(reqOptions); + // biome-ignore lint/style/useConst: let res = httpMocks.createResponse({ eventEmitter: EventEmitter, req, }); + // biome-ignore lint/style/useConst: let done = toPromise(res); // Get the response as text const text = async () => { + // biome-ignore lint/style/useConst: let chunks = await done; return buffersToString(chunks); }; @@ -45,11 +49,13 @@ export function toPromise(res) { const write = res.write; res.write = function (data, encoding) { if (ArrayBuffer.isView(data) && !Buffer.isBuffer(data)) { + // biome-ignore lint/style/noParameterAssign: data = Buffer.from(data.buffer); } return write.call(this, data, encoding); }; res.on('end', () => { + // biome-ignore lint/style/useConst: let chunks = res._getChunks(); resolve(chunks); }); @@ -57,6 +63,7 @@ export function toPromise(res) { } export function buffersToString(buffers) { + // biome-ignore lint/style/useConst: let decoder = new TextDecoder(); let str = ''; for (const buffer of buffers) { diff --git a/packages/integrations/node/test/trailing-slash.test.js b/packages/integrations/node/test/trailing-slash.test.js index 9ea8fcddd..95c6661f5 100644 --- a/packages/integrations/node/test/trailing-slash.test.js +++ b/packages/integrations/node/test/trailing-slash.test.js @@ -32,6 +32,7 @@ describe('Trailing slash', () => { }); await fixture.build(); const { startServer } = await fixture.loadAdapterEntryModule(); + // biome-ignore lint/style/useConst: let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -40,6 +41,7 @@ describe('Trailing slash', () => { after(async () => { await server.stop(); await fixture.clean(); + // biome-ignore lint/performance/noDelete: delete process.env.PRERENDER; }); @@ -103,6 +105,7 @@ describe('Trailing slash', () => { }); await fixture.build(); const { startServer } = await fixture.loadAdapterEntryModule(); + // biome-ignore lint/style/useConst: let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -111,6 +114,7 @@ describe('Trailing slash', () => { after(async () => { await server.stop(); await fixture.clean(); + // biome-ignore lint/performance/noDelete: delete process.env.PRERENDER; }); @@ -177,6 +181,7 @@ describe('Trailing slash', () => { }); await fixture.build(); const { startServer } = await fixture.loadAdapterEntryModule(); + // biome-ignore lint/style/useConst: let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -185,6 +190,7 @@ describe('Trailing slash', () => { after(async () => { await server.stop(); await fixture.clean(); + // biome-ignore lint/performance/noDelete: delete process.env.PRERENDER; }); @@ -241,6 +247,7 @@ describe('Trailing slash', () => { }); await fixture.build(); const { startServer } = await fixture.loadAdapterEntryModule(); + // biome-ignore lint/style/useConst: let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -249,6 +256,7 @@ describe('Trailing slash', () => { after(async () => { await server.stop(); await fixture.clean(); + // biome-ignore lint/performance/noDelete: delete process.env.PRERENDER; }); @@ -308,6 +316,7 @@ describe('Trailing slash', () => { }); await fixture.build(); const { startServer } = await fixture.loadAdapterEntryModule(); + // biome-ignore lint/style/useConst: let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -316,6 +325,7 @@ describe('Trailing slash', () => { after(async () => { await server.stop(); await fixture.clean(); + // biome-ignore lint/performance/noDelete: delete process.env.PRERENDER; }); @@ -390,6 +400,7 @@ describe('Trailing slash', () => { }); await fixture.build(); const { startServer } = await fixture.loadAdapterEntryModule(); + // biome-ignore lint/style/useConst: let res = startServer(); server = res.server; await waitServerListen(server.server); @@ -398,6 +409,7 @@ describe('Trailing slash', () => { after(async () => { await server.stop(); await fixture.clean(); + // biome-ignore lint/performance/noDelete: delete process.env.PRERENDER; }); diff --git a/packages/integrations/node/test/url.test.js b/packages/integrations/node/test/url.test.js index 77ca45836..0b19c693b 100644 --- a/packages/integrations/node/test/url.test.js +++ b/packages/integrations/node/test/url.test.js @@ -20,6 +20,7 @@ describe('URL', () => { it('return http when non-secure', async () => { const { handler } = await import('./fixtures/url/dist/server/entry.mjs'); + // biome-ignore lint/style/useConst: let { req, res, text } = createRequestAndResponse({ url: '/', }); @@ -33,6 +34,7 @@ describe('URL', () => { it('return https when secure', async () => { const { handler } = await import('./fixtures/url/dist/server/entry.mjs'); + // biome-ignore lint/style/useConst: let { req, res, text } = createRequestAndResponse({ socket: new TLSSocket(), url: '/', @@ -47,6 +49,7 @@ describe('URL', () => { it('return http when the X-Forwarded-Proto header is set to http', async () => { const { handler } = await import('./fixtures/url/dist/server/entry.mjs'); + // biome-ignore lint/style/useConst: let { req, res, text } = createRequestAndResponse({ headers: { 'X-Forwarded-Proto': 'http' }, url: '/', @@ -61,6 +64,7 @@ describe('URL', () => { it('return https when the X-Forwarded-Proto header is set to https', async () => { const { handler } = await import('./fixtures/url/dist/server/entry.mjs'); + // biome-ignore lint/style/useConst: let { req, res, text } = createRequestAndResponse({ headers: { 'X-Forwarded-Proto': 'https' }, url: '/', @@ -75,6 +79,7 @@ describe('URL', () => { it('includes forwarded host and port in the url', async () => { const { handler } = await import('./fixtures/url/dist/server/entry.mjs'); + // biome-ignore lint/style/useConst: let { req, res, text } = createRequestAndResponse({ headers: { 'X-Forwarded-Proto': 'https', @@ -95,6 +100,7 @@ describe('URL', () => { it('accepts port in forwarded host and forwarded port', async () => { const { handler } = await import('./fixtures/url/dist/server/entry.mjs'); + // biome-ignore lint/style/useConst: let { req, res, text } = createRequestAndResponse({ headers: { 'X-Forwarded-Proto': 'https', diff --git a/packages/integrations/node/tsconfig.json b/packages/integrations/node/tsconfig.json index b9feb9b9b..18443cddf 100644 --- a/packages/integrations/node/tsconfig.json +++ b/packages/integrations/node/tsconfig.json @@ -1,8 +1,6 @@ { "extends": "../../tsconfig.base.json", - "include": [ - "src" - ], + "include": ["src"], "compilerOptions": { "outDir": "./dist" } -- cgit v1.2.3