/
parser.ts
79 lines (68 loc) · 2.23 KB
/
parser.ts
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import { getAbiPaths } from './files'
type contractVersion = {
contractName: string
versionNumber: string
abiPath: string
}
const findLatest = (exports: contractVersion[], contract: string) => {
const [latest] = exports
.filter(({ contractName }) => contractName === contract)
.sort(
({ versionNumber: a }, { versionNumber: b }) =>
parseInt(b.replace('V', '')) - parseInt(a.replace('V', ''))
)
const { contractName, versionNumber } = latest
const varName = `${contract.toLocaleUpperCase()}_LATEST_VERSION`
const versionInt = versionNumber.replace('V', '')
console.log(`export { ${contractName}${versionNumber} as ${contract} }`)
console.log(`const ${varName} = ${versionInt}`)
console.log(`export { ${varName} }`)
return latest
}
async function main() {
const paths = await getAbiPaths()
const exports: contractVersion[] = paths.flat().map((abiPath) => {
let contractName, fileName, versionNumber
if (abiPath.includes('/utils/')) {
;[, , , fileName] = abiPath.split('/')
contractName = fileName.replace('.json', '')
} else {
;[, , contractName, fileName] = abiPath.split('/')
versionNumber = fileName.replace(contractName, '').replace('.json', '')
}
return {
contractName,
versionNumber,
abiPath,
}
})
console.log("// This file is generated, please don't edit directly")
console.log("// Refer to 'utils/parser.ts' and 'yarn build:index' for more\n")
exports.forEach(({ contractName, versionNumber = '', abiPath }) =>
console.log(`import ${contractName}${versionNumber} from '${abiPath}'`)
)
console.log('\n// exports')
exports.forEach(({ contractName, versionNumber = '' }) =>
console.log(`export { ${contractName}${versionNumber} }`)
)
// alias for all contracts
console.log(
`const contracts = { ${exports
.map(
({ contractName, versionNumber = '' }) =>
`${contractName}${versionNumber}`
)
.toString()} }
export { contracts }`
)
// alias for the newest versions
console.log('\n// latest')
findLatest(exports, 'PublicLock')
findLatest(exports, 'Unlock')
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error)
process.exit(1)
})