website/main.ts

42 lines
1,003 B
TypeScript

import { App, fsRoutes, staticFiles } from 'fresh'
import { type State } from './utils.ts'
import { contentType } from 'jsr:@std/media-types@1/content-type'
export const app = new App<State>()
app.use(staticFiles())
//TEMP fix before updating cssBundler middleware
app.use(async (ctx) => {
const response = await ctx.next()
if (
response.status === 404 &&
!ctx.url.pathname.match(/\/js\/[0-9a-f]+\/\S+\.js/)
) {
const ext = ctx.url.pathname.split('.').at(-1) ?? '.bin'
const mime = contentType(ext) ?? 'application/octet-stream'
try {
const file = await Deno.readFile(`./_fresh/static/${ctx.url.pathname}`)
return new Response(file, {
headers: {
'Content-Type': mime,
},
})
} catch {
//TEMP don't handle specific error for now
return response
}
}
return response
})
await fsRoutes(app, {
dir: './',
loadIsland: (path) => import(`./islands/${path}`),
loadRoute: (path) => import(`./routes/${path}`),
})
if (import.meta.main) {
await app.listen()
}