goscript 0.1.0 → 0.1.2

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 (495) hide show
  1. package/README.md +267 -255
  2. package/cmd/goscript/cmd-test.go +286 -0
  3. package/cmd/goscript/cmd-test_test.go +76 -0
  4. package/cmd/goscript/cmd_compile.go +9 -0
  5. package/cmd/goscript/main.go +1 -0
  6. package/compiler/build-flags.go +38 -0
  7. package/compiler/compile-request.go +33 -0
  8. package/compiler/compiler.go +1 -1
  9. package/compiler/compliance_test.go +0 -10
  10. package/compiler/config.go +2 -0
  11. package/compiler/gotest/owner.go +24 -0
  12. package/compiler/gotest/package-result.go +69 -0
  13. package/compiler/gotest/request.go +210 -0
  14. package/compiler/gotest/result.go +28 -0
  15. package/compiler/gotest/runner.go +1225 -0
  16. package/compiler/gotest/runner_test.go +1271 -0
  17. package/compiler/gotest/test.go +9 -0
  18. package/compiler/index.test.ts +1 -1
  19. package/compiler/lowered-program.go +80 -21
  20. package/compiler/lowering.go +6754 -602
  21. package/compiler/override-facts.go +357 -0
  22. package/compiler/override-registry.go +52 -190
  23. package/compiler/override-registry_test.go +182 -0
  24. package/compiler/package-graph.go +50 -27
  25. package/compiler/package-graph_test.go +99 -9
  26. package/compiler/package-test-function.go +9 -0
  27. package/compiler/package-test-graph-package.go +40 -0
  28. package/compiler/package-test-graph-variant.go +129 -0
  29. package/compiler/package-test-graph.go +112 -0
  30. package/compiler/package-test-graph_test.go +202 -0
  31. package/compiler/runtime-contract.go +229 -29
  32. package/compiler/runtime-contract_test.go +44 -30
  33. package/compiler/semantic-model-types.go +25 -6
  34. package/compiler/semantic-model.go +819 -74
  35. package/compiler/semantic-model_test.go +104 -0
  36. package/compiler/service.go +10 -4
  37. package/compiler/skeleton_test.go +2777 -524
  38. package/compiler/tsworkspace/owner-process-unix_test.go +72 -0
  39. package/compiler/tsworkspace/owner.go +342 -0
  40. package/compiler/tsworkspace/owner_test.go +93 -0
  41. package/compiler/tsworkspace/result.go +17 -0
  42. package/compiler/tsworkspace/tool-process-other.go +14 -0
  43. package/compiler/tsworkspace/tool-process-unix.go +19 -0
  44. package/compiler/typescript-emitter.go +576 -86
  45. package/compiler/wasm/compile.go +1 -1
  46. package/compiler/wasm/compile_test.go +61 -11
  47. package/compiler/wasm_api.go +172 -7
  48. package/dist/gs/builtin/builtin.d.ts +40 -3
  49. package/dist/gs/builtin/builtin.js +430 -22
  50. package/dist/gs/builtin/builtin.js.map +1 -1
  51. package/dist/gs/builtin/channel.d.ts +32 -10
  52. package/dist/gs/builtin/channel.js +119 -25
  53. package/dist/gs/builtin/channel.js.map +1 -1
  54. package/dist/gs/builtin/defer.d.ts +1 -0
  55. package/dist/gs/builtin/defer.js +12 -2
  56. package/dist/gs/builtin/defer.js.map +1 -1
  57. package/dist/gs/builtin/hostio.d.ts +9 -0
  58. package/dist/gs/builtin/hostio.js +25 -0
  59. package/dist/gs/builtin/hostio.js.map +1 -1
  60. package/dist/gs/builtin/map.js +40 -6
  61. package/dist/gs/builtin/map.js.map +1 -1
  62. package/dist/gs/builtin/print.js.map +1 -1
  63. package/dist/gs/builtin/slice.d.ts +64 -10
  64. package/dist/gs/builtin/slice.js +619 -244
  65. package/dist/gs/builtin/slice.js.map +1 -1
  66. package/dist/gs/builtin/type.d.ts +7 -2
  67. package/dist/gs/builtin/type.js +128 -29
  68. package/dist/gs/builtin/type.js.map +1 -1
  69. package/dist/gs/builtin/varRef.d.ts +7 -0
  70. package/dist/gs/builtin/varRef.js +23 -0
  71. package/dist/gs/builtin/varRef.js.map +1 -1
  72. package/dist/gs/bytes/buffer.gs.js +74 -70
  73. package/dist/gs/bytes/buffer.gs.js.map +1 -1
  74. package/dist/gs/bytes/iter.gs.js +13 -13
  75. package/dist/gs/bytes/iter.gs.js.map +1 -1
  76. package/dist/gs/bytes/reader.gs.js +20 -18
  77. package/dist/gs/bytes/reader.gs.js.map +1 -1
  78. package/dist/gs/compress/zlib/index.d.ts +26 -0
  79. package/dist/gs/compress/zlib/index.js +168 -0
  80. package/dist/gs/compress/zlib/index.js.map +1 -0
  81. package/dist/gs/context/context.d.ts +6 -5
  82. package/dist/gs/context/context.js +17 -12
  83. package/dist/gs/context/context.js.map +1 -1
  84. package/dist/gs/crypto/ecdh/index.d.ts +52 -0
  85. package/dist/gs/crypto/ecdh/index.js +226 -0
  86. package/dist/gs/crypto/ecdh/index.js.map +1 -0
  87. package/dist/gs/crypto/ed25519/index.d.ts +34 -0
  88. package/dist/gs/crypto/ed25519/index.js +160 -0
  89. package/dist/gs/crypto/ed25519/index.js.map +1 -0
  90. package/dist/gs/crypto/internal/constanttime/index.d.ts +4 -0
  91. package/dist/gs/crypto/internal/constanttime/index.js +18 -0
  92. package/dist/gs/crypto/internal/constanttime/index.js.map +1 -0
  93. package/dist/gs/crypto/internal/fips140deps/byteorder/index.d.ts +1 -0
  94. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js +2 -0
  95. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js.map +1 -0
  96. package/dist/gs/crypto/internal/fips140deps/godebug/index.d.ts +1 -0
  97. package/dist/gs/crypto/internal/fips140deps/godebug/index.js +2 -0
  98. package/dist/gs/crypto/internal/fips140deps/godebug/index.js.map +1 -0
  99. package/dist/gs/crypto/rand/index.d.ts +2 -0
  100. package/dist/gs/crypto/rand/index.js +85 -0
  101. package/dist/gs/crypto/rand/index.js.map +1 -1
  102. package/dist/gs/crypto/sha256/index.d.ts +8 -0
  103. package/dist/gs/crypto/sha256/index.js +118 -0
  104. package/dist/gs/crypto/sha256/index.js.map +1 -0
  105. package/dist/gs/crypto/sha512/index.d.ts +14 -0
  106. package/dist/gs/crypto/sha512/index.js +129 -0
  107. package/dist/gs/crypto/sha512/index.js.map +1 -0
  108. package/dist/gs/embed/index.d.ts +7 -0
  109. package/dist/gs/embed/index.js +16 -0
  110. package/dist/gs/embed/index.js.map +1 -0
  111. package/dist/gs/encoding/json/index.d.ts +4 -0
  112. package/dist/gs/encoding/json/index.js +33 -0
  113. package/dist/gs/encoding/json/index.js.map +1 -1
  114. package/dist/gs/errors/errors.d.ts +4 -0
  115. package/dist/gs/errors/errors.js +108 -4
  116. package/dist/gs/errors/errors.js.map +1 -1
  117. package/dist/gs/fmt/fmt.d.ts +4 -4
  118. package/dist/gs/fmt/fmt.js +42 -11
  119. package/dist/gs/fmt/fmt.js.map +1 -1
  120. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +37 -2
  121. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +245 -1
  122. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
  123. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.d.ts +189 -0
  124. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js +861 -0
  125. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js.map +1 -0
  126. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +217 -0
  127. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +814 -0
  128. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +1 -0
  129. package/dist/gs/github.com/aperturerobotics/util/conc/index.d.ts +20 -0
  130. package/dist/gs/github.com/aperturerobotics/util/conc/index.js +134 -0
  131. package/dist/gs/github.com/aperturerobotics/util/conc/index.js.map +1 -0
  132. package/dist/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.js.map +1 -1
  133. package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.d.ts +3 -0
  134. package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.js +50 -0
  135. package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.js.map +1 -0
  136. package/dist/gs/github.com/klauspost/compress/internal/le/index.d.ts +9 -0
  137. package/dist/gs/github.com/klauspost/compress/internal/le/index.js +72 -0
  138. package/dist/gs/github.com/klauspost/compress/internal/le/index.js.map +1 -0
  139. package/dist/gs/github.com/mr-tron/base58/base58/index.d.ts +27 -0
  140. package/dist/gs/github.com/mr-tron/base58/base58/index.js +172 -0
  141. package/dist/gs/github.com/mr-tron/base58/base58/index.js.map +1 -0
  142. package/dist/gs/github.com/zeebo/blake3/internal/consts/index.d.ts +21 -0
  143. package/dist/gs/github.com/zeebo/blake3/internal/consts/index.js +22 -0
  144. package/dist/gs/github.com/zeebo/blake3/internal/consts/index.js.map +1 -0
  145. package/dist/gs/go/internal/scannerhooks/index.d.ts +3 -0
  146. package/dist/gs/go/internal/scannerhooks/index.js +5 -0
  147. package/dist/gs/go/internal/scannerhooks/index.js.map +1 -0
  148. package/dist/gs/go/scanner/index.d.ts +13 -0
  149. package/dist/gs/go/scanner/index.js +35 -0
  150. package/dist/gs/go/scanner/index.js.map +1 -1
  151. package/dist/gs/go/token/index.d.ts +156 -0
  152. package/dist/gs/go/token/index.js +507 -4
  153. package/dist/gs/go/token/index.js.map +1 -1
  154. package/dist/gs/hash/fnv/index.d.ts +57 -0
  155. package/dist/gs/hash/fnv/index.js +299 -0
  156. package/dist/gs/hash/fnv/index.js.map +1 -0
  157. package/dist/gs/hash/index.d.ts +17 -0
  158. package/dist/gs/hash/index.js +94 -0
  159. package/dist/gs/hash/index.js.map +1 -0
  160. package/dist/gs/internal/abi/index.d.ts +4 -0
  161. package/dist/gs/internal/abi/index.js +10 -0
  162. package/dist/gs/internal/abi/index.js.map +1 -1
  163. package/dist/gs/internal/bytealg/index.d.ts +2 -0
  164. package/dist/gs/internal/bytealg/index.js +14 -0
  165. package/dist/gs/internal/bytealg/index.js.map +1 -1
  166. package/dist/gs/internal/byteorder/index.d.ts +8 -2
  167. package/dist/gs/internal/byteorder/index.js +56 -25
  168. package/dist/gs/internal/byteorder/index.js.map +1 -1
  169. package/dist/gs/internal/godebug/index.d.ts +12 -0
  170. package/dist/gs/internal/godebug/index.js +30 -0
  171. package/dist/gs/internal/godebug/index.js.map +1 -0
  172. package/dist/gs/io/fs/index.d.ts +1 -0
  173. package/dist/gs/io/fs/index.js +1 -0
  174. package/dist/gs/io/fs/index.js.map +1 -1
  175. package/dist/gs/io/fs/readlink.d.ts +8 -0
  176. package/dist/gs/io/fs/readlink.js +60 -0
  177. package/dist/gs/io/fs/readlink.js.map +1 -0
  178. package/dist/gs/io/fs/walk.d.ts +3 -3
  179. package/dist/gs/io/fs/walk.js +7 -7
  180. package/dist/gs/io/fs/walk.js.map +1 -1
  181. package/dist/gs/io/io.d.ts +40 -6
  182. package/dist/gs/io/io.js +151 -26
  183. package/dist/gs/io/io.js.map +1 -1
  184. package/dist/gs/iter/iter.d.ts +3 -2
  185. package/dist/gs/iter/iter.js.map +1 -1
  186. package/dist/gs/maps/iter.d.ts +5 -5
  187. package/dist/gs/maps/iter.js +48 -21
  188. package/dist/gs/maps/iter.js.map +1 -1
  189. package/dist/gs/maps/maps.d.ts +6 -6
  190. package/dist/gs/maps/maps.js +1 -1
  191. package/dist/gs/maps/maps.js.map +1 -1
  192. package/dist/gs/math/bits/index.d.ts +13 -4
  193. package/dist/gs/math/bits/index.js +70 -48
  194. package/dist/gs/math/bits/index.js.map +1 -1
  195. package/dist/gs/math/const.gs.d.ts +5 -5
  196. package/dist/gs/math/const.gs.js +4 -4
  197. package/dist/gs/math/const.gs.js.map +1 -1
  198. package/dist/gs/mime/index.d.ts +1 -0
  199. package/dist/gs/mime/index.js +52 -0
  200. package/dist/gs/mime/index.js.map +1 -0
  201. package/dist/gs/net/http/httptest/index.d.ts +30 -0
  202. package/dist/gs/net/http/httptest/index.js +101 -0
  203. package/dist/gs/net/http/httptest/index.js.map +1 -0
  204. package/dist/gs/net/http/index.d.ts +131 -0
  205. package/dist/gs/net/http/index.js +307 -0
  206. package/dist/gs/net/http/index.js.map +1 -0
  207. package/dist/gs/net/http/pprof/index.d.ts +8 -0
  208. package/dist/gs/net/http/pprof/index.js +59 -0
  209. package/dist/gs/net/http/pprof/index.js.map +1 -0
  210. package/dist/gs/os/dir_unix.gs.js +2 -2
  211. package/dist/gs/os/dir_unix.gs.js.map +1 -1
  212. package/dist/gs/os/error.gs.js +9 -7
  213. package/dist/gs/os/error.gs.js.map +1 -1
  214. package/dist/gs/os/types_js.gs.js +95 -15
  215. package/dist/gs/os/types_js.gs.js.map +1 -1
  216. package/dist/gs/path/filepath/match.js +165 -3
  217. package/dist/gs/path/filepath/match.js.map +1 -1
  218. package/dist/gs/path/filepath/path.d.ts +8 -4
  219. package/dist/gs/path/filepath/path.js +192 -8
  220. package/dist/gs/path/filepath/path.js.map +1 -1
  221. package/dist/gs/path/path.d.ts +4 -1
  222. package/dist/gs/path/path.js +16 -4
  223. package/dist/gs/path/path.js.map +1 -1
  224. package/dist/gs/reflect/index.d.ts +4 -3
  225. package/dist/gs/reflect/index.js +3 -2
  226. package/dist/gs/reflect/index.js.map +1 -1
  227. package/dist/gs/reflect/iter.js +2 -2
  228. package/dist/gs/reflect/iter.js.map +1 -1
  229. package/dist/gs/reflect/map.js +29 -0
  230. package/dist/gs/reflect/map.js.map +1 -1
  231. package/dist/gs/reflect/type.d.ts +31 -9
  232. package/dist/gs/reflect/type.js +536 -43
  233. package/dist/gs/reflect/type.js.map +1 -1
  234. package/dist/gs/reflect/types.d.ts +1 -0
  235. package/dist/gs/reflect/types.js +3 -1
  236. package/dist/gs/reflect/types.js.map +1 -1
  237. package/dist/gs/reflect/value.d.ts +4 -1
  238. package/dist/gs/reflect/value.js +39 -1
  239. package/dist/gs/reflect/value.js.map +1 -1
  240. package/dist/gs/reflect/visiblefields.js +1 -1
  241. package/dist/gs/reflect/visiblefields.js.map +1 -1
  242. package/dist/gs/runtime/debug/index.d.ts +41 -0
  243. package/dist/gs/runtime/debug/index.js +66 -0
  244. package/dist/gs/runtime/debug/index.js.map +1 -0
  245. package/dist/gs/runtime/pprof/index.d.ts +20 -0
  246. package/dist/gs/runtime/pprof/index.js +85 -0
  247. package/dist/gs/runtime/pprof/index.js.map +1 -0
  248. package/dist/gs/runtime/runtime.d.ts +35 -3
  249. package/dist/gs/runtime/runtime.js +72 -0
  250. package/dist/gs/runtime/runtime.js.map +1 -1
  251. package/dist/gs/runtime/trace/index.d.ts +19 -0
  252. package/dist/gs/runtime/trace/index.js +64 -0
  253. package/dist/gs/runtime/trace/index.js.map +1 -0
  254. package/dist/gs/slices/slices.d.ts +42 -8
  255. package/dist/gs/slices/slices.js +425 -11
  256. package/dist/gs/slices/slices.js.map +1 -1
  257. package/dist/gs/sort/slice.gs.d.ts +5 -3
  258. package/dist/gs/sort/slice.gs.js +60 -22
  259. package/dist/gs/sort/slice.gs.js.map +1 -1
  260. package/dist/gs/sort/sort.gs.d.ts +4 -4
  261. package/dist/gs/sort/sort.gs.js +11 -8
  262. package/dist/gs/sort/sort.gs.js.map +1 -1
  263. package/dist/gs/strings/builder.d.ts +1 -1
  264. package/dist/gs/strings/builder.js +29 -19
  265. package/dist/gs/strings/builder.js.map +1 -1
  266. package/dist/gs/strings/iter.js +140 -75
  267. package/dist/gs/strings/iter.js.map +1 -1
  268. package/dist/gs/strings/replace.js +2 -2
  269. package/dist/gs/strings/replace.js.map +1 -1
  270. package/dist/gs/strings/strings.js +52 -6
  271. package/dist/gs/strings/strings.js.map +1 -1
  272. package/dist/gs/sync/atomic/type.gs.d.ts +9 -8
  273. package/dist/gs/sync/atomic/type.gs.js +0 -2
  274. package/dist/gs/sync/atomic/type.gs.js.map +1 -1
  275. package/dist/gs/sync/sync.d.ts +8 -3
  276. package/dist/gs/sync/sync.js +66 -11
  277. package/dist/gs/sync/sync.js.map +1 -1
  278. package/dist/gs/syscall/constants.d.ts +36 -24
  279. package/dist/gs/syscall/constants.js +12 -0
  280. package/dist/gs/syscall/constants.js.map +1 -1
  281. package/dist/gs/syscall/errors.d.ts +117 -111
  282. package/dist/gs/syscall/errors.js +45 -0
  283. package/dist/gs/syscall/errors.js.map +1 -1
  284. package/dist/gs/syscall/fs.d.ts +37 -0
  285. package/dist/gs/syscall/fs.js +102 -0
  286. package/dist/gs/syscall/fs.js.map +1 -1
  287. package/dist/gs/syscall/js/index.d.ts +90 -0
  288. package/dist/gs/syscall/js/index.js +383 -0
  289. package/dist/gs/syscall/js/index.js.map +1 -0
  290. package/dist/gs/syscall/types.d.ts +26 -1
  291. package/dist/gs/syscall/types.js +45 -1
  292. package/dist/gs/syscall/types.js.map +1 -1
  293. package/dist/gs/testing/index.d.ts +1 -0
  294. package/dist/gs/testing/index.js +2 -0
  295. package/dist/gs/testing/index.js.map +1 -0
  296. package/dist/gs/testing/testing.d.ts +78 -0
  297. package/dist/gs/testing/testing.js +318 -0
  298. package/dist/gs/testing/testing.js.map +1 -0
  299. package/dist/gs/time/time.d.ts +41 -4
  300. package/dist/gs/time/time.js +227 -36
  301. package/dist/gs/time/time.js.map +1 -1
  302. package/dist/gs/unicode/unicode.d.ts +23 -1
  303. package/dist/gs/unicode/unicode.js +79 -10
  304. package/dist/gs/unicode/unicode.js.map +1 -1
  305. package/dist/gs/unicode/utf8/utf8.d.ts +4 -4
  306. package/dist/gs/unicode/utf8/utf8.js +24 -11
  307. package/dist/gs/unicode/utf8/utf8.js.map +1 -1
  308. package/dist/gs/unique/index.d.ts +11 -0
  309. package/dist/gs/unique/index.js +76 -0
  310. package/dist/gs/unique/index.js.map +1 -0
  311. package/go.mod +8 -8
  312. package/go.sum +14 -14
  313. package/gs/builtin/builtin.ts +585 -27
  314. package/gs/builtin/channel.ts +183 -29
  315. package/gs/builtin/defer.ts +13 -2
  316. package/gs/builtin/hostio.test.ts +1 -0
  317. package/gs/builtin/hostio.ts +38 -0
  318. package/gs/builtin/map.ts +46 -6
  319. package/gs/builtin/print.ts +12 -3
  320. package/gs/builtin/runtime-contract.test.ts +383 -10
  321. package/gs/builtin/slice.test.ts +70 -0
  322. package/gs/builtin/slice.ts +785 -265
  323. package/gs/builtin/type.ts +160 -41
  324. package/gs/builtin/varRef.ts +40 -1
  325. package/gs/bytes/buffer.gs.ts +74 -70
  326. package/gs/bytes/iter.gs.ts +13 -14
  327. package/gs/bytes/meta.json +8 -3
  328. package/gs/bytes/reader.gs.ts +20 -19
  329. package/gs/compress/zlib/index.test.ts +28 -0
  330. package/gs/compress/zlib/index.ts +200 -0
  331. package/gs/compress/zlib/meta.json +3 -0
  332. package/gs/context/context.test.ts +71 -0
  333. package/gs/context/context.ts +30 -29
  334. package/gs/crypto/ecdh/index.test.ts +43 -0
  335. package/gs/crypto/ecdh/index.ts +274 -0
  336. package/gs/crypto/ed25519/index.test.ts +41 -0
  337. package/gs/crypto/ed25519/index.ts +238 -0
  338. package/gs/crypto/ed25519/meta.json +13 -0
  339. package/gs/crypto/internal/constanttime/index.test.ts +25 -0
  340. package/gs/crypto/internal/constanttime/index.ts +22 -0
  341. package/gs/crypto/internal/fips140deps/byteorder/index.ts +1 -0
  342. package/gs/crypto/internal/fips140deps/godebug/index.ts +1 -0
  343. package/gs/crypto/rand/index.test.ts +89 -1
  344. package/gs/crypto/rand/index.ts +103 -1
  345. package/gs/crypto/rand/meta.json +4 -1
  346. package/gs/crypto/sha256/index.test.ts +78 -0
  347. package/gs/crypto/sha256/index.ts +150 -0
  348. package/gs/crypto/sha256/meta.json +9 -0
  349. package/gs/crypto/sha512/index.test.ts +31 -0
  350. package/gs/crypto/sha512/index.ts +161 -0
  351. package/gs/crypto/sha512/meta.json +11 -0
  352. package/gs/embed/index.ts +20 -0
  353. package/gs/embed/meta.json +5 -0
  354. package/gs/encoding/json/index.test.ts +39 -3
  355. package/gs/encoding/json/index.ts +45 -3
  356. package/gs/errors/errors.test.ts +85 -0
  357. package/gs/errors/errors.ts +132 -4
  358. package/gs/fmt/fmt.test.ts +3 -1
  359. package/gs/fmt/fmt.ts +55 -19
  360. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +128 -1
  361. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +342 -4
  362. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +180 -0
  363. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +1084 -0
  364. package/gs/github.com/aperturerobotics/starpc/srpc/index.test.ts +31 -0
  365. package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +1233 -0
  366. package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +46 -0
  367. package/gs/github.com/aperturerobotics/util/conc/index.test.ts +30 -0
  368. package/gs/github.com/aperturerobotics/util/conc/index.ts +172 -0
  369. package/gs/github.com/aperturerobotics/util/conc/meta.json +9 -0
  370. package/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.ts +1 -4
  371. package/gs/github.com/hack-pad/safejs/internal/catch/index.test.ts +35 -0
  372. package/gs/github.com/hack-pad/safejs/internal/catch/index.ts +65 -0
  373. package/gs/github.com/hack-pad/safejs/internal/catch/meta.json +9 -0
  374. package/gs/github.com/klauspost/compress/internal/le/index.test.ts +37 -0
  375. package/gs/github.com/klauspost/compress/internal/le/index.ts +115 -0
  376. package/gs/github.com/mr-tron/base58/base58/index.test.ts +70 -0
  377. package/gs/github.com/mr-tron/base58/base58/index.ts +231 -0
  378. package/gs/github.com/mr-tron/base58/base58/meta.json +3 -0
  379. package/gs/github.com/zeebo/blake3/internal/consts/index.test.ts +46 -0
  380. package/gs/github.com/zeebo/blake3/internal/consts/index.ts +26 -0
  381. package/gs/go/internal/scannerhooks/index.test.ts +14 -0
  382. package/gs/go/internal/scannerhooks/index.ts +9 -0
  383. package/gs/go/scanner/index.test.ts +22 -0
  384. package/gs/go/scanner/index.ts +47 -0
  385. package/gs/go/token/index.test.ts +47 -1
  386. package/gs/go/token/index.ts +583 -4
  387. package/gs/hash/fnv/index.test.ts +67 -0
  388. package/gs/hash/fnv/index.ts +351 -0
  389. package/gs/hash/fnv/meta.json +3 -0
  390. package/gs/hash/index.test.ts +37 -0
  391. package/gs/hash/index.ts +118 -0
  392. package/gs/hash/meta.json +5 -0
  393. package/gs/internal/abi/index.test.ts +18 -0
  394. package/gs/internal/abi/index.ts +14 -0
  395. package/gs/internal/bytealg/index.test.ts +18 -0
  396. package/gs/internal/bytealg/index.ts +16 -0
  397. package/gs/internal/byteorder/index.test.ts +39 -0
  398. package/gs/internal/byteorder/index.ts +100 -27
  399. package/gs/internal/godebug/index.test.ts +16 -0
  400. package/gs/internal/godebug/index.ts +35 -0
  401. package/gs/io/fs/index.ts +1 -0
  402. package/gs/io/fs/meta.json +5 -0
  403. package/gs/io/fs/readlink.test.ts +43 -0
  404. package/gs/io/fs/readlink.ts +69 -0
  405. package/gs/io/fs/walk.test.ts +61 -0
  406. package/gs/io/fs/walk.ts +17 -9
  407. package/gs/io/io.ts +177 -31
  408. package/gs/io/meta.json +10 -2
  409. package/gs/iter/iter.ts +8 -2
  410. package/gs/maps/iter.ts +75 -26
  411. package/gs/maps/maps.test.ts +23 -0
  412. package/gs/maps/maps.ts +13 -11
  413. package/gs/math/bits/index.test.ts +20 -0
  414. package/gs/math/bits/index.ts +107 -64
  415. package/gs/math/const.gs.test.ts +11 -5
  416. package/gs/math/const.gs.ts +5 -6
  417. package/gs/mime/index.ts +60 -0
  418. package/gs/net/http/httptest/index.test.ts +53 -0
  419. package/gs/net/http/httptest/index.ts +120 -0
  420. package/gs/net/http/index.test.ts +148 -0
  421. package/gs/net/http/index.ts +432 -0
  422. package/gs/net/http/meta.json +6 -0
  423. package/gs/net/http/pprof/index.test.ts +47 -0
  424. package/gs/net/http/pprof/index.ts +65 -0
  425. package/gs/os/dir_unix.gs.ts +2 -3
  426. package/gs/os/error.gs.ts +9 -10
  427. package/gs/os/error.test.ts +41 -0
  428. package/gs/os/file_unix_js.test.ts +55 -0
  429. package/gs/os/tempfile.gs.test.ts +37 -10
  430. package/gs/os/types_js.gs.ts +96 -17
  431. package/gs/path/filepath/match.test.ts +31 -12
  432. package/gs/path/filepath/match.ts +181 -3
  433. package/gs/path/filepath/meta.json +6 -0
  434. package/gs/path/filepath/path.test.ts +80 -0
  435. package/gs/path/filepath/path.ts +244 -11
  436. package/gs/path/path.ts +20 -5
  437. package/gs/reflect/field.test.ts +63 -0
  438. package/gs/reflect/index.ts +5 -1
  439. package/gs/reflect/iter.ts +2 -2
  440. package/gs/reflect/map.test.ts +42 -1
  441. package/gs/reflect/map.ts +39 -0
  442. package/gs/reflect/type.ts +728 -65
  443. package/gs/reflect/typefor.test.ts +100 -0
  444. package/gs/reflect/types.ts +3 -1
  445. package/gs/reflect/value.ts +50 -1
  446. package/gs/reflect/visiblefields.ts +1 -1
  447. package/gs/runtime/debug/index.test.ts +45 -0
  448. package/gs/runtime/debug/index.ts +96 -0
  449. package/gs/runtime/pprof/index.test.ts +36 -0
  450. package/gs/runtime/pprof/index.ts +104 -0
  451. package/gs/runtime/pprof/meta.json +6 -0
  452. package/gs/runtime/runtime.test.ts +19 -0
  453. package/gs/runtime/runtime.ts +98 -3
  454. package/gs/runtime/trace/index.test.ts +45 -0
  455. package/gs/runtime/trace/index.ts +97 -0
  456. package/gs/runtime/trace/meta.json +7 -0
  457. package/gs/slices/meta.json +2 -1
  458. package/gs/slices/slices.test.ts +180 -0
  459. package/gs/slices/slices.ts +502 -15
  460. package/gs/sort/meta.json +7 -0
  461. package/gs/sort/slice.gs.ts +85 -26
  462. package/gs/sort/slice.test.ts +40 -0
  463. package/gs/sort/sort.gs.ts +16 -13
  464. package/gs/strings/builder.test.ts +8 -0
  465. package/gs/strings/builder.ts +33 -20
  466. package/gs/strings/iter.test.ts +5 -7
  467. package/gs/strings/iter.ts +146 -71
  468. package/gs/strings/replace.test.ts +1 -4
  469. package/gs/strings/replace.ts +6 -6
  470. package/gs/strings/strings.test.ts +4 -0
  471. package/gs/strings/strings.ts +54 -6
  472. package/gs/sync/atomic/type.gs.ts +13 -14
  473. package/gs/sync/meta.json +3 -1
  474. package/gs/sync/sync.test.ts +69 -1
  475. package/gs/sync/sync.ts +72 -13
  476. package/gs/syscall/constants.ts +39 -24
  477. package/gs/syscall/errors.ts +165 -112
  478. package/gs/syscall/fs.ts +195 -0
  479. package/gs/syscall/js/index.ts +485 -0
  480. package/gs/syscall/js/meta.json +4 -0
  481. package/gs/syscall/net.test.ts +111 -0
  482. package/gs/syscall/types.ts +63 -2
  483. package/gs/testing/index.ts +1 -0
  484. package/gs/testing/meta.json +5 -0
  485. package/gs/testing/testing.test.ts +146 -0
  486. package/gs/testing/testing.ts +399 -0
  487. package/gs/time/meta.json +2 -2
  488. package/gs/time/time.test.ts +110 -0
  489. package/gs/time/time.ts +309 -57
  490. package/gs/unicode/unicode.test.ts +36 -0
  491. package/gs/unicode/unicode.ts +115 -9
  492. package/gs/unicode/utf8/utf8.test.ts +13 -0
  493. package/gs/unicode/utf8/utf8.ts +28 -16
  494. package/gs/unique/index.ts +98 -0
  495. package/package.json +3 -2
@@ -5,7 +5,7 @@ import (
5
5
  "github.com/aperturerobotics/goscript/compiler"
6
6
  )
7
7
 
8
- // CompileSource returns the v2 browser source-compilation diagnostic.
8
+ // CompileSource compiles import-free browser source strings to TypeScript.
9
9
  func CompileSource(source string, packageName string) (string, error) {
10
10
  return compiler.CompileSourceToTypeScript(source, packageName)
11
11
  }
@@ -2,28 +2,78 @@ package wasm
2
2
 
3
3
  import (
4
4
  "errors"
5
+ "strings"
5
6
  "testing"
6
7
 
7
8
  "github.com/aperturerobotics/goscript/compiler"
8
9
  )
9
10
 
10
- func TestCompileSourceReportsUnsupportedSingleFile(t *testing.T) {
11
- _, err := CompileSource("package main\nfunc main() {}\n", "main")
11
+ func TestCompileSourceCompilesSingleFile(t *testing.T) {
12
+ output, err := CompileSource(strings.Join([]string{
13
+ "package main",
14
+ "",
15
+ "type Counter struct {",
16
+ " value int",
17
+ "}",
18
+ "",
19
+ "func (c *Counter) Increment() {",
20
+ " c.value++",
21
+ "}",
22
+ "",
23
+ "func main() {",
24
+ " c := &Counter{}",
25
+ " c.Increment()",
26
+ " println(\"Count:\", c.value)",
27
+ "}",
28
+ "",
29
+ }, "\n"), "main")
30
+ if err != nil {
31
+ t.Fatal(err.Error())
32
+ }
33
+ for _, want := range []string{
34
+ "import * as $ from \"@goscript/builtin/index.js\"",
35
+ "class Counter",
36
+ "public Increment(): void",
37
+ "export async function main(): globalThis.Promise<void>",
38
+ "$.println(\"Count:\", $.pointerValue<Counter>(c).value)",
39
+ "await main()",
40
+ } {
41
+ if !strings.Contains(output, want) {
42
+ t.Fatalf("missing %q in generated output:\n%s", want, output)
43
+ }
44
+ }
45
+ }
46
+
47
+ func TestCompileSourceReportsParseErrors(t *testing.T) {
48
+ _, err := CompileSource("package main\nfunc main( {\n", "main")
49
+ if err == nil {
50
+ t.Fatal("expected compile error")
51
+ }
52
+ requireCompileDiagnostic(t, err, "goscript/wasm:parse")
53
+ }
54
+
55
+ func TestCompileSourceReportsUnsupportedImports(t *testing.T) {
56
+ _, err := CompileSource("package main\n\nimport \"fmt\"\n\nfunc main() { fmt.Println(\"hi\") }\n", "main")
12
57
  if err == nil {
13
58
  t.Fatal("expected compile error")
14
59
  }
60
+ requireCompileDiagnostic(t, err, "goscript/wasm:imports-unsupported")
61
+ }
62
+
63
+ func requireCompileDiagnostic(t *testing.T, err error, code string) {
64
+ t.Helper()
65
+
15
66
  var compileErr *compiler.CompileError
16
67
  if !errors.As(err, &compileErr) {
17
68
  t.Fatalf("expected CompileError, got %T: %v", err, err)
18
69
  }
19
- if len(compileErr.Diagnostics) != 1 {
20
- t.Fatalf("expected one diagnostic, got %d", len(compileErr.Diagnostics))
21
- }
22
- diag := compileErr.Diagnostics[0]
23
- if diag.Code != "goscript/wasm:single-file-unsupported" {
24
- t.Fatalf("expected single-file diagnostic, got %s", diag.Code)
25
- }
26
- if diag.Severity != compiler.DiagnosticSeverityError {
27
- t.Fatalf("expected error severity, got %s", diag.Severity)
70
+ for _, diag := range compileErr.Diagnostics {
71
+ if diag.Code == code {
72
+ if diag.Severity != compiler.DiagnosticSeverityError {
73
+ t.Fatalf("expected error severity, got %s", diag.Severity)
74
+ }
75
+ return
76
+ }
28
77
  }
78
+ t.Fatalf("missing diagnostic %q in %#v", code, compileErr.Diagnostics)
29
79
  }
@@ -1,14 +1,179 @@
1
1
  package compiler
2
2
 
3
+ import (
4
+ "context"
5
+ "go/ast"
6
+ "go/parser"
7
+ "go/token"
8
+ "go/types"
9
+ "strconv"
10
+ "strings"
11
+
12
+ "golang.org/x/tools/go/packages"
13
+ )
14
+
15
+ const browserSourceFileName = "main.go"
16
+
3
17
  // CompileSourceToTypeScript is the WASM adapter for browser source compilation.
4
18
  func CompileSourceToTypeScript(source string, packageName string) (string, error) {
5
- _ = source
6
- _ = packageName
19
+ graph, diagnostics := browserSourceGraph(source, packageName)
20
+ if diagnosticsHaveErrors(diagnostics) {
21
+ return "", NewCompileError(diagnostics)
22
+ }
23
+
24
+ ctx := context.Background()
25
+ service := NewCompileService()
26
+ model, modelDiagnostics := service.semanticOwner.Build(ctx, graph)
27
+ diagnostics = append(diagnostics, modelDiagnostics...)
28
+ if diagnosticsHaveErrors(diagnostics) {
29
+ return "", NewCompileError(diagnostics)
30
+ }
31
+
32
+ program, loweringDiagnostics := service.loweringOwner.Build(ctx, model)
33
+ diagnostics = append(diagnostics, loweringDiagnostics...)
34
+ if diagnosticsHaveErrors(diagnostics) {
35
+ return "", NewCompileError(diagnostics)
36
+ }
37
+ if program == nil || len(program.packages) != 1 || len(program.packages[0].files) != 1 {
38
+ diagnostics = append(diagnostics, Diagnostic{
39
+ Severity: DiagnosticSeverityError,
40
+ Code: "goscript/wasm:invalid-output",
41
+ Message: "browser source compilation produced an invalid output shape",
42
+ })
43
+ return "", NewCompileError(diagnostics)
44
+ }
45
+
46
+ files, emitDiagnostics := service.emitterOwner.EmitToMemory(ctx, program)
47
+ diagnostics = append(diagnostics, emitDiagnostics...)
48
+ if diagnosticsHaveErrors(diagnostics) {
49
+ return "", NewCompileError(diagnostics)
50
+ }
51
+ filePath := "@goscript/" + program.packages[0].pkgPath + "/" + program.packages[0].files[0].outputName
52
+ output, ok := files[filePath]
53
+ if !ok {
54
+ diagnostics = append(diagnostics, Diagnostic{
55
+ Severity: DiagnosticSeverityError,
56
+ Code: "goscript/wasm:missing-output",
57
+ Message: "browser source compilation did not emit the expected TypeScript file",
58
+ Detail: filePath,
59
+ })
60
+ return "", NewCompileError(diagnostics)
61
+ }
62
+ return output, nil
63
+ }
64
+
65
+ func browserSourceGraph(source string, packageName string) (*PackageGraph, []Diagnostic) {
66
+ if strings.TrimSpace(source) == "" {
67
+ return nil, []Diagnostic{{
68
+ Severity: DiagnosticSeverityError,
69
+ Code: "goscript/wasm:empty-source",
70
+ Message: "browser source compilation requires Go source code",
71
+ }}
72
+ }
73
+
74
+ fset := token.NewFileSet()
75
+ file, err := parser.ParseFile(fset, browserSourceFileName, source, parser.ParseComments)
76
+ if err != nil {
77
+ return nil, []Diagnostic{{
78
+ Severity: DiagnosticSeverityError,
79
+ Code: "goscript/wasm:parse",
80
+ Message: "browser source compilation failed to parse Go source",
81
+ Detail: err.Error(),
82
+ }}
83
+ }
84
+ if len(file.Imports) != 0 {
85
+ return nil, []Diagnostic{browserImportsUnsupportedDiagnostic(file)}
86
+ }
87
+
88
+ pkgPath := strings.TrimSpace(packageName)
89
+ if pkgPath == "" {
90
+ pkgPath = file.Name.Name
91
+ }
92
+ info := &types.Info{
93
+ Types: make(map[ast.Expr]types.TypeAndValue),
94
+ Defs: make(map[*ast.Ident]types.Object),
95
+ Uses: make(map[*ast.Ident]types.Object),
96
+ Implicits: make(map[ast.Node]types.Object),
97
+ Selections: make(map[*ast.SelectorExpr]*types.Selection),
98
+ Scopes: make(map[ast.Node]*types.Scope),
99
+ }
100
+ sizes := types.SizesFor("gc", "wasm")
101
+ if sizes == nil {
102
+ sizes = types.SizesFor("gc", "amd64")
103
+ }
104
+
105
+ var typeDiagnostics []Diagnostic
106
+ config := types.Config{
107
+ Sizes: sizes,
108
+ Error: func(err error) {
109
+ typeDiagnostics = append(typeDiagnostics, Diagnostic{
110
+ Severity: DiagnosticSeverityError,
111
+ Code: "goscript/wasm:typecheck",
112
+ Message: "browser source compilation failed to type-check Go source",
113
+ Detail: err.Error(),
114
+ })
115
+ },
116
+ }
117
+ typedPkg, err := config.Check(pkgPath, fset, []*ast.File{file}, info)
118
+ if err != nil {
119
+ if len(typeDiagnostics) == 0 {
120
+ typeDiagnostics = append(typeDiagnostics, Diagnostic{
121
+ Severity: DiagnosticSeverityError,
122
+ Code: "goscript/wasm:typecheck",
123
+ Message: "browser source compilation failed to type-check Go source",
124
+ Detail: err.Error(),
125
+ })
126
+ }
127
+ return nil, typeDiagnostics
128
+ }
129
+
130
+ node := &PackageGraphNode{
131
+ ID: pkgPath,
132
+ PkgPath: pkgPath,
133
+ Name: file.Name.Name,
134
+ GoFiles: []string{browserSourceFileName},
135
+ CompiledGoFiles: []string{browserSourceFileName},
136
+ Requested: true,
137
+ }
138
+ pkg := &packages.Package{
139
+ ID: pkgPath,
140
+ Name: file.Name.Name,
141
+ PkgPath: pkgPath,
142
+ GoFiles: []string{browserSourceFileName},
143
+ CompiledGoFiles: []string{browserSourceFileName},
144
+ Imports: make(map[string]*packages.Package),
145
+ Types: typedPkg,
146
+ Fset: fset,
147
+ Syntax: []*ast.File{file},
148
+ TypesInfo: info,
149
+ TypesSizes: sizes,
150
+ }
151
+ return &PackageGraph{
152
+ RequestedPatterns: []string{pkgPath},
153
+ RequestedPackagePaths: []string{pkgPath},
154
+ Nodes: []*PackageGraphNode{node},
155
+ NodesByPackagePath: map[string]*PackageGraphNode{
156
+ pkgPath: node,
157
+ },
158
+ packagesByPath: map[string]*packages.Package{
159
+ pkgPath: pkg,
160
+ },
161
+ }, nil
162
+ }
7
163
 
8
- return "", NewCompileError([]Diagnostic{{
164
+ func browserImportsUnsupportedDiagnostic(file *ast.File) Diagnostic {
165
+ imports := make([]string, 0, len(file.Imports))
166
+ for _, spec := range file.Imports {
167
+ importPath := spec.Path.Value
168
+ if unquoted, err := strconv.Unquote(importPath); err == nil {
169
+ importPath = unquoted
170
+ }
171
+ imports = append(imports, importPath)
172
+ }
173
+ return Diagnostic{
9
174
  Severity: DiagnosticSeverityError,
10
- Code: "goscript/wasm:single-file-unsupported",
11
- Message: "browser source compilation is not supported by the v2 compiler",
12
- Detail: "Use goscript compile --package . from inside a Go module. The website uses precompiled examples until direct single-file compilation is scoped.",
13
- }})
175
+ Code: "goscript/wasm:imports-unsupported",
176
+ Message: "browser source compilation does not support imports yet",
177
+ Detail: "Use goscript compile --package . from inside a Go module for imported packages. Imports: " + strings.Join(imports, ", "),
178
+ }
14
179
  }
@@ -10,18 +10,23 @@ export declare function print(...args: any[]): void;
10
10
  * @param args Arguments to print
11
11
  */
12
12
  export declare function println(...args: any[]): void;
13
+ export declare class GoPanic extends Error {
14
+ readonly value: unknown;
15
+ constructor(value: unknown);
16
+ }
13
17
  /**
14
18
  * Implementation of Go's built-in panic function
15
19
  * @param args Arguments passed to panic
16
20
  */
17
- export declare function panic(...args: any[]): never;
21
+ export declare function panic(...args: unknown[]): never;
22
+ export declare function panicValue(value: unknown): unknown;
18
23
  /**
19
24
  * Implementation of Go's built-in clear function.
20
25
  * For slices, it sets all elements to their zero value.
21
26
  * For maps, it deletes all entries.
22
27
  * @param v The slice or map to clear
23
28
  */
24
- export declare function clear<T>(v: T[] | Map<unknown, unknown> | null): void;
29
+ export declare function clear<T>(v: Slice<T> | Map<unknown, unknown> | null): void;
25
30
  /**
26
31
  * assignStruct copies all field values from source struct to target struct.
27
32
  * Used for pointer dereference assignment: *p = value
@@ -35,8 +40,40 @@ export declare function assignStruct<T>(target: T, source: T): void;
35
40
  * variable's address.
36
41
  */
37
42
  export declare function pointerValue<T>(value: T | VarRef<T> | null | undefined): T;
43
+ export declare function pointerValueOrNil<T>(value: T | VarRef<T> | null | undefined): T | null;
44
+ export declare function arrayEqual(a: unknown, b: unknown): boolean;
45
+ export declare function comparableEqual(a: unknown, b: unknown): boolean;
46
+ export interface Complex {
47
+ real: number;
48
+ imag: number;
49
+ }
50
+ export declare function complex(real: number, imag: number): Complex;
51
+ export declare function real(value: number | Complex | null | undefined): number;
52
+ export declare function imag(value: number | Complex | null | undefined): number;
38
53
  export type Bytes = Uint8Array | Slice<number>;
39
- export declare function int(value: number): number;
54
+ export declare function int(value: number | bigint, bits?: number): number;
55
+ export declare function uint(value: number | bigint, bits?: number): number;
56
+ export declare function uint64Shl(value: number | bigint, shift: number | bigint): number;
57
+ export declare function uint64Shr(value: number | bigint, shift: number | bigint): number;
58
+ export declare function int64Shl(value: number | bigint, shift: number | bigint): number;
59
+ export declare function int64Shr(value: number | bigint, shift: number | bigint): number;
60
+ export declare function uintShr(value: number | bigint, shift: number | bigint, bits?: number): number;
61
+ export declare function uint64Mul(left: number | bigint, right: number | bigint): number;
62
+ export declare function int64Mul(left: number | bigint, right: number | bigint): number;
63
+ export declare function uint64Div(left: number | bigint, right: number | bigint): number;
64
+ export declare function int64Div(left: number | bigint, right: number | bigint): number;
65
+ export declare function uint64Mod(left: number | bigint, right: number | bigint): number;
66
+ export declare function int64Mod(left: number | bigint, right: number | bigint): number;
67
+ export declare function uint64Add(left: number | bigint, right: number | bigint): number;
68
+ export declare function int64Add(left: number | bigint, right: number | bigint): number;
69
+ export declare function uint64Sub(left: number | bigint, right: number | bigint): number;
70
+ export declare function int64Sub(left: number | bigint, right: number | bigint): number;
71
+ export declare function uint64And(left: number | bigint, right: number | bigint): number;
72
+ export declare function int64And(left: number | bigint, right: number | bigint): number;
73
+ export declare function uint64Or(left: number | bigint, right: number | bigint): number;
74
+ export declare function int64Or(left: number | bigint, right: number | bigint): number;
75
+ export declare function uint64Xor(left: number | bigint, right: number | bigint): number;
76
+ export declare function int64Xor(left: number | bigint, right: number | bigint): number;
40
77
  /**
41
78
  * Normalizes various byte representations into a `Uint8Array` for protobuf compatibility.
42
79
  *