#!/usr/bin/env -S deno run --allow-run --allow-net // Automated bundle server import { bool } from "https://code.thunderk.net/typescript/functional/raw/1.0.0/all.ts"; import { Response, serve, ServerRequest, } from "https://deno.land/std@0.79.0/http/server.ts"; export async function processRequest( req: ServerRequest, runner = Deno.run, ): Promise { const params = req.url.split("/").filter(bool); const lib = params[0] || "all"; const version = params[1] || "master"; const file = params.length > 2 ? params.slice(2).join("/") : "all"; const path = `https://code.thunderk.net/typescript/${lib}/raw/${version}/${file}.ts`; if (!path.match(/^[a-z0-9\/\.\-:_]+$/)) { return { status: 400, body: `console.error("bundler error - Invalid path ${path}");`, }; } const process = runner({ cmd: ["deno", "bundle", path], stdout: "piped", }); const output = await process.output(); const status = await process.status(); if (status.success) { return { body: output }; } else { return { status: 500, body: `console.error("bundler error - Failed to bundle ${path}");`, }; } } export async function serveBundles() { const listen = { hostname: "0.0.0.0", port: 8000 }; const server = serve(listen); console.log(`Serving bundles on ${listen.hostname}:${listen.port} ...`); for await (const req of server) { const response = await processRequest(req); await req.respond(response); } } if (import.meta.main) { await serveBundles(); }