remove useless code; update test; update circleCI script

pull/5370/head
0mkar 6 years ago
parent 2fe116309d
commit 8b2c6e7f3b
  1. 2
      .circleci/config.yml
  2. 43
      remix-resolve/src/combineSource.js
  3. 9
      remix-resolve/src/getFile.ts
  4. 96
      remix-resolve/src/resolve.js
  5. 6
      remix-resolve/tests/example_2/github_import.sol
  6. 9
      remix-resolve/tests/test.js

@ -62,7 +62,7 @@ jobs:
steps:
- checkout
- run: npm install && npm run bootstrap
- run: cd remix-resolve && npm test
- run: cd remix-resolve && npm run build && npm test
workflows:

@ -1,43 +0,0 @@
const url = require('url')
const validUrl = require('valid-url')
const resolve = require('./resolve.js')
/*
combineSource(//basepath, //sources object)
*/
const combineSource = async function (rootpath, sources) {
let fn, ir
var matches = []
ir = /^(?:import){1}(.+){0,1}\s['"](.+)['"];/gm
let match = null
for (const fileName of Object.keys(sources)) {
const source = sources[fileName].content
while ((match = ir.exec(source))) {
matches.push(match)
}
for (let match of matches) {
// importLine = match[0]
// const extra = match[1] ? match[1] : ''
if (validUrl.isUri(rootpath)) {
fn = url.resolve(rootpath, match[2])
} else {
fn = match[2]
}
try {
// resolve anything other than remix_tests.sol & tests.sol
if (fn.localeCompare('remix_tests.sol') !== 0 && fn.localeCompare('tests.sol') !== 0) {
let subSorce = {}
const response = await resolve(rootpath, fn)
// sources[fileName].content = sources[fileName].content.replace(importLine, 'import' + extra + ' \'' + response.filename + '\';')
const regex = /(\.+\/)/g
subSorce[fn.replace(regex, '')] = { content: response.content }
sources = Object.assign(await combineSource(response.rootpath, subSorce), sources)
}
} catch (e) {
throw e
}
}
}
return sources
}
module.exports = combineSource

@ -1,9 +0,0 @@
export interface Sources {
[contractPath: string]: {
content: string
}
}
export function getFile(path: string, sources: Sources) {
return sources[path].content
}

@ -1,96 +0,0 @@
const axios = require('axios')
const path = require('path')
const fs = require('fs')
const handleGithubCall = async function (fullpath, repoPath, path, filename, fileRoot) {
const data = await axios({
method: 'get',
url: 'https://api.github.com/repos/' + repoPath + '/contents/' + path,
responseType: 'json'
}).then(function (response) {
if ('content' in response.data) {
const buf = Buffer.from(response.data.content, 'base64')
fileRoot = fullpath.substring(0, fullpath.lastIndexOf('/'))
fileRoot = fileRoot + '/'
const resp = { filename, content: buf.toString('UTF-8'), fileRoot }
return resp
} else {
throw Error('Content not received!')
}
}).catch(function (e) {
throw e
})
return data
}
const handleNodeModulesImport = async function (pathString, filename, fileRoot) {
const o = { encoding: 'UTF-8' }
var modulesDir = fileRoot
while (true) {
var p = path.join(modulesDir, 'node_modules', pathString, filename)
try {
const content = fs.readFileSync(p, o)
fileRoot = path.join(modulesDir, 'node_modules', pathString)
const response = { filename, content, fileRoot }
return response
} catch (err) {
console.log(err)
}
// Recurse outwards until impossible
var oldModulesDir = modulesDir
modulesDir = path.join(modulesDir, '..')
if (modulesDir === oldModulesDir) {
break
}
}
}
const handleLocalImport = async function (pathString, filename, fileRoot) {
// if no relative/absolute path given then search in node_modules folder
if (pathString && pathString.indexOf('.') !== 0 && pathString.indexOf('/') !== 0) {
return handleNodeModulesImport(pathString, filename, fileRoot)
} else {
const o = { encoding: 'UTF-8' }
const p = pathString ? path.resolve(fileRoot, pathString, filename) : path.resolve(fileRoot, filename)
const content = fs.readFileSync(p, o)
fileRoot = pathString ? path.resolve(fileRoot, pathString) : fileRoot
const response = { filename, content, fileRoot }
return response
}
}
const getHandlers = async function () {
return [
{
type: 'local',
match: /(^(?!(?:http:\/\/)|(?:https:\/\/)?(?:www.)?(?:github.com)))(^\/*[\w+-_/]*\/)*?(\w+\.sol)/g,
handle: async (match, fileRoot) => { const data = await handleLocalImport(match[2], match[3], fileRoot); return data }
},
{
type: 'github',
match: /^(https?:\/\/)?(www.)?github.com\/([^/]*\/[^/]*)(.*\/(\w+\.sol))/g,
handle: async (match, fileRoot) => {
const data = await handleGithubCall(match[0], match[3], match[4], match[5], fileRoot)
return data
}
}
]
}
const resolve = async function (fileRoot, sourcePath) {
const handlers = await getHandlers()
let response = {}
for (const handler of handlers) {
try {
// here we are trying to find type of import path github/swarm/ipfs/local
const match = handler.match.exec(sourcePath)
if (match) {
response = await handler.handle(match, fileRoot)
break
}
} catch (e) {
throw e
}
}
return response
}
module.exports = resolve

@ -1,6 +0,0 @@
pragma solidity ^0.5.0;
import 'https://github.com/OpenZeppelin/zeppelin-solidity/contracts/math/SafeMath.sol';
contract SimpleMath {
using SafeMath for uint;
}

@ -2,7 +2,6 @@ const rr = require('../dist/index.js')
const assert = require('assert')
const fs = require('fs')
const path = require('path')
const solc = require('solc')
describe('testRunner', function () {
describe('#resolve', function() {
@ -12,16 +11,14 @@ describe('testRunner', function () {
before(function (done) {
const resolver = new rr.ImportResolver()
const content = fs.readFileSync(filename).toString()
var sources = []
sources['greeter.sol'] = { 'content': content }
function handleLocal(pathString, filePath) {
// if no relative/absolute path given then search in node_modules folder
if (pathString && pathString.indexOf('.') !== 0 && pathString.indexOf('/') !== 0) {
return handleNodeModulesImport(pathString, filePath, pathString)
} else {
const o = { encoding: 'UTF-8' }
const p = pathString ? path.resolve('', pathString, filePath) : path.resolve(pathString, filePath)
const p = pathString ? path.resolve(pathString, filePath) : path.resolve(pathString, filePath)
const content = fs.readFileSync(p, o)
return content
}
@ -43,11 +40,11 @@ describe('testRunner', function () {
})
})
it('should 1 passing test', function () {
it('should have 3 items', function () {
assert.equal(Object.keys(results).length, 3)
})
it('should returns 2 contracts with specified content', function () {
it('should returns contract content of given local path', function () {
const expt = {
content: 'pragma solidity ^0.5.0;\nimport "./mortal.sol";\n\ncontract Greeter is Mortal {\n /* Define variable greeting of the type string */\n string greeting;\n\n /* This runs when the contract is executed */\n constructor(string memory _greeting) public {\n greeting = _greeting;\n }\n\n /* Main function */\n function greet() public view returns (string memory) {\n return greeting;\n }\n}\n',
cleanURL: '../remix-resolve/tests/example_1/greeter.sol',

Loading…
Cancel
Save