@protocolnebula/ts-openapi-generator
Version:
Build API and models from Swagger/OpenAPI to use in any project type
126 lines • 5.21 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseYAML = exports.parseJSON = exports.fileIsYAML = exports.fileIsJSON = exports.fileExtension = exports.generateFileSync = exports.getTemplate = exports.downloadFile = exports.copyDir = exports.makeDir = exports.getAllFoldersFrom = exports.resolvePluggablePath = void 0;
const fs_extra_1 = require("fs-extra");
const http = require("http");
const https = require("https");
const yaml = require("js-yaml");
const mkdir_recursive_1 = require("mkdir-recursive");
const path_1 = require("path");
const config_model_1 = require("../models/config.model");
const getExtensionRegex = /(\.[a-z0-9]+).*/i;
const isHttpsRegex = /^https/i;
/**
* Find a resource for a pluggable element (like templates)
* @param elementPath Element to find (template name, ...)
* @param internalPath Path starting root (src/ parent folder) in case elementPath path not exists
* This will be concated elementPath: `${internalPath}/${elementPath}`
* @example resolvePluggablePath('angular2', 'templates');
* @returns The resolved path to the resource
* @throws Exception if path not exist or not found
*/
function resolvePluggablePath(elementPath, internalPath) {
// Generate the template path
if ((0, fs_extra_1.existsSync)(elementPath)) {
return elementPath;
}
const resolvedPath = (0, path_1.resolve)(__dirname, '..', internalPath, elementPath);
if ((0, fs_extra_1.existsSync)(resolvedPath)) {
return resolvedPath;
}
throw `Pluggable path for ${elementPath} not found`;
}
exports.resolvePluggablePath = resolvePluggablePath;
function getAllFoldersFrom(path) {
return (0, fs_extra_1.readdirSync)(path, { withFileTypes: true })
.filter((el) => el.isDirectory())
.map((el) => el.name);
}
exports.getAllFoldersFrom = getAllFoldersFrom;
function makeDir(dest) {
(0, mkdir_recursive_1.mkdirSync)(dest);
}
exports.makeDir = makeDir;
function copyDirFilter(src, dst) {
return dst.indexOf('node_modules') === -1;
}
function copyDir(src, dest, overwrite = false) {
console.debug('Copying', src, 'to', dest);
(0, fs_extra_1.copySync)(src, dest, {
overwrite: true,
errorOnExist: true,
filter: copyDirFilter,
});
}
exports.copyDir = copyDir;
function downloadFile(url, dest) {
return __awaiter(this, void 0, void 0, function* () {
makeDir((0, path_1.dirname)(dest));
return new Promise((resolve, error) => {
try {
const file = (0, fs_extra_1.createWriteStream)(dest);
const protocol = isHttpsRegex.test(url) ? https : http;
protocol.get(url, function (response) {
response.pipe(file);
file.on('finish', () => {
file.close();
resolve(dest);
});
file.on('error', (err) => {
error(err);
});
});
}
catch (err) {
error(err);
}
});
});
}
exports.downloadFile = downloadFile;
function getTemplate(templateFile) {
const fullPath = (0, path_1.resolve)(config_model_1.config.templatePath, templateFile);
return (0, fs_extra_1.readFileSync)(fullPath, 'utf-8');
}
exports.getTemplate = getTemplate;
function generateFileSync(file, data) {
(0, fs_extra_1.writeFileSync)(file, data);
}
exports.generateFileSync = generateFileSync;
function fileExtension(filePath) {
const fileBasename = (0, path_1.basename)(filePath);
const firstDot = fileBasename.indexOf('.');
const lastDot = fileBasename.lastIndexOf('.');
const fileExtname = (0, path_1.extname)(fileBasename).replace(getExtensionRegex, '$1');
if (firstDot === lastDot) {
return fileExtname.substr(1);
}
return fileBasename.slice(firstDot, lastDot) + fileExtname;
}
exports.fileExtension = fileExtension;
function fileIsJSON(filePath) {
return fileExtension(filePath) === 'json';
}
exports.fileIsJSON = fileIsJSON;
function fileIsYAML(filePath) {
return fileExtension(filePath) === 'yaml';
}
exports.fileIsYAML = fileIsYAML;
function parseJSON(filePath) {
return JSON.parse((0, fs_extra_1.readFileSync)(filePath, 'utf8'));
}
exports.parseJSON = parseJSON;
function parseYAML(filePath) {
return yaml.safeLoad((0, fs_extra_1.readFileSync)(filePath, 'utf8'));
}
exports.parseYAML = parseYAML;
//# sourceMappingURL=files.util.js.map