UNPKG

@sasonarik/nextapi-swagger

Version:

CLI tool to generate Next.js API routes and types from Swagger/OpenAPI specs

69 lines (68 loc) β€’ 2.79 kB
#!/usr/bin/env node "use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const fetchSwagger_1 = require("./utils/fetchSwagger"); const generateRoutes_1 = require("./utils/generateRoutes"); const generateTypes_1 = require("./utils/generateTypes"); const generateClient_1 = require("./utils/generateClient"); const fs_extra_1 = __importDefault(require("fs-extra")); const path_1 = __importDefault(require("path")); const helper_1 = require("./helper/helper"); const prompts_1 = require("./prompts"); const boxen_1 = __importDefault(require("boxen")); const chalk_1 = __importDefault(require("chalk")); (async () => { console.log((0, boxen_1.default)(chalk_1.default.bold.blue("πŸš€ Starting nextapi-swagger CLI..."), { padding: 1, margin: 1, borderStyle: "round", borderColor: "blue", })); const projectRoot = process.cwd(); const isNext = (0, helper_1.isNextJsProject)(projectRoot); if (isNext) { console.log(chalk_1.default.greenBright("βœ… Next.js project detected!")); } else { console.log(chalk_1.default.redBright("❌ This does NOT appear to be a Next.js project.")); return; } const answers = await (0, prompts_1.promptUser)(); const urls = answers.urls .split(",") .map((u) => u.trim()) .filter(Boolean); const srcRoot = (0, helper_1.detectSrcRoot)(); let apiBasePath = path_1.default.join(srcRoot, "app", "api"); await fs_extra_1.default.ensureDir(apiBasePath); await fs_extra_1.default.ensureDir(path_1.default.join(srcRoot, "utils")); await fs_extra_1.default.ensureDir(path_1.default.join(srcRoot, "types")); await (0, helper_1.ensureApiBaseUrlsFile)(srcRoot, urls); const results = await (0, fetchSwagger_1.fetchSwaggerDocs)(urls); for (const { url, spec, apiBase } of results) { if (answers.generateRoutes) { await (0, generateRoutes_1.generateRoutes)(spec, apiBasePath, answers, apiBase); } if (answers.generateTypes) { await (0, generateTypes_1.generateTypes)(spec, srcRoot, apiBasePath); } if (answers.generateClient) { await (0, generateClient_1.generateClient)(spec, srcRoot); } const message = ` πŸŽ‰ ${chalk_1.default.bold.green("Generation complete!")} πŸ“ Files written successfully. ✨ Powered by ՍՑսուբ πŸ”— https://github.com/sasonarik `; console.log((0, boxen_1.default)(message.trim(), { padding: 1, margin: 1, borderStyle: "round", borderColor: "green", })); } })();