Additionally if the constructor is not existent in JSON, meaning it's implcite with no parameters, we're explicitly creating one, with actual JSON parameters that it should have.
69 lines
2.5 KiB
TypeScript
69 lines
2.5 KiB
TypeScript
import * as fs from 'fs';
|
|
import * as _ from 'lodash';
|
|
import * as path from 'path';
|
|
import * as Web3 from 'web3';
|
|
|
|
import { ParamKind } from './types';
|
|
|
|
export const utils = {
|
|
solTypeToTsType(paramKind: ParamKind, solType: string): string {
|
|
const trailingArrayRegex = /\[\d*\]$/;
|
|
if (solType.match(trailingArrayRegex)) {
|
|
const arrayItemSolType = solType.replace(trailingArrayRegex, '');
|
|
const arrayItemTsType = utils.solTypeToTsType(paramKind, arrayItemSolType);
|
|
const arrayTsType = `(${arrayItemTsType})[]`;
|
|
return arrayTsType;
|
|
} else {
|
|
const solTypeRegexToTsType = [
|
|
{ regex: '^string$', tsType: 'string' },
|
|
{ regex: '^address$', tsType: 'string' },
|
|
{ regex: '^bool$', tsType: 'boolean' },
|
|
{ regex: '^u?int\\d*$', tsType: 'BigNumber' },
|
|
{ regex: '^bytes\\d*$', tsType: 'string' },
|
|
];
|
|
if (paramKind === ParamKind.Input) {
|
|
// web3 allows to pass those an non-bignumbers and that's nice
|
|
// but it always returns stuff as BigNumbers
|
|
solTypeRegexToTsType.unshift({
|
|
regex: '^u?int(8|16|32)?$',
|
|
tsType: 'number|BigNumber',
|
|
});
|
|
}
|
|
for (const regexAndTxType of solTypeRegexToTsType) {
|
|
const { regex, tsType } = regexAndTxType;
|
|
if (solType.match(regex)) {
|
|
return tsType;
|
|
}
|
|
}
|
|
throw new Error(`Unknown Solidity type found: ${solType}`);
|
|
}
|
|
},
|
|
log(...args: any[]): void {
|
|
console.log(...args); // tslint:disable-line:no-console
|
|
},
|
|
getPartialNameFromFileName(filename: string): string {
|
|
const name = path.parse(filename).name;
|
|
return name;
|
|
},
|
|
getNamedContent(filename: string): { name: string; content: string } {
|
|
const name = utils.getPartialNameFromFileName(filename);
|
|
try {
|
|
const content = fs.readFileSync(filename).toString();
|
|
return {
|
|
name,
|
|
content,
|
|
};
|
|
} catch (err) {
|
|
throw new Error(`Failed to read ${filename}: ${err}`);
|
|
}
|
|
},
|
|
getEmptyConstructor(): Web3.ConstructorAbi {
|
|
return {
|
|
type: 'constructor',
|
|
stateMutability: 'nonpayable',
|
|
payable: false,
|
|
inputs: [],
|
|
};
|
|
},
|
|
};
|