diff --git a/.changeset/chilly-sheep-doubt.md b/.changeset/chilly-sheep-doubt.md new file mode 100644 index 000000000..4df048580 --- /dev/null +++ b/.changeset/chilly-sheep-doubt.md @@ -0,0 +1,5 @@ +--- +'@astrojs/deno': patch +--- + +Deno integration now loads environment variables in server runtime diff --git a/packages/integrations/deno/package.json b/packages/integrations/deno/package.json index 810e5abfe..d89c4d43f 100644 --- a/packages/integrations/deno/package.json +++ b/packages/integrations/deno/package.json @@ -22,7 +22,7 @@ "build": "astro-scripts build \"src/**/*.ts\" && tsc", "build:ci": "astro-scripts build \"src/**/*.ts\"", "dev": "astro-scripts dev \"src/**/*.ts\"", - "test": "deno test --allow-run --allow-read --allow-net ./test/" + "test": "deno test --allow-run --allow-read --allow-env --allow-net ./test/" }, "devDependencies": { "astro": "workspace:*", diff --git a/packages/integrations/deno/src/shim.ts b/packages/integrations/deno/src/shim.ts index 1a4a6ee9b..62e82ba30 100644 --- a/packages/integrations/deno/src/shim.ts +++ b/packages/integrations/deno/src/shim.ts @@ -1,4 +1,5 @@ (globalThis as any).process = { argv: [], - env: {}, + // @ts-ignore + env: Deno.env.toObject(), }; diff --git a/packages/integrations/deno/test/basics.test.js b/packages/integrations/deno/test/basics.test.js index bc7322067..4a368e32d 100644 --- a/packages/integrations/deno/test/basics.test.js +++ b/packages/integrations/deno/test/basics.test.js @@ -5,6 +5,12 @@ async function startApp(cb) { await runBuildAndStartApp('./fixtures/basics/', cb); } +// this needs to be here and not in the specific test case, because +// the variables are loaded in the global scope of the built server +// module, which is only executed once upon the first load +const varContent = 'this is a value stored in env variable'; +Deno.env.set('SOME_VARIABLE', varContent); + Deno.test({ name: 'Basics', async fn() { @@ -39,3 +45,17 @@ Deno.test({ }); }, }); + +Deno.test({ + name: 'Correctly loads run-time env variables', + async fn() { + await startApp(async () => { + const resp = await fetch('http://127.0.0.1:8085/'); + const html = await resp.text(); + + const doc = new DOMParser().parseFromString(html, `text/html`); + const p = doc.querySelector('p#env-value'); + assertEquals(p.innerText, varContent); + }); + }, +}); diff --git a/packages/integrations/deno/test/fixtures/basics/src/pages/index.astro b/packages/integrations/deno/test/fixtures/basics/src/pages/index.astro index 4eb15f2f0..29fce0190 100644 --- a/packages/integrations/deno/test/fixtures/basics/src/pages/index.astro +++ b/packages/integrations/deno/test/fixtures/basics/src/pages/index.astro @@ -1,5 +1,6 @@ --- import ReactComponent from '../components/React.jsx'; +const envValue = import.meta.env.SOME_VARIABLE; --- @@ -8,6 +9,7 @@ import ReactComponent from '../components/React.jsx';

Basic App on Deno

+

{envValue}