From 2dfb73b7f32bbb1cf570160251499c9d6ddc0299 Mon Sep 17 00:00:00 2001 From: Zetazzz Date: Fri, 7 Jul 2023 08:47:14 +0800 Subject: [PATCH] fixed "to" and "from" amino bigint array --- .../src/encoding/proto/from-amino/index.ts | 10 ++++---- .../src/encoding/proto/from-amino/utils.ts | 24 +++++++++---------- .../ast/src/encoding/proto/to-amino/utils.ts | 2 +- .../ast/src/utils/type-long-expression.ts | 23 +++++++++++++++++- .../src/encoding/proto/from-amino/utils.d.ts | 12 +++++----- .../src/encoding/proto/to-amino/utils.d.ts | 12 +++++----- 6 files changed, 52 insertions(+), 31 deletions(-) diff --git a/packages/ast/src/encoding/proto/from-amino/index.ts b/packages/ast/src/encoding/proto/from-amino/index.ts index 0ca7e43f0b..ffdaab2ff1 100644 --- a/packages/ast/src/encoding/proto/from-amino/index.ts +++ b/packages/ast/src/encoding/proto/from-amino/index.ts @@ -57,15 +57,15 @@ export const fromAminoJSONMethodFields = (context: ProtoParseContext, name: stri case 'sfixed32': return fromAminoJSON.array(args, arrayTypes.sfixed32()); case 'int64': - return fromAminoJSON.array(args, arrayTypes.int64()); + return fromAminoJSON.array(args, arrayTypes.int64(args)); case 'sint64': - return fromAminoJSON.array(args, arrayTypes.sint64()); + return fromAminoJSON.array(args, arrayTypes.sint64(args)); case 'uint64': - return fromAminoJSON.array(args, arrayTypes.uint64()); + return fromAminoJSON.array(args, arrayTypes.uint64(args)); case 'fixed64': - return fromAminoJSON.array(args, arrayTypes.fixed64()); + return fromAminoJSON.array(args, arrayTypes.fixed64(args)); case 'sfixed64': - return fromAminoJSON.array(args, arrayTypes.sfixed64()); + return fromAminoJSON.array(args, arrayTypes.sfixed64(args)); default: switch (field.parsedType.type) { case 'Enum': diff --git a/packages/ast/src/encoding/proto/from-amino/utils.ts b/packages/ast/src/encoding/proto/from-amino/utils.ts index e99f14ad36..c54a65eaae 100644 --- a/packages/ast/src/encoding/proto/from-amino/utils.ts +++ b/packages/ast/src/encoding/proto/from-amino/utils.ts @@ -610,23 +610,23 @@ export const arrayTypes = { return arrayTypes.scalar(); }, - long() { - return arrayTypes.scalar(); + long(args: FromAminoJSONMethod) { + return TypeLong.getFromStringArray(args.context); }, - uint64() { - return arrayTypes.scalar(); + uint64(args: FromAminoJSONMethod) { + return arrayTypes.long(args); }, - int64() { - return arrayTypes.scalar(); + int64(args: FromAminoJSONMethod) { + return arrayTypes.long(args); }, - sint64() { - return arrayTypes.scalar(); + sint64(args: FromAminoJSONMethod) { + return arrayTypes.long(args); }, - fixed64() { - return arrayTypes.scalar(); + fixed64(args: FromAminoJSONMethod) { + return arrayTypes.long(args); }, - sfixed64() { - return arrayTypes.scalar(); + sfixed64(args: FromAminoJSONMethod) { + return arrayTypes.long(args); }, number() { return arrayTypes.scalar(); diff --git a/packages/ast/src/encoding/proto/to-amino/utils.ts b/packages/ast/src/encoding/proto/to-amino/utils.ts index f46c18c4e7..c34189eb27 100644 --- a/packages/ast/src/encoding/proto/to-amino/utils.ts +++ b/packages/ast/src/encoding/proto/to-amino/utils.ts @@ -577,7 +577,7 @@ export const arrayTypes = { return arrayTypes.number(); }, long(args: ToAminoJSONMethod) { - return arrayTypes.scalar(); + return TypeLong.getToStringArray(args.context); }, int64(args: ToAminoJSONMethod) { return arrayTypes.long(args); diff --git a/packages/ast/src/utils/type-long-expression.ts b/packages/ast/src/utils/type-long-expression.ts index 47a558bff1..be19c70581 100644 --- a/packages/ast/src/utils/type-long-expression.ts +++ b/packages/ast/src/utils/type-long-expression.ts @@ -21,6 +21,19 @@ export const TypeLong = { long: t.identifier('Long') }, + fromStringArray: { + bigint: t.callExpression(t.identifier('BigInt'), [t.identifier('e')]), + long: t.identifier('e') + }, + + toStringArray: { + bigint: t.callExpression( + t.memberExpression(t.identifier('e'), t.identifier('toString')), + [] + ), + long: t.identifier('e') + }, + uzeroExpressions: { bigint: t.callExpression(t.identifier('BigInt'), [t.numericLiteral(0)]), long: t.memberExpression(t.identifier('Long'), t.identifier('UZERO')) @@ -68,6 +81,14 @@ export const TypeLong = { return TypeLong.getNode(ctx, TypeLong.types); }, + getFromStringArray: (ctx: GenericParseContext): t.Expression => { + return TypeLong.getNode(ctx, TypeLong.fromStringArray); + }, + + getToStringArray: (ctx: GenericParseContext): t.Expression => { + return TypeLong.getNode(ctx, TypeLong.toStringArray); + }, + getPropIdentifier: (ctx: GenericParseContext): t.Identifier => { return TypeLong.getNode(ctx, TypeLong.propIdentifiers); }, @@ -103,7 +124,7 @@ export const TypeLong = { [] ) ); - break; + break; case 'long': args.push(arg); diff --git a/packages/ast/types/src/encoding/proto/from-amino/utils.d.ts b/packages/ast/types/src/encoding/proto/from-amino/utils.d.ts index da9a95074a..0f436c4fc7 100644 --- a/packages/ast/types/src/encoding/proto/from-amino/utils.d.ts +++ b/packages/ast/types/src/encoding/proto/from-amino/utils.d.ts @@ -38,12 +38,12 @@ export declare const arrayTypes: { string(): t.Identifier; bool(): t.Identifier; bytes(args: FromAminoJSONMethod): t.Identifier; - long(): t.Identifier; - uint64(): t.Identifier; - int64(): t.Identifier; - sint64(): t.Identifier; - fixed64(): t.Identifier; - sfixed64(): t.Identifier; + long(args: FromAminoJSONMethod): t.Expression; + uint64(args: FromAminoJSONMethod): t.Expression; + int64(args: FromAminoJSONMethod): t.Expression; + sint64(args: FromAminoJSONMethod): t.Expression; + fixed64(args: FromAminoJSONMethod): t.Expression; + sfixed64(args: FromAminoJSONMethod): t.Expression; number(): t.Identifier; uint32(): t.Identifier; int32(): t.Identifier; diff --git a/packages/ast/types/src/encoding/proto/to-amino/utils.d.ts b/packages/ast/types/src/encoding/proto/to-amino/utils.d.ts index 19e3fb42c8..112dc15b9f 100644 --- a/packages/ast/types/src/encoding/proto/to-amino/utils.d.ts +++ b/packages/ast/types/src/encoding/proto/to-amino/utils.d.ts @@ -45,12 +45,12 @@ export declare const arrayTypes: { sint32(): t.Identifier; fixed32(): t.Identifier; sfixed32(): t.Identifier; - long(args: ToAminoJSONMethod): t.Identifier; - int64(args: ToAminoJSONMethod): t.Identifier; - uint64(args: ToAminoJSONMethod): t.Identifier; - sint64(args: ToAminoJSONMethod): t.Identifier; - fixed64(args: ToAminoJSONMethod): t.Identifier; - sfixed64(args: ToAminoJSONMethod): t.Identifier; + long(args: ToAminoJSONMethod): t.Expression; + int64(args: ToAminoJSONMethod): t.Expression; + uint64(args: ToAminoJSONMethod): t.Expression; + sint64(args: ToAminoJSONMethod): t.Expression; + fixed64(args: ToAminoJSONMethod): t.Expression; + sfixed64(args: ToAminoJSONMethod): t.Expression; bytes(args: ToAminoJSONMethod): t.Identifier; enum(args: ToAminoJSONMethod): t.CallExpression; anyType(args: ToAminoJSONMethod): t.ConditionalExpression;