tronbox
Version:
TronBox - Simple development framework for Tron
1 lines • 2.94 kB
JavaScript
;var pkgVersion="2.0.1";var Ajv=require("ajv");var contractObjectSchema=require("./spec/contract-object.spec.json");var networkObjectSchema=require("./spec/network-object.spec.json");var abiSchema=require("./spec/abi.spec.json");var properties={contractName:{sources:["contractName","contract_name"]},abi:{sources:["abi","interface"],transform:function transform(value){if(typeof value==="string"){try{value=JSON.parse(value)}catch(e){value=undefined}}return value}},bytecode:{sources:["bytecode","binary","unlinked_binary","evm.bytecode.object"],transform:function transform(value){if(value&&value.indexOf("0x")!==0){value="0x"+value}return value}},deployedBytecode:{sources:["deployedBytecode","runtimeBytecode","evm.deployedBytecode.object"],transform:function transform(value){if(value&&value.indexOf("0x")!==0){value="0x"+value}return value}},sourceMap:{sources:["sourceMap","srcmap","evm.bytecode.sourceMap"]},deployedSourceMap:{sources:["deployedSourceMap","srcmapRuntime","evm.deployedBytecode.sourceMap"]},source:{},sourcePath:{},ast:{},legacyAST:{transform:function transform(value,obj){var schemaVersion=obj.schemaVersion||"0.0.0";if(schemaVersion[0]<2){return obj.ast}else{return value}}},compiler:{},networks:{transform:function transform(value){if(value===undefined){value={}}return value}},schemaVersion:{sources:["schemaVersion","schema_version"]},updatedAt:{sources:["updatedAt","updated_at"],transform:function transform(value){if(typeof value==="number"){value=new Date(value).toISOString()}return value}}};function getter(key,transform){if(transform===undefined){transform=function transform(x){return x}}return function(obj){try{return transform(obj[key])}catch(e){return undefined}}}function chain(){var getters=Array.prototype.slice.call(arguments);return function(obj){return getters.reduce(function(cur,get){return get(cur)},obj)}}var TruffleContractSchema={validate:function validate(contractObj){var ajv=new Ajv({useDefaults:true});ajv.addSchema(abiSchema);ajv.addSchema(networkObjectSchema);ajv.addSchema(contractObjectSchema);if(ajv.validate("contract-object.spec.json",contractObj)){return contractObj}else{throw ajv.errors}},normalize:function normalize(objDirty,options){options=options||{};var normalized={};Object.keys(properties).forEach(function(key){var property=properties[key];var value;var sources=property.sources||[key];for(var i=0;value===undefined&&i<sources.length;i++){var source=sources[i];if(typeof source==="string"){var traversals=source.split(".").map(function(k){return getter(k)});source=chain.apply(null,traversals)}value=source(objDirty)}if(property.transform){value=property.transform(value,objDirty)}normalized[key]=value});Object.keys(objDirty).forEach(function(key){if(key.indexOf("x-")===0){normalized[key]=getter(key)(objDirty)}});normalized.schemaVersion=pkgVersion;if(options.validate){this.validate(normalized)}return normalized}};module.exports=TruffleContractSchema;