From c58306cd49d911abb08c2854674f3a62367427d7 Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Mon, 20 May 2019 13:59:38 +0100 Subject: [PATCH] Add isNumberOrBigNumber assertion --- packages/abi-gen/src/utils.ts | 7 +++---- packages/assert/CHANGELOG.json | 2 +- packages/assert/src/index.ts | 10 ++++++++++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/abi-gen/src/utils.ts b/packages/abi-gen/src/utils.ts index ee7eb57710..5170e4802d 100644 --- a/packages/abi-gen/src/utils.ts +++ b/packages/abi-gen/src/utils.ts @@ -16,7 +16,7 @@ export const utils = { const solTypeRegexToTsType = [ { regex: '^u?int(8|16|32)?$', - assertion: '', // TODO(fabio): Create a combined assertion for `number|bigNumber`? + assertion: `assert.isNumberOrBigNumber('${solName}', ${solName});`, }, { regex: '^string$', assertion: `assert.isString('${solName}', ${solName});` }, { regex: '^address$', assertion: `assert.isString('${solName}', ${solName});` }, @@ -32,9 +32,8 @@ export const utils = { } const TUPLE_TYPE_REGEX = '^tuple$'; if (solType.match(TUPLE_TYPE_REGEX)) { - // Omit assertions for complex types for now - // TODO(fabio): Figure out an elegant way to map complex types to JSON-schemas and - // add a schema assertion for that type here. + // NOTE(fabio): Omit assertions for complex types since this would require schema assertions + // and we currently do not want to make @0x/abi-gen a 0x-specific tool. const assertion = ''; return assertion; } diff --git a/packages/assert/CHANGELOG.json b/packages/assert/CHANGELOG.json index 2eb5edca7d..12dc8bd88f 100644 --- a/packages/assert/CHANGELOG.json +++ b/packages/assert/CHANGELOG.json @@ -3,7 +3,7 @@ "version": "2.1.0", "changes": [ { - "note": "Add new assertions: `isArray`, `isBlockParam`", + "note": "Add new assertions: `isArray`, `isBlockParam` and `isNumberOrBigNumber`", "pr": 1823 } ] diff --git a/packages/assert/src/index.ts b/packages/assert/src/index.ts index 976b30f591..25f164f20e 100644 --- a/packages/assert/src/index.ts +++ b/packages/assert/src/index.ts @@ -56,6 +56,16 @@ export const assert = { isNumber(variableName: string, value: number): void { assert.assert(_.isFinite(value), assert.typeAssertionMessage(variableName, 'number', value)); }, + isNumberOrBigNumber(variableName: string, value: number): void { + if (_.isFinite(value)) { + return; + } else { + assert.assert( + BigNumber.isBigNumber(value), + assert.typeAssertionMessage(variableName, 'number or BigNumber', value), + ); + } + }, isBoolean(variableName: string, value: boolean): void { assert.assert(_.isBoolean(value), assert.typeAssertionMessage(variableName, 'boolean', value)); },