1
0
Fork 0
tsgames/build/server.ts

45 lines
1.7 KiB
TypeScript

import Bun from 'bun';
import path from 'path';
import browser from 'browser-detect';
import { buildHTML } from './html';
import { isGame } from './isGame';
Bun.serve({
async fetch(req) {
const url = new URL(req.url);
const pathname = path.basename(url.pathname);
const gameParam = url.searchParams.get('game');
const game = (gameParam && await isGame(gameParam)) ? gameParam : 'index';
switch (pathname) {
case '':
case '/':
case 'index.html':
try {
const detectedBrowser = browser(req.headers.get('user-agent') ?? '');
const html = await buildHTML(
game,
{
production: url.searchParams.get('production') === 'true', // to debug production builds
mobile: detectedBrowser.mobile || url.searchParams.get('mobile') === 'true',
local: true,
}
);
if (html) {
return new Response(html, {
headers: {
'Content-Type': 'text/html;charset=utf-8'
}
});
}
} catch (e) {
console.error(e);
return new Response(`Error building HTML: ${e}`, { status: 500 });
}
return new Response(`Error building HTML`, { status: 500 });
default:
console.log(`[Dev Server] requested unknown pathname: ${pathname}`);
return new Response(null, { status: 404 });
}
}
})