UNPKG

@apistudio/apim-cli

Version:

CLI for API Management Products

111 lines (110 loc) 4.91 kB
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 };