aboutsummaryrefslogtreecommitdiffstats
path: root/packages/abi-gen/src/utils.ts
diff options
context:
space:
mode:
authorFabio Berger <me@fabioberger.com>2017-12-06 06:18:36 +0800
committerFabio Berger <me@fabioberger.com>2017-12-06 06:18:36 +0800
commit08168c6e7d52711aeb46e27444ba26970e16e244 (patch)
tree40a006de279221009d0ee05d73bfbb74f0a9ea91 /packages/abi-gen/src/utils.ts
parentb5030df4e3afe17b4e652b438d655edda79c5f54 (diff)
parent4441d76725af4e83f90eeb373983b600b6903e8e (diff)
downloaddexon-sol-tools-08168c6e7d52711aeb46e27444ba26970e16e244.tar
dexon-sol-tools-08168c6e7d52711aeb46e27444ba26970e16e244.tar.gz
dexon-sol-tools-08168c6e7d52711aeb46e27444ba26970e16e244.tar.bz2
dexon-sol-tools-08168c6e7d52711aeb46e27444ba26970e16e244.tar.lz
dexon-sol-tools-08168c6e7d52711aeb46e27444ba26970e16e244.tar.xz
dexon-sol-tools-08168c6e7d52711aeb46e27444ba26970e16e244.tar.zst
dexon-sol-tools-08168c6e7d52711aeb46e27444ba26970e16e244.zip
Merge branch 'development' into feature/addSubproviders
* development: (50 commits) Add PR number to changelog Address feedback Add requestId to subscription messages and update json-schemas Remove isomorphic-fetch types from contracts package Update README Regenerate files Make it private Change package name Update README Make fileExtension configurable Rename abi-gen to typed-contracts Add docs for typed-contracts Remove TODOs Introduce separate ContextData type and rework it Check ABI is defined Introduce a const for 'contract.mustache' Improve error message Reuse util Fix a typo Introduce a const for 'function' ... # Conflicts: # yarn.lock
Diffstat (limited to 'packages/abi-gen/src/utils.ts')
-rw-r--r--packages/abi-gen/src/utils.ts56
1 files changed, 56 insertions, 0 deletions
diff --git a/packages/abi-gen/src/utils.ts b/packages/abi-gen/src/utils.ts
new file mode 100644
index 000000000..eaf5a30cc
--- /dev/null
+++ b/packages/abi-gen/src/utils.ts
@@ -0,0 +1,56 @@
+import * as fs from 'fs';
+import * as _ from 'lodash';
+import * as path from 'path';
+
+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}`);
+ }
+ },
+};