| import { Elysia } from "elysia"; | |
| import { swagger } from "@elysiajs/swagger" | |
| Bun.eval = (code: string) => { | |
| const transpiler = new Bun.Transpiler({ | |
| loader: "ts" | |
| }); | |
| return eval(transpiler.transformSync(`eval((${code}))`)); | |
| } | |
| const app = new Elysia() | |
| .use(swagger({ | |
| path : "/docs", | |
| documentation: { | |
| info: { | |
| title : 'Pluvi API Documentation', | |
| version: '1.0.0' | |
| } | |
| } | |
| })) | |
| .get("/", () => "Hello, Elysia!") | |
| .get("/items/:id", ({ params }) => `Item ID: ${params.id}`) | |
| .get("/eval", async ({ query, error }) => { | |
| const { code } = query | |
| if (!code) return error(400, "missing code") | |
| const returned = await Bun.eval(`(async () => { | |
| ${code} | |
| }) | |
| `) | |
| return returned() | |
| }) | |
| .get('/exec', async function* ({ query, error }) { | |
| if (!query.cmd) return error(400, "required query 'cmd'") | |
| const proc = Bun.spawn({ | |
| cmd: ["bash", "-c", query.cmd], | |
| stderr: "pipe", | |
| }); | |
| const err = await new Response(proc.stderr).text(); | |
| if (err) yield err | |
| const out = await new Response(proc.stdout).text(); | |
| if (out) yield out | |
| yield `\n\n\`process exited with code ${proc.signalCode}\`` | |
| }) | |
| .ws('/realtime', { | |
| message(ws, message) { | |
| console.log(message) | |
| ws.send('got:' + message) | |
| } | |
| }) | |
| .listen(process.env.PORT); | |
| console.log(`🦊 Elysia is running at http://localhost:7680`); | |