diff options
author | 2022-06-07 11:41:32 -0400 | |
---|---|---|
committer | 2022-06-07 11:41:32 -0400 | |
commit | f3ab822e328725c3905b0adad9889ad37653c24a (patch) | |
tree | a4e7a117de3680483222bd18d89e414a90164298 /packages/integrations/netlify/test | |
parent | ab11179ba71b813a850dcd5f776d3b06d373df91 (diff) | |
download | astro-f3ab822e328725c3905b0adad9889ad37653c24a.tar.gz astro-f3ab822e328725c3905b0adad9889ad37653c24a.tar.zst astro-f3ab822e328725c3905b0adad9889ad37653c24a.zip |
Allow dynamic imports when using Netlify Edge Functions (#3535)
* Allow dynamic imports when using Netlify Edge Functions
* Update deno test script and changeset
Diffstat (limited to 'packages/integrations/netlify/test')
8 files changed, 93 insertions, 1 deletions
diff --git a/packages/integrations/netlify/test/edge-functions/deps.ts b/packages/integrations/netlify/test/edge-functions/deps.ts index 1b23a94f7..498b7e09e 100644 --- a/packages/integrations/netlify/test/edge-functions/deps.ts +++ b/packages/integrations/netlify/test/edge-functions/deps.ts @@ -2,3 +2,4 @@ export { fromFileUrl } from 'https://deno.land/std@0.110.0/path/mod.ts'; export { assertEquals, assert } from 'https://deno.land/std@0.132.0/testing/asserts.ts'; export * from 'https://deno.land/x/deno_dom/deno-dom-wasm.ts'; +export * from 'https://deno.land/std@0.142.0/streams/conversion.ts'; diff --git a/packages/integrations/netlify/test/edge-functions/dynamic-import.test.js b/packages/integrations/netlify/test/edge-functions/dynamic-import.test.js new file mode 100644 index 000000000..d4c61fb1f --- /dev/null +++ b/packages/integrations/netlify/test/edge-functions/dynamic-import.test.js @@ -0,0 +1,27 @@ +// @ts-ignore +import { runBuild, runApp } from './test-utils.ts'; +// @ts-ignore +import { assertEquals, assert, DOMParser } from './deps.ts'; + +// @ts-ignore +Deno.test({ + name: 'Dynamic imports', + async fn() { + let close = await runBuild('./fixtures/dynimport/'); + let stop = await runApp('./fixtures/dynimport/prod.js'); + + try { + const response = await fetch('http://127.0.0.1:8085/'); + assertEquals(response.status, 200); + const html = await response.text(); + + assert(html, 'got some html'); + const doc = new DOMParser().parseFromString(html, `text/html`); + const div = doc.querySelector('#thing'); + assert(div, 'div exists') + } finally { + await close(); + await stop(); + } + }, +}); diff --git a/packages/integrations/netlify/test/edge-functions/fixtures/dynimport/astro.config.mjs b/packages/integrations/netlify/test/edge-functions/fixtures/dynimport/astro.config.mjs new file mode 100644 index 000000000..c55135e43 --- /dev/null +++ b/packages/integrations/netlify/test/edge-functions/fixtures/dynimport/astro.config.mjs @@ -0,0 +1,11 @@ +import { defineConfig } from 'astro/config'; +import { netlifyEdgeFunctions } from '@astrojs/netlify'; + +export default defineConfig({ + adapter: netlifyEdgeFunctions({ + dist: new URL('./dist/', import.meta.url), + }), + experimental: { + ssr: true + } +}) diff --git a/packages/integrations/netlify/test/edge-functions/fixtures/dynimport/package.json b/packages/integrations/netlify/test/edge-functions/fixtures/dynimport/package.json new file mode 100644 index 000000000..201a243d0 --- /dev/null +++ b/packages/integrations/netlify/test/edge-functions/fixtures/dynimport/package.json @@ -0,0 +1,9 @@ +{ + "name": "@test/netlify-edge-astro-dynimport", + "version": "0.0.0", + "private": true, + "dependencies": { + "astro": "workspace:*", + "@astrojs/netlify": "workspace:*" + } +} diff --git a/packages/integrations/netlify/test/edge-functions/fixtures/dynimport/prod.js b/packages/integrations/netlify/test/edge-functions/fixtures/dynimport/prod.js new file mode 100644 index 000000000..3e7d6e64d --- /dev/null +++ b/packages/integrations/netlify/test/edge-functions/fixtures/dynimport/prod.js @@ -0,0 +1,11 @@ +import handler from './.netlify/edge-functions/entry.js'; +import { Server } from 'https://deno.land/std@0.132.0/http/server.ts'; + +const _server = new Server({ + port: 8085, + hostname: '0.0.0.0', + handler, +}); + +_server.listenAndServe(); +console.error(`Server running on port 8085`); diff --git a/packages/integrations/netlify/test/edge-functions/fixtures/dynimport/src/components/Thing.astro b/packages/integrations/netlify/test/edge-functions/fixtures/dynimport/src/components/Thing.astro new file mode 100644 index 000000000..8d8ef929a --- /dev/null +++ b/packages/integrations/netlify/test/edge-functions/fixtures/dynimport/src/components/Thing.astro @@ -0,0 +1,4 @@ +--- + +--- +<div id="thing">testing</div> diff --git a/packages/integrations/netlify/test/edge-functions/fixtures/dynimport/src/pages/index.astro b/packages/integrations/netlify/test/edge-functions/fixtures/dynimport/src/pages/index.astro new file mode 100644 index 000000000..852cb6201 --- /dev/null +++ b/packages/integrations/netlify/test/edge-functions/fixtures/dynimport/src/pages/index.astro @@ -0,0 +1,11 @@ +--- +const { default: Thing } = await import('../components/Thing.astro'); +--- +<html> + <head> + <title>testing</title> + </head> + <body> + <Thing /> + </body> +</html> diff --git a/packages/integrations/netlify/test/edge-functions/test-utils.ts b/packages/integrations/netlify/test/edge-functions/test-utils.ts index 826f64d37..72b411d38 100644 --- a/packages/integrations/netlify/test/edge-functions/test-utils.ts +++ b/packages/integrations/netlify/test/edge-functions/test-utils.ts @@ -1,5 +1,5 @@ // @ts-ignore -import { fromFileUrl } from './deps.ts'; +import { fromFileUrl, readableStreamFromReader } from './deps.ts'; const dir = new URL('./', import.meta.url); export async function runBuild(fixturePath: string) { @@ -11,3 +11,21 @@ export async function runBuild(fixturePath: string) { await proc.status(); return async () => await proc.close(); } + +export async function runApp(entryPath: string) { + const entryUrl = new URL(entryPath, dir) + let proc = Deno.run({ + cmd: ['deno', 'run', '--allow-env', '--allow-net', fromFileUrl(entryUrl)], + //cwd: fromFileUrl(entryUrl), + stderr: 'piped' + }); + const stderr = readableStreamFromReader(proc.stderr); + const dec = new TextDecoder(); + for await(let bytes of stderr) { + let msg = dec.decode(bytes); + if(msg.includes(`Server running`)) { + break; + } + } + return () => proc.close(); +} |