aboutsummaryrefslogtreecommitdiffstats
path: root/packages/pipeline/src/utils/transformers/number_to_bigint.ts
diff options
context:
space:
mode:
authorLeonid Logvinov <logvinov.leon@gmail.com>2018-12-11 08:10:49 +0800
committerLeonid Logvinov <logvinov.leon@gmail.com>2018-12-11 08:10:49 +0800
commite72742f1f76dd3b46976ed3d0f272b539bdfb229 (patch)
tree968debeda7e6efcabd58c7218d5dff05dc24f357 /packages/pipeline/src/utils/transformers/number_to_bigint.ts
parent928b253c81971eb6f59efd09ab6a9063d4e6e4ca (diff)
parent253bf4df6a6909d8bd65361c0d115e9d1a8e489e (diff)
downloaddexon-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.ts27
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();