@apistudio/apim-cli
Version:
CLI for API Management Products
111 lines (110 loc) • 4.91 kB
JavaScript
import path from "path";
import { isValidAsset } from "../../helpers/apim/asset-helper.js";
import { isValidRestAPI } from "../../helpers/common/rest-api-validation-helper.js";
import { isDirectory, isDirOrFileExists, isYamlFile, readDirectoryContents, readFile, isJsonFile, isOtherFile, getFileNameFromPath, } from "../../helpers/common/fs-helper.js";
import { readMultiYaml, convertToYAMLString, } from "../../helpers/common/yaml-helper.js";
import { readJson } from "../../helpers/common/json-helper.js";
import { showWarning, showInfo, } from "../../helpers/common/message-helper.js";
import { ASSERT_ADDED, DIRECTORY_DOESNT_EXIST, SPEC_ADDED, YAML_SEPARATOR, UNKNOWN_ERROR } from "../../constants/message-constants.js";
import { DebugManager } from "../../debug/debug-manager.js";
const checkAndAddValidFileToZip = (content, excludeKinds, zipFile, filePath, zipFolderPath) => {
if (content) {
const kind = content?.kind ? content?.kind?.toLowerCase() : "";
const validRestApi = isValidRestAPI(content);
const validAsset = isValidAsset(content);
if (validRestApi || validAsset) {
if (!excludeKinds.includes(kind)) {
zipFile.addLocalFile(filePath, zipFolderPath);
if (validRestApi) {
showInfo(SPEC_ADDED + filePath);
}
else {
showInfo(ASSERT_ADDED + filePath);
}
}
}
}
;
};
const combineValidAssetInMultiYaml = (contents, excludeKinds) => {
let combinedYaml = "";
if (!contents)
return combinedYaml;
contents.forEach((content) => {
if (content) {
const kind = content.kind ? content.kind.toLowerCase() : "";
const validRestApi = isValidRestAPI(content);
const validAsset = isValidAsset(content);
if (validRestApi || validAsset) {
if (!excludeKinds.includes(kind)) {
const yamlString = convertToYAMLString(content);
combinedYaml += YAML_SEPARATOR + yamlString;
}
}
}
});
return combinedYaml;
};
export const checkAndAddValidYamlFile = (filePath, zipFolderPath, zipFile, excludeKinds) => {
try {
const fileContent = readFile(path.dirname(filePath), path.basename(filePath));
const yamlContents = readMultiYaml(filePath, fileContent);
// Process muli YAML file
if (yamlContents.length > 1) {
const fileName = getFileNameFromPath(filePath);
const combinedYaml = combineValidAssetInMultiYaml(yamlContents, excludeKinds);
zipFile.addFile(`${zipFolderPath}/${fileName}`, Buffer.from(combinedYaml));
showInfo(ASSERT_ADDED + filePath);
}
// Process single YAML file
else {
checkAndAddValidFileToZip(yamlContents[0], excludeKinds, zipFile, filePath, zipFolderPath);
}
}
catch (error) {
const errorMessage = `${error instanceof Error ? error.message : UNKNOWN_ERROR}`;
throw new Error(errorMessage);
}
};
export const checkAndAddValidJsonFile = (filePath, zipFolderPath, zipFile, excludeKinds) => {
try {
const fileContent = readFile(path.dirname(filePath), path.basename(filePath));
const jsonContent = readJson(filePath, fileContent);
checkAndAddValidFileToZip(jsonContent, excludeKinds, zipFile, filePath, zipFolderPath);
}
catch (error) {
const errorMessage = `${error instanceof Error ? error.message : UNKNOWN_ERROR}`;
throw new Error(errorMessage);
}
};
export const checkAndAddOtherFile = (filePath, zipFolderPath, zipFile) => {
zipFile.addLocalFile(filePath, zipFolderPath);
showInfo(ASSERT_ADDED + filePath);
};
const addValidAssetsToZip = (folderPath, zipFolderPath, zipFile, excludeKinds) => {
if (!isDirOrFileExists(folderPath)) {
if (DebugManager.getInstance().isDebugEnabled()) {
showWarning(`${DIRECTORY_DOESNT_EXIST} ${folderPath}`);
}
return;
}
const items = readDirectoryContents(folderPath);
zipFile.addFile(`${zipFolderPath}/`, Buffer.from(""));
items.forEach((item) => {
const itemPath = path.join(folderPath, item);
const zipItemPath = path.join(zipFolderPath, item);
if (isDirectory(itemPath)) {
addValidAssetsToZip(itemPath, zipItemPath, zipFile, excludeKinds);
}
else if (isYamlFile(itemPath)) {
checkAndAddValidYamlFile(itemPath, zipFolderPath, zipFile, excludeKinds);
}
else if (isJsonFile(itemPath)) {
checkAndAddValidJsonFile(itemPath, zipFolderPath, zipFile, excludeKinds);
}
else if (isOtherFile(itemPath)) {
checkAndAddOtherFile(itemPath, zipFolderPath, zipFile);
}
});
};
export { addValidAssetsToZip };