fix using external URL

pull/5370/head
yann300 4 years ago
parent 008099e7c9
commit 94f00d814f
  1. 4
      apps/remix-ide/src/app/compiler/compiler-helpers.js
  2. 9
      apps/remix-ide/src/app/compiler/compiler-sourceVerifier-fetchAndCompile.js

@ -3,10 +3,10 @@ import { canUseWorker, urlFromVersion } from './compiler-utils'
import { Compiler } from '@remix-project/remix-solidity' import { Compiler } from '@remix-project/remix-solidity'
import CompilerAbstract from './compiler-abstract' import CompilerAbstract from './compiler-abstract'
export const compile = async (compilationTargets, settings) => { export const compile = async (compilationTargets, settings, contentResolverCallback) => {
const res = await (() => { const res = await (() => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const compiler = new Compiler(() => {}) const compiler = new Compiler(contentResolverCallback || (() => {}))
compiler.set('evmVersion', settings.evmVersion) compiler.set('evmVersion', settings.evmVersion)
compiler.set('optimize', settings.optimize) compiler.set('optimize', settings.optimize)
compiler.set('language', settings.language) compiler.set('language', settings.language)

@ -92,10 +92,14 @@ export default class FetchAndCompile extends Plugin {
if (url.includes('ipfs')) { if (url.includes('ipfs')) {
const stdUrl = `ipfs://${url.split('/')[2]}` const stdUrl = `ipfs://${url.split('/')[2]}`
const source = await this.call('contentImport', 'resolve', stdUrl) const source = await this.call('contentImport', 'resolve', stdUrl)
if (await this.call('contentImport', 'isExternalUrl', file)) {
// nothing to do, the compiler callback will handle those
} else {
file = file.replace('browser/', '') // should be fixed in the remix IDE end. file = file.replace('browser/', '') // should be fixed in the remix IDE end.
const path = `${targetPath}/${name}/${contractAddress}/${file}` const path = `${targetPath}/${name}/${contractAddress}/${file}`
await this.call('fileManager', 'setFile', path, source.content) await this.call('fileManager', 'setFile', path, source.content)
compilationTargets[path] = { content: source.content } compilationTargets[path] = { content: source.content }
}
break break
} }
} }
@ -111,7 +115,10 @@ export default class FetchAndCompile extends Plugin {
} }
try { try {
setTimeout(_ => this.emit('compiling', settings), 0) setTimeout(_ => this.emit('compiling', settings), 0)
const compData = await compile(compilationTargets, settings) const compData = await compile(
compilationTargets,
settings,
(url, cb) => this.call('contentImport', 'resolveAndSave', url).then((result) => cb(null, result)).catch((error) => cb(error.message)))
compilersartefacts.addResolvedContract(contractAddress, compData) compilersartefacts.addResolvedContract(contractAddress, compData)
return compData return compData
} catch (e) { } catch (e) {

Loading…
Cancel
Save