UNPKG

@apistudio/apim-cli

Version:

CLI for API Management Products

72 lines (71 loc) 3.17 kB
/** * Copyright Super iPaaS Integration LLC, an IBM Company 2024 */ import AdmZip from 'adm-zip'; import path from 'path'; // import fs from 'fs'; import { showError, showInfo } from '../../helpers/common/message-helper.js'; import { CHECKING_FOR_PROJECT, CHECKING_ROOT_DIRECTORY } from '../../constants/message-constants.js'; import { ASSERTION, COMMA, ENVIRONMENT, TEST, APIM_MODE } from '../../constants/app-constants.js'; import { checkForRootDirPermission, checkIfAllProjectExists, checkIfRootDirExists } from '../../helpers/apim/root-dir-helper.js'; import { checkAndLoadDependencies } from '../../helpers/apim/build-helper.js'; import { processProjectBuild } from '@apic/studio-build'; import { addValidAssetsToZip } from '../../helpers/common/zip-helper.js'; import { DebugManager } from '../../debug/debug-manager.js'; import { AssetCache } from '../../cache/asset-cache.js'; const excludeKinds = [ TEST, ENVIRONMENT, ASSERTION, ]; const executeBuildProject = async (rootDirPath, projectNames) => { try { AssetCache.getInstance().clear(); AssetCache.getInstance().setProjectNames(projectNames); AssetCache.getInstance().setRootDirPath(rootDirPath); /* (*) Validate rootDirPath */ if (DebugManager.getInstance().isDebugEnabled()) { showInfo(CHECKING_ROOT_DIRECTORY); } checkIfRootDirExists(rootDirPath); checkForRootDirPermission(rootDirPath); /* (*) Validate projectNames */ if (DebugManager.getInstance().isDebugEnabled()) { showInfo(CHECKING_FOR_PROJECT); } checkIfAllProjectExists(rootDirPath, projectNames); /* (*) Iterate and build project archive */ const zipFile = new AdmZip(); buildProjects(rootDirPath, projectNames, zipFile); /* (*) Check and Load Dependencies */ checkAndLoadDependencies(rootDirPath, projectNames, zipFile); /* (*) Save zip file to current directory for debugging */ const zipBuffer = zipFile.toBuffer(); // const debugZipPath = path.join(process.cwd(), 'debug-pre-build.zip'); // fs.writeFileSync(debugZipPath, zipBuffer); // showInfo(`Debug: Saved zip file before processing to: ${debugZipPath}`); const response = await processProjectBuild(zipBuffer, APIM_MODE); if (response && response.success && response.data) { return response.data; } /* (*) If build failed, throw error */ showError('Build failed: ' + (response?.errors || 'Unknown error')); process.exit(1); } catch (error) { showError(error.message); process.exit(1); } }; const buildProject = (rootDirPath, projectName, zipFile) => { const projectPath = path.join(rootDirPath, projectName); const zipProjectPath = projectName; addValidAssetsToZip(projectPath, zipProjectPath, zipFile, excludeKinds); }; const buildProjects = (rootDirPath, projectNames, zipFile) => { const projects = projectNames.split(COMMA); for (const projectName of projects) { buildProject(rootDirPath, projectName, zipFile); } }; export { executeBuildProject };