From 45fdbc4650610bd8363a05c07f3863cc12391b28 Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Wed, 17 Aug 2022 00:08:40 +1000 Subject: [PATCH] =?UTF-8?q?Don=E2=80=99t=20use=20Buffer.byteLength()=20as?= =?UTF-8?q?=20Deno=20can=E2=80=99t=20use=20it=20(#4324)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Don’t use Buffer.byteLength() as Deno can’t use it * Add changeset * Add tests for Markdown & MDX with Deno Co-authored-by: Matthew Phillips --- .changeset/green-schools-pump.md | 5 ++++ .../astro/src/runtime/server/render/page.ts | 5 ++-- .../integrations/deno/test/basics.test.js | 28 +++++++++++++++++++ .../test/fixtures/basics/astro.config.mjs | 3 +- .../deno/test/fixtures/basics/package.json | 1 + .../fixtures/basics/src/pages/markdown.md | 6 ++++ .../test/fixtures/basics/src/pages/mdx.mdx | 6 ++++ pnpm-lock.yaml | 2 ++ 8 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 .changeset/green-schools-pump.md create mode 100644 packages/integrations/deno/test/fixtures/basics/src/pages/markdown.md create mode 100644 packages/integrations/deno/test/fixtures/basics/src/pages/mdx.mdx diff --git a/.changeset/green-schools-pump.md b/.changeset/green-schools-pump.md new file mode 100644 index 0000000000..b81373abf1 --- /dev/null +++ b/.changeset/green-schools-pump.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Use TextEncoder instead of Buffer.byteLength() for Deno compatibility diff --git a/packages/astro/src/runtime/server/render/page.ts b/packages/astro/src/runtime/server/render/page.ts index 163441d394..166eb01cdc 100644 --- a/packages/astro/src/runtime/server/render/page.ts +++ b/packages/astro/src/runtime/server/render/page.ts @@ -49,10 +49,11 @@ export async function renderPage( } html += rest; } - return new Response(html, { + const bytes = encoder.encode(html); + return new Response(bytes, { headers: new Headers([ ['Content-Type', 'text/html; charset=utf-8'], - ['Content-Length', Buffer.byteLength(html, 'utf-8').toString()], + ['Content-Length', bytes.byteLength.toString()], ]), }); } diff --git a/packages/integrations/deno/test/basics.test.js b/packages/integrations/deno/test/basics.test.js index 4a368e32d1..aee9dd1f35 100644 --- a/packages/integrations/deno/test/basics.test.js +++ b/packages/integrations/deno/test/basics.test.js @@ -59,3 +59,31 @@ Deno.test({ }); }, }); + +Deno.test({ + name: 'Works with Markdown', + async fn() { + await startApp(async () => { + const resp = await fetch('http://127.0.0.1:8085/markdown'); + const html = await resp.text(); + + const doc = new DOMParser().parseFromString(html, `text/html`); + const h1 = doc.querySelector('h1'); + assertEquals(h1.innerText, 'Heading from Markdown'); + }); + }, +}); + +Deno.test({ + name: 'Works with MDX', + async fn() { + await startApp(async () => { + const resp = await fetch('http://127.0.0.1:8085/mdx'); + const html = await resp.text(); + + const doc = new DOMParser().parseFromString(html, `text/html`); + const h1 = doc.querySelector('h1'); + assertEquals(h1.innerText, 'Heading from MDX'); + }); + }, +}); diff --git a/packages/integrations/deno/test/fixtures/basics/astro.config.mjs b/packages/integrations/deno/test/fixtures/basics/astro.config.mjs index d01a93632d..b5187f8916 100644 --- a/packages/integrations/deno/test/fixtures/basics/astro.config.mjs +++ b/packages/integrations/deno/test/fixtures/basics/astro.config.mjs @@ -1,9 +1,10 @@ import { defineConfig } from 'astro/config'; import deno from '@astrojs/deno'; import react from '@astrojs/react'; +import mdx from '@astrojs/mdx'; export default defineConfig({ adapter: deno(), - integrations: [react()], + integrations: [react(), mdx()], output: 'server', }) diff --git a/packages/integrations/deno/test/fixtures/basics/package.json b/packages/integrations/deno/test/fixtures/basics/package.json index 18d1e50e70..ebb4270b23 100644 --- a/packages/integrations/deno/test/fixtures/basics/package.json +++ b/packages/integrations/deno/test/fixtures/basics/package.json @@ -6,6 +6,7 @@ "astro": "workspace:*", "@astrojs/deno": "workspace:*", "@astrojs/react": "workspace:*", + "@astrojs/mdx": "workspace:*", "react": "^18.1.0", "react-dom": "^18.1.0" } diff --git a/packages/integrations/deno/test/fixtures/basics/src/pages/markdown.md b/packages/integrations/deno/test/fixtures/basics/src/pages/markdown.md new file mode 100644 index 0000000000..2e80041134 --- /dev/null +++ b/packages/integrations/deno/test/fixtures/basics/src/pages/markdown.md @@ -0,0 +1,6 @@ +--- +title: Title +description: Description +--- + +# Heading from Markdown diff --git a/packages/integrations/deno/test/fixtures/basics/src/pages/mdx.mdx b/packages/integrations/deno/test/fixtures/basics/src/pages/mdx.mdx new file mode 100644 index 0000000000..6c76e8b8df --- /dev/null +++ b/packages/integrations/deno/test/fixtures/basics/src/pages/mdx.mdx @@ -0,0 +1,6 @@ +--- +title: Title +description: Description +--- + +# Heading from MDX diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 788c6ac140..69f40023b9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2146,12 +2146,14 @@ importers: packages/integrations/deno/test/fixtures/basics: specifiers: '@astrojs/deno': workspace:* + '@astrojs/mdx': workspace:* '@astrojs/react': workspace:* astro: workspace:* react: ^18.1.0 react-dom: ^18.1.0 dependencies: '@astrojs/deno': link:../../.. + '@astrojs/mdx': link:../../../../mdx '@astrojs/react': link:../../../../react astro: link:../../../../../astro react: 18.2.0