goscript 0.1.0 → 0.1.2

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 (495) hide show
  1. package/README.md +267 -255
  2. package/cmd/goscript/cmd-test.go +286 -0
  3. package/cmd/goscript/cmd-test_test.go +76 -0
  4. package/cmd/goscript/cmd_compile.go +9 -0
  5. package/cmd/goscript/main.go +1 -0
  6. package/compiler/build-flags.go +38 -0
  7. package/compiler/compile-request.go +33 -0
  8. package/compiler/compiler.go +1 -1
  9. package/compiler/compliance_test.go +0 -10
  10. package/compiler/config.go +2 -0
  11. package/compiler/gotest/owner.go +24 -0
  12. package/compiler/gotest/package-result.go +69 -0
  13. package/compiler/gotest/request.go +210 -0
  14. package/compiler/gotest/result.go +28 -0
  15. package/compiler/gotest/runner.go +1225 -0
  16. package/compiler/gotest/runner_test.go +1271 -0
  17. package/compiler/gotest/test.go +9 -0
  18. package/compiler/index.test.ts +1 -1
  19. package/compiler/lowered-program.go +80 -21
  20. package/compiler/lowering.go +6754 -602
  21. package/compiler/override-facts.go +357 -0
  22. package/compiler/override-registry.go +52 -190
  23. package/compiler/override-registry_test.go +182 -0
  24. package/compiler/package-graph.go +50 -27
  25. package/compiler/package-graph_test.go +99 -9
  26. package/compiler/package-test-function.go +9 -0
  27. package/compiler/package-test-graph-package.go +40 -0
  28. package/compiler/package-test-graph-variant.go +129 -0
  29. package/compiler/package-test-graph.go +112 -0
  30. package/compiler/package-test-graph_test.go +202 -0
  31. package/compiler/runtime-contract.go +229 -29
  32. package/compiler/runtime-contract_test.go +44 -30
  33. package/compiler/semantic-model-types.go +25 -6
  34. package/compiler/semantic-model.go +819 -74
  35. package/compiler/semantic-model_test.go +104 -0
  36. package/compiler/service.go +10 -4
  37. package/compiler/skeleton_test.go +2777 -524
  38. package/compiler/tsworkspace/owner-process-unix_test.go +72 -0
  39. package/compiler/tsworkspace/owner.go +342 -0
  40. package/compiler/tsworkspace/owner_test.go +93 -0
  41. package/compiler/tsworkspace/result.go +17 -0
  42. package/compiler/tsworkspace/tool-process-other.go +14 -0
  43. package/compiler/tsworkspace/tool-process-unix.go +19 -0
  44. package/compiler/typescript-emitter.go +576 -86
  45. package/compiler/wasm/compile.go +1 -1
  46. package/compiler/wasm/compile_test.go +61 -11
  47. package/compiler/wasm_api.go +172 -7
  48. package/dist/gs/builtin/builtin.d.ts +40 -3
  49. package/dist/gs/builtin/builtin.js +430 -22
  50. package/dist/gs/builtin/builtin.js.map +1 -1
  51. package/dist/gs/builtin/channel.d.ts +32 -10
  52. package/dist/gs/builtin/channel.js +119 -25
  53. package/dist/gs/builtin/channel.js.map +1 -1
  54. package/dist/gs/builtin/defer.d.ts +1 -0
  55. package/dist/gs/builtin/defer.js +12 -2
  56. package/dist/gs/builtin/defer.js.map +1 -1
  57. package/dist/gs/builtin/hostio.d.ts +9 -0
  58. package/dist/gs/builtin/hostio.js +25 -0
  59. package/dist/gs/builtin/hostio.js.map +1 -1
  60. package/dist/gs/builtin/map.js +40 -6
  61. package/dist/gs/builtin/map.js.map +1 -1
  62. package/dist/gs/builtin/print.js.map +1 -1
  63. package/dist/gs/builtin/slice.d.ts +64 -10
  64. package/dist/gs/builtin/slice.js +619 -244
  65. package/dist/gs/builtin/slice.js.map +1 -1
  66. package/dist/gs/builtin/type.d.ts +7 -2
  67. package/dist/gs/builtin/type.js +128 -29
  68. package/dist/gs/builtin/type.js.map +1 -1
  69. package/dist/gs/builtin/varRef.d.ts +7 -0
  70. package/dist/gs/builtin/varRef.js +23 -0
  71. package/dist/gs/builtin/varRef.js.map +1 -1
  72. package/dist/gs/bytes/buffer.gs.js +74 -70
  73. package/dist/gs/bytes/buffer.gs.js.map +1 -1
  74. package/dist/gs/bytes/iter.gs.js +13 -13
  75. package/dist/gs/bytes/iter.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/compress/zlib/index.d.ts +26 -0
  79. package/dist/gs/compress/zlib/index.js +168 -0
  80. package/dist/gs/compress/zlib/index.js.map +1 -0
  81. package/dist/gs/context/context.d.ts +6 -5
  82. package/dist/gs/context/context.js +17 -12
  83. package/dist/gs/context/context.js.map +1 -1
  84. package/dist/gs/crypto/ecdh/index.d.ts +52 -0
  85. package/dist/gs/crypto/ecdh/index.js +226 -0
  86. package/dist/gs/crypto/ecdh/index.js.map +1 -0
  87. package/dist/gs/crypto/ed25519/index.d.ts +34 -0
  88. package/dist/gs/crypto/ed25519/index.js +160 -0
  89. package/dist/gs/crypto/ed25519/index.js.map +1 -0
  90. package/dist/gs/crypto/internal/constanttime/index.d.ts +4 -0
  91. package/dist/gs/crypto/internal/constanttime/index.js +18 -0
  92. package/dist/gs/crypto/internal/constanttime/index.js.map +1 -0
  93. package/dist/gs/crypto/internal/fips140deps/byteorder/index.d.ts +1 -0
  94. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js +2 -0
  95. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js.map +1 -0
  96. package/dist/gs/crypto/internal/fips140deps/godebug/index.d.ts +1 -0
  97. package/dist/gs/crypto/internal/fips140deps/godebug/index.js +2 -0
  98. package/dist/gs/crypto/internal/fips140deps/godebug/index.js.map +1 -0
  99. package/dist/gs/crypto/rand/index.d.ts +2 -0
  100. package/dist/gs/crypto/rand/index.js +85 -0
  101. package/dist/gs/crypto/rand/index.js.map +1 -1
  102. package/dist/gs/crypto/sha256/index.d.ts +8 -0
  103. package/dist/gs/crypto/sha256/index.js +118 -0
  104. package/dist/gs/crypto/sha256/index.js.map +1 -0
  105. package/dist/gs/crypto/sha512/index.d.ts +14 -0
  106. package/dist/gs/crypto/sha512/index.js +129 -0
  107. package/dist/gs/crypto/sha512/index.js.map +1 -0
  108. package/dist/gs/embed/index.d.ts +7 -0
  109. package/dist/gs/embed/index.js +16 -0
  110. package/dist/gs/embed/index.js.map +1 -0
  111. package/dist/gs/encoding/json/index.d.ts +4 -0
  112. package/dist/gs/encoding/json/index.js +33 -0
  113. package/dist/gs/encoding/json/index.js.map +1 -1
  114. package/dist/gs/errors/errors.d.ts +4 -0
  115. package/dist/gs/errors/errors.js +108 -4
  116. package/dist/gs/errors/errors.js.map +1 -1
  117. package/dist/gs/fmt/fmt.d.ts +4 -4
  118. package/dist/gs/fmt/fmt.js +42 -11
  119. package/dist/gs/fmt/fmt.js.map +1 -1
  120. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +37 -2
  121. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +245 -1
  122. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
  123. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.d.ts +189 -0
  124. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js +861 -0
  125. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js.map +1 -0
  126. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +217 -0
  127. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +814 -0
  128. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +1 -0
  129. package/dist/gs/github.com/aperturerobotics/util/conc/index.d.ts +20 -0
  130. package/dist/gs/github.com/aperturerobotics/util/conc/index.js +134 -0
  131. package/dist/gs/github.com/aperturerobotics/util/conc/index.js.map +1 -0
  132. package/dist/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.js.map +1 -1
  133. package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.d.ts +3 -0
  134. package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.js +50 -0
  135. package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.js.map +1 -0
  136. package/dist/gs/github.com/klauspost/compress/internal/le/index.d.ts +9 -0
  137. package/dist/gs/github.com/klauspost/compress/internal/le/index.js +72 -0
  138. package/dist/gs/github.com/klauspost/compress/internal/le/index.js.map +1 -0
  139. package/dist/gs/github.com/mr-tron/base58/base58/index.d.ts +27 -0
  140. package/dist/gs/github.com/mr-tron/base58/base58/index.js +172 -0
  141. package/dist/gs/github.com/mr-tron/base58/base58/index.js.map +1 -0
  142. package/dist/gs/github.com/zeebo/blake3/internal/consts/index.d.ts +21 -0
  143. package/dist/gs/github.com/zeebo/blake3/internal/consts/index.js +22 -0
  144. package/dist/gs/github.com/zeebo/blake3/internal/consts/index.js.map +1 -0
  145. package/dist/gs/go/internal/scannerhooks/index.d.ts +3 -0
  146. package/dist/gs/go/internal/scannerhooks/index.js +5 -0
  147. package/dist/gs/go/internal/scannerhooks/index.js.map +1 -0
  148. package/dist/gs/go/scanner/index.d.ts +13 -0
  149. package/dist/gs/go/scanner/index.js +35 -0
  150. package/dist/gs/go/scanner/index.js.map +1 -1
  151. package/dist/gs/go/token/index.d.ts +156 -0
  152. package/dist/gs/go/token/index.js +507 -4
  153. package/dist/gs/go/token/index.js.map +1 -1
  154. package/dist/gs/hash/fnv/index.d.ts +57 -0
  155. package/dist/gs/hash/fnv/index.js +299 -0
  156. package/dist/gs/hash/fnv/index.js.map +1 -0
  157. package/dist/gs/hash/index.d.ts +17 -0
  158. package/dist/gs/hash/index.js +94 -0
  159. package/dist/gs/hash/index.js.map +1 -0
  160. package/dist/gs/internal/abi/index.d.ts +4 -0
  161. package/dist/gs/internal/abi/index.js +10 -0
  162. package/dist/gs/internal/abi/index.js.map +1 -1
  163. package/dist/gs/internal/bytealg/index.d.ts +2 -0
  164. package/dist/gs/internal/bytealg/index.js +14 -0
  165. package/dist/gs/internal/bytealg/index.js.map +1 -1
  166. package/dist/gs/internal/byteorder/index.d.ts +8 -2
  167. package/dist/gs/internal/byteorder/index.js +56 -25
  168. package/dist/gs/internal/byteorder/index.js.map +1 -1
  169. package/dist/gs/internal/godebug/index.d.ts +12 -0
  170. package/dist/gs/internal/godebug/index.js +30 -0
  171. package/dist/gs/internal/godebug/index.js.map +1 -0
  172. package/dist/gs/io/fs/index.d.ts +1 -0
  173. package/dist/gs/io/fs/index.js +1 -0
  174. package/dist/gs/io/fs/index.js.map +1 -1
  175. package/dist/gs/io/fs/readlink.d.ts +8 -0
  176. package/dist/gs/io/fs/readlink.js +60 -0
  177. package/dist/gs/io/fs/readlink.js.map +1 -0
  178. package/dist/gs/io/fs/walk.d.ts +3 -3
  179. package/dist/gs/io/fs/walk.js +7 -7
  180. package/dist/gs/io/fs/walk.js.map +1 -1
  181. package/dist/gs/io/io.d.ts +40 -6
  182. package/dist/gs/io/io.js +151 -26
  183. package/dist/gs/io/io.js.map +1 -1
  184. package/dist/gs/iter/iter.d.ts +3 -2
  185. package/dist/gs/iter/iter.js.map +1 -1
  186. package/dist/gs/maps/iter.d.ts +5 -5
  187. package/dist/gs/maps/iter.js +48 -21
  188. package/dist/gs/maps/iter.js.map +1 -1
  189. package/dist/gs/maps/maps.d.ts +6 -6
  190. package/dist/gs/maps/maps.js +1 -1
  191. package/dist/gs/maps/maps.js.map +1 -1
  192. package/dist/gs/math/bits/index.d.ts +13 -4
  193. package/dist/gs/math/bits/index.js +70 -48
  194. package/dist/gs/math/bits/index.js.map +1 -1
  195. package/dist/gs/math/const.gs.d.ts +5 -5
  196. package/dist/gs/math/const.gs.js +4 -4
  197. package/dist/gs/math/const.gs.js.map +1 -1
  198. package/dist/gs/mime/index.d.ts +1 -0
  199. package/dist/gs/mime/index.js +52 -0
  200. package/dist/gs/mime/index.js.map +1 -0
  201. package/dist/gs/net/http/httptest/index.d.ts +30 -0
  202. package/dist/gs/net/http/httptest/index.js +101 -0
  203. package/dist/gs/net/http/httptest/index.js.map +1 -0
  204. package/dist/gs/net/http/index.d.ts +131 -0
  205. package/dist/gs/net/http/index.js +307 -0
  206. package/dist/gs/net/http/index.js.map +1 -0
  207. package/dist/gs/net/http/pprof/index.d.ts +8 -0
  208. package/dist/gs/net/http/pprof/index.js +59 -0
  209. package/dist/gs/net/http/pprof/index.js.map +1 -0
  210. package/dist/gs/os/dir_unix.gs.js +2 -2
  211. package/dist/gs/os/dir_unix.gs.js.map +1 -1
  212. package/dist/gs/os/error.gs.js +9 -7
  213. package/dist/gs/os/error.gs.js.map +1 -1
  214. package/dist/gs/os/types_js.gs.js +95 -15
  215. package/dist/gs/os/types_js.gs.js.map +1 -1
  216. package/dist/gs/path/filepath/match.js +165 -3
  217. package/dist/gs/path/filepath/match.js.map +1 -1
  218. package/dist/gs/path/filepath/path.d.ts +8 -4
  219. package/dist/gs/path/filepath/path.js +192 -8
  220. package/dist/gs/path/filepath/path.js.map +1 -1
  221. package/dist/gs/path/path.d.ts +4 -1
  222. package/dist/gs/path/path.js +16 -4
  223. package/dist/gs/path/path.js.map +1 -1
  224. package/dist/gs/reflect/index.d.ts +4 -3
  225. package/dist/gs/reflect/index.js +3 -2
  226. package/dist/gs/reflect/index.js.map +1 -1
  227. package/dist/gs/reflect/iter.js +2 -2
  228. package/dist/gs/reflect/iter.js.map +1 -1
  229. package/dist/gs/reflect/map.js +29 -0
  230. package/dist/gs/reflect/map.js.map +1 -1
  231. package/dist/gs/reflect/type.d.ts +31 -9
  232. package/dist/gs/reflect/type.js +536 -43
  233. package/dist/gs/reflect/type.js.map +1 -1
  234. package/dist/gs/reflect/types.d.ts +1 -0
  235. package/dist/gs/reflect/types.js +3 -1
  236. package/dist/gs/reflect/types.js.map +1 -1
  237. package/dist/gs/reflect/value.d.ts +4 -1
  238. package/dist/gs/reflect/value.js +39 -1
  239. package/dist/gs/reflect/value.js.map +1 -1
  240. package/dist/gs/reflect/visiblefields.js +1 -1
  241. package/dist/gs/reflect/visiblefields.js.map +1 -1
  242. package/dist/gs/runtime/debug/index.d.ts +41 -0
  243. package/dist/gs/runtime/debug/index.js +66 -0
  244. package/dist/gs/runtime/debug/index.js.map +1 -0
  245. package/dist/gs/runtime/pprof/index.d.ts +20 -0
  246. package/dist/gs/runtime/pprof/index.js +85 -0
  247. package/dist/gs/runtime/pprof/index.js.map +1 -0
  248. package/dist/gs/runtime/runtime.d.ts +35 -3
  249. package/dist/gs/runtime/runtime.js +72 -0
  250. package/dist/gs/runtime/runtime.js.map +1 -1
  251. package/dist/gs/runtime/trace/index.d.ts +19 -0
  252. package/dist/gs/runtime/trace/index.js +64 -0
  253. package/dist/gs/runtime/trace/index.js.map +1 -0
  254. package/dist/gs/slices/slices.d.ts +42 -8
  255. package/dist/gs/slices/slices.js +425 -11
  256. package/dist/gs/slices/slices.js.map +1 -1
  257. package/dist/gs/sort/slice.gs.d.ts +5 -3
  258. package/dist/gs/sort/slice.gs.js +60 -22
  259. package/dist/gs/sort/slice.gs.js.map +1 -1
  260. package/dist/gs/sort/sort.gs.d.ts +4 -4
  261. package/dist/gs/sort/sort.gs.js +11 -8
  262. package/dist/gs/sort/sort.gs.js.map +1 -1
  263. package/dist/gs/strings/builder.d.ts +1 -1
  264. package/dist/gs/strings/builder.js +29 -19
  265. package/dist/gs/strings/builder.js.map +1 -1
  266. package/dist/gs/strings/iter.js +140 -75
  267. package/dist/gs/strings/iter.js.map +1 -1
  268. package/dist/gs/strings/replace.js +2 -2
  269. package/dist/gs/strings/replace.js.map +1 -1
  270. package/dist/gs/strings/strings.js +52 -6
  271. package/dist/gs/strings/strings.js.map +1 -1
  272. package/dist/gs/sync/atomic/type.gs.d.ts +9 -8
  273. package/dist/gs/sync/atomic/type.gs.js +0 -2
  274. package/dist/gs/sync/atomic/type.gs.js.map +1 -1
  275. package/dist/gs/sync/sync.d.ts +8 -3
  276. package/dist/gs/sync/sync.js +66 -11
  277. package/dist/gs/sync/sync.js.map +1 -1
  278. package/dist/gs/syscall/constants.d.ts +36 -24
  279. package/dist/gs/syscall/constants.js +12 -0
  280. package/dist/gs/syscall/constants.js.map +1 -1
  281. package/dist/gs/syscall/errors.d.ts +117 -111
  282. package/dist/gs/syscall/errors.js +45 -0
  283. package/dist/gs/syscall/errors.js.map +1 -1
  284. package/dist/gs/syscall/fs.d.ts +37 -0
  285. package/dist/gs/syscall/fs.js +102 -0
  286. package/dist/gs/syscall/fs.js.map +1 -1
  287. package/dist/gs/syscall/js/index.d.ts +90 -0
  288. package/dist/gs/syscall/js/index.js +383 -0
  289. package/dist/gs/syscall/js/index.js.map +1 -0
  290. package/dist/gs/syscall/types.d.ts +26 -1
  291. package/dist/gs/syscall/types.js +45 -1
  292. package/dist/gs/syscall/types.js.map +1 -1
  293. package/dist/gs/testing/index.d.ts +1 -0
  294. package/dist/gs/testing/index.js +2 -0
  295. package/dist/gs/testing/index.js.map +1 -0
  296. package/dist/gs/testing/testing.d.ts +78 -0
  297. package/dist/gs/testing/testing.js +318 -0
  298. package/dist/gs/testing/testing.js.map +1 -0
  299. package/dist/gs/time/time.d.ts +41 -4
  300. package/dist/gs/time/time.js +227 -36
  301. package/dist/gs/time/time.js.map +1 -1
  302. package/dist/gs/unicode/unicode.d.ts +23 -1
  303. package/dist/gs/unicode/unicode.js +79 -10
  304. package/dist/gs/unicode/unicode.js.map +1 -1
  305. package/dist/gs/unicode/utf8/utf8.d.ts +4 -4
  306. package/dist/gs/unicode/utf8/utf8.js +24 -11
  307. package/dist/gs/unicode/utf8/utf8.js.map +1 -1
  308. package/dist/gs/unique/index.d.ts +11 -0
  309. package/dist/gs/unique/index.js +76 -0
  310. package/dist/gs/unique/index.js.map +1 -0
  311. package/go.mod +8 -8
  312. package/go.sum +14 -14
  313. package/gs/builtin/builtin.ts +585 -27
  314. package/gs/builtin/channel.ts +183 -29
  315. package/gs/builtin/defer.ts +13 -2
  316. package/gs/builtin/hostio.test.ts +1 -0
  317. package/gs/builtin/hostio.ts +38 -0
  318. package/gs/builtin/map.ts +46 -6
  319. package/gs/builtin/print.ts +12 -3
  320. package/gs/builtin/runtime-contract.test.ts +383 -10
  321. package/gs/builtin/slice.test.ts +70 -0
  322. package/gs/builtin/slice.ts +785 -265
  323. package/gs/builtin/type.ts +160 -41
  324. package/gs/builtin/varRef.ts +40 -1
  325. package/gs/bytes/buffer.gs.ts +74 -70
  326. package/gs/bytes/iter.gs.ts +13 -14
  327. package/gs/bytes/meta.json +8 -3
  328. package/gs/bytes/reader.gs.ts +20 -19
  329. package/gs/compress/zlib/index.test.ts +28 -0
  330. package/gs/compress/zlib/index.ts +200 -0
  331. package/gs/compress/zlib/meta.json +3 -0
  332. package/gs/context/context.test.ts +71 -0
  333. package/gs/context/context.ts +30 -29
  334. package/gs/crypto/ecdh/index.test.ts +43 -0
  335. package/gs/crypto/ecdh/index.ts +274 -0
  336. package/gs/crypto/ed25519/index.test.ts +41 -0
  337. package/gs/crypto/ed25519/index.ts +238 -0
  338. package/gs/crypto/ed25519/meta.json +13 -0
  339. package/gs/crypto/internal/constanttime/index.test.ts +25 -0
  340. package/gs/crypto/internal/constanttime/index.ts +22 -0
  341. package/gs/crypto/internal/fips140deps/byteorder/index.ts +1 -0
  342. package/gs/crypto/internal/fips140deps/godebug/index.ts +1 -0
  343. package/gs/crypto/rand/index.test.ts +89 -1
  344. package/gs/crypto/rand/index.ts +103 -1
  345. package/gs/crypto/rand/meta.json +4 -1
  346. package/gs/crypto/sha256/index.test.ts +78 -0
  347. package/gs/crypto/sha256/index.ts +150 -0
  348. package/gs/crypto/sha256/meta.json +9 -0
  349. package/gs/crypto/sha512/index.test.ts +31 -0
  350. package/gs/crypto/sha512/index.ts +161 -0
  351. package/gs/crypto/sha512/meta.json +11 -0
  352. package/gs/embed/index.ts +20 -0
  353. package/gs/embed/meta.json +5 -0
  354. package/gs/encoding/json/index.test.ts +39 -3
  355. package/gs/encoding/json/index.ts +45 -3
  356. package/gs/errors/errors.test.ts +85 -0
  357. package/gs/errors/errors.ts +132 -4
  358. package/gs/fmt/fmt.test.ts +3 -1
  359. package/gs/fmt/fmt.ts +55 -19
  360. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +128 -1
  361. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +342 -4
  362. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +180 -0
  363. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +1084 -0
  364. package/gs/github.com/aperturerobotics/starpc/srpc/index.test.ts +31 -0
  365. package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +1233 -0
  366. package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +46 -0
  367. package/gs/github.com/aperturerobotics/util/conc/index.test.ts +30 -0
  368. package/gs/github.com/aperturerobotics/util/conc/index.ts +172 -0
  369. package/gs/github.com/aperturerobotics/util/conc/meta.json +9 -0
  370. package/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.ts +1 -4
  371. package/gs/github.com/hack-pad/safejs/internal/catch/index.test.ts +35 -0
  372. package/gs/github.com/hack-pad/safejs/internal/catch/index.ts +65 -0
  373. package/gs/github.com/hack-pad/safejs/internal/catch/meta.json +9 -0
  374. package/gs/github.com/klauspost/compress/internal/le/index.test.ts +37 -0
  375. package/gs/github.com/klauspost/compress/internal/le/index.ts +115 -0
  376. package/gs/github.com/mr-tron/base58/base58/index.test.ts +70 -0
  377. package/gs/github.com/mr-tron/base58/base58/index.ts +231 -0
  378. package/gs/github.com/mr-tron/base58/base58/meta.json +3 -0
  379. package/gs/github.com/zeebo/blake3/internal/consts/index.test.ts +46 -0
  380. package/gs/github.com/zeebo/blake3/internal/consts/index.ts +26 -0
  381. package/gs/go/internal/scannerhooks/index.test.ts +14 -0
  382. package/gs/go/internal/scannerhooks/index.ts +9 -0
  383. package/gs/go/scanner/index.test.ts +22 -0
  384. package/gs/go/scanner/index.ts +47 -0
  385. package/gs/go/token/index.test.ts +47 -1
  386. package/gs/go/token/index.ts +583 -4
  387. package/gs/hash/fnv/index.test.ts +67 -0
  388. package/gs/hash/fnv/index.ts +351 -0
  389. package/gs/hash/fnv/meta.json +3 -0
  390. package/gs/hash/index.test.ts +37 -0
  391. package/gs/hash/index.ts +118 -0
  392. package/gs/hash/meta.json +5 -0
  393. package/gs/internal/abi/index.test.ts +18 -0
  394. package/gs/internal/abi/index.ts +14 -0
  395. package/gs/internal/bytealg/index.test.ts +18 -0
  396. package/gs/internal/bytealg/index.ts +16 -0
  397. package/gs/internal/byteorder/index.test.ts +39 -0
  398. package/gs/internal/byteorder/index.ts +100 -27
  399. package/gs/internal/godebug/index.test.ts +16 -0
  400. package/gs/internal/godebug/index.ts +35 -0
  401. package/gs/io/fs/index.ts +1 -0
  402. package/gs/io/fs/meta.json +5 -0
  403. package/gs/io/fs/readlink.test.ts +43 -0
  404. package/gs/io/fs/readlink.ts +69 -0
  405. package/gs/io/fs/walk.test.ts +61 -0
  406. package/gs/io/fs/walk.ts +17 -9
  407. package/gs/io/io.ts +177 -31
  408. package/gs/io/meta.json +10 -2
  409. package/gs/iter/iter.ts +8 -2
  410. package/gs/maps/iter.ts +75 -26
  411. package/gs/maps/maps.test.ts +23 -0
  412. package/gs/maps/maps.ts +13 -11
  413. package/gs/math/bits/index.test.ts +20 -0
  414. package/gs/math/bits/index.ts +107 -64
  415. package/gs/math/const.gs.test.ts +11 -5
  416. package/gs/math/const.gs.ts +5 -6
  417. package/gs/mime/index.ts +60 -0
  418. package/gs/net/http/httptest/index.test.ts +53 -0
  419. package/gs/net/http/httptest/index.ts +120 -0
  420. package/gs/net/http/index.test.ts +148 -0
  421. package/gs/net/http/index.ts +432 -0
  422. package/gs/net/http/meta.json +6 -0
  423. package/gs/net/http/pprof/index.test.ts +47 -0
  424. package/gs/net/http/pprof/index.ts +65 -0
  425. package/gs/os/dir_unix.gs.ts +2 -3
  426. package/gs/os/error.gs.ts +9 -10
  427. package/gs/os/error.test.ts +41 -0
  428. package/gs/os/file_unix_js.test.ts +55 -0
  429. package/gs/os/tempfile.gs.test.ts +37 -10
  430. package/gs/os/types_js.gs.ts +96 -17
  431. package/gs/path/filepath/match.test.ts +31 -12
  432. package/gs/path/filepath/match.ts +181 -3
  433. package/gs/path/filepath/meta.json +6 -0
  434. package/gs/path/filepath/path.test.ts +80 -0
  435. package/gs/path/filepath/path.ts +244 -11
  436. package/gs/path/path.ts +20 -5
  437. package/gs/reflect/field.test.ts +63 -0
  438. package/gs/reflect/index.ts +5 -1
  439. package/gs/reflect/iter.ts +2 -2
  440. package/gs/reflect/map.test.ts +42 -1
  441. package/gs/reflect/map.ts +39 -0
  442. package/gs/reflect/type.ts +728 -65
  443. package/gs/reflect/typefor.test.ts +100 -0
  444. package/gs/reflect/types.ts +3 -1
  445. package/gs/reflect/value.ts +50 -1
  446. package/gs/reflect/visiblefields.ts +1 -1
  447. package/gs/runtime/debug/index.test.ts +45 -0
  448. package/gs/runtime/debug/index.ts +96 -0
  449. package/gs/runtime/pprof/index.test.ts +36 -0
  450. package/gs/runtime/pprof/index.ts +104 -0
  451. package/gs/runtime/pprof/meta.json +6 -0
  452. package/gs/runtime/runtime.test.ts +19 -0
  453. package/gs/runtime/runtime.ts +98 -3
  454. package/gs/runtime/trace/index.test.ts +45 -0
  455. package/gs/runtime/trace/index.ts +97 -0
  456. package/gs/runtime/trace/meta.json +7 -0
  457. package/gs/slices/meta.json +2 -1
  458. package/gs/slices/slices.test.ts +180 -0
  459. package/gs/slices/slices.ts +502 -15
  460. package/gs/sort/meta.json +7 -0
  461. package/gs/sort/slice.gs.ts +85 -26
  462. package/gs/sort/slice.test.ts +40 -0
  463. package/gs/sort/sort.gs.ts +16 -13
  464. package/gs/strings/builder.test.ts +8 -0
  465. package/gs/strings/builder.ts +33 -20
  466. package/gs/strings/iter.test.ts +5 -7
  467. package/gs/strings/iter.ts +146 -71
  468. package/gs/strings/replace.test.ts +1 -4
  469. package/gs/strings/replace.ts +6 -6
  470. package/gs/strings/strings.test.ts +4 -0
  471. package/gs/strings/strings.ts +54 -6
  472. package/gs/sync/atomic/type.gs.ts +13 -14
  473. package/gs/sync/meta.json +3 -1
  474. package/gs/sync/sync.test.ts +69 -1
  475. package/gs/sync/sync.ts +72 -13
  476. package/gs/syscall/constants.ts +39 -24
  477. package/gs/syscall/errors.ts +165 -112
  478. package/gs/syscall/fs.ts +195 -0
  479. package/gs/syscall/js/index.ts +485 -0
  480. package/gs/syscall/js/meta.json +4 -0
  481. package/gs/syscall/net.test.ts +111 -0
  482. package/gs/syscall/types.ts +63 -2
  483. package/gs/testing/index.ts +1 -0
  484. package/gs/testing/meta.json +5 -0
  485. package/gs/testing/testing.test.ts +146 -0
  486. package/gs/testing/testing.ts +399 -0
  487. package/gs/time/meta.json +2 -2
  488. package/gs/time/time.test.ts +110 -0
  489. package/gs/time/time.ts +309 -57
  490. package/gs/unicode/unicode.test.ts +36 -0
  491. package/gs/unicode/unicode.ts +115 -9
  492. package/gs/unicode/utf8/utf8.test.ts +13 -0
  493. package/gs/unicode/utf8/utf8.ts +28 -16
  494. package/gs/unique/index.ts +98 -0
  495. package/package.json +3 -2
@@ -0,0 +1,286 @@
1
+ package main
2
+
3
+ import (
4
+ "context"
5
+ "io"
6
+ "os"
7
+ "runtime"
8
+ "runtime/pprof"
9
+ "strconv"
10
+ "strings"
11
+ "time"
12
+
13
+ "github.com/aperturerobotics/cli"
14
+ "github.com/aperturerobotics/goscript/compiler/gotest"
15
+ "github.com/pkg/errors"
16
+ )
17
+
18
+ func testCommands() []*cli.Command {
19
+ return []*cli.Command{newTestCommand()}
20
+ }
21
+
22
+ func newTestCommand() *cli.Command {
23
+ var tags cli.StringSlice
24
+ var overrideDirs cli.StringSlice
25
+ var run string
26
+ var count int
27
+ var short bool
28
+ var timeout time.Duration
29
+ var verbose bool
30
+ var outputRoot string
31
+ var workDir string
32
+ var dir string
33
+ var parallelism int
34
+ var runtimeGroups bool
35
+ var cpuProfile string
36
+ var memProfile string
37
+ var incrementalTypeCheck bool
38
+
39
+ return &cli.Command{
40
+ Name: "test",
41
+ Category: "test",
42
+ Usage: "compile and run Go package tests through GoScript",
43
+ Action: func(c *cli.Context) (err error) {
44
+ req := &gotest.Request{
45
+ Dir: dir,
46
+ Patterns: c.Args().Slice(),
47
+ BuildTags: tags.Value(),
48
+ OverrideDirs: overrideDirs.Value(),
49
+ Run: run,
50
+ Count: count,
51
+ Short: short,
52
+ Timeout: timeout,
53
+ Verbose: verbose,
54
+ WorkDir: workDir,
55
+ OutputRoot: outputRoot,
56
+ Parallelism: parallelism,
57
+ RuntimeGroups: runtimeGroups,
58
+ IncrementalTypeCheck: incrementalTypeCheck,
59
+ }
60
+ stopProfile, err := startCPUProfile(cpuProfile)
61
+ if err != nil {
62
+ return err
63
+ }
64
+ if stopProfile != nil {
65
+ defer stopProfile()
66
+ }
67
+ defer func() {
68
+ if profileErr := writeMemProfile(memProfile); profileErr != nil && err == nil {
69
+ err = profileErr
70
+ }
71
+ }()
72
+ result, err := gotest.NewRunner().Run(c.Context, req)
73
+ if err != nil {
74
+ return err
75
+ }
76
+ if err := printTestResult(c.Context, c.App.Writer, result); err != nil {
77
+ return err
78
+ }
79
+ if !result.Passed() {
80
+ return errors.New("goscript test failed")
81
+ }
82
+ return nil
83
+ },
84
+ Flags: []cli.Flag{
85
+ &cli.StringSliceFlag{
86
+ Name: "tags",
87
+ Usage: "comma-separated Go build tags",
88
+ Destination: &tags,
89
+ },
90
+ &cli.StringSliceFlag{
91
+ Name: "gs-path",
92
+ Aliases: []string{"override-dir"},
93
+ Usage: "additional GoScript override root containing package-path directories",
94
+ Destination: &overrideDirs,
95
+ },
96
+ &cli.StringFlag{
97
+ Name: "run",
98
+ Usage: "run only tests matching the regexp",
99
+ Destination: &run,
100
+ },
101
+ &cli.IntFlag{
102
+ Name: "count",
103
+ Usage: "run each selected test this many times",
104
+ Destination: &count,
105
+ Value: 1,
106
+ },
107
+ &cli.BoolFlag{
108
+ Name: "short",
109
+ Usage: "report true from testing.Short",
110
+ Destination: &short,
111
+ },
112
+ &cli.DurationFlag{
113
+ Name: "timeout",
114
+ Usage: "maximum time for the package-test run",
115
+ Destination: &timeout,
116
+ Value: 30 * time.Second,
117
+ },
118
+ &cli.BoolFlag{
119
+ Name: "v",
120
+ Aliases: []string{"verbose"},
121
+ Usage: "emit verbose test output",
122
+ Destination: &verbose,
123
+ },
124
+ &cli.StringFlag{
125
+ Name: "output",
126
+ Usage: "generated TypeScript output root",
127
+ Destination: &outputRoot,
128
+ },
129
+ &cli.StringFlag{
130
+ Name: "workdir",
131
+ Usage: "generated test workspace directory",
132
+ Destination: &workDir,
133
+ },
134
+ &cli.StringFlag{
135
+ Name: "dir",
136
+ Usage: "Go module working directory",
137
+ Destination: &dir,
138
+ },
139
+ &cli.IntFlag{
140
+ Name: "p",
141
+ Usage: "maximum package typecheck/runtime commands to run concurrently",
142
+ Destination: &parallelism,
143
+ Value: gotest.DefaultParallelism(),
144
+ },
145
+ &cli.BoolFlag{
146
+ Name: "runtime-groups",
147
+ Usage: "run package runtimes in grouped Bun worker processes",
148
+ Destination: &runtimeGroups,
149
+ },
150
+ &cli.BoolFlag{
151
+ Name: "incremental-typecheck",
152
+ Usage: "reuse TypeScript build-info files in the test workdir",
153
+ Destination: &incrementalTypeCheck,
154
+ },
155
+ &cli.StringFlag{
156
+ Name: "cpuprofile",
157
+ Usage: "write a Go CPU profile for the goscript test process",
158
+ Destination: &cpuProfile,
159
+ },
160
+ &cli.StringFlag{
161
+ Name: "memprofile",
162
+ Usage: "write a Go heap profile for the goscript test process",
163
+ Destination: &memProfile,
164
+ },
165
+ },
166
+ }
167
+ }
168
+
169
+ func startCPUProfile(path string) (func(), error) {
170
+ path = strings.TrimSpace(path)
171
+ if path == "" {
172
+ return nil, nil
173
+ }
174
+ file, err := os.Create(path)
175
+ if err != nil {
176
+ return nil, errors.Wrap(err, "create CPU profile")
177
+ }
178
+ if err := pprof.StartCPUProfile(file); err != nil {
179
+ _ = file.Close()
180
+ return nil, errors.Wrap(err, "start CPU profile")
181
+ }
182
+ return func() {
183
+ pprof.StopCPUProfile()
184
+ _ = file.Close()
185
+ }, nil
186
+ }
187
+
188
+ func writeMemProfile(path string) error {
189
+ path = strings.TrimSpace(path)
190
+ if path == "" {
191
+ return nil
192
+ }
193
+ file, err := os.Create(path)
194
+ if err != nil {
195
+ return errors.Wrap(err, "create memory profile")
196
+ }
197
+ defer func() { _ = file.Close() }()
198
+ runtime.GC()
199
+ if err := pprof.WriteHeapProfile(file); err != nil {
200
+ return errors.Wrap(err, "write memory profile")
201
+ }
202
+ return nil
203
+ }
204
+
205
+ func printTestResult(ctx context.Context, w io.Writer, result *gotest.Result) error {
206
+ if err := ctx.Err(); err != nil {
207
+ return err
208
+ }
209
+ if result == nil {
210
+ return errors.New("goscript test result is nil")
211
+ }
212
+ for _, pkg := range result.Packages {
213
+ if strings.TrimSpace(pkg.Output) != "" {
214
+ if _, err := io.WriteString(w, strings.TrimSpace(pkg.Output)+"\n"); err != nil {
215
+ return err
216
+ }
217
+ }
218
+ switch pkg.Action {
219
+ case gotest.ActionPass:
220
+ if _, err := io.WriteString(w, "ok \t"+pkg.PackagePath+"\t"+formatElapsed(pkg.Elapsed)+"\n"); err != nil {
221
+ return err
222
+ }
223
+ case gotest.ActionSkip:
224
+ if _, err := io.WriteString(w, "? \t"+pkg.PackagePath+"\t[no test files]\n"); err != nil {
225
+ return err
226
+ }
227
+ case gotest.ActionFail:
228
+ line := "FAIL\t" + pkg.PackagePath
229
+ if pkg.Owner != "" {
230
+ line += "\towner=" + string(pkg.Owner)
231
+ }
232
+ if phase := failedPhase(pkg.Phases); phase != "" {
233
+ line += "\tphase=" + phase
234
+ }
235
+ if _, err := io.WriteString(w, line+"\n"); err != nil {
236
+ return err
237
+ }
238
+ if strings.TrimSpace(pkg.Error) != "" {
239
+ if _, err := io.WriteString(w, strings.TrimSpace(pkg.Error)+"\n"); err != nil {
240
+ return err
241
+ }
242
+ }
243
+ }
244
+ }
245
+ if result.WorkDir != "" {
246
+ if _, err := io.WriteString(w, "goscript test workdir: "+result.WorkDir+"\n"); err != nil {
247
+ return err
248
+ }
249
+ }
250
+ return nil
251
+ }
252
+
253
+ func failedPhase(phases gotest.PackagePhases) string {
254
+ switch {
255
+ case phases.Workspace == gotest.PhaseStatusFail:
256
+ return "workspace"
257
+ case phases.Compile == gotest.PhaseStatusFail:
258
+ return "compile"
259
+ case phases.Emit == gotest.PhaseStatusFail:
260
+ return "emit"
261
+ case phases.TypeCheck == gotest.PhaseStatusFail:
262
+ return "typecheck"
263
+ case phases.Runtime == gotest.PhaseStatusFail:
264
+ return "runtime"
265
+ default:
266
+ return ""
267
+ }
268
+ }
269
+
270
+ func formatElapsed(elapsed time.Duration) string {
271
+ if elapsed <= 0 {
272
+ return "0.000s"
273
+ }
274
+ millis := elapsed.Milliseconds()
275
+ seconds := millis / 1000
276
+ remainder := millis % 1000
277
+ return strconv.FormatInt(seconds, 10) + "." + leftPadMillis(remainder) + "s"
278
+ }
279
+
280
+ func leftPadMillis(value int64) string {
281
+ raw := strconv.FormatInt(value, 10)
282
+ for len(raw) < 3 {
283
+ raw = "0" + raw
284
+ }
285
+ return raw
286
+ }
@@ -0,0 +1,76 @@
1
+ package main
2
+
3
+ import (
4
+ "bytes"
5
+ "path/filepath"
6
+ "strings"
7
+ "testing"
8
+ )
9
+
10
+ func TestTestCommandHelp(t *testing.T) {
11
+ var out bytes.Buffer
12
+ app := newApp()
13
+ app.Writer = &out
14
+
15
+ err := app.Run([]string{"goscript", "test", "--help"})
16
+ if err != nil {
17
+ t.Fatalf("test help failed: %v", err)
18
+ }
19
+ help := out.String()
20
+ for _, expected := range []string{"compile and run Go package tests through GoScript", "--tags", "--run", "--count", "--short", "--timeout", "-p", "--runtime-groups", "--cpuprofile", "--memprofile"} {
21
+ if !strings.Contains(help, expected) {
22
+ t.Fatalf("help output missing %q:\n%s", expected, help)
23
+ }
24
+ }
25
+ }
26
+
27
+ func TestTestCommandRunsPackageTest(t *testing.T) {
28
+ dir := t.TempDir()
29
+ writeFile(t, filepath.Join(dir, "go.mod"), "module example.test/cmdtest\n\ngo 1.25.3\n")
30
+ writeFile(t, filepath.Join(dir, "value.go"), strings.Join([]string{
31
+ "package cmdtest",
32
+ "func Value() int { return 7 }",
33
+ "",
34
+ }, "\n"))
35
+ writeFile(t, filepath.Join(dir, "value_test.go"), strings.Join([]string{
36
+ "package cmdtest",
37
+ "import \"testing\"",
38
+ "func TestValue(t *testing.T) {",
39
+ "\tif Value() != 7 {",
40
+ "\t\tt.Fatal(\"bad value\")",
41
+ "\t}",
42
+ "}",
43
+ "",
44
+ }, "\n"))
45
+
46
+ var out bytes.Buffer
47
+ app := newApp()
48
+ app.Writer = &out
49
+ err := app.Run([]string{
50
+ "goscript",
51
+ "test",
52
+ "--dir",
53
+ dir,
54
+ "--workdir",
55
+ filepath.Join(dir, ".tmp", "cmd-test"),
56
+ "-v",
57
+ ".",
58
+ })
59
+ if err != nil {
60
+ t.Fatalf("test command failed: %v\n%s", err, out.String())
61
+ }
62
+ if !strings.Contains(out.String(), "ok \texample.test/cmdtest") {
63
+ t.Fatalf("expected ok package output, got:\n%s", out.String())
64
+ }
65
+ }
66
+
67
+ func TestTestCommandRejectsUnsupportedFlags(t *testing.T) {
68
+ app := newApp()
69
+ err := app.Run([]string{"goscript", "test", "--cover", "."})
70
+ if err == nil {
71
+ t.Fatalf("expected unsupported flag to fail")
72
+ }
73
+ if !strings.Contains(err.Error(), "flag provided but not defined") {
74
+ t.Fatalf("unexpected unsupported flag error: %v", err)
75
+ }
76
+ }
@@ -18,6 +18,7 @@ func newCompileCommand() *cli.Command {
18
18
  var config compiler.Config
19
19
  var packages cli.StringSlice
20
20
  var buildFlags cli.StringSlice
21
+ var overrideDirs cli.StringSlice
21
22
 
22
23
  return &cli.Command{
23
24
  Name: "compile",
@@ -25,6 +26,7 @@ func newCompileCommand() *cli.Command {
25
26
  Usage: "compile a Go package to TypeScript",
26
27
  Action: func(c *cli.Context) error {
27
28
  config.BuildFlags = slices.Clone(buildFlags.Value())
29
+ config.OverrideDirs = slices.Clone(overrideDirs.Value())
28
30
  return compilePackage(c.Context, &config, packages.Value())
29
31
  },
30
32
  Flags: []cli.Flag{
@@ -56,6 +58,13 @@ func newCompileCommand() *cli.Command {
56
58
  Destination: &buildFlags,
57
59
  EnvVars: []string{"GOSCRIPT_BUILD_FLAGS"},
58
60
  },
61
+ &cli.StringSliceFlag{
62
+ Name: "gs-path",
63
+ Aliases: []string{"override-dir"},
64
+ Usage: "additional GoScript override root containing package-path directories",
65
+ Destination: &overrideDirs,
66
+ EnvVars: []string{"GOSCRIPT_GS_PATH"},
67
+ },
59
68
  &cli.BoolFlag{
60
69
  Name: "disable-emit-builtin",
61
70
  Usage: "disable emitting built-in packages that have handwritten equivalents",
@@ -27,6 +27,7 @@ func newApp() *cli.App {
27
27
 
28
28
  app.Usage = "GoScript compiles Go to Typescript."
29
29
  app.Commands = append(app.Commands, compileCommands()...)
30
+ app.Commands = append(app.Commands, testCommands()...)
30
31
 
31
32
  return app
32
33
  }
@@ -0,0 +1,38 @@
1
+ package compiler
2
+
3
+ import "slices"
4
+
5
+ import "strings"
6
+
7
+ const goScriptBuildTag = "goscript"
8
+
9
+ func goScriptBuildFlags(flags []string) []string {
10
+ normalized := append([]string(nil), flags...)
11
+ for i, flag := range normalized {
12
+ switch {
13
+ case flag == "-tags" && i+1 < len(normalized):
14
+ normalized[i+1] = appendBuildTag(normalized[i+1], goScriptBuildTag)
15
+ return normalized
16
+ case strings.HasPrefix(flag, "-tags="):
17
+ normalized[i] = "-tags=" + appendBuildTag(strings.TrimPrefix(flag, "-tags="), goScriptBuildTag)
18
+ return normalized
19
+ }
20
+ }
21
+ return append(normalized, "-tags="+goScriptBuildTag)
22
+ }
23
+
24
+ func appendBuildTag(value string, tag string) string {
25
+ tags := strings.FieldsFunc(value, func(r rune) bool {
26
+ return r == ',' || r == ' ' || r == '\t' || r == '\n'
27
+ })
28
+ if slices.Contains(tags, tag) {
29
+ return value
30
+ }
31
+ if strings.TrimSpace(value) == "" {
32
+ return tag
33
+ }
34
+ if strings.ContainsAny(value, " \t\n") {
35
+ return value + " " + tag
36
+ }
37
+ return value + "," + tag
38
+ }
@@ -36,10 +36,14 @@ type CompileRequest struct {
36
36
  OutputPath string
37
37
  // BuildFlags are forwarded to the Go package loader.
38
38
  BuildFlags []string
39
+ // OverrideDirs are additional GoScript override roots.
40
+ OverrideDirs []string
39
41
  // DependencyMode controls whether dependencies are included in the graph.
40
42
  DependencyMode DependencyMode
41
43
  // RuntimeEmissionMode controls runtime package emission policy.
42
44
  RuntimeEmissionMode RuntimeEmissionMode
45
+ // Tests controls whether package loading includes Go package-test variants.
46
+ Tests bool
43
47
  // AllDependencies controls whether the package graph should include deps.
44
48
  AllDependencies bool
45
49
  // DisableEmitBuiltin controls whether runtime packages are emitted.
@@ -75,6 +79,7 @@ func (o *CompileRequestOwner) NewRequest(conf Config, patterns []string) *Compil
75
79
  Dir: strings.TrimSpace(dir),
76
80
  OutputPath: strings.TrimSpace(conf.OutputPath),
77
81
  BuildFlags: append([]string(nil), conf.BuildFlags...),
82
+ OverrideDirs: append([]string(nil), conf.OverrideDirs...),
78
83
  DependencyMode: dependencyMode,
79
84
  RuntimeEmissionMode: runtimeEmissionMode,
80
85
  AllDependencies: conf.AllDependencies,
@@ -163,6 +168,34 @@ func (o *CompileRequestOwner) Validate(req *CompileRequest) []Diagnostic {
163
168
  })
164
169
  }
165
170
  }
171
+ for _, dir := range req.OverrideDirs {
172
+ dir = strings.TrimSpace(dir)
173
+ if dir == "" {
174
+ diagnostics = append(diagnostics, Diagnostic{
175
+ Severity: DiagnosticSeverityError,
176
+ Code: "goscript/request:empty-override-dir",
177
+ Message: "override directories must not be empty",
178
+ })
179
+ continue
180
+ }
181
+ info, err := os.Stat(dir)
182
+ switch {
183
+ case err != nil:
184
+ diagnostics = append(diagnostics, Diagnostic{
185
+ Severity: DiagnosticSeverityError,
186
+ Code: "goscript/request:override-dir",
187
+ Message: "override directory is not readable",
188
+ Detail: err.Error(),
189
+ })
190
+ case !info.IsDir():
191
+ diagnostics = append(diagnostics, Diagnostic{
192
+ Severity: DiagnosticSeverityError,
193
+ Code: "goscript/request:override-dir",
194
+ Message: "override path must be a directory",
195
+ Detail: dir,
196
+ })
197
+ }
198
+ }
166
199
 
167
200
  for _, pattern := range req.Patterns {
168
201
  trimmed := strings.TrimSpace(pattern)
@@ -23,7 +23,7 @@ func NewCompiler(conf *Config, le *logrus.Entry, _ *packages.Config) (*Compiler,
23
23
  return &Compiler{
24
24
  le: le,
25
25
  config: *conf,
26
- service: NewCompileService(),
26
+ service: NewCompileService(conf.OverrideDirs...),
27
27
  }, nil
28
28
  }
29
29
 
@@ -125,14 +125,11 @@ var expectedV2ComplianceGaps = map[string]bool{
125
125
  "buffer_value_field_error": true,
126
126
  "bytes": true,
127
127
  "chan_type_assertion": true,
128
- "constants_iota": true,
129
128
  "debug_marshal": true,
130
129
  "debug_simple": true,
131
- "embedded_interface_null_assertion": true,
132
130
  "filepath_walkfunc_call": true,
133
131
  "flag_bitwise_op": true,
134
132
  "for_init_multi_assign": true,
135
- "for_post_multi_assign": true,
136
133
  "for_range": true,
137
134
  "function_call_variable_shadowing": true,
138
135
  "function_signature_type": true,
@@ -143,7 +140,6 @@ var expectedV2ComplianceGaps = map[string]bool{
143
140
  "if_type_assert": true,
144
141
  "import_interface": true,
145
142
  "index_expr_type_assertion": true,
146
- "interface_async_method_call": true,
147
143
  "interface_embedding": true,
148
144
  "interface_type_reference": true,
149
145
  "json_debug": true,
@@ -164,8 +160,6 @@ var expectedV2ComplianceGaps = map[string]bool{
164
160
  "method_receiver_with_call_expr": true,
165
161
  "missing_valueof_error": true,
166
162
  "multi_return_same_type": true,
167
- "named_return_method": true,
168
- "named_return_multiple": true,
169
163
  "named_slice_wrapper": true,
170
164
  "named_struct_async_method": true,
171
165
  "named_types_valueof": true,
@@ -175,22 +169,18 @@ var expectedV2ComplianceGaps = map[string]bool{
175
169
  "pointer_circular_ref": true,
176
170
  "pointer_composite_literal_untyped": true,
177
171
  "pointer_range_loop": true,
178
- "primitive_error_type": true,
179
172
  "promise_return_type": true,
180
173
  "protobuf_lite_ts": true,
181
- "range_const_reassign": true,
182
174
  "receiver_variable": true,
183
175
  "reflect_implements": true,
184
176
  "reflect_numfield": true,
185
177
  "reserved_words": true,
186
- "star_compound_assign": true,
187
178
  "star_expr_destructuring": true,
188
179
  "struct_embedding": true,
189
180
  "struct_embedding_bytes_buffer": true,
190
181
  "type_conversion_interface_ptr_nil": true,
191
182
  "type_declaration_receiver": true,
192
183
  "util_promise": true,
193
- "variable_shadowing_scope": true,
194
184
  "varref_deref_struct": true,
195
185
  "wrapper_type_args": true,
196
186
  }
@@ -16,6 +16,8 @@ type Config struct {
16
16
  OutputPath string
17
17
  // BuildFlags are the Go build flags to use during package loading.
18
18
  BuildFlags []string
19
+ // OverrideDirs are additional GoScript override roots.
20
+ OverrideDirs []string
19
21
  // AllDependencies controls whether dependencies are included in the graph.
20
22
  AllDependencies bool
21
23
  // DisableEmitBuiltin controls whether runtime packages are emitted.
@@ -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,69 @@
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
+ // SourceDir is the package source directory used as the runtime cwd.
50
+ SourceDir string
51
+ // TestPackagePath is the package variant that contains test functions.
52
+ TestPackagePath string
53
+ // TestImports are direct imports from selected test variants.
54
+ TestImports []string
55
+ // Tests are the selected tests for this package.
56
+ Tests []Test
57
+ // Action is the package result.
58
+ Action Action
59
+ // Phases records structured status for each runner phase.
60
+ Phases PackagePhases
61
+ // Owner is the primary owner classification for failures.
62
+ Owner Owner
63
+ // Error is the concise package failure message.
64
+ Error string
65
+ // Output is raw process output for the package.
66
+ Output string
67
+ // Elapsed is the package runtime.
68
+ Elapsed time.Duration
69
+ }