swagger-ts-generator
Version:
Given a swagger.json file, generates a number of TypeScript files which can be used as models and model-driven forms in Angular 2 (and above)
146 lines (145 loc) • 5.19 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.logError = exports.log = exports.removeExtension = exports.isInTypesToFilter = exports.getSortedObjectProperties = exports.convertNamespaceToPath = exports.getPathToRoot = exports.removeFolder = exports.getFiles = exports.getDirectories = exports.ensureFolder = exports.ensureFile = exports.writeFileIfContentsIsChanged = exports.readAndCompileTemplateFile = exports.ENCODING = void 0;
const fs_1 = require("fs");
const path_1 = require("path");
const handlebars_1 = require("handlebars");
const moment = require("moment");
const chalk = require("chalk");
const lodash_1 = require("lodash");
exports.ENCODING = 'utf8';
function readAndCompileTemplateFile(templatePath) {
let templateSource = fs_1.readFileSync(templatePath, exports.ENCODING);
let template = handlebars_1.compile(templateSource);
return template;
}
exports.readAndCompileTemplateFile = readAndCompileTemplateFile;
function readFile(outputFileName) {
let file = fs_1.readFileSync(outputFileName, exports.ENCODING);
return file;
}
function writeFile(outputFileName, contents) {
fs_1.writeFileSync(outputFileName, contents, { flag: 'w', encoding: exports.ENCODING });
}
function writeFileIfContentsIsChanged(outputFileName, contents) {
let isChanged = true;
if (fs_1.existsSync(outputFileName)) {
let oldContents = readFile(outputFileName);
isChanged = oldContents !== contents;
}
if (isChanged) {
writeFile(outputFileName, contents);
}
return isChanged;
}
exports.writeFileIfContentsIsChanged = writeFileIfContentsIsChanged;
function ensureFile(outputFileName, contents) {
ensureFolder(path_1.dirname(outputFileName));
if (!fs_1.existsSync(outputFileName)) {
fs_1.writeFileSync(outputFileName, contents, exports.ENCODING);
}
}
exports.ensureFile = ensureFile;
function ensureFolder(folder) {
if (!fs_1.existsSync(folder)) {
fs_1.mkdirSync(folder);
}
}
exports.ensureFolder = ensureFolder;
function getDirectories(srcpath) {
return fs_1.readdirSync(srcpath).filter(file => {
return fs_1.statSync(path_1.join(srcpath, file)).isDirectory();
});
}
exports.getDirectories = getDirectories;
function getFiles(srcpath) {
return fs_1.readdirSync(srcpath).filter(file => {
return fs_1.statSync(path_1.join(srcpath, file)).isFile();
});
}
exports.getFiles = getFiles;
function removeFolder(folder) {
if (fs_1.existsSync(folder)) {
fs_1.readdirSync(folder).forEach((file, index) => {
let curPath = folder + '/' + file;
if (fs_1.lstatSync(curPath).isDirectory()) {
// recurse
removeFolder(curPath);
}
else {
// delete file
fs_1.unlinkSync(curPath);
}
});
fs_1.rmdirSync(folder);
}
}
exports.removeFolder = removeFolder;
function getPathToRoot(namespace) {
let path = './';
if (namespace) {
path = '';
let namespaceLength = namespace.split('.').length;
for (let i = 0; i < namespaceLength; ++i) {
path += '../';
}
}
return path;
}
exports.getPathToRoot = getPathToRoot;
function convertNamespaceToPath(namespace) {
let parts = namespace.split('.');
for (let index = 0; index < parts.length; index++) {
parts[index] = lodash_1.kebabCase(parts[index]);
}
let result = parts.join('/');
// let result = namespace.replace(/\./g, '/');
return result;
}
exports.convertNamespaceToPath = convertNamespaceToPath;
// export function getTypeFromDescription(description: string) {
// if (hasTypeFromDescription(description)) {
// description = description.replace('ts-type', '');
// return description.replace('type', '').trim();
// }
// return description;
// }
// export function hasTypeFromDescription(description: string) {
// if (description) {
// return description.startsWith('ts-type') || description.startsWith('type');
// }
// return false;
// }
function getSortedObjectProperties(object) {
const pairs = lodash_1.sortBy(lodash_1.toPairs(object), 0);
const result = lodash_1.fromPairs(pairs);
return result;
}
exports.getSortedObjectProperties = getSortedObjectProperties;
function isInTypesToFilter(item, key, options) {
if (options && options.typesToFilter) {
const result = !!lodash_1.find(options.typesToFilter, element => {
return element === key;
});
// if (result) {
// console.log('item in typesToFilter', key, result);
// }
return result;
}
return false;
}
exports.isInTypesToFilter = isInTypesToFilter;
function removeExtension(file) {
return file.replace('.ts', '');
}
exports.removeExtension = removeExtension;
function log(message) {
let time = moment().format('HH:mm:SS');
console.log(`[${time}] ${message}`);
}
exports.log = log;
function logError(message) {
let time = moment().format('HH:mm:SS');
console.error(`[${time}]`, chalk.red(`*** ERROR *** ${message}`));
}
exports.logError = logError;
;