UNPKG

@kubb/ui

Version:

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

1 lines 12.7 kB
{"version":3,"sources":["../../../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","../src/models/StatusSchema.ts","../package.json","../src/server.ts"],"names":["z","__dirname","path","fileURLToPath","createRoute","createServer","Hono","OpenAPIHono","cors","fs","serve"],"mappings":"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","file":"index.cjs","sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () =>\n typeof document === 'undefined'\n ? new URL(`file:${__filename}`).href\n : (document.currentScript && document.currentScript.src) ||\n new URL('main.js', document.baseURI).href\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","import { z } from '@hono/zod-openapi'\n\nexport const statusSchema = z\n .object({\n name: z.string().optional(),\n percentages: z.record(z.string(), z.number()),\n executed: z.array(z.any()),\n })\n .openapi('Status')\n\nexport type StatusSchema = z.infer<typeof statusSchema>\n","{\n \"name\": \"@kubb/ui\",\n \"version\": \"3.16.1\",\n \"description\": \"User interface components and web dashboard for Kubb, providing a visual interface for managing and monitoring code generation.\",\n \"keywords\": [\n \"ui\",\n \"dashboard\",\n \"web-interface\",\n \"react\",\n \"tailwindcss\",\n \"hono\",\n \"typescript\",\n \"kubb\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/kubb-labs/kubb.git\",\n \"directory\": \"packages/ui\"\n },\n \"license\": \"MIT\",\n \"author\": \"stijnvanhulle\",\n \"sideEffects\": false,\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\",\n \"default\": \"./dist/index.cjs\"\n },\n \"./package.json\": \"./package.json\",\n \"./*\": \"./*\"\n },\n \"main\": \"dist/index.cjs\",\n \"module\": \"dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"typesVersions\": {\n \"*\": {}\n },\n \"files\": [\n \"src\",\n \"static\",\n \"dist\",\n \"!/**/**.test.**\",\n \"!/**/__tests__/**\"\n ],\n \"scripts\": {\n \"build\": \"tsup && vite build\",\n \"clean\": \"npx rimraf ./dist\",\n \"lint\": \"bun biome lint .\",\n \"lint:fix\": \"bun biome lint--fix --unsafe .\",\n \"preview\": \"vite preview\",\n \"release\": \"pnpm publish --no-git-check\",\n \"release:canary\": \"bash ../../.github/canary.sh && node ../../scripts/build.js canary && pnpm publish --no-git-check\",\n \"start\": \"vite & tsup --watch\",\n \"test\": \"vitest --passWithNoTests\",\n \"typecheck\": \"tsc -p ./tsconfig.json --noEmit --emitDeclarationOnly false\"\n },\n \"dependencies\": {\n \"@hono/node-server\": \"^1.16.0\",\n \"@hono/zod-openapi\": \"0.19.2\",\n \"hono\": \"^4.8.5\",\n \"zod\": \"^3.25.76\"\n },\n \"devDependencies\": {\n \"@heroui/react\": \"^2.8.1\",\n \"@heroui/theme\": \"^2.4.19\",\n \"@heroui/use-theme\": \"^2.1.10\",\n \"@kubb/config-ts\": \"workspace:*\",\n \"@kubb/config-tsup\": \"workspace:*\",\n \"@react-aria/visually-hidden\": \"3.8.20\",\n \"@react-types/shared\": \"3.28.0\",\n \"@tanstack/react-query\": \"^5.83.0\",\n \"@types/node\": \"catalog:\",\n \"@types/react\": \"catalog:\",\n \"@types/react-dom\": \"catalog:\",\n \"@vitejs/plugin-react\": \"^4.6.0\",\n \"autoprefixer\": \"10.4.19\",\n \"clsx\": \"2.1.1\",\n \"framer-motion\": \"11.15.0\",\n \"postcss\": \"8.4.38\",\n \"react\": \"catalog:\",\n \"react-dom\": \"catalog:\",\n \"react-router-dom\": \"^7.6.3\",\n \"tailwind-variants\": \"0.3.0\",\n \"tailwindcss\": \"3.4.16\",\n \"tsup\": \"catalog:\",\n \"typescript\": \"catalog:\",\n \"vite\": \"^6.3.5\",\n \"vite-tsconfig-paths\": \"^5.1.4\"\n },\n \"engines\": {\n \"node\": \">=20\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n","import { OpenAPIHono, createRoute } from '@hono/zod-openapi'\nimport { serve } from '@hono/node-server'\nimport { cors } from 'hono/cors'\nimport type { AddressInfo, Server } from 'node:net'\nimport fs from 'node:fs'\nimport { Hono } from 'hono'\nimport { createServer } from 'node:http2'\nimport { z } from '@hono/zod-openapi'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { statusSchema } from './models/StatusSchema.ts'\n\nimport { version } from '../package.json'\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\nconst distPath = path.join(__dirname, '../static')\n\nconst statusRoute = createRoute({\n method: 'get',\n path: '/status',\n response: {},\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: statusSchema,\n },\n },\n description: 'Retrieve the status',\n },\n },\n})\n\nconst restartRoute = createRoute({\n method: 'post',\n path: '/restart',\n response: {},\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({}),\n },\n },\n description: 'Restart creation',\n },\n },\n})\n\nconst stopRoute = createRoute({\n method: 'post',\n path: '/stop',\n response: {},\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({}),\n },\n },\n description: 'Stop creation',\n },\n },\n})\n\ntype Meta = {\n name?: string\n percentages: Record<string, number>\n}\n\ntype Options = {\n getMeta: () => Meta\n restart: () => void\n stop: () => void\n}\n\nfunction findOpenPort(preferredPort: number): Promise<number> {\n return new Promise((resolve, reject) => {\n const server: Server = createServer()\n\n server.listen(preferredPort, () => {\n server.close(() => resolve(preferredPort)) // If port is free, use it\n })\n\n server.on('error', async (err: any) => {\n if (err.code === 'EADDRINUSE') {\n resolve(findOpenPort(preferredPort + 1)) // Try next port if in use\n } else {\n reject(err)\n }\n })\n })\n}\n\nexport async function startServer(options: Options, listeningListener?: (info: AddressInfo) => void) {\n const { stop, restart, getMeta } = options\n\n const app = new Hono()\n const api = new OpenAPIHono()\n\n api.use('*', cors())\n\n api.openapi(statusRoute, (c) => {\n const meta = getMeta()\n\n return c.json(\n {\n name: meta.name,\n percentages: meta.percentages,\n executed: [],\n },\n 200,\n )\n })\n\n api.openapi(stopRoute, (c) => {\n stop()\n\n return c.json({}, 200)\n })\n\n api.openapi(restartRoute, (c) => {\n restart()\n\n return c.json({}, 200)\n })\n\n api.doc('/doc', {\n openapi: '3.0.0',\n info: {\n version: version,\n title: 'Kubb ui',\n },\n })\n\n app.route('/api', api)\n\n // ✅ Serve static files manually (alternative to serveStatic)\n app.get('/*', async (c) => {\n const filePath = path.join(distPath, c.req.path) // Get requested file\n\n // If the file exists, serve it\n if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {\n return new Response(fs.readFileSync(filePath) as unknown as ReadableStream, {\n headers: { 'Content-Type': getMimeType(filePath) },\n })\n }\n\n // Otherwise, return \"index.html\" for SPA routing\n return new Response(fs.readFileSync(path.join(distPath, 'index.html')) as unknown as ReadableStream, {\n headers: { 'Content-Type': 'text/html' },\n })\n })\n\n // ✅ MIME type helper function\n const getMimeType = (filePath: string) => {\n const ext = path.extname(filePath).toLowerCase()\n const mimeTypes: Record<string, string> = {\n '.html': 'text/html',\n '.js': 'text/javascript',\n '.css': 'text/css',\n '.json': 'application/json',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.gif': 'image/gif',\n '.svg': 'image/svg+xml',\n '.ico': 'image/x-icon',\n }\n return mimeTypes[ext] || 'application/octet-stream'\n }\n\n const port = await findOpenPort(5822)\n\n return serve(\n {\n fetch: app.fetch,\n port,\n },\n listeningListener,\n )\n}\n"]}