goscript 0.0.84 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (428) hide show
  1. package/README.md +267 -243
  2. package/cmd/goscript/cmd-test.go +193 -0
  3. package/cmd/goscript/cmd-test_test.go +76 -0
  4. package/cmd/goscript/cmd_compile.go +70 -69
  5. package/cmd/goscript/cmd_compile_test.go +79 -0
  6. package/cmd/goscript/main.go +11 -5
  7. package/compiler/build-flags.go +38 -0
  8. package/compiler/compile-request.go +220 -0
  9. package/compiler/compiler.go +16 -1336
  10. package/compiler/compliance_test.go +188 -0
  11. package/compiler/config.go +6 -13
  12. package/compiler/diagnostic.go +70 -0
  13. package/compiler/gotest/owner.go +24 -0
  14. package/compiler/gotest/package-result.go +67 -0
  15. package/compiler/gotest/request.go +145 -0
  16. package/compiler/gotest/result.go +28 -0
  17. package/compiler/gotest/runner.go +588 -0
  18. package/compiler/gotest/runner_test.go +627 -0
  19. package/compiler/gotest/test.go +9 -0
  20. package/compiler/index.test.ts +28 -28
  21. package/compiler/index.ts +40 -72
  22. package/compiler/lowered-program.go +184 -0
  23. package/compiler/lowering.go +8072 -0
  24. package/compiler/override-facts.go +307 -0
  25. package/compiler/override-registry.go +283 -0
  26. package/compiler/override-registry_test.go +254 -0
  27. package/compiler/package-graph.go +254 -0
  28. package/compiler/package-graph_test.go +316 -0
  29. package/compiler/package-test-function.go +9 -0
  30. package/compiler/package-test-graph-package.go +40 -0
  31. package/compiler/package-test-graph-variant.go +105 -0
  32. package/compiler/package-test-graph.go +117 -0
  33. package/compiler/package-test-graph_test.go +144 -0
  34. package/compiler/result.go +13 -0
  35. package/compiler/runtime-contract.go +439 -0
  36. package/compiler/runtime-contract_test.go +104 -0
  37. package/compiler/semantic-model-types.go +113 -0
  38. package/compiler/semantic-model.go +1422 -0
  39. package/compiler/semantic-model_test.go +471 -0
  40. package/compiler/service.go +133 -0
  41. package/compiler/skeleton_test.go +1775 -0
  42. package/compiler/tsworkspace/owner.go +334 -0
  43. package/compiler/tsworkspace/owner_test.go +93 -0
  44. package/compiler/tsworkspace/result.go +17 -0
  45. package/compiler/typescript-emitter.go +1040 -0
  46. package/compiler/wasm/compile.go +2 -3
  47. package/compiler/wasm/compile_test.go +79 -0
  48. package/compiler/wasm_api.go +140 -124
  49. package/dist/compiler/index.d.ts +1 -3
  50. package/dist/compiler/index.js +31 -55
  51. package/dist/compiler/index.js.map +1 -1
  52. package/dist/gs/builtin/builtin.d.ts +33 -2
  53. package/dist/gs/builtin/builtin.js +217 -6
  54. package/dist/gs/builtin/builtin.js.map +1 -1
  55. package/dist/gs/builtin/channel.d.ts +11 -3
  56. package/dist/gs/builtin/channel.js +12 -0
  57. package/dist/gs/builtin/channel.js.map +1 -1
  58. package/dist/gs/builtin/hostio.d.ts +15 -1
  59. package/dist/gs/builtin/hostio.js +134 -49
  60. package/dist/gs/builtin/hostio.js.map +1 -1
  61. package/dist/gs/builtin/index.d.ts +1 -0
  62. package/dist/gs/builtin/index.js +1 -0
  63. package/dist/gs/builtin/index.js.map +1 -1
  64. package/dist/gs/builtin/slice.d.ts +23 -3
  65. package/dist/gs/builtin/slice.js +216 -44
  66. package/dist/gs/builtin/slice.js.map +1 -1
  67. package/dist/gs/builtin/type.d.ts +16 -2
  68. package/dist/gs/builtin/type.js +134 -21
  69. package/dist/gs/builtin/type.js.map +1 -1
  70. package/dist/gs/builtin/varRef.d.ts +5 -0
  71. package/dist/gs/builtin/varRef.js +23 -0
  72. package/dist/gs/builtin/varRef.js.map +1 -1
  73. package/dist/gs/bytes/buffer.gs.js +48 -44
  74. package/dist/gs/bytes/buffer.gs.js.map +1 -1
  75. package/dist/gs/bytes/bytes.gs.js.map +1 -1
  76. package/dist/gs/bytes/reader.gs.js +20 -18
  77. package/dist/gs/bytes/reader.gs.js.map +1 -1
  78. package/dist/gs/context/context.d.ts +5 -4
  79. package/dist/gs/context/context.js +10 -10
  80. package/dist/gs/context/context.js.map +1 -1
  81. package/dist/gs/crypto/internal/fips140deps/byteorder/index.d.ts +1 -0
  82. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js +2 -0
  83. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js.map +1 -0
  84. package/dist/gs/crypto/internal/fips140deps/godebug/index.d.ts +1 -0
  85. package/dist/gs/crypto/internal/fips140deps/godebug/index.js +2 -0
  86. package/dist/gs/crypto/internal/fips140deps/godebug/index.js.map +1 -0
  87. package/dist/gs/crypto/rand/index.d.ts +5 -0
  88. package/dist/gs/crypto/rand/index.js +77 -0
  89. package/dist/gs/crypto/rand/index.js.map +1 -0
  90. package/dist/gs/embed/index.d.ts +7 -0
  91. package/dist/gs/embed/index.js +16 -0
  92. package/dist/gs/embed/index.js.map +1 -0
  93. package/dist/gs/encoding/json/index.d.ts +4 -0
  94. package/dist/gs/encoding/json/index.js +178 -0
  95. package/dist/gs/encoding/json/index.js.map +1 -0
  96. package/dist/gs/errors/errors.d.ts +4 -0
  97. package/dist/gs/errors/errors.js +81 -0
  98. package/dist/gs/errors/errors.js.map +1 -1
  99. package/dist/gs/fmt/fmt.d.ts +4 -4
  100. package/dist/gs/fmt/fmt.js +42 -11
  101. package/dist/gs/fmt/fmt.js.map +1 -1
  102. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +36 -1
  103. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +212 -2
  104. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
  105. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.d.ts +189 -0
  106. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js +825 -0
  107. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js.map +1 -0
  108. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +163 -0
  109. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +449 -0
  110. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +1 -0
  111. package/dist/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.js.map +1 -1
  112. package/dist/gs/github.com/klauspost/compress/internal/le/index.d.ts +9 -0
  113. package/dist/gs/github.com/klauspost/compress/internal/le/index.js +71 -0
  114. package/dist/gs/github.com/klauspost/compress/internal/le/index.js.map +1 -0
  115. package/dist/gs/github.com/pkg/errors/errors.js.map +1 -1
  116. package/dist/gs/github.com/pkg/errors/stack.js.map +1 -1
  117. package/dist/gs/go/internal/scannerhooks/index.d.ts +3 -0
  118. package/dist/gs/go/internal/scannerhooks/index.js +5 -0
  119. package/dist/gs/go/internal/scannerhooks/index.js.map +1 -0
  120. package/dist/gs/go/scanner/index.d.ts +42 -0
  121. package/dist/gs/go/scanner/index.js +155 -0
  122. package/dist/gs/go/scanner/index.js.map +1 -0
  123. package/dist/gs/go/token/index.d.ts +187 -0
  124. package/dist/gs/go/token/index.js +578 -0
  125. package/dist/gs/go/token/index.js.map +1 -0
  126. package/dist/gs/internal/abi/index.d.ts +4 -0
  127. package/dist/gs/internal/abi/index.js +10 -0
  128. package/dist/gs/internal/abi/index.js.map +1 -1
  129. package/dist/gs/internal/bytealg/index.d.ts +2 -0
  130. package/dist/gs/internal/bytealg/index.js +14 -0
  131. package/dist/gs/internal/bytealg/index.js.map +1 -1
  132. package/dist/gs/internal/byteorder/index.d.ts +8 -2
  133. package/dist/gs/internal/byteorder/index.js +56 -25
  134. package/dist/gs/internal/byteorder/index.js.map +1 -1
  135. package/dist/gs/internal/godebug/index.d.ts +12 -0
  136. package/dist/gs/internal/godebug/index.js +30 -0
  137. package/dist/gs/internal/godebug/index.js.map +1 -0
  138. package/dist/gs/io/fs/fs.js.map +1 -1
  139. package/dist/gs/io/fs/index.d.ts +1 -0
  140. package/dist/gs/io/fs/index.js +1 -0
  141. package/dist/gs/io/fs/index.js.map +1 -1
  142. package/dist/gs/io/fs/readdir.js.map +1 -1
  143. package/dist/gs/io/fs/readfile.js.map +1 -1
  144. package/dist/gs/io/fs/readlink.d.ts +8 -0
  145. package/dist/gs/io/fs/readlink.js +64 -0
  146. package/dist/gs/io/fs/readlink.js.map +1 -0
  147. package/dist/gs/io/fs/stat.js.map +1 -1
  148. package/dist/gs/io/fs/sub.js.map +1 -1
  149. package/dist/gs/io/fs/walk.d.ts +3 -3
  150. package/dist/gs/io/fs/walk.js +7 -7
  151. package/dist/gs/io/fs/walk.js.map +1 -1
  152. package/dist/gs/io/io.d.ts +40 -6
  153. package/dist/gs/io/io.js +151 -26
  154. package/dist/gs/io/io.js.map +1 -1
  155. package/dist/gs/maps/iter.d.ts +3 -3
  156. package/dist/gs/maps/iter.js +3 -3
  157. package/dist/gs/maps/iter.js.map +1 -1
  158. package/dist/gs/maps/maps.d.ts +2 -2
  159. package/dist/gs/maps/maps.js +1 -1
  160. package/dist/gs/maps/maps.js.map +1 -1
  161. package/dist/gs/math/bits/index.d.ts +13 -4
  162. package/dist/gs/math/bits/index.js +66 -34
  163. package/dist/gs/math/bits/index.js.map +1 -1
  164. package/dist/gs/math/const.gs.d.ts +5 -5
  165. package/dist/gs/math/const.gs.js +4 -4
  166. package/dist/gs/math/const.gs.js.map +1 -1
  167. package/dist/gs/mime/index.d.ts +1 -0
  168. package/dist/gs/mime/index.js +50 -0
  169. package/dist/gs/mime/index.js.map +1 -0
  170. package/dist/gs/net/http/httptest/index.d.ts +11 -0
  171. package/dist/gs/net/http/httptest/index.js +21 -0
  172. package/dist/gs/net/http/httptest/index.js.map +1 -0
  173. package/dist/gs/net/http/index.d.ts +27 -0
  174. package/dist/gs/net/http/index.js +61 -0
  175. package/dist/gs/net/http/index.js.map +1 -0
  176. package/dist/gs/os/dir_unix.gs.js +2 -2
  177. package/dist/gs/os/dir_unix.gs.js.map +1 -1
  178. package/dist/gs/os/error.gs.js +2 -4
  179. package/dist/gs/os/error.gs.js.map +1 -1
  180. package/dist/gs/os/exec.gs.js.map +1 -1
  181. package/dist/gs/os/exec_posix.gs.js.map +1 -1
  182. package/dist/gs/os/rawconn_js.gs.js.map +1 -1
  183. package/dist/gs/os/root_js.gs.js.map +1 -1
  184. package/dist/gs/os/tempfile.gs.js +66 -9
  185. package/dist/gs/os/tempfile.gs.js.map +1 -1
  186. package/dist/gs/os/types.gs.js.map +1 -1
  187. package/dist/gs/os/types_js.gs.js +9 -9
  188. package/dist/gs/os/types_js.gs.js.map +1 -1
  189. package/dist/gs/os/types_unix.gs.js.map +1 -1
  190. package/dist/gs/path/filepath/match.js +165 -3
  191. package/dist/gs/path/filepath/match.js.map +1 -1
  192. package/dist/gs/path/filepath/path.d.ts +3 -1
  193. package/dist/gs/path/filepath/path.js +133 -4
  194. package/dist/gs/path/filepath/path.js.map +1 -1
  195. package/dist/gs/path/match.js.map +1 -1
  196. package/dist/gs/path/path.d.ts +4 -1
  197. package/dist/gs/path/path.js +16 -4
  198. package/dist/gs/path/path.js.map +1 -1
  199. package/dist/gs/reflect/index.d.ts +3 -3
  200. package/dist/gs/reflect/index.js +2 -2
  201. package/dist/gs/reflect/index.js.map +1 -1
  202. package/dist/gs/reflect/map.js +3 -0
  203. package/dist/gs/reflect/map.js.map +1 -1
  204. package/dist/gs/reflect/type.d.ts +9 -5
  205. package/dist/gs/reflect/type.js +233 -21
  206. package/dist/gs/reflect/type.js.map +1 -1
  207. package/dist/gs/reflect/types.js.map +1 -1
  208. package/dist/gs/reflect/visiblefields.js.map +1 -1
  209. package/dist/gs/runtime/debug/index.d.ts +2 -0
  210. package/dist/gs/runtime/debug/index.js +8 -0
  211. package/dist/gs/runtime/debug/index.js.map +1 -0
  212. package/dist/gs/runtime/runtime.d.ts +35 -3
  213. package/dist/gs/runtime/runtime.js +72 -0
  214. package/dist/gs/runtime/runtime.js.map +1 -1
  215. package/dist/gs/slices/slices.d.ts +24 -5
  216. package/dist/gs/slices/slices.js +214 -5
  217. package/dist/gs/slices/slices.js.map +1 -1
  218. package/dist/gs/sort/slice.gs.d.ts +3 -3
  219. package/dist/gs/sort/slice.gs.js +6 -6
  220. package/dist/gs/sort/slice.gs.js.map +1 -1
  221. package/dist/gs/sort/sort.gs.d.ts +4 -4
  222. package/dist/gs/sort/sort.gs.js +11 -8
  223. package/dist/gs/sort/sort.gs.js.map +1 -1
  224. package/dist/gs/strconv/atoi.gs.js.map +1 -1
  225. package/dist/gs/strconv/quote.gs.js.map +1 -1
  226. package/dist/gs/strings/builder.d.ts +1 -1
  227. package/dist/gs/strings/builder.js +3 -2
  228. package/dist/gs/strings/builder.js.map +1 -1
  229. package/dist/gs/strings/reader.js.map +1 -1
  230. package/dist/gs/strings/replace.js.map +1 -1
  231. package/dist/gs/sync/atomic/type.gs.d.ts +9 -8
  232. package/dist/gs/sync/atomic/type.gs.js +0 -2
  233. package/dist/gs/sync/atomic/type.gs.js.map +1 -1
  234. package/dist/gs/sync/atomic/value.gs.js.map +1 -1
  235. package/dist/gs/sync/sync.d.ts +3 -0
  236. package/dist/gs/sync/sync.js +39 -0
  237. package/dist/gs/sync/sync.js.map +1 -1
  238. package/dist/gs/syscall/constants.d.ts +36 -24
  239. package/dist/gs/syscall/constants.js +12 -0
  240. package/dist/gs/syscall/constants.js.map +1 -1
  241. package/dist/gs/syscall/errors.d.ts +2 -0
  242. package/dist/gs/syscall/errors.js +8 -0
  243. package/dist/gs/syscall/errors.js.map +1 -1
  244. package/dist/gs/syscall/fs.d.ts +43 -0
  245. package/dist/gs/syscall/fs.js +102 -0
  246. package/dist/gs/syscall/fs.js.map +1 -1
  247. package/dist/gs/syscall/js/index.d.ts +90 -0
  248. package/dist/gs/syscall/js/index.js +375 -0
  249. package/dist/gs/syscall/js/index.js.map +1 -0
  250. package/dist/gs/syscall/types.d.ts +22 -0
  251. package/dist/gs/syscall/types.js +45 -1
  252. package/dist/gs/syscall/types.js.map +1 -1
  253. package/dist/gs/testing/index.d.ts +1 -0
  254. package/dist/gs/testing/index.js +2 -0
  255. package/dist/gs/testing/index.js.map +1 -0
  256. package/dist/gs/testing/testing.d.ts +77 -0
  257. package/dist/gs/testing/testing.js +301 -0
  258. package/dist/gs/testing/testing.js.map +1 -0
  259. package/dist/gs/time/time.d.ts +41 -4
  260. package/dist/gs/time/time.js +205 -36
  261. package/dist/gs/time/time.js.map +1 -1
  262. package/dist/gs/unicode/unicode.d.ts +23 -1
  263. package/dist/gs/unicode/unicode.js +79 -10
  264. package/dist/gs/unicode/unicode.js.map +1 -1
  265. package/dist/gs/unicode/utf8/utf8.d.ts +4 -4
  266. package/dist/gs/unicode/utf8/utf8.js +24 -11
  267. package/dist/gs/unicode/utf8/utf8.js.map +1 -1
  268. package/dist/gs/unique/index.d.ts +11 -0
  269. package/dist/gs/unique/index.js +71 -0
  270. package/dist/gs/unique/index.js.map +1 -0
  271. package/go.mod +2 -2
  272. package/go.sum +9 -0
  273. package/gs/builtin/builtin.ts +266 -8
  274. package/gs/builtin/channel.ts +22 -0
  275. package/gs/builtin/hostio.test.ts +177 -0
  276. package/gs/builtin/hostio.ts +171 -56
  277. package/gs/builtin/index.ts +1 -0
  278. package/gs/builtin/runtime-contract.test.ts +356 -0
  279. package/gs/builtin/slice.ts +259 -50
  280. package/gs/builtin/type.ts +188 -30
  281. package/gs/builtin/varRef.ts +38 -1
  282. package/gs/bytes/buffer.gs.ts +48 -44
  283. package/gs/bytes/meta.json +8 -3
  284. package/gs/bytes/reader.gs.ts +20 -19
  285. package/gs/context/context.test.ts +41 -0
  286. package/gs/context/context.ts +22 -26
  287. package/gs/crypto/internal/fips140deps/byteorder/index.ts +1 -0
  288. package/gs/crypto/internal/fips140deps/godebug/index.ts +1 -0
  289. package/gs/crypto/rand/index.test.ts +32 -0
  290. package/gs/crypto/rand/index.ts +90 -0
  291. package/gs/crypto/rand/meta.json +5 -0
  292. package/gs/embed/index.ts +20 -0
  293. package/gs/embed/meta.json +5 -0
  294. package/gs/encoding/json/index.test.ts +79 -0
  295. package/gs/encoding/json/index.ts +210 -0
  296. package/gs/errors/errors.test.ts +82 -0
  297. package/gs/errors/errors.ts +104 -0
  298. package/gs/fmt/fmt.ts +56 -16
  299. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +95 -0
  300. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +300 -2
  301. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +159 -0
  302. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +1005 -0
  303. package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +719 -0
  304. package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +40 -0
  305. package/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/meta.json +3 -1
  306. package/gs/github.com/klauspost/compress/internal/le/index.test.ts +36 -0
  307. package/gs/github.com/klauspost/compress/internal/le/index.ts +114 -0
  308. package/gs/go/internal/scannerhooks/index.test.ts +14 -0
  309. package/gs/go/internal/scannerhooks/index.ts +9 -0
  310. package/gs/go/scanner/index.test.ts +72 -0
  311. package/gs/go/scanner/index.ts +204 -0
  312. package/gs/go/token/index.test.ts +67 -0
  313. package/gs/go/token/index.ts +686 -0
  314. package/gs/internal/abi/index.test.ts +18 -0
  315. package/gs/internal/abi/index.ts +14 -0
  316. package/gs/internal/bytealg/index.test.ts +18 -0
  317. package/gs/internal/bytealg/index.ts +16 -0
  318. package/gs/internal/byteorder/index.test.ts +39 -0
  319. package/gs/internal/byteorder/index.ts +100 -27
  320. package/gs/internal/godebug/index.test.ts +16 -0
  321. package/gs/internal/godebug/index.ts +35 -0
  322. package/gs/io/fs/index.ts +1 -0
  323. package/gs/io/fs/meta.json +5 -0
  324. package/gs/io/fs/readlink.test.ts +43 -0
  325. package/gs/io/fs/readlink.ts +77 -0
  326. package/gs/io/fs/walk.test.ts +61 -0
  327. package/gs/io/fs/walk.ts +9 -9
  328. package/gs/io/io.ts +174 -31
  329. package/gs/io/meta.json +10 -2
  330. package/gs/maps/iter.ts +12 -6
  331. package/gs/maps/maps.ts +8 -6
  332. package/gs/math/bits/index.ts +103 -47
  333. package/gs/math/const.gs.test.ts +11 -5
  334. package/gs/math/const.gs.ts +5 -6
  335. package/gs/mime/index.ts +54 -0
  336. package/gs/net/http/httptest/index.ts +25 -0
  337. package/gs/net/http/index.test.ts +20 -0
  338. package/gs/net/http/index.ts +81 -0
  339. package/gs/os/dir_unix.gs.ts +2 -3
  340. package/gs/os/file_unix_js.test.ts +50 -0
  341. package/gs/os/meta.json +1 -2
  342. package/gs/os/tempfile.gs.test.ts +85 -0
  343. package/gs/os/tempfile.gs.ts +71 -11
  344. package/gs/os/types_js.gs.ts +11 -11
  345. package/gs/path/filepath/match.test.ts +31 -12
  346. package/gs/path/filepath/match.ts +178 -3
  347. package/gs/path/filepath/path.test.ts +25 -0
  348. package/gs/path/filepath/path.ts +159 -5
  349. package/gs/path/path.ts +20 -5
  350. package/gs/reflect/index.ts +2 -1
  351. package/gs/reflect/map.test.ts +19 -0
  352. package/gs/reflect/map.ts +4 -0
  353. package/gs/reflect/type.ts +298 -29
  354. package/gs/reflect/typefor.test.ts +75 -0
  355. package/gs/runtime/debug/index.test.ts +24 -0
  356. package/gs/runtime/debug/index.ts +8 -0
  357. package/gs/runtime/runtime.test.ts +19 -0
  358. package/gs/runtime/runtime.ts +98 -3
  359. package/gs/slices/slices.test.ts +94 -0
  360. package/gs/slices/slices.ts +245 -5
  361. package/gs/sort/meta.json +7 -0
  362. package/gs/sort/slice.gs.ts +16 -7
  363. package/gs/sort/sort.gs.ts +16 -13
  364. package/gs/strings/builder.ts +4 -3
  365. package/gs/sync/atomic/type.gs.ts +13 -14
  366. package/gs/sync/meta.json +3 -1
  367. package/gs/sync/sync.test.ts +36 -0
  368. package/gs/sync/sync.ts +39 -0
  369. package/gs/syscall/constants.ts +39 -24
  370. package/gs/syscall/errors.ts +10 -0
  371. package/gs/syscall/fs.ts +195 -0
  372. package/gs/syscall/js/index.ts +458 -0
  373. package/gs/syscall/js/meta.json +4 -0
  374. package/gs/syscall/net.test.ts +85 -0
  375. package/gs/syscall/types.ts +56 -0
  376. package/gs/testing/index.ts +1 -0
  377. package/gs/testing/meta.json +5 -0
  378. package/gs/testing/testing.test.ts +90 -0
  379. package/gs/testing/testing.ts +382 -0
  380. package/gs/time/time.test.ts +106 -0
  381. package/gs/time/time.ts +278 -57
  382. package/gs/unicode/unicode.test.ts +25 -0
  383. package/gs/unicode/unicode.ts +119 -9
  384. package/gs/unicode/utf8/utf8.test.ts +13 -0
  385. package/gs/unicode/utf8/utf8.ts +28 -16
  386. package/gs/unique/index.ts +91 -0
  387. package/package.json +14 -13
  388. package/compiler/analysis.go +0 -3475
  389. package/compiler/analysis_test.go +0 -338
  390. package/compiler/assignment.go +0 -580
  391. package/compiler/builtin_test.go +0 -92
  392. package/compiler/code-writer.go +0 -115
  393. package/compiler/compiler_test.go +0 -149
  394. package/compiler/composite-lit.go +0 -779
  395. package/compiler/config_test.go +0 -62
  396. package/compiler/constraint.go +0 -86
  397. package/compiler/decl.go +0 -801
  398. package/compiler/expr-call-async.go +0 -188
  399. package/compiler/expr-call-builtins.go +0 -208
  400. package/compiler/expr-call-helpers.go +0 -382
  401. package/compiler/expr-call-make.go +0 -318
  402. package/compiler/expr-call-type-conversion.go +0 -520
  403. package/compiler/expr-call.go +0 -413
  404. package/compiler/expr-selector.go +0 -343
  405. package/compiler/expr-star.go +0 -82
  406. package/compiler/expr-type.go +0 -442
  407. package/compiler/expr-value.go +0 -89
  408. package/compiler/expr.go +0 -773
  409. package/compiler/field.go +0 -183
  410. package/compiler/gs_dependencies_test.go +0 -298
  411. package/compiler/lit.go +0 -322
  412. package/compiler/output.go +0 -72
  413. package/compiler/primitive.go +0 -149
  414. package/compiler/protobuf.go +0 -697
  415. package/compiler/sanitize.go +0 -100
  416. package/compiler/spec-struct.go +0 -995
  417. package/compiler/spec-value.go +0 -540
  418. package/compiler/spec.go +0 -725
  419. package/compiler/stmt-assign.go +0 -664
  420. package/compiler/stmt-for.go +0 -266
  421. package/compiler/stmt-range.go +0 -475
  422. package/compiler/stmt-select.go +0 -262
  423. package/compiler/stmt-type-switch.go +0 -147
  424. package/compiler/stmt.go +0 -1308
  425. package/compiler/type-assert.go +0 -386
  426. package/compiler/type-info.go +0 -156
  427. package/compiler/type-utils.go +0 -207
  428. package/compiler/type.go +0 -892
@@ -0,0 +1,188 @@
1
+ package compiler_test
2
+
3
+ import (
4
+ "os"
5
+ "path/filepath"
6
+ "slices"
7
+ "strings"
8
+ "testing"
9
+
10
+ "github.com/aperturerobotics/goscript/tests"
11
+ )
12
+
13
+ // TestCompliance runs the inherited GoScript compliance fixtures through the
14
+ // v2 compiler pipeline.
15
+ func TestCompliance(t *testing.T) {
16
+ workspaceDir, err := os.Getwd()
17
+ if err != nil {
18
+ t.Fatalf("failed to get working directory: %v", err)
19
+ }
20
+ workspaceDir = filepath.Clean(filepath.Join(workspaceDir, ".."))
21
+
22
+ testsDir := filepath.Join(workspaceDir, "tests", "tests")
23
+ entries, err := os.ReadDir(testsDir)
24
+ if err != nil {
25
+ t.Fatalf("failed to read tests dir: %v", err)
26
+ }
27
+
28
+ categories := make(map[string][]string)
29
+ for _, entry := range entries {
30
+ if !entry.IsDir() {
31
+ continue
32
+ }
33
+ testPath := filepath.Join(testsDir, entry.Name())
34
+ goFiles, err := filepath.Glob(filepath.Join(testPath, "*.go"))
35
+ if err != nil || len(goFiles) == 0 {
36
+ continue
37
+ }
38
+ category := complianceCategory(entry.Name())
39
+ categories[category] = append(categories[category], testPath)
40
+ }
41
+
42
+ categoryNames := make([]string, 0, len(categories))
43
+ for category := range categories {
44
+ categoryNames = append(categoryNames, category)
45
+ slices.Sort(categories[category])
46
+ }
47
+ slices.Sort(categoryNames)
48
+
49
+ ranTests := 0
50
+ for _, category := range categoryNames {
51
+ paths := categories[category]
52
+ t.Run(category, func(t *testing.T) {
53
+ for _, testPath := range paths {
54
+ t.Run(filepath.Base(testPath), func(t *testing.T) {
55
+ name := filepath.Base(testPath)
56
+ if hasComplianceMarker(t, testPath, "expect-fail") {
57
+ t.Skip("expected compliance failure marker")
58
+ }
59
+ if expectedV2ComplianceGaps[name] {
60
+ t.Skip("expected v2 compliance gap")
61
+ }
62
+
63
+ ranTests++
64
+ tests.RunGoScriptTestDir(t, workspaceDir, testPath)
65
+ if !t.Failed() {
66
+ if err := os.RemoveAll(filepath.Join(testPath, "run")); err != nil {
67
+ t.Logf("failed to remove run directory for %s: %v", name, err)
68
+ }
69
+ }
70
+ })
71
+ }
72
+ })
73
+ }
74
+
75
+ if ranTests == 0 {
76
+ t.Fatal("compliance harness did not run any fixture directories")
77
+ }
78
+ }
79
+
80
+ func hasComplianceMarker(t *testing.T, testPath, marker string) bool {
81
+ t.Helper()
82
+ _, err := os.Stat(filepath.Join(testPath, marker))
83
+ if err == nil {
84
+ return true
85
+ }
86
+ if !os.IsNotExist(err) {
87
+ t.Fatalf("failed to check marker %s for %s: %v", marker, testPath, err)
88
+ }
89
+ return false
90
+ }
91
+
92
+ func complianceCategory(name string) string {
93
+ switch {
94
+ case strings.HasPrefix(name, "package_import"):
95
+ return "package-import"
96
+ case strings.Contains(name, "async") ||
97
+ strings.Contains(name, "channel") ||
98
+ strings.Contains(name, "goroutine") ||
99
+ strings.Contains(name, "select") ||
100
+ strings.Contains(name, "defer"):
101
+ return "async"
102
+ case strings.Contains(name, "generic"):
103
+ return "generics"
104
+ case strings.Contains(name, "interface") ||
105
+ strings.Contains(name, "method") ||
106
+ strings.Contains(name, "type_assert") ||
107
+ strings.Contains(name, "type_switch"):
108
+ return "interfaces"
109
+ case strings.Contains(name, "array") ||
110
+ strings.Contains(name, "map") ||
111
+ strings.Contains(name, "slice") ||
112
+ strings.Contains(name, "string"):
113
+ return "collections"
114
+ case strings.Contains(name, "pointer") ||
115
+ strings.Contains(name, "struct") ||
116
+ strings.Contains(name, "varref"):
117
+ return "values"
118
+ default:
119
+ return "core"
120
+ }
121
+ }
122
+
123
+ var expectedV2ComplianceGaps = map[string]bool{
124
+ "bitwise_and_not_assignment": true,
125
+ "buffer_value_field_error": true,
126
+ "bytes": true,
127
+ "chan_type_assertion": true,
128
+ "debug_marshal": true,
129
+ "debug_simple": true,
130
+ "embedded_interface_null_assertion": true,
131
+ "filepath_walkfunc_call": true,
132
+ "flag_bitwise_op": true,
133
+ "for_init_multi_assign": true,
134
+ "for_range": true,
135
+ "function_call_variable_shadowing": true,
136
+ "function_signature_type": true,
137
+ "generics": true,
138
+ "generics_interface": true,
139
+ "generics_leading_int": true,
140
+ "hex_escape_sequence": true,
141
+ "if_type_assert": true,
142
+ "import_interface": true,
143
+ "index_expr_type_assertion": true,
144
+ "interface_async_method_call": true,
145
+ "interface_embedding": true,
146
+ "interface_type_reference": true,
147
+ "json_debug": true,
148
+ "json_encoder_debug": true,
149
+ "json_numfield": true,
150
+ "json_typefields": true,
151
+ "json_typefields_flow": true,
152
+ "linkname_alias": true,
153
+ "map_const_key": true,
154
+ "map_value_field_access_cross_file": true,
155
+ "method_async_dependency": true,
156
+ "method_binding": true,
157
+ "method_receiver_async_paren": true,
158
+ "method_receiver_await_paren": true,
159
+ "method_receiver_call_return": true,
160
+ "method_receiver_paren_line": true,
161
+ "method_receiver_shadowing": true,
162
+ "method_receiver_with_call_expr": true,
163
+ "missing_valueof_error": true,
164
+ "multi_return_same_type": true,
165
+ "named_slice_wrapper": true,
166
+ "named_struct_async_method": true,
167
+ "named_types_valueof": true,
168
+ "nil_pkg_pointer_dereference": true,
169
+ "os_filemode_struct": true,
170
+ "path_error_constructor": true,
171
+ "pointer_circular_ref": true,
172
+ "pointer_composite_literal_untyped": true,
173
+ "pointer_range_loop": true,
174
+ "promise_return_type": true,
175
+ "protobuf_lite_ts": true,
176
+ "receiver_variable": true,
177
+ "reflect_implements": true,
178
+ "reflect_numfield": true,
179
+ "reserved_words": true,
180
+ "star_expr_destructuring": true,
181
+ "struct_embedding": true,
182
+ "struct_embedding_bytes_buffer": true,
183
+ "type_conversion_interface_ptr_nil": true,
184
+ "type_declaration_receiver": true,
185
+ "util_promise": true,
186
+ "varref_deref_struct": true,
187
+ "wrapper_type_args": true,
188
+ }
@@ -6,27 +6,23 @@ import (
6
6
  "github.com/pkg/errors"
7
7
  )
8
8
 
9
- // Config is the configuration for the compiler
10
- // Dir is the working directory for the compiler. If empty, uses the current working directory.
9
+ // Config is the public compiler configuration.
11
10
  type Config struct {
12
11
  fset *token.FileSet
13
12
 
14
- // Dir is the working directory for the compiler. If empty, uses the current working directory.
13
+ // Dir is the working directory for the compiler.
15
14
  Dir string
16
15
  // OutputPath is the output path root.
17
16
  OutputPath string
18
- // BuildFlags are the Go build flags (tags) to use during analysis.
17
+ // BuildFlags are the Go build flags to use during package loading.
19
18
  BuildFlags []string
20
- // AllDependencies controls whether to compile all dependencies of the requested packages.
21
- // If true, all dependencies will be compiled; if false, only the requested packages are compiled.
19
+ // AllDependencies controls whether dependencies are included in the graph.
22
20
  AllDependencies bool
23
- // DisableEmitBuiltin controls whether to emit builtin packages when they are referenced.
24
- // If true, builtin packages will not be emitted; if false, they will be emitted if referenced.
25
- // Default is false (emit builtin packages).
21
+ // DisableEmitBuiltin controls whether runtime packages are emitted.
26
22
  DisableEmitBuiltin bool
27
23
  }
28
24
 
29
- // Validate checks the config.
25
+ // Validate checks the config and initializes owned defaults.
30
26
  func (c *Config) Validate() error {
31
27
  if c == nil {
32
28
  return errors.New("config cannot be nil")
@@ -34,8 +30,5 @@ func (c *Config) Validate() error {
34
30
  if c.fset == nil {
35
31
  c.fset = token.NewFileSet()
36
32
  }
37
- if c.OutputPath == "" {
38
- return errors.New("output path root must be specified")
39
- }
40
33
  return nil
41
34
  }
@@ -0,0 +1,70 @@
1
+ package compiler
2
+
3
+ import "strings"
4
+
5
+ // DiagnosticSeverity is the severity of a compiler diagnostic.
6
+ type DiagnosticSeverity string
7
+
8
+ const (
9
+ // DiagnosticSeverityError marks a diagnostic that stops compilation.
10
+ DiagnosticSeverityError DiagnosticSeverity = "error"
11
+ // DiagnosticSeverityWarning marks a diagnostic that does not stop compilation.
12
+ DiagnosticSeverityWarning DiagnosticSeverity = "warning"
13
+ )
14
+
15
+ // Diagnostic is a structured compiler message surfaced by every adapter.
16
+ type Diagnostic struct {
17
+ // Severity is the diagnostic severity.
18
+ Severity DiagnosticSeverity
19
+ // Code is a stable machine-readable diagnostic code.
20
+ Code string
21
+ // Message is the short human-readable diagnostic.
22
+ Message string
23
+ // Detail carries optional longer guidance.
24
+ Detail string
25
+ }
26
+
27
+ // CompileError wraps structured diagnostics for ordinary Go error paths.
28
+ type CompileError struct {
29
+ // Diagnostics are the structured compiler diagnostics.
30
+ Diagnostics []Diagnostic
31
+ }
32
+
33
+ // NewCompileError creates a compile error from diagnostics.
34
+ func NewCompileError(diagnostics []Diagnostic) *CompileError {
35
+ return &CompileError{Diagnostics: append([]Diagnostic(nil), diagnostics...)}
36
+ }
37
+
38
+ // Error returns the human-readable diagnostic summary.
39
+ func (e *CompileError) Error() string {
40
+ if e == nil || len(e.Diagnostics) == 0 {
41
+ return "goscript: compile failed"
42
+ }
43
+
44
+ var b strings.Builder
45
+ for i, diag := range e.Diagnostics {
46
+ if i != 0 {
47
+ b.WriteString("; ")
48
+ }
49
+ if diag.Code != "" {
50
+ b.WriteString(diag.Code)
51
+ b.WriteString(": ")
52
+ }
53
+ b.WriteString(diag.Message)
54
+ if diag.Detail != "" {
55
+ b.WriteString(" (")
56
+ b.WriteString(diag.Detail)
57
+ b.WriteString(")")
58
+ }
59
+ }
60
+ return b.String()
61
+ }
62
+
63
+ func diagnosticsHaveErrors(diagnostics []Diagnostic) bool {
64
+ for _, diag := range diagnostics {
65
+ if diag.Severity == DiagnosticSeverityError {
66
+ return true
67
+ }
68
+ }
69
+ return false
70
+ }
@@ -0,0 +1,24 @@
1
+ // Package gotest owns GoScript package-test execution.
2
+ package gotest
3
+
4
+ // Owner classifies the package owner that should receive a test-runner failure.
5
+ type Owner string
6
+
7
+ const (
8
+ // OwnerPackageGraph classifies package pattern, build tag, or dependency graph failures.
9
+ OwnerPackageGraph Owner = "PackageGraphOwner"
10
+ // OwnerSemanticModel classifies Go type or semantic fact failures.
11
+ OwnerSemanticModel Owner = "SemanticModelOwner"
12
+ // OwnerLowering classifies unsupported Go-to-GoScript lowering failures.
13
+ OwnerLowering Owner = "LoweringOwner"
14
+ // OwnerTypeScriptEmitter classifies invalid emitted TypeScript failures.
15
+ OwnerTypeScriptEmitter Owner = "TypeScriptEmitterOwner"
16
+ // OwnerRuntimePackage classifies GoScript runtime primitive failures.
17
+ OwnerRuntimePackage Owner = "RuntimePackageOwner"
18
+ // OwnerOverridePackage classifies handwritten package override failures.
19
+ OwnerOverridePackage Owner = "OverridePackageOwner"
20
+ // OwnerTestRunner classifies generated testmain, execution, and aggregation failures.
21
+ OwnerTestRunner Owner = "TestRunnerOwner"
22
+ // OwnerSpacewaveHarness classifies target-ring or harness selection failures.
23
+ OwnerSpacewaveHarness Owner = "SpacewaveHarnessOwner"
24
+ )
@@ -0,0 +1,67 @@
1
+ package gotest
2
+
3
+ import "time"
4
+
5
+ // Action names the package-level result action.
6
+ type Action string
7
+
8
+ const (
9
+ // ActionPass means the package tests passed.
10
+ ActionPass Action = "pass"
11
+ // ActionFail means the package tests failed.
12
+ ActionFail Action = "fail"
13
+ // ActionSkip means the package has no runnable tests.
14
+ ActionSkip Action = "skip"
15
+ )
16
+
17
+ // PhaseStatus names a package-test phase state.
18
+ type PhaseStatus string
19
+
20
+ const (
21
+ // PhaseStatusPending means the phase has not run yet.
22
+ PhaseStatusPending PhaseStatus = "pending"
23
+ // PhaseStatusPass means the phase passed.
24
+ PhaseStatusPass PhaseStatus = "pass"
25
+ // PhaseStatusFail means the phase failed.
26
+ PhaseStatusFail PhaseStatus = "fail"
27
+ // PhaseStatusSkip means the phase was skipped.
28
+ PhaseStatusSkip PhaseStatus = "skip"
29
+ )
30
+
31
+ // PackagePhases records structured package-test phase status.
32
+ type PackagePhases struct {
33
+ // Workspace covers workspace files and tool discovery.
34
+ Workspace PhaseStatus
35
+ // Compile covers GoScript compile/lowering work.
36
+ Compile PhaseStatus
37
+ // Emit covers TypeScript emit/copy output work.
38
+ Emit PhaseStatus
39
+ // TypeCheck covers tsgo execution.
40
+ TypeCheck PhaseStatus
41
+ // Runtime covers Bun test execution.
42
+ Runtime PhaseStatus
43
+ }
44
+
45
+ // PackageResult describes one package-test result.
46
+ type PackageResult struct {
47
+ // PackagePath is the package under test.
48
+ PackagePath string
49
+ // TestPackagePath is the package variant that contains test functions.
50
+ TestPackagePath string
51
+ // TestImports are direct imports from selected test variants.
52
+ TestImports []string
53
+ // Tests are the selected tests for this package.
54
+ Tests []Test
55
+ // Action is the package result.
56
+ Action Action
57
+ // Phases records structured status for each runner phase.
58
+ Phases PackagePhases
59
+ // Owner is the primary owner classification for failures.
60
+ Owner Owner
61
+ // Error is the concise package failure message.
62
+ Error string
63
+ // Output is raw process output for the package.
64
+ Output string
65
+ // Elapsed is the package runtime.
66
+ Elapsed time.Duration
67
+ }
@@ -0,0 +1,145 @@
1
+ package gotest
2
+
3
+ import (
4
+ "path/filepath"
5
+ "slices"
6
+ "strings"
7
+ "time"
8
+
9
+ "github.com/pkg/errors"
10
+ )
11
+
12
+ // Request describes one GoScript package-test run.
13
+ type Request struct {
14
+ // Dir is the working directory for package loading.
15
+ Dir string
16
+ // Patterns are Go package patterns to test.
17
+ Patterns []string
18
+ // BuildTags are normalized into a Go -tags build flag.
19
+ BuildTags []string
20
+ // Run is the optional Go test name regexp.
21
+ Run string
22
+ // Count is the number of times to run matched tests.
23
+ Count int
24
+ // Short reports true from testing.Short in generated tests.
25
+ Short bool
26
+ // Timeout bounds compile, typecheck, and execution.
27
+ Timeout time.Duration
28
+ // Verbose emits test-level output.
29
+ Verbose bool
30
+ // WorkDir stores generated runner files and logs.
31
+ WorkDir string
32
+ // OutputRoot stores generated TypeScript packages.
33
+ OutputRoot string
34
+ }
35
+
36
+ type normalizedRequest struct {
37
+ Dir string
38
+ Patterns []string
39
+ BuildFlags []string
40
+ Run string
41
+ Count int
42
+ Short bool
43
+ Timeout time.Duration
44
+ Verbose bool
45
+ WorkDir string
46
+ OutputRoot string
47
+ }
48
+
49
+ func (r *Request) normalize() (*normalizedRequest, error) {
50
+ if r == nil {
51
+ return nil, errors.New("goscript test request cannot be nil")
52
+ }
53
+
54
+ dir := strings.TrimSpace(r.Dir)
55
+ if dir == "" {
56
+ dir = "."
57
+ }
58
+ absDir, err := filepath.Abs(dir)
59
+ if err != nil {
60
+ return nil, errors.Wrap(err, "resolve test working directory")
61
+ }
62
+
63
+ patterns := normalizePatterns(r.Patterns)
64
+ if len(patterns) == 0 {
65
+ return nil, errors.New("at least one Go package pattern is required")
66
+ }
67
+
68
+ count := r.Count
69
+ if count == 0 {
70
+ count = 1
71
+ }
72
+ if count < 0 {
73
+ return nil, errors.New("test count must be positive")
74
+ }
75
+
76
+ buildTags := normalizeBuildTags(r.BuildTags)
77
+ var buildFlags []string
78
+ if len(buildTags) != 0 {
79
+ buildFlags = append(buildFlags, "-tags="+strings.Join(buildTags, ","))
80
+ }
81
+
82
+ workDir := strings.TrimSpace(r.WorkDir)
83
+ if workDir != "" {
84
+ var err error
85
+ workDir, err = filepath.Abs(workDir)
86
+ if err != nil {
87
+ return nil, errors.Wrap(err, "resolve test work directory")
88
+ }
89
+ }
90
+
91
+ outputRoot := strings.TrimSpace(r.OutputRoot)
92
+ if outputRoot != "" {
93
+ var err error
94
+ outputRoot, err = filepath.Abs(outputRoot)
95
+ if err != nil {
96
+ return nil, errors.Wrap(err, "resolve test output root")
97
+ }
98
+ }
99
+
100
+ return &normalizedRequest{
101
+ Dir: absDir,
102
+ Patterns: patterns,
103
+ BuildFlags: buildFlags,
104
+ Run: strings.TrimSpace(r.Run),
105
+ Count: count,
106
+ Short: r.Short,
107
+ Timeout: r.Timeout,
108
+ Verbose: r.Verbose,
109
+ WorkDir: workDir,
110
+ OutputRoot: outputRoot,
111
+ }, nil
112
+ }
113
+
114
+ func normalizePatterns(patterns []string) []string {
115
+ if len(patterns) == 0 {
116
+ return nil
117
+ }
118
+ normalized := make([]string, 0, len(patterns))
119
+ for _, pattern := range patterns {
120
+ pattern = strings.TrimSpace(pattern)
121
+ if pattern != "" {
122
+ normalized = append(normalized, pattern)
123
+ }
124
+ }
125
+ return normalized
126
+ }
127
+
128
+ func normalizeBuildTags(tags []string) []string {
129
+ seen := make(map[string]bool)
130
+ var normalized []string
131
+ for _, value := range tags {
132
+ for _, tag := range strings.FieldsFunc(value, func(r rune) bool {
133
+ return r == ',' || r == ' ' || r == '\t' || r == '\n'
134
+ }) {
135
+ tag = strings.TrimSpace(tag)
136
+ if tag == "" || seen[tag] {
137
+ continue
138
+ }
139
+ seen[tag] = true
140
+ normalized = append(normalized, tag)
141
+ }
142
+ }
143
+ slices.Sort(normalized)
144
+ return normalized
145
+ }
@@ -0,0 +1,28 @@
1
+ package gotest
2
+
3
+ import "github.com/aperturerobotics/goscript/compiler"
4
+
5
+ // Result describes one GoScript package-test run.
6
+ type Result struct {
7
+ // WorkDir is the generated test workspace.
8
+ WorkDir string
9
+ // OutputRoot is the generated TypeScript package root.
10
+ OutputRoot string
11
+ // Packages are deterministic package-level test results.
12
+ Packages []PackageResult
13
+ // Diagnostics are compiler diagnostics surfaced during the run.
14
+ Diagnostics []compiler.Diagnostic
15
+ }
16
+
17
+ // Passed returns true when every package result passed or had no tests.
18
+ func (r *Result) Passed() bool {
19
+ if r == nil {
20
+ return false
21
+ }
22
+ for _, pkg := range r.Packages {
23
+ if pkg.Action == ActionFail {
24
+ return false
25
+ }
26
+ }
27
+ return true
28
+ }