Something went wrong. Try again.
doll.systems community website for this one's writing forked from personhood.removal.surgery/doll.systems
Something went wrong. Try again.
1.2 kB · 35 lines
JavaScript
at main
123456789101112131415161718192021222324252627282930313233343536import { readFile } from 'node:fs/promises';import { extname, resolve, sep } from 'node:path';
const contentTypes = { '.woff2': 'font/woff2', '.svg': 'image/svg+xml', '.png': 'image/png', '.avif': 'image/avif',};
export function serveAssets(server, resolveFile) { server.middlewares.use(async (request, response, next) => { try { const path = decodeURIComponent(new URL(request.url ?? '/', 'http://localhost').pathname); const file = await resolveFile(path); if (!file) return next(); const asset = await readFile(file); response.setHeader('Content-Type', contentTypes[extname(file)] ?? 'application/octet-stream'); response.end(asset); } catch (error) { next(error); } });}
export function watchAssets(server, paths, prepare) { const roots = paths.map((path) => resolve(path)); let pending = Promise.resolve(); server.watcher.add(paths); server.watcher.on('all', (_event, path) => { const file = resolve(path); if (!roots.some((root) => file === root || file.startsWith(root + sep))) return; pending = pending.then(prepare).catch((error) => server.config.logger.error(String(error))); });}