UNPKG

tronbox

Version:

TronBox - Simple development framework for Tron

1 lines 4.53 kB
"use strict";var OS=require("os");var dir=require("node-dir");var path=require("path");var async=require("async");var debug=require("debug")("lib:debug");var commandReference={o:"step over",i:"step into",u:"step out",n:"step next",";":"step instruction",p:"print instruction",h:"print this help",v:"print variables and values",":":"evaluate expression - see `v`","+":"add watch expression (`+:<expr>`)","-":"remove watch expression (-:<expr>)","?":"list existing watch expressions",b:"toggle breakpoint",c:"continue until breakpoint",q:"quit"};var DebugUtils={gatherArtifacts:function gatherArtifacts(config){return new Promise(function(accept,reject){dir.files(config.contracts_build_directory,function(err,files){if(err)return reject(err);var contracts=files.filter(function(file_path){return path.extname(file_path)===".json"}).map(function(file_path){return path.basename(file_path,".json")}).map(function(contract_name){return config.resolver.require(contract_name)});async.each(contracts,function(abstraction,finished){finished()},function(err){if(err)return reject(err);accept(contracts.map(function(contract){debug("contract.sourcePath: %o",contract.sourcePath);return{contractName:contract.contractName,source:contract.source,sourceMap:contract.sourceMap,sourcePath:contract.sourcePath,binary:contract.binary,ast:contract.ast,deployedBinary:contract.deployedBinary,deployedSourceMap:contract.deployedSourceMap}}))})})})},formatStartMessage:function formatStartMessage(){var lines=["","Gathering transaction data...",""];return lines.join(OS.EOL)},formatCommandDescription:function formatCommandDescription(commandId){return"("+commandId+") "+commandReference[commandId]},formatAffectedInstances:function formatAffectedInstances(instances){var hasAllSource=true;var lines=Object.keys(instances).map(function(address){var instance=instances[address];if(instance.contractName){return" "+address+" - "+instance.contractName}if(!instance.source){hasAllSource=false}return" "+address+"(UNKNOWN)"});if(!hasAllSource){lines.push("");lines.push("Warning: The source code for one or more contracts could not be found.")}return lines.join(OS.EOL)},formatHelp:function formatHelp(lastCommand){if(!lastCommand){lastCommand="n"}var prefix=["Commands:","(enter) last command entered ("+commandReference[lastCommand]+")"];var commandSections=[["o","i","u","n"],[";","p","h","q"],["b","c"],["+","-"],["?"],["v",":"]].map(function(shortcuts){return shortcuts.map(DebugUtils.formatCommandDescription).join(", ")});var suffix=[""];var lines=prefix.concat(commandSections).concat(suffix);return lines.join(OS.EOL)},formatLineNumberPrefix:function formatLineNumberPrefix(line,number,cols,tab){if(!tab){tab=" "}var prefix=number+"";while(prefix.length<cols){prefix=" "+prefix}prefix+=": ";return prefix+line.replace(/\t/g,tab)},formatLinePointer:function formatLinePointer(line,startCol,endCol,padding,tab){if(!tab){tab=" "}padding+=2;var prefix="";while(prefix.length<padding){prefix+=" "}var output="";for(var i=0;i<line.length;i++){var pointedAt=i>=startCol&&i<endCol;var isTab=line[i]==="\t";var additional=void 0;if(isTab){additional=tab}else{additional=" "}if(pointedAt){additional=additional.replace(/./g,"^")}output+=additional}return prefix+output},formatRangeLines:function formatRangeLines(source,range,contextBefore){if(!contextBefore){contextBefore=2}var startBeforeIndex=Math.max(range.start.line-contextBefore,0);var prefixLength=(range.start.line+1+"").length;var beforeLines=source.filter(function(line,index){return index>=startBeforeIndex&&index<range.start.line}).map(function(line,index){var number=startBeforeIndex+index+1;return DebugUtils.formatLineNumberPrefix(line,number,prefixLength)});var line=source[range.start.line];var number=range.start.line+1;var pointerStart=range.start.column;var pointerEnd;if(range.end&&range.start.line===range.end.line){pointerEnd=range.end.column}else{pointerEnd=line.length}var allLines=beforeLines.concat([DebugUtils.formatLineNumberPrefix(line,number,prefixLength),DebugUtils.formatLinePointer(line,pointerStart,pointerEnd,prefixLength)]);return allLines.join(OS.EOL)},formatInstruction:function formatInstruction(traceIndex,instruction){return"("+traceIndex+") "+instruction.name+" "+(instruction.pushData||"")},formatStack:function formatStack(stack){var formatted=stack.map(function(item,index){item=" "+item;if(index===stack.length-1){item+=" (top)"}return item});if(!stack.length){formatted.push(" No data on stack.")}return formatted.join(OS.EOL)}};module.exports=DebugUtils;