goscript 0.1.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/README.md +5 -2
  2. package/cmd/go_js_wasm_exec/main.go +201 -0
  3. package/cmd/go_js_wasm_exec/main_test.go +83 -0
  4. package/cmd/goscript/{cmd_compile.go → cmd-compile.go} +7 -0
  5. package/cmd/goscript/cmd-test.go +14 -0
  6. package/cmd/goscript/cmd-test_test.go +1 -1
  7. package/compiler/compile-request.go +12 -9
  8. package/compiler/compliance_test.go +0 -1
  9. package/compiler/config.go +2 -0
  10. package/compiler/gotest/request.go +28 -0
  11. package/compiler/gotest/runner.go +353 -27
  12. package/compiler/gotest/runner_test.go +273 -1
  13. package/compiler/gotest/testdata/browserapi/browserapi_test.go +20 -0
  14. package/compiler/gotest/testdata/browserapi/go.mod +3 -0
  15. package/compiler/lowered-program.go +24 -17
  16. package/compiler/lowering.go +392 -127
  17. package/compiler/lowering_bench_test.go +41 -27
  18. package/compiler/override-facts.go +15 -0
  19. package/compiler/override-parity-verifier.go +450 -0
  20. package/compiler/override-parity.go +122 -0
  21. package/compiler/override-registry_test.go +559 -0
  22. package/compiler/protobuf-ts-binding.go +514 -0
  23. package/compiler/protobuf-ts-binding_test.go +172 -0
  24. package/compiler/semantic-model-types.go +9 -4
  25. package/compiler/semantic-model.go +282 -70
  26. package/compiler/semantic-model_test.go +82 -1
  27. package/compiler/service.go +20 -1
  28. package/compiler/skeleton_test.go +62 -8
  29. package/compiler/typescript-emitter.go +128 -13
  30. package/dist/gs/builtin/slice.d.ts +2 -1
  31. package/dist/gs/builtin/slice.js +29 -4
  32. package/dist/gs/builtin/slice.js.map +1 -1
  33. package/dist/gs/builtin/type.d.ts +13 -5
  34. package/dist/gs/builtin/type.js +153 -60
  35. package/dist/gs/builtin/type.js.map +1 -1
  36. package/dist/gs/builtin/varRef.d.ts +11 -0
  37. package/dist/gs/builtin/varRef.js +57 -2
  38. package/dist/gs/builtin/varRef.js.map +1 -1
  39. package/dist/gs/bytes/buffer.gs.js +1 -1
  40. package/dist/gs/bytes/buffer.gs.js.map +1 -1
  41. package/dist/gs/bytes/reader.gs.js +1 -1
  42. package/dist/gs/bytes/reader.gs.js.map +1 -1
  43. package/dist/gs/compress/zlib/index.d.ts +10 -3
  44. package/dist/gs/compress/zlib/index.js +50 -16
  45. package/dist/gs/compress/zlib/index.js.map +1 -1
  46. package/dist/gs/encoding/json/index.d.ts +114 -0
  47. package/dist/gs/encoding/json/index.js +544 -36
  48. package/dist/gs/encoding/json/index.js.map +1 -1
  49. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +100 -0
  50. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +564 -0
  51. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
  52. package/dist/gs/github.com/pkg/errors/errors.js +54 -30
  53. package/dist/gs/github.com/pkg/errors/errors.js.map +1 -1
  54. package/dist/gs/go/scanner/index.d.ts +2 -0
  55. package/dist/gs/go/scanner/index.js +29 -5
  56. package/dist/gs/go/scanner/index.js.map +1 -1
  57. package/dist/gs/go/token/index.js +22 -6
  58. package/dist/gs/go/token/index.js.map +1 -1
  59. package/dist/gs/hash/index.d.ts +6 -0
  60. package/dist/gs/hash/index.js +20 -0
  61. package/dist/gs/hash/index.js.map +1 -1
  62. package/dist/gs/internal/goarch/index.d.ts +43 -3
  63. package/dist/gs/internal/goarch/index.js +42 -10
  64. package/dist/gs/internal/goarch/index.js.map +1 -1
  65. package/dist/gs/io/fs/fs.js +26 -14
  66. package/dist/gs/io/fs/fs.js.map +1 -1
  67. package/dist/gs/io/fs/readdir.js +4 -2
  68. package/dist/gs/io/fs/readdir.js.map +1 -1
  69. package/dist/gs/io/fs/sub.js +8 -1
  70. package/dist/gs/io/fs/sub.js.map +1 -1
  71. package/dist/gs/io/io.d.ts +2 -0
  72. package/dist/gs/io/io.js.map +1 -1
  73. package/dist/gs/math/bits/index.d.ts +5 -0
  74. package/dist/gs/math/bits/index.js +16 -4
  75. package/dist/gs/math/bits/index.js.map +1 -1
  76. package/dist/gs/mime/index.d.ts +16 -0
  77. package/dist/gs/mime/index.js +315 -6
  78. package/dist/gs/mime/index.js.map +1 -1
  79. package/dist/gs/net/http/httptest/index.d.ts +12 -0
  80. package/dist/gs/net/http/httptest/index.js +85 -6
  81. package/dist/gs/net/http/httptest/index.js.map +1 -1
  82. package/dist/gs/net/http/index.d.ts +300 -5
  83. package/dist/gs/net/http/index.js +1598 -58
  84. package/dist/gs/net/http/index.js.map +1 -1
  85. package/dist/gs/os/dir_unix.gs.js +1 -1
  86. package/dist/gs/os/dir_unix.gs.js.map +1 -1
  87. package/dist/gs/os/error.gs.js +1 -1
  88. package/dist/gs/os/error.gs.js.map +1 -1
  89. package/dist/gs/os/exec.gs.d.ts +1 -0
  90. package/dist/gs/os/exec.gs.js +4 -8
  91. package/dist/gs/os/exec.gs.js.map +1 -1
  92. package/dist/gs/os/exec_posix.gs.js +1 -1
  93. package/dist/gs/os/exec_posix.gs.js.map +1 -1
  94. package/dist/gs/os/index.d.ts +1 -1
  95. package/dist/gs/os/index.js +1 -1
  96. package/dist/gs/os/index.js.map +1 -1
  97. package/dist/gs/os/proc.gs.d.ts +4 -0
  98. package/dist/gs/os/proc.gs.js +12 -6
  99. package/dist/gs/os/proc.gs.js.map +1 -1
  100. package/dist/gs/os/root_js.gs.js +1 -1
  101. package/dist/gs/os/root_js.gs.js.map +1 -1
  102. package/dist/gs/os/types.gs.js +1 -1
  103. package/dist/gs/os/types.gs.js.map +1 -1
  104. package/dist/gs/os/types_js.gs.js +1 -1
  105. package/dist/gs/os/types_js.gs.js.map +1 -1
  106. package/dist/gs/os/types_unix.gs.js +1 -1
  107. package/dist/gs/os/types_unix.gs.js.map +1 -1
  108. package/dist/gs/path/path.js +11 -7
  109. package/dist/gs/path/path.js.map +1 -1
  110. package/dist/gs/reflect/index.d.ts +5 -4
  111. package/dist/gs/reflect/index.js +4 -3
  112. package/dist/gs/reflect/index.js.map +1 -1
  113. package/dist/gs/reflect/map.js +15 -0
  114. package/dist/gs/reflect/map.js.map +1 -1
  115. package/dist/gs/reflect/type.d.ts +25 -6
  116. package/dist/gs/reflect/type.js +1418 -228
  117. package/dist/gs/reflect/type.js.map +1 -1
  118. package/dist/gs/reflect/types.d.ts +14 -6
  119. package/dist/gs/reflect/types.js +35 -1
  120. package/dist/gs/reflect/types.js.map +1 -1
  121. package/dist/gs/reflect/value.d.ts +1 -0
  122. package/dist/gs/reflect/value.js +83 -41
  123. package/dist/gs/reflect/value.js.map +1 -1
  124. package/dist/gs/reflect/visiblefields.js +4 -140
  125. package/dist/gs/reflect/visiblefields.js.map +1 -1
  126. package/dist/gs/runtime/pprof/index.d.ts +8 -2
  127. package/dist/gs/runtime/pprof/index.js +50 -30
  128. package/dist/gs/runtime/pprof/index.js.map +1 -1
  129. package/dist/gs/runtime/runtime.js +5 -4
  130. package/dist/gs/runtime/runtime.js.map +1 -1
  131. package/dist/gs/runtime/trace/index.js +5 -19
  132. package/dist/gs/runtime/trace/index.js.map +1 -1
  133. package/dist/gs/strconv/atoi.gs.js +1 -1
  134. package/dist/gs/strconv/atoi.gs.js.map +1 -1
  135. package/dist/gs/strconv/complex.gs.d.ts +3 -0
  136. package/dist/gs/strconv/complex.gs.js +148 -0
  137. package/dist/gs/strconv/complex.gs.js.map +1 -0
  138. package/dist/gs/strconv/index.d.ts +1 -0
  139. package/dist/gs/strconv/index.js +1 -0
  140. package/dist/gs/strconv/index.js.map +1 -1
  141. package/dist/gs/strings/builder.js +1 -1
  142. package/dist/gs/strings/reader.js +9 -5
  143. package/dist/gs/strings/reader.js.map +1 -1
  144. package/dist/gs/strings/replace.js +15 -7
  145. package/dist/gs/strings/replace.js.map +1 -1
  146. package/dist/gs/strings/strings.d.ts +5 -0
  147. package/dist/gs/strings/strings.js +57 -5
  148. package/dist/gs/strings/strings.js.map +1 -1
  149. package/dist/gs/sync/atomic/type.gs.js +9 -9
  150. package/dist/gs/sync/atomic/type.gs.js.map +1 -1
  151. package/dist/gs/sync/atomic/value.gs.js +2 -2
  152. package/dist/gs/sync/atomic/value.gs.js.map +1 -1
  153. package/dist/gs/syscall/env.js +22 -14
  154. package/dist/gs/syscall/env.js.map +1 -1
  155. package/dist/gs/testing/testing.js +55 -13
  156. package/dist/gs/testing/testing.js.map +1 -1
  157. package/dist/gs/time/time.d.ts +24 -1
  158. package/dist/gs/time/time.js +43 -3
  159. package/dist/gs/time/time.js.map +1 -1
  160. package/dist/gs/unique/index.js +7 -1
  161. package/dist/gs/unique/index.js.map +1 -1
  162. package/go.mod +3 -3
  163. package/go.sum +16 -0
  164. package/gs/builtin/runtime-contract.test.ts +218 -21
  165. package/gs/builtin/slice.ts +44 -4
  166. package/gs/builtin/type.ts +226 -59
  167. package/gs/builtin/varRef.ts +85 -2
  168. package/gs/bytes/buffer.gs.ts +1 -1
  169. package/gs/bytes/reader.gs.ts +1 -1
  170. package/gs/compress/zlib/index.test.ts +62 -1
  171. package/gs/compress/zlib/index.ts +53 -16
  172. package/gs/compress/zlib/parity.json +51 -0
  173. package/gs/encoding/json/index.test.ts +360 -6
  174. package/gs/encoding/json/index.ts +679 -38
  175. package/gs/encoding/json/parity.json +81 -0
  176. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +211 -3
  177. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +857 -1
  178. package/gs/github.com/pkg/errors/errors.ts +54 -30
  179. package/gs/go/scanner/index.test.ts +39 -56
  180. package/gs/go/scanner/index.ts +33 -5
  181. package/gs/go/scanner/parity.json +27 -0
  182. package/gs/go/token/index.ts +22 -6
  183. package/gs/hash/index.test.ts +20 -33
  184. package/gs/hash/index.ts +28 -0
  185. package/gs/hash/parity.json +21 -0
  186. package/gs/internal/goarch/index.test.ts +32 -0
  187. package/gs/internal/goarch/index.ts +45 -13
  188. package/gs/internal/goarch/parity.json +144 -0
  189. package/gs/io/fs/fs.ts +26 -14
  190. package/gs/io/fs/readdir.ts +4 -4
  191. package/gs/io/fs/sub.ts +8 -1
  192. package/gs/io/io.ts +1 -0
  193. package/gs/io/parity.json +162 -0
  194. package/gs/math/bits/index.test.ts +14 -1
  195. package/gs/math/bits/index.ts +23 -4
  196. package/gs/math/bits/parity.json +156 -0
  197. package/gs/mime/index.test.ts +90 -0
  198. package/gs/mime/index.ts +369 -6
  199. package/gs/mime/parity.json +36 -0
  200. package/gs/net/http/httptest/index.test.ts +98 -2
  201. package/gs/net/http/httptest/index.ts +101 -6
  202. package/gs/net/http/httptest/parity.json +15 -0
  203. package/gs/net/http/index.test.ts +781 -12
  204. package/gs/net/http/index.ts +1860 -139
  205. package/gs/net/http/meta.json +16 -1
  206. package/gs/net/http/parity.json +193 -0
  207. package/gs/os/dir_unix.gs.ts +1 -1
  208. package/gs/os/error.gs.ts +1 -1
  209. package/gs/os/exec.gs.ts +4 -8
  210. package/gs/os/exec_posix.gs.ts +1 -1
  211. package/gs/os/index.test.ts +9 -0
  212. package/gs/os/index.ts +1 -0
  213. package/gs/os/parity.json +9 -0
  214. package/gs/os/proc.gs.ts +18 -5
  215. package/gs/os/proc.test.ts +26 -0
  216. package/gs/os/root_js.gs.ts +1 -1
  217. package/gs/os/types.gs.ts +1 -1
  218. package/gs/os/types_js.gs.ts +1 -1
  219. package/gs/os/types_unix.gs.ts +1 -1
  220. package/gs/path/path.ts +11 -7
  221. package/gs/reflect/field.test.ts +37 -15
  222. package/gs/reflect/function-types.test.ts +518 -22
  223. package/gs/reflect/index.ts +8 -6
  224. package/gs/reflect/map.ts +20 -0
  225. package/gs/reflect/meta.json +6 -4
  226. package/gs/reflect/parity.json +234 -0
  227. package/gs/reflect/sliceat.test.ts +156 -0
  228. package/gs/reflect/structof.test.ts +401 -0
  229. package/gs/reflect/type.ts +1897 -317
  230. package/gs/reflect/typefor.test.ts +510 -10
  231. package/gs/reflect/types.ts +43 -18
  232. package/gs/reflect/value.ts +105 -45
  233. package/gs/reflect/visiblefields.ts +5 -168
  234. package/gs/runtime/parity.json +24 -0
  235. package/gs/runtime/pprof/index.test.ts +29 -7
  236. package/gs/runtime/pprof/index.ts +56 -30
  237. package/gs/runtime/pprof/parity.json +27 -0
  238. package/gs/runtime/runtime.test.ts +3 -1
  239. package/gs/runtime/runtime.ts +4 -3
  240. package/gs/runtime/trace/index.test.ts +5 -3
  241. package/gs/runtime/trace/index.ts +8 -20
  242. package/gs/runtime/trace/parity.json +36 -0
  243. package/gs/strconv/atoi.gs.ts +1 -1
  244. package/gs/strconv/complex.gs.ts +174 -0
  245. package/gs/strconv/complex.test.ts +65 -0
  246. package/gs/strconv/index.ts +1 -0
  247. package/gs/strconv/parity.json +120 -0
  248. package/gs/strings/builder.ts +1 -1
  249. package/gs/strings/parity.json +186 -0
  250. package/gs/strings/reader.ts +9 -5
  251. package/gs/strings/replace.ts +15 -7
  252. package/gs/strings/strings.test.ts +22 -2
  253. package/gs/strings/strings.ts +64 -6
  254. package/gs/sync/atomic/type.gs.ts +9 -9
  255. package/gs/sync/atomic/value.gs.ts +2 -2
  256. package/gs/syscall/env.ts +29 -14
  257. package/gs/testing/testing.test.ts +67 -0
  258. package/gs/testing/testing.ts +87 -19
  259. package/gs/time/parity.json +225 -0
  260. package/gs/time/time.test.ts +20 -2
  261. package/gs/time/time.ts +49 -7
  262. package/gs/unique/index.ts +7 -1
  263. package/package.json +4 -2
  264. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +0 -217
  265. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +0 -926
  266. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +0 -1
  267. package/gs/github.com/aperturerobotics/starpc/srpc/index.test.ts +0 -38
  268. package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +0 -1361
  269. package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +0 -46
  270. /package/compiler/{wasm_api.go → wasm-api.go} +0 -0
@@ -51,6 +51,88 @@ export interface CloneVT<T> extends CloneMessage {
51
51
  CloneVT(): T
52
52
  }
53
53
 
54
+ export function ClonePtr<T>(v: T | $.VarRef<T> | null): $.VarRef<T> | null {
55
+ const value = $.pointerValueOrNil(v)
56
+ return value == null ? null : $.varRef(value)
57
+ }
58
+
59
+ export function CloneBytes<S extends $.Slice<number> | Uint8Array | null>(
60
+ v: S,
61
+ ): S {
62
+ if (v == null) {
63
+ return null as S
64
+ }
65
+ if (v instanceof Uint8Array) {
66
+ return new Uint8Array(v) as S
67
+ }
68
+ return $.asArray(v).slice() as S
69
+ }
70
+
71
+ export function CloneSlice<S extends $.Slice<T> | null, T>(s: S): S {
72
+ if (s == null) {
73
+ return null as S
74
+ }
75
+ if (s instanceof Uint8Array) {
76
+ return new Uint8Array(s) as S
77
+ }
78
+ return $.asArray(s).slice() as S
79
+ }
80
+
81
+ export function CloneMap<K, V>(m: Map<K, V> | null): Map<K, V> | null {
82
+ return m == null ? null : new Map(m)
83
+ }
84
+
85
+ export function CloneBytesSlice<
86
+ S extends $.Slice<$.Slice<number> | null> | null,
87
+ >(s: S): S {
88
+ if (s == null) {
89
+ return null as S
90
+ }
91
+ return $.asArray(s).map((v) => CloneBytes(v)) as S
92
+ }
93
+
94
+ export function CloneBytesMap<K, V extends $.Slice<number> | null>(
95
+ m: Map<K, V> | null,
96
+ ): Map<K, V> | null {
97
+ if (m == null) {
98
+ return null
99
+ }
100
+ const out = new Map<K, V>()
101
+ for (const [k, v] of m.entries()) {
102
+ out.set(k, CloneBytes(v) as V)
103
+ }
104
+ return out
105
+ }
106
+
107
+ export function CloneVTValue<T extends CloneVT<T>>(
108
+ v: T | $.VarRef<T> | null,
109
+ ): T | null {
110
+ const value = $.pointerValueOrNil(v)
111
+ return value == null ? null : value.CloneVT()
112
+ }
113
+
114
+ export function CloneVTSlice<T extends CloneVT<T>>(
115
+ s: $.Slice<T | $.VarRef<T> | null> | null,
116
+ ): $.Slice<T | null> | null {
117
+ if (s == null) {
118
+ return null
119
+ }
120
+ return $.asArray(s).map((v) => CloneVTValue(v))
121
+ }
122
+
123
+ export function CloneVTMap<K, V extends CloneVT<V>>(
124
+ m: Map<K, V | $.VarRef<V> | null> | null,
125
+ ): Map<K, V | null> | null {
126
+ if (m == null) {
127
+ return null
128
+ }
129
+ const out = new Map<K, V | null>()
130
+ for (const [k, v] of m.entries()) {
131
+ out.set(k, CloneVTValue(v))
132
+ }
133
+ return out
134
+ }
135
+
54
136
  export interface EqualVT<T> {
55
137
  EqualVT(other: T): boolean
56
138
  }
@@ -73,7 +155,9 @@ export function IsEqualVT<T>(
73
155
  arg1: T | $.VarRef<T> | null,
74
156
  arg2?: T | $.VarRef<T> | null,
75
157
  ): boolean {
76
- const t1 = $.pointerValueOrNil(arg2 === undefined ? (arg0 as T | $.VarRef<T> | null) : arg1)
158
+ const t1 = $.pointerValueOrNil(
159
+ arg2 === undefined ? (arg0 as T | $.VarRef<T> | null) : arg1,
160
+ )
77
161
  const t2 = $.pointerValueOrNil(arg2 === undefined ? arg1 : arg2)
78
162
  if (t1 == null || t2 == null) {
79
163
  return t1 == t2
@@ -102,6 +186,531 @@ export function IsEqualVTSlice<T>(
102
186
  return true
103
187
  }
104
188
 
189
+ export function EqualPtr<T>(
190
+ a: T | $.VarRef<T> | null,
191
+ b: T | $.VarRef<T> | null,
192
+ ): boolean {
193
+ const av = $.pointerValueOrNil(a)
194
+ const bv = $.pointerValueOrNil(b)
195
+ return (
196
+ (av == null && bv == null) ||
197
+ (av != null && bv != null && $.comparableEqual(av, bv))
198
+ )
199
+ }
200
+
201
+ export function EqualBytes(
202
+ a: $.Slice<number> | Uint8Array | null,
203
+ b: $.Slice<number> | Uint8Array | null,
204
+ ): boolean {
205
+ if ($.len(a) !== $.len(b)) {
206
+ return false
207
+ }
208
+ const aa = $.asArray(a as $.Slice<number>)
209
+ const bb = $.asArray(b as $.Slice<number>)
210
+ for (let i = 0; i < aa.length; i++) {
211
+ if (aa[i] !== bb[i]) {
212
+ return false
213
+ }
214
+ }
215
+ return true
216
+ }
217
+
218
+ export function EqualBytesPresent(
219
+ a: $.Slice<number> | Uint8Array | null,
220
+ b: $.Slice<number> | Uint8Array | null,
221
+ ): boolean {
222
+ return (
223
+ (a == null && b == null) || (a != null && b != null && EqualBytes(a, b))
224
+ )
225
+ }
226
+
227
+ export function EqualSlice<T>(
228
+ a: $.Slice<T> | null,
229
+ b: $.Slice<T> | null,
230
+ ): boolean {
231
+ if ($.len(a) !== $.len(b)) {
232
+ return false
233
+ }
234
+ const aa = $.asArray(a)
235
+ const bb = $.asArray(b)
236
+ for (let i = 0; i < aa.length; i++) {
237
+ if (!$.comparableEqual(aa[i], bb[i])) {
238
+ return false
239
+ }
240
+ }
241
+ return true
242
+ }
243
+
244
+ export function EqualMap<K, V>(
245
+ a: Map<K, V> | null,
246
+ b: Map<K, V> | null,
247
+ ): boolean {
248
+ if ($.len(a) !== $.len(b)) {
249
+ return false
250
+ }
251
+ for (const [k, av] of (a ?? new Map<K, V>()).entries()) {
252
+ const [bv, ok] = $.mapGet(b, k, undefined)
253
+ if (!ok || !$.comparableEqual(av, bv)) {
254
+ return false
255
+ }
256
+ }
257
+ return true
258
+ }
259
+
260
+ export function EqualBytesSlice(
261
+ a: $.Slice<$.Slice<number> | Uint8Array | null> | null,
262
+ b: $.Slice<$.Slice<number> | Uint8Array | null> | null,
263
+ ): boolean {
264
+ if ($.len(a) !== $.len(b)) {
265
+ return false
266
+ }
267
+ const aa = $.asArray(a)
268
+ const bb = $.asArray(b)
269
+ for (let i = 0; i < aa.length; i++) {
270
+ if (!EqualBytes(aa[i], bb[i])) {
271
+ return false
272
+ }
273
+ }
274
+ return true
275
+ }
276
+
277
+ export function EqualBytesMap<K>(
278
+ a: Map<K, $.Slice<number> | Uint8Array | null> | null,
279
+ b: Map<K, $.Slice<number> | Uint8Array | null> | null,
280
+ ): boolean {
281
+ if ($.len(a) !== $.len(b)) {
282
+ return false
283
+ }
284
+ for (const [k, av] of (a ?? new Map()).entries()) {
285
+ const [bv, ok] = $.mapGet(b, k, null)
286
+ if (!ok || !EqualBytes(av, bv)) {
287
+ return false
288
+ }
289
+ }
290
+ return true
291
+ }
292
+
293
+ export function EqualVTImplicit<T extends EqualVT<T>>(
294
+ a: T | $.VarRef<T> | null,
295
+ b: T | $.VarRef<T> | null,
296
+ empty: () => T,
297
+ ): boolean {
298
+ let av = $.pointerValueOrNil(a)
299
+ let bv = $.pointerValueOrNil(b)
300
+ if (av === bv) {
301
+ return true
302
+ }
303
+ if (av == null) {
304
+ av = empty()
305
+ }
306
+ if (bv == null) {
307
+ bv = empty()
308
+ }
309
+ return av.EqualVT(bv)
310
+ }
311
+
312
+ export function EqualVTSliceImplicit<T extends EqualVT<T>>(
313
+ a: $.Slice<T | $.VarRef<T> | null> | null,
314
+ b: $.Slice<T | $.VarRef<T> | null> | null,
315
+ empty: () => T,
316
+ ): boolean {
317
+ if ($.len(a) !== $.len(b)) {
318
+ return false
319
+ }
320
+ const aa = $.asArray(a)
321
+ const bb = $.asArray(b)
322
+ for (let i = 0; i < aa.length; i++) {
323
+ if (!EqualVTImplicit(aa[i], bb[i], empty)) {
324
+ return false
325
+ }
326
+ }
327
+ return true
328
+ }
329
+
330
+ export function EqualVTMapImplicit<K, V extends EqualVT<V>>(
331
+ a: Map<K, V | $.VarRef<V> | null> | null,
332
+ b: Map<K, V | $.VarRef<V> | null> | null,
333
+ empty: () => V,
334
+ ): boolean {
335
+ if ($.len(a) !== $.len(b)) {
336
+ return false
337
+ }
338
+ for (const [k, av] of (a ?? new Map()).entries()) {
339
+ const [bv, ok] = $.mapGet(b, k, null)
340
+ if (!ok || !EqualVTImplicit(av, bv, empty)) {
341
+ return false
342
+ }
343
+ }
344
+ return true
345
+ }
346
+
347
+ type BoundMessageType = {
348
+ fields?: { list(): readonly BoundFieldInfo[] }
349
+ clone?: (value: any) => any
350
+ equals?: (a: any, b: any) => boolean
351
+ fromBinary: (bytes: Uint8Array | null | undefined) => any
352
+ fromJson?: (value: unknown) => any
353
+ fromJsonString?: (value: string | null | undefined) => any
354
+ toBinary: (value: any) => Uint8Array
355
+ toJson?: (value: any) => unknown
356
+ toJsonString?: (value: any) => string
357
+ }
358
+
359
+ type BoundFieldInfo = {
360
+ localName: string
361
+ kind: string
362
+ repeated?: boolean
363
+ oneof?: { localName: string }
364
+ T?: any
365
+ V?: BoundFieldInfo
366
+ }
367
+
368
+ type BoundMessageCtor<T = any> = {
369
+ new (init?: any): T
370
+ __protobufTypeScriptFields?: Record<string, BoundMessageCtor>
371
+ __protobufTypeScriptMessage?: BoundMessageType
372
+ }
373
+
374
+ function boundMessageType(ctor: BoundMessageCtor): BoundMessageType {
375
+ const messageType = ctor.__protobufTypeScriptMessage
376
+ if (messageType == null) {
377
+ throw new Error('protobuf TypeScript binding is missing message type')
378
+ }
379
+ return messageType
380
+ }
381
+
382
+ function resolveBoundMessageType(value: any): BoundMessageType {
383
+ return typeof value === 'function' ? value() : value
384
+ }
385
+
386
+ function boundFieldGoName(field: BoundFieldInfo): string {
387
+ if (field.localName.length === 0) {
388
+ return field.localName
389
+ }
390
+ return field.localName[0].toUpperCase() + field.localName.slice(1)
391
+ }
392
+
393
+ function boundFieldValue(source: any, field: BoundFieldInfo): any {
394
+ if (source == null) {
395
+ return undefined
396
+ }
397
+ const local = source[field.localName]
398
+ if (local !== undefined) {
399
+ return local
400
+ }
401
+ return source[boundFieldGoName(field)]
402
+ }
403
+
404
+ function toTypeScriptScalarValue(value: any): any {
405
+ const unwrapped = $.pointerValueOrNil(value)
406
+ if (unwrapped instanceof Uint8Array) {
407
+ return unwrapped
408
+ }
409
+ return unwrapped
410
+ }
411
+
412
+ function toTypeScriptFieldValue(
413
+ field: BoundFieldInfo,
414
+ value: any,
415
+ ctor?: BoundMessageCtor,
416
+ ): any {
417
+ value = $.pointerValueOrNil(value)
418
+ if (value == null) {
419
+ return undefined
420
+ }
421
+ if (field.repeated) {
422
+ return $.asArray(value).map((item) =>
423
+ toTypeScriptFieldValue({ ...field, repeated: false }, item, ctor),
424
+ )
425
+ }
426
+ if (field.kind === 'map') {
427
+ const out: Record<string, unknown> = {}
428
+ const valueInfo = field.V
429
+ const entries =
430
+ value instanceof Map ? Array.from(value.entries()) : Object.entries(value)
431
+ for (const [key, item] of entries) {
432
+ out[String(key)] =
433
+ valueInfo != null ?
434
+ toTypeScriptFieldValue(valueInfo, item, ctor)
435
+ : toTypeScriptScalarValue(item)
436
+ }
437
+ return out
438
+ }
439
+ if (field.kind === 'message') {
440
+ const messageType = resolveBoundMessageType(field.T)
441
+ return toTypeScriptMessage(value, messageType, ctor)
442
+ }
443
+ return toTypeScriptScalarValue(value)
444
+ }
445
+
446
+ function toTypeScriptMessage(
447
+ value: any,
448
+ messageType: BoundMessageType,
449
+ ctor?: BoundMessageCtor,
450
+ ): any {
451
+ value = $.pointerValueOrNil(value)
452
+ if (value == null) {
453
+ return undefined
454
+ }
455
+ const fields = messageType.fields?.list()
456
+ if (fields == null) {
457
+ return value
458
+ }
459
+ const fieldCtors = ctor?.__protobufTypeScriptFields ?? {}
460
+ const out: Record<string, unknown> = {}
461
+ for (const field of fields) {
462
+ if (field.oneof != null) {
463
+ continue
464
+ }
465
+ const raw = boundFieldValue(value, field)
466
+ if (raw === undefined || raw === null) {
467
+ continue
468
+ }
469
+ out[field.localName] = toTypeScriptFieldValue(
470
+ field,
471
+ raw,
472
+ fieldCtors[field.localName],
473
+ )
474
+ }
475
+ return out
476
+ }
477
+
478
+ function fromTypeScriptScalarValue(value: any): any {
479
+ if (value instanceof Uint8Array) {
480
+ return value
481
+ }
482
+ return value
483
+ }
484
+
485
+ function fromTypeScriptFieldValue(
486
+ field: BoundFieldInfo,
487
+ value: any,
488
+ ctor?: BoundMessageCtor,
489
+ ): any {
490
+ if (value == null) {
491
+ return null
492
+ }
493
+ if (field.repeated) {
494
+ return $.arrayToSlice(
495
+ value.map((item: any) =>
496
+ fromTypeScriptFieldValue({ ...field, repeated: false }, item, ctor),
497
+ ),
498
+ )
499
+ }
500
+ if (field.kind === 'map') {
501
+ const valueInfo = field.V
502
+ const out = new Map<any, any>()
503
+ for (const [key, item] of Object.entries(value)) {
504
+ out.set(
505
+ key,
506
+ valueInfo != null ?
507
+ fromTypeScriptFieldValue(valueInfo, item, ctor)
508
+ : fromTypeScriptScalarValue(item),
509
+ )
510
+ }
511
+ return out
512
+ }
513
+ if (field.kind === 'message') {
514
+ const messageType = resolveBoundMessageType(field.T)
515
+ if (ctor == null) {
516
+ return value
517
+ }
518
+ return fromTypeScriptMessage(value, ctor, messageType)
519
+ }
520
+ return fromTypeScriptScalarValue(value)
521
+ }
522
+
523
+ function fromTypeScriptMessage(
524
+ value: any,
525
+ ctor: BoundMessageCtor,
526
+ messageType?: BoundMessageType,
527
+ ): any {
528
+ if (value == null) {
529
+ return null
530
+ }
531
+ const out = new ctor()
532
+ const fields = (messageType ?? boundMessageType(ctor)).fields?.list()
533
+ if (fields == null) {
534
+ return Object.assign(out, value)
535
+ }
536
+ const fieldCtors = ctor.__protobufTypeScriptFields ?? {}
537
+ for (const field of fields) {
538
+ if (field.oneof != null) {
539
+ continue
540
+ }
541
+ const raw = value[field.localName]
542
+ if (raw === undefined || raw === null) {
543
+ continue
544
+ }
545
+ out[boundFieldGoName(field)] = fromTypeScriptFieldValue(
546
+ field,
547
+ raw,
548
+ fieldCtors[field.localName],
549
+ )
550
+ }
551
+ return out
552
+ }
553
+
554
+ export function CloneBoundMessage<T>(
555
+ ctor: BoundMessageCtor<T>,
556
+ value: T | $.VarRef<T> | null,
557
+ ): T | null {
558
+ const messageType = boundMessageType(ctor)
559
+ const encoded = toTypeScriptMessage(value, messageType, ctor)
560
+ const cloned = messageType.clone?.(encoded) ?? structuredClone(encoded)
561
+ return fromTypeScriptMessage(cloned, ctor, messageType)
562
+ }
563
+
564
+ export function EqualBoundMessage<T>(
565
+ ctor: BoundMessageCtor<T>,
566
+ a: T | $.VarRef<T> | null,
567
+ b: T | $.VarRef<T> | null,
568
+ ): boolean {
569
+ const messageType = boundMessageType(ctor)
570
+ const left = toTypeScriptMessage(a, messageType, ctor)
571
+ const right = toTypeScriptMessage(b, messageType, ctor)
572
+ return (
573
+ messageType.equals?.(left, right) ??
574
+ JSON.stringify(left) === JSON.stringify(right)
575
+ )
576
+ }
577
+
578
+ export function MarshalBoundMessageVT<T>(
579
+ ctor: BoundMessageCtor<T>,
580
+ value: T | $.VarRef<T> | null,
581
+ ): [$.Slice<number>, $.GoError] {
582
+ try {
583
+ const messageType = boundMessageType(ctor)
584
+ return [
585
+ messageType.toBinary(toTypeScriptMessage(value, messageType, ctor)),
586
+ null,
587
+ ]
588
+ } catch (err) {
589
+ return [null, $.toGoError(err as Error)]
590
+ }
591
+ }
592
+
593
+ export function MarshalBoundMessageToSizedBufferVT<T>(
594
+ ctor: BoundMessageCtor<T>,
595
+ value: T | $.VarRef<T> | null,
596
+ dAtA: $.Slice<number>,
597
+ ): [number, $.GoError] {
598
+ const [bytes, err] = MarshalBoundMessageVT(ctor, value)
599
+ if (err != null) {
600
+ return [0, err]
601
+ }
602
+ const offset = $.len(dAtA) - $.len(bytes)
603
+ const src = $.asArray(bytes)
604
+ for (let i = 0; i < src.length; i++) {
605
+ ;(dAtA as any)[offset + i] = src[i]
606
+ }
607
+ return [offset, null]
608
+ }
609
+
610
+ export function SizeBoundMessageVT<T>(
611
+ ctor: BoundMessageCtor<T>,
612
+ value: T | $.VarRef<T> | null,
613
+ ): number {
614
+ const [bytes, err] = MarshalBoundMessageVT(ctor, value)
615
+ return err == null ? $.len(bytes) : 0
616
+ }
617
+
618
+ export function UnmarshalBoundMessageVT<T>(
619
+ ctor: BoundMessageCtor<T>,
620
+ target: T | $.VarRef<T> | null,
621
+ data: $.Slice<number>,
622
+ ): $.GoError {
623
+ try {
624
+ const messageType = boundMessageType(ctor)
625
+ const decoded = messageType.fromBinary(Uint8Array.from($.asArray(data)))
626
+ const next = fromTypeScriptMessage(decoded, ctor, messageType)
627
+ $.assignStruct($.pointerValue(target), $.markAsStructValue(next))
628
+ return null
629
+ } catch (err) {
630
+ return $.toGoError(err as Error)
631
+ }
632
+ }
633
+
634
+ export function MarshalBoundMessageJSON<T>(
635
+ ctor: BoundMessageCtor<T>,
636
+ value: T | $.VarRef<T> | null,
637
+ ): [$.Slice<number>, $.GoError] {
638
+ try {
639
+ const messageType = boundMessageType(ctor)
640
+ const encoded = toTypeScriptMessage(value, messageType, ctor)
641
+ const json =
642
+ messageType.toJsonString?.(encoded) ??
643
+ JSON.stringify(messageType.toJson?.(encoded) ?? encoded)
644
+ return [$.stringToBytes(json), null]
645
+ } catch (err) {
646
+ return [null, $.toGoError(err as Error)]
647
+ }
648
+ }
649
+
650
+ export function UnmarshalBoundMessageJSON<T>(
651
+ ctor: BoundMessageCtor<T>,
652
+ target: T | $.VarRef<T> | null,
653
+ data: $.Slice<number>,
654
+ ): $.GoError {
655
+ try {
656
+ const messageType = boundMessageType(ctor)
657
+ const text = $.bytesToString(data)
658
+ const decoded =
659
+ messageType.fromJsonString?.(text) ??
660
+ messageType.fromJson?.(JSON.parse(text))
661
+ const next = fromTypeScriptMessage(decoded, ctor, messageType)
662
+ $.assignStruct($.pointerValue(target), $.markAsStructValue(next))
663
+ return null
664
+ } catch (err) {
665
+ return $.toGoError(err as Error)
666
+ }
667
+ }
668
+
669
+ export function MarshalBoundMessageProtoJSON<T>(
670
+ ctor: BoundMessageCtor<T>,
671
+ value: T | $.VarRef<T> | null,
672
+ state: {
673
+ Write(v: $.Slice<number>): [number, $.GoError]
674
+ SetError(err: $.GoError): void
675
+ } | null,
676
+ ): void {
677
+ if (state == null) {
678
+ return
679
+ }
680
+ const [data, err] = MarshalBoundMessageJSON(ctor, value)
681
+ if (err != null) {
682
+ state.SetError(err)
683
+ return
684
+ }
685
+ state.Write(data)
686
+ }
687
+
688
+ export function UnmarshalBoundMessageProtoJSON<T>(
689
+ ctor: BoundMessageCtor<T>,
690
+ target: T | $.VarRef<T> | null,
691
+ state: { SetError(err: $.GoError): void } | null,
692
+ ): void {
693
+ if (state == null) {
694
+ return
695
+ }
696
+ try {
697
+ const messageType = boundMessageType(ctor)
698
+ const decoded = messageType.fromJson?.((state as any).value)
699
+ const next = fromTypeScriptMessage(decoded, ctor, messageType)
700
+ $.assignStruct($.pointerValue(target), $.markAsStructValue(next))
701
+ } catch (err) {
702
+ state.SetError($.toGoError(err as Error))
703
+ }
704
+ }
705
+
706
+ export function MarshalBoundMessageProtoText<T>(
707
+ ctor: BoundMessageCtor<T>,
708
+ value: T | $.VarRef<T> | null,
709
+ ): string {
710
+ const [data, err] = MarshalBoundMessageJSON(ctor, value)
711
+ return err == null ? $.bytesToString(data) : err.Error()
712
+ }
713
+
105
714
  export function EncodeVarint(
106
715
  dAtA: $.Slice<number>,
107
716
  offset: number,
@@ -163,6 +772,253 @@ export function SizeOfVarint(x: number | bigint): number {
163
772
  return n
164
773
  }
165
774
 
775
+ export function SizeOfZigzag(x: number | bigint): number {
776
+ const value =
777
+ typeof x === 'bigint' ?
778
+ BigInt.asIntN(64, x)
779
+ : BigInt.asIntN(64, BigInt(Math.trunc(x)))
780
+ return SizeOfVarint(BigInt.asUintN(64, (value << 1n) ^ (value >> 63n)))
781
+ }
782
+
783
+ export function SizeVarintValue(keySize: number, v: number | bigint): number {
784
+ return keySize + SizeOfVarint(v)
785
+ }
786
+
787
+ export function SizeVarintNonZero(keySize: number, v: number | bigint): number {
788
+ return normalizedVarint(v) === 0n ? 0 : SizeVarintValue(keySize, v)
789
+ }
790
+
791
+ export function SizeVarintPtr(
792
+ keySize: number,
793
+ v: number | bigint | $.VarRef<number | bigint> | null,
794
+ ): number {
795
+ const value = $.pointerValueOrNil(v)
796
+ return value == null ? 0 : SizeVarintValue(keySize, value)
797
+ }
798
+
799
+ export function SizeVarintSlice(
800
+ keySize: number,
801
+ vals: $.Slice<number | bigint> | null,
802
+ ): number {
803
+ let n = 0
804
+ for (const v of vals ?? []) {
805
+ n += SizeVarintValue(keySize, v)
806
+ }
807
+ return n
808
+ }
809
+
810
+ export function SizeVarintPacked(
811
+ keySize: number,
812
+ vals: $.Slice<number | bigint> | null,
813
+ ): number {
814
+ if ($.len(vals) === 0) {
815
+ return 0
816
+ }
817
+ let l = 0
818
+ for (const v of vals ?? []) {
819
+ l += SizeOfVarint(v)
820
+ }
821
+ return SizeBytesValue(keySize, l)
822
+ }
823
+
824
+ export function SizeZigzagValue(keySize: number, v: number | bigint): number {
825
+ return keySize + SizeOfZigzag(v)
826
+ }
827
+
828
+ export function SizeZigzagNonZero(keySize: number, v: number | bigint): number {
829
+ return BigInt.asIntN(64, normalizedVarint(v)) === 0n ?
830
+ 0
831
+ : SizeZigzagValue(keySize, v)
832
+ }
833
+
834
+ export function SizeZigzagPtr(
835
+ keySize: number,
836
+ v: number | bigint | $.VarRef<number | bigint> | null,
837
+ ): number {
838
+ const value = $.pointerValueOrNil(v)
839
+ return value == null ? 0 : SizeZigzagValue(keySize, value)
840
+ }
841
+
842
+ export function SizeZigzagSlice(
843
+ keySize: number,
844
+ vals: $.Slice<number | bigint> | null,
845
+ ): number {
846
+ let n = 0
847
+ for (const v of vals ?? []) {
848
+ n += SizeZigzagValue(keySize, v)
849
+ }
850
+ return n
851
+ }
852
+
853
+ export function SizeZigzagPacked(
854
+ keySize: number,
855
+ vals: $.Slice<number | bigint> | null,
856
+ ): number {
857
+ if ($.len(vals) === 0) {
858
+ return 0
859
+ }
860
+ let l = 0
861
+ for (const v of vals ?? []) {
862
+ l += SizeOfZigzag(v)
863
+ }
864
+ return SizeBytesValue(keySize, l)
865
+ }
866
+
867
+ export function SizeFixed32Value(keySize: number): number {
868
+ return keySize + 4
869
+ }
870
+
871
+ export function SizeFixed32NonZero(keySize: number, v: number): number {
872
+ return v === 0 ? 0 : SizeFixed32Value(keySize)
873
+ }
874
+
875
+ export function SizeFixed32Ptr(
876
+ keySize: number,
877
+ v: number | $.VarRef<number> | null,
878
+ ): number {
879
+ return $.pointerValueOrNil(v) == null ? 0 : SizeFixed32Value(keySize)
880
+ }
881
+
882
+ export function SizeFixed32Slice(
883
+ keySize: number,
884
+ vals: $.Slice<number> | null,
885
+ ): number {
886
+ return $.len(vals) * SizeFixed32Value(keySize)
887
+ }
888
+
889
+ export function SizeFixed32Packed(
890
+ keySize: number,
891
+ vals: $.Slice<number> | null,
892
+ ): number {
893
+ return $.len(vals) === 0 ? 0 : SizeBytesValue(keySize, $.len(vals) * 4)
894
+ }
895
+
896
+ export function SizeFixed64Value(keySize: number): number {
897
+ return keySize + 8
898
+ }
899
+
900
+ export function SizeFixed64NonZero(
901
+ keySize: number,
902
+ v: number | bigint,
903
+ ): number {
904
+ return v === 0 || v === 0n ? 0 : SizeFixed64Value(keySize)
905
+ }
906
+
907
+ export function SizeFixed64Ptr(
908
+ keySize: number,
909
+ v: number | bigint | $.VarRef<number | bigint> | null,
910
+ ): number {
911
+ return $.pointerValueOrNil(v) == null ? 0 : SizeFixed64Value(keySize)
912
+ }
913
+
914
+ export function SizeFixed64Slice(
915
+ keySize: number,
916
+ vals: $.Slice<number | bigint> | null,
917
+ ): number {
918
+ return $.len(vals) * SizeFixed64Value(keySize)
919
+ }
920
+
921
+ export function SizeFixed64Packed(
922
+ keySize: number,
923
+ vals: $.Slice<number | bigint> | null,
924
+ ): number {
925
+ return $.len(vals) === 0 ? 0 : SizeBytesValue(keySize, $.len(vals) * 8)
926
+ }
927
+
928
+ export function SizeBoolValue(keySize: number): number {
929
+ return keySize + 1
930
+ }
931
+
932
+ export function SizeBoolNonZero(keySize: number, v: boolean): number {
933
+ return v ? SizeBoolValue(keySize) : 0
934
+ }
935
+
936
+ export function SizeBoolPtr(
937
+ keySize: number,
938
+ v: boolean | $.VarRef<boolean> | null,
939
+ ): number {
940
+ return $.pointerValueOrNil(v) == null ? 0 : SizeBoolValue(keySize)
941
+ }
942
+
943
+ export function SizeBoolSlice(
944
+ keySize: number,
945
+ vals: $.Slice<boolean> | null,
946
+ ): number {
947
+ return $.len(vals) * SizeBoolValue(keySize)
948
+ }
949
+
950
+ export function SizeBoolPacked(
951
+ keySize: number,
952
+ vals: $.Slice<boolean> | null,
953
+ ): number {
954
+ return $.len(vals) === 0 ? 0 : SizeBytesValue(keySize, $.len(vals))
955
+ }
956
+
957
+ export function SizeStringValue(keySize: number, v: string): number {
958
+ const l = $.len(v)
959
+ return keySize + l + SizeOfVarint(l)
960
+ }
961
+
962
+ export function SizeStringNonEmpty(keySize: number, v: string): number {
963
+ return $.len(v) === 0 ? 0 : SizeStringValue(keySize, v)
964
+ }
965
+
966
+ export function SizeStringPtr(
967
+ keySize: number,
968
+ v: string | $.VarRef<string> | null,
969
+ ): number {
970
+ const value = $.pointerValueOrNil(v)
971
+ return value == null ? 0 : SizeStringValue(keySize, value)
972
+ }
973
+
974
+ export function SizeStringSlice(
975
+ keySize: number,
976
+ vals: $.Slice<string> | null,
977
+ ): number {
978
+ let n = 0
979
+ for (const v of vals ?? []) {
980
+ n += SizeStringValue(keySize, v)
981
+ }
982
+ return n
983
+ }
984
+
985
+ export function SizeBytesValue(keySize: number, l: number): number {
986
+ return keySize + l + SizeOfVarint(l)
987
+ }
988
+
989
+ export function SizeBytesNonEmpty(
990
+ keySize: number,
991
+ v: $.Slice<number> | null,
992
+ ): number {
993
+ return $.len(v) === 0 ? 0 : SizeBytesValue(keySize, $.len(v))
994
+ }
995
+
996
+ export function SizeBytesPresent(
997
+ keySize: number,
998
+ v: $.Slice<number> | null,
999
+ ): number {
1000
+ return v == null ? 0 : SizeBytesValue(keySize, $.len(v))
1001
+ }
1002
+
1003
+ export function SizeBytesSlice(
1004
+ keySize: number,
1005
+ vals: $.Slice<$.Slice<number> | null> | null,
1006
+ ): number {
1007
+ let n = 0
1008
+ for (const v of vals ?? []) {
1009
+ n += SizeBytesValue(keySize, $.len(v))
1010
+ }
1011
+ return n
1012
+ }
1013
+
1014
+ export function SizeMessage(keySize: number, msgSize: number): number {
1015
+ return SizeBytesValue(keySize, msgSize)
1016
+ }
1017
+
1018
+ export function SizeGroup(keySize: number, msgSize: number): number {
1019
+ return msgSize + 2 * keySize
1020
+ }
1021
+
166
1022
  function normalizedVarint(value: number | bigint): bigint {
167
1023
  if (typeof value === 'bigint') {
168
1024
  return BigInt.asUintN(64, value)