goscript 0.0.84 → 0.1.1

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 (428) hide show
  1. package/README.md +267 -243
  2. package/cmd/goscript/cmd-test.go +193 -0
  3. package/cmd/goscript/cmd-test_test.go +76 -0
  4. package/cmd/goscript/cmd_compile.go +70 -69
  5. package/cmd/goscript/cmd_compile_test.go +79 -0
  6. package/cmd/goscript/main.go +11 -5
  7. package/compiler/build-flags.go +38 -0
  8. package/compiler/compile-request.go +220 -0
  9. package/compiler/compiler.go +16 -1336
  10. package/compiler/compliance_test.go +188 -0
  11. package/compiler/config.go +6 -13
  12. package/compiler/diagnostic.go +70 -0
  13. package/compiler/gotest/owner.go +24 -0
  14. package/compiler/gotest/package-result.go +67 -0
  15. package/compiler/gotest/request.go +145 -0
  16. package/compiler/gotest/result.go +28 -0
  17. package/compiler/gotest/runner.go +588 -0
  18. package/compiler/gotest/runner_test.go +627 -0
  19. package/compiler/gotest/test.go +9 -0
  20. package/compiler/index.test.ts +28 -28
  21. package/compiler/index.ts +40 -72
  22. package/compiler/lowered-program.go +184 -0
  23. package/compiler/lowering.go +8072 -0
  24. package/compiler/override-facts.go +307 -0
  25. package/compiler/override-registry.go +283 -0
  26. package/compiler/override-registry_test.go +254 -0
  27. package/compiler/package-graph.go +254 -0
  28. package/compiler/package-graph_test.go +316 -0
  29. package/compiler/package-test-function.go +9 -0
  30. package/compiler/package-test-graph-package.go +40 -0
  31. package/compiler/package-test-graph-variant.go +105 -0
  32. package/compiler/package-test-graph.go +117 -0
  33. package/compiler/package-test-graph_test.go +144 -0
  34. package/compiler/result.go +13 -0
  35. package/compiler/runtime-contract.go +439 -0
  36. package/compiler/runtime-contract_test.go +104 -0
  37. package/compiler/semantic-model-types.go +113 -0
  38. package/compiler/semantic-model.go +1422 -0
  39. package/compiler/semantic-model_test.go +471 -0
  40. package/compiler/service.go +133 -0
  41. package/compiler/skeleton_test.go +1775 -0
  42. package/compiler/tsworkspace/owner.go +334 -0
  43. package/compiler/tsworkspace/owner_test.go +93 -0
  44. package/compiler/tsworkspace/result.go +17 -0
  45. package/compiler/typescript-emitter.go +1040 -0
  46. package/compiler/wasm/compile.go +2 -3
  47. package/compiler/wasm/compile_test.go +79 -0
  48. package/compiler/wasm_api.go +140 -124
  49. package/dist/compiler/index.d.ts +1 -3
  50. package/dist/compiler/index.js +31 -55
  51. package/dist/compiler/index.js.map +1 -1
  52. package/dist/gs/builtin/builtin.d.ts +33 -2
  53. package/dist/gs/builtin/builtin.js +217 -6
  54. package/dist/gs/builtin/builtin.js.map +1 -1
  55. package/dist/gs/builtin/channel.d.ts +11 -3
  56. package/dist/gs/builtin/channel.js +12 -0
  57. package/dist/gs/builtin/channel.js.map +1 -1
  58. package/dist/gs/builtin/hostio.d.ts +15 -1
  59. package/dist/gs/builtin/hostio.js +134 -49
  60. package/dist/gs/builtin/hostio.js.map +1 -1
  61. package/dist/gs/builtin/index.d.ts +1 -0
  62. package/dist/gs/builtin/index.js +1 -0
  63. package/dist/gs/builtin/index.js.map +1 -1
  64. package/dist/gs/builtin/slice.d.ts +23 -3
  65. package/dist/gs/builtin/slice.js +216 -44
  66. package/dist/gs/builtin/slice.js.map +1 -1
  67. package/dist/gs/builtin/type.d.ts +16 -2
  68. package/dist/gs/builtin/type.js +134 -21
  69. package/dist/gs/builtin/type.js.map +1 -1
  70. package/dist/gs/builtin/varRef.d.ts +5 -0
  71. package/dist/gs/builtin/varRef.js +23 -0
  72. package/dist/gs/builtin/varRef.js.map +1 -1
  73. package/dist/gs/bytes/buffer.gs.js +48 -44
  74. package/dist/gs/bytes/buffer.gs.js.map +1 -1
  75. package/dist/gs/bytes/bytes.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/context/context.d.ts +5 -4
  79. package/dist/gs/context/context.js +10 -10
  80. package/dist/gs/context/context.js.map +1 -1
  81. package/dist/gs/crypto/internal/fips140deps/byteorder/index.d.ts +1 -0
  82. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js +2 -0
  83. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js.map +1 -0
  84. package/dist/gs/crypto/internal/fips140deps/godebug/index.d.ts +1 -0
  85. package/dist/gs/crypto/internal/fips140deps/godebug/index.js +2 -0
  86. package/dist/gs/crypto/internal/fips140deps/godebug/index.js.map +1 -0
  87. package/dist/gs/crypto/rand/index.d.ts +5 -0
  88. package/dist/gs/crypto/rand/index.js +77 -0
  89. package/dist/gs/crypto/rand/index.js.map +1 -0
  90. package/dist/gs/embed/index.d.ts +7 -0
  91. package/dist/gs/embed/index.js +16 -0
  92. package/dist/gs/embed/index.js.map +1 -0
  93. package/dist/gs/encoding/json/index.d.ts +4 -0
  94. package/dist/gs/encoding/json/index.js +178 -0
  95. package/dist/gs/encoding/json/index.js.map +1 -0
  96. package/dist/gs/errors/errors.d.ts +4 -0
  97. package/dist/gs/errors/errors.js +81 -0
  98. package/dist/gs/errors/errors.js.map +1 -1
  99. package/dist/gs/fmt/fmt.d.ts +4 -4
  100. package/dist/gs/fmt/fmt.js +42 -11
  101. package/dist/gs/fmt/fmt.js.map +1 -1
  102. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +36 -1
  103. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +212 -2
  104. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
  105. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.d.ts +189 -0
  106. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js +825 -0
  107. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js.map +1 -0
  108. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +163 -0
  109. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +449 -0
  110. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +1 -0
  111. package/dist/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.js.map +1 -1
  112. package/dist/gs/github.com/klauspost/compress/internal/le/index.d.ts +9 -0
  113. package/dist/gs/github.com/klauspost/compress/internal/le/index.js +71 -0
  114. package/dist/gs/github.com/klauspost/compress/internal/le/index.js.map +1 -0
  115. package/dist/gs/github.com/pkg/errors/errors.js.map +1 -1
  116. package/dist/gs/github.com/pkg/errors/stack.js.map +1 -1
  117. package/dist/gs/go/internal/scannerhooks/index.d.ts +3 -0
  118. package/dist/gs/go/internal/scannerhooks/index.js +5 -0
  119. package/dist/gs/go/internal/scannerhooks/index.js.map +1 -0
  120. package/dist/gs/go/scanner/index.d.ts +42 -0
  121. package/dist/gs/go/scanner/index.js +155 -0
  122. package/dist/gs/go/scanner/index.js.map +1 -0
  123. package/dist/gs/go/token/index.d.ts +187 -0
  124. package/dist/gs/go/token/index.js +578 -0
  125. package/dist/gs/go/token/index.js.map +1 -0
  126. package/dist/gs/internal/abi/index.d.ts +4 -0
  127. package/dist/gs/internal/abi/index.js +10 -0
  128. package/dist/gs/internal/abi/index.js.map +1 -1
  129. package/dist/gs/internal/bytealg/index.d.ts +2 -0
  130. package/dist/gs/internal/bytealg/index.js +14 -0
  131. package/dist/gs/internal/bytealg/index.js.map +1 -1
  132. package/dist/gs/internal/byteorder/index.d.ts +8 -2
  133. package/dist/gs/internal/byteorder/index.js +56 -25
  134. package/dist/gs/internal/byteorder/index.js.map +1 -1
  135. package/dist/gs/internal/godebug/index.d.ts +12 -0
  136. package/dist/gs/internal/godebug/index.js +30 -0
  137. package/dist/gs/internal/godebug/index.js.map +1 -0
  138. package/dist/gs/io/fs/fs.js.map +1 -1
  139. package/dist/gs/io/fs/index.d.ts +1 -0
  140. package/dist/gs/io/fs/index.js +1 -0
  141. package/dist/gs/io/fs/index.js.map +1 -1
  142. package/dist/gs/io/fs/readdir.js.map +1 -1
  143. package/dist/gs/io/fs/readfile.js.map +1 -1
  144. package/dist/gs/io/fs/readlink.d.ts +8 -0
  145. package/dist/gs/io/fs/readlink.js +64 -0
  146. package/dist/gs/io/fs/readlink.js.map +1 -0
  147. package/dist/gs/io/fs/stat.js.map +1 -1
  148. package/dist/gs/io/fs/sub.js.map +1 -1
  149. package/dist/gs/io/fs/walk.d.ts +3 -3
  150. package/dist/gs/io/fs/walk.js +7 -7
  151. package/dist/gs/io/fs/walk.js.map +1 -1
  152. package/dist/gs/io/io.d.ts +40 -6
  153. package/dist/gs/io/io.js +151 -26
  154. package/dist/gs/io/io.js.map +1 -1
  155. package/dist/gs/maps/iter.d.ts +3 -3
  156. package/dist/gs/maps/iter.js +3 -3
  157. package/dist/gs/maps/iter.js.map +1 -1
  158. package/dist/gs/maps/maps.d.ts +2 -2
  159. package/dist/gs/maps/maps.js +1 -1
  160. package/dist/gs/maps/maps.js.map +1 -1
  161. package/dist/gs/math/bits/index.d.ts +13 -4
  162. package/dist/gs/math/bits/index.js +66 -34
  163. package/dist/gs/math/bits/index.js.map +1 -1
  164. package/dist/gs/math/const.gs.d.ts +5 -5
  165. package/dist/gs/math/const.gs.js +4 -4
  166. package/dist/gs/math/const.gs.js.map +1 -1
  167. package/dist/gs/mime/index.d.ts +1 -0
  168. package/dist/gs/mime/index.js +50 -0
  169. package/dist/gs/mime/index.js.map +1 -0
  170. package/dist/gs/net/http/httptest/index.d.ts +11 -0
  171. package/dist/gs/net/http/httptest/index.js +21 -0
  172. package/dist/gs/net/http/httptest/index.js.map +1 -0
  173. package/dist/gs/net/http/index.d.ts +27 -0
  174. package/dist/gs/net/http/index.js +61 -0
  175. package/dist/gs/net/http/index.js.map +1 -0
  176. package/dist/gs/os/dir_unix.gs.js +2 -2
  177. package/dist/gs/os/dir_unix.gs.js.map +1 -1
  178. package/dist/gs/os/error.gs.js +2 -4
  179. package/dist/gs/os/error.gs.js.map +1 -1
  180. package/dist/gs/os/exec.gs.js.map +1 -1
  181. package/dist/gs/os/exec_posix.gs.js.map +1 -1
  182. package/dist/gs/os/rawconn_js.gs.js.map +1 -1
  183. package/dist/gs/os/root_js.gs.js.map +1 -1
  184. package/dist/gs/os/tempfile.gs.js +66 -9
  185. package/dist/gs/os/tempfile.gs.js.map +1 -1
  186. package/dist/gs/os/types.gs.js.map +1 -1
  187. package/dist/gs/os/types_js.gs.js +9 -9
  188. package/dist/gs/os/types_js.gs.js.map +1 -1
  189. package/dist/gs/os/types_unix.gs.js.map +1 -1
  190. package/dist/gs/path/filepath/match.js +165 -3
  191. package/dist/gs/path/filepath/match.js.map +1 -1
  192. package/dist/gs/path/filepath/path.d.ts +3 -1
  193. package/dist/gs/path/filepath/path.js +133 -4
  194. package/dist/gs/path/filepath/path.js.map +1 -1
  195. package/dist/gs/path/match.js.map +1 -1
  196. package/dist/gs/path/path.d.ts +4 -1
  197. package/dist/gs/path/path.js +16 -4
  198. package/dist/gs/path/path.js.map +1 -1
  199. package/dist/gs/reflect/index.d.ts +3 -3
  200. package/dist/gs/reflect/index.js +2 -2
  201. package/dist/gs/reflect/index.js.map +1 -1
  202. package/dist/gs/reflect/map.js +3 -0
  203. package/dist/gs/reflect/map.js.map +1 -1
  204. package/dist/gs/reflect/type.d.ts +9 -5
  205. package/dist/gs/reflect/type.js +233 -21
  206. package/dist/gs/reflect/type.js.map +1 -1
  207. package/dist/gs/reflect/types.js.map +1 -1
  208. package/dist/gs/reflect/visiblefields.js.map +1 -1
  209. package/dist/gs/runtime/debug/index.d.ts +2 -0
  210. package/dist/gs/runtime/debug/index.js +8 -0
  211. package/dist/gs/runtime/debug/index.js.map +1 -0
  212. package/dist/gs/runtime/runtime.d.ts +35 -3
  213. package/dist/gs/runtime/runtime.js +72 -0
  214. package/dist/gs/runtime/runtime.js.map +1 -1
  215. package/dist/gs/slices/slices.d.ts +24 -5
  216. package/dist/gs/slices/slices.js +214 -5
  217. package/dist/gs/slices/slices.js.map +1 -1
  218. package/dist/gs/sort/slice.gs.d.ts +3 -3
  219. package/dist/gs/sort/slice.gs.js +6 -6
  220. package/dist/gs/sort/slice.gs.js.map +1 -1
  221. package/dist/gs/sort/sort.gs.d.ts +4 -4
  222. package/dist/gs/sort/sort.gs.js +11 -8
  223. package/dist/gs/sort/sort.gs.js.map +1 -1
  224. package/dist/gs/strconv/atoi.gs.js.map +1 -1
  225. package/dist/gs/strconv/quote.gs.js.map +1 -1
  226. package/dist/gs/strings/builder.d.ts +1 -1
  227. package/dist/gs/strings/builder.js +3 -2
  228. package/dist/gs/strings/builder.js.map +1 -1
  229. package/dist/gs/strings/reader.js.map +1 -1
  230. package/dist/gs/strings/replace.js.map +1 -1
  231. package/dist/gs/sync/atomic/type.gs.d.ts +9 -8
  232. package/dist/gs/sync/atomic/type.gs.js +0 -2
  233. package/dist/gs/sync/atomic/type.gs.js.map +1 -1
  234. package/dist/gs/sync/atomic/value.gs.js.map +1 -1
  235. package/dist/gs/sync/sync.d.ts +3 -0
  236. package/dist/gs/sync/sync.js +39 -0
  237. package/dist/gs/sync/sync.js.map +1 -1
  238. package/dist/gs/syscall/constants.d.ts +36 -24
  239. package/dist/gs/syscall/constants.js +12 -0
  240. package/dist/gs/syscall/constants.js.map +1 -1
  241. package/dist/gs/syscall/errors.d.ts +2 -0
  242. package/dist/gs/syscall/errors.js +8 -0
  243. package/dist/gs/syscall/errors.js.map +1 -1
  244. package/dist/gs/syscall/fs.d.ts +43 -0
  245. package/dist/gs/syscall/fs.js +102 -0
  246. package/dist/gs/syscall/fs.js.map +1 -1
  247. package/dist/gs/syscall/js/index.d.ts +90 -0
  248. package/dist/gs/syscall/js/index.js +375 -0
  249. package/dist/gs/syscall/js/index.js.map +1 -0
  250. package/dist/gs/syscall/types.d.ts +22 -0
  251. package/dist/gs/syscall/types.js +45 -1
  252. package/dist/gs/syscall/types.js.map +1 -1
  253. package/dist/gs/testing/index.d.ts +1 -0
  254. package/dist/gs/testing/index.js +2 -0
  255. package/dist/gs/testing/index.js.map +1 -0
  256. package/dist/gs/testing/testing.d.ts +77 -0
  257. package/dist/gs/testing/testing.js +301 -0
  258. package/dist/gs/testing/testing.js.map +1 -0
  259. package/dist/gs/time/time.d.ts +41 -4
  260. package/dist/gs/time/time.js +205 -36
  261. package/dist/gs/time/time.js.map +1 -1
  262. package/dist/gs/unicode/unicode.d.ts +23 -1
  263. package/dist/gs/unicode/unicode.js +79 -10
  264. package/dist/gs/unicode/unicode.js.map +1 -1
  265. package/dist/gs/unicode/utf8/utf8.d.ts +4 -4
  266. package/dist/gs/unicode/utf8/utf8.js +24 -11
  267. package/dist/gs/unicode/utf8/utf8.js.map +1 -1
  268. package/dist/gs/unique/index.d.ts +11 -0
  269. package/dist/gs/unique/index.js +71 -0
  270. package/dist/gs/unique/index.js.map +1 -0
  271. package/go.mod +2 -2
  272. package/go.sum +9 -0
  273. package/gs/builtin/builtin.ts +266 -8
  274. package/gs/builtin/channel.ts +22 -0
  275. package/gs/builtin/hostio.test.ts +177 -0
  276. package/gs/builtin/hostio.ts +171 -56
  277. package/gs/builtin/index.ts +1 -0
  278. package/gs/builtin/runtime-contract.test.ts +356 -0
  279. package/gs/builtin/slice.ts +259 -50
  280. package/gs/builtin/type.ts +188 -30
  281. package/gs/builtin/varRef.ts +38 -1
  282. package/gs/bytes/buffer.gs.ts +48 -44
  283. package/gs/bytes/meta.json +8 -3
  284. package/gs/bytes/reader.gs.ts +20 -19
  285. package/gs/context/context.test.ts +41 -0
  286. package/gs/context/context.ts +22 -26
  287. package/gs/crypto/internal/fips140deps/byteorder/index.ts +1 -0
  288. package/gs/crypto/internal/fips140deps/godebug/index.ts +1 -0
  289. package/gs/crypto/rand/index.test.ts +32 -0
  290. package/gs/crypto/rand/index.ts +90 -0
  291. package/gs/crypto/rand/meta.json +5 -0
  292. package/gs/embed/index.ts +20 -0
  293. package/gs/embed/meta.json +5 -0
  294. package/gs/encoding/json/index.test.ts +79 -0
  295. package/gs/encoding/json/index.ts +210 -0
  296. package/gs/errors/errors.test.ts +82 -0
  297. package/gs/errors/errors.ts +104 -0
  298. package/gs/fmt/fmt.ts +56 -16
  299. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +95 -0
  300. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +300 -2
  301. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +159 -0
  302. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +1005 -0
  303. package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +719 -0
  304. package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +40 -0
  305. package/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/meta.json +3 -1
  306. package/gs/github.com/klauspost/compress/internal/le/index.test.ts +36 -0
  307. package/gs/github.com/klauspost/compress/internal/le/index.ts +114 -0
  308. package/gs/go/internal/scannerhooks/index.test.ts +14 -0
  309. package/gs/go/internal/scannerhooks/index.ts +9 -0
  310. package/gs/go/scanner/index.test.ts +72 -0
  311. package/gs/go/scanner/index.ts +204 -0
  312. package/gs/go/token/index.test.ts +67 -0
  313. package/gs/go/token/index.ts +686 -0
  314. package/gs/internal/abi/index.test.ts +18 -0
  315. package/gs/internal/abi/index.ts +14 -0
  316. package/gs/internal/bytealg/index.test.ts +18 -0
  317. package/gs/internal/bytealg/index.ts +16 -0
  318. package/gs/internal/byteorder/index.test.ts +39 -0
  319. package/gs/internal/byteorder/index.ts +100 -27
  320. package/gs/internal/godebug/index.test.ts +16 -0
  321. package/gs/internal/godebug/index.ts +35 -0
  322. package/gs/io/fs/index.ts +1 -0
  323. package/gs/io/fs/meta.json +5 -0
  324. package/gs/io/fs/readlink.test.ts +43 -0
  325. package/gs/io/fs/readlink.ts +77 -0
  326. package/gs/io/fs/walk.test.ts +61 -0
  327. package/gs/io/fs/walk.ts +9 -9
  328. package/gs/io/io.ts +174 -31
  329. package/gs/io/meta.json +10 -2
  330. package/gs/maps/iter.ts +12 -6
  331. package/gs/maps/maps.ts +8 -6
  332. package/gs/math/bits/index.ts +103 -47
  333. package/gs/math/const.gs.test.ts +11 -5
  334. package/gs/math/const.gs.ts +5 -6
  335. package/gs/mime/index.ts +54 -0
  336. package/gs/net/http/httptest/index.ts +25 -0
  337. package/gs/net/http/index.test.ts +20 -0
  338. package/gs/net/http/index.ts +81 -0
  339. package/gs/os/dir_unix.gs.ts +2 -3
  340. package/gs/os/file_unix_js.test.ts +50 -0
  341. package/gs/os/meta.json +1 -2
  342. package/gs/os/tempfile.gs.test.ts +85 -0
  343. package/gs/os/tempfile.gs.ts +71 -11
  344. package/gs/os/types_js.gs.ts +11 -11
  345. package/gs/path/filepath/match.test.ts +31 -12
  346. package/gs/path/filepath/match.ts +178 -3
  347. package/gs/path/filepath/path.test.ts +25 -0
  348. package/gs/path/filepath/path.ts +159 -5
  349. package/gs/path/path.ts +20 -5
  350. package/gs/reflect/index.ts +2 -1
  351. package/gs/reflect/map.test.ts +19 -0
  352. package/gs/reflect/map.ts +4 -0
  353. package/gs/reflect/type.ts +298 -29
  354. package/gs/reflect/typefor.test.ts +75 -0
  355. package/gs/runtime/debug/index.test.ts +24 -0
  356. package/gs/runtime/debug/index.ts +8 -0
  357. package/gs/runtime/runtime.test.ts +19 -0
  358. package/gs/runtime/runtime.ts +98 -3
  359. package/gs/slices/slices.test.ts +94 -0
  360. package/gs/slices/slices.ts +245 -5
  361. package/gs/sort/meta.json +7 -0
  362. package/gs/sort/slice.gs.ts +16 -7
  363. package/gs/sort/sort.gs.ts +16 -13
  364. package/gs/strings/builder.ts +4 -3
  365. package/gs/sync/atomic/type.gs.ts +13 -14
  366. package/gs/sync/meta.json +3 -1
  367. package/gs/sync/sync.test.ts +36 -0
  368. package/gs/sync/sync.ts +39 -0
  369. package/gs/syscall/constants.ts +39 -24
  370. package/gs/syscall/errors.ts +10 -0
  371. package/gs/syscall/fs.ts +195 -0
  372. package/gs/syscall/js/index.ts +458 -0
  373. package/gs/syscall/js/meta.json +4 -0
  374. package/gs/syscall/net.test.ts +85 -0
  375. package/gs/syscall/types.ts +56 -0
  376. package/gs/testing/index.ts +1 -0
  377. package/gs/testing/meta.json +5 -0
  378. package/gs/testing/testing.test.ts +90 -0
  379. package/gs/testing/testing.ts +382 -0
  380. package/gs/time/time.test.ts +106 -0
  381. package/gs/time/time.ts +278 -57
  382. package/gs/unicode/unicode.test.ts +25 -0
  383. package/gs/unicode/unicode.ts +119 -9
  384. package/gs/unicode/utf8/utf8.test.ts +13 -0
  385. package/gs/unicode/utf8/utf8.ts +28 -16
  386. package/gs/unique/index.ts +91 -0
  387. package/package.json +14 -13
  388. package/compiler/analysis.go +0 -3475
  389. package/compiler/analysis_test.go +0 -338
  390. package/compiler/assignment.go +0 -580
  391. package/compiler/builtin_test.go +0 -92
  392. package/compiler/code-writer.go +0 -115
  393. package/compiler/compiler_test.go +0 -149
  394. package/compiler/composite-lit.go +0 -779
  395. package/compiler/config_test.go +0 -62
  396. package/compiler/constraint.go +0 -86
  397. package/compiler/decl.go +0 -801
  398. package/compiler/expr-call-async.go +0 -188
  399. package/compiler/expr-call-builtins.go +0 -208
  400. package/compiler/expr-call-helpers.go +0 -382
  401. package/compiler/expr-call-make.go +0 -318
  402. package/compiler/expr-call-type-conversion.go +0 -520
  403. package/compiler/expr-call.go +0 -413
  404. package/compiler/expr-selector.go +0 -343
  405. package/compiler/expr-star.go +0 -82
  406. package/compiler/expr-type.go +0 -442
  407. package/compiler/expr-value.go +0 -89
  408. package/compiler/expr.go +0 -773
  409. package/compiler/field.go +0 -183
  410. package/compiler/gs_dependencies_test.go +0 -298
  411. package/compiler/lit.go +0 -322
  412. package/compiler/output.go +0 -72
  413. package/compiler/primitive.go +0 -149
  414. package/compiler/protobuf.go +0 -697
  415. package/compiler/sanitize.go +0 -100
  416. package/compiler/spec-struct.go +0 -995
  417. package/compiler/spec-value.go +0 -540
  418. package/compiler/spec.go +0 -725
  419. package/compiler/stmt-assign.go +0 -664
  420. package/compiler/stmt-for.go +0 -266
  421. package/compiler/stmt-range.go +0 -475
  422. package/compiler/stmt-select.go +0 -262
  423. package/compiler/stmt-type-switch.go +0 -147
  424. package/compiler/stmt.go +0 -1308
  425. package/compiler/type-assert.go +0 -386
  426. package/compiler/type-info.go +0 -156
  427. package/compiler/type-utils.go +0 -207
  428. package/compiler/type.go +0 -892
@@ -0,0 +1,144 @@
1
+ package compiler
2
+
3
+ import (
4
+ "context"
5
+ "path/filepath"
6
+ "strings"
7
+ "testing"
8
+ )
9
+
10
+ func TestPackageGraphOwnerLoadTestGraphFacts(t *testing.T) {
11
+ moduleDir := writePackageGraphFixture(t, map[string]string{
12
+ "go.mod": "module example.test/testgraph\n\ngo 1.25.3\n",
13
+ "same/value.go": strings.Join([]string{
14
+ "package same",
15
+ "",
16
+ "func Add(a int, b int) int {",
17
+ "\treturn a + b",
18
+ "}",
19
+ "",
20
+ }, "\n"),
21
+ "same/value_test.go": strings.Join([]string{
22
+ "package same",
23
+ "",
24
+ "import \"testing\"",
25
+ "",
26
+ "func TestAdd(t *testing.T) {}",
27
+ "",
28
+ }, "\n"),
29
+ "external/value.go": strings.Join([]string{
30
+ "package external",
31
+ "",
32
+ "func Name() string {",
33
+ "\treturn \"external\"",
34
+ "}",
35
+ "",
36
+ }, "\n"),
37
+ "external/value_test.go": strings.Join([]string{
38
+ "package external_test",
39
+ "",
40
+ "import (",
41
+ "\t\"testing\"",
42
+ "",
43
+ "\texternal \"example.test/testgraph/external\"",
44
+ ")",
45
+ "",
46
+ "func TestName(t *testing.T) {",
47
+ "\t_ = external.Name()",
48
+ "}",
49
+ "",
50
+ }, "\n"),
51
+ "notests/value.go": "package notests\nconst Value = 1\n",
52
+ })
53
+
54
+ graph, diagnostics := loadPackageTestGraph(t, &CompileRequest{
55
+ Patterns: []string{"./..."},
56
+ Dir: moduleDir,
57
+ OutputPath: filepath.Join(t.TempDir(), "out"),
58
+ DependencyMode: DependencyModeRequested,
59
+ RuntimeEmissionMode: RuntimeEmissionModeEmit,
60
+ })
61
+ if diagnosticsHaveErrors(diagnostics) {
62
+ t.Fatalf("test graph load failed: %#v", diagnostics)
63
+ }
64
+
65
+ if len(graph.Packages) != 3 {
66
+ t.Fatalf("expected three requested packages, got %#v", graph.Packages)
67
+ }
68
+ same := graph.PackageByPath("example.test/testgraph/same")
69
+ if same == nil || same.SamePackageTests == nil || same.ExternalPackageTests != nil || !same.HasTests() {
70
+ t.Fatalf("unexpected same-package facts: %#v", same)
71
+ }
72
+ external := graph.PackageByPath("example.test/testgraph/external")
73
+ if external == nil || external.ExternalPackageTests == nil || external.SamePackageTests != nil || !external.HasTests() {
74
+ t.Fatalf("unexpected external-package facts: %#v", external)
75
+ }
76
+ notests := graph.PackageByPath("example.test/testgraph/notests")
77
+ if notests == nil || notests.HasTests() {
78
+ t.Fatalf("unexpected no-test package facts: %#v", notests)
79
+ }
80
+ }
81
+
82
+ func TestPackageGraphOwnerLoadTestGraphScopesDiagnostics(t *testing.T) {
83
+ moduleDir := writePackageGraphFixture(t, map[string]string{
84
+ "go.mod": "module example.test/testgraphdiag\n\ngo 1.25.3\n",
85
+ "clean/value.go": strings.Join([]string{
86
+ "package clean",
87
+ "",
88
+ "func Value() int {",
89
+ "\treturn 1",
90
+ "}",
91
+ "",
92
+ }, "\n"),
93
+ "clean/value_test.go": strings.Join([]string{
94
+ "package clean",
95
+ "",
96
+ "import \"testing\"",
97
+ "",
98
+ "func TestValue(t *testing.T) {}",
99
+ "",
100
+ }, "\n"),
101
+ "broken/value.go": "package broken\nconst Value = 1\n",
102
+ "broken/value_test.go": strings.Join([]string{
103
+ "package broken",
104
+ "",
105
+ "import \"testing\"",
106
+ "",
107
+ "func TestBroken(t *testing.T) {",
108
+ "\tMissing()",
109
+ "}",
110
+ "",
111
+ }, "\n"),
112
+ })
113
+
114
+ graph, diagnostics := loadPackageTestGraph(t, &CompileRequest{
115
+ Patterns: []string{"./..."},
116
+ Dir: moduleDir,
117
+ OutputPath: filepath.Join(t.TempDir(), "out"),
118
+ DependencyMode: DependencyModeRequested,
119
+ RuntimeEmissionMode: RuntimeEmissionModeEmit,
120
+ })
121
+ requireDiagnosticCode(t, diagnostics, "goscript/package-graph:load-error")
122
+
123
+ clean := graph.PackageByPath("example.test/testgraphdiag/clean")
124
+ if clean == nil || len(clean.Diagnostics) != 0 {
125
+ t.Fatalf("clean package should not inherit broken diagnostics: %#v", clean)
126
+ }
127
+ broken := graph.PackageByPath("example.test/testgraphdiag/broken")
128
+ if broken == nil || len(broken.Diagnostics) == 0 {
129
+ t.Fatalf("broken package should carry load diagnostics: %#v", broken)
130
+ }
131
+ if broken.SamePackageTests == nil || len(broken.SamePackageTests.Diagnostics) == 0 {
132
+ t.Fatalf("broken same-package test variant should carry diagnostics: %#v", broken)
133
+ }
134
+ }
135
+
136
+ func loadPackageTestGraph(t *testing.T, req *CompileRequest) (*PackageTestGraph, []Diagnostic) {
137
+ t.Helper()
138
+
139
+ diagnostics := NewCompileRequestOwner().Validate(req)
140
+ if diagnosticsHaveErrors(diagnostics) {
141
+ t.Fatalf("request validation failed: %#v", diagnostics)
142
+ }
143
+ return NewPackageGraphOwner().LoadTestGraph(context.Background(), req)
144
+ }
@@ -0,0 +1,13 @@
1
+ package compiler
2
+
3
+ // CompilationResult describes a compiler run after adapter normalization.
4
+ type CompilationResult struct {
5
+ // CompiledPackages contains package paths compiled to TypeScript.
6
+ CompiledPackages []string
7
+ // CopiedPackages contains package paths copied from override packages.
8
+ CopiedPackages []string
9
+ // OriginalPackages contains the package patterns or package paths requested.
10
+ OriginalPackages []string
11
+ // Diagnostics contains all diagnostics produced by the compile request.
12
+ Diagnostics []Diagnostic
13
+ }
@@ -0,0 +1,439 @@
1
+ package compiler
2
+
3
+ import (
4
+ "cmp"
5
+ "slices"
6
+ "strings"
7
+
8
+ gs "github.com/aperturerobotics/goscript"
9
+ "github.com/pkg/errors"
10
+ )
11
+
12
+ // RuntimeHelperCategory names a runtime helper family owned by the contract.
13
+ type RuntimeHelperCategory string
14
+
15
+ const (
16
+ RuntimeHelperCategoryBuiltin RuntimeHelperCategory = "builtin"
17
+ RuntimeHelperCategoryValue RuntimeHelperCategory = "value"
18
+ RuntimeHelperCategoryVarRef RuntimeHelperCategory = "varref"
19
+ RuntimeHelperCategorySlice RuntimeHelperCategory = "slice"
20
+ RuntimeHelperCategoryMap RuntimeHelperCategory = "map"
21
+ RuntimeHelperCategoryError RuntimeHelperCategory = "error"
22
+ RuntimeHelperCategoryType RuntimeHelperCategory = "type"
23
+ RuntimeHelperCategoryChannel RuntimeHelperCategory = "channel"
24
+ RuntimeHelperCategoryDefer RuntimeHelperCategory = "defer"
25
+ RuntimeHelperCategoryHost RuntimeHelperCategory = "host"
26
+ )
27
+
28
+ // RuntimeHelper identifies one compiler-visible helper exported by @goscript/builtin.
29
+ type RuntimeHelper string
30
+
31
+ const (
32
+ RuntimeHelperPrintln RuntimeHelper = "builtin.println"
33
+ RuntimeHelperPrint RuntimeHelper = "builtin.print"
34
+ RuntimeHelperInt RuntimeHelper = "builtin.int"
35
+ RuntimeHelperUint RuntimeHelper = "builtin.uint"
36
+ RuntimeHelperByte RuntimeHelper = "builtin.byte"
37
+ RuntimeHelperLen RuntimeHelper = "builtin.len"
38
+ RuntimeHelperCap RuntimeHelper = "builtin.cap"
39
+ RuntimeHelperClear RuntimeHelper = "builtin.clear"
40
+ RuntimeHelperPanic RuntimeHelper = "builtin.panic"
41
+ RuntimeHelperRecover RuntimeHelper = "builtin.recover"
42
+ RuntimeHelperMin RuntimeHelper = "builtin.min"
43
+ RuntimeHelperMax RuntimeHelper = "builtin.max"
44
+ RuntimeHelperComplex RuntimeHelper = "builtin.complex"
45
+ RuntimeHelperReal RuntimeHelper = "builtin.real"
46
+ RuntimeHelperImag RuntimeHelper = "builtin.imag"
47
+ RuntimeHelperUint64Shl RuntimeHelper = "builtin.uint64Shl"
48
+ RuntimeHelperUint64Shr RuntimeHelper = "builtin.uint64Shr"
49
+ RuntimeHelperUintShr RuntimeHelper = "builtin.uintShr"
50
+ RuntimeHelperUint64Mul RuntimeHelper = "builtin.uint64Mul"
51
+ RuntimeHelperUint64Add RuntimeHelper = "builtin.uint64Add"
52
+ RuntimeHelperUint64Sub RuntimeHelper = "builtin.uint64Sub"
53
+ RuntimeHelperUint64And RuntimeHelper = "builtin.uint64And"
54
+ RuntimeHelperUint64Or RuntimeHelper = "builtin.uint64Or"
55
+ RuntimeHelperUint64Xor RuntimeHelper = "builtin.uint64Xor"
56
+
57
+ RuntimeHelperAssignStruct RuntimeHelper = "value.assignStruct"
58
+ RuntimeHelperMarkAsStructValue RuntimeHelper = "value.markAsStructValue"
59
+ RuntimeHelperCloneStructValue RuntimeHelper = "value.cloneStructValue"
60
+ RuntimeHelperPointerValue RuntimeHelper = "value.pointerValue"
61
+ RuntimeHelperArrayEqual RuntimeHelper = "value.arrayEqual"
62
+
63
+ RuntimeHelperVarRef RuntimeHelper = "varref.varRef"
64
+ RuntimeHelperFieldRef RuntimeHelper = "varref.fieldRef"
65
+ RuntimeHelperUnref RuntimeHelper = "varref.unref"
66
+ RuntimeHelperIsVarRef RuntimeHelper = "varref.isVarRef"
67
+ RuntimeHelperUnsupportedPointerRef RuntimeHelper = "varref.unsupportedPointerRef"
68
+
69
+ RuntimeHelperMakeSlice RuntimeHelper = "slice.makeSlice"
70
+ RuntimeHelperGoSlice RuntimeHelper = "slice.goSlice"
71
+ RuntimeHelperArrayToSlice RuntimeHelper = "slice.arrayToSlice"
72
+ RuntimeHelperSliceToArray RuntimeHelper = "slice.sliceToArray"
73
+ RuntimeHelperSliceToArrayPointer RuntimeHelper = "slice.sliceToArrayPointer"
74
+ RuntimeHelperAppend RuntimeHelper = "slice.append"
75
+ RuntimeHelperCopy RuntimeHelper = "slice.copy"
76
+ RuntimeHelperAsArray RuntimeHelper = "slice.asArray"
77
+ RuntimeHelperStringToRunes RuntimeHelper = "slice.stringToRunes"
78
+ RuntimeHelperRangeString RuntimeHelper = "slice.rangeString"
79
+ RuntimeHelperStringToRune RuntimeHelper = "slice.stringToRune"
80
+ RuntimeHelperRunesToString RuntimeHelper = "slice.runesToString"
81
+ RuntimeHelperStringToBytes RuntimeHelper = "slice.stringToBytes"
82
+ RuntimeHelperBytesToString RuntimeHelper = "slice.bytesToString"
83
+ RuntimeHelperGenericBytesOrStringToString RuntimeHelper = "slice.genericBytesOrStringToString"
84
+ RuntimeHelperIndexStringOrBytes RuntimeHelper = "slice.indexStringOrBytes"
85
+ RuntimeHelperSliceStringOrBytes RuntimeHelper = "slice.sliceStringOrBytes"
86
+ RuntimeHelperIndexRef RuntimeHelper = "slice.indexRef"
87
+ RuntimeHelperIndexAddress RuntimeHelper = "slice.indexAddress"
88
+
89
+ RuntimeHelperMakeMap RuntimeHelper = "map.makeMap"
90
+ RuntimeHelperMapGet RuntimeHelper = "map.mapGet"
91
+ RuntimeHelperMapSet RuntimeHelper = "map.mapSet"
92
+ RuntimeHelperMapHas RuntimeHelper = "map.mapHas"
93
+ RuntimeHelperDeleteMapEntry RuntimeHelper = "map.deleteMapEntry"
94
+
95
+ RuntimeHelperNewError RuntimeHelper = "error.newError"
96
+ RuntimeHelperToGoError RuntimeHelper = "error.toGoError"
97
+ RuntimeHelperWrapPrimitiveError RuntimeHelper = "error.wrapPrimitiveError"
98
+
99
+ RuntimeHelperTypeKind RuntimeHelper = "type.TypeKind"
100
+ RuntimeHelperRegisterStructType RuntimeHelper = "type.registerStructType"
101
+ RuntimeHelperRegisterInterfaceType RuntimeHelper = "type.registerInterfaceType"
102
+ RuntimeHelperGetTypeByName RuntimeHelper = "type.getTypeByName"
103
+ RuntimeHelperTypeAssert RuntimeHelper = "type.typeAssert"
104
+ RuntimeHelperTypeAssertTuple RuntimeHelper = "type.typeAssertTuple"
105
+ RuntimeHelperMustTypeAssert RuntimeHelper = "type.mustTypeAssert"
106
+ RuntimeHelperIs RuntimeHelper = "type.is"
107
+ RuntimeHelperTypeSwitch RuntimeHelper = "type.typeSwitch"
108
+ RuntimeHelperTypedNil RuntimeHelper = "type.typedNil"
109
+ RuntimeHelperInterfaceValue RuntimeHelper = "type.interfaceValue"
110
+ RuntimeHelperNamedValueInterfaceValue RuntimeHelper = "type.namedValueInterfaceValue"
111
+ RuntimeHelperFunctionValue RuntimeHelper = "type.functionValue"
112
+ RuntimeHelperNamedFunction RuntimeHelper = "type.namedFunction"
113
+ RuntimeHelperGenericZero RuntimeHelper = "type.genericZero"
114
+ RuntimeHelperCallGenericMethod RuntimeHelper = "type.callGenericMethod"
115
+
116
+ RuntimeHelperMakeChannel RuntimeHelper = "channel.makeChannel"
117
+ RuntimeHelperMakeChannelRef RuntimeHelper = "channel.makeChannelRef"
118
+ RuntimeHelperChanSend RuntimeHelper = "channel.chanSend"
119
+ RuntimeHelperChanRecv RuntimeHelper = "channel.chanRecv"
120
+ RuntimeHelperChanRecvWithOk RuntimeHelper = "channel.chanRecvWithOk"
121
+ RuntimeHelperSelectStatement RuntimeHelper = "channel.selectStatement"
122
+
123
+ RuntimeHelperDisposableStack RuntimeHelper = "defer.DisposableStack"
124
+ RuntimeHelperAsyncDisposableStack RuntimeHelper = "defer.AsyncDisposableStack"
125
+
126
+ RuntimeHelperGetHostRuntime RuntimeHelper = "host.getHostRuntime"
127
+ RuntimeHelperWriteHostStdoutText RuntimeHelper = "host.writeHostStdoutText"
128
+ RuntimeHelperWriteHostStderrText RuntimeHelper = "host.writeHostStderrText"
129
+ RuntimeHelperIsMainScript RuntimeHelper = "host.isMainScript"
130
+ )
131
+
132
+ // RuntimeImport is a generated TypeScript import owned by the runtime contract.
133
+ type RuntimeImport struct {
134
+ Alias string
135
+ Source string
136
+ }
137
+
138
+ // RuntimeHelperContract describes one helper exported by the runtime package.
139
+ type RuntimeHelperContract struct {
140
+ Helper RuntimeHelper
141
+ Export string
142
+ Category RuntimeHelperCategory
143
+ }
144
+
145
+ // RuntimeContractOwner owns generated-code helper names and runtime capabilities.
146
+ type RuntimeContractOwner struct {
147
+ helpers map[RuntimeHelper]RuntimeHelperContract
148
+ }
149
+
150
+ // NewRuntimeContractOwner creates the runtime contract owner.
151
+ func NewRuntimeContractOwner() *RuntimeContractOwner {
152
+ owner := &RuntimeContractOwner{
153
+ helpers: make(map[RuntimeHelper]RuntimeHelperContract),
154
+ }
155
+ for _, helper := range runtimeHelperContracts() {
156
+ owner.helpers[helper.Helper] = helper
157
+ }
158
+ return owner
159
+ }
160
+
161
+ // BuiltinImport returns the runtime import used by generated package modules.
162
+ func (o *RuntimeContractOwner) BuiltinImport() RuntimeImport {
163
+ return RuntimeImport{
164
+ Alias: "$",
165
+ Source: "@goscript/builtin/index.js",
166
+ }
167
+ }
168
+
169
+ // Helpers returns every compiler-visible runtime helper contract.
170
+ func (o *RuntimeContractOwner) Helpers() []RuntimeHelperContract {
171
+ helpers := make([]RuntimeHelperContract, 0, len(o.helpers))
172
+ for _, helper := range o.helpers {
173
+ helpers = append(helpers, helper)
174
+ }
175
+ slices.SortFunc(helpers, compareRuntimeHelperContract)
176
+ return helpers
177
+ }
178
+
179
+ // HelpersByCategory returns helper contracts in a category.
180
+ func (o *RuntimeContractOwner) HelpersByCategory(category RuntimeHelperCategory) []RuntimeHelperContract {
181
+ var helpers []RuntimeHelperContract
182
+ for _, helper := range o.helpers {
183
+ if helper.Category == category {
184
+ helpers = append(helpers, helper)
185
+ }
186
+ }
187
+ slices.SortFunc(helpers, compareRuntimeHelperContract)
188
+ return helpers
189
+ }
190
+
191
+ // Helper returns one runtime helper contract.
192
+ func (o *RuntimeContractOwner) Helper(helper RuntimeHelper) (RuntimeHelperContract, bool) {
193
+ contract, ok := o.helpers[helper]
194
+ return contract, ok
195
+ }
196
+
197
+ // HelperName returns the exported runtime symbol for a helper.
198
+ func (o *RuntimeContractOwner) HelperName(helper RuntimeHelper) (string, bool) {
199
+ contract, ok := o.Helper(helper)
200
+ if !ok {
201
+ return "", false
202
+ }
203
+ return contract.Export, true
204
+ }
205
+
206
+ // QualifiedHelper returns a generated-code reference to a runtime helper.
207
+ func (o *RuntimeContractOwner) QualifiedHelper(helper RuntimeHelper) string {
208
+ name, ok := o.HelperName(helper)
209
+ if !ok {
210
+ panic("missing runtime helper contract: " + string(helper))
211
+ }
212
+ return o.BuiltinImport().Alias + "." + name
213
+ }
214
+
215
+ // MissingRuntimeExports returns helper exports absent from the real runtime source.
216
+ func (o *RuntimeContractOwner) MissingRuntimeExports() ([]string, error) {
217
+ exports, err := scanBuiltinRuntimeExports()
218
+ if err != nil {
219
+ return nil, err
220
+ }
221
+ var missing []string
222
+ for _, helper := range o.Helpers() {
223
+ if !exports[helper.Export] {
224
+ missing = append(missing, helper.Export)
225
+ }
226
+ }
227
+ slices.Sort(missing)
228
+ return missing, nil
229
+ }
230
+
231
+ func compareRuntimeHelperContract(a RuntimeHelperContract, b RuntimeHelperContract) int {
232
+ if c := cmp.Compare(a.Category, b.Category); c != 0 {
233
+ return c
234
+ }
235
+ if c := cmp.Compare(a.Export, b.Export); c != 0 {
236
+ return c
237
+ }
238
+ return cmp.Compare(a.Helper, b.Helper)
239
+ }
240
+
241
+ func runtimeHelperContracts() []RuntimeHelperContract {
242
+ return []RuntimeHelperContract{
243
+ runtimeHelper(RuntimeHelperPrintln, "println", RuntimeHelperCategoryBuiltin),
244
+ runtimeHelper(RuntimeHelperPrint, "print", RuntimeHelperCategoryBuiltin),
245
+ runtimeHelper(RuntimeHelperInt, "int", RuntimeHelperCategoryBuiltin),
246
+ runtimeHelper(RuntimeHelperUint, "uint", RuntimeHelperCategoryBuiltin),
247
+ runtimeHelper(RuntimeHelperByte, "byte", RuntimeHelperCategoryBuiltin),
248
+ runtimeHelper(RuntimeHelperLen, "len", RuntimeHelperCategoryBuiltin),
249
+ runtimeHelper(RuntimeHelperCap, "cap", RuntimeHelperCategoryBuiltin),
250
+ runtimeHelper(RuntimeHelperClear, "clear", RuntimeHelperCategoryBuiltin),
251
+ runtimeHelper(RuntimeHelperPanic, "panic", RuntimeHelperCategoryBuiltin),
252
+ runtimeHelper(RuntimeHelperRecover, "recover", RuntimeHelperCategoryBuiltin),
253
+ runtimeHelper(RuntimeHelperMin, "min", RuntimeHelperCategoryBuiltin),
254
+ runtimeHelper(RuntimeHelperMax, "max", RuntimeHelperCategoryBuiltin),
255
+ runtimeHelper(RuntimeHelperComplex, "complex", RuntimeHelperCategoryBuiltin),
256
+ runtimeHelper(RuntimeHelperReal, "real", RuntimeHelperCategoryBuiltin),
257
+ runtimeHelper(RuntimeHelperImag, "imag", RuntimeHelperCategoryBuiltin),
258
+ runtimeHelper(RuntimeHelperUint64Shl, "uint64Shl", RuntimeHelperCategoryBuiltin),
259
+ runtimeHelper(RuntimeHelperUint64Shr, "uint64Shr", RuntimeHelperCategoryBuiltin),
260
+ runtimeHelper(RuntimeHelperUintShr, "uintShr", RuntimeHelperCategoryBuiltin),
261
+ runtimeHelper(RuntimeHelperUint64Mul, "uint64Mul", RuntimeHelperCategoryBuiltin),
262
+ runtimeHelper(RuntimeHelperUint64Add, "uint64Add", RuntimeHelperCategoryBuiltin),
263
+ runtimeHelper(RuntimeHelperUint64Sub, "uint64Sub", RuntimeHelperCategoryBuiltin),
264
+ runtimeHelper(RuntimeHelperUint64And, "uint64And", RuntimeHelperCategoryBuiltin),
265
+ runtimeHelper(RuntimeHelperUint64Or, "uint64Or", RuntimeHelperCategoryBuiltin),
266
+ runtimeHelper(RuntimeHelperUint64Xor, "uint64Xor", RuntimeHelperCategoryBuiltin),
267
+ runtimeHelper(RuntimeHelperAssignStruct, "assignStruct", RuntimeHelperCategoryValue),
268
+ runtimeHelper(RuntimeHelperMarkAsStructValue, "markAsStructValue", RuntimeHelperCategoryValue),
269
+ runtimeHelper(RuntimeHelperCloneStructValue, "cloneStructValue", RuntimeHelperCategoryValue),
270
+ runtimeHelper(RuntimeHelperPointerValue, "pointerValue", RuntimeHelperCategoryValue),
271
+ runtimeHelper(RuntimeHelperArrayEqual, "arrayEqual", RuntimeHelperCategoryValue),
272
+ runtimeHelper(RuntimeHelperVarRef, "varRef", RuntimeHelperCategoryVarRef),
273
+ runtimeHelper(RuntimeHelperFieldRef, "fieldRef", RuntimeHelperCategoryVarRef),
274
+ runtimeHelper(RuntimeHelperUnref, "unref", RuntimeHelperCategoryVarRef),
275
+ runtimeHelper(RuntimeHelperIsVarRef, "isVarRef", RuntimeHelperCategoryVarRef),
276
+ runtimeHelper(RuntimeHelperUnsupportedPointerRef, "unsupportedPointerRef", RuntimeHelperCategoryVarRef),
277
+ runtimeHelper(RuntimeHelperMakeSlice, "makeSlice", RuntimeHelperCategorySlice),
278
+ runtimeHelper(RuntimeHelperGoSlice, "goSlice", RuntimeHelperCategorySlice),
279
+ runtimeHelper(RuntimeHelperArrayToSlice, "arrayToSlice", RuntimeHelperCategorySlice),
280
+ runtimeHelper(RuntimeHelperSliceToArray, "sliceToArray", RuntimeHelperCategorySlice),
281
+ runtimeHelper(RuntimeHelperSliceToArrayPointer, "sliceToArrayPointer", RuntimeHelperCategorySlice),
282
+ runtimeHelper(RuntimeHelperAppend, "append", RuntimeHelperCategorySlice),
283
+ runtimeHelper(RuntimeHelperCopy, "copy", RuntimeHelperCategorySlice),
284
+ runtimeHelper(RuntimeHelperAsArray, "asArray", RuntimeHelperCategorySlice),
285
+ runtimeHelper(RuntimeHelperStringToRunes, "stringToRunes", RuntimeHelperCategorySlice),
286
+ runtimeHelper(RuntimeHelperRangeString, "rangeString", RuntimeHelperCategorySlice),
287
+ runtimeHelper(RuntimeHelperStringToRune, "stringToRune", RuntimeHelperCategorySlice),
288
+ runtimeHelper(RuntimeHelperRunesToString, "runesToString", RuntimeHelperCategorySlice),
289
+ runtimeHelper(RuntimeHelperStringToBytes, "stringToBytes", RuntimeHelperCategorySlice),
290
+ runtimeHelper(RuntimeHelperBytesToString, "bytesToString", RuntimeHelperCategorySlice),
291
+ runtimeHelper(RuntimeHelperGenericBytesOrStringToString, "genericBytesOrStringToString", RuntimeHelperCategorySlice),
292
+ runtimeHelper(RuntimeHelperIndexStringOrBytes, "indexStringOrBytes", RuntimeHelperCategorySlice),
293
+ runtimeHelper(RuntimeHelperSliceStringOrBytes, "sliceStringOrBytes", RuntimeHelperCategorySlice),
294
+ runtimeHelper(RuntimeHelperIndexRef, "indexRef", RuntimeHelperCategorySlice),
295
+ runtimeHelper(RuntimeHelperIndexAddress, "indexAddress", RuntimeHelperCategorySlice),
296
+ runtimeHelper(RuntimeHelperMakeMap, "makeMap", RuntimeHelperCategoryMap),
297
+ runtimeHelper(RuntimeHelperMapGet, "mapGet", RuntimeHelperCategoryMap),
298
+ runtimeHelper(RuntimeHelperMapSet, "mapSet", RuntimeHelperCategoryMap),
299
+ runtimeHelper(RuntimeHelperMapHas, "mapHas", RuntimeHelperCategoryMap),
300
+ runtimeHelper(RuntimeHelperDeleteMapEntry, "deleteMapEntry", RuntimeHelperCategoryMap),
301
+ runtimeHelper(RuntimeHelperNewError, "newError", RuntimeHelperCategoryError),
302
+ runtimeHelper(RuntimeHelperToGoError, "toGoError", RuntimeHelperCategoryError),
303
+ runtimeHelper(RuntimeHelperWrapPrimitiveError, "wrapPrimitiveError", RuntimeHelperCategoryError),
304
+ runtimeHelper(RuntimeHelperTypeKind, "TypeKind", RuntimeHelperCategoryType),
305
+ runtimeHelper(RuntimeHelperRegisterStructType, "registerStructType", RuntimeHelperCategoryType),
306
+ runtimeHelper(RuntimeHelperRegisterInterfaceType, "registerInterfaceType", RuntimeHelperCategoryType),
307
+ runtimeHelper(RuntimeHelperGetTypeByName, "getTypeByName", RuntimeHelperCategoryType),
308
+ runtimeHelper(RuntimeHelperTypeAssert, "typeAssert", RuntimeHelperCategoryType),
309
+ runtimeHelper(RuntimeHelperTypeAssertTuple, "typeAssertTuple", RuntimeHelperCategoryType),
310
+ runtimeHelper(RuntimeHelperMustTypeAssert, "mustTypeAssert", RuntimeHelperCategoryType),
311
+ runtimeHelper(RuntimeHelperIs, "is", RuntimeHelperCategoryType),
312
+ runtimeHelper(RuntimeHelperTypeSwitch, "typeSwitch", RuntimeHelperCategoryType),
313
+ runtimeHelper(RuntimeHelperTypedNil, "typedNil", RuntimeHelperCategoryType),
314
+ runtimeHelper(RuntimeHelperInterfaceValue, "interfaceValue", RuntimeHelperCategoryType),
315
+ runtimeHelper(RuntimeHelperNamedValueInterfaceValue, "namedValueInterfaceValue", RuntimeHelperCategoryType),
316
+ runtimeHelper(RuntimeHelperFunctionValue, "functionValue", RuntimeHelperCategoryType),
317
+ runtimeHelper(RuntimeHelperNamedFunction, "namedFunction", RuntimeHelperCategoryType),
318
+ runtimeHelper(RuntimeHelperGenericZero, "genericZero", RuntimeHelperCategoryType),
319
+ runtimeHelper(RuntimeHelperCallGenericMethod, "callGenericMethod", RuntimeHelperCategoryType),
320
+ runtimeHelper(RuntimeHelperMakeChannel, "makeChannel", RuntimeHelperCategoryChannel),
321
+ runtimeHelper(RuntimeHelperMakeChannelRef, "makeChannelRef", RuntimeHelperCategoryChannel),
322
+ runtimeHelper(RuntimeHelperChanSend, "chanSend", RuntimeHelperCategoryChannel),
323
+ runtimeHelper(RuntimeHelperChanRecv, "chanRecv", RuntimeHelperCategoryChannel),
324
+ runtimeHelper(RuntimeHelperChanRecvWithOk, "chanRecvWithOk", RuntimeHelperCategoryChannel),
325
+ runtimeHelper(RuntimeHelperSelectStatement, "selectStatement", RuntimeHelperCategoryChannel),
326
+ runtimeHelper(RuntimeHelperDisposableStack, "DisposableStack", RuntimeHelperCategoryDefer),
327
+ runtimeHelper(RuntimeHelperAsyncDisposableStack, "AsyncDisposableStack", RuntimeHelperCategoryDefer),
328
+ runtimeHelper(RuntimeHelperGetHostRuntime, "getHostRuntime", RuntimeHelperCategoryHost),
329
+ runtimeHelper(RuntimeHelperWriteHostStdoutText, "writeHostStdoutText", RuntimeHelperCategoryHost),
330
+ runtimeHelper(RuntimeHelperWriteHostStderrText, "writeHostStderrText", RuntimeHelperCategoryHost),
331
+ runtimeHelper(RuntimeHelperIsMainScript, "isMainScript", RuntimeHelperCategoryHost),
332
+ }
333
+ }
334
+
335
+ func runtimeHelper(
336
+ helper RuntimeHelper,
337
+ export string,
338
+ category RuntimeHelperCategory,
339
+ ) RuntimeHelperContract {
340
+ return RuntimeHelperContract{
341
+ Helper: helper,
342
+ Export: export,
343
+ Category: category,
344
+ }
345
+ }
346
+
347
+ func scanBuiltinRuntimeExports() (map[string]bool, error) {
348
+ index, err := gs.GsOverrides.ReadFile("gs/builtin/index.ts")
349
+ if err != nil {
350
+ return nil, err
351
+ }
352
+ exports := make(map[string]bool)
353
+ for _, module := range builtinReexportModules(string(index)) {
354
+ data, err := gs.GsOverrides.ReadFile("gs/builtin/" + module + ".ts")
355
+ if err != nil {
356
+ return nil, errors.Wrapf(err, "read builtin export module %s", module)
357
+ }
358
+ for _, name := range sourceExportNames(string(data)) {
359
+ exports[name] = true
360
+ }
361
+ }
362
+ return exports, nil
363
+ }
364
+
365
+ func builtinReexportModules(index string) []string {
366
+ var modules []string
367
+ for line := range strings.SplitSeq(index, "\n") {
368
+ line = strings.TrimSpace(line)
369
+ if !strings.HasPrefix(line, "export * from ") {
370
+ continue
371
+ }
372
+ module := quotedModulePath(line)
373
+ module = strings.TrimPrefix(module, "./")
374
+ module = strings.TrimSuffix(module, ".js")
375
+ if module != "" {
376
+ modules = append(modules, module)
377
+ }
378
+ }
379
+ slices.Sort(modules)
380
+ return modules
381
+ }
382
+
383
+ func quotedModulePath(line string) string {
384
+ for _, quote := range []string{"'", "\""} {
385
+ _, remaining, ok := strings.Cut(line, quote)
386
+ if !ok {
387
+ continue
388
+ }
389
+ module, _, ok := strings.Cut(remaining, quote)
390
+ if ok {
391
+ return module
392
+ }
393
+ }
394
+ return ""
395
+ }
396
+
397
+ func sourceExportNames(data string) []string {
398
+ names := make(map[string]bool)
399
+ for line := range strings.SplitSeq(data, "\n") {
400
+ line = strings.TrimSpace(line)
401
+ for _, prefix := range []string{
402
+ "export async function ",
403
+ "export function ",
404
+ "export const ",
405
+ "export class ",
406
+ "export enum ",
407
+ "export type ",
408
+ "export interface ",
409
+ } {
410
+ if !strings.HasPrefix(line, prefix) {
411
+ continue
412
+ }
413
+ name := exportNameAfterPrefix(line, prefix)
414
+ if name != "" {
415
+ names[name] = true
416
+ }
417
+ }
418
+ }
419
+ result := make([]string, 0, len(names))
420
+ for name := range names {
421
+ result = append(result, name)
422
+ }
423
+ slices.Sort(result)
424
+ return result
425
+ }
426
+
427
+ func exportNameAfterPrefix(line, prefix string) string {
428
+ remaining := strings.TrimSpace(strings.TrimPrefix(line, prefix))
429
+ for idx, char := range remaining {
430
+ if char == '_' || char == '$' ||
431
+ (char >= 'a' && char <= 'z') ||
432
+ (char >= 'A' && char <= 'Z') ||
433
+ (idx > 0 && char >= '0' && char <= '9') {
434
+ continue
435
+ }
436
+ return remaining[:idx]
437
+ }
438
+ return remaining
439
+ }