UNPKG

@ton-actions/tondev-contest

Version:

TON Dev Environment

125 lines 4.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.logRunResult = exports.getRunParams = exports.resolveParams = exports.resolveFunction = void 0; const core_1 = require("@tonclient/core"); const param_parser_1 = require("./param-parser"); async function resolveFunction(terminal, account, functionName, preventUi) { var _a, _b; const functions = (_a = account.contract.abi.functions) !== null && _a !== void 0 ? _a : []; functionName = functionName.trim(); while (functionName === "" && !preventUi) { terminal.log("\nAvailable functions:\n"); functions.forEach((x, i) => terminal.log(` ${i + 1}) ${x.name}`)); terminal.log(); const functionIndex = Number.parseInt(await inputParam(terminal, { name: "Select function", type: "number", })) - 1; if (functionIndex >= 0 && functionIndex < functions.length) { return functions[functionIndex]; } terminal.log("Invalid function number. Try again."); } if (functionName === "") { throw new Error("Function name isn't specified"); } const func = (_b = account.contract.abi.functions) === null || _b === void 0 ? void 0 : _b.find(x => x.name === functionName); if (!func) { throw new Error(`Function not found: ${functionName}`); } return func; } exports.resolveFunction = resolveFunction; function inputLine(terminal, prompt) { terminal.write(` ${prompt}: `); return new Promise((resolve) => { const standard_input = process.stdin; standard_input.setEncoding("utf-8"); standard_input.once("data", function (data) { resolve(`${data}`.trim()); }); }); } async function inputScalar(terminal, param) { while (true) { const value = await inputLine(terminal, `${param.name} (${param.type})`); try { return param_parser_1.ParamParser.scalar(param, `"${value}"`); } catch (err) { terminal.log(err.toString()); } } } async function inputArray(terminal, param) { const item = JSON.parse(JSON.stringify(param)); item.type = param.type.slice(0, -2); let count = Number(await inputLine(terminal, `Enter number of items in ${param.name}`)); const items = []; let i = 1; while (i <= count) { item.name = `${param.name} ${i}`; items.push(await inputParam(terminal, item)); i += 1; } return items; } async function inputParam(terminal, param) { if (param.type.endsWith("[]")) { return inputArray(terminal, param); } else { return inputScalar(terminal, param); } } async function resolveParams(terminal, prompt, params, paramsString, preventUi) { const values = param_parser_1.ParamParser.components({ name: "params", type: "tuple", components: params, }, paramsString); let hasUserInput = false; if (params.length > 0) { terminal.log(prompt); } for (const param of params) { if (param.name in values) { terminal.log(` ${param.name} (${param.type}): ${JSON.stringify(values[param.name])}`); } } for (const param of params) { if (!(param.name in values)) { if (!hasUserInput) { if (preventUi) { throw new Error(`Missing parameter "${param.name}".`); } hasUserInput = true; } values[param.name] = await inputParam(terminal, param); } } return values; } exports.resolveParams = resolveParams; async function getRunParams(terminal, account, args) { const func = await resolveFunction(terminal, account, args.function, args.preventUi); const functionInput = await resolveParams(terminal, `\nParameters of ${func.name}:\n`, func.inputs, args.input, args.preventUi); return { functionName: func.name, functionInput, }; } exports.getRunParams = getRunParams; async function logRunResult(terminal, decoded, transaction) { var _a; const outMessages = (_a = decoded === null || decoded === void 0 ? void 0 : decoded.out_messages) !== null && _a !== void 0 ? _a : []; const details = { transaction, output: decoded === null || decoded === void 0 ? void 0 : decoded.output, out_messages: outMessages.filter(x => (x === null || x === void 0 ? void 0 : x.body_type) !== core_1.MessageBodyType.Output), }; terminal.log(); terminal.log(`Execution has finished with result: ${JSON.stringify(details, undefined, " ")}`); } exports.logRunResult = logRunResult; //# sourceMappingURL=run.js.map