#! /usr/bin/env node // Import necessary modules import yargs from 'yargs'; import { hideBin } from 'yargs/helpers'; import BuildService from '../services/buildService'; import FileService from '../services/fileService'; import ora from 'ora'; // Configure yargs to parse command line arguments yargs(hideBin(process.argv)) .command( 'env', 'Show all available API-Lib environments of the project', () => {}, (argv) => { environmentsCommand(); }, ) .command( 'init', 'Initialize the Project', () => {}, (argv) => { initCommand(); }, ) .command( 'deploy ', 'Deploy all routes in your project to the selected environment', () => {}, (argv: any) => { deployCommand(argv.environment); }, ) .demandCommand(1) // Require at least one command .strict() // Enforce strict mode .scriptName('apilib') // Set the script name for usage instructions .parse(); // Parse the arguments // Define the 'environments' command function function environmentsCommand() { // Implementation here } // Define the 'init' command function async function initCommand() { console.info(` `); console.info(`==============================`); console.info(` `); const startTime = performance.now(); const spinner = ora('Initializing API-Lib').start(); const [status, message] = await FileService.generateConfigFile(); const endTime = performance.now(); const elapsedTime = endTime - startTime; spinner.text = `${message} - ${elapsedTime.toFixed(2)}ms`; status ? spinner.succeed() : spinner.fail(); console.info(` `); console.info(`==============================`); } // Define the 'deploy' command function async function deployCommand(environment: string) { console.info(` `); console.info(`==============================`); console.info(` `); const startTime = performance.now(); const spinner = ora('Loading config file').start(); const [status, message] = await FileService.getConfigInfo(); const endTime = performance.now(); const elapsedTime = endTime - startTime; if (!status || !message.projectid || !message.secretkey) { spinner.text = `Error while reading config - ${elapsedTime.toFixed(2)}ms`; spinner.fail(); } else { spinner.text = `Found apilib.config.json - ${elapsedTime.toFixed(2)}ms`; spinner.succeed(); } console.info(` `); console.info(`\x1b[34mDeploying to ${environment}`); const operatorFolder = await FileService.findOperatorFolder(); console.info(` `); console.info(`Found operator folder: \x1b[33m${operatorFolder}\x1b[0m`); console.info(` `); await BuildService.buildAllFilesInFolder(operatorFolder, environment, message.projectid, message.secretkey); console.info(`==============================`); }