| 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`); |
|
|