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,188 +0,0 @@
1
- package compiler
2
-
3
- import (
4
- "go/ast"
5
- "go/types"
6
- "strings"
7
- )
8
-
9
- // isCallExprAsync determines if a CallExpr represents an async function/method call
10
- func (c *GoToTSCompiler) isCallExprAsync(exp *ast.CallExpr) bool {
11
- switch fun := exp.Fun.(type) {
12
- case *ast.Ident:
13
- // Function call (e.g., func())
14
- if obj := c.objectOfIdent(fun); obj != nil {
15
- // Check if this is a known async function
16
- if c.analysis.IsAsyncFunc(obj) {
17
- return true
18
- }
19
- // Check if this is a variable that returns async values
20
- // (e.g., indirect := sync.OnceValue(asyncFunc))
21
- if c.analysis.IsAsyncReturningVar(obj) {
22
- return true
23
- }
24
- }
25
- return false
26
-
27
- case *ast.SelectorExpr:
28
- // Method call (e.g., obj.method() or obj.field.method())
29
- var obj types.Object
30
- var objOk bool
31
-
32
- // Handle different patterns of method receiver
33
- switch x := fun.X.(type) {
34
- case *ast.Ident:
35
- // Direct identifier: obj.method()
36
- obj = c.objectOfIdent(x)
37
- objOk = obj != nil
38
-
39
- case *ast.StarExpr:
40
- // Pointer dereference: (*p).method() or p.method() where p is a pointer
41
- if id, isIdent := x.X.(*ast.Ident); isIdent {
42
- obj = c.objectOfIdent(id)
43
- objOk = obj != nil
44
- }
45
-
46
- case *ast.SelectorExpr:
47
- // Field access: obj.field.method()
48
- // Get the type of the field access expression
49
- if fieldType := c.pkg.TypesInfo.TypeOf(x); fieldType != nil {
50
- objOk = true
51
- }
52
-
53
- case *ast.CallExpr:
54
- // Method call on function result: funcCall().method()
55
- // Get the type of the function call result
56
- if callType := c.pkg.TypesInfo.TypeOf(x); callType != nil {
57
- objOk = true
58
- }
59
-
60
- default:
61
- objOk = false
62
- }
63
-
64
- if !objOk {
65
- return false
66
- }
67
-
68
- // Handle package-level function calls (e.g., time.Sleep)
69
- if obj != nil {
70
- if pkgName, isPkg := obj.(*types.PkgName); isPkg {
71
- methodName := fun.Sel.Name
72
- pkgPath := pkgName.Imported().Path()
73
- return c.analysis.IsMethodAsync(pkgPath, "", methodName)
74
- }
75
- }
76
-
77
- // Get the type for method calls on objects
78
- var targetType types.Type
79
-
80
- if obj != nil {
81
- // Direct variable case: obj.method()
82
- if varObj, ok := obj.(*types.Var); ok {
83
- targetType = varObj.Type()
84
- } else {
85
- return false
86
- }
87
- } else {
88
- // Field access case: obj.field.method()
89
- targetType = c.pkg.TypesInfo.TypeOf(fun.X)
90
- if targetType == nil {
91
- return false
92
- }
93
- }
94
-
95
- methodName := fun.Sel.Name
96
-
97
- // Check if target type is an interface
98
- if interfaceType, isInterface := targetType.Underlying().(*types.Interface); isInterface {
99
- return c.analysis.IsInterfaceMethodAsync(interfaceType, methodName)
100
- }
101
-
102
- // Get the named type from the target type
103
- var namedType *types.Named
104
- var namedTypeOk bool
105
-
106
- // Handle both direct named types and pointer to named types
107
- switch t := targetType.(type) {
108
- case *types.Named:
109
- namedType, namedTypeOk = t, true
110
- case *types.Pointer:
111
- if nt, isNamed := t.Elem().(*types.Named); isNamed {
112
- namedType, namedTypeOk = nt, true
113
- }
114
- }
115
-
116
- if !namedTypeOk {
117
- return false
118
- }
119
-
120
- typeName := namedType.Obj().Name()
121
-
122
- // Determine the package path for the method
123
- var pkgPath string
124
- typePkg := namedType.Obj().Pkg()
125
- if typePkg != nil {
126
- pkgPath = typePkg.Path()
127
- } else {
128
- pkgPath = c.pkg.Types.Path()
129
- }
130
-
131
- return c.analysis.IsMethodAsync(pkgPath, typeName, methodName)
132
-
133
- default:
134
- return false
135
- }
136
- }
137
-
138
- // writeAsyncCallIfNeeded writes the await prefix for async function or method calls
139
- // Returns true if await was written, false otherwise
140
- func (c *GoToTSCompiler) writeAsyncCallIfNeeded(exp *ast.CallExpr) bool {
141
- if c.isCallExprAsync(exp) {
142
- c.tsw.WriteLiterally("await ")
143
- return true
144
- }
145
- return false
146
- }
147
-
148
- // addNonNullAssertion adds ! for function calls that might return null
149
- func (c *GoToTSCompiler) addNonNullAssertion(expFun ast.Expr) {
150
- if funType := c.pkg.TypesInfo.TypeOf(expFun); funType != nil {
151
- if _, ok := funType.Underlying().(*types.Signature); ok {
152
- // Check if this is a function parameter identifier that needs not-null assertion
153
- if ident, isIdent := expFun.(*ast.Ident); isIdent {
154
- // Check if this identifier is a function parameter
155
- if obj := c.objectOfIdent(ident); obj != nil {
156
- if _, isVar := obj.(*types.Var); isVar {
157
- // This is a variable (including function parameters)
158
- // Function parameters that are function types need ! assertion
159
- c.tsw.WriteLiterally("!")
160
- }
161
- }
162
- } else if selectorExpr, isSelectorExpr := expFun.(*ast.SelectorExpr); isSelectorExpr {
163
- // Check if this is a field access that returns a function type
164
- // e.g., s.step where step is a function-typed field
165
- if selection := c.pkg.TypesInfo.Selections[selectorExpr]; selection != nil {
166
- // This is a field or method selection
167
- if selection.Kind() == types.FieldVal {
168
- // It's a field - function-typed fields may be nil
169
- c.tsw.WriteLiterally("!")
170
- }
171
- }
172
- } else if _, isParenExpr := expFun.(*ast.ParenExpr); isParenExpr {
173
- // Parenthesized function expressions often come from pointer dereferences
174
- // like (*rel)(), which remain nullable in TypeScript.
175
- c.tsw.WriteLiterally("!")
176
- } else if _, isNamed := funType.(*types.Named); isNamed {
177
- c.tsw.WriteLiterally("!")
178
- }
179
- } else {
180
- // Check if the function type is nullable (e.g., func(...) | null)
181
- // This handles cases where a function call returns a nullable function
182
- funTypeStr := funType.String()
183
- if strings.Contains(funTypeStr, "| null") || strings.Contains(funTypeStr, "null |") {
184
- c.tsw.WriteLiterally("!")
185
- }
186
- }
187
- }
188
- }
@@ -1,208 +0,0 @@
1
- package compiler
2
-
3
- import (
4
- "fmt"
5
- "go/ast"
6
- "go/token"
7
-
8
- "github.com/pkg/errors"
9
- )
10
-
11
- // builtinFunctions is the definitive list of Go builtin functions handled by the compiler
12
- var builtinFunctions = map[string]bool{
13
- "len": true,
14
- "cap": true,
15
- "make": true,
16
- "new": true,
17
- "append": true,
18
- "copy": true,
19
- "delete": true,
20
- "complex": true,
21
- "real": true,
22
- "imag": true,
23
- "close": true,
24
- "panic": true,
25
- "recover": true,
26
- "print": true,
27
- "println": true,
28
- "min": true,
29
- "max": true,
30
- "clear": true,
31
- }
32
-
33
- // writeBuiltinFunction handles built-in Go functions
34
- func (c *GoToTSCompiler) writeBuiltinFunction(exp *ast.CallExpr, funName string) (handled bool, err error) {
35
- switch funName {
36
- case "panic":
37
- c.tsw.WriteLiterally("$.panic")
38
- return true, nil
39
- case "println":
40
- c.tsw.WriteLiterally("$.println")
41
- return true, nil
42
- case "len":
43
- if len(exp.Args) != 1 {
44
- return true, errors.Errorf("unhandled len call with incorrect number of arguments: %d != 1", len(exp.Args))
45
- }
46
- c.tsw.WriteLiterally("$.len")
47
- return true, nil
48
- case "cap":
49
- if len(exp.Args) != 1 {
50
- return true, errors.Errorf("unhandled cap call with incorrect number of arguments: %d != 1", len(exp.Args))
51
- }
52
- c.tsw.WriteLiterally("$.cap")
53
- return true, nil
54
- case "new":
55
- if len(exp.Args) != 1 {
56
- return true, errors.Errorf("unhandled new call with incorrect number of arguments: %d != 1", len(exp.Args))
57
- }
58
- c.tsw.WriteLiterally("new ")
59
- c.WriteTypeExpr(exp.Args[0]) // This should write the TypeScript type T_ts
60
- c.tsw.WriteLiterally("()")
61
- return true, nil
62
- case "delete":
63
- if len(exp.Args) != 2 {
64
- return true, errors.Errorf("unhandled delete call with incorrect number of arguments: %d != 2", len(exp.Args))
65
- }
66
- c.tsw.WriteLiterally("$.deleteMapEntry")
67
- return true, nil
68
- case "copy":
69
- if len(exp.Args) != 2 {
70
- return true, errors.Errorf("unhandled copy call with incorrect number of arguments: %d != 2", len(exp.Args))
71
- }
72
- c.tsw.WriteLiterally("$.copy")
73
- return true, nil
74
- case "recover":
75
- if len(exp.Args) != 0 {
76
- return true, errors.Errorf("unhandled recover call with incorrect number of arguments: %d != 0", len(exp.Args))
77
- }
78
- c.tsw.WriteLiterally("$.recover")
79
- return true, nil
80
- case "make":
81
- return true, c.WriteCallExprMake(exp)
82
- case "string":
83
- return true, c.writeStringConversion(exp)
84
- case "close":
85
- if len(exp.Args) != 1 {
86
- return true, errors.New("unhandled close call with incorrect number of arguments")
87
- }
88
- if err := c.WriteValueExpr(exp.Args[0]); err != nil {
89
- return true, fmt.Errorf("failed to write channel in close call: %w", err)
90
- }
91
- c.tsw.WriteLiterally(".close()")
92
- return true, nil
93
- case "append":
94
- return true, c.writeAppendCall(exp)
95
- case "min":
96
- if len(exp.Args) < 1 {
97
- return true, errors.New("unhandled min call with no arguments")
98
- }
99
- c.tsw.WriteLiterally("Math.min(")
100
- for i, arg := range exp.Args {
101
- if i > 0 {
102
- c.tsw.WriteLiterally(", ")
103
- }
104
- if err := c.WriteValueExpr(arg); err != nil {
105
- return true, fmt.Errorf("failed to write argument %d in min call: %w", i, err)
106
- }
107
- }
108
- c.tsw.WriteLiterally(")")
109
- return true, nil
110
- case "max":
111
- if len(exp.Args) < 1 {
112
- return true, errors.New("unhandled max call with no arguments")
113
- }
114
- c.tsw.WriteLiterally("Math.max(")
115
- for i, arg := range exp.Args {
116
- if i > 0 {
117
- c.tsw.WriteLiterally(", ")
118
- }
119
- if err := c.WriteValueExpr(arg); err != nil {
120
- return true, fmt.Errorf("failed to write argument %d in max call: %w", i, err)
121
- }
122
- }
123
- c.tsw.WriteLiterally(")")
124
- return true, nil
125
- case "clear":
126
- if len(exp.Args) != 1 {
127
- return true, errors.Errorf("unhandled clear call with incorrect number of arguments: %d != 1", len(exp.Args))
128
- }
129
- c.tsw.WriteLiterally("$.clear(")
130
- if err := c.WriteValueExpr(exp.Args[0]); err != nil {
131
- return true, fmt.Errorf("failed to write argument in clear call: %w", err)
132
- }
133
- c.tsw.WriteLiterally(")")
134
- return true, nil
135
- case "byte":
136
- if len(exp.Args) != 1 {
137
- return true, errors.Errorf("unhandled byte call with incorrect number of arguments: %d != 1", len(exp.Args))
138
- }
139
- c.tsw.WriteLiterally("$.byte(")
140
- if err := c.WriteValueExpr(exp.Args[0]); err != nil {
141
- return true, fmt.Errorf("failed to write argument for byte() conversion: %w", err)
142
- }
143
- c.tsw.WriteLiterally(")")
144
- return true, nil
145
- case "int":
146
- return true, c.writeIntConversion(exp)
147
- default:
148
- return false, nil
149
- }
150
- }
151
-
152
- // writeAppendCall handles append() function calls
153
- func (c *GoToTSCompiler) writeAppendCall(exp *ast.CallExpr) error {
154
- if len(exp.Args) < 1 {
155
- return errors.New("unhandled append call with incorrect number of arguments")
156
- }
157
-
158
- c.tsw.WriteLiterally("$.append(")
159
- // The first argument is the slice
160
- if err := c.WriteValueExpr(exp.Args[0]); err != nil {
161
- return fmt.Errorf("failed to write slice in append call: %w", err)
162
- }
163
-
164
- // The remaining arguments are the elements to append
165
- elemsToAppend := exp.Args[1:]
166
- for i, arg := range elemsToAppend {
167
- if i > 0 || len(exp.Args) > 1 {
168
- c.tsw.WriteLiterally(", ")
169
- }
170
-
171
- // Handle ellipsis (spread) for the last argument: append(slice, elems...)
172
- // The ellipsis can only appear on the last argument, so check if this is the last element
173
- isLastElement := i == len(elemsToAppend)-1
174
- if exp.Ellipsis != token.NoPos && isLastElement {
175
- // Check if the slice is []byte and the argument is a string
176
- sliceType := c.pkg.TypesInfo.TypeOf(exp.Args[0])
177
- argType := c.pkg.TypesInfo.TypeOf(arg)
178
-
179
- if sliceType != nil && argType != nil {
180
- if c.isByteSliceType(sliceType) && c.isStringType(argType) {
181
- // Convert string to bytes: append([]byte, string...) -> $.append(slice, ...$.stringToBytes(string))
182
- c.tsw.WriteLiterally("...$.stringToBytes(")
183
- if err := c.WriteValueExpr(arg); err != nil {
184
- return fmt.Errorf("failed to write string argument in append call: %w", err)
185
- }
186
- c.tsw.WriteLiterally(")")
187
- continue
188
- }
189
- }
190
-
191
- // For other slice types with ellipsis, use spread operator
192
- // append(slice, anotherSlice...) -> $.append(slice, ...(anotherSlice || []))
193
- // The || [] handles the case where anotherSlice is null (nil in Go)
194
- c.tsw.WriteLiterally("...(")
195
- if err := c.WriteValueExpr(arg); err != nil {
196
- return fmt.Errorf("failed to write spread argument in append call: %w", err)
197
- }
198
- c.tsw.WriteLiterally(" || [])")
199
- continue
200
- }
201
-
202
- if err := c.WriteValueExpr(arg); err != nil {
203
- return fmt.Errorf("failed to write argument %d in append call: %w", i+1, err)
204
- }
205
- }
206
- c.tsw.WriteLiterally(")")
207
- return nil
208
- }