UNPKG

tronbox

Version:

TronBox - Simple development framework for Tron

1 lines 3.55 kB
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var CompileError=require("./compileerror");var _require=require("../TronSolc"),getWrapper=_require.getWrapper;var fs=require("fs");var path=require("path");var listeners=process.listeners("uncaughtException");var solc_listener=listeners[listeners.length-1];if(solc_listener){process.removeListener("uncaughtException",solc_listener)}var preReleaseCompilerWarning=require("./messages").preReleaseCompilerWarning;var installedContractsDir="installed_contracts";module.exports={parse:function parse(body,fileName,options){var build_remappings=function build_remappings(){var remappings=[];if(fs.existsSync("ethpm.json")){var ethpm=JSON.parse(fs.readFileSync("ethpm.json"));for(var pkg in ethpm.dependencies){remappings.push(pkg+"/="+path.join(installedContractsDir,pkg,"contracts","/"))}}return remappings};fileName=fileName||"ParsedContract.sol";var remappings=build_remappings();var solcStandardInput={language:"Solidity",sources:(0,_defineProperty2["default"])({},fileName,{content:body}),settings:{remappings:remappings,outputSelection:{"*":{"":["ast"]}}}};var solc=getWrapper(options);var output=solc[solc.compileStandard?"compileStandard":"compile"](JSON.stringify(solcStandardInput),{"import":function _import(file_path){var contents;if(fs.existsSync(file_path)){contents=fs.readFileSync(file_path,{encoding:"UTF-8"})}else{contents="pragma solidity ^0.4.0;"}return{contents:contents}}});output=JSON.parse(output);var errors=output.errors?output.errors.filter(function(solidity_error){return solidity_error.message.indexOf(preReleaseCompilerWarning)<0}):[];errors=output.errors?output.errors.filter(function(solidity_error){return solidity_error.severity!=="warning"}):[];if(errors.length>0){throw new CompileError(errors[0].formattedMessage)}return{contracts:Object.keys(output.contracts[fileName]),ast:output.sources[fileName].ast}},parseImports:function parseImports(body,options){var importErrorKey="TRUFFLE_IMPORT";var failingImportFileName="__Truffle__NotFound.sol";body=body+"\n\nimport '"+failingImportFileName+"';\n";var solcStandardInput={language:"Solidity",sources:{"ParsedContract.sol":{content:body}},settings:{outputSelection:{"ParsedContract.sol":{"*":[]}}}};var solc=getWrapper(options);var output=solc[solc.compileStandard?"compileStandard":"compile"](JSON.stringify(solcStandardInput),{"import":function _import(){return{error:importErrorKey}}});output=JSON.parse(output);var errors=output.errors.filter(function(solidity_error){return solidity_error.message.indexOf(preReleaseCompilerWarning)<0});var nonImportErrors=errors.filter(function(solidity_error){return solidity_error.formattedMessage.indexOf(importErrorKey)<0&&solidity_error.severity!=="warning"});if(nonImportErrors.length>0){throw new CompileError(nonImportErrors[0].formattedMessage)}var imports=errors.map(function(_ref){var formattedMessage=_ref.formattedMessage,message=_ref.message;if(formattedMessage.includes("multiple lines")){var matches=message.match(/Source[^'"]?.*?("|')([^'"]+)("|')/);if(matches){var fullPathRegex=new RegExp("(\"|')(.*".concat(matches[2],")(\"|')"));var importMatches=body.match(fullPathRegex);if(importMatches)return importMatches[2]}}else{var _matches=formattedMessage.match(/import[^'"]?.*("|')([^'"]+)("|')/);if(_matches)return _matches[2]}}).filter(function(match){return match!==undefined&&match!==failingImportFileName});return imports}};