@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
JavaScript
'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