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
@@ -0,0 +1,81 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "strict": true,
4
+ "symbols": {
5
+ "Compact": {
6
+ "status": "real"
7
+ },
8
+ "Decoder": {
9
+ "status": "real"
10
+ },
11
+ "Delim": {
12
+ "status": "real"
13
+ },
14
+ "Encoder": {
15
+ "status": "real"
16
+ },
17
+ "HTMLEscape": {
18
+ "status": "real"
19
+ },
20
+ "Indent": {
21
+ "status": "real"
22
+ },
23
+ "InvalidUnmarshalError": {
24
+ "status": "real"
25
+ },
26
+ "InvalidUTF8Error": {
27
+ "status": "real"
28
+ },
29
+ "Marshal": {
30
+ "status": "real"
31
+ },
32
+ "Marshaler": {
33
+ "status": "real"
34
+ },
35
+ "MarshalerError": {
36
+ "status": "real"
37
+ },
38
+ "MarshalIndent": {
39
+ "status": "real"
40
+ },
41
+ "NewDecoder": {
42
+ "status": "real"
43
+ },
44
+ "NewEncoder": {
45
+ "status": "real"
46
+ },
47
+ "Number": {
48
+ "status": "real"
49
+ },
50
+ "RawMessage": {
51
+ "status": "real"
52
+ },
53
+ "SyntaxError": {
54
+ "status": "real"
55
+ },
56
+ "Token": {
57
+ "status": "real"
58
+ },
59
+ "Unmarshal": {
60
+ "status": "real"
61
+ },
62
+ "Unmarshaler": {
63
+ "status": "real"
64
+ },
65
+ "UnmarshalFieldError": {
66
+ "status": "real"
67
+ },
68
+ "UnmarshalTypeError": {
69
+ "status": "real"
70
+ },
71
+ "UnsupportedTypeError": {
72
+ "status": "real"
73
+ },
74
+ "UnsupportedValueError": {
75
+ "status": "real"
76
+ },
77
+ "Valid": {
78
+ "status": "real"
79
+ }
80
+ }
81
+ }
@@ -3,7 +3,17 @@ import { describe, expect, it } from 'vitest'
3
3
  import * as $ from '../../../builtin/index.js'
4
4
  import {
5
5
  AppendVarint,
6
+ CloneBytes,
7
+ CloneBytesMap,
8
+ CloneBytesSlice,
9
+ CloneMap,
6
10
  type CloneMessage,
11
+ ClonePtr,
12
+ CloneSlice,
13
+ type CloneVT,
14
+ CloneVTMap,
15
+ CloneVTSlice,
16
+ CloneVTValue,
7
17
  CompareEqualVT,
8
18
  ConsumeVarint,
9
19
  DecodeFixed32,
@@ -16,8 +26,55 @@ import {
16
26
  ErrIntOverflow,
17
27
  ErrInvalidLength,
18
28
  ErrUnexpectedEndOfGroup,
29
+ EqualBytes,
30
+ EqualBytesMap,
31
+ EqualBytesPresent,
32
+ EqualBytesSlice,
33
+ EqualMap,
34
+ EqualPtr,
35
+ EqualSlice,
36
+ EqualVTImplicit,
37
+ EqualVTMapImplicit,
38
+ EqualVTSliceImplicit,
39
+ type EqualVT,
19
40
  IsEqualVTSlice,
41
+ SizeBoolNonZero,
42
+ SizeBoolPacked,
43
+ SizeBoolPtr,
44
+ SizeBoolSlice,
45
+ SizeBoolValue,
46
+ SizeBytesNonEmpty,
47
+ SizeBytesPresent,
48
+ SizeBytesSlice,
49
+ SizeBytesValue,
50
+ SizeFixed32NonZero,
51
+ SizeFixed32Packed,
52
+ SizeFixed32Ptr,
53
+ SizeFixed32Slice,
54
+ SizeFixed32Value,
55
+ SizeFixed64NonZero,
56
+ SizeFixed64Packed,
57
+ SizeFixed64Ptr,
58
+ SizeFixed64Slice,
59
+ SizeFixed64Value,
60
+ SizeGroup,
61
+ SizeMessage,
20
62
  SizeOfVarint,
63
+ SizeOfZigzag,
64
+ SizeStringNonEmpty,
65
+ SizeStringPtr,
66
+ SizeStringSlice,
67
+ SizeStringValue,
68
+ SizeVarintNonZero,
69
+ SizeVarintPacked,
70
+ SizeVarintPtr,
71
+ SizeVarintSlice,
72
+ SizeVarintValue,
73
+ SizeZigzagNonZero,
74
+ SizeZigzagPacked,
75
+ SizeZigzagPtr,
76
+ SizeZigzagSlice,
77
+ SizeZigzagValue,
21
78
  Skip,
22
79
  } from './index.js'
23
80
 
@@ -29,6 +86,42 @@ class TestValue {
29
86
  }
30
87
  }
31
88
 
89
+ class TestCloneValue
90
+ implements CloneVT<TestCloneValue>, EqualVT<TestCloneValue>
91
+ {
92
+ constructor(private readonly cloneValue: string) {}
93
+
94
+ SizeVT(): number {
95
+ return 0
96
+ }
97
+
98
+ MarshalToSizedBufferVT(): [number, $.GoError] {
99
+ return [0, null]
100
+ }
101
+
102
+ MarshalVT(): [$.Slice<number>, $.GoError] {
103
+ return [null, null]
104
+ }
105
+
106
+ UnmarshalVT(): $.GoError {
107
+ return null
108
+ }
109
+
110
+ Reset(): void {}
111
+
112
+ CloneMessageVT(): CloneMessage | null {
113
+ return this.CloneVT()
114
+ }
115
+
116
+ CloneVT(): TestCloneValue {
117
+ return new TestCloneValue(this.cloneValue)
118
+ }
119
+
120
+ EqualVT(other: TestCloneValue): boolean {
121
+ return this.cloneValue === other.cloneValue
122
+ }
123
+ }
124
+
32
125
  class TestCloneMessage implements CloneMessage {
33
126
  SizeVT(): number {
34
127
  return 0
@@ -78,6 +171,68 @@ describe('protobuf-go-lite EqualVT helpers', () => {
78
171
  })
79
172
  })
80
173
 
174
+ describe('protobuf-go-lite static helper overrides', () => {
175
+ it('clones pointer, slice, map, bytes, and VT values', () => {
176
+ const ptr = $.varRef(7)
177
+ const clonedPtr = ClonePtr(ptr)
178
+ expect(clonedPtr).not.toBe(ptr)
179
+ expect(clonedPtr?.value).toBe(7)
180
+
181
+ const bytes = new Uint8Array([1, 2])
182
+ const clonedBytes = CloneBytes(bytes)
183
+ expect(clonedBytes).not.toBe(bytes)
184
+ expect(Array.from(clonedBytes ?? [])).toEqual([1, 2])
185
+
186
+ expect(CloneSlice([1, 2])).toEqual([1, 2])
187
+ expect(CloneMap(new Map([['a', 1]]))?.get('a')).toBe(1)
188
+
189
+ const bytesSlice = CloneBytesSlice([new Uint8Array([3])])
190
+ expect(bytesSlice?.[0]).not.toBe(bytes)
191
+ expect(Array.from(bytesSlice?.[0] ?? [])).toEqual([3])
192
+
193
+ const bytesMap = CloneBytesMap(new Map([['a', new Uint8Array([4])]]))
194
+ expect(Array.from(bytesMap?.get('a') ?? [])).toEqual([4])
195
+
196
+ const msg = new TestCloneValue('x')
197
+ expect(CloneVTValue(msg)).not.toBe(msg)
198
+ expect(CloneVTSlice([msg])?.[0]).not.toBe(msg)
199
+ expect(CloneVTMap(new Map([['a', msg]]))?.get('a')).not.toBe(msg)
200
+ })
201
+
202
+ it('compares pointer, slice, map, bytes, and implicit VT values', () => {
203
+ expect(EqualPtr($.varRef(1), $.varRef(1))).toBe(true)
204
+ expect(EqualPtr($.varRef(1), $.varRef(2))).toBe(false)
205
+ expect(EqualBytes(new Uint8Array([1]), [1])).toBe(true)
206
+ expect(EqualBytesPresent(null, new Uint8Array())).toBe(false)
207
+ expect(EqualSlice([1, 2], [1, 2])).toBe(true)
208
+ expect(EqualMap(new Map([['a', 1]]), new Map([['a', 1]]))).toBe(true)
209
+ expect(EqualBytesSlice([new Uint8Array([1])], [[1]])).toBe(true)
210
+ expect(
211
+ EqualBytesMap(
212
+ new Map([['a', new Uint8Array([1])]]),
213
+ new Map([['a', [1]]]),
214
+ ),
215
+ ).toBe(true)
216
+
217
+ const empty = () => new TestCloneValue('')
218
+ expect(EqualVTImplicit(null, new TestCloneValue(''), empty)).toBe(true)
219
+ expect(
220
+ EqualVTSliceImplicit(
221
+ [null, new TestCloneValue('x')],
222
+ [new TestCloneValue(''), new TestCloneValue('x')],
223
+ empty,
224
+ ),
225
+ ).toBe(true)
226
+ expect(
227
+ EqualVTMapImplicit(
228
+ new Map([['a', null]]),
229
+ new Map([['a', new TestCloneValue('')]]),
230
+ empty,
231
+ ),
232
+ ).toBe(true)
233
+ })
234
+ })
235
+
81
236
  describe('protobuf-go-lite runtime interfaces', () => {
82
237
  it('registers CloneMessage metadata for Go type assertions', () => {
83
238
  const [value, ok] = $.typeAssertTuple<CloneMessage | null>(
@@ -105,9 +260,13 @@ describe('protobuf-go-lite wire helpers', () => {
105
260
  expect(DecodeVarintUint32(buf, offset)).toEqual([300, 4, null])
106
261
  expect(Array.from(AppendVarint([], 300) as number[])).toEqual([0xac, 0x02])
107
262
  expect(SizeOfVarint(0xffffffffffffffffn)).toBe(10)
108
- expect(Array.from(AppendVarint([], 0xffffffffffffffffn) as number[])).toEqual([
109
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
110
- ])
263
+ expect(SizeOfZigzag(-1)).toBe(1)
264
+ expect(SizeOfZigzag(1)).toBe(1)
265
+ expect(SizeOfZigzag(-64)).toBe(1)
266
+ expect(SizeOfZigzag(-65)).toBe(2)
267
+ expect(
268
+ Array.from(AppendVarint([], 0xffffffffffffffffn) as number[]),
269
+ ).toEqual([0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01])
111
270
  expect(ConsumeVarint(AppendVarint([], 0xffffffffffffffffn))).toEqual([
112
271
  0xffffffffffffffffn,
113
272
  10,
@@ -147,4 +306,53 @@ describe('protobuf-go-lite wire helpers', () => {
147
306
  const [, eof] = Skip(new Uint8Array([0x08, 0x80]))
148
307
  expect(eof?.Error()).toBe('unexpected EOF')
149
308
  })
309
+
310
+ it('reports helper-backed protobuf sizes', () => {
311
+ expect(SizeVarintValue(1, 300)).toBe(3)
312
+ expect(SizeVarintNonZero(1, 0)).toBe(0)
313
+ expect(SizeVarintNonZero(1, 300)).toBe(3)
314
+ expect(SizeVarintPtr(1, null)).toBe(0)
315
+ expect(SizeVarintPtr(1, $.varRef(300))).toBe(3)
316
+ expect(SizeVarintSlice(1, [1, 300])).toBe(5)
317
+ expect(SizeVarintPacked(1, [1, 300])).toBe(5)
318
+
319
+ expect(SizeZigzagValue(1, -65)).toBe(3)
320
+ expect(SizeZigzagNonZero(1, 0)).toBe(0)
321
+ expect(SizeZigzagPtr(1, $.varRef(-1))).toBe(2)
322
+ expect(SizeZigzagSlice(1, [-1, -65])).toBe(5)
323
+ expect(SizeZigzagPacked(1, [-1, -65])).toBe(5)
324
+
325
+ expect(SizeFixed32Value(1)).toBe(5)
326
+ expect(SizeFixed32NonZero(1, 0)).toBe(0)
327
+ expect(SizeFixed32Ptr(1, $.varRef(1))).toBe(5)
328
+ expect(SizeFixed32Slice(1, [1, 2])).toBe(10)
329
+ expect(SizeFixed32Packed(1, [1, 2])).toBe(10)
330
+
331
+ expect(SizeFixed64Value(1)).toBe(9)
332
+ expect(SizeFixed64NonZero(1, 0)).toBe(0)
333
+ expect(SizeFixed64Ptr(1, $.varRef(1))).toBe(9)
334
+ expect(SizeFixed64Slice(1, [1, 2])).toBe(18)
335
+ expect(SizeFixed64Packed(1, [1, 2])).toBe(18)
336
+
337
+ expect(SizeBoolValue(1)).toBe(2)
338
+ expect(SizeBoolNonZero(1, false)).toBe(0)
339
+ expect(SizeBoolPtr(1, $.varRef(false))).toBe(2)
340
+ expect(SizeBoolSlice(1, [true, false])).toBe(4)
341
+ expect(SizeBoolPacked(1, [true, false])).toBe(4)
342
+
343
+ expect(SizeStringValue(1, 'abc')).toBe(5)
344
+ expect(SizeStringNonEmpty(1, '')).toBe(0)
345
+ expect(SizeStringPtr(1, $.varRef('abc'))).toBe(5)
346
+ expect(SizeStringSlice(1, ['a', 'bc'])).toBe(7)
347
+
348
+ expect(SizeBytesValue(1, 3)).toBe(5)
349
+ expect(SizeBytesNonEmpty(1, new Uint8Array())).toBe(0)
350
+ expect(SizeBytesPresent(1, new Uint8Array())).toBe(2)
351
+ expect(
352
+ SizeBytesSlice(1, [new Uint8Array([1]), new Uint8Array([2, 3])]),
353
+ ).toBe(7)
354
+
355
+ expect(SizeMessage(1, 3)).toBe(5)
356
+ expect(SizeGroup(1, 3)).toBe(5)
357
+ })
150
358
  })