@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
JavaScript
;
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}`);
});
});
}