UNPKG

@frostup/swr-request-generator

Version:

A tool for generating TypeScript code and interface from swagger by using SWR and axios as client.

95 lines (94 loc) 3.93 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const fs = __importStar(require("fs")); const DefinitionsResolver_1 = require("./resolvers/DefinitionsResolver"); const path = __importStar(require("path")); const PathResolver_1 = require("./resolvers/PathResolver"); const axios_1 = __importDefault(require("axios")); const lodash_1 = require("lodash"); const constants_1 = require("./constants"); const commander_1 = __importDefault(require("commander")); const formatters_1 = require("./utils/formatters"); commander_1.default.option("-a, --authorization <value>", "authorization header value").parse(process.argv); const codegenConfigPath = path.resolve("ts-codegen.config.json"); const getCodegenConfig = () => fs.existsSync(codegenConfigPath) ? require(codegenConfigPath) : { output: ".output", fileHeaders: [], clients: [], }; const { output = ".output", fileHeaders, timeout, data, clients, fileName } = getCodegenConfig(); const codegen = (schema) => { if (typeof schema === "string") { console.error(constants_1.ERROR_MESSAGES.INVALID_JSON_FILE_ERROR); return; } if (!fs.existsSync(output)) { fs.mkdirSync(output); } const fileStr = (fileHeaders ? fileHeaders.join("\n") : "") + "\n\n" + constants_1.FILE_TIP + [ ...PathResolver_1.PathResolver.of(schema.paths).resolve().toRequest(), ...DefinitionsResolver_1.DefinitionsResolver.of(schema.components).scanDefinitions().toDeclarations(), ].join("\n\n"); fs.writeFileSync(path.resolve(output, `./${fileName || "request"}.ts`), formatters_1.prettifyCode(fileStr), "utf-8"); }; (data || []).map((file) => { console.log("reading swagger schema from local file...\n"); const schemaStr = fs.readFileSync(file, "utf8"); const schema = formatters_1.convertJsonToString(schemaStr); if (schema) { console.log(constants_1.LOG_MESSAGE.GENERATING + "\n"); codegen(schema); console.log(constants_1.LOG_MESSAGE.SUCCESSFUL + "\n"); } }); if (clients) { const options = commander_1.default.opts(); const instance = axios_1.default.create({ timeout: timeout || 10 * 1000, headers: options.authorization ? { Authorization: options.authorization, } : undefined, }); lodash_1.map(clients, (client, index) => { console.log(`getting swagger schema from client ${index + 1}...\n`); instance .get(client) .then((response) => { console.log(constants_1.LOG_MESSAGE.GENERATING + "\n"); codegen(response.data); console.log(constants_1.LOG_MESSAGE.SUCCESSFUL + "\n"); }) .catch((error) => { console.error(`${error.code}: ${constants_1.ERROR_MESSAGES.FETCH_CLIENT_FAILED_ERROR}`); }); }); }