diff options
author | 2022-03-30 08:42:19 -0400 | |
---|---|---|
committer | 2022-03-30 08:42:19 -0400 | |
commit | 13b271bc7d032f5f3749a9868532d12d442a09ef (patch) | |
tree | 4195d8472d0bb29b822054cf2b6184015f1e9eed /packages/integrations/deno/src | |
parent | 364ece8776e2544a141c390a73faed325e0deb5b (diff) | |
download | astro-13b271bc7d032f5f3749a9868532d12d442a09ef.tar.gz astro-13b271bc7d032f5f3749a9868532d12d442a09ef.tar.zst astro-13b271bc7d032f5f3749a9868532d12d442a09ef.zip |
Deno adapter (#2934)
* Bundle everything, commit 1
* Get everything working
* Remove dependency on readable-stream
* Adds a changeset
* Fix ts errors
* Use the node logger in tests
* Callback the logger when done writing
* Fix test helper to await the callback
* Use serialize-javascript again
* Remove dead code
* Rename hook
* Oops
Diffstat (limited to 'packages/integrations/deno/src')
-rw-r--r-- | packages/integrations/deno/src/index.ts | 33 | ||||
-rw-r--r-- | packages/integrations/deno/src/server.ts | 51 | ||||
-rw-r--r-- | packages/integrations/deno/src/shim.ts | 5 |
3 files changed, 89 insertions, 0 deletions
diff --git a/packages/integrations/deno/src/index.ts b/packages/integrations/deno/src/index.ts new file mode 100644 index 000000000..c6f6207a5 --- /dev/null +++ b/packages/integrations/deno/src/index.ts @@ -0,0 +1,33 @@ +import type { AstroAdapter, AstroIntegration } from 'astro'; + +interface Options { + port?: number; + hostname?: string; +} + +export function getAdapter(args?: Options): AstroAdapter { + return { + name: '@astrojs/deno', + serverEntrypoint: '@astrojs/deno/server.js', + args: args ?? {}, + exports: ['stop', 'handle'] + }; +} + +export default function createIntegration(args?: Options): AstroIntegration { + return { + name: '@astrojs/deno', + hooks: { + 'astro:config:done': ({ setAdapter }) => { + setAdapter(getAdapter(args)); + }, + 'astro:build:setup': ({ vite, target }) => { + if(target === 'server') { + vite.ssr = { + noExternal: true + }; + } + } + }, + }; +} diff --git a/packages/integrations/deno/src/server.ts b/packages/integrations/deno/src/server.ts new file mode 100644 index 000000000..8e7ecf17d --- /dev/null +++ b/packages/integrations/deno/src/server.ts @@ -0,0 +1,51 @@ +import './shim.js'; +import type { SSRManifest } from 'astro'; +import { App } from 'astro/app'; +// @ts-ignore +import { Server } from "https://deno.land/std@0.132.0/http/server.ts"; + +interface Options { + port?: number; + hostname?: string; + start?: boolean; +} + +let _server: Server | undefined = undefined; +let _startPromise: Promise<void> | undefined = undefined; + +export function start(manifest: SSRManifest, options: Options) { + if(options.start === false) { + return; + } + + const app = new App(manifest); + + const handler = async (request: Request) => { + const response = await app.render(request); + return response; + }; + + _server = new Server({ + port: options.port ?? 8085, + hostname: options.hostname ?? "0.0.0.0", + handler, + //onError: options.onError, + }); + + _startPromise = _server.listenAndServe(); +} + +export function createExports(manifest: SSRManifest) { + const app = new App(manifest); + return { + async stop() { + if(_server) { + _server.close(); + } + await Promise.resolve(_startPromise); + }, + async handle(request: Request) { + return app.render(request); + } + } +} diff --git a/packages/integrations/deno/src/shim.ts b/packages/integrations/deno/src/shim.ts new file mode 100644 index 000000000..11c1c912b --- /dev/null +++ b/packages/integrations/deno/src/shim.ts @@ -0,0 +1,5 @@ + +(globalThis as any).process = { + argv: [], + env: {} +}; |