UNPKG

openapi-modifier

Version:

This package allows you to automate the process of modifying OpenAPI specifications by applying a set of predefined rules

112 lines (111 loc) 3.98 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.writeOutputFile = exports.readInputFile = void 0; const yaml_1 = __importDefault(require("yaml")); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const json_stringify_nice_1 = __importDefault(require("json-stringify-nice")); const checkIsAvailableFileExtension = (extensions) => { return ['.json', '.yaml', '.yml'].includes(extensions); }; const readInputFile = (baseLogger, inputPath) => { const logger = baseLogger.clone('input-file'); let contentBuffer; try { const absoluteInputPath = path_1.default.isAbsolute(inputPath) ? inputPath : path_1.default.resolve(process.cwd(), inputPath); logger.trace(`Absolute input path: ${absoluteInputPath}`); contentBuffer = fs_1.default.readFileSync(absoluteInputPath); } catch (error) { if (error instanceof Error) { logger.error(error, `Not found input file: ${inputPath}`); } throw error; } const content = contentBuffer.toString(); const inputFileExtension = path_1.default.extname(inputPath) || null; logger.trace(`Input file extension: ${inputFileExtension}`); if (!checkIsAvailableFileExtension(inputFileExtension)) { throw new Error(`Not processable extension! ${inputFileExtension}`); } let document = null; try { switch (inputFileExtension) { case '.yml': case '.yaml': { document = yaml_1.default.parse(content); break; } case '.json': { document = JSON.parse(content); break; } } } catch (error) { if (error instanceof Error) { logger.error(error, `Parse input file: ${content}`); } throw error; } if (!document) { throw new Error('Empty input file!'); } return { context: { sourcePath: inputPath, sourceExtension: inputFileExtension, }, document, }; }; exports.readInputFile = readInputFile; const writeOutputFile = (baseLogger, outputPath, file) => { const logger = baseLogger.clone('output-file'); const outputFileExtension = path_1.default.extname(outputPath) || null; logger.trace(`Input file extension: ${outputFileExtension}`); if (!checkIsAvailableFileExtension(outputFileExtension)) { throw new Error(`Not processable extension! ${outputFileExtension}`); } let content; try { switch (outputFileExtension) { case '.yml': case '.yaml': { content = yaml_1.default.stringify(file.document, { sortMapEntries: true, }); break; } case '.json': { content = (0, json_stringify_nice_1.default)(file.document, null, 4); break; } } } catch (error) { if (error instanceof Error) { logger.error(error, 'Failed to stringified output'); } throw error; } if (!content) { throw new Error('Empty content!'); } try { const absoluteOutputPath = path_1.default.isAbsolute(outputPath) ? outputPath : path_1.default.resolve(process.cwd(), outputPath); logger.trace(`Absolute output path: ${absoluteOutputPath}`); fs_1.default.mkdirSync(path_1.default.dirname(absoluteOutputPath), { recursive: true }); fs_1.default.writeFileSync(absoluteOutputPath, content); } catch (error) { if (error instanceof Error) { logger.error(error, `Failed to output file: ${outputPath}`); } throw error; } }; exports.writeOutputFile = writeOutputFile;