bc-explorer/routes/_index.js

79 lines
2.3 KiB
JavaScript

// @ts-check
const fs = require("fs")
const {defineEventHandler, defaultContentType, handleCacheHeaders} = require("h3")
const {sync, router} = require("../passthrough")
/** @type {import("../pug-sync")} */
const pugSync = sync.require("../pug-sync")
// Routes
sync.require("./app")
sync.require("./collection-stats")
sync.require("./load-collection")
sync.require("./home")
sync.require("./play")
sync.require("./settings")
// Files
router.get("/static/stacks.css", defineEventHandler({
onBeforeResponse: pugSync.compressResponse,
handler: async event => {
handleCacheHeaders(event, {maxAge: 86400})
defaultContentType(event, "text/css")
return fs.promises.readFile(require.resolve("@stackoverflow/stacks/dist/css/stacks.css"), "utf-8")
}
}))
router.get("/static/style.css", defineEventHandler({
onBeforeResponse: pugSync.compressResponse,
handler: async event => {
defaultContentType(event, "text/css")
return fs.promises.readFile("public/style.css", "utf-8")
}
}))
router.get("/static/htmx.js", defineEventHandler({
onBeforeResponse: pugSync.compressResponse,
handler: async event => {
handleCacheHeaders(event, {maxAge: 86400})
defaultContentType(event, "text/javascript")
return Promise.all(["htmx.org/dist/htmx.js"].map(r =>
fs.promises.readFile(require.resolve(r), "utf-8")
)).then(files => files.join("\n\n\n"))
}
}))
router.get("/static/wordcloud.js", defineEventHandler({
onBeforeResponse: pugSync.compressResponse,
handler: async event => {
handleCacheHeaders(event, {maxAge: 86400})
defaultContentType(event, "text/javascript")
return fs.promises.readFile(require.resolve("wordcloud/src/wordcloud2.js"), "utf-8")
}
}))
router.get("/static/player-marker.js", defineEventHandler({
handler: async event => {
defaultContentType(event, "text/javascript")
return fs.promises.readFile("public/player-marker.js")
}
}))
router.get("/favicon.png", defineEventHandler({
handler: async event => {
handleCacheHeaders(event, {maxAge: 86400})
defaultContentType(event, "image/png")
return fs.promises.readFile("public/favicon.png")
}
}))
router.get("/missing-art.png", defineEventHandler({
handler: async event => {
handleCacheHeaders(event, {maxAge: 86400})
defaultContentType(event, "image/png")
return fs.promises.readFile("public/missing-art.png")
}
}))