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
@@ -1,475 +0,0 @@
1
- package compiler
2
-
3
- import (
4
- "fmt"
5
- "go/ast"
6
- "go/token"
7
- "go/types"
8
- "strings"
9
-
10
- "github.com/pkg/errors"
11
- )
12
-
13
- // WriteStmtRange translates a Go `for...range` statement (`ast.RangeStmt`)
14
- // into an equivalent TypeScript loop. The translation depends on the type of
15
- // the expression being ranged over (`exp.X`), determined using `go/types` info.
16
- //
17
- // - **Maps (`*types.Map`):**
18
- // `for k, v := range myMap` becomes `for (const [k_ts, v_ts] of myMap_ts.entries()) { const k = k_ts; const v = v_ts; ...body... }`.
19
- // If only `k` or `v` (or neither) is used, the corresponding TypeScript const declaration is adjusted.
20
- //
21
- // - **Strings (`*types.Basic` with `IsString` info):**
22
- // `for i, r := range myString` becomes:
23
- // `const _runes = $.stringToRunes(myString_ts);`
24
- // `for (let i_ts = 0; i_ts < _runes.length; i_ts++) { const r_ts = _runes[i_ts]; ...body... }`.
25
- // The index variable `i_ts` uses the Go key variable name if provided (and not `_`).
26
- // The rune variable `r_ts` uses the Go value variable name.
27
- //
28
- // - **Integers (`*types.Basic` with `IsInteger` info, Go 1.22+):**
29
- // `for i := range N` becomes `for (let i_ts = 0; i_ts < N_ts; i_ts++) { ...body... }`.
30
- // `for i, v := range N` becomes `for (let i_ts = 0; i_ts < N_ts; i_ts++) { const v_ts = i_ts; ...body... }`.
31
- //
32
- // - **Arrays (`*types.Array`) and Slices (`*types.Slice`):**
33
- // - If both key (index) and value are used (`for i, val := range arr`):
34
- // `for (let i_ts = 0; i_ts < arr_ts.length; i_ts++) { const val_ts = arr_ts[i_ts]; ...body... }`.
35
- // - If only the key (index) is used (`for i := range arr`):
36
- // `for (let i_ts = 0; i_ts < arr_ts.length; i_ts++) { ...body... }`.
37
- // - If only the value is used (`for _, val := range arr`):
38
- // `for (const v_ts of arr_ts) { const val_ts = v_ts; ...body... }`.
39
- // - If neither is used (e.g., `for range arr`), a simple index loop `for (let _i = 0; ...)` is generated.
40
- // The index variable `i_ts` uses the Go key variable name if provided.
41
- //
42
- // Loop variables (`exp.Key`, `exp.Value`) are declared as `const` inside the loop
43
- // body if they are not blank identifiers (`_`). The loop body (`exp.Body`) is
44
- // translated using `WriteStmtBlock` (or `WriteStmt` for array/slice with key and value).
45
- // If the ranged type is not supported, a comment is written, and an error is returned.
46
- func (c *GoToTSCompiler) WriteStmtRange(exp *ast.RangeStmt) error {
47
- // Get the type of the iterable expression
48
- iterType := c.pkg.TypesInfo.TypeOf(exp.X)
49
- underlying := iterType.Underlying()
50
-
51
- // Handle map types (both concrete maps and type parameters constrained to maps)
52
- if c.isMapType(iterType, underlying) {
53
- return c.writeMapRange(exp)
54
- }
55
-
56
- // Handle basic types (string, integer)
57
- if basic, ok := underlying.(*types.Basic); ok {
58
- if c.isStringType(iterType) {
59
- return c.writeStringRange(exp)
60
- } else if basic.Info()&types.IsInteger != 0 {
61
- return c.writeIntegerRange(exp)
62
- }
63
- }
64
-
65
- // Handle array and slice types
66
- if c.isArrayOrSlice(underlying) {
67
- return c.writeArraySliceRange(exp, false)
68
- }
69
-
70
- // Handle pointer to array/slice types
71
- if ptrType, ok := underlying.(*types.Pointer); ok {
72
- elem := ptrType.Elem().Underlying()
73
- if c.isArrayOrSlice(elem) {
74
- return c.writeArraySliceRange(exp, true)
75
- }
76
- }
77
-
78
- // Handle iterator function signatures
79
- if sig, ok := underlying.(*types.Signature); ok {
80
- if c.isIteratorSignature(sig) {
81
- return c.writeIteratorRange(exp, sig)
82
- }
83
- }
84
-
85
- // Handle interface types that may represent iterators
86
- if _, ok := underlying.(*types.Interface); ok {
87
- return c.writeInterfaceIteratorRange(exp)
88
- }
89
-
90
- if _, ok := underlying.(*types.Chan); ok {
91
- return c.writeChannelRange(exp)
92
- }
93
-
94
- return errors.Errorf("unsupported range loop type: %T for expression %v", underlying, exp)
95
- }
96
-
97
- // Helper functions
98
-
99
- func (c *GoToTSCompiler) isIteratorSignature(sig *types.Signature) bool {
100
- params := sig.Params()
101
- if params.Len() != 1 {
102
- return false
103
- }
104
- yieldParam := params.At(0).Type()
105
- if yieldSig, ok := yieldParam.Underlying().(*types.Signature); ok {
106
- yieldResults := yieldSig.Results()
107
- if yieldResults.Len() == 1 {
108
- if basic, ok := yieldResults.At(0).Type().Underlying().(*types.Basic); ok && basic.Kind() == types.Bool {
109
- return true
110
- }
111
- }
112
- }
113
- return false
114
- }
115
-
116
- func (c *GoToTSCompiler) getIndexVarName(exp *ast.RangeStmt, defaultName string) string {
117
- if exp.Key != nil {
118
- if keyIdent, ok := exp.Key.(*ast.Ident); ok && keyIdent.Name != "_" {
119
- return keyIdent.Name
120
- }
121
- }
122
- return defaultName
123
- }
124
-
125
- func (c *GoToTSCompiler) writeMapRange(exp *ast.RangeStmt) error {
126
- keyVarName := "_k"
127
- valueVarName := "_v"
128
-
129
- if exp.Key != nil {
130
- if ident, ok := exp.Key.(*ast.Ident); ok && ident.Name != "_" {
131
- keyVarName = ident.Name
132
- }
133
- }
134
- if exp.Value != nil {
135
- if ident, ok := exp.Value.(*ast.Ident); ok && ident.Name != "_" {
136
- valueVarName = ident.Name
137
- }
138
- }
139
-
140
- c.tsw.WriteLiterallyf("for (const [%s, %s] of ", keyVarName, valueVarName)
141
- if err := c.WriteValueExpr(exp.X); err != nil {
142
- return fmt.Errorf("failed to write range loop map expression: %w", err)
143
- }
144
- c.tsw.WriteLiterally("?.entries() ?? []) {")
145
- c.tsw.Indent(1)
146
- c.tsw.WriteLine("")
147
-
148
- if err := c.WriteStmtBlock(exp.Body, false); err != nil {
149
- return fmt.Errorf("failed to write range loop map body: %w", err)
150
- }
151
- c.tsw.Indent(-1)
152
- c.tsw.WriteLine("}")
153
- return nil
154
- }
155
-
156
- func (c *GoToTSCompiler) writeStringRange(exp *ast.RangeStmt) error {
157
- c.tsw.WriteLine("{")
158
- c.tsw.Indent(1)
159
-
160
- c.tsw.WriteLiterally("const _runes = $.stringToRunes(")
161
- if err := c.WriteValueExpr(exp.X); err != nil {
162
- return fmt.Errorf("failed to write range loop string conversion expression: %w", err)
163
- }
164
- c.tsw.WriteLiterally(")")
165
- c.tsw.WriteLine("")
166
-
167
- indexVarName := c.getIndexVarName(exp, "i")
168
- c.tsw.WriteLiterallyf("for (let %s = 0; %s < _runes.length; %s++) {", indexVarName, indexVarName, indexVarName)
169
- c.tsw.Indent(1)
170
- c.tsw.WriteLine("")
171
-
172
- if exp.Value != nil {
173
- if ident, ok := exp.Value.(*ast.Ident); ok && ident.Name != "_" {
174
- c.tsw.WriteLiterally("let ")
175
- c.WriteIdent(ident, false)
176
- c.tsw.WriteLiterally(" = _runes[")
177
- c.tsw.WriteLiterally(indexVarName)
178
- c.tsw.WriteLiterally("]")
179
- c.tsw.WriteLine("")
180
- }
181
- }
182
-
183
- if err := c.WriteStmtBlock(exp.Body, false); err != nil {
184
- return fmt.Errorf("failed to write range loop string body: %w", err)
185
- }
186
- c.tsw.Indent(-1)
187
- c.tsw.WriteLine("}")
188
- c.tsw.Indent(-1)
189
- c.tsw.WriteLine("}")
190
- return nil
191
- }
192
-
193
- func (c *GoToTSCompiler) writeIntegerRange(exp *ast.RangeStmt) error {
194
- if exp.Value != nil {
195
- return errors.Errorf("ranging over an integer supports key variable only (not value variable): %v", exp)
196
- }
197
-
198
- indexVarName := c.getIndexVarName(exp, "_i")
199
- c.tsw.WriteLiterallyf("for (let %s = 0; %s < ", indexVarName, indexVarName)
200
- if err := c.WriteValueExpr(exp.X); err != nil {
201
- return fmt.Errorf("failed to write range loop integer expression: %w", err)
202
- }
203
- c.tsw.WriteLiterallyf("; %s++) {", indexVarName)
204
-
205
- if err := c.WriteStmtBlock(exp.Body, false); err != nil {
206
- return fmt.Errorf("failed to write range loop integer body: %w", err)
207
- }
208
-
209
- c.tsw.Indent(-1)
210
- c.tsw.WriteLine("}")
211
- return nil
212
- }
213
-
214
- func (c *GoToTSCompiler) writeArraySliceRange(exp *ast.RangeStmt, isPointer bool) error {
215
- indexVarName := c.getIndexVarName(exp, "_i")
216
-
217
- // Handle the different cases
218
- if exp.Key != nil && exp.Value != nil {
219
- return c.writeArraySliceWithKeyValue(exp, indexVarName, isPointer)
220
- } else if exp.Key != nil && exp.Value == nil {
221
- return c.writeArraySliceKeyOnly(exp, indexVarName, isPointer)
222
- } else if exp.Key == nil && exp.Value != nil {
223
- return errors.Errorf("unexpected value without key in for range expression: %v", exp)
224
- } else {
225
- return c.writeArraySliceFallback(exp, isPointer)
226
- }
227
- }
228
-
229
- func (c *GoToTSCompiler) writeArraySliceWithKeyValue(exp *ast.RangeStmt, indexVarName string, isPointer bool) error {
230
- c.tsw.WriteLiterallyf("for (let %s = 0; %s < $.len(", indexVarName, indexVarName)
231
- if err := c.writeArraySliceExpression(exp.X, isPointer); err != nil {
232
- return fmt.Errorf("failed to write range loop array/slice expression (key and value): %w", err)
233
- }
234
- c.tsw.WriteLiterallyf("); %s++) {", indexVarName)
235
- c.tsw.Indent(1)
236
- c.tsw.WriteLine("")
237
-
238
- if ident, ok := exp.Value.(*ast.Ident); ok && ident.Name != "_" {
239
- c.tsw.WriteLiterally("let ")
240
- c.WriteIdent(ident, false)
241
- c.tsw.WriteLiterally(" = ")
242
- if err := c.writeArraySliceExpression(exp.X, isPointer); err != nil {
243
- return fmt.Errorf("failed to write range loop array/slice value expression: %w", err)
244
- }
245
- c.tsw.WriteLiterallyf("![%s]", indexVarName)
246
- c.tsw.WriteLine("")
247
- }
248
-
249
- if err := c.WriteStmt(exp.Body); err != nil {
250
- return fmt.Errorf("failed to write range loop array/slice body (key and value): %w", err)
251
- }
252
- c.tsw.Indent(-1)
253
- c.tsw.WriteLine("}")
254
- return nil
255
- }
256
-
257
- func (c *GoToTSCompiler) writeArraySliceKeyOnly(exp *ast.RangeStmt, indexVarName string, isPointer bool) error {
258
- c.tsw.WriteLiterallyf("for (let %s = 0; %s < $.len(", indexVarName, indexVarName)
259
- if err := c.writeArraySliceExpression(exp.X, isPointer); err != nil {
260
- return fmt.Errorf("failed to write expression for the iterable: %w", err)
261
- }
262
- c.tsw.WriteLiterallyf("); %s++) {", indexVarName)
263
- c.tsw.Indent(1)
264
- c.tsw.WriteLine("")
265
-
266
- if err := c.WriteStmtBlock(exp.Body, false); err != nil {
267
- return fmt.Errorf("failed to write range loop array/slice body (only key): %w", err)
268
- }
269
- c.tsw.Indent(-1)
270
- c.tsw.WriteLine("}")
271
- return nil
272
- }
273
-
274
- func (c *GoToTSCompiler) writeArraySliceFallback(exp *ast.RangeStmt, isPointer bool) error {
275
- indexVarName := "_i"
276
- c.tsw.WriteLiterallyf("for (let %s = 0; %s < $.len(", indexVarName, indexVarName)
277
- if err := c.writeArraySliceExpression(exp.X, isPointer); err != nil {
278
- return fmt.Errorf("failed to write range loop array/slice length expression (fallback): %w", err)
279
- }
280
- c.tsw.WriteLiterallyf("); %s++) {", indexVarName)
281
- c.tsw.Indent(1)
282
- c.tsw.WriteLine("")
283
-
284
- if err := c.WriteStmtBlock(exp.Body, false); err != nil {
285
- return fmt.Errorf("failed to write range loop array/slice body (fallback): %w", err)
286
- }
287
- c.tsw.Indent(-1)
288
- c.tsw.WriteLine("}")
289
- return nil
290
- }
291
-
292
- func (c *GoToTSCompiler) writeArraySliceExpression(expr ast.Expr, isPointer bool) error {
293
- if isPointer {
294
- if ident, ok := expr.(*ast.Ident); ok {
295
- c.WriteIdent(ident, false)
296
- } else {
297
- if err := c.WriteValueExpr(expr); err != nil {
298
- return err
299
- }
300
- }
301
- c.tsw.WriteLiterally("!.value")
302
- return nil
303
- } else {
304
- return c.WriteValueExpr(expr)
305
- }
306
- }
307
-
308
- func (c *GoToTSCompiler) writeIteratorRange(exp *ast.RangeStmt, sig *types.Signature) error {
309
- params := sig.Params()
310
- yieldParam := params.At(0).Type()
311
- yieldSig := yieldParam.Underlying().(*types.Signature)
312
- yieldParams := yieldSig.Params()
313
-
314
- c.tsw.WriteLiterally(";(() => {")
315
- c.tsw.Indent(1)
316
- c.tsw.WriteLine("")
317
- c.tsw.WriteLiterally("let shouldContinue = true")
318
- c.tsw.WriteLine("")
319
-
320
- if err := c.WriteValueExpr(exp.X); err != nil {
321
- return fmt.Errorf("failed to write iterator expression: %w", err)
322
- }
323
-
324
- switch yieldParams.Len() {
325
- case 0:
326
- c.tsw.WriteLiterally("!(() => {")
327
- case 1:
328
- c.tsw.WriteLiterally("!((")
329
- c.writeIteratorParam(exp.Value, "v")
330
- c.tsw.WriteLiterally(") => {")
331
- case 2:
332
- c.tsw.WriteLiterally("!((")
333
- c.writeIteratorParam(exp.Key, "k")
334
- c.tsw.WriteLiterally(", ")
335
- c.writeIteratorParam(exp.Value, "v")
336
- c.tsw.WriteLiterally(") => {")
337
- }
338
-
339
- c.tsw.Indent(1)
340
- c.tsw.WriteLine("")
341
- if err := c.WriteStmtBlock(exp.Body, false); err != nil {
342
- return fmt.Errorf("failed to write iterator body: %w", err)
343
- }
344
- c.tsw.WriteLiterally("return shouldContinue")
345
- c.tsw.WriteLine("")
346
- c.tsw.Indent(-1)
347
- c.tsw.WriteLiterally("})")
348
- c.tsw.WriteLine("")
349
- c.tsw.Indent(-1)
350
- c.tsw.WriteLine("})()")
351
- return nil
352
- }
353
-
354
- func (c *GoToTSCompiler) writeIteratorParam(param ast.Expr, defaultName string) {
355
- if param != nil {
356
- if ident, ok := param.(*ast.Ident); ok && ident.Name != "_" {
357
- c.WriteIdent(ident, false)
358
- return
359
- }
360
- }
361
- c.tsw.WriteLiterally(defaultName)
362
- }
363
-
364
- func (c *GoToTSCompiler) writeInterfaceIteratorRange(exp *ast.RangeStmt) error {
365
- c.tsw.WriteLiterally(";(() => {")
366
- c.tsw.Indent(1)
367
- c.tsw.WriteLine("")
368
- c.tsw.WriteLiterally("let shouldContinue = true")
369
- c.tsw.WriteLine("")
370
-
371
- if err := c.WriteValueExpr(exp.X); err != nil {
372
- return fmt.Errorf("failed to write interface iterator expression: %w", err)
373
- }
374
-
375
- if exp.Key != nil && exp.Value != nil {
376
- c.tsw.WriteLiterally("!((")
377
- c.writeIteratorParam(exp.Key, "k")
378
- c.tsw.WriteLiterally(", ")
379
- c.writeIteratorParam(exp.Value, "v")
380
- c.tsw.WriteLiterally(") => {")
381
- } else if exp.Value != nil {
382
- c.tsw.WriteLiterally("!((")
383
- c.writeIteratorParam(exp.Value, "v")
384
- c.tsw.WriteLiterally(") => {")
385
- } else if exp.Key != nil {
386
- c.tsw.WriteLiterally("!((")
387
- c.writeIteratorParam(exp.Key, "k")
388
- c.tsw.WriteLiterally(") => {")
389
- } else {
390
- c.tsw.WriteLiterally("!(() => {")
391
- }
392
-
393
- c.tsw.Indent(1)
394
- c.tsw.WriteLine("")
395
- if err := c.WriteStmtBlock(exp.Body, false); err != nil {
396
- return fmt.Errorf("failed to write interface iterator body: %w", err)
397
- }
398
- c.tsw.WriteLiterally("return shouldContinue")
399
- c.tsw.WriteLine("")
400
- c.tsw.Indent(-1)
401
- c.tsw.WriteLiterally("})")
402
- c.tsw.WriteLine("")
403
- c.tsw.Indent(-1)
404
- c.tsw.WriteLine("})()")
405
- return nil
406
- }
407
-
408
- func (c *GoToTSCompiler) writeChannelRange(exp *ast.RangeStmt) error {
409
- if exp.Value != nil {
410
- return fmt.Errorf("channel range does not support two iteration variables")
411
- }
412
-
413
- c.tsw.WriteLiterally("for (;;) {")
414
- c.tsw.Indent(1)
415
- c.tsw.WriteLine("")
416
-
417
- valueIsBlank := exp.Key == nil
418
- valueName := "_"
419
- if !valueIsBlank {
420
- if valIdent, ok := exp.Key.(*ast.Ident); ok {
421
- if valIdent.Name != "_" {
422
- valueName = valIdent.Name
423
- } else {
424
- valueIsBlank = true
425
- }
426
- } else {
427
- return fmt.Errorf("unsupported iteration variable in channel range: %T", exp.Key)
428
- }
429
- }
430
-
431
- keyword := "const "
432
- okVarName := "_ok"
433
- if exp.Tok != token.DEFINE {
434
- keyword = ""
435
- c.tsw.WriteLiterally("let ")
436
- c.tsw.WriteLiterally(okVarName)
437
- c.tsw.WriteLine("")
438
- }
439
-
440
- patternParts := []string{}
441
- if !valueIsBlank {
442
- patternParts = append(patternParts, fmt.Sprintf("value: %s", valueName))
443
- }
444
- patternParts = append(patternParts, fmt.Sprintf("ok: %s", okVarName))
445
- destructuringPattern := fmt.Sprintf("{ %s }", strings.Join(patternParts, ", "))
446
-
447
- c.tsw.WriteLiterally(keyword)
448
- if keyword == "" {
449
- c.tsw.WriteLiterally(";(")
450
- }
451
- c.tsw.WriteLiterally(destructuringPattern)
452
- c.tsw.WriteLiterally(" = await $.chanRecvWithOk(")
453
- if err := c.WriteValueExpr(exp.X); err != nil {
454
- return err
455
- }
456
- c.tsw.WriteLiterally(")")
457
- if keyword == "" {
458
- c.tsw.WriteLiterally(")")
459
- }
460
- c.tsw.WriteLine("")
461
-
462
- c.tsw.WriteLiterally("if (!")
463
- c.tsw.WriteLiterally(okVarName)
464
- c.tsw.WriteLiterally(") break")
465
- c.tsw.WriteLine("")
466
-
467
- if err := c.WriteStmtBlock(exp.Body, false); err != nil {
468
- return err
469
- }
470
-
471
- c.tsw.Indent(-1)
472
- c.tsw.WriteLine("}")
473
-
474
- return nil
475
- }