diff options
author | Leonid Logvinov <logvinov.leon@gmail.com> | 2018-12-11 08:10:49 +0800 |
---|---|---|
committer | Leonid Logvinov <logvinov.leon@gmail.com> | 2018-12-11 08:10:49 +0800 |
commit | e72742f1f76dd3b46976ed3d0f272b539bdfb229 (patch) | |
tree | 968debeda7e6efcabd58c7218d5dff05dc24f357 /packages/pipeline/src/utils/transformers/number_to_bigint.ts | |
parent | 928b253c81971eb6f59efd09ab6a9063d4e6e4ca (diff) | |
parent | 253bf4df6a6909d8bd65361c0d115e9d1a8e489e (diff) | |
download | dexon-sol-tools-e72742f1f76dd3b46976ed3d0f272b539bdfb229.tar dexon-sol-tools-e72742f1f76dd3b46976ed3d0f272b539bdfb229.tar.gz dexon-sol-tools-e72742f1f76dd3b46976ed3d0f272b539bdfb229.tar.bz2 dexon-sol-tools-e72742f1f76dd3b46976ed3d0f272b539bdfb229.tar.lz dexon-sol-tools-e72742f1f76dd3b46976ed3d0f272b539bdfb229.tar.xz dexon-sol-tools-e72742f1f76dd3b46976ed3d0f272b539bdfb229.tar.zst dexon-sol-tools-e72742f1f76dd3b46976ed3d0f272b539bdfb229.zip |
Merge branch 'development' into feature/contracts-monorepo-7
Diffstat (limited to 'packages/pipeline/src/utils/transformers/number_to_bigint.ts')
-rw-r--r-- | packages/pipeline/src/utils/transformers/number_to_bigint.ts | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/packages/pipeline/src/utils/transformers/number_to_bigint.ts b/packages/pipeline/src/utils/transformers/number_to_bigint.ts new file mode 100644 index 000000000..85560c1f0 --- /dev/null +++ b/packages/pipeline/src/utils/transformers/number_to_bigint.ts @@ -0,0 +1,27 @@ +import { BigNumber } from '@0x/utils'; +import { ValueTransformer } from 'typeorm/decorator/options/ValueTransformer'; + +const decimalRadix = 10; + +// Can be used to convert a JavaScript number type to a Postgres bigint type and +// vice versa. By default TypeORM will silently convert number types to string +// if the corresponding Postgres type is bigint. See +// https://github.com/typeorm/typeorm/issues/2400 for more information. +export class NumberToBigIntTransformer implements ValueTransformer { + // tslint:disable-next-line:prefer-function-over-method + public to(value: number): string { + return value.toString(); + } + + // tslint:disable-next-line:prefer-function-over-method + public from(value: string): number { + if (new BigNumber(value).greaterThan(Number.MAX_SAFE_INTEGER)) { + throw new Error( + `Attempted to convert PostgreSQL bigint value (${value}) to JavaScript number type but it is too big to safely convert`, + ); + } + return Number.parseInt(value, decimalRadix); + } +} + +export const numberToBigIntTransformer = new NumberToBigIntTransformer(); |