UNPKG

@holographxyz/cli

Version:
313 lines (312 loc) 12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.checkTransactionHashFlag = exports.checkTokenUriTypeFlag = exports.checkTokenIdFlag = exports.checkStringFlag = exports.checkOptionFlag = exports.checkNumberFlag = exports.checkNetworkFlag = exports.checkDeploymentTypeFlag = exports.checkContractAddressFlag = exports.checkBytecodeTypeFlag = exports.checkBytecodeFlag = exports.validateTransactionHash = exports.validateTokenIdInput = exports.validateNonEmptyString = exports.validateNonEmptyNumber = exports.validateNetwork = exports.validateContractAddress = exports.validateBytes = exports.portValidator = exports.transactionHashValidator = exports.tokenValidator = exports.numberValidator = exports.nonEmptyStringValidator = exports.bytesValidator = exports.addressValidator = void 0; const tslib_1 = require("tslib"); const inquirer = tslib_1.__importStar(require("inquirer")); const bignumber_1 = require("@ethersproject/bignumber"); const networks_1 = require("@holographxyz/networks"); const bytecodes_1 = require("./bytecodes"); const contract_deployment_1 = require("./contract-deployment"); const asset_deployment_1 = require("./asset-deployment"); const utils_1 = require("./utils"); exports.addressValidator = /^0x[\da-f]{40}$/i; exports.bytesValidator = /^0x[\da-f]+$/i; exports.nonEmptyStringValidator = /^[\S ]+$/i; exports.numberValidator = /^\d{1,78}$/; exports.tokenValidator = /^((0x[\da-f]{1,64})|(\d{1,78}))$/i; exports.transactionHashValidator = /^0x[\da-f]{64}$/i; const portValidator = (port) => port >= 3000 && port <= 65535; exports.portValidator = portValidator; const validateBytes = async (input) => { const output = input.trim().toLowerCase(); if (exports.bytesValidator.test(output)) { return output; } throw new Error('Invalid bytes provided ' + output); }; exports.validateBytes = validateBytes; const validateContractAddress = async (input) => { const output = input.trim().toLowerCase(); if (exports.addressValidator.test(output)) { return output; } throw new Error('Invalid contact address provided ' + output); }; exports.validateContractAddress = validateContractAddress; const validateNetwork = async (input) => { const output = input.trim(); if (networks_1.supportedNetworks.includes(output)) { return output; } if (networks_1.supportedShortNetworks.includes(output)) { return (0, networks_1.getNetworkByShortKey)(output).key; } throw new Error('Invalid/unsupported network provided ' + output); }; exports.validateNetwork = validateNetwork; const validateNonEmptyNumber = async (input) => { const output = input.trim(); if (exports.numberValidator.test(output)) { return output; } throw new Error('Invalid number provided ' + output); }; exports.validateNonEmptyNumber = validateNonEmptyNumber; const validateNonEmptyString = async (input) => { const output = input.trim(); if (exports.nonEmptyStringValidator.test(output)) { return output; } throw new Error('Invalid bytes provided ' + output); }; exports.validateNonEmptyString = validateNonEmptyString; const validateTokenIdInput = async (input) => { const output = input.trim().toLowerCase(); if (exports.tokenValidator.test(output)) { if (exports.numberValidator.test(output)) { return '0x' + (0, utils_1.remove0x)(bignumber_1.BigNumber.from(output).toHexString()).padStart(64, '0'); } return output; } throw new Error('Invalid tokenId provided ' + output); }; exports.validateTokenIdInput = validateTokenIdInput; const validateTransactionHash = async (input) => { const output = input.trim().toLowerCase(); if (exports.transactionHashValidator.test(output)) { return output; } throw new Error('Invalid transaction hash provided ' + output); }; exports.validateTransactionHash = validateTransactionHash; const checkBytecodeFlag = async (input, prompt) => { if (input === undefined) { const bytecodePrompt = await inquirer.prompt([ { name: 'bytecode', message: prompt, type: 'string', validate: async (input) => { await (0, exports.validateBytes)(input); return true; }, }, ]); return (0, exports.validateBytes)(bytecodePrompt.bytecode); } return input; }; exports.checkBytecodeFlag = checkBytecodeFlag; const checkBytecodeTypeFlag = async (input, prompt, exclude) => { if (input !== undefined) { input = input.trim(); } let bytecodeTypeList = Object.values(bytecodes_1.BytecodeType); if (exclude !== undefined) { bytecodeTypeList = bytecodeTypeList.filter((element) => { return !(element === exclude); }); } if (input === undefined || (input !== undefined && !bytecodeTypeList.includes(input))) { const bytecodeTypePrompt = await inquirer.prompt([ { name: 'bytecodeType', message: prompt, type: 'list', choices: bytecodeTypeList, }, ]); return bytecodes_1.BytecodeType[bytecodeTypePrompt.bytecodeType]; } return bytecodes_1.BytecodeType[input]; }; exports.checkBytecodeTypeFlag = checkBytecodeTypeFlag; const checkContractAddressFlag = async (input, prompt) => { if (input === undefined) { const contractAddressPrompt = await inquirer.prompt([ { name: 'contractAddress', message: prompt, type: 'string', validate: async (input) => { await (0, exports.validateContractAddress)(input); return true; }, }, ]); return (0, exports.validateContractAddress)(contractAddressPrompt.contractAddress); } return input; }; exports.checkContractAddressFlag = checkContractAddressFlag; const checkDeploymentTypeFlag = async (input, prompt, exclude) => { if (input !== undefined) { input = input.trim(); } let deploymentTypeList = Object.values(contract_deployment_1.DeploymentType); if (exclude !== undefined) { deploymentTypeList = deploymentTypeList.filter((element) => { return !(element === exclude); }); } if (input === undefined || (input !== undefined && !deploymentTypeList.includes(input))) { const deploymentTypePrompt = await inquirer.prompt([ { name: 'deploymentType', message: prompt, type: 'list', choices: contract_deployment_1.deploymentProcesses, }, ]); return contract_deployment_1.DeploymentType[deploymentTypePrompt.deploymentType]; } return contract_deployment_1.DeploymentType[input]; }; exports.checkDeploymentTypeFlag = checkDeploymentTypeFlag; const checkNetworkFlag = async (networks, input, prompt, exclude) => { if (input !== undefined) { input = input.trim().toLowerCase(); } let networkList = Object.keys(networks); if (exclude !== undefined) { networkList = networkList.filter((element) => { return !(element === exclude); }); } if (input === undefined || (input !== undefined && !networkList.includes(input))) { const networkPrompt = await inquirer.prompt([ { name: 'network', message: prompt, type: 'list', choices: networkList, }, ]); return networkPrompt.network; } return input; }; exports.checkNetworkFlag = checkNetworkFlag; const checkNumberFlag = async (input, prompt) => { if (input === undefined) { const numberPrompt = await inquirer.prompt([ { name: 'numberString', message: prompt, type: 'string', validate: async (input) => { await (0, exports.validateNonEmptyNumber)(input); return true; }, }, ]); return Number.parseInt(await (0, exports.validateNonEmptyNumber)(numberPrompt.numberString), 10); } return Number.parseInt(input, 10); }; exports.checkNumberFlag = checkNumberFlag; const checkOptionFlag = async (options, input, prompt, exclude) => { if (input !== undefined) { input = input.trim(); } let list = [...options]; if (exclude !== undefined) { list = list.filter((element) => { if (typeof element === 'string') { return !(element === exclude); } return !(element.name === exclude || element.value === exclude); }); } if (input === undefined || (input !== undefined && !list.includes(input))) { const optionPrompt = await inquirer.prompt([ { name: 'option', message: prompt, type: 'list', choices: list, }, ]); return optionPrompt.option; } return input; }; exports.checkOptionFlag = checkOptionFlag; const checkStringFlag = async (input, prompt) => { if (input === undefined) { const stringPrompt = await inquirer.prompt([ { name: 'inputString', message: prompt, type: 'string', validate: async (input) => { await (0, exports.validateNonEmptyString)(input); return true; }, }, ]); return (0, exports.validateNonEmptyString)(stringPrompt.inputString); } return input; }; exports.checkStringFlag = checkStringFlag; const checkTokenIdFlag = async (input, prompt) => { if (input === undefined) { const tokenIdPrompt = await inquirer.prompt([ { name: 'tokenId', message: prompt, type: 'string', validate: async (input) => { await (0, exports.validateTokenIdInput)(input); return true; }, }, ]); return (0, exports.validateTokenIdInput)(tokenIdPrompt.tokenId); } return input; }; exports.checkTokenIdFlag = checkTokenIdFlag; const checkTokenUriTypeFlag = async (input, prompt, exclude) => { if (input !== undefined) { input = input.trim(); } let tokenUriTypeList = Object.values(asset_deployment_1.TokenUriType); if (exclude !== undefined) { tokenUriTypeList = tokenUriTypeList.filter((element) => { return !(element === exclude); }); } if (input === undefined || (input !== undefined && !tokenUriTypeList.includes(input))) { const tokenUriTypePrompt = await inquirer.prompt([ { name: 'tokenUriType', message: prompt, type: 'list', choices: tokenUriTypeList, }, ]); return asset_deployment_1.TokenUriType[tokenUriTypePrompt.tokenUriType]; } return asset_deployment_1.TokenUriType[input]; }; exports.checkTokenUriTypeFlag = checkTokenUriTypeFlag; const checkTransactionHashFlag = async (input, prompt) => { if (input === undefined) { const transactionHashPrompt = await inquirer.prompt([ { name: 'transactionHash', message: prompt, type: 'string', validate: async (input) => { await (0, exports.validateTransactionHash)(input); return true; }, }, ]); return (0, exports.validateTransactionHash)(transactionHashPrompt.transactionHash); } return input; }; exports.checkTransactionHashFlag = checkTransactionHashFlag;