Skip to content

Commit d85fb01

Browse files
authored
chore: change proto generate script to apply compatibility patch (#187)
* chore: change proto generate script to apply compatiblity patch * feat: update compatibility patch to include changes from #46
1 parent d6cd18d commit d85fb01

File tree

2 files changed

+248
-0
lines changed

2 files changed

+248
-0
lines changed
Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
diff --git a/src/proto/gno/vm.ts b/src/proto/gno/vm.ts
2+
index 8fdde9e..781e570 100644
3+
--- a/src/proto/gno/vm.ts
4+
+++ b/src/proto/gno/vm.ts
5+
@@ -27,7 +27,7 @@ export interface MsgCall {
6+
/** the function name being invoked */
7+
func: string;
8+
/** the function arguments */
9+
- args: string[];
10+
+ args: string[] | null;
11+
}
12+
13+
/**
14+
@@ -42,7 +42,7 @@ export interface MsgAddPackage {
15+
/** the amount of funds to be deposited at deployment, if any ("<amount><denomination>") */
16+
send: string;
17+
/** the amount of funds to put down for the storage fee, if any ("<amount><denomination>") */
18+
- max_deposit: string;
19+
+ max_deposit?: string;
20+
}
21+
22+
/**
23+
@@ -72,9 +72,9 @@ export interface MemPackage {
24+
/** the associated package gno source */
25+
files: MemFile[];
26+
/** the (user defined) package type */
27+
- type?: Any | undefined;
28+
+ type?: Any | null;
29+
/** the (user defined) extra information */
30+
- info?: Any | undefined;
31+
+ info?: Any | null;
32+
}
33+
34+
/**
35+
@@ -95,7 +95,7 @@ function createBaseMsgCall(): MsgCall {
36+
max_deposit: '',
37+
pkg_path: '',
38+
func: '',
39+
- args: [],
40+
+ args: null,
41+
};
42+
}
43+
44+
@@ -119,8 +119,10 @@ export const MsgCall: MessageFns<MsgCall> = {
45+
if (message.func !== '') {
46+
writer.uint32(42).string(message.func);
47+
}
48+
- for (const v of message.args) {
49+
- writer.uint32(50).string(v!);
50+
+ if (message.args) {
51+
+ for (const v of message.args) {
52+
+ writer.uint32(50).string(v!);
53+
+ }
54+
}
55+
return writer;
56+
},
57+
@@ -178,6 +180,10 @@ export const MsgCall: MessageFns<MsgCall> = {
58+
break;
59+
}
60+
61+
+ if (!message.args) {
62+
+ message.args = [];
63+
+ }
64+
+
65+
message.args.push(reader.string());
66+
continue;
67+
}
68+
@@ -203,7 +209,7 @@ export const MsgCall: MessageFns<MsgCall> = {
69+
func: isSet(object.func) ? globalThis.String(object.func) : '',
70+
args: globalThis.Array.isArray(object?.args)
71+
? object.args.map((e: any) => globalThis.String(e))
72+
- : [],
73+
+ : null,
74+
};
75+
},
76+
77+
@@ -215,7 +221,7 @@ export const MsgCall: MessageFns<MsgCall> = {
78+
if (message.send !== undefined) {
79+
obj.send = message.send;
80+
}
81+
- if (message.max_deposit !== undefined) {
82+
+ if (message.max_deposit !== undefined && message.max_deposit !== '') {
83+
obj.max_deposit = message.max_deposit;
84+
}
85+
if (message.pkg_path !== undefined) {
86+
@@ -226,6 +232,8 @@ export const MsgCall: MessageFns<MsgCall> = {
87+
}
88+
if (message.args?.length) {
89+
obj.args = message.args;
90+
+ } else {
91+
+ obj.args = null;
92+
}
93+
return obj;
94+
},
95+
@@ -240,13 +248,13 @@ export const MsgCall: MessageFns<MsgCall> = {
96+
message.max_deposit = object.max_deposit ?? '';
97+
message.pkg_path = object.pkg_path ?? '';
98+
message.func = object.func ?? '';
99+
- message.args = object.args?.map((e) => e) || [];
100+
+ message.args = object.args?.map((e) => e) || null;
101+
return message;
102+
},
103+
};
104+
105+
function createBaseMsgAddPackage(): MsgAddPackage {
106+
- return { creator: '', package: undefined, send: '', max_deposit: '' };
107+
+ return { creator: '', package: undefined, send: '', max_deposit: undefined };
108+
}
109+
110+
export const MsgAddPackage: MessageFns<MsgAddPackage> = {
111+
@@ -263,7 +271,7 @@ export const MsgAddPackage: MessageFns<MsgAddPackage> = {
112+
if (message.send !== '') {
113+
writer.uint32(26).string(message.send);
114+
}
115+
- if (message.max_deposit !== '') {
116+
+ if (message.max_deposit !== '' && message.max_deposit !== undefined) {
117+
writer.uint32(34).string(message.max_deposit);
118+
}
119+
return writer;
120+
@@ -305,8 +313,10 @@ export const MsgAddPackage: MessageFns<MsgAddPackage> = {
121+
if (tag !== 34) {
122+
break;
123+
}
124+
-
125+
- message.max_deposit = reader.string();
126+
+ const max_deposit = reader.string();
127+
+ if (max_deposit !== '') {
128+
+ message.max_deposit = max_deposit;
129+
+ }
130+
continue;
131+
}
132+
}
133+
@@ -327,7 +337,7 @@ export const MsgAddPackage: MessageFns<MsgAddPackage> = {
134+
send: isSet(object.send) ? globalThis.String(object.send) : '',
135+
max_deposit: isSet(object.max_deposit)
136+
? globalThis.String(object.max_deposit)
137+
- : '',
138+
+ : undefined,
139+
};
140+
},
141+
142+
@@ -363,7 +373,7 @@ export const MsgAddPackage: MessageFns<MsgAddPackage> = {
143+
? MemPackage.fromPartial(object.package)
144+
: undefined;
145+
message.send = object.send ?? '';
146+
- message.max_deposit = object.max_deposit ?? '';
147+
+ message.max_deposit = object.max_deposit ?? undefined;
148+
return message;
149+
},
150+
};
151+
@@ -488,7 +498,7 @@ export const MsgRun: MessageFns<MsgRun> = {
152+
};
153+
154+
function createBaseMemPackage(): MemPackage {
155+
- return { name: '', path: '', files: [], type: undefined, info: undefined };
156+
+ return { name: '', path: '', files: [], type: null, info: null };
157+
}
158+
159+
export const MemPackage: MessageFns<MemPackage> = {
160+
@@ -505,10 +515,10 @@ export const MemPackage: MessageFns<MemPackage> = {
161+
for (const v of message.files) {
162+
MemFile.encode(v!, writer.uint32(26).fork()).join();
163+
}
164+
- if (message.type !== undefined) {
165+
+ if (message.type !== undefined && message.type !== null) {
166+
Any.encode(message.type, writer.uint32(34).fork()).join();
167+
}
168+
- if (message.info !== undefined) {
169+
+ if (message.info !== undefined && message.info !== null) {
170+
Any.encode(message.info, writer.uint32(42).fork()).join();
171+
}
172+
return writer;
173+
@@ -548,6 +558,7 @@ export const MemPackage: MessageFns<MemPackage> = {
174+
}
175+
case 4: {
176+
if (tag !== 34) {
177+
+ message.type = null;
178+
break;
179+
}
180+
181+
@@ -556,6 +567,7 @@ export const MemPackage: MessageFns<MemPackage> = {
182+
}
183+
case 5: {
184+
if (tag !== 42) {
185+
+ message.info = null;
186+
break;
187+
}
188+
189+
@@ -578,8 +590,8 @@ export const MemPackage: MessageFns<MemPackage> = {
190+
files: globalThis.Array.isArray(object?.files)
191+
? object.files.map((e: any) => MemFile.fromJSON(e))
192+
: [],
193+
- type: isSet(object.type) ? Any.fromJSON(object.type) : undefined,
194+
- info: isSet(object.info) ? Any.fromJSON(object.info) : undefined,
195+
+ type: isSet(object.type) ? Any.fromJSON(object.type) : null,
196+
+ info: isSet(object.info) ? Any.fromJSON(object.info) : null,
197+
};
198+
},
199+
200+
@@ -594,11 +606,15 @@ export const MemPackage: MessageFns<MemPackage> = {
201+
if (message.files?.length) {
202+
obj.files = message.files.map((e) => MemFile.toJSON(e));
203+
}
204+
- if (message.type !== undefined) {
205+
+ if (message.type !== undefined && message.type !== null) {
206+
obj.type = Any.toJSON(message.type);
207+
+ } else {
208+
+ obj.type = null;
209+
}
210+
- if (message.info !== undefined) {
211+
+ if (message.info !== undefined && message.info !== null) {
212+
obj.info = Any.toJSON(message.info);
213+
+ } else {
214+
+ obj.info = null;
215+
}
216+
return obj;
217+
},
218+
@@ -616,11 +632,11 @@ export const MemPackage: MessageFns<MemPackage> = {
219+
message.type =
220+
object.type !== undefined && object.type !== null
221+
? Any.fromPartial(object.type)
222+
- : undefined;
223+
+ : null;
224+
message.info =
225+
object.info !== undefined && object.info !== null
226+
? Any.fromPartial(object.info)
227+
- : undefined;
228+
+ : null;
229+
return message;
230+
},
231+
};

scripts/generate.sh

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
PROTO_PATH=./proto
44
OUT_DIR=./src/proto
5+
PRETTIER=./node_modules/.bin/prettier
56

67
FILES=$(find proto -type f -name "*.proto")
78

@@ -15,3 +16,19 @@ for x in ${FILES}; do
1516
--ts_proto_opt="esModuleInterop=true,forceLong=long,useOptionals=messages,useDate=false,snakeToCamel=false,emitDefaultValues=json-methods" \
1617
${x}
1718
done
19+
20+
# Apply amino JSON compatibility changes to patch proto generated files.
21+
# Patch fixes two issues:
22+
# - Empty `max_deposit` is represented in JSON as an empty string in proto while omitted completely in Amino JSON
23+
# - Empty `google.protobuf.Any` fields are omitted in proto JSON while explicitly set to null in Amino JSON
24+
#
25+
# See:
26+
# https://github.com/gnolang/gno-js-client/pull/184
27+
# https://github.com/gnolang/gno-js-client/pull/46
28+
#
29+
# This is a short term solution that potentially requires maintaining the patch updated.
30+
if [ $? -eq 0 ]; then
31+
# First prettify generated code to allow the patch to be applied
32+
${PRETTIER} --write ${OUT_DIR}/gno/bank.ts ${OUT_DIR}/gno/vm.ts && \
33+
git apply ./scripts/amino-json-compatibility.patch
34+
fi

0 commit comments

Comments
 (0)