Removed Worker
This commit is contained in:
parent
b4c73a52d1
commit
efb928b8f1
@ -1,177 +0,0 @@
|
|||||||
// Copyright 2015, 2016 Parity Technologies (UK) Ltd.
|
|
||||||
// This file is part of Parity.
|
|
||||||
|
|
||||||
// Parity is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
|
|
||||||
// Parity is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
import solc from 'solc/browser-wrapper';
|
|
||||||
import { isWebUri } from 'valid-url';
|
|
||||||
|
|
||||||
self.solcVersions = {};
|
|
||||||
self.files = {};
|
|
||||||
self.lastCompile = {
|
|
||||||
sourcecode: '',
|
|
||||||
result: '',
|
|
||||||
version: ''
|
|
||||||
};
|
|
||||||
|
|
||||||
// eslint-disable-next-line no-undef
|
|
||||||
onmessage = (event) => {
|
|
||||||
const message = JSON.parse(event.data);
|
|
||||||
|
|
||||||
switch (message.action) {
|
|
||||||
case 'compile':
|
|
||||||
compile(message.data);
|
|
||||||
break;
|
|
||||||
case 'load':
|
|
||||||
load(message.data);
|
|
||||||
break;
|
|
||||||
case 'setFiles':
|
|
||||||
setFiles(message.data);
|
|
||||||
break;
|
|
||||||
case 'close':
|
|
||||||
close();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
function setFiles (files) {
|
|
||||||
const prevFiles = self.files;
|
|
||||||
const nextFiles = files.reduce((obj, file) => {
|
|
||||||
obj[file.name] = file.sourcecode;
|
|
||||||
return obj;
|
|
||||||
}, {});
|
|
||||||
|
|
||||||
self.files = {
|
|
||||||
...prevFiles,
|
|
||||||
...nextFiles
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function findImports (path) {
|
|
||||||
if (self.files[path]) {
|
|
||||||
if (self.files[path].error) {
|
|
||||||
return { error: self.files[path].error };
|
|
||||||
}
|
|
||||||
|
|
||||||
return { contents: self.files[path] };
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isWebUri(path)) {
|
|
||||||
console.log('[worker] fetching', path);
|
|
||||||
|
|
||||||
fetch(path)
|
|
||||||
.then((r) => r.text())
|
|
||||||
.then((c) => {
|
|
||||||
console.log('[worker]', 'got content at ' + path);
|
|
||||||
self.files[path] = c;
|
|
||||||
|
|
||||||
postMessage(JSON.stringify({
|
|
||||||
event: 'try-again'
|
|
||||||
}));
|
|
||||||
})
|
|
||||||
.catch((e) => {
|
|
||||||
console.error('[worker]', 'fetching', path, e);
|
|
||||||
self.files[path] = { error: e };
|
|
||||||
});
|
|
||||||
|
|
||||||
return { error: '__parity_tryAgain' };
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log(`[worker] path ${path} not found...`);
|
|
||||||
return { error: 'File not found' };
|
|
||||||
}
|
|
||||||
|
|
||||||
function compile (data, optimized = 1) {
|
|
||||||
const { sourcecode, build } = data;
|
|
||||||
const { longVersion } = build;
|
|
||||||
|
|
||||||
if (self.lastCompile.sourcecode === sourcecode && self.lastCompile.longVersion === longVersion) {
|
|
||||||
return postMessage(JSON.stringify({
|
|
||||||
event: 'compiled',
|
|
||||||
data: self.lastCompile.result
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
fetchSolc(build)
|
|
||||||
.then((compiler) => {
|
|
||||||
const input = {
|
|
||||||
'': sourcecode
|
|
||||||
};
|
|
||||||
|
|
||||||
const compiled = compiler.compile({ sources: input }, optimized, findImports);
|
|
||||||
|
|
||||||
self.lastCompile = {
|
|
||||||
version: longVersion, result: compiled,
|
|
||||||
sourcecode
|
|
||||||
};
|
|
||||||
|
|
||||||
postMessage(JSON.stringify({
|
|
||||||
event: 'compiled',
|
|
||||||
data: compiled
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function load (build) {
|
|
||||||
postMessage(JSON.stringify({
|
|
||||||
event: 'loading',
|
|
||||||
data: true
|
|
||||||
}));
|
|
||||||
|
|
||||||
fetchSolc(build)
|
|
||||||
.then(() => {
|
|
||||||
postMessage(JSON.stringify({
|
|
||||||
event: 'loading',
|
|
||||||
data: false
|
|
||||||
}));
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
postMessage(JSON.stringify({
|
|
||||||
event: 'loading',
|
|
||||||
data: false
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetchSolc (build) {
|
|
||||||
const { path, longVersion } = build;
|
|
||||||
|
|
||||||
if (self.solcVersions[path]) {
|
|
||||||
return Promise.resolve(self.solcVersions[path]);
|
|
||||||
}
|
|
||||||
|
|
||||||
const URL = `https://raw.githubusercontent.com/ethereum/solc-bin/gh-pages/bin/${path}`;
|
|
||||||
console.log(`[worker] fetching solc-bin ${longVersion} at ${URL}`);
|
|
||||||
|
|
||||||
return fetch(URL)
|
|
||||||
.then((r) => r.text())
|
|
||||||
.then((code) => {
|
|
||||||
const solcCode = code.replace(/^var Module;/, 'var Module=self.__solcModule;');
|
|
||||||
self.__solcModule = {};
|
|
||||||
|
|
||||||
console.log(`[worker] evaluating ${longVersion}`);
|
|
||||||
|
|
||||||
// eslint-disable-next-line no-eval
|
|
||||||
eval(solcCode);
|
|
||||||
|
|
||||||
console.log(`[worker] done evaluating ${longVersion}`);
|
|
||||||
|
|
||||||
const compiler = solc(self.__solcModule);
|
|
||||||
self.solcVersions[path] = compiler;
|
|
||||||
return compiler;
|
|
||||||
})
|
|
||||||
.catch((e) => {
|
|
||||||
console.error('fetching solc', e);
|
|
||||||
});
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user