From ac8fedd567373abc3993ffc8cd3ec15578580017 Mon Sep 17 00:00:00 2001 From: yann300 Date: Wed, 3 Jan 2018 12:42:04 +0100 Subject: [PATCH 1/3] add check for imported file --- src/app/files/fileManager.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/app/files/fileManager.js b/src/app/files/fileManager.js index e405ad6006..bd8f8d3a8c 100644 --- a/src/app/files/fileManager.js +++ b/src/app/files/fileManager.js @@ -4,6 +4,7 @@ var $ = require('jquery') var remixLib = require('remix-lib') var yo = require('yo-yo') var EventManager = remixLib.EventManager +var imports = require('../compiler/compiler-imports') /* attach to files event (removed renamed) @@ -145,8 +146,14 @@ class FileManager { fileProviderOf (file) { var provider = file.match(/[^/]*/) - if (provider !== null) { + if (provider !== null && this.opt.filesProviders[provider[0]]) { return this.opt.filesProviders[provider[0]] + } else { + for (var handler of imports.handlers()) { + if (handler.match.exec(file)) { + return this.opt.filesProviders[handler.type] + } + } } return null } From d6bc36fd68eca941a8a71235971cefc97d02901e Mon Sep 17 00:00:00 2001 From: yann300 Date: Wed, 3 Jan 2018 12:42:35 +0100 Subject: [PATCH 2/3] save raw url so it can be resolved later on. --- src/app.js | 5 ++--- src/app/compiler/compiler-imports.js | 10 +++++++--- src/app/files/basicReadOnlyExplorer.js | 7 ++++++- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/app.js b/src/app.js index bcdb8fd08c..22ff2aec10 100644 --- a/src/app.js +++ b/src/app.js @@ -201,10 +201,9 @@ function run () { if (provider && provider.exists(url)) { return provider.get(url, cb) } - handleImports.import(url, (error, content, cleanUrl, type) => { + handleImports.import(url, (error, content, cleanUrl, type, url) => { if (!error) { - // FIXME: at some point we should invalidate the browser cache - filesProviders[type].addReadOnly(cleanUrl, content) + filesProviders[type].addReadOnly(cleanUrl, content, url) cb(null, content) } else { cb(error) diff --git a/src/app/compiler/compiler-imports.js b/src/app/compiler/compiler-imports.js index 23e728fb6d..4cfca7e5a7 100644 --- a/src/app/compiler/compiler-imports.js +++ b/src/app/compiler/compiler-imports.js @@ -39,12 +39,16 @@ module.exports = { }) }, - import: function (url, cb) { - var handlers = [ + handlers: function () { + return [ { type: 'github', match: /^(https?:\/\/)?(www.)?github.com\/([^/]*\/[^/]*)\/(.*)/, handler: (match, cb) => { this.handleGithubCall(match[3], match[4], cb) } }, { type: 'swarm', match: /^(bzz[ri]?:\/\/?.*)$/, handler: (match, cb) => { this.handleSwarmImport(match[1], cb) } }, { type: 'ipfs', match: /^(ipfs:\/\/?.+)/, handler: (match, cb) => { this.handleIPFS(match[1], cb) } } ] + }, + + import: function (url, cb) { + var handlers = this.handlers() var found = false handlers.forEach(function (handler) { @@ -63,7 +67,7 @@ module.exports = { return } - cb(null, content, cleanUrl, handler.type) + cb(null, content, cleanUrl, handler.type, url) }) } }) diff --git a/src/app/files/basicReadOnlyExplorer.js b/src/app/files/basicReadOnlyExplorer.js index fa8f49d81f..882b14cb5a 100644 --- a/src/app/files/basicReadOnlyExplorer.js +++ b/src/app/files/basicReadOnlyExplorer.js @@ -5,6 +5,7 @@ class BasicReadOnlyExplorer { constructor (type) { this.event = new EventManager() this.files = {} + this.normalizedNames = {} // contains the raw url associated with the displayed path this.type = type this.readonly = true } @@ -25,6 +26,9 @@ class BasicReadOnlyExplorer { get (path, cb) { var content = this.files[path] + if (!content) { + content = this.files[this.type + '/' + this.normalizedNames[path]] + } if (cb) { cb(null, content) } @@ -37,12 +41,13 @@ class BasicReadOnlyExplorer { return true } - addReadOnly (path, content) { + addReadOnly (path, content, rawPath) { var unprefixedPath = this.removePrefix(path) try { // lazy try to format JSON content = JSON.stringify(JSON.parse(content), null, '\t') } catch (e) {} this.files[this.type + '/' + unprefixedPath] = content + this.normalizedNames[rawPath] = path this.event.trigger('fileAdded', [this.type + '/' + unprefixedPath, true]) return true } From 1b341af0d148e927e1acdeebe416f58ea2c23794 Mon Sep 17 00:00:00 2001 From: yann300 Date: Wed, 3 Jan 2018 12:42:58 +0100 Subject: [PATCH 3/3] check if source is available --- src/app/contract/contractParser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/contract/contractParser.js b/src/app/contract/contractParser.js index 798e5d36a6..a85dda86e5 100644 --- a/src/app/contract/contractParser.js +++ b/src/app/contract/contractParser.js @@ -38,7 +38,7 @@ var getDetails = function (contractName, contract, source) { detail['Runtime Bytecode'] = contract.evm.deployedBytecode } - if (contract.assembly !== null) { + if (source && contract.assembly !== null) { detail['Assembly'] = formatAssemblyText(contract.evm.legacyAssembly, '', source.content) }