Skip to content
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 31 additions & 15 deletions common/cli-utils.js → common/cli-utils.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,32 @@
'use strict';

require('dotenv').config();

const fs = require('fs');
const { Option } = require('commander');
import { Command, Option } from 'commander';
import * as dotenv from 'dotenv';
import * as fs from 'fs';
import * as path from 'path';

dotenv.config();

// Resolve the path relative to the package root, accounting for both source and dist directories
const resolveFromRoot = (relativePath: string) => {
// Check if we're in dist directory
if (__dirname.includes('dist')) {
return path.join(__dirname, '../../', relativePath);
}
// We're in the source directory
return path.join(__dirname, '../', relativePath);
};

// A path to the chain configuration files
const CHAIN_CONFIG_PATH = `${__dirname}/../axelar-chains-config/info`;
const CHAIN_CONFIG_PATH = resolveFromRoot('axelar-chains-config/info');
const CHAIN_ENVIRONMENTS = fs.readdirSync(CHAIN_CONFIG_PATH).map((chainName: string) => chainName.split('.')[0]);

// A list of available chain environments which are the names of the files in the CHAIN_CONFIG_PATH
const CHAIN_ENVIRONMENTS = fs.readdirSync(CHAIN_CONFIG_PATH).map((chainName) => chainName.split('.')[0]);
interface BaseOptions {
ignoreChainNames?: boolean;
ignorePrivateKey?: boolean;
address?: boolean;
}

const addEnvOption = (program, defaultValue) => {
const addEnvOption = (program: Command, defaultValue?: string): void => {
program.addOption(
new Option('-e, --env <env>', 'environment')
.choices(CHAIN_ENVIRONMENTS)
Expand All @@ -21,11 +36,11 @@ const addEnvOption = (program, defaultValue) => {
);
};

const addBaseOptions = (program, options = {}) => {
const addBaseOptions = (program: Command, options: BaseOptions = {}): Command => {
addEnvOption(program);

program.addOption(new Option('-y, --yes', 'skip deployment prompt confirmation').env('YES'));
program.addOption(new Option('--parallel', 'run script parallely wrt chains'));
program.addOption(new Option('--parallel', 'run script in parallel wrt chains'));
program.addOption(new Option('--gasOptions <gasOptions>', 'gas options cli override'));

if (!options.ignoreChainNames) {
Expand All @@ -52,17 +67,15 @@ const addBaseOptions = (program, options = {}) => {
return program;
};

// `optionMethod` is a method such as `addBaseOptions`
// `options` is an option object for optionMethod
const addOptionsToCommands = (program, optionMethod, options) => {
const addOptionsToCommands = <T>(program: Command, optionMethod: (command: Command, options: T) => void, options: T): void => {
if (program.commands.length > 0) {
program.commands.forEach((command) => {
optionMethod(command, options);
});
}
};

const addStoreOptions = (program) => {
const addStoreOptions = (program: Command): void => {
program.addOption(
new Option(
'-a, --artifact-dir <artifactDir>',
Expand All @@ -86,6 +99,9 @@ const addStoreOptions = (program) => {
});
};

export { addEnvOption, addBaseOptions, addOptionsToCommands, addStoreOptions };
export type { BaseOptions };

module.exports = {
addEnvOption,
addBaseOptions,
Expand Down
27 changes: 21 additions & 6 deletions evm/cli-utils.js → evm/cli-utils.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,18 @@
const { Option } = require('commander');
const { addBaseOptions, ...exportedCliUtils } = require('../common/cli-utils');
import { Command, Option } from 'commander';

const addEvmOptions = (program, options = {}) => {
import { BaseOptions, addBaseOptions, addEnvOption, addOptionsToCommands, addStoreOptions } from '../common/cli-utils';

interface EvmOptions extends BaseOptions {
artifactPath?: boolean;
contractName?: boolean;
deployMethod?: string;
salt?: boolean;
skipExisting?: boolean;
upgrade?: boolean;
predictOnly?: boolean;
}

const addEvmOptions = (program: Command, options: EvmOptions = {}): Command => {
addBaseOptions(program, options);

program.addOption(new Option('-v, --verify', 'verify the deployed contract on the explorer').env('VERIFY'));
Expand Down Expand Up @@ -41,7 +52,7 @@ const addEvmOptions = (program, options = {}) => {
return program;
};

const addTopUpOptions = (program) => {
const addTopUpOptions = (program: Command): void => {
program.addOption(new Option('-t, --target <target>', 'target balance for each account').makeOptionMandatory(true));
program.addOption(
new Option('--threshold <threshold>', 'top up accounts only if the balance is below this threshold').makeOptionMandatory(true),
Expand All @@ -56,14 +67,18 @@ const addTopUpOptions = (program) => {
program.addOption(
new Option('--addresses <addresses>', 'comma separated list of addresses to top up')
.default([])
.argParser((addresses) => addresses.split(',').map((address) => address.trim())),
.argParser((addresses: string) => addresses.split(',').map((address) => address.trim())),
);
program.addOption(new Option('-m, --mnemonic <mnemonic>', 'mnemonic').env('MNEMONIC'));
};

module.exports = {
...exportedCliUtils,
addEnvOption,
addBaseOptions,
addOptionsToCommands,
addStoreOptions,
addEvmOptions,
addTopUpOptions,
};

export type { BaseOptions, EvmOptions };
Loading