goscript 0.1.1 → 0.1.3

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 (376) hide show
  1. package/cmd/goscript/cmd-test.go +104 -11
  2. package/cmd/goscript/cmd-test_test.go +1 -1
  3. package/cmd/goscript/cmd_compile.go +9 -0
  4. package/compiler/compile-request.go +31 -0
  5. package/compiler/compiler.go +1 -1
  6. package/compiler/compliance_test.go +0 -2
  7. package/compiler/config.go +2 -0
  8. package/compiler/gotest/package-result.go +2 -0
  9. package/compiler/gotest/request.go +85 -20
  10. package/compiler/gotest/runner.go +733 -96
  11. package/compiler/gotest/runner_test.go +647 -3
  12. package/compiler/lowered-program.go +10 -2
  13. package/compiler/lowering.go +2676 -349
  14. package/compiler/override-facts.go +77 -27
  15. package/compiler/override-registry.go +5 -4
  16. package/compiler/override-registry_test.go +178 -0
  17. package/compiler/package-graph_test.go +62 -7
  18. package/compiler/package-test-graph-variant.go +40 -16
  19. package/compiler/package-test-graph.go +0 -5
  20. package/compiler/package-test-graph_test.go +61 -3
  21. package/compiler/runtime-contract.go +40 -0
  22. package/compiler/semantic-model-types.go +16 -0
  23. package/compiler/semantic-model.go +336 -91
  24. package/compiler/semantic-model_test.go +50 -1
  25. package/compiler/service.go +9 -3
  26. package/compiler/skeleton_test.go +2371 -296
  27. package/compiler/tsworkspace/owner-process-unix_test.go +72 -0
  28. package/compiler/tsworkspace/owner.go +8 -0
  29. package/compiler/tsworkspace/tool-process-other.go +14 -0
  30. package/compiler/tsworkspace/tool-process-unix.go +19 -0
  31. package/compiler/typescript-emitter.go +149 -10
  32. package/dist/gs/builtin/builtin.d.ts +20 -1
  33. package/dist/gs/builtin/builtin.js +246 -26
  34. package/dist/gs/builtin/builtin.js.map +1 -1
  35. package/dist/gs/builtin/channel.d.ts +24 -10
  36. package/dist/gs/builtin/channel.js +143 -34
  37. package/dist/gs/builtin/channel.js.map +1 -1
  38. package/dist/gs/builtin/defer.d.ts +1 -0
  39. package/dist/gs/builtin/defer.js +12 -2
  40. package/dist/gs/builtin/defer.js.map +1 -1
  41. package/dist/gs/builtin/hostio.d.ts +9 -0
  42. package/dist/gs/builtin/hostio.js +25 -0
  43. package/dist/gs/builtin/hostio.js.map +1 -1
  44. package/dist/gs/builtin/map.js +40 -6
  45. package/dist/gs/builtin/map.js.map +1 -1
  46. package/dist/gs/builtin/print.js.map +1 -1
  47. package/dist/gs/builtin/slice.d.ts +43 -9
  48. package/dist/gs/builtin/slice.js +437 -234
  49. package/dist/gs/builtin/slice.js.map +1 -1
  50. package/dist/gs/builtin/type.d.ts +2 -0
  51. package/dist/gs/builtin/type.js +55 -10
  52. package/dist/gs/builtin/type.js.map +1 -1
  53. package/dist/gs/builtin/varRef.d.ts +2 -0
  54. package/dist/gs/builtin/varRef.js.map +1 -1
  55. package/dist/gs/bytes/buffer.gs.js +28 -28
  56. package/dist/gs/bytes/buffer.gs.js.map +1 -1
  57. package/dist/gs/bytes/bytes.gs.d.ts +7 -5
  58. package/dist/gs/bytes/bytes.gs.js +10 -4
  59. package/dist/gs/bytes/bytes.gs.js.map +1 -1
  60. package/dist/gs/bytes/iter.gs.js +13 -13
  61. package/dist/gs/bytes/iter.gs.js.map +1 -1
  62. package/dist/gs/compress/zlib/index.d.ts +26 -0
  63. package/dist/gs/compress/zlib/index.js +168 -0
  64. package/dist/gs/compress/zlib/index.js.map +1 -0
  65. package/dist/gs/context/context.d.ts +1 -1
  66. package/dist/gs/context/context.js +8 -3
  67. package/dist/gs/context/context.js.map +1 -1
  68. package/dist/gs/crypto/ecdh/index.d.ts +52 -0
  69. package/dist/gs/crypto/ecdh/index.js +226 -0
  70. package/dist/gs/crypto/ecdh/index.js.map +1 -0
  71. package/dist/gs/crypto/ed25519/index.d.ts +34 -0
  72. package/dist/gs/crypto/ed25519/index.js +160 -0
  73. package/dist/gs/crypto/ed25519/index.js.map +1 -0
  74. package/dist/gs/crypto/internal/constanttime/index.d.ts +4 -0
  75. package/dist/gs/crypto/internal/constanttime/index.js +18 -0
  76. package/dist/gs/crypto/internal/constanttime/index.js.map +1 -0
  77. package/dist/gs/crypto/rand/index.d.ts +2 -0
  78. package/dist/gs/crypto/rand/index.js +85 -0
  79. package/dist/gs/crypto/rand/index.js.map +1 -1
  80. package/dist/gs/crypto/sha1/index.d.ts +5 -0
  81. package/dist/gs/crypto/sha1/index.js +106 -0
  82. package/dist/gs/crypto/sha1/index.js.map +1 -0
  83. package/dist/gs/crypto/sha256/index.d.ts +8 -0
  84. package/dist/gs/crypto/sha256/index.js +118 -0
  85. package/dist/gs/crypto/sha256/index.js.map +1 -0
  86. package/dist/gs/crypto/sha512/index.d.ts +14 -0
  87. package/dist/gs/crypto/sha512/index.js +129 -0
  88. package/dist/gs/crypto/sha512/index.js.map +1 -0
  89. package/dist/gs/encoding/json/index.d.ts +3 -0
  90. package/dist/gs/encoding/json/index.js +15 -0
  91. package/dist/gs/encoding/json/index.js.map +1 -1
  92. package/dist/gs/errors/errors.js +29 -6
  93. package/dist/gs/errors/errors.js.map +1 -1
  94. package/dist/gs/fmt/fmt.d.ts +1 -1
  95. package/dist/gs/fmt/fmt.js +64 -3
  96. package/dist/gs/fmt/fmt.js.map +1 -1
  97. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +7 -7
  98. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +52 -18
  99. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
  100. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js +56 -20
  101. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js.map +1 -1
  102. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +57 -3
  103. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +366 -1
  104. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +1 -1
  105. package/dist/gs/github.com/aperturerobotics/util/conc/index.d.ts +20 -0
  106. package/dist/gs/github.com/aperturerobotics/util/conc/index.js +134 -0
  107. package/dist/gs/github.com/aperturerobotics/util/conc/index.js.map +1 -0
  108. package/dist/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.js.map +1 -1
  109. package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.d.ts +3 -0
  110. package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.js +50 -0
  111. package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.js.map +1 -0
  112. package/dist/gs/github.com/klauspost/compress/internal/le/index.js +3 -2
  113. package/dist/gs/github.com/klauspost/compress/internal/le/index.js.map +1 -1
  114. package/dist/gs/github.com/mr-tron/base58/base58/index.d.ts +27 -0
  115. package/dist/gs/github.com/mr-tron/base58/base58/index.js +172 -0
  116. package/dist/gs/github.com/mr-tron/base58/base58/index.js.map +1 -0
  117. package/dist/gs/github.com/zeebo/blake3/internal/consts/index.d.ts +21 -0
  118. package/dist/gs/github.com/zeebo/blake3/internal/consts/index.js +22 -0
  119. package/dist/gs/github.com/zeebo/blake3/internal/consts/index.js.map +1 -0
  120. package/dist/gs/go/token/index.js +11 -4
  121. package/dist/gs/go/token/index.js.map +1 -1
  122. package/dist/gs/hash/fnv/index.d.ts +57 -0
  123. package/dist/gs/hash/fnv/index.js +299 -0
  124. package/dist/gs/hash/fnv/index.js.map +1 -0
  125. package/dist/gs/hash/index.d.ts +17 -0
  126. package/dist/gs/hash/index.js +94 -0
  127. package/dist/gs/hash/index.js.map +1 -0
  128. package/dist/gs/io/fs/readlink.js +2 -6
  129. package/dist/gs/io/fs/readlink.js.map +1 -1
  130. package/dist/gs/io/fs/walk.js.map +1 -1
  131. package/dist/gs/io/io.d.ts +8 -5
  132. package/dist/gs/io/io.js +20 -2
  133. package/dist/gs/io/io.js.map +1 -1
  134. package/dist/gs/iter/iter.d.ts +3 -2
  135. package/dist/gs/iter/iter.js.map +1 -1
  136. package/dist/gs/maps/iter.d.ts +5 -5
  137. package/dist/gs/maps/iter.js +48 -21
  138. package/dist/gs/maps/iter.js.map +1 -1
  139. package/dist/gs/maps/maps.d.ts +6 -6
  140. package/dist/gs/math/bits/index.js +14 -24
  141. package/dist/gs/math/bits/index.js.map +1 -1
  142. package/dist/gs/mime/index.js +3 -1
  143. package/dist/gs/mime/index.js.map +1 -1
  144. package/dist/gs/net/http/httptest/index.d.ts +20 -1
  145. package/dist/gs/net/http/httptest/index.js +85 -3
  146. package/dist/gs/net/http/httptest/index.js.map +1 -1
  147. package/dist/gs/net/http/index.d.ts +118 -6
  148. package/dist/gs/net/http/index.js +389 -14
  149. package/dist/gs/net/http/index.js.map +1 -1
  150. package/dist/gs/net/http/pprof/index.d.ts +8 -0
  151. package/dist/gs/net/http/pprof/index.js +59 -0
  152. package/dist/gs/net/http/pprof/index.js.map +1 -0
  153. package/dist/gs/os/error.gs.js +9 -7
  154. package/dist/gs/os/error.gs.js.map +1 -1
  155. package/dist/gs/os/types_js.gs.js +95 -15
  156. package/dist/gs/os/types_js.gs.js.map +1 -1
  157. package/dist/gs/os/zero_copy_posix.gs.js +1 -1
  158. package/dist/gs/os/zero_copy_posix.gs.js.map +1 -1
  159. package/dist/gs/path/filepath/match.js.map +1 -1
  160. package/dist/gs/path/filepath/path.d.ts +5 -3
  161. package/dist/gs/path/filepath/path.js +65 -10
  162. package/dist/gs/path/filepath/path.js.map +1 -1
  163. package/dist/gs/reflect/index.d.ts +3 -2
  164. package/dist/gs/reflect/index.js +2 -1
  165. package/dist/gs/reflect/index.js.map +1 -1
  166. package/dist/gs/reflect/iter.js +2 -2
  167. package/dist/gs/reflect/iter.js.map +1 -1
  168. package/dist/gs/reflect/map.js +26 -0
  169. package/dist/gs/reflect/map.js.map +1 -1
  170. package/dist/gs/reflect/type.d.ts +24 -5
  171. package/dist/gs/reflect/type.js +390 -38
  172. package/dist/gs/reflect/type.js.map +1 -1
  173. package/dist/gs/reflect/types.d.ts +1 -0
  174. package/dist/gs/reflect/types.js +3 -1
  175. package/dist/gs/reflect/types.js.map +1 -1
  176. package/dist/gs/reflect/value.d.ts +4 -1
  177. package/dist/gs/reflect/value.js +39 -1
  178. package/dist/gs/reflect/value.js.map +1 -1
  179. package/dist/gs/reflect/visiblefields.js +1 -1
  180. package/dist/gs/reflect/visiblefields.js.map +1 -1
  181. package/dist/gs/runtime/debug/index.d.ts +39 -0
  182. package/dist/gs/runtime/debug/index.js +58 -0
  183. package/dist/gs/runtime/debug/index.js.map +1 -1
  184. package/dist/gs/runtime/pprof/index.d.ts +20 -0
  185. package/dist/gs/runtime/pprof/index.js +85 -0
  186. package/dist/gs/runtime/pprof/index.js.map +1 -0
  187. package/dist/gs/runtime/trace/index.d.ts +19 -0
  188. package/dist/gs/runtime/trace/index.js +64 -0
  189. package/dist/gs/runtime/trace/index.js.map +1 -0
  190. package/dist/gs/slices/slices.d.ts +24 -9
  191. package/dist/gs/slices/slices.js +229 -24
  192. package/dist/gs/slices/slices.js.map +1 -1
  193. package/dist/gs/sort/slice.gs.d.ts +5 -3
  194. package/dist/gs/sort/slice.gs.js +55 -17
  195. package/dist/gs/sort/slice.gs.js.map +1 -1
  196. package/dist/gs/strings/builder.js +26 -17
  197. package/dist/gs/strings/builder.js.map +1 -1
  198. package/dist/gs/strings/iter.js +140 -75
  199. package/dist/gs/strings/iter.js.map +1 -1
  200. package/dist/gs/strings/replace.js +2 -2
  201. package/dist/gs/strings/replace.js.map +1 -1
  202. package/dist/gs/strings/strings.js +52 -6
  203. package/dist/gs/strings/strings.js.map +1 -1
  204. package/dist/gs/sync/sync.d.ts +6 -3
  205. package/dist/gs/sync/sync.js +39 -11
  206. package/dist/gs/sync/sync.js.map +1 -1
  207. package/dist/gs/syscall/errors.d.ts +116 -112
  208. package/dist/gs/syscall/errors.js +38 -1
  209. package/dist/gs/syscall/errors.js.map +1 -1
  210. package/dist/gs/syscall/fs.d.ts +2 -8
  211. package/dist/gs/syscall/fs.js.map +1 -1
  212. package/dist/gs/syscall/js/index.js +20 -12
  213. package/dist/gs/syscall/js/index.js.map +1 -1
  214. package/dist/gs/syscall/types.d.ts +4 -1
  215. package/dist/gs/syscall/types.js.map +1 -1
  216. package/dist/gs/testing/testing.d.ts +4 -3
  217. package/dist/gs/testing/testing.js +21 -4
  218. package/dist/gs/testing/testing.js.map +1 -1
  219. package/dist/gs/time/time.js +22 -0
  220. package/dist/gs/time/time.js.map +1 -1
  221. package/dist/gs/unicode/unicode.js.map +1 -1
  222. package/dist/gs/unique/index.js +7 -2
  223. package/dist/gs/unique/index.js.map +1 -1
  224. package/go.mod +8 -8
  225. package/go.sum +14 -23
  226. package/gs/builtin/builtin.ts +364 -37
  227. package/gs/builtin/channel.ts +208 -38
  228. package/gs/builtin/defer.ts +13 -2
  229. package/gs/builtin/hostio.test.ts +1 -0
  230. package/gs/builtin/hostio.ts +38 -0
  231. package/gs/builtin/map.ts +46 -6
  232. package/gs/builtin/print.ts +12 -3
  233. package/gs/builtin/runtime-contract.test.ts +290 -10
  234. package/gs/builtin/slice.test.ts +70 -0
  235. package/gs/builtin/slice.ts +566 -255
  236. package/gs/builtin/type.ts +63 -10
  237. package/gs/builtin/varRef.ts +2 -0
  238. package/gs/bytes/buffer.gs.ts +28 -28
  239. package/gs/bytes/bytes.gs.ts +19 -10
  240. package/gs/bytes/bytes.test.ts +17 -0
  241. package/gs/bytes/iter.gs.ts +13 -14
  242. package/gs/compress/zlib/index.test.ts +28 -0
  243. package/gs/compress/zlib/index.ts +200 -0
  244. package/gs/compress/zlib/meta.json +3 -0
  245. package/gs/context/context.test.ts +36 -2
  246. package/gs/context/context.ts +9 -4
  247. package/gs/crypto/ecdh/index.test.ts +43 -0
  248. package/gs/crypto/ecdh/index.ts +274 -0
  249. package/gs/crypto/ed25519/index.test.ts +41 -0
  250. package/gs/crypto/ed25519/index.ts +238 -0
  251. package/gs/crypto/ed25519/meta.json +13 -0
  252. package/gs/crypto/internal/constanttime/index.test.ts +25 -0
  253. package/gs/crypto/internal/constanttime/index.ts +22 -0
  254. package/gs/crypto/rand/index.test.ts +89 -1
  255. package/gs/crypto/rand/index.ts +103 -1
  256. package/gs/crypto/rand/meta.json +4 -1
  257. package/gs/crypto/sha1/index.test.ts +28 -0
  258. package/gs/crypto/sha1/index.ts +130 -0
  259. package/gs/crypto/sha1/meta.json +8 -0
  260. package/gs/crypto/sha256/index.test.ts +78 -0
  261. package/gs/crypto/sha256/index.ts +150 -0
  262. package/gs/crypto/sha256/meta.json +9 -0
  263. package/gs/crypto/sha512/index.test.ts +31 -0
  264. package/gs/crypto/sha512/index.ts +161 -0
  265. package/gs/crypto/sha512/meta.json +11 -0
  266. package/gs/encoding/json/index.test.ts +25 -3
  267. package/gs/encoding/json/index.ts +21 -3
  268. package/gs/errors/errors.test.ts +4 -1
  269. package/gs/errors/errors.ts +32 -8
  270. package/gs/fmt/fmt.test.ts +23 -1
  271. package/gs/fmt/fmt.ts +76 -10
  272. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +62 -7
  273. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +78 -36
  274. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +32 -11
  275. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +122 -43
  276. package/gs/github.com/aperturerobotics/starpc/srpc/index.test.ts +31 -0
  277. package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +518 -4
  278. package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +6 -0
  279. package/gs/github.com/aperturerobotics/util/conc/index.test.ts +30 -0
  280. package/gs/github.com/aperturerobotics/util/conc/index.ts +172 -0
  281. package/gs/github.com/aperturerobotics/util/conc/meta.json +9 -0
  282. package/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.ts +1 -4
  283. package/gs/github.com/hack-pad/safejs/internal/catch/index.test.ts +35 -0
  284. package/gs/github.com/hack-pad/safejs/internal/catch/index.ts +65 -0
  285. package/gs/github.com/hack-pad/safejs/internal/catch/meta.json +9 -0
  286. package/gs/github.com/klauspost/compress/internal/le/index.test.ts +2 -1
  287. package/gs/github.com/klauspost/compress/internal/le/index.ts +6 -5
  288. package/gs/github.com/mr-tron/base58/base58/index.test.ts +70 -0
  289. package/gs/github.com/mr-tron/base58/base58/index.ts +231 -0
  290. package/gs/github.com/mr-tron/base58/base58/meta.json +3 -0
  291. package/gs/github.com/zeebo/blake3/internal/consts/index.test.ts +46 -0
  292. package/gs/github.com/zeebo/blake3/internal/consts/index.ts +26 -0
  293. package/gs/go/token/index.ts +17 -4
  294. package/gs/hash/fnv/index.test.ts +67 -0
  295. package/gs/hash/fnv/index.ts +351 -0
  296. package/gs/hash/fnv/meta.json +3 -0
  297. package/gs/hash/index.test.ts +37 -0
  298. package/gs/hash/index.ts +118 -0
  299. package/gs/hash/meta.json +5 -0
  300. package/gs/internal/byteorder/index.test.ts +6 -6
  301. package/gs/io/fs/readlink.ts +40 -48
  302. package/gs/io/fs/walk.ts +10 -2
  303. package/gs/io/io.test.ts +64 -0
  304. package/gs/io/io.ts +34 -13
  305. package/gs/iter/iter.ts +8 -2
  306. package/gs/maps/iter.ts +69 -26
  307. package/gs/maps/maps.test.ts +23 -0
  308. package/gs/maps/maps.ts +6 -6
  309. package/gs/math/bits/index.test.ts +20 -0
  310. package/gs/math/bits/index.ts +15 -28
  311. package/gs/mime/index.ts +8 -2
  312. package/gs/net/http/httptest/index.test.ts +85 -0
  313. package/gs/net/http/httptest/index.ts +113 -3
  314. package/gs/net/http/index.test.ts +159 -1
  315. package/gs/net/http/index.ts +515 -15
  316. package/gs/net/http/meta.json +6 -0
  317. package/gs/net/http/pprof/index.test.ts +47 -0
  318. package/gs/net/http/pprof/index.ts +65 -0
  319. package/gs/os/error.gs.ts +9 -10
  320. package/gs/os/error.test.ts +41 -0
  321. package/gs/os/file_unix_js.test.ts +55 -0
  322. package/gs/os/tempfile.gs.test.ts +37 -10
  323. package/gs/os/types_js.gs.ts +94 -15
  324. package/gs/os/zero_copy_posix.gs.ts +1 -2
  325. package/gs/path/filepath/match.ts +4 -1
  326. package/gs/path/filepath/meta.json +6 -0
  327. package/gs/path/filepath/path.test.ts +57 -2
  328. package/gs/path/filepath/path.ts +91 -12
  329. package/gs/reflect/field.test.ts +63 -0
  330. package/gs/reflect/index.ts +4 -1
  331. package/gs/reflect/iter.ts +2 -2
  332. package/gs/reflect/map.test.ts +24 -2
  333. package/gs/reflect/map.ts +35 -0
  334. package/gs/reflect/type.ts +543 -60
  335. package/gs/reflect/typefor.test.ts +100 -0
  336. package/gs/reflect/types.ts +3 -1
  337. package/gs/reflect/value.ts +50 -1
  338. package/gs/reflect/visiblefields.ts +1 -1
  339. package/gs/runtime/debug/index.test.ts +22 -1
  340. package/gs/runtime/debug/index.ts +88 -0
  341. package/gs/runtime/pprof/index.test.ts +36 -0
  342. package/gs/runtime/pprof/index.ts +104 -0
  343. package/gs/runtime/pprof/meta.json +6 -0
  344. package/gs/runtime/trace/index.test.ts +45 -0
  345. package/gs/runtime/trace/index.ts +97 -0
  346. package/gs/runtime/trace/meta.json +7 -0
  347. package/gs/slices/meta.json +2 -1
  348. package/gs/slices/slices.test.ts +86 -0
  349. package/gs/slices/slices.ts +284 -37
  350. package/gs/sort/slice.gs.ts +73 -23
  351. package/gs/sort/slice.test.ts +40 -0
  352. package/gs/strings/builder.test.ts +8 -0
  353. package/gs/strings/builder.ts +29 -17
  354. package/gs/strings/iter.test.ts +5 -7
  355. package/gs/strings/iter.ts +146 -71
  356. package/gs/strings/replace.test.ts +1 -4
  357. package/gs/strings/replace.ts +6 -6
  358. package/gs/strings/strings.test.ts +4 -0
  359. package/gs/strings/strings.ts +54 -6
  360. package/gs/sync/meta.json +1 -0
  361. package/gs/sync/sync.test.ts +57 -1
  362. package/gs/sync/sync.ts +45 -13
  363. package/gs/syscall/errors.ts +158 -115
  364. package/gs/syscall/fs.ts +8 -8
  365. package/gs/syscall/js/index.ts +49 -22
  366. package/gs/syscall/net.test.ts +26 -0
  367. package/gs/syscall/types.ts +7 -2
  368. package/gs/testing/testing.test.ts +56 -0
  369. package/gs/testing/testing.ts +27 -10
  370. package/gs/time/meta.json +2 -2
  371. package/gs/time/time.test.ts +4 -0
  372. package/gs/time/time.ts +33 -2
  373. package/gs/unicode/unicode.test.ts +14 -3
  374. package/gs/unicode/unicode.ts +1 -5
  375. package/gs/unique/index.ts +9 -2
  376. package/package.json +3 -3
@@ -190,18 +190,27 @@ export class MarshalState {
190
190
  }
191
191
 
192
192
  public Sub(js: JsonStream | null): MarshalState | null {
193
- return new MarshalState({ config: this.configValue, stream: js ?? new JsonStream() })
193
+ return new MarshalState({
194
+ config: this.configValue,
195
+ stream: js ?? new JsonStream(),
196
+ })
194
197
  }
195
198
 
196
199
  public WithField(field: string): MarshalState | null {
197
- const next = new MarshalState({ config: this.configValue, stream: this.stream })
200
+ const next = new MarshalState({
201
+ config: this.configValue,
202
+ stream: this.stream,
203
+ })
198
204
  next.fields = new Set(this.fields)
199
205
  next.fields.add(field)
200
206
  return next
201
207
  }
202
208
 
203
209
  public WithFieldMask(...paths: string[]): MarshalState | null {
204
- const next = new MarshalState({ config: this.configValue, stream: this.stream })
210
+ const next = new MarshalState({
211
+ config: this.configValue,
212
+ stream: this.stream,
213
+ })
205
214
  next.fields = new Set([...this.fields, ...paths])
206
215
  return next
207
216
  }
@@ -238,7 +247,10 @@ export class MarshalState {
238
247
  this.WriteString(`${x}s`)
239
248
  }
240
249
 
241
- public WriteEnum(x: number, ...valueMaps: Array<Map<number, string> | Record<number, string> | null>): void {
250
+ public WriteEnum(
251
+ x: number,
252
+ ...valueMaps: Array<Map<number, string> | Record<number, string> | null>
253
+ ): void {
242
254
  if (this.configValue.EnumsAsInts) {
243
255
  this.WriteEnumNumber(x)
244
256
  return
@@ -250,7 +262,10 @@ export class MarshalState {
250
262
  this.WriteInt32(x)
251
263
  }
252
264
 
253
- public WriteEnumString(x: number, ...valueMaps: Array<Map<number, string> | Record<number, string> | null>): void {
265
+ public WriteEnumString(
266
+ x: number,
267
+ ...valueMaps: Array<Map<number, string> | Record<number, string> | null>
268
+ ): void {
254
269
  const value = enumStringValue(x, valueMaps)
255
270
  if (value == null) {
256
271
  this.WriteEnumNumber(x)
@@ -382,7 +397,10 @@ export class MarshalState {
382
397
  this.writeArray(vs, (v) => this.WriteUint64(v))
383
398
  }
384
399
 
385
- private writeArray<T>(values: $.Slice<T>, writeValue: (value: T) => void): void {
400
+ private writeArray<T>(
401
+ values: $.Slice<T>,
402
+ writeValue: (value: T) => void,
403
+ ): void {
386
404
  this.WriteArrayStart()
387
405
  let wrote = false
388
406
  for (const value of sliceValues(values)) {
@@ -406,13 +424,15 @@ export class UnmarshalState {
406
424
  private objectEntries: Array<[string, unknown]> | null = null
407
425
  private objectIndex = 0
408
426
 
409
- constructor(init?: Partial<{
410
- config: UnmarshalerConfig
411
- value: unknown
412
- root: UnmarshalState
413
- fieldMaskPaths: Set<string>
414
- path: string[]
415
- }>) {
427
+ constructor(
428
+ init?: Partial<{
429
+ config: UnmarshalerConfig
430
+ value: unknown
431
+ root: UnmarshalState
432
+ fieldMaskPaths: Set<string>
433
+ path: string[]
434
+ }>,
435
+ ) {
416
436
  this.configValue = init?.config?.clone() ?? DefaultUnmarshalerConfig.clone()
417
437
  this.value = init?.value ?? null
418
438
  this.root = init?.root ?? this
@@ -488,7 +508,9 @@ export class UnmarshalState {
488
508
  return $.varRef(numberFromJSON(this.value))
489
509
  }
490
510
 
491
- public ReadEnum(...valueMaps: Array<Map<string, number> | Record<string, number> | null>): number {
511
+ public ReadEnum(
512
+ ...valueMaps: Array<Map<string, number> | Record<string, number> | null>
513
+ ): number {
492
514
  if (typeof this.value === 'number') {
493
515
  return Math.trunc(this.value)
494
516
  }
@@ -505,11 +527,12 @@ export class UnmarshalState {
505
527
  }
506
528
 
507
529
  public ReadFieldMask(): FieldMask | null {
508
- const paths = typeof this.value === 'string'
509
- ? this.value.split(',').filter((part) => part !== '')
510
- : Array.isArray(recordValue(this.value)?.paths)
511
- ? sliceValues(recordValue(this.value)?.paths as $.Slice<string>)
512
- : []
530
+ const paths =
531
+ typeof this.value === 'string' ?
532
+ this.value.split(',').filter((part) => part !== '')
533
+ : Array.isArray(recordValue(this.value)?.paths) ?
534
+ sliceValues(recordValue(this.value)?.paths as $.Slice<string>)
535
+ : []
513
536
  return { GetPaths: () => $.arrayToSlice(paths) }
514
537
  }
515
538
 
@@ -671,15 +694,33 @@ export class UnmarshalState {
671
694
  })
672
695
  }
673
696
 
674
- public ReadWrappedBool(): boolean { return this.readWrapped(() => this.ReadBool()) }
675
- public ReadWrappedBytes(): $.Slice<number> { return this.readWrapped(() => this.ReadBytes()) }
676
- public ReadWrappedFloat32(): number { return this.readWrapped(() => this.ReadFloat32()) }
677
- public ReadWrappedFloat64(): number { return this.readWrapped(() => this.ReadFloat64()) }
678
- public ReadWrappedInt32(): number { return this.readWrapped(() => this.ReadInt32()) }
679
- public ReadWrappedInt64(): number { return this.readWrapped(() => this.ReadInt64()) }
680
- public ReadWrappedString(): string { return this.readWrapped(() => this.ReadString()) }
681
- public ReadWrappedUint32(): number { return this.readWrapped(() => this.ReadUint32()) }
682
- public ReadWrappedUint64(): number { return this.readWrapped(() => this.ReadUint64()) }
697
+ public ReadWrappedBool(): boolean {
698
+ return this.readWrapped(() => this.ReadBool())
699
+ }
700
+ public ReadWrappedBytes(): $.Slice<number> {
701
+ return this.readWrapped(() => this.ReadBytes())
702
+ }
703
+ public ReadWrappedFloat32(): number {
704
+ return this.readWrapped(() => this.ReadFloat32())
705
+ }
706
+ public ReadWrappedFloat64(): number {
707
+ return this.readWrapped(() => this.ReadFloat64())
708
+ }
709
+ public ReadWrappedInt32(): number {
710
+ return this.readWrapped(() => this.ReadInt32())
711
+ }
712
+ public ReadWrappedInt64(): number {
713
+ return this.readWrapped(() => this.ReadInt64())
714
+ }
715
+ public ReadWrappedString(): string {
716
+ return this.readWrapped(() => this.ReadString())
717
+ }
718
+ public ReadWrappedUint32(): number {
719
+ return this.readWrapped(() => this.ReadUint32())
720
+ }
721
+ public ReadWrappedUint64(): number {
722
+ return this.readWrapped(() => this.ReadUint64())
723
+ }
683
724
 
684
725
  public SetError(err: $.GoError): void {
685
726
  this.root.err = err
@@ -726,7 +767,10 @@ export class UnmarshalState {
726
767
  return 0
727
768
  }
728
769
 
729
- public WithField(_field: string, _mask: boolean = true): UnmarshalState | null {
770
+ public WithField(
771
+ _field: string,
772
+ _mask: boolean = true,
773
+ ): UnmarshalState | null {
730
774
  return new UnmarshalState({
731
775
  config: this.configValue,
732
776
  value: this.value,
@@ -772,7 +816,10 @@ export class UnmarshalState {
772
816
  }
773
817
  const keys = Object.keys(record)
774
818
  if (keys.length !== 1) {
775
- this.SetErrorf('unexpected %q field in wrapped value', keys.find((key) => key !== 'value') ?? '')
819
+ this.SetErrorf(
820
+ 'unexpected %q field in wrapped value',
821
+ keys.find((key) => key !== 'value') ?? '',
822
+ )
776
823
  return read()
777
824
  }
778
825
  const original = this.value
@@ -787,13 +834,22 @@ export function NewJsonStream(wr: unknown): JsonStream | null {
787
834
  return new JsonStream(wr)
788
835
  }
789
836
 
790
- export function NewMarshalState(config: MarshalerConfig, stream: JsonStream | null): MarshalState | null {
837
+ export function NewMarshalState(
838
+ config: MarshalerConfig,
839
+ stream: JsonStream | null,
840
+ ): MarshalState | null {
791
841
  return new MarshalState({ config, stream: stream ?? new JsonStream() })
792
842
  }
793
843
 
794
- export function NewUnmarshalState(data: $.Slice<number>, config: UnmarshalerConfig): UnmarshalState | null {
844
+ export function NewUnmarshalState(
845
+ data: $.Slice<number>,
846
+ config: UnmarshalerConfig,
847
+ ): UnmarshalState | null {
795
848
  try {
796
- return new UnmarshalState({ config, value: JSON.parse(bytesToString(data)) })
849
+ return new UnmarshalState({
850
+ config,
851
+ value: JSON.parse(bytesToString(data)),
852
+ })
797
853
  } catch (err) {
798
854
  const state = new UnmarshalState({ config })
799
855
  state.SetError($.newError(err instanceof Error ? err.message : String(err)))
@@ -801,11 +857,16 @@ export function NewUnmarshalState(data: $.Slice<number>, config: UnmarshalerConf
801
857
  }
802
858
  }
803
859
 
804
- export function Marshal(c: MarshalerConfig, m: Marshaler | null): [$.Slice<number>, $.GoError] {
860
+ export function Marshal(
861
+ c: MarshalerConfig,
862
+ m: Marshaler | null,
863
+ ): [$.Slice<number>, $.GoError] {
805
864
  return c.Marshal(m)
806
865
  }
807
866
 
808
- export function MarshalMap<M extends Map<string, Marshaler> | Record<string, Marshaler>>(
867
+ export function MarshalMap<
868
+ M extends Map<string, Marshaler> | Record<string, Marshaler>,
869
+ >(
809
870
  _typeArgs: $.GenericTypeArgs | undefined,
810
871
  c: MarshalerConfig,
811
872
  mm: M,
@@ -824,7 +885,9 @@ export function MarshalMap<M extends Map<string, Marshaler> | Record<string, Mar
824
885
  value?.MarshalProtoJSON(state)
825
886
  })
826
887
  state.WriteObjectEnd()
827
- return state.Err() == null ? [stringToBytes(stream.String()), null] : [null, state.Err()]
888
+ return state.Err() == null ?
889
+ [stringToBytes(stream.String()), null]
890
+ : [null, state.Err()]
828
891
  }
829
892
 
830
893
  export function MarshalSlice<S extends $.Slice<Marshaler>>(
@@ -842,14 +905,22 @@ export function MarshalSlice<S extends $.Slice<Marshaler>>(
842
905
  value?.MarshalProtoJSON(state)
843
906
  })
844
907
  state.WriteArrayEnd()
845
- return state.Err() == null ? [stringToBytes(stream.String()), null] : [null, state.Err()]
908
+ return state.Err() == null ?
909
+ [stringToBytes(stream.String()), null]
910
+ : [null, state.Err()]
846
911
  }
847
912
 
848
- export function GetEnumString(x: number, ...valueMaps: Array<Map<number, string> | Record<number, string> | null>): string {
913
+ export function GetEnumString(
914
+ x: number,
915
+ ...valueMaps: Array<Map<number, string> | Record<number, string> | null>
916
+ ): string {
849
917
  return enumStringValue(x, valueMaps) ?? String(x)
850
918
  }
851
919
 
852
- export function ParseEnumString(v: string, ...valueMaps: Array<Map<string, number> | Record<string, number> | null>): [number, $.GoError] {
920
+ export function ParseEnumString(
921
+ v: string,
922
+ ...valueMaps: Array<Map<string, number> | Record<string, number> | null>
923
+ ): [number, $.GoError] {
853
924
  for (const valueMap of valueMaps) {
854
925
  const value = lookupStringMap(valueMap, v)
855
926
  if (value !== undefined) {
@@ -857,10 +928,14 @@ export function ParseEnumString(v: string, ...valueMaps: Array<Map<string, numbe
857
928
  }
858
929
  }
859
930
  const parsed = Number(v)
860
- return Number.isFinite(parsed) ? [parsed, null] : [0, $.newError(`invalid enum ${v}`)]
931
+ return Number.isFinite(parsed) ?
932
+ [parsed, null]
933
+ : [0, $.newError(`invalid enum ${v}`)]
861
934
  }
862
935
 
863
- function sliceValues<T>(values: $.Slice<T> | readonly T[] | null | undefined): T[] {
936
+ function sliceValues<T>(
937
+ values: $.Slice<T> | readonly T[] | null | undefined,
938
+ ): T[] {
864
939
  return Array.from((values ?? []) as Iterable<T>)
865
940
  }
866
941
 
@@ -953,7 +1028,10 @@ function enumStringValue(
953
1028
  return null
954
1029
  }
955
1030
 
956
- function lookupStringMap(valueMap: Map<string, number> | Record<string, number> | null, key: string): number | undefined {
1031
+ function lookupStringMap(
1032
+ valueMap: Map<string, number> | Record<string, number> | null,
1033
+ key: string,
1034
+ ): number | undefined {
957
1035
  if (valueMap == null) {
958
1036
  return undefined
959
1037
  }
@@ -964,7 +1042,8 @@ function formatError(format: string, args: unknown[]): string {
964
1042
  return format.replace(/%[vqsd]/g, () => String(args.shift()))
965
1043
  }
966
1044
 
967
- const base64Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
1045
+ const base64Alphabet =
1046
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
968
1047
 
969
1048
  function base64Encode(bytes: $.Slice<number>): string {
970
1049
  const data = sliceValues(bytes)
@@ -0,0 +1,31 @@
1
+ import { describe, expect, it } from 'vitest'
2
+
3
+ import * as context from '@goscript/context/index.js'
4
+
5
+ import { MuxedConn, NewWebSocketConn } from './index.js'
6
+
7
+ describe('starpc/srpc override', () => {
8
+ it('wraps websocket connections with the same outbound direction as Go', () => {
9
+ const conn = { Close: () => null }
10
+
11
+ const [serverConn, serverErr] = NewWebSocketConn(
12
+ context.Background(),
13
+ conn,
14
+ true,
15
+ null,
16
+ )
17
+ const [clientConn, clientErr] = NewWebSocketConn(
18
+ context.Background(),
19
+ conn,
20
+ false,
21
+ null,
22
+ )
23
+
24
+ expect(serverErr).toBeNull()
25
+ expect(clientErr).toBeNull()
26
+ expect(serverConn).toBeInstanceOf(MuxedConn)
27
+ expect(clientConn).toBeInstanceOf(MuxedConn)
28
+ expect(serverConn?.outbound).toBe(false)
29
+ expect(clientConn?.outbound).toBe(true)
30
+ })
31
+ })