// Dev server imports import { createBareServer } from "@tomphttp/bare-server-node"; import { createServer } from "http"; import Fastify from "fastify"; import fastifyStatic from "@fastify/static"; import { join } from "node:path"; import { spawn } from "node:child_process"; import { fileURLToPath } from "node:url"; //transports import { baremuxPath } from "@mercuryworkshop/bare-mux/node"; import { epoxyPath } from "@mercuryworkshop/epoxy-transport"; import { libcurlPath } from "@mercuryworkshop/libcurl-transport"; import { bareModulePath } from "@mercuryworkshop/bare-as-module3"; import { writeFileSync } from "fs"; const bare = createBareServer("/bare/", { logErrors: true, }); const fastify = Fastify({ serverFactory: (handler) => { return createServer() .on("request", (req, res) => { if (bare.shouldRoute(req)) { bare.routeRequest(req, res); } else { handler(req, res); } }) .on("upgrade", (req, socket, head) => { if (bare.shouldRoute(req)) { bare.routeUpgrade(req, socket, head); } else { socket.end(); } }); }, }); fastify.register(fastifyStatic, { root: join(fileURLToPath(new URL(".", import.meta.url)), "./static"), decorateReply: false, }); fastify.register(fastifyStatic, { root: join(fileURLToPath(new URL(".", import.meta.url)), "./dist"), prefix: "/scram/", decorateReply: false, }); fastify.register(fastifyStatic, { root: baremuxPath, prefix: "/baremux/", decorateReply: false, }); fastify.register(fastifyStatic, { root: epoxyPath, prefix: "/epoxy/", decorateReply: false, }); fastify.register(fastifyStatic, { root: libcurlPath, prefix: "/libcurl/", decorateReply: false, }); fastify.register(fastifyStatic, { root: bareModulePath, prefix: "/baremod/", decorateReply: false, }); fastify.listen({ port: process.env.PORT || 1337, host: "0.0.0.0", }); writeFileSync(".git/hooks/pre-commit", "pnpm prettier . -w"); const watch = spawn("pnpm", ["rspack", "-w"], { detached: true, cwd: process.cwd(), }); watch.stdout.on("data", (data) => { console.log(`${data}`); }); watch.stderr.on("data", (data) => { console.log(`${data}`); });