@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
JavaScript
;
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",
}));
}
})();