mirror of
https://github.com/embarklabs/embark.git
synced 2025-01-09 13:26:10 +00:00
a100dd4260
Added catch to live-plugin-manager install promise running in child process Removed some `else`'s ;) Only showing solc downloading spinner when `--nodashboard` option is used. When installing package in main process and simultaneous downloads fail, all callbacks called with error. Updated logging in npmTimer.
92 lines
2.8 KiB
JavaScript
92 lines
2.8 KiB
JavaScript
const fs = require('fs-extra');
|
|
const path = require('path');
|
|
const constants = require('../../constants');
|
|
const Utils = require('../../utils/utils');
|
|
const ProcessWrapper = require('../../process/processWrapper');
|
|
const PluginManager = require('live-plugin-manager-git-fix').PluginManager;
|
|
const NpmTimer = require('../../versions/npmTimer');
|
|
|
|
|
|
class SolcProcess extends ProcessWrapper {
|
|
|
|
constructor(options){
|
|
super();
|
|
this._logger = options.logger;
|
|
this._showSpinner = options.showSpinner === true;
|
|
}
|
|
|
|
findImports(filename) {
|
|
if (filename.startsWith('http') || filename.startsWith('git')) {
|
|
const fileObj = Utils.getExternalContractUrl(filename);
|
|
filename = fileObj.filePath;
|
|
}
|
|
if (fs.existsSync(filename)) {
|
|
return {contents: fs.readFileSync(filename).toString()};
|
|
}
|
|
if (fs.existsSync(path.join('./node_modules/', filename))) {
|
|
return {contents: fs.readFileSync(path.join('./node_modules/', filename)).toString()};
|
|
}
|
|
if (fs.existsSync(path.join(constants.httpContractsDirectory, filename))) {
|
|
return {contents: fs.readFileSync(path.join(constants.httpContractsDirectory, filename)).toString()};
|
|
}
|
|
return {error: 'File not found'};
|
|
}
|
|
|
|
installAndLoadCompiler(solcVersion, packagePath){
|
|
let self = this;
|
|
return new Promise((resolve, reject) => {
|
|
let manager = new PluginManager({pluginsPath: packagePath});
|
|
let timer;
|
|
if (!fs.existsSync(packagePath)) {
|
|
timer = new NpmTimer({logger: self._logger, packageName: 'solc', version: solcVersion, showSpinner: self._showSpinner});
|
|
}
|
|
|
|
if(timer) timer.start();
|
|
manager.install('solc', solcVersion).then(() => {
|
|
self.solc = manager.require('solc');
|
|
if(timer) timer.end();
|
|
resolve();
|
|
}).catch(reject);
|
|
|
|
});
|
|
}
|
|
|
|
compile(jsonObj, cb) {
|
|
// TODO: only available in 0.4.11; need to make versions warn about this
|
|
try {
|
|
let output = this.solc.compileStandardWrapper(JSON.stringify(jsonObj), this.findImports);
|
|
cb(null, output);
|
|
} catch (err) {
|
|
cb(err.message);
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
let solcProcess;
|
|
process.on('message', (msg) => {
|
|
if (msg.action === "init") {
|
|
solcProcess = new SolcProcess(msg.options);
|
|
return process.send({result: "initiated"});
|
|
}
|
|
|
|
else if (msg.action === 'loadCompiler') {
|
|
solcProcess.solc = require('solc');
|
|
return process.send({result: "loadedCompiler"});
|
|
}
|
|
|
|
else if (msg.action == 'installAndLoadCompiler') {
|
|
solcProcess.installAndLoadCompiler(msg.solcVersion, msg.packagePath).then(() => {
|
|
return process.send({result: "loadedCompiler"});
|
|
});
|
|
}
|
|
|
|
else if (msg.action === 'compile') {
|
|
solcProcess.compile(msg.jsonObj, (err, output) => {
|
|
process.send({result: "compilation-" + msg.id, err: err, output: output});
|
|
});
|
|
}
|
|
});
|
|
|