[READ-ONLY] Mirror of https://github.com/danielroe/nuxt-deno.
2.1 kB
72 lines
1import process from 'https://deno.land/std/node/process.ts'
2import { serve } from 'https://deno.land/std/http/server.ts'
3import { serveTls } from 'https://deno.land/std/http/server.ts'
4
5import '#internal/nitro/virtual/polyfill'
6
7import destr from 'destr'
8import { useRuntimeConfig } from '#internal/nitro'
9import { nitroApp } from '#internal/nitro/app'
10import { requestHasBody, useRequestBody } from '#internal/nitro/utils'
11
12const cert = process.env.NITRO_SSL_CERT
13const key = process.env.NITRO_SSL_KEY
14const port = destr(process.env.NITRO_PORT || process.env.PORT) || 3e3
15const hostname = process.env.NITRO_HOST || process.env.HOST
16
17if (cert && key) {
18 serveTls(handler, { key, cert, port, hostname, onListen })
19} else {
20 serve(handler, { port, hostname, onListen })
21}
22
23function onListen({ port, hostname }) {
24 const baseURL = (useRuntimeConfig().app.baseURL || '').replace(/\/$/, '')
25 const url = `${hostname}:${port}${baseURL}`
26 console.log(`Listening ${url}`)
27}
28
29// async function handler (request: Request, _connInfo: ConnInfo) {
30async function handler(request, _connInfo) {
31 const url = new URL(request.url)
32 let body
33 if (requestHasBody(request)) {
34 body = await useRequestBody(request)
35 }
36
37 const r = await nitroApp.localCall({
38 url: url.pathname + url.search,
39 host: url.hostname,
40 protocol: url.protocol,
41 headers: request.headers,
42 method: request.method,
43 redirect: request.redirect,
44 body,
45 })
46
47 // TODO: fix in nitro
48 const responseBody = r.status !== 304 ? r.body : null
49 return new Response(responseBody, {
50 headers: r.headers,
51 status: r.status || 200,
52 statusText: r.statusText,
53 })
54}
55
56if (process.env.DEBUG) {
57 process.on('unhandledRejection', err =>
58 console.error('[nitro] [dev] [unhandledRejection]', err)
59 )
60 process.on('uncaughtException', err =>
61 console.error('[nitro] [dev] [uncaughtException]', err)
62 )
63} else {
64 process.on('unhandledRejection', err =>
65 console.error('[nitro] [dev] [unhandledRejection] ' + err)
66 )
67 process.on('uncaughtException', err =>
68 console.error('[nitro] [dev] [uncaughtException] ' + err)
69 )
70}
71
72export default {}