goscript 0.0.84 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (428) hide show
  1. package/README.md +267 -243
  2. package/cmd/goscript/cmd-test.go +193 -0
  3. package/cmd/goscript/cmd-test_test.go +76 -0
  4. package/cmd/goscript/cmd_compile.go +70 -69
  5. package/cmd/goscript/cmd_compile_test.go +79 -0
  6. package/cmd/goscript/main.go +11 -5
  7. package/compiler/build-flags.go +38 -0
  8. package/compiler/compile-request.go +220 -0
  9. package/compiler/compiler.go +16 -1336
  10. package/compiler/compliance_test.go +188 -0
  11. package/compiler/config.go +6 -13
  12. package/compiler/diagnostic.go +70 -0
  13. package/compiler/gotest/owner.go +24 -0
  14. package/compiler/gotest/package-result.go +67 -0
  15. package/compiler/gotest/request.go +145 -0
  16. package/compiler/gotest/result.go +28 -0
  17. package/compiler/gotest/runner.go +588 -0
  18. package/compiler/gotest/runner_test.go +627 -0
  19. package/compiler/gotest/test.go +9 -0
  20. package/compiler/index.test.ts +28 -28
  21. package/compiler/index.ts +40 -72
  22. package/compiler/lowered-program.go +184 -0
  23. package/compiler/lowering.go +8072 -0
  24. package/compiler/override-facts.go +307 -0
  25. package/compiler/override-registry.go +283 -0
  26. package/compiler/override-registry_test.go +254 -0
  27. package/compiler/package-graph.go +254 -0
  28. package/compiler/package-graph_test.go +316 -0
  29. package/compiler/package-test-function.go +9 -0
  30. package/compiler/package-test-graph-package.go +40 -0
  31. package/compiler/package-test-graph-variant.go +105 -0
  32. package/compiler/package-test-graph.go +117 -0
  33. package/compiler/package-test-graph_test.go +144 -0
  34. package/compiler/result.go +13 -0
  35. package/compiler/runtime-contract.go +439 -0
  36. package/compiler/runtime-contract_test.go +104 -0
  37. package/compiler/semantic-model-types.go +113 -0
  38. package/compiler/semantic-model.go +1422 -0
  39. package/compiler/semantic-model_test.go +471 -0
  40. package/compiler/service.go +133 -0
  41. package/compiler/skeleton_test.go +1775 -0
  42. package/compiler/tsworkspace/owner.go +334 -0
  43. package/compiler/tsworkspace/owner_test.go +93 -0
  44. package/compiler/tsworkspace/result.go +17 -0
  45. package/compiler/typescript-emitter.go +1040 -0
  46. package/compiler/wasm/compile.go +2 -3
  47. package/compiler/wasm/compile_test.go +79 -0
  48. package/compiler/wasm_api.go +140 -124
  49. package/dist/compiler/index.d.ts +1 -3
  50. package/dist/compiler/index.js +31 -55
  51. package/dist/compiler/index.js.map +1 -1
  52. package/dist/gs/builtin/builtin.d.ts +33 -2
  53. package/dist/gs/builtin/builtin.js +217 -6
  54. package/dist/gs/builtin/builtin.js.map +1 -1
  55. package/dist/gs/builtin/channel.d.ts +11 -3
  56. package/dist/gs/builtin/channel.js +12 -0
  57. package/dist/gs/builtin/channel.js.map +1 -1
  58. package/dist/gs/builtin/hostio.d.ts +15 -1
  59. package/dist/gs/builtin/hostio.js +134 -49
  60. package/dist/gs/builtin/hostio.js.map +1 -1
  61. package/dist/gs/builtin/index.d.ts +1 -0
  62. package/dist/gs/builtin/index.js +1 -0
  63. package/dist/gs/builtin/index.js.map +1 -1
  64. package/dist/gs/builtin/slice.d.ts +23 -3
  65. package/dist/gs/builtin/slice.js +216 -44
  66. package/dist/gs/builtin/slice.js.map +1 -1
  67. package/dist/gs/builtin/type.d.ts +16 -2
  68. package/dist/gs/builtin/type.js +134 -21
  69. package/dist/gs/builtin/type.js.map +1 -1
  70. package/dist/gs/builtin/varRef.d.ts +5 -0
  71. package/dist/gs/builtin/varRef.js +23 -0
  72. package/dist/gs/builtin/varRef.js.map +1 -1
  73. package/dist/gs/bytes/buffer.gs.js +48 -44
  74. package/dist/gs/bytes/buffer.gs.js.map +1 -1
  75. package/dist/gs/bytes/bytes.gs.js.map +1 -1
  76. package/dist/gs/bytes/reader.gs.js +20 -18
  77. package/dist/gs/bytes/reader.gs.js.map +1 -1
  78. package/dist/gs/context/context.d.ts +5 -4
  79. package/dist/gs/context/context.js +10 -10
  80. package/dist/gs/context/context.js.map +1 -1
  81. package/dist/gs/crypto/internal/fips140deps/byteorder/index.d.ts +1 -0
  82. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js +2 -0
  83. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js.map +1 -0
  84. package/dist/gs/crypto/internal/fips140deps/godebug/index.d.ts +1 -0
  85. package/dist/gs/crypto/internal/fips140deps/godebug/index.js +2 -0
  86. package/dist/gs/crypto/internal/fips140deps/godebug/index.js.map +1 -0
  87. package/dist/gs/crypto/rand/index.d.ts +5 -0
  88. package/dist/gs/crypto/rand/index.js +77 -0
  89. package/dist/gs/crypto/rand/index.js.map +1 -0
  90. package/dist/gs/embed/index.d.ts +7 -0
  91. package/dist/gs/embed/index.js +16 -0
  92. package/dist/gs/embed/index.js.map +1 -0
  93. package/dist/gs/encoding/json/index.d.ts +4 -0
  94. package/dist/gs/encoding/json/index.js +178 -0
  95. package/dist/gs/encoding/json/index.js.map +1 -0
  96. package/dist/gs/errors/errors.d.ts +4 -0
  97. package/dist/gs/errors/errors.js +81 -0
  98. package/dist/gs/errors/errors.js.map +1 -1
  99. package/dist/gs/fmt/fmt.d.ts +4 -4
  100. package/dist/gs/fmt/fmt.js +42 -11
  101. package/dist/gs/fmt/fmt.js.map +1 -1
  102. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +36 -1
  103. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +212 -2
  104. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
  105. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.d.ts +189 -0
  106. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js +825 -0
  107. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js.map +1 -0
  108. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +163 -0
  109. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +449 -0
  110. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +1 -0
  111. package/dist/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.js.map +1 -1
  112. package/dist/gs/github.com/klauspost/compress/internal/le/index.d.ts +9 -0
  113. package/dist/gs/github.com/klauspost/compress/internal/le/index.js +71 -0
  114. package/dist/gs/github.com/klauspost/compress/internal/le/index.js.map +1 -0
  115. package/dist/gs/github.com/pkg/errors/errors.js.map +1 -1
  116. package/dist/gs/github.com/pkg/errors/stack.js.map +1 -1
  117. package/dist/gs/go/internal/scannerhooks/index.d.ts +3 -0
  118. package/dist/gs/go/internal/scannerhooks/index.js +5 -0
  119. package/dist/gs/go/internal/scannerhooks/index.js.map +1 -0
  120. package/dist/gs/go/scanner/index.d.ts +42 -0
  121. package/dist/gs/go/scanner/index.js +155 -0
  122. package/dist/gs/go/scanner/index.js.map +1 -0
  123. package/dist/gs/go/token/index.d.ts +187 -0
  124. package/dist/gs/go/token/index.js +578 -0
  125. package/dist/gs/go/token/index.js.map +1 -0
  126. package/dist/gs/internal/abi/index.d.ts +4 -0
  127. package/dist/gs/internal/abi/index.js +10 -0
  128. package/dist/gs/internal/abi/index.js.map +1 -1
  129. package/dist/gs/internal/bytealg/index.d.ts +2 -0
  130. package/dist/gs/internal/bytealg/index.js +14 -0
  131. package/dist/gs/internal/bytealg/index.js.map +1 -1
  132. package/dist/gs/internal/byteorder/index.d.ts +8 -2
  133. package/dist/gs/internal/byteorder/index.js +56 -25
  134. package/dist/gs/internal/byteorder/index.js.map +1 -1
  135. package/dist/gs/internal/godebug/index.d.ts +12 -0
  136. package/dist/gs/internal/godebug/index.js +30 -0
  137. package/dist/gs/internal/godebug/index.js.map +1 -0
  138. package/dist/gs/io/fs/fs.js.map +1 -1
  139. package/dist/gs/io/fs/index.d.ts +1 -0
  140. package/dist/gs/io/fs/index.js +1 -0
  141. package/dist/gs/io/fs/index.js.map +1 -1
  142. package/dist/gs/io/fs/readdir.js.map +1 -1
  143. package/dist/gs/io/fs/readfile.js.map +1 -1
  144. package/dist/gs/io/fs/readlink.d.ts +8 -0
  145. package/dist/gs/io/fs/readlink.js +64 -0
  146. package/dist/gs/io/fs/readlink.js.map +1 -0
  147. package/dist/gs/io/fs/stat.js.map +1 -1
  148. package/dist/gs/io/fs/sub.js.map +1 -1
  149. package/dist/gs/io/fs/walk.d.ts +3 -3
  150. package/dist/gs/io/fs/walk.js +7 -7
  151. package/dist/gs/io/fs/walk.js.map +1 -1
  152. package/dist/gs/io/io.d.ts +40 -6
  153. package/dist/gs/io/io.js +151 -26
  154. package/dist/gs/io/io.js.map +1 -1
  155. package/dist/gs/maps/iter.d.ts +3 -3
  156. package/dist/gs/maps/iter.js +3 -3
  157. package/dist/gs/maps/iter.js.map +1 -1
  158. package/dist/gs/maps/maps.d.ts +2 -2
  159. package/dist/gs/maps/maps.js +1 -1
  160. package/dist/gs/maps/maps.js.map +1 -1
  161. package/dist/gs/math/bits/index.d.ts +13 -4
  162. package/dist/gs/math/bits/index.js +66 -34
  163. package/dist/gs/math/bits/index.js.map +1 -1
  164. package/dist/gs/math/const.gs.d.ts +5 -5
  165. package/dist/gs/math/const.gs.js +4 -4
  166. package/dist/gs/math/const.gs.js.map +1 -1
  167. package/dist/gs/mime/index.d.ts +1 -0
  168. package/dist/gs/mime/index.js +50 -0
  169. package/dist/gs/mime/index.js.map +1 -0
  170. package/dist/gs/net/http/httptest/index.d.ts +11 -0
  171. package/dist/gs/net/http/httptest/index.js +21 -0
  172. package/dist/gs/net/http/httptest/index.js.map +1 -0
  173. package/dist/gs/net/http/index.d.ts +27 -0
  174. package/dist/gs/net/http/index.js +61 -0
  175. package/dist/gs/net/http/index.js.map +1 -0
  176. package/dist/gs/os/dir_unix.gs.js +2 -2
  177. package/dist/gs/os/dir_unix.gs.js.map +1 -1
  178. package/dist/gs/os/error.gs.js +2 -4
  179. package/dist/gs/os/error.gs.js.map +1 -1
  180. package/dist/gs/os/exec.gs.js.map +1 -1
  181. package/dist/gs/os/exec_posix.gs.js.map +1 -1
  182. package/dist/gs/os/rawconn_js.gs.js.map +1 -1
  183. package/dist/gs/os/root_js.gs.js.map +1 -1
  184. package/dist/gs/os/tempfile.gs.js +66 -9
  185. package/dist/gs/os/tempfile.gs.js.map +1 -1
  186. package/dist/gs/os/types.gs.js.map +1 -1
  187. package/dist/gs/os/types_js.gs.js +9 -9
  188. package/dist/gs/os/types_js.gs.js.map +1 -1
  189. package/dist/gs/os/types_unix.gs.js.map +1 -1
  190. package/dist/gs/path/filepath/match.js +165 -3
  191. package/dist/gs/path/filepath/match.js.map +1 -1
  192. package/dist/gs/path/filepath/path.d.ts +3 -1
  193. package/dist/gs/path/filepath/path.js +133 -4
  194. package/dist/gs/path/filepath/path.js.map +1 -1
  195. package/dist/gs/path/match.js.map +1 -1
  196. package/dist/gs/path/path.d.ts +4 -1
  197. package/dist/gs/path/path.js +16 -4
  198. package/dist/gs/path/path.js.map +1 -1
  199. package/dist/gs/reflect/index.d.ts +3 -3
  200. package/dist/gs/reflect/index.js +2 -2
  201. package/dist/gs/reflect/index.js.map +1 -1
  202. package/dist/gs/reflect/map.js +3 -0
  203. package/dist/gs/reflect/map.js.map +1 -1
  204. package/dist/gs/reflect/type.d.ts +9 -5
  205. package/dist/gs/reflect/type.js +233 -21
  206. package/dist/gs/reflect/type.js.map +1 -1
  207. package/dist/gs/reflect/types.js.map +1 -1
  208. package/dist/gs/reflect/visiblefields.js.map +1 -1
  209. package/dist/gs/runtime/debug/index.d.ts +2 -0
  210. package/dist/gs/runtime/debug/index.js +8 -0
  211. package/dist/gs/runtime/debug/index.js.map +1 -0
  212. package/dist/gs/runtime/runtime.d.ts +35 -3
  213. package/dist/gs/runtime/runtime.js +72 -0
  214. package/dist/gs/runtime/runtime.js.map +1 -1
  215. package/dist/gs/slices/slices.d.ts +24 -5
  216. package/dist/gs/slices/slices.js +214 -5
  217. package/dist/gs/slices/slices.js.map +1 -1
  218. package/dist/gs/sort/slice.gs.d.ts +3 -3
  219. package/dist/gs/sort/slice.gs.js +6 -6
  220. package/dist/gs/sort/slice.gs.js.map +1 -1
  221. package/dist/gs/sort/sort.gs.d.ts +4 -4
  222. package/dist/gs/sort/sort.gs.js +11 -8
  223. package/dist/gs/sort/sort.gs.js.map +1 -1
  224. package/dist/gs/strconv/atoi.gs.js.map +1 -1
  225. package/dist/gs/strconv/quote.gs.js.map +1 -1
  226. package/dist/gs/strings/builder.d.ts +1 -1
  227. package/dist/gs/strings/builder.js +3 -2
  228. package/dist/gs/strings/builder.js.map +1 -1
  229. package/dist/gs/strings/reader.js.map +1 -1
  230. package/dist/gs/strings/replace.js.map +1 -1
  231. package/dist/gs/sync/atomic/type.gs.d.ts +9 -8
  232. package/dist/gs/sync/atomic/type.gs.js +0 -2
  233. package/dist/gs/sync/atomic/type.gs.js.map +1 -1
  234. package/dist/gs/sync/atomic/value.gs.js.map +1 -1
  235. package/dist/gs/sync/sync.d.ts +3 -0
  236. package/dist/gs/sync/sync.js +39 -0
  237. package/dist/gs/sync/sync.js.map +1 -1
  238. package/dist/gs/syscall/constants.d.ts +36 -24
  239. package/dist/gs/syscall/constants.js +12 -0
  240. package/dist/gs/syscall/constants.js.map +1 -1
  241. package/dist/gs/syscall/errors.d.ts +2 -0
  242. package/dist/gs/syscall/errors.js +8 -0
  243. package/dist/gs/syscall/errors.js.map +1 -1
  244. package/dist/gs/syscall/fs.d.ts +43 -0
  245. package/dist/gs/syscall/fs.js +102 -0
  246. package/dist/gs/syscall/fs.js.map +1 -1
  247. package/dist/gs/syscall/js/index.d.ts +90 -0
  248. package/dist/gs/syscall/js/index.js +375 -0
  249. package/dist/gs/syscall/js/index.js.map +1 -0
  250. package/dist/gs/syscall/types.d.ts +22 -0
  251. package/dist/gs/syscall/types.js +45 -1
  252. package/dist/gs/syscall/types.js.map +1 -1
  253. package/dist/gs/testing/index.d.ts +1 -0
  254. package/dist/gs/testing/index.js +2 -0
  255. package/dist/gs/testing/index.js.map +1 -0
  256. package/dist/gs/testing/testing.d.ts +77 -0
  257. package/dist/gs/testing/testing.js +301 -0
  258. package/dist/gs/testing/testing.js.map +1 -0
  259. package/dist/gs/time/time.d.ts +41 -4
  260. package/dist/gs/time/time.js +205 -36
  261. package/dist/gs/time/time.js.map +1 -1
  262. package/dist/gs/unicode/unicode.d.ts +23 -1
  263. package/dist/gs/unicode/unicode.js +79 -10
  264. package/dist/gs/unicode/unicode.js.map +1 -1
  265. package/dist/gs/unicode/utf8/utf8.d.ts +4 -4
  266. package/dist/gs/unicode/utf8/utf8.js +24 -11
  267. package/dist/gs/unicode/utf8/utf8.js.map +1 -1
  268. package/dist/gs/unique/index.d.ts +11 -0
  269. package/dist/gs/unique/index.js +71 -0
  270. package/dist/gs/unique/index.js.map +1 -0
  271. package/go.mod +2 -2
  272. package/go.sum +9 -0
  273. package/gs/builtin/builtin.ts +266 -8
  274. package/gs/builtin/channel.ts +22 -0
  275. package/gs/builtin/hostio.test.ts +177 -0
  276. package/gs/builtin/hostio.ts +171 -56
  277. package/gs/builtin/index.ts +1 -0
  278. package/gs/builtin/runtime-contract.test.ts +356 -0
  279. package/gs/builtin/slice.ts +259 -50
  280. package/gs/builtin/type.ts +188 -30
  281. package/gs/builtin/varRef.ts +38 -1
  282. package/gs/bytes/buffer.gs.ts +48 -44
  283. package/gs/bytes/meta.json +8 -3
  284. package/gs/bytes/reader.gs.ts +20 -19
  285. package/gs/context/context.test.ts +41 -0
  286. package/gs/context/context.ts +22 -26
  287. package/gs/crypto/internal/fips140deps/byteorder/index.ts +1 -0
  288. package/gs/crypto/internal/fips140deps/godebug/index.ts +1 -0
  289. package/gs/crypto/rand/index.test.ts +32 -0
  290. package/gs/crypto/rand/index.ts +90 -0
  291. package/gs/crypto/rand/meta.json +5 -0
  292. package/gs/embed/index.ts +20 -0
  293. package/gs/embed/meta.json +5 -0
  294. package/gs/encoding/json/index.test.ts +79 -0
  295. package/gs/encoding/json/index.ts +210 -0
  296. package/gs/errors/errors.test.ts +82 -0
  297. package/gs/errors/errors.ts +104 -0
  298. package/gs/fmt/fmt.ts +56 -16
  299. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +95 -0
  300. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +300 -2
  301. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +159 -0
  302. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +1005 -0
  303. package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +719 -0
  304. package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +40 -0
  305. package/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/meta.json +3 -1
  306. package/gs/github.com/klauspost/compress/internal/le/index.test.ts +36 -0
  307. package/gs/github.com/klauspost/compress/internal/le/index.ts +114 -0
  308. package/gs/go/internal/scannerhooks/index.test.ts +14 -0
  309. package/gs/go/internal/scannerhooks/index.ts +9 -0
  310. package/gs/go/scanner/index.test.ts +72 -0
  311. package/gs/go/scanner/index.ts +204 -0
  312. package/gs/go/token/index.test.ts +67 -0
  313. package/gs/go/token/index.ts +686 -0
  314. package/gs/internal/abi/index.test.ts +18 -0
  315. package/gs/internal/abi/index.ts +14 -0
  316. package/gs/internal/bytealg/index.test.ts +18 -0
  317. package/gs/internal/bytealg/index.ts +16 -0
  318. package/gs/internal/byteorder/index.test.ts +39 -0
  319. package/gs/internal/byteorder/index.ts +100 -27
  320. package/gs/internal/godebug/index.test.ts +16 -0
  321. package/gs/internal/godebug/index.ts +35 -0
  322. package/gs/io/fs/index.ts +1 -0
  323. package/gs/io/fs/meta.json +5 -0
  324. package/gs/io/fs/readlink.test.ts +43 -0
  325. package/gs/io/fs/readlink.ts +77 -0
  326. package/gs/io/fs/walk.test.ts +61 -0
  327. package/gs/io/fs/walk.ts +9 -9
  328. package/gs/io/io.ts +174 -31
  329. package/gs/io/meta.json +10 -2
  330. package/gs/maps/iter.ts +12 -6
  331. package/gs/maps/maps.ts +8 -6
  332. package/gs/math/bits/index.ts +103 -47
  333. package/gs/math/const.gs.test.ts +11 -5
  334. package/gs/math/const.gs.ts +5 -6
  335. package/gs/mime/index.ts +54 -0
  336. package/gs/net/http/httptest/index.ts +25 -0
  337. package/gs/net/http/index.test.ts +20 -0
  338. package/gs/net/http/index.ts +81 -0
  339. package/gs/os/dir_unix.gs.ts +2 -3
  340. package/gs/os/file_unix_js.test.ts +50 -0
  341. package/gs/os/meta.json +1 -2
  342. package/gs/os/tempfile.gs.test.ts +85 -0
  343. package/gs/os/tempfile.gs.ts +71 -11
  344. package/gs/os/types_js.gs.ts +11 -11
  345. package/gs/path/filepath/match.test.ts +31 -12
  346. package/gs/path/filepath/match.ts +178 -3
  347. package/gs/path/filepath/path.test.ts +25 -0
  348. package/gs/path/filepath/path.ts +159 -5
  349. package/gs/path/path.ts +20 -5
  350. package/gs/reflect/index.ts +2 -1
  351. package/gs/reflect/map.test.ts +19 -0
  352. package/gs/reflect/map.ts +4 -0
  353. package/gs/reflect/type.ts +298 -29
  354. package/gs/reflect/typefor.test.ts +75 -0
  355. package/gs/runtime/debug/index.test.ts +24 -0
  356. package/gs/runtime/debug/index.ts +8 -0
  357. package/gs/runtime/runtime.test.ts +19 -0
  358. package/gs/runtime/runtime.ts +98 -3
  359. package/gs/slices/slices.test.ts +94 -0
  360. package/gs/slices/slices.ts +245 -5
  361. package/gs/sort/meta.json +7 -0
  362. package/gs/sort/slice.gs.ts +16 -7
  363. package/gs/sort/sort.gs.ts +16 -13
  364. package/gs/strings/builder.ts +4 -3
  365. package/gs/sync/atomic/type.gs.ts +13 -14
  366. package/gs/sync/meta.json +3 -1
  367. package/gs/sync/sync.test.ts +36 -0
  368. package/gs/sync/sync.ts +39 -0
  369. package/gs/syscall/constants.ts +39 -24
  370. package/gs/syscall/errors.ts +10 -0
  371. package/gs/syscall/fs.ts +195 -0
  372. package/gs/syscall/js/index.ts +458 -0
  373. package/gs/syscall/js/meta.json +4 -0
  374. package/gs/syscall/net.test.ts +85 -0
  375. package/gs/syscall/types.ts +56 -0
  376. package/gs/testing/index.ts +1 -0
  377. package/gs/testing/meta.json +5 -0
  378. package/gs/testing/testing.test.ts +90 -0
  379. package/gs/testing/testing.ts +382 -0
  380. package/gs/time/time.test.ts +106 -0
  381. package/gs/time/time.ts +278 -57
  382. package/gs/unicode/unicode.test.ts +25 -0
  383. package/gs/unicode/unicode.ts +119 -9
  384. package/gs/unicode/utf8/utf8.test.ts +13 -0
  385. package/gs/unicode/utf8/utf8.ts +28 -16
  386. package/gs/unique/index.ts +91 -0
  387. package/package.json +14 -13
  388. package/compiler/analysis.go +0 -3475
  389. package/compiler/analysis_test.go +0 -338
  390. package/compiler/assignment.go +0 -580
  391. package/compiler/builtin_test.go +0 -92
  392. package/compiler/code-writer.go +0 -115
  393. package/compiler/compiler_test.go +0 -149
  394. package/compiler/composite-lit.go +0 -779
  395. package/compiler/config_test.go +0 -62
  396. package/compiler/constraint.go +0 -86
  397. package/compiler/decl.go +0 -801
  398. package/compiler/expr-call-async.go +0 -188
  399. package/compiler/expr-call-builtins.go +0 -208
  400. package/compiler/expr-call-helpers.go +0 -382
  401. package/compiler/expr-call-make.go +0 -318
  402. package/compiler/expr-call-type-conversion.go +0 -520
  403. package/compiler/expr-call.go +0 -413
  404. package/compiler/expr-selector.go +0 -343
  405. package/compiler/expr-star.go +0 -82
  406. package/compiler/expr-type.go +0 -442
  407. package/compiler/expr-value.go +0 -89
  408. package/compiler/expr.go +0 -773
  409. package/compiler/field.go +0 -183
  410. package/compiler/gs_dependencies_test.go +0 -298
  411. package/compiler/lit.go +0 -322
  412. package/compiler/output.go +0 -72
  413. package/compiler/primitive.go +0 -149
  414. package/compiler/protobuf.go +0 -697
  415. package/compiler/sanitize.go +0 -100
  416. package/compiler/spec-struct.go +0 -995
  417. package/compiler/spec-value.go +0 -540
  418. package/compiler/spec.go +0 -725
  419. package/compiler/stmt-assign.go +0 -664
  420. package/compiler/stmt-for.go +0 -266
  421. package/compiler/stmt-range.go +0 -475
  422. package/compiler/stmt-select.go +0 -262
  423. package/compiler/stmt-type-switch.go +0 -147
  424. package/compiler/stmt.go +0 -1308
  425. package/compiler/type-assert.go +0 -386
  426. package/compiler/type-info.go +0 -156
  427. package/compiler/type-utils.go +0 -207
  428. package/compiler/type.go +0 -892
@@ -1,12 +1,11 @@
1
- // Package wasm provides a WASM-friendly API for compiling Go source code to TypeScript.
1
+ // Package wasm provides the WASM-friendly compiler adapter surface.
2
2
  package wasm
3
3
 
4
4
  import (
5
5
  "github.com/aperturerobotics/goscript/compiler"
6
6
  )
7
7
 
8
- // CompileSource compiles Go source code to TypeScript.
9
- // It takes the source code as a string and returns the generated TypeScript.
8
+ // CompileSource compiles import-free browser source strings to TypeScript.
10
9
  func CompileSource(source string, packageName string) (string, error) {
11
10
  return compiler.CompileSourceToTypeScript(source, packageName)
12
11
  }
@@ -0,0 +1,79 @@
1
+ package wasm
2
+
3
+ import (
4
+ "errors"
5
+ "strings"
6
+ "testing"
7
+
8
+ "github.com/aperturerobotics/goscript/compiler"
9
+ )
10
+
11
+ func TestCompileSourceCompilesSingleFile(t *testing.T) {
12
+ output, err := CompileSource(strings.Join([]string{
13
+ "package main",
14
+ "",
15
+ "type Counter struct {",
16
+ " value int",
17
+ "}",
18
+ "",
19
+ "func (c *Counter) Increment() {",
20
+ " c.value++",
21
+ "}",
22
+ "",
23
+ "func main() {",
24
+ " c := &Counter{}",
25
+ " c.Increment()",
26
+ " println(\"Count:\", c.value)",
27
+ "}",
28
+ "",
29
+ }, "\n"), "main")
30
+ if err != nil {
31
+ t.Fatal(err.Error())
32
+ }
33
+ for _, want := range []string{
34
+ "import * as $ from \"@goscript/builtin/index.js\"",
35
+ "class Counter",
36
+ "public Increment(): void",
37
+ "export async function main(): globalThis.Promise<void>",
38
+ "$.println(\"Count:\", $.pointerValue<Counter>(c).value)",
39
+ "await main()",
40
+ } {
41
+ if !strings.Contains(output, want) {
42
+ t.Fatalf("missing %q in generated output:\n%s", want, output)
43
+ }
44
+ }
45
+ }
46
+
47
+ func TestCompileSourceReportsParseErrors(t *testing.T) {
48
+ _, err := CompileSource("package main\nfunc main( {\n", "main")
49
+ if err == nil {
50
+ t.Fatal("expected compile error")
51
+ }
52
+ requireCompileDiagnostic(t, err, "goscript/wasm:parse")
53
+ }
54
+
55
+ func TestCompileSourceReportsUnsupportedImports(t *testing.T) {
56
+ _, err := CompileSource("package main\n\nimport \"fmt\"\n\nfunc main() { fmt.Println(\"hi\") }\n", "main")
57
+ if err == nil {
58
+ t.Fatal("expected compile error")
59
+ }
60
+ requireCompileDiagnostic(t, err, "goscript/wasm:imports-unsupported")
61
+ }
62
+
63
+ func requireCompileDiagnostic(t *testing.T, err error, code string) {
64
+ t.Helper()
65
+
66
+ var compileErr *compiler.CompileError
67
+ if !errors.As(err, &compileErr) {
68
+ t.Fatalf("expected CompileError, got %T: %v", err, err)
69
+ }
70
+ for _, diag := range compileErr.Diagnostics {
71
+ if diag.Code == code {
72
+ if diag.Severity != compiler.DiagnosticSeverityError {
73
+ t.Fatalf("expected error severity, got %s", diag.Severity)
74
+ }
75
+ return
76
+ }
77
+ }
78
+ t.Fatalf("missing diagnostic %q in %#v", code, compileErr.Diagnostics)
79
+ }
@@ -1,49 +1,94 @@
1
1
  package compiler
2
2
 
3
3
  import (
4
- "bytes"
5
- "fmt"
4
+ "context"
6
5
  "go/ast"
7
- "go/importer"
8
6
  "go/parser"
9
7
  "go/token"
10
8
  "go/types"
11
- "io"
9
+ "strconv"
10
+ "strings"
12
11
 
13
12
  "golang.org/x/tools/go/packages"
14
13
  )
15
14
 
16
- // CompileSourceToTypeScript compiles Go source code directly to TypeScript.
17
- // This is a WASM-friendly API that bypasses filesystem operations.
18
- // It takes the source code as a string and returns the generated TypeScript.
15
+ const browserSourceFileName = "main.go"
16
+
17
+ // CompileSourceToTypeScript is the WASM adapter for browser source compilation.
19
18
  func CompileSourceToTypeScript(source string, packageName string) (string, error) {
20
- if packageName == "" {
21
- packageName = "main"
19
+ graph, diagnostics := browserSourceGraph(source, packageName)
20
+ if diagnosticsHaveErrors(diagnostics) {
21
+ return "", NewCompileError(diagnostics)
22
22
  }
23
23
 
24
- // Create a new file set for position information
25
- fset := token.NewFileSet()
24
+ ctx := context.Background()
25
+ service := NewCompileService()
26
+ model, modelDiagnostics := service.semanticOwner.Build(ctx, graph)
27
+ diagnostics = append(diagnostics, modelDiagnostics...)
28
+ if diagnosticsHaveErrors(diagnostics) {
29
+ return "", NewCompileError(diagnostics)
30
+ }
26
31
 
27
- // Parse the source code
28
- astFile, err := parser.ParseFile(fset, "main.go", source, parser.ParseComments)
29
- if err != nil {
30
- return "", fmt.Errorf("parse error: %w", err)
32
+ program, loweringDiagnostics := service.loweringOwner.Build(ctx, model)
33
+ diagnostics = append(diagnostics, loweringDiagnostics...)
34
+ if diagnosticsHaveErrors(diagnostics) {
35
+ return "", NewCompileError(diagnostics)
36
+ }
37
+ if program == nil || len(program.packages) != 1 || len(program.packages[0].files) != 1 {
38
+ diagnostics = append(diagnostics, Diagnostic{
39
+ Severity: DiagnosticSeverityError,
40
+ Code: "goscript/wasm:invalid-output",
41
+ Message: "browser source compilation produced an invalid output shape",
42
+ })
43
+ return "", NewCompileError(diagnostics)
31
44
  }
32
45
 
33
- // Create type checker configuration with a custom importer
34
- var typeErrors []error
35
- conf := types.Config{
36
- Importer: &wasmImporter{
37
- defaultImporter: importer.Default(),
38
- cache: make(map[string]*types.Package),
39
- },
40
- Error: func(err error) {
41
- // Collect errors but don't fail immediately
42
- typeErrors = append(typeErrors, err)
43
- },
46
+ files, emitDiagnostics := service.emitterOwner.EmitToMemory(ctx, program)
47
+ diagnostics = append(diagnostics, emitDiagnostics...)
48
+ if diagnosticsHaveErrors(diagnostics) {
49
+ return "", NewCompileError(diagnostics)
50
+ }
51
+ filePath := "@goscript/" + program.packages[0].pkgPath + "/" + program.packages[0].files[0].outputName
52
+ output, ok := files[filePath]
53
+ if !ok {
54
+ diagnostics = append(diagnostics, Diagnostic{
55
+ Severity: DiagnosticSeverityError,
56
+ Code: "goscript/wasm:missing-output",
57
+ Message: "browser source compilation did not emit the expected TypeScript file",
58
+ Detail: filePath,
59
+ })
60
+ return "", NewCompileError(diagnostics)
61
+ }
62
+ return output, nil
63
+ }
64
+
65
+ func browserSourceGraph(source string, packageName string) (*PackageGraph, []Diagnostic) {
66
+ if strings.TrimSpace(source) == "" {
67
+ return nil, []Diagnostic{{
68
+ Severity: DiagnosticSeverityError,
69
+ Code: "goscript/wasm:empty-source",
70
+ Message: "browser source compilation requires Go source code",
71
+ }}
72
+ }
73
+
74
+ fset := token.NewFileSet()
75
+ file, err := parser.ParseFile(fset, browserSourceFileName, source, parser.ParseComments)
76
+ if err != nil {
77
+ return nil, []Diagnostic{{
78
+ Severity: DiagnosticSeverityError,
79
+ Code: "goscript/wasm:parse",
80
+ Message: "browser source compilation failed to parse Go source",
81
+ Detail: err.Error(),
82
+ }}
83
+ }
84
+ if len(file.Imports) != 0 {
85
+ return nil, []Diagnostic{browserImportsUnsupportedDiagnostic(file)}
44
86
  }
45
87
 
46
- // Type check the package
88
+ pkgPath := strings.TrimSpace(packageName)
89
+ if pkgPath == "" {
90
+ pkgPath = file.Name.Name
91
+ }
47
92
  info := &types.Info{
48
93
  Types: make(map[ast.Expr]types.TypeAndValue),
49
94
  Defs: make(map[*ast.Ident]types.Object),
@@ -51,113 +96,84 @@ func CompileSourceToTypeScript(source string, packageName string) (string, error
51
96
  Implicits: make(map[ast.Node]types.Object),
52
97
  Selections: make(map[*ast.SelectorExpr]*types.Selection),
53
98
  Scopes: make(map[ast.Node]*types.Scope),
54
- Instances: make(map[*ast.Ident]types.Instance),
55
99
  }
56
-
57
- pkg, _ := conf.Check(packageName, fset, []*ast.File{astFile}, info)
58
- // We continue even with type check errors for playground flexibility
59
-
60
- // Create a packages.Package compatible structure
61
- pkgData := &packages.Package{
62
- ID: packageName,
63
- Name: astFile.Name.Name,
64
- PkgPath: packageName,
65
- Fset: fset,
66
- Syntax: []*ast.File{astFile},
67
- Types: pkg,
68
- TypesInfo: info,
69
- CompiledGoFiles: []string{"main.go"},
70
- }
71
-
72
- // Create an empty map for all packages (we only have one)
73
- allPackages := map[string]*packages.Package{
74
- packageName: pkgData,
100
+ sizes := types.SizesFor("gc", "wasm")
101
+ if sizes == nil {
102
+ sizes = types.SizesFor("gc", "amd64")
75
103
  }
76
104
 
77
- // Perform package-level analysis
78
- packageAnalysis := AnalyzePackageImports(pkgData)
79
- analysis := AnalyzePackageFiles(pkgData, allPackages)
80
-
81
- // Create a buffer to capture the output
82
- var buf bytes.Buffer
83
-
84
- // Create the file compiler
85
- fileCompiler := &FileCompiler{
86
- compilerConfig: &Config{},
87
- pkg: pkgData,
88
- ast: astFile,
89
- fullPath: "main.go",
90
- Analysis: analysis,
91
- PackageAnalysis: packageAnalysis,
92
- }
93
-
94
- // Compile to the buffer
95
- if err := fileCompiler.CompileToWriter(&buf); err != nil {
96
- return "", fmt.Errorf("compilation error: %w", err)
105
+ var typeDiagnostics []Diagnostic
106
+ config := types.Config{
107
+ Sizes: sizes,
108
+ Error: func(err error) {
109
+ typeDiagnostics = append(typeDiagnostics, Diagnostic{
110
+ Severity: DiagnosticSeverityError,
111
+ Code: "goscript/wasm:typecheck",
112
+ Message: "browser source compilation failed to type-check Go source",
113
+ Detail: err.Error(),
114
+ })
115
+ },
97
116
  }
98
-
99
- return buf.String(), nil
100
- }
101
-
102
- // CompileToWriter compiles the Go file and writes TypeScript to the given writer.
103
- // This is used for WASM compilation where we don't want file I/O.
104
- func (c *FileCompiler) CompileToWriter(w io.Writer) error {
105
- f := c.ast
106
-
107
- c.codeWriter = NewTSCodeWriter(w)
108
-
109
- // Pass analysis to compiler
110
- goWriter := NewGoToTSCompiler(c.codeWriter, c.pkg, c.Analysis, c.fullPath)
111
-
112
- // Add import for the goscript runtime using namespace import and alias
113
- c.codeWriter.WriteLinef(
114
- "import * as $ from %q",
115
- translateTypescriptModulePathToIndexImportPath("@goscript/builtin"),
116
- )
117
-
118
- c.codeWriter.WriteLine("") // Add a newline after imports
119
-
120
- if err := goWriter.WriteDecls(f.Decls); err != nil {
121
- return fmt.Errorf("failed to write declarations: %w", err)
117
+ typedPkg, err := config.Check(pkgPath, fset, []*ast.File{file}, info)
118
+ if err != nil {
119
+ if len(typeDiagnostics) == 0 {
120
+ typeDiagnostics = append(typeDiagnostics, Diagnostic{
121
+ Severity: DiagnosticSeverityError,
122
+ Code: "goscript/wasm:typecheck",
123
+ Message: "browser source compilation failed to type-check Go source",
124
+ Detail: err.Error(),
125
+ })
126
+ }
127
+ return nil, typeDiagnostics
122
128
  }
123
129
 
124
- return nil
125
- }
126
-
127
- // wasmImporter provides import resolution for WASM compilation.
128
- // It wraps the default importer and provides stubs for common packages.
129
- type wasmImporter struct {
130
- defaultImporter types.Importer
131
- cache map[string]*types.Package
132
- }
133
-
134
- func (i *wasmImporter) Import(path string) (*types.Package, error) {
135
- if pkg, ok := i.cache[path]; ok {
136
- return pkg, nil
130
+ node := &PackageGraphNode{
131
+ ID: pkgPath,
132
+ PkgPath: pkgPath,
133
+ Name: file.Name.Name,
134
+ GoFiles: []string{browserSourceFileName},
135
+ CompiledGoFiles: []string{browserSourceFileName},
136
+ Requested: true,
137
137
  }
138
-
139
- // Try the default importer first (works for stdlib packages)
140
- pkg, err := i.defaultImporter.Import(path)
141
- if err == nil {
142
- i.cache[path] = pkg
143
- return pkg, nil
138
+ pkg := &packages.Package{
139
+ ID: pkgPath,
140
+ Name: file.Name.Name,
141
+ PkgPath: pkgPath,
142
+ GoFiles: []string{browserSourceFileName},
143
+ CompiledGoFiles: []string{browserSourceFileName},
144
+ Imports: make(map[string]*packages.Package),
145
+ Types: typedPkg,
146
+ Fset: fset,
147
+ Syntax: []*ast.File{file},
148
+ TypesInfo: info,
149
+ TypesSizes: sizes,
144
150
  }
145
-
146
- // For unknown packages, create an empty stub package
147
- // This allows compilation to proceed even if dependencies aren't available
148
- stubPkg := types.NewPackage(path, pathToName(path))
149
- stubPkg.MarkComplete()
150
- i.cache[path] = stubPkg
151
- return stubPkg, nil
151
+ return &PackageGraph{
152
+ RequestedPatterns: []string{pkgPath},
153
+ RequestedPackagePaths: []string{pkgPath},
154
+ Nodes: []*PackageGraphNode{node},
155
+ NodesByPackagePath: map[string]*PackageGraphNode{
156
+ pkgPath: node,
157
+ },
158
+ packagesByPath: map[string]*packages.Package{
159
+ pkgPath: pkg,
160
+ },
161
+ }, nil
152
162
  }
153
163
 
154
- // pathToName extracts a package name from an import path
155
- func pathToName(path string) string {
156
- // Find the last component of the path
157
- for i := len(path) - 1; i >= 0; i-- {
158
- if path[i] == '/' {
159
- return path[i+1:]
164
+ func browserImportsUnsupportedDiagnostic(file *ast.File) Diagnostic {
165
+ imports := make([]string, 0, len(file.Imports))
166
+ for _, spec := range file.Imports {
167
+ importPath := spec.Path.Value
168
+ if unquoted, err := strconv.Unquote(importPath); err == nil {
169
+ importPath = unquoted
160
170
  }
171
+ imports = append(imports, importPath)
172
+ }
173
+ return Diagnostic{
174
+ Severity: DiagnosticSeverityError,
175
+ Code: "goscript/wasm:imports-unsupported",
176
+ Message: "browser source compilation does not support imports yet",
177
+ Detail: "Use goscript compile --package . from inside a Go module for imported packages. Imports: " + strings.Join(imports, ", "),
161
178
  }
162
- return path
163
179
  }
@@ -8,13 +8,11 @@ export interface CompileConfig {
8
8
  output?: string;
9
9
  /** The working directory for the compiler. Defaults to the current working directory. */
10
10
  dir?: string;
11
- /** The path to the goscript executable. Defaults to 'go run github.com/aperturerobotics/goscript/cmd/goscript'. */
11
+ /** The path to the goscript executable. Defaults to `go run ./cmd/goscript`. */
12
12
  goscriptPath?: string;
13
13
  }
14
14
  /**
15
15
  * Compiles a Go package to TypeScript using the goscript compiler.
16
- * @param config - The compilation configuration.
17
- * @returns A promise that resolves when compilation is complete, or rejects on error.
18
16
  */
19
17
  export declare function compile(config: CompileConfig): Promise<void>;
20
18
  /**
@@ -1,68 +1,44 @@
1
- import * as path from "path";
2
- import { dirname } from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- import { exec } from "node:child_process";
5
- import { promisify } from "node:util";
1
+ import * as path from 'node:path';
2
+ import { dirname } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { execFile } from 'node:child_process';
5
+ import { promisify } from 'node:util';
6
+ const execFileAsync = promisify(execFile);
6
7
  const __filename = fileURLToPath(import.meta.url);
7
- const execAsync = promisify(exec);
8
8
  const __dirname = dirname(__filename);
9
- const projectRoot = dirname(__dirname); // Go up one level from src/ to the project root
9
+ const projectRoot = dirname(__dirname);
10
10
  /**
11
11
  * Compiles a Go package to TypeScript using the goscript compiler.
12
- * @param config - The compilation configuration.
13
- * @returns A promise that resolves when compilation is complete, or rejects on error.
14
12
  */
15
13
  export async function compile(config) {
16
14
  if (!config.pkg) {
17
- throw new Error("Package path (pkg) must be specified.");
15
+ throw new Error('Package path (pkg) must be specified.');
18
16
  }
19
- // Construct the go run command with the absolute path to the goscript executable
20
- const goscriptCmd = config.goscriptPath ??
21
- `go run "${path.join(projectRoot, "./cmd/goscript")}"`;
22
- const args = ["compile", "--package", `"${config.pkg}"`];
23
- if (config.output) {
24
- args.push("--output", `"${path.resolve(config.output)}"`);
25
- }
26
- else {
27
- // Default output path if not specified, relative to the working directory
28
- args.push("--output", `"./output"`);
29
- }
30
- // Pass the working directory to the goscript command
31
- if (config.dir) {
32
- args.push("--dir", `"${path.resolve(config.dir)}"`);
33
- }
34
- const command = `${goscriptCmd} ${args.join(" ")}`;
35
- // Execute go run from the specified working directory (or current)
36
17
  const cwd = config.dir ? path.resolve(config.dir) : process.cwd();
37
- try {
38
- const { stdout, stderr } = await execAsync(command, { cwd });
39
- if (stdout) {
40
- console.log(`GoScript stdout:\n${stdout}`);
41
- }
42
- if (stderr) {
43
- // Go compiler often prints status messages to stderr, treat as info unless exit code is non-zero
44
- console.info(`GoScript stderr:\n${stderr}`);
45
- }
46
- }
47
- catch (error) {
48
- const compileErr = error instanceof Error ? error : new Error(String(error));
49
- console.error(`GoScript compilation failed: ${compileErr.message}`);
50
- if (typeof error === "object" &&
51
- error !== null &&
52
- "stderr" in error &&
53
- typeof error.stderr === "string") {
54
- console.error(`GoScript stderr:\n${error.stderr}`);
55
- }
56
- if (typeof error === "object" &&
57
- error !== null &&
58
- "stdout" in error &&
59
- typeof error.stdout === "string") {
60
- console.error(`GoScript stdout:\n${error.stdout}`);
61
- }
62
- throw new Error(`GoScript compilation failed: ${compileErr.message}`, {
63
- cause: error,
64
- });
18
+ const output = config.output ? path.resolve(config.output) : './output';
19
+ if (config.goscriptPath) {
20
+ await execFileAsync(config.goscriptPath, [
21
+ 'compile',
22
+ '--package',
23
+ config.pkg,
24
+ '--output',
25
+ output,
26
+ '--dir',
27
+ cwd,
28
+ ]);
29
+ return;
65
30
  }
31
+ await execFileAsync('go', [
32
+ 'run',
33
+ path.join(projectRoot, 'cmd/goscript'),
34
+ 'compile',
35
+ '--package',
36
+ config.pkg,
37
+ '--output',
38
+ output,
39
+ '--dir',
40
+ cwd,
41
+ ]);
66
42
  }
67
43
  /**
68
44
  * Default export for convenience.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../compiler/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../compiler/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;AACzC,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AACrC,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;AAgBtC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAqB;IACjD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;IAC1D,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;IACjE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;IAEvE,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,MAAM,aAAa,CAAC,MAAM,CAAC,YAAY,EAAE;YACvC,SAAS;YACT,WAAW;YACX,MAAM,CAAC,GAAG;YACV,UAAU;YACV,MAAM;YACN,OAAO;YACP,GAAG;SACJ,CAAC,CAAA;QACF,OAAM;IACR,CAAC;IAED,MAAM,aAAa,CAAC,IAAI,EAAE;QACxB,KAAK;QACL,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC;QACtC,SAAS;QACT,WAAW;QACX,MAAM,CAAC,GAAG;QACV,UAAU;QACV,MAAM;QACN,OAAO;QACP,GAAG;KACJ,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,eAAe;IACb,OAAO;CACR,CAAA"}
@@ -1,4 +1,10 @@
1
1
  import type { Slice } from './slice.js';
2
+ import { type VarRef } from './varRef.js';
3
+ /**
4
+ * Implementation of Go's built-in print function
5
+ * @param args Arguments to print
6
+ */
7
+ export declare function print(...args: any[]): void;
2
8
  /**
3
9
  * Implementation of Go's built-in println function
4
10
  * @param args Arguments to print
@@ -15,15 +21,40 @@ export declare function panic(...args: any[]): never;
15
21
  * For maps, it deletes all entries.
16
22
  * @param v The slice or map to clear
17
23
  */
18
- export declare function clear<T>(v: T[] | Map<unknown, unknown> | null): void;
24
+ export declare function clear<T>(v: Slice<T> | Map<unknown, unknown> | null): void;
19
25
  /**
20
26
  * assignStruct copies all field values from source struct to target struct.
21
27
  * Used for pointer dereference assignment: *p = value
22
28
  * Copies the _fields contents from source to target.
23
29
  */
24
30
  export declare function assignStruct<T>(target: T, source: T): void;
31
+ /**
32
+ * pointerValue unwraps a Go pointer value for generated field, method, and
33
+ * dereference access. Struct pointers may be represented directly as class
34
+ * instances or indirectly as VarRef values when the pointer came from taking a
35
+ * variable's address.
36
+ */
37
+ export declare function pointerValue<T>(value: T | VarRef<T> | null | undefined): T;
38
+ export declare function arrayEqual(a: unknown, b: unknown): boolean;
39
+ export interface Complex {
40
+ real: number;
41
+ imag: number;
42
+ }
43
+ export declare function complex(real: number, imag: number): Complex;
44
+ export declare function real(value: number | Complex | null | undefined): number;
45
+ export declare function imag(value: number | Complex | null | undefined): number;
25
46
  export type Bytes = Uint8Array | Slice<number>;
26
- export declare function int(value: number): number;
47
+ export declare function int(value: number | bigint, bits?: number): number;
48
+ export declare function uint(value: number | bigint, bits?: number): number;
49
+ export declare function uint64Shl(value: number | bigint, shift: number | bigint): number;
50
+ export declare function uint64Shr(value: number | bigint, shift: number | bigint): number;
51
+ export declare function uintShr(value: number | bigint, shift: number | bigint, bits?: number): number;
52
+ export declare function uint64Mul(left: number | bigint, right: number | bigint): number;
53
+ export declare function uint64Add(left: number | bigint, right: number | bigint): number;
54
+ export declare function uint64Sub(left: number | bigint, right: number | bigint): number;
55
+ export declare function uint64And(left: number | bigint, right: number | bigint): number;
56
+ export declare function uint64Or(left: number | bigint, right: number | bigint): number;
57
+ export declare function uint64Xor(left: number | bigint, right: number | bigint): number;
27
58
  /**
28
59
  * Normalizes various byte representations into a `Uint8Array` for protobuf compatibility.
29
60
  *