UNPKG

@kubb/ui

Version:

User interface components and web dashboard for Kubb, providing a visual interface for managing and monitoring code generation.

162 lines (155 loc) 4.55 kB
'use strict'; var zodOpenapi = require('@hono/zod-openapi'); var nodeServer = require('@hono/node-server'); var cors = require('hono/cors'); var fs = require('fs'); var hono = require('hono'); var http2 = require('http2'); var path = require('path'); var url = require('url'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var fs__default = /*#__PURE__*/_interopDefault(fs); var path__default = /*#__PURE__*/_interopDefault(path); // ../../node_modules/.pnpm/tsup@8.5.0_@microsoft+api-extractor@7.52.8_@types+node@20.19.8__jiti@2.4.2_postcss@8.4.38_typescript@5.8.3_yaml@2.7.1/node_modules/tsup/assets/cjs_shims.js var getImportMetaUrl = () => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.src || new URL("main.js", document.baseURI).href; var importMetaUrl = /* @__PURE__ */ getImportMetaUrl(); var statusSchema = zodOpenapi.z.object({ name: zodOpenapi.z.string().optional(), percentages: zodOpenapi.z.record(zodOpenapi.z.string(), zodOpenapi.z.number()), executed: zodOpenapi.z.array(zodOpenapi.z.any()) }).openapi("Status"); // package.json var version = "3.16.1"; // src/server.ts var __dirname$1 = path__default.default.dirname(url.fileURLToPath(importMetaUrl)); var distPath = path__default.default.join(__dirname$1, "../static"); var statusRoute = zodOpenapi.createRoute({ method: "get", path: "/status", response: {}, responses: { 200: { content: { "application/json": { schema: statusSchema } }, description: "Retrieve the status" } } }); var restartRoute = zodOpenapi.createRoute({ method: "post", path: "/restart", response: {}, responses: { 200: { content: { "application/json": { schema: zodOpenapi.z.object({}) } }, description: "Restart creation" } } }); var stopRoute = zodOpenapi.createRoute({ method: "post", path: "/stop", response: {}, responses: { 200: { content: { "application/json": { schema: zodOpenapi.z.object({}) } }, description: "Stop creation" } } }); function findOpenPort(preferredPort) { return new Promise((resolve, reject) => { const server = http2.createServer(); server.listen(preferredPort, () => { server.close(() => resolve(preferredPort)); }); server.on("error", async (err) => { if (err.code === "EADDRINUSE") { resolve(findOpenPort(preferredPort + 1)); } else { reject(err); } }); }); } async function startServer(options, listeningListener) { const { stop, restart, getMeta } = options; const app = new hono.Hono(); const api = new zodOpenapi.OpenAPIHono(); api.use("*", cors.cors()); api.openapi(statusRoute, (c) => { const meta = getMeta(); return c.json( { name: meta.name, percentages: meta.percentages, executed: [] }, 200 ); }); api.openapi(stopRoute, (c) => { stop(); return c.json({}, 200); }); api.openapi(restartRoute, (c) => { restart(); return c.json({}, 200); }); api.doc("/doc", { openapi: "3.0.0", info: { version, title: "Kubb ui" } }); app.route("/api", api); app.get("/*", async (c) => { const filePath = path__default.default.join(distPath, c.req.path); if (fs__default.default.existsSync(filePath) && fs__default.default.statSync(filePath).isFile()) { return new Response(fs__default.default.readFileSync(filePath), { headers: { "Content-Type": getMimeType(filePath) } }); } return new Response(fs__default.default.readFileSync(path__default.default.join(distPath, "index.html")), { headers: { "Content-Type": "text/html" } }); }); const getMimeType = (filePath) => { const ext = path__default.default.extname(filePath).toLowerCase(); const mimeTypes = { ".html": "text/html", ".js": "text/javascript", ".css": "text/css", ".json": "application/json", ".png": "image/png", ".jpg": "image/jpeg", ".gif": "image/gif", ".svg": "image/svg+xml", ".ico": "image/x-icon" }; return mimeTypes[ext] || "application/octet-stream"; }; const port = await findOpenPort(5822); return nodeServer.serve( { fetch: app.fetch, port }, listeningListener ); } exports.startServer = startServer; //# sourceMappingURL=index.cjs.map //# sourceMappingURL=index.cjs.map