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
package/compiler/field.go DELETED
@@ -1,183 +0,0 @@
1
- package compiler
2
-
3
- import (
4
- "go/ast"
5
- "go/types"
6
- )
7
-
8
- // WriteFieldList translates a Go field list (`ast.FieldList`), which can represent
9
- // function parameters, function results, or struct fields, into its TypeScript equivalent.
10
- // - If `isArguments` is true (for function parameters/results):
11
- // It iterates through `a.List`, writing each field as `name: type`. Parameter
12
- // names and types are written using `WriteField` and `WriteGoType` respectively.
13
- // Multiple parameters are comma-separated.
14
- // - If `isArguments` is false (for struct fields):
15
- // It writes an opening brace `{`, indents, then writes each field definition
16
- // using `WriteField`, followed by a closing brace `}`. If the field list is
17
- // empty or nil, it simply writes `{}`.
18
- //
19
- // This function is a key part of generating TypeScript type signatures for functions
20
- // and interfaces, as well as struct type definitions.
21
- func (c *GoToTSCompiler) WriteFieldList(a *ast.FieldList, isArguments bool) {
22
- if !isArguments && (a == nil || a.NumFields() == 0) {
23
- c.tsw.WriteLiterally("{}")
24
- return
25
- }
26
-
27
- if !isArguments && a.Opening.IsValid() {
28
- c.tsw.WriteLine("{")
29
- c.tsw.Indent(1)
30
- }
31
-
32
- // Check if this is a variadic function parameter list
33
- isVariadic := false
34
- if isArguments && a != nil && len(a.List) > 0 {
35
- lastParam := a.List[len(a.List)-1]
36
- if _, ok := lastParam.Type.(*ast.Ellipsis); ok {
37
- isVariadic = true
38
- }
39
- }
40
-
41
- if isArguments && isVariadic {
42
- // Handle non-variadic parameters first
43
- for i, field := range a.List[:len(a.List)-1] {
44
- if i > 0 {
45
- c.tsw.WriteLiterally(", ")
46
- }
47
-
48
- // Handle multiple parameter names for the same type
49
- for j, name := range field.Names {
50
- if j > 0 {
51
- c.tsw.WriteLiterally(", ")
52
- }
53
- c.tsw.WriteLiterally(c.sanitizeIdentifier(name.Name))
54
- c.tsw.WriteLiterally(": ")
55
- // Use WriteTypeExpr to preserve qualified names like os.FileInfo
56
- c.WriteTypeExpr(field.Type)
57
- }
58
- }
59
-
60
- // Handle the variadic parameter
61
- lastParam := a.List[len(a.List)-1]
62
- if len(a.List) > 1 {
63
- c.tsw.WriteLiterally(", ")
64
- }
65
-
66
- for i, name := range lastParam.Names {
67
- if i > 0 {
68
- c.tsw.WriteLiterally(", ")
69
- }
70
- c.tsw.WriteLiterally("...")
71
- c.tsw.WriteLiterally(c.sanitizeIdentifier(name.Name))
72
- }
73
-
74
- c.tsw.WriteLiterally(": ")
75
- if ellipsis, ok := lastParam.Type.(*ast.Ellipsis); ok {
76
- // Get the actual variadic parameter type from the type checker
77
- // This gives us the slice type (e.g., []interface{})
78
- variadicType := c.pkg.TypesInfo.TypeOf(lastParam.Type)
79
- if sliceType, isSlice := variadicType.(*types.Slice); isSlice {
80
- // For variadic parameters, write the element type followed by []
81
- // This handles interface{} properly by generating "any[]" instead of "null | any[]"
82
- c.WriteGoType(sliceType.Elem(), GoTypeContextVariadicParam)
83
- c.tsw.WriteLiterally("[]")
84
- } else {
85
- // Fallback to the original AST-based approach for edge cases
86
- c.WriteTypeExpr(ellipsis.Elt)
87
- c.tsw.WriteLiterally("[]")
88
- }
89
- }
90
- } else {
91
- // Handle regular parameter list for function declarations
92
- for i, field := range a.List {
93
- if i > 0 && isArguments {
94
- c.tsw.WriteLiterally(", ")
95
- }
96
-
97
- if isArguments {
98
- // For function parameters with multiple names, write each with its type
99
- for j, name := range field.Names {
100
- if j > 0 {
101
- c.tsw.WriteLiterally(", ")
102
- }
103
- c.tsw.WriteLiterally(c.sanitizeIdentifier(name.Name))
104
- c.tsw.WriteLiterally(": ")
105
- // Use WriteTypeExpr to preserve qualified names like os.FileInfo
106
- c.WriteTypeExpr(field.Type)
107
- }
108
- } else {
109
- // For struct fields and other non-argument fields
110
- c.WriteField(field, false)
111
- }
112
- }
113
- }
114
-
115
- if !isArguments && a.Closing.IsValid() {
116
- c.tsw.Indent(-1)
117
- c.tsw.WriteLine("}")
118
- }
119
- }
120
-
121
- // WriteField translates a single Go field (`ast.Field`) from a field list
122
- // (e.g., in a struct type or function signature) into its TypeScript representation.
123
- // - If `isArguments` is false (struct field):
124
- // - Documentation comments (`field.Doc`, `field.Comment`) are preserved.
125
- // - If the field is anonymous (embedded), it's skipped as promotions are handled
126
- // elsewhere (e.g., during struct class generation).
127
- // - For named fields, it writes `public fieldName: FieldType_ts`. The field name
128
- // retains its Go casing. The type is translated using `WriteGoType`.
129
- // - Go struct tags (`field.Tag`) are written as a trailing comment.
130
- //
131
- // - If `isArguments` is true (function parameter):
132
- // - It writes the parameter name (retaining Go casing). The type is handled
133
- // by the caller (`WriteFieldList`).
134
- //
135
- // This function is used by `WriteFieldList` to process individual items within
136
- // parameter lists and struct field definitions.
137
- func (c *GoToTSCompiler) WriteField(field *ast.Field, isArguments bool) {
138
- if !isArguments {
139
- if field.Doc != nil {
140
- c.WriteDoc(field.Doc)
141
- }
142
- if field.Comment != nil {
143
- c.WriteDoc(field.Comment)
144
- }
145
- }
146
-
147
- // Check if this is an embedded field (anonymous field)
148
- if len(field.Names) == 0 && !isArguments {
149
- // This is an embedded field, so we're adding promotions instead of declaring it directly
150
- return
151
- }
152
-
153
- for i, name := range field.Names {
154
- if i > 0 && isArguments {
155
- c.tsw.WriteLiterally(", ")
156
- }
157
-
158
- // argument names: keep original casing, no access modifier
159
- if isArguments {
160
- c.tsw.WriteLiterally(c.sanitizeIdentifier(name.Name))
161
- // Argument type is handled in WriteFieldList, so continue
162
- continue
163
- } else {
164
- // All struct fields are public in TypeScript, keeping original Go casing
165
- c.tsw.WriteLiterally("public ")
166
- c.tsw.WriteLiterally(name.Name)
167
- }
168
-
169
- // write type for struct fields (not arguments)
170
- c.tsw.WriteLiterally(": ")
171
- typ := c.pkg.TypesInfo.TypeOf(field.Type)
172
- c.WriteGoType(typ, GoTypeContextGeneral) // Use WriteGoType for field type
173
-
174
- if !isArguments {
175
- // write tag comment if any for struct fields
176
- if field.Tag != nil {
177
- c.tsw.WriteCommentLinef("tag: %s", field.Tag.Value)
178
- } else {
179
- c.tsw.WriteLine("") // No semicolon
180
- }
181
- }
182
- }
183
- }
@@ -1,298 +0,0 @@
1
- package compiler
2
-
3
- import (
4
- "context"
5
- "os"
6
- "path/filepath"
7
- "slices"
8
- "strings"
9
- "testing"
10
-
11
- "github.com/sirupsen/logrus"
12
- )
13
-
14
- func TestReadGsPackageMetadata(t *testing.T) {
15
- // Create a basic compiler configuration
16
- config := &Config{
17
- OutputPath: "./test_output",
18
- Dir: ".",
19
- }
20
-
21
- // Create a logger (set to warn level to reduce noise in tests)
22
- logger := logrus.New()
23
- logger.SetLevel(logrus.WarnLevel)
24
- le := logrus.NewEntry(logger)
25
-
26
- // Create a compiler
27
- comp, err := NewCompiler(config, le, nil)
28
- if err != nil {
29
- t.Fatalf("Failed to create compiler: %v", err)
30
- }
31
-
32
- // Test reading metadata from the bytes package
33
- metadata, err := comp.ReadGsPackageMetadata("gs/bytes")
34
- if err != nil {
35
- t.Fatalf("Failed to read metadata: %v", err)
36
- }
37
-
38
- // Check that we found the expected dependencies
39
- if len(metadata.Dependencies) == 0 {
40
- t.Errorf("Expected at least one dependency, got none")
41
- }
42
-
43
- // Check for the specific "iter" dependency
44
- foundIter := slices.Contains(metadata.Dependencies, "iter")
45
-
46
- if !foundIter {
47
- t.Errorf("Expected to find 'iter' dependency, got dependencies: %v", metadata.Dependencies)
48
- }
49
-
50
- // Also check for other expected dependencies from the bytes package
51
- expectedDeps := []string{"errors", "io", "iter", "unicode", "unicode/utf8", "unsafe"}
52
- for _, expected := range expectedDeps {
53
- found := slices.Contains(metadata.Dependencies, expected)
54
- if !found {
55
- t.Errorf("Expected to find dependency '%s', got dependencies: %v", expected, metadata.Dependencies)
56
- }
57
- }
58
- }
59
-
60
- func TestReadGsPackageMetadataWithAsyncMethods(t *testing.T) {
61
- // Create a basic compiler configuration
62
- config := &Config{
63
- OutputPath: "./test_output",
64
- Dir: ".",
65
- }
66
-
67
- // Create a logger (set to warn level to reduce noise in tests)
68
- logger := logrus.New()
69
- logger.SetLevel(logrus.WarnLevel)
70
- le := logrus.NewEntry(logger)
71
-
72
- // Create a compiler
73
- comp, err := NewCompiler(config, le, nil)
74
- if err != nil {
75
- t.Fatalf("Failed to create compiler: %v", err)
76
- }
77
-
78
- // Test reading metadata from the sync package (which has async methods)
79
- metadata, err := comp.ReadGsPackageMetadata("gs/sync")
80
- if err != nil {
81
- t.Fatalf("Failed to read metadata: %v", err)
82
- }
83
-
84
- // Check that we have async methods
85
- if len(metadata.AsyncMethods) == 0 {
86
- t.Errorf("Expected at least one async method for sync package, got none")
87
- }
88
-
89
- // Check for specific async methods
90
- expectedAsyncMethods := []string{"Mutex.Lock", "WaitGroup.Wait", "RWMutex.Lock"}
91
- for _, methodName := range expectedAsyncMethods {
92
- if isAsync, exists := metadata.AsyncMethods[methodName]; !exists {
93
- t.Errorf("Expected to find async method '%s'", methodName)
94
- } else if !isAsync {
95
- t.Errorf("Expected method '%s' to be async, but it's not", methodName)
96
- }
97
- }
98
- }
99
-
100
- func TestReadGsPackageMetadataNonExistent(t *testing.T) {
101
- // Create a basic compiler configuration
102
- config := &Config{
103
- OutputPath: "./test_output",
104
- Dir: ".",
105
- }
106
-
107
- // Create a logger (set to warn level to reduce noise in tests)
108
- logger := logrus.New()
109
- logger.SetLevel(logrus.WarnLevel)
110
- le := logrus.NewEntry(logger)
111
-
112
- // Create a compiler
113
- comp, err := NewCompiler(config, le, nil)
114
- if err != nil {
115
- t.Fatalf("Failed to create compiler: %v", err)
116
- }
117
-
118
- // Test reading metadata from a non-existent package
119
- metadata, err := comp.ReadGsPackageMetadata("gs/nonexistent")
120
- if err != nil {
121
- t.Fatalf("Expected no error for non-existent package, got: %v", err)
122
- }
123
-
124
- // Should return empty metadata for non-existent packages
125
- if len(metadata.Dependencies) != 0 {
126
- t.Errorf("Expected empty dependencies for non-existent package, got: %v", metadata.Dependencies)
127
- }
128
-
129
- if len(metadata.AsyncMethods) != 0 {
130
- t.Errorf("Expected empty async methods for non-existent package, got: %v", metadata.AsyncMethods)
131
- }
132
- }
133
-
134
- func TestCompilePackagesCopiesHandwrittenDependencies(t *testing.T) {
135
- tempDir, err := os.MkdirTemp("", "goscript-gs-deps")
136
- if err != nil {
137
- t.Fatalf("Failed to create temp dir: %v", err)
138
- }
139
- defer os.RemoveAll(tempDir)
140
-
141
- wd, err := os.Getwd()
142
- if err != nil {
143
- t.Fatalf("Failed to get working directory: %v", err)
144
- }
145
-
146
- config := &Config{
147
- OutputPath: tempDir,
148
- Dir: filepath.Dir(wd),
149
- AllDependencies: true,
150
- DisableEmitBuiltin: false,
151
- }
152
-
153
- logger := logrus.New()
154
- logger.SetLevel(logrus.WarnLevel)
155
- le := logrus.NewEntry(logger)
156
-
157
- comp, err := NewCompiler(config, le, nil)
158
- if err != nil {
159
- t.Fatalf("Failed to create compiler: %v", err)
160
- }
161
-
162
- _, err = comp.CompilePackages(
163
- context.Background(),
164
- "github.com/aperturerobotics/goscript/tests/tests/package_import_slices",
165
- )
166
- if err != nil {
167
- t.Fatalf("Compilation failed: %v", err)
168
- }
169
-
170
- cmpPath := filepath.Join(tempDir, "@goscript", "cmp", "index.ts")
171
- if _, err := os.Stat(cmpPath); err != nil {
172
- t.Fatalf("Expected handwritten dependency at %s: %v", cmpPath, err)
173
- }
174
- }
175
-
176
- func TestCompilePackagesEmitTypeScriptImportSpecifiers(t *testing.T) {
177
- tempDir, err := os.MkdirTemp("", "goscript-ts-imports")
178
- if err != nil {
179
- t.Fatalf("Failed to create temp dir: %v", err)
180
- }
181
- defer os.RemoveAll(tempDir)
182
-
183
- wd, err := os.Getwd()
184
- if err != nil {
185
- t.Fatalf("Failed to get working directory: %v", err)
186
- }
187
-
188
- config := &Config{
189
- OutputPath: tempDir,
190
- Dir: filepath.Dir(wd),
191
- AllDependencies: true,
192
- DisableEmitBuiltin: false,
193
- }
194
-
195
- logger := logrus.New()
196
- logger.SetLevel(logrus.WarnLevel)
197
- le := logrus.NewEntry(logger)
198
-
199
- comp, err := NewCompiler(config, le, nil)
200
- if err != nil {
201
- t.Fatalf("Failed to create compiler: %v", err)
202
- }
203
-
204
- _, err = comp.CompilePackages(
205
- context.Background(),
206
- "github.com/aperturerobotics/goscript/tests/tests/package_import",
207
- "github.com/aperturerobotics/goscript/tests/tests/map_value_field_access_cross_file",
208
- )
209
- if err != nil {
210
- t.Fatalf("Compilation failed: %v", err)
211
- }
212
-
213
- assertFileContains(t,
214
- filepath.Join(
215
- tempDir,
216
- "@goscript",
217
- "github.com",
218
- "aperturerobotics",
219
- "goscript",
220
- "tests",
221
- "tests",
222
- "package_import",
223
- "package_import.gs.ts",
224
- ),
225
- []string{
226
- `@goscript/builtin/index.ts`,
227
- `@goscript/github.com/aperturerobotics/goscript/tests/tests/package_import/subpkg/index.ts`,
228
- },
229
- []string{
230
- ".js",
231
- },
232
- )
233
-
234
- assertFileContains(t,
235
- filepath.Join(
236
- tempDir,
237
- "@goscript",
238
- "github.com",
239
- "aperturerobotics",
240
- "goscript",
241
- "tests",
242
- "tests",
243
- "package_import",
244
- "subpkg",
245
- "index.ts",
246
- ),
247
- []string{
248
- `"./subpkg.gs.ts"`,
249
- },
250
- []string{
251
- ".gs.js",
252
- },
253
- )
254
-
255
- assertFileContains(t,
256
- filepath.Join(
257
- tempDir,
258
- "@goscript",
259
- "github.com",
260
- "aperturerobotics",
261
- "goscript",
262
- "tests",
263
- "tests",
264
- "map_value_field_access_cross_file",
265
- "read.gs.ts",
266
- ),
267
- []string{
268
- `"./types.gs.ts"`,
269
- `@goscript/builtin/index.ts`,
270
- },
271
- []string{
272
- ".gs.js",
273
- "index.js",
274
- },
275
- )
276
- }
277
-
278
- func assertFileContains(t *testing.T, path string, want []string, wantAbsent []string) {
279
- t.Helper()
280
-
281
- data, err := os.ReadFile(path)
282
- if err != nil {
283
- t.Fatalf("Failed to read %s: %v", path, err)
284
- }
285
- text := string(data)
286
-
287
- for _, s := range want {
288
- if !strings.Contains(text, s) {
289
- t.Fatalf("Expected %s to contain %q\n%s", path, s, text)
290
- }
291
- }
292
-
293
- for _, s := range wantAbsent {
294
- if strings.Contains(text, s) {
295
- t.Fatalf("Expected %s to omit %q\n%s", path, s, text)
296
- }
297
- }
298
- }