-
Notifications
You must be signed in to change notification settings - Fork 4
/
DynamicArtifacts.js
32 lines (25 loc) · 1.03 KB
/
DynamicArtifacts.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
const fs = require('fs')
const path = require('path')
const BaseArtifacts = require('./BaseArtifacts')
const BUILD_DIRS = ['build/contracts', 'artifacts']
class DynamicArtifacts extends BaseArtifacts {
getContractSchema(contractName, dependency = undefined) {
const contractPaths = dependency
? this._getNodeModulesPaths(dependency, contractName)
: this._getLocalBuildPaths(contractName)
const artifact = this._findArtifact(contractPaths)
if (!artifact) throw Error(`Could not find artifact for ${dependency} ${contractName}`)
return artifact
}
_findArtifact(paths) {
const path = paths.find(fs.existsSync)
return path ? require(path) : undefined
}
_getLocalBuildPaths(contractName) {
return BUILD_DIRS.map(dir => path.resolve(process.cwd(), `./${dir}/${contractName}.json`))
}
_getNodeModulesPaths(dependency, contractName) {
return BUILD_DIRS.map(dir => path.resolve(__dirname, `../../node_modules/${dependency}/${dir}/${contractName}.json`))
}
}
module.exports = DynamicArtifacts