@frostup/swr-request-generator
Version:
A tool for generating TypeScript code and interface from swagger by using SWR and axios as client.
73 lines (72 loc) • 2.81 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.convertJsonToString = exports.toTypes = exports.prettifyCode = exports.arrayToObject = exports.addPrefixForInterface = exports.toCapitalCase = void 0;
const lodash_1 = require("lodash");
const prettier_1 = __importDefault(require("prettier"));
const specifications_1 = require("./specifications");
const constants_1 = require("../constants");
const toCapitalCase = (str) => {
if (!str) {
return "";
}
const camelStr = lodash_1.camelCase(str);
return `${camelStr.charAt(0).toUpperCase()}${camelStr.slice(1)}`;
};
exports.toCapitalCase = toCapitalCase;
const addPrefix = (prefix) => (str = "") => `${prefix}${str}`;
exports.addPrefixForInterface = addPrefix("I");
const arrayToObject = (arr = []) => {
let obj = {};
lodash_1.forEach(arr, (item) => {
obj[item] = item;
});
return obj;
};
exports.arrayToObject = arrayToObject;
const prettifyCode = (code) => prettier_1.default.format(code, {
printWidth: 120,
trailingComma: "all",
arrowParens: "always",
parser: "typescript",
});
exports.prettifyCode = prettifyCode;
const toTypes = (definitions) => {
if (lodash_1.isEmpty(definitions)) {
return;
}
const fieldDefinitionList = lodash_1.map(definitions, (value, key) => {
if (specifications_1.isObject(value) && Object.keys(value).length === 1 && !lodash_1.isEmpty(lodash_1.pickBy(value, (type) => type === "FormData"))) {
return `${convertKeyToCamelCaseAndAddQuote(key)}: FormData`;
}
return specifications_1.isObject(value)
? `${convertKeyToCamelCaseAndAddQuote(key)}: ${JSON.stringify(value).replace(/"/g, "")};`
: `${convertKeyToCamelCaseAndAddQuote(key)}: ${lodash_1.replace(value, constants_1.ENUM_SUFFIX, "")};`;
});
return (definitions &&
`{
${fieldDefinitionList.sort().join("\n")}
}`);
};
exports.toTypes = toTypes;
const convertKeyToCamelCaseAndAddQuote = (key) => {
const isOptional = lodash_1.indexOf(key, "?") > -1;
key = lodash_1.trimEnd(key, "?");
const isValidVariableName = /^([a-zA-Z_$][a-zA-Z\d_$]*)$/gm.test(key);
return `'${isValidVariableName ? key : lodash_1.camelCase(exports.toCapitalCase(key))}'${isOptional ? "?" : ""}`;
};
const convertJsonToString = (str, errorMsg = constants_1.ERROR_MESSAGES.INVALID_JSON_FILE_ERROR, output = console.error) => {
if (typeof str !== "string") {
return;
}
try {
return JSON.parse(str);
}
catch (e) {
output(errorMsg);
return;
}
};
exports.convertJsonToString = convertJsonToString;