make compiler module async
This commit is contained in:
parent
27a3a9c3f2
commit
c339732cd6
|
@ -1,11 +1,23 @@
|
|||
/*jshint esversion: 6, loopfunc: true */
|
||||
var solc = require('solc');
|
||||
var async = require('async');
|
||||
|
||||
function asyncEachObject(object, iterator, callback) {
|
||||
async.each(
|
||||
Object.keys(object || {}),
|
||||
function(key, next){
|
||||
iterator(key, object[key], next);
|
||||
},
|
||||
callback
|
||||
);
|
||||
}
|
||||
async.eachObject = asyncEachObject;
|
||||
|
||||
var Compiler = function(options) {
|
||||
this.plugins = options.plugins;
|
||||
};
|
||||
|
||||
Compiler.prototype.compile_contracts = function(contractFiles) {
|
||||
Compiler.prototype.compile_contracts = function(contractFiles, cb) {
|
||||
|
||||
var available_compilers = {
|
||||
//".se": this.compile_serpent
|
||||
|
@ -25,20 +37,25 @@ Compiler.prototype.compile_contracts = function(contractFiles) {
|
|||
|
||||
var compiledObject = {};
|
||||
|
||||
// TODO: warn about files it doesn't know how to compile
|
||||
for (var extension in available_compilers) {
|
||||
var compiler = available_compilers[extension];
|
||||
var matchingFiles = contractFiles.filter(function(file) {
|
||||
return (file.filename.match(/\.[0-9a-z]+$/)[0] === extension);
|
||||
});
|
||||
async.eachObject(available_compilers,
|
||||
function(extension, compiler, callback) {
|
||||
// TODO: warn about files it doesn't know how to compile
|
||||
var matchingFiles = contractFiles.filter(function(file) {
|
||||
return (file.filename.match(/\.[0-9a-z]+$/)[0] === extension);
|
||||
});
|
||||
|
||||
Object.assign(compiledObject, compiler.call(compiler, matchingFiles || []));
|
||||
}
|
||||
|
||||
return compiledObject;
|
||||
compiler.call(compiler, matchingFiles || [], function(compileResult) {
|
||||
Object.assign(compiledObject, compileResult);
|
||||
callback();
|
||||
});
|
||||
},
|
||||
function (err) {
|
||||
cb(compiledObject);
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
Compiler.prototype.compile_solidity = function(contractFiles) {
|
||||
Compiler.prototype.compile_solidity = function(contractFiles, cb) {
|
||||
var input = {};
|
||||
|
||||
for (var i = 0; i < contractFiles.length; i++){
|
||||
|
@ -68,7 +85,7 @@ Compiler.prototype.compile_solidity = function(contractFiles) {
|
|||
compiled_object[className].abiDefinition = JSON.parse(contract.interface);
|
||||
}
|
||||
|
||||
return compiled_object;
|
||||
cb(compiled_object);
|
||||
};
|
||||
|
||||
module.exports = Compiler;
|
||||
|
|
|
@ -39,12 +39,15 @@ ContractsManager.prototype.build = function(done) {
|
|||
async.waterfall([
|
||||
function compileContracts(callback) {
|
||||
var compiler = new Compiler({plugins: self.plugins});
|
||||
// TODO: check if try is still needed
|
||||
try {
|
||||
self.compiledContracts = compiler.compile_contracts(self.contractFiles);
|
||||
compiler.compile_contracts(self.contractFiles, function(compiledObject) {
|
||||
self.compiledContracts = compiledObject;
|
||||
callback();
|
||||
});
|
||||
} catch(err) {
|
||||
return callback(new Error(err.message));
|
||||
}
|
||||
return callback();
|
||||
},
|
||||
function prepareContractsFromConfig(callback) {
|
||||
var className, contract;
|
||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue