goscript 0.0.84 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (428) hide show
  1. package/README.md +267 -243
  2. package/cmd/goscript/cmd-test.go +193 -0
  3. package/cmd/goscript/cmd-test_test.go +76 -0
  4. package/cmd/goscript/cmd_compile.go +70 -69
  5. package/cmd/goscript/cmd_compile_test.go +79 -0
  6. package/cmd/goscript/main.go +11 -5
  7. package/compiler/build-flags.go +38 -0
  8. package/compiler/compile-request.go +220 -0
  9. package/compiler/compiler.go +16 -1336
  10. package/compiler/compliance_test.go +188 -0
  11. package/compiler/config.go +6 -13
  12. package/compiler/diagnostic.go +70 -0
  13. package/compiler/gotest/owner.go +24 -0
  14. package/compiler/gotest/package-result.go +67 -0
  15. package/compiler/gotest/request.go +145 -0
  16. package/compiler/gotest/result.go +28 -0
  17. package/compiler/gotest/runner.go +588 -0
  18. package/compiler/gotest/runner_test.go +627 -0
  19. package/compiler/gotest/test.go +9 -0
  20. package/compiler/index.test.ts +28 -28
  21. package/compiler/index.ts +40 -72
  22. package/compiler/lowered-program.go +184 -0
  23. package/compiler/lowering.go +8072 -0
  24. package/compiler/override-facts.go +307 -0
  25. package/compiler/override-registry.go +283 -0
  26. package/compiler/override-registry_test.go +254 -0
  27. package/compiler/package-graph.go +254 -0
  28. package/compiler/package-graph_test.go +316 -0
  29. package/compiler/package-test-function.go +9 -0
  30. package/compiler/package-test-graph-package.go +40 -0
  31. package/compiler/package-test-graph-variant.go +105 -0
  32. package/compiler/package-test-graph.go +117 -0
  33. package/compiler/package-test-graph_test.go +144 -0
  34. package/compiler/result.go +13 -0
  35. package/compiler/runtime-contract.go +439 -0
  36. package/compiler/runtime-contract_test.go +104 -0
  37. package/compiler/semantic-model-types.go +113 -0
  38. package/compiler/semantic-model.go +1422 -0
  39. package/compiler/semantic-model_test.go +471 -0
  40. package/compiler/service.go +133 -0
  41. package/compiler/skeleton_test.go +1775 -0
  42. package/compiler/tsworkspace/owner.go +334 -0
  43. package/compiler/tsworkspace/owner_test.go +93 -0
  44. package/compiler/tsworkspace/result.go +17 -0
  45. package/compiler/typescript-emitter.go +1040 -0
  46. package/compiler/wasm/compile.go +2 -3
  47. package/compiler/wasm/compile_test.go +79 -0
  48. package/compiler/wasm_api.go +140 -124
  49. package/dist/compiler/index.d.ts +1 -3
  50. package/dist/compiler/index.js +31 -55
  51. package/dist/compiler/index.js.map +1 -1
  52. package/dist/gs/builtin/builtin.d.ts +33 -2
  53. package/dist/gs/builtin/builtin.js +217 -6
  54. package/dist/gs/builtin/builtin.js.map +1 -1
  55. package/dist/gs/builtin/channel.d.ts +11 -3
  56. package/dist/gs/builtin/channel.js +12 -0
  57. package/dist/gs/builtin/channel.js.map +1 -1
  58. package/dist/gs/builtin/hostio.d.ts +15 -1
  59. package/dist/gs/builtin/hostio.js +134 -49
  60. package/dist/gs/builtin/hostio.js.map +1 -1
  61. package/dist/gs/builtin/index.d.ts +1 -0
  62. package/dist/gs/builtin/index.js +1 -0
  63. package/dist/gs/builtin/index.js.map +1 -1
  64. package/dist/gs/builtin/slice.d.ts +23 -3
  65. package/dist/gs/builtin/slice.js +216 -44
  66. package/dist/gs/builtin/slice.js.map +1 -1
  67. package/dist/gs/builtin/type.d.ts +16 -2
  68. package/dist/gs/builtin/type.js +134 -21
  69. package/dist/gs/builtin/type.js.map +1 -1
  70. package/dist/gs/builtin/varRef.d.ts +5 -0
  71. package/dist/gs/builtin/varRef.js +23 -0
  72. package/dist/gs/builtin/varRef.js.map +1 -1
  73. package/dist/gs/bytes/buffer.gs.js +48 -44
  74. package/dist/gs/bytes/buffer.gs.js.map +1 -1
  75. package/dist/gs/bytes/bytes.gs.js.map +1 -1
  76. package/dist/gs/bytes/reader.gs.js +20 -18
  77. package/dist/gs/bytes/reader.gs.js.map +1 -1
  78. package/dist/gs/context/context.d.ts +5 -4
  79. package/dist/gs/context/context.js +10 -10
  80. package/dist/gs/context/context.js.map +1 -1
  81. package/dist/gs/crypto/internal/fips140deps/byteorder/index.d.ts +1 -0
  82. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js +2 -0
  83. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js.map +1 -0
  84. package/dist/gs/crypto/internal/fips140deps/godebug/index.d.ts +1 -0
  85. package/dist/gs/crypto/internal/fips140deps/godebug/index.js +2 -0
  86. package/dist/gs/crypto/internal/fips140deps/godebug/index.js.map +1 -0
  87. package/dist/gs/crypto/rand/index.d.ts +5 -0
  88. package/dist/gs/crypto/rand/index.js +77 -0
  89. package/dist/gs/crypto/rand/index.js.map +1 -0
  90. package/dist/gs/embed/index.d.ts +7 -0
  91. package/dist/gs/embed/index.js +16 -0
  92. package/dist/gs/embed/index.js.map +1 -0
  93. package/dist/gs/encoding/json/index.d.ts +4 -0
  94. package/dist/gs/encoding/json/index.js +178 -0
  95. package/dist/gs/encoding/json/index.js.map +1 -0
  96. package/dist/gs/errors/errors.d.ts +4 -0
  97. package/dist/gs/errors/errors.js +81 -0
  98. package/dist/gs/errors/errors.js.map +1 -1
  99. package/dist/gs/fmt/fmt.d.ts +4 -4
  100. package/dist/gs/fmt/fmt.js +42 -11
  101. package/dist/gs/fmt/fmt.js.map +1 -1
  102. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +36 -1
  103. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +212 -2
  104. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
  105. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.d.ts +189 -0
  106. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js +825 -0
  107. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js.map +1 -0
  108. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +163 -0
  109. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +449 -0
  110. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +1 -0
  111. package/dist/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.js.map +1 -1
  112. package/dist/gs/github.com/klauspost/compress/internal/le/index.d.ts +9 -0
  113. package/dist/gs/github.com/klauspost/compress/internal/le/index.js +71 -0
  114. package/dist/gs/github.com/klauspost/compress/internal/le/index.js.map +1 -0
  115. package/dist/gs/github.com/pkg/errors/errors.js.map +1 -1
  116. package/dist/gs/github.com/pkg/errors/stack.js.map +1 -1
  117. package/dist/gs/go/internal/scannerhooks/index.d.ts +3 -0
  118. package/dist/gs/go/internal/scannerhooks/index.js +5 -0
  119. package/dist/gs/go/internal/scannerhooks/index.js.map +1 -0
  120. package/dist/gs/go/scanner/index.d.ts +42 -0
  121. package/dist/gs/go/scanner/index.js +155 -0
  122. package/dist/gs/go/scanner/index.js.map +1 -0
  123. package/dist/gs/go/token/index.d.ts +187 -0
  124. package/dist/gs/go/token/index.js +578 -0
  125. package/dist/gs/go/token/index.js.map +1 -0
  126. package/dist/gs/internal/abi/index.d.ts +4 -0
  127. package/dist/gs/internal/abi/index.js +10 -0
  128. package/dist/gs/internal/abi/index.js.map +1 -1
  129. package/dist/gs/internal/bytealg/index.d.ts +2 -0
  130. package/dist/gs/internal/bytealg/index.js +14 -0
  131. package/dist/gs/internal/bytealg/index.js.map +1 -1
  132. package/dist/gs/internal/byteorder/index.d.ts +8 -2
  133. package/dist/gs/internal/byteorder/index.js +56 -25
  134. package/dist/gs/internal/byteorder/index.js.map +1 -1
  135. package/dist/gs/internal/godebug/index.d.ts +12 -0
  136. package/dist/gs/internal/godebug/index.js +30 -0
  137. package/dist/gs/internal/godebug/index.js.map +1 -0
  138. package/dist/gs/io/fs/fs.js.map +1 -1
  139. package/dist/gs/io/fs/index.d.ts +1 -0
  140. package/dist/gs/io/fs/index.js +1 -0
  141. package/dist/gs/io/fs/index.js.map +1 -1
  142. package/dist/gs/io/fs/readdir.js.map +1 -1
  143. package/dist/gs/io/fs/readfile.js.map +1 -1
  144. package/dist/gs/io/fs/readlink.d.ts +8 -0
  145. package/dist/gs/io/fs/readlink.js +64 -0
  146. package/dist/gs/io/fs/readlink.js.map +1 -0
  147. package/dist/gs/io/fs/stat.js.map +1 -1
  148. package/dist/gs/io/fs/sub.js.map +1 -1
  149. package/dist/gs/io/fs/walk.d.ts +3 -3
  150. package/dist/gs/io/fs/walk.js +7 -7
  151. package/dist/gs/io/fs/walk.js.map +1 -1
  152. package/dist/gs/io/io.d.ts +40 -6
  153. package/dist/gs/io/io.js +151 -26
  154. package/dist/gs/io/io.js.map +1 -1
  155. package/dist/gs/maps/iter.d.ts +3 -3
  156. package/dist/gs/maps/iter.js +3 -3
  157. package/dist/gs/maps/iter.js.map +1 -1
  158. package/dist/gs/maps/maps.d.ts +2 -2
  159. package/dist/gs/maps/maps.js +1 -1
  160. package/dist/gs/maps/maps.js.map +1 -1
  161. package/dist/gs/math/bits/index.d.ts +13 -4
  162. package/dist/gs/math/bits/index.js +66 -34
  163. package/dist/gs/math/bits/index.js.map +1 -1
  164. package/dist/gs/math/const.gs.d.ts +5 -5
  165. package/dist/gs/math/const.gs.js +4 -4
  166. package/dist/gs/math/const.gs.js.map +1 -1
  167. package/dist/gs/mime/index.d.ts +1 -0
  168. package/dist/gs/mime/index.js +50 -0
  169. package/dist/gs/mime/index.js.map +1 -0
  170. package/dist/gs/net/http/httptest/index.d.ts +11 -0
  171. package/dist/gs/net/http/httptest/index.js +21 -0
  172. package/dist/gs/net/http/httptest/index.js.map +1 -0
  173. package/dist/gs/net/http/index.d.ts +27 -0
  174. package/dist/gs/net/http/index.js +61 -0
  175. package/dist/gs/net/http/index.js.map +1 -0
  176. package/dist/gs/os/dir_unix.gs.js +2 -2
  177. package/dist/gs/os/dir_unix.gs.js.map +1 -1
  178. package/dist/gs/os/error.gs.js +2 -4
  179. package/dist/gs/os/error.gs.js.map +1 -1
  180. package/dist/gs/os/exec.gs.js.map +1 -1
  181. package/dist/gs/os/exec_posix.gs.js.map +1 -1
  182. package/dist/gs/os/rawconn_js.gs.js.map +1 -1
  183. package/dist/gs/os/root_js.gs.js.map +1 -1
  184. package/dist/gs/os/tempfile.gs.js +66 -9
  185. package/dist/gs/os/tempfile.gs.js.map +1 -1
  186. package/dist/gs/os/types.gs.js.map +1 -1
  187. package/dist/gs/os/types_js.gs.js +9 -9
  188. package/dist/gs/os/types_js.gs.js.map +1 -1
  189. package/dist/gs/os/types_unix.gs.js.map +1 -1
  190. package/dist/gs/path/filepath/match.js +165 -3
  191. package/dist/gs/path/filepath/match.js.map +1 -1
  192. package/dist/gs/path/filepath/path.d.ts +3 -1
  193. package/dist/gs/path/filepath/path.js +133 -4
  194. package/dist/gs/path/filepath/path.js.map +1 -1
  195. package/dist/gs/path/match.js.map +1 -1
  196. package/dist/gs/path/path.d.ts +4 -1
  197. package/dist/gs/path/path.js +16 -4
  198. package/dist/gs/path/path.js.map +1 -1
  199. package/dist/gs/reflect/index.d.ts +3 -3
  200. package/dist/gs/reflect/index.js +2 -2
  201. package/dist/gs/reflect/index.js.map +1 -1
  202. package/dist/gs/reflect/map.js +3 -0
  203. package/dist/gs/reflect/map.js.map +1 -1
  204. package/dist/gs/reflect/type.d.ts +9 -5
  205. package/dist/gs/reflect/type.js +233 -21
  206. package/dist/gs/reflect/type.js.map +1 -1
  207. package/dist/gs/reflect/types.js.map +1 -1
  208. package/dist/gs/reflect/visiblefields.js.map +1 -1
  209. package/dist/gs/runtime/debug/index.d.ts +2 -0
  210. package/dist/gs/runtime/debug/index.js +8 -0
  211. package/dist/gs/runtime/debug/index.js.map +1 -0
  212. package/dist/gs/runtime/runtime.d.ts +35 -3
  213. package/dist/gs/runtime/runtime.js +72 -0
  214. package/dist/gs/runtime/runtime.js.map +1 -1
  215. package/dist/gs/slices/slices.d.ts +24 -5
  216. package/dist/gs/slices/slices.js +214 -5
  217. package/dist/gs/slices/slices.js.map +1 -1
  218. package/dist/gs/sort/slice.gs.d.ts +3 -3
  219. package/dist/gs/sort/slice.gs.js +6 -6
  220. package/dist/gs/sort/slice.gs.js.map +1 -1
  221. package/dist/gs/sort/sort.gs.d.ts +4 -4
  222. package/dist/gs/sort/sort.gs.js +11 -8
  223. package/dist/gs/sort/sort.gs.js.map +1 -1
  224. package/dist/gs/strconv/atoi.gs.js.map +1 -1
  225. package/dist/gs/strconv/quote.gs.js.map +1 -1
  226. package/dist/gs/strings/builder.d.ts +1 -1
  227. package/dist/gs/strings/builder.js +3 -2
  228. package/dist/gs/strings/builder.js.map +1 -1
  229. package/dist/gs/strings/reader.js.map +1 -1
  230. package/dist/gs/strings/replace.js.map +1 -1
  231. package/dist/gs/sync/atomic/type.gs.d.ts +9 -8
  232. package/dist/gs/sync/atomic/type.gs.js +0 -2
  233. package/dist/gs/sync/atomic/type.gs.js.map +1 -1
  234. package/dist/gs/sync/atomic/value.gs.js.map +1 -1
  235. package/dist/gs/sync/sync.d.ts +3 -0
  236. package/dist/gs/sync/sync.js +39 -0
  237. package/dist/gs/sync/sync.js.map +1 -1
  238. package/dist/gs/syscall/constants.d.ts +36 -24
  239. package/dist/gs/syscall/constants.js +12 -0
  240. package/dist/gs/syscall/constants.js.map +1 -1
  241. package/dist/gs/syscall/errors.d.ts +2 -0
  242. package/dist/gs/syscall/errors.js +8 -0
  243. package/dist/gs/syscall/errors.js.map +1 -1
  244. package/dist/gs/syscall/fs.d.ts +43 -0
  245. package/dist/gs/syscall/fs.js +102 -0
  246. package/dist/gs/syscall/fs.js.map +1 -1
  247. package/dist/gs/syscall/js/index.d.ts +90 -0
  248. package/dist/gs/syscall/js/index.js +375 -0
  249. package/dist/gs/syscall/js/index.js.map +1 -0
  250. package/dist/gs/syscall/types.d.ts +22 -0
  251. package/dist/gs/syscall/types.js +45 -1
  252. package/dist/gs/syscall/types.js.map +1 -1
  253. package/dist/gs/testing/index.d.ts +1 -0
  254. package/dist/gs/testing/index.js +2 -0
  255. package/dist/gs/testing/index.js.map +1 -0
  256. package/dist/gs/testing/testing.d.ts +77 -0
  257. package/dist/gs/testing/testing.js +301 -0
  258. package/dist/gs/testing/testing.js.map +1 -0
  259. package/dist/gs/time/time.d.ts +41 -4
  260. package/dist/gs/time/time.js +205 -36
  261. package/dist/gs/time/time.js.map +1 -1
  262. package/dist/gs/unicode/unicode.d.ts +23 -1
  263. package/dist/gs/unicode/unicode.js +79 -10
  264. package/dist/gs/unicode/unicode.js.map +1 -1
  265. package/dist/gs/unicode/utf8/utf8.d.ts +4 -4
  266. package/dist/gs/unicode/utf8/utf8.js +24 -11
  267. package/dist/gs/unicode/utf8/utf8.js.map +1 -1
  268. package/dist/gs/unique/index.d.ts +11 -0
  269. package/dist/gs/unique/index.js +71 -0
  270. package/dist/gs/unique/index.js.map +1 -0
  271. package/go.mod +2 -2
  272. package/go.sum +9 -0
  273. package/gs/builtin/builtin.ts +266 -8
  274. package/gs/builtin/channel.ts +22 -0
  275. package/gs/builtin/hostio.test.ts +177 -0
  276. package/gs/builtin/hostio.ts +171 -56
  277. package/gs/builtin/index.ts +1 -0
  278. package/gs/builtin/runtime-contract.test.ts +356 -0
  279. package/gs/builtin/slice.ts +259 -50
  280. package/gs/builtin/type.ts +188 -30
  281. package/gs/builtin/varRef.ts +38 -1
  282. package/gs/bytes/buffer.gs.ts +48 -44
  283. package/gs/bytes/meta.json +8 -3
  284. package/gs/bytes/reader.gs.ts +20 -19
  285. package/gs/context/context.test.ts +41 -0
  286. package/gs/context/context.ts +22 -26
  287. package/gs/crypto/internal/fips140deps/byteorder/index.ts +1 -0
  288. package/gs/crypto/internal/fips140deps/godebug/index.ts +1 -0
  289. package/gs/crypto/rand/index.test.ts +32 -0
  290. package/gs/crypto/rand/index.ts +90 -0
  291. package/gs/crypto/rand/meta.json +5 -0
  292. package/gs/embed/index.ts +20 -0
  293. package/gs/embed/meta.json +5 -0
  294. package/gs/encoding/json/index.test.ts +79 -0
  295. package/gs/encoding/json/index.ts +210 -0
  296. package/gs/errors/errors.test.ts +82 -0
  297. package/gs/errors/errors.ts +104 -0
  298. package/gs/fmt/fmt.ts +56 -16
  299. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +95 -0
  300. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +300 -2
  301. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +159 -0
  302. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +1005 -0
  303. package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +719 -0
  304. package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +40 -0
  305. package/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/meta.json +3 -1
  306. package/gs/github.com/klauspost/compress/internal/le/index.test.ts +36 -0
  307. package/gs/github.com/klauspost/compress/internal/le/index.ts +114 -0
  308. package/gs/go/internal/scannerhooks/index.test.ts +14 -0
  309. package/gs/go/internal/scannerhooks/index.ts +9 -0
  310. package/gs/go/scanner/index.test.ts +72 -0
  311. package/gs/go/scanner/index.ts +204 -0
  312. package/gs/go/token/index.test.ts +67 -0
  313. package/gs/go/token/index.ts +686 -0
  314. package/gs/internal/abi/index.test.ts +18 -0
  315. package/gs/internal/abi/index.ts +14 -0
  316. package/gs/internal/bytealg/index.test.ts +18 -0
  317. package/gs/internal/bytealg/index.ts +16 -0
  318. package/gs/internal/byteorder/index.test.ts +39 -0
  319. package/gs/internal/byteorder/index.ts +100 -27
  320. package/gs/internal/godebug/index.test.ts +16 -0
  321. package/gs/internal/godebug/index.ts +35 -0
  322. package/gs/io/fs/index.ts +1 -0
  323. package/gs/io/fs/meta.json +5 -0
  324. package/gs/io/fs/readlink.test.ts +43 -0
  325. package/gs/io/fs/readlink.ts +77 -0
  326. package/gs/io/fs/walk.test.ts +61 -0
  327. package/gs/io/fs/walk.ts +9 -9
  328. package/gs/io/io.ts +174 -31
  329. package/gs/io/meta.json +10 -2
  330. package/gs/maps/iter.ts +12 -6
  331. package/gs/maps/maps.ts +8 -6
  332. package/gs/math/bits/index.ts +103 -47
  333. package/gs/math/const.gs.test.ts +11 -5
  334. package/gs/math/const.gs.ts +5 -6
  335. package/gs/mime/index.ts +54 -0
  336. package/gs/net/http/httptest/index.ts +25 -0
  337. package/gs/net/http/index.test.ts +20 -0
  338. package/gs/net/http/index.ts +81 -0
  339. package/gs/os/dir_unix.gs.ts +2 -3
  340. package/gs/os/file_unix_js.test.ts +50 -0
  341. package/gs/os/meta.json +1 -2
  342. package/gs/os/tempfile.gs.test.ts +85 -0
  343. package/gs/os/tempfile.gs.ts +71 -11
  344. package/gs/os/types_js.gs.ts +11 -11
  345. package/gs/path/filepath/match.test.ts +31 -12
  346. package/gs/path/filepath/match.ts +178 -3
  347. package/gs/path/filepath/path.test.ts +25 -0
  348. package/gs/path/filepath/path.ts +159 -5
  349. package/gs/path/path.ts +20 -5
  350. package/gs/reflect/index.ts +2 -1
  351. package/gs/reflect/map.test.ts +19 -0
  352. package/gs/reflect/map.ts +4 -0
  353. package/gs/reflect/type.ts +298 -29
  354. package/gs/reflect/typefor.test.ts +75 -0
  355. package/gs/runtime/debug/index.test.ts +24 -0
  356. package/gs/runtime/debug/index.ts +8 -0
  357. package/gs/runtime/runtime.test.ts +19 -0
  358. package/gs/runtime/runtime.ts +98 -3
  359. package/gs/slices/slices.test.ts +94 -0
  360. package/gs/slices/slices.ts +245 -5
  361. package/gs/sort/meta.json +7 -0
  362. package/gs/sort/slice.gs.ts +16 -7
  363. package/gs/sort/sort.gs.ts +16 -13
  364. package/gs/strings/builder.ts +4 -3
  365. package/gs/sync/atomic/type.gs.ts +13 -14
  366. package/gs/sync/meta.json +3 -1
  367. package/gs/sync/sync.test.ts +36 -0
  368. package/gs/sync/sync.ts +39 -0
  369. package/gs/syscall/constants.ts +39 -24
  370. package/gs/syscall/errors.ts +10 -0
  371. package/gs/syscall/fs.ts +195 -0
  372. package/gs/syscall/js/index.ts +458 -0
  373. package/gs/syscall/js/meta.json +4 -0
  374. package/gs/syscall/net.test.ts +85 -0
  375. package/gs/syscall/types.ts +56 -0
  376. package/gs/testing/index.ts +1 -0
  377. package/gs/testing/meta.json +5 -0
  378. package/gs/testing/testing.test.ts +90 -0
  379. package/gs/testing/testing.ts +382 -0
  380. package/gs/time/time.test.ts +106 -0
  381. package/gs/time/time.ts +278 -57
  382. package/gs/unicode/unicode.test.ts +25 -0
  383. package/gs/unicode/unicode.ts +119 -9
  384. package/gs/unicode/utf8/utf8.test.ts +13 -0
  385. package/gs/unicode/utf8/utf8.ts +28 -16
  386. package/gs/unique/index.ts +91 -0
  387. package/package.json +14 -13
  388. package/compiler/analysis.go +0 -3475
  389. package/compiler/analysis_test.go +0 -338
  390. package/compiler/assignment.go +0 -580
  391. package/compiler/builtin_test.go +0 -92
  392. package/compiler/code-writer.go +0 -115
  393. package/compiler/compiler_test.go +0 -149
  394. package/compiler/composite-lit.go +0 -779
  395. package/compiler/config_test.go +0 -62
  396. package/compiler/constraint.go +0 -86
  397. package/compiler/decl.go +0 -801
  398. package/compiler/expr-call-async.go +0 -188
  399. package/compiler/expr-call-builtins.go +0 -208
  400. package/compiler/expr-call-helpers.go +0 -382
  401. package/compiler/expr-call-make.go +0 -318
  402. package/compiler/expr-call-type-conversion.go +0 -520
  403. package/compiler/expr-call.go +0 -413
  404. package/compiler/expr-selector.go +0 -343
  405. package/compiler/expr-star.go +0 -82
  406. package/compiler/expr-type.go +0 -442
  407. package/compiler/expr-value.go +0 -89
  408. package/compiler/expr.go +0 -773
  409. package/compiler/field.go +0 -183
  410. package/compiler/gs_dependencies_test.go +0 -298
  411. package/compiler/lit.go +0 -322
  412. package/compiler/output.go +0 -72
  413. package/compiler/primitive.go +0 -149
  414. package/compiler/protobuf.go +0 -697
  415. package/compiler/sanitize.go +0 -100
  416. package/compiler/spec-struct.go +0 -995
  417. package/compiler/spec-value.go +0 -540
  418. package/compiler/spec.go +0 -725
  419. package/compiler/stmt-assign.go +0 -664
  420. package/compiler/stmt-for.go +0 -266
  421. package/compiler/stmt-range.go +0 -475
  422. package/compiler/stmt-select.go +0 -262
  423. package/compiler/stmt-type-switch.go +0 -147
  424. package/compiler/stmt.go +0 -1308
  425. package/compiler/type-assert.go +0 -386
  426. package/compiler/type-info.go +0 -156
  427. package/compiler/type-utils.go +0 -207
  428. package/compiler/type.go +0 -892
@@ -0,0 +1,254 @@
1
+ package compiler
2
+
3
+ import (
4
+ "context"
5
+ "os"
6
+ "path/filepath"
7
+ "slices"
8
+ "strings"
9
+ "testing"
10
+ )
11
+
12
+ func TestOverrideRegistryPlansRuntimeAndOverrideDependencies(t *testing.T) {
13
+ owner := NewOverrideRegistryOwner()
14
+ plan, diagnostics := owner.CopyPlan(context.Background(), &CompileRequest{
15
+ RuntimeEmissionMode: RuntimeEmissionModeEmit,
16
+ }, &PackageGraph{Nodes: []*PackageGraphNode{{
17
+ PkgPath: "fmt",
18
+ OverrideCandidate: true,
19
+ }}})
20
+ if diagnosticsHaveErrors(diagnostics) {
21
+ t.Fatalf("copy plan failed: %#v", diagnostics)
22
+ }
23
+
24
+ var packages []string
25
+ for _, pkg := range plan.packages {
26
+ packages = append(packages, pkg.path)
27
+ }
28
+ for _, pkg := range []string{"builtin", "errors", "fmt"} {
29
+ if !slices.Contains(packages, pkg) {
30
+ t.Fatalf("missing %s in copy plan: %v", pkg, packages)
31
+ }
32
+ }
33
+ if slices.Index(packages, "errors") > slices.Index(packages, "fmt") {
34
+ t.Fatalf("dependency order is wrong: %v", packages)
35
+ }
36
+ }
37
+
38
+ func TestOverrideRegistryFactsAreImmutable(t *testing.T) {
39
+ owner := NewOverrideRegistryOwner()
40
+ facts, diagnostics := owner.Facts(context.Background())
41
+ if diagnosticsHaveErrors(diagnostics) {
42
+ t.Fatalf("override facts failed: %#v", diagnostics)
43
+ }
44
+
45
+ metadata := facts.Metadata("sync")
46
+ if !metadata.AsyncMethods["Map.Load"] {
47
+ t.Fatalf("expected sync Map.Load async metadata")
48
+ }
49
+ metadata.AsyncMethods["Map.Load"] = false
50
+ metadata.Dependencies = append(metadata.Dependencies, "mutated")
51
+
52
+ metadata = facts.Metadata("sync")
53
+ if !metadata.AsyncMethods["Map.Load"] {
54
+ t.Fatalf("override metadata mutation leaked back into facts")
55
+ }
56
+ if slices.Contains(metadata.Dependencies, "mutated") {
57
+ t.Fatalf("override dependency mutation leaked back into facts: %v", metadata.Dependencies)
58
+ }
59
+
60
+ pkg, dependencies, ok := facts.copyPackage("fmt")
61
+ if !ok {
62
+ t.Fatalf("missing fmt copy package facts")
63
+ }
64
+ if !slices.Contains(dependencies, "errors") {
65
+ t.Fatalf("expected fmt dependency on errors, got %v", dependencies)
66
+ }
67
+ dependencies = append(dependencies, "mutated")
68
+ if len(pkg.files) == 0 {
69
+ t.Fatalf("expected fmt copy files")
70
+ }
71
+ pkg.files[0].data[0] = '!'
72
+
73
+ pkg, dependencies, ok = facts.copyPackage("fmt")
74
+ if !ok {
75
+ t.Fatalf("missing fmt copy package facts after mutation")
76
+ }
77
+ if slices.Contains(dependencies, "mutated") {
78
+ t.Fatalf("copy dependency mutation leaked back into facts: %v", dependencies)
79
+ }
80
+ if len(pkg.files) == 0 || pkg.files[0].data[0] == '!' {
81
+ t.Fatalf("copy file mutation leaked back into facts")
82
+ }
83
+ }
84
+
85
+ func TestOverrideRegistryCopiesRuntimeAndOverrides(t *testing.T) {
86
+ owner := NewOverrideRegistryOwner()
87
+ req := &CompileRequest{
88
+ OutputPath: filepath.Join(t.TempDir(), "out"),
89
+ RuntimeEmissionMode: RuntimeEmissionModeEmit,
90
+ }
91
+ plan, diagnostics := owner.CopyPlan(context.Background(), req, &PackageGraph{Nodes: []*PackageGraphNode{{
92
+ PkgPath: "fmt",
93
+ OverrideCandidate: true,
94
+ }}})
95
+ if diagnosticsHaveErrors(diagnostics) {
96
+ t.Fatalf("copy plan failed: %#v", diagnostics)
97
+ }
98
+ copied, diagnostics := owner.CopyPackages(context.Background(), req, plan)
99
+ if diagnosticsHaveErrors(diagnostics) {
100
+ t.Fatalf("copy failed: %#v", diagnostics)
101
+ }
102
+ for _, pkg := range []string{"builtin", "errors", "fmt"} {
103
+ if !slices.Contains(copied, pkg) {
104
+ t.Fatalf("missing copied package %s in %v", pkg, copied)
105
+ }
106
+ }
107
+ for _, path := range []string{
108
+ "@goscript/builtin/index.ts",
109
+ "@goscript/errors/index.ts",
110
+ "@goscript/fmt/index.ts",
111
+ } {
112
+ if _, err := os.Stat(filepath.Join(req.OutputPath, filepath.FromSlash(path))); err != nil {
113
+ t.Fatalf("expected copied file %s: %v", path, err)
114
+ }
115
+ }
116
+ if _, err := os.Stat(filepath.Join(req.OutputPath, "@goscript", "fmt", "fmt.test.ts")); !os.IsNotExist(err) {
117
+ t.Fatalf("override copy should not include test files")
118
+ }
119
+ }
120
+
121
+ func TestOverrideRegistryReportsMissingOverridePackage(t *testing.T) {
122
+ _, diagnostics := NewOverrideRegistryOwner().CopyPlan(context.Background(), &CompileRequest{
123
+ RuntimeEmissionMode: RuntimeEmissionModeEmit,
124
+ }, &PackageGraph{Nodes: []*PackageGraphNode{{
125
+ PkgPath: "does/not/exist",
126
+ OverrideCandidate: true,
127
+ }}})
128
+ requireDiagnosticCode(t, diagnostics, "goscript/overrides:missing-package")
129
+ }
130
+
131
+ func TestOverrideRegistryPlansOsOverrideDependencies(t *testing.T) {
132
+ owner := NewOverrideRegistryOwner()
133
+ plan, diagnostics := owner.CopyPlan(context.Background(), &CompileRequest{
134
+ RuntimeEmissionMode: RuntimeEmissionModeEmit,
135
+ }, &PackageGraph{Nodes: []*PackageGraphNode{{
136
+ PkgPath: "os",
137
+ OverrideCandidate: true,
138
+ }}})
139
+ if diagnosticsHaveErrors(diagnostics) {
140
+ t.Fatalf("copy plan failed: %#v", diagnostics)
141
+ }
142
+
143
+ var packages []string
144
+ for _, pkg := range plan.packages {
145
+ packages = append(packages, pkg.path)
146
+ }
147
+ if !slices.Contains(packages, "os") {
148
+ t.Fatalf("missing os in copy plan: %v", packages)
149
+ }
150
+ if slices.Contains(packages, "internal/poll") {
151
+ t.Fatalf("os copy plan includes stale internal/poll dependency: %v", packages)
152
+ }
153
+ }
154
+
155
+ func TestOverrideRegistryPlansNestedOverrideMetadataDependencies(t *testing.T) {
156
+ owner := NewOverrideRegistryOwner()
157
+ plan, diagnostics := owner.CopyPlan(context.Background(), &CompileRequest{
158
+ RuntimeEmissionMode: RuntimeEmissionModeEmit,
159
+ }, &PackageGraph{Nodes: []*PackageGraphNode{{
160
+ PkgPath: "github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser",
161
+ OverrideCandidate: true,
162
+ }}})
163
+ if diagnosticsHaveErrors(diagnostics) {
164
+ t.Fatalf("copy plan failed: %#v", diagnostics)
165
+ }
166
+
167
+ var packages []string
168
+ for _, pkg := range plan.packages {
169
+ packages = append(packages, pkg.path)
170
+ }
171
+
172
+ runtimePkg := "github.com/aperturerobotics/wasivm/wazero/kernel/runtime"
173
+ browserPkg := "github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser"
174
+ for _, pkg := range []string{"builtin", runtimePkg, browserPkg} {
175
+ if !slices.Contains(packages, pkg) {
176
+ t.Fatalf("missing %s in copy plan: %v", pkg, packages)
177
+ }
178
+ }
179
+ if slices.Index(packages, runtimePkg) > slices.Index(packages, browserPkg) {
180
+ t.Fatalf("nested override dependency order is wrong: %v", packages)
181
+ }
182
+ }
183
+
184
+ func TestCompilePackagesCopiesRuntimeOverrides(t *testing.T) {
185
+ moduleDir := writePackageGraphFixture(t, map[string]string{
186
+ "go.mod": "module example.test/overridecopy\n\ngo 1.25.3\n",
187
+ "main.go": "package main\nimport \"fmt\"\nfunc main() { fmt.Println(\"ok\") }\n",
188
+ })
189
+ out := filepath.Join(t.TempDir(), "out")
190
+ comp, err := NewCompiler(&Config{
191
+ Dir: moduleDir,
192
+ OutputPath: out,
193
+ AllDependencies: true,
194
+ }, nil, nil)
195
+ if err != nil {
196
+ t.Fatal(err.Error())
197
+ }
198
+
199
+ result, err := comp.CompilePackages(context.Background(), ".")
200
+ if err != nil {
201
+ t.Fatalf("compile failed: %v\n%#v", err, result.Diagnostics)
202
+ }
203
+ for _, pkg := range []string{"builtin", "errors", "fmt"} {
204
+ if !slices.Contains(result.CopiedPackages, pkg) {
205
+ t.Fatalf("missing copied package %s in %#v", pkg, result.CopiedPackages)
206
+ }
207
+ }
208
+ for _, path := range []string{
209
+ "@goscript/example.test/overridecopy/main.gs.ts",
210
+ "@goscript/builtin/index.ts",
211
+ "@goscript/fmt/index.ts",
212
+ } {
213
+ if _, err := os.Stat(filepath.Join(out, filepath.FromSlash(path))); err != nil {
214
+ t.Fatalf("expected output file %s: %v", path, err)
215
+ }
216
+ }
217
+ }
218
+
219
+ func TestCompilePackagesAwaitsOverrideAsyncMethods(t *testing.T) {
220
+ moduleDir := writePackageGraphFixture(t, map[string]string{
221
+ "go.mod": "module example.test/overrideasync\n\ngo 1.25.3\n",
222
+ "main.go": strings.Join([]string{
223
+ "package main",
224
+ "import \"sync\"",
225
+ "func main() {",
226
+ " var m sync.Map",
227
+ " if value, ok := m.Load(\"key\"); ok {",
228
+ " println(value)",
229
+ " }",
230
+ "}",
231
+ "",
232
+ }, "\n"),
233
+ })
234
+ out := filepath.Join(t.TempDir(), "out")
235
+ comp, err := NewCompiler(&Config{
236
+ Dir: moduleDir,
237
+ OutputPath: out,
238
+ AllDependencies: true,
239
+ }, nil, nil)
240
+ if err != nil {
241
+ t.Fatal(err.Error())
242
+ }
243
+
244
+ if _, err := comp.CompilePackages(context.Background(), "."); err != nil {
245
+ t.Fatal(err.Error())
246
+ }
247
+ content, err := os.ReadFile(filepath.Join(out, "@goscript", "example.test", "overrideasync", "main.gs.ts"))
248
+ if err != nil {
249
+ t.Fatal(err.Error())
250
+ }
251
+ if !strings.Contains(string(content), "let [value, ok] = await m.value.Load(\"key\")") {
252
+ t.Fatalf("override async method call was not awaited:\n%s", string(content))
253
+ }
254
+ }
@@ -0,0 +1,254 @@
1
+ package compiler
2
+
3
+ import (
4
+ "context"
5
+ "os"
6
+ "slices"
7
+ "strings"
8
+
9
+ "golang.org/x/tools/go/packages"
10
+ )
11
+
12
+ // PackageGraph is the immutable package graph produced for a compile request.
13
+ type PackageGraph struct {
14
+ // RequestedPatterns are the package patterns from the compile request.
15
+ RequestedPatterns []string
16
+ // RequestedPackagePaths are the loaded package paths for requested patterns.
17
+ RequestedPackagePaths []string
18
+ // Nodes are the deterministic package graph nodes.
19
+ Nodes []*PackageGraphNode
20
+ // NodesByPackagePath maps package path to graph node.
21
+ NodesByPackagePath map[string]*PackageGraphNode
22
+
23
+ packagesByPath map[string]*packages.Package
24
+ }
25
+
26
+ // PackageGraphNode is one package in the loaded graph.
27
+ type PackageGraphNode struct {
28
+ // ID is the go/packages package identity.
29
+ ID string
30
+ // PkgPath is the stable Go package path.
31
+ PkgPath string
32
+ // Name is the Go package name.
33
+ Name string
34
+ // ModulePath is the owning module path when known.
35
+ ModulePath string
36
+ // ModuleDir is the owning module directory when known.
37
+ ModuleDir string
38
+ // ForTest is the package path under test for Go test variants.
39
+ ForTest string
40
+ // GoFiles are the package source files.
41
+ GoFiles []string
42
+ // CompiledGoFiles are files selected by build constraints.
43
+ CompiledGoFiles []string
44
+ // Imports are imported package paths.
45
+ Imports []string
46
+ // Requested marks packages matched by request patterns.
47
+ Requested bool
48
+ // OverrideCandidate marks packages with a matching GoScript override package.
49
+ OverrideCandidate bool
50
+ }
51
+
52
+ // PackageGraphOwner owns Go package loading and graph identity.
53
+ type PackageGraphOwner struct {
54
+ overrideOwner *OverrideRegistryOwner
55
+ }
56
+
57
+ // NewPackageGraphOwner creates the package graph owner.
58
+ func NewPackageGraphOwner(overrideOwners ...*OverrideRegistryOwner) *PackageGraphOwner {
59
+ overrideOwner := NewOverrideRegistryOwner()
60
+ if len(overrideOwners) != 0 && overrideOwners[0] != nil {
61
+ overrideOwner = overrideOwners[0]
62
+ }
63
+ return &PackageGraphOwner{overrideOwner: overrideOwner}
64
+ }
65
+
66
+ // Load builds the package graph for a validated request.
67
+ func (o *PackageGraphOwner) Load(ctx context.Context, req *CompileRequest) (*PackageGraph, []Diagnostic) {
68
+ if err := ctx.Err(); err != nil {
69
+ return nil, []Diagnostic{{
70
+ Severity: DiagnosticSeverityError,
71
+ Code: "goscript/context:canceled",
72
+ Message: err.Error(),
73
+ }}
74
+ }
75
+
76
+ cfg := &packages.Config{
77
+ Context: ctx,
78
+ Dir: req.Dir,
79
+ Env: append(os.Environ(), "GOOS=js", "GOARCH=wasm"),
80
+ BuildFlags: goScriptBuildFlags(req.BuildFlags),
81
+ Tests: req.Tests,
82
+ Mode: packages.NeedName |
83
+ packages.NeedFiles |
84
+ packages.NeedCompiledGoFiles |
85
+ packages.NeedImports |
86
+ packages.NeedDeps |
87
+ packages.NeedExportFile |
88
+ packages.NeedTypes |
89
+ packages.NeedSyntax |
90
+ packages.NeedTypesInfo |
91
+ packages.NeedTypesSizes |
92
+ packages.NeedForTest |
93
+ packages.NeedModule,
94
+ }
95
+ pkgs, err := packages.Load(cfg, req.Patterns...)
96
+ if err != nil {
97
+ return nil, []Diagnostic{{
98
+ Severity: DiagnosticSeverityError,
99
+ Code: "goscript/package-graph:load",
100
+ Message: "failed to load Go packages",
101
+ Detail: err.Error(),
102
+ }}
103
+ }
104
+ if len(pkgs) == 0 {
105
+ return nil, []Diagnostic{{
106
+ Severity: DiagnosticSeverityError,
107
+ Code: "goscript/package-graph:no-packages",
108
+ Message: "package patterns did not match any packages",
109
+ }}
110
+ }
111
+ overrideFacts, overrideDiagnostics := o.overrideOwner.Facts(ctx)
112
+ if diagnosticsHaveErrors(overrideDiagnostics) {
113
+ return nil, overrideDiagnostics
114
+ }
115
+
116
+ graph := &PackageGraph{
117
+ RequestedPatterns: append([]string(nil), req.Patterns...),
118
+ NodesByPackagePath: make(map[string]*PackageGraphNode),
119
+ packagesByPath: make(map[string]*packages.Package),
120
+ RequestedPackagePaths: make([]string, 0, len(pkgs)),
121
+ }
122
+
123
+ requested := make(map[string]bool)
124
+ for _, pkg := range pkgs {
125
+ if isTestMainPackage(pkg) {
126
+ continue
127
+ }
128
+ path := packagePath(pkg)
129
+ requested[path] = true
130
+ graph.RequestedPackagePaths = append(graph.RequestedPackagePaths, path)
131
+ }
132
+ slices.Sort(graph.RequestedPackagePaths)
133
+
134
+ var diagnostics []Diagnostic
135
+ seen := make(map[string]bool)
136
+ for _, pkg := range pkgs {
137
+ if isTestMainPackage(pkg) {
138
+ continue
139
+ }
140
+ o.collect(graph, pkg, req.DependencyMode, requested, overrideFacts, seen)
141
+ diagnostics = append(diagnostics, packageDiagnostics(pkg)...)
142
+ }
143
+ slices.SortFunc(graph.Nodes, func(a, b *PackageGraphNode) int {
144
+ if a.PkgPath == b.PkgPath {
145
+ return strings.Compare(a.ID, b.ID)
146
+ }
147
+ return strings.Compare(a.PkgPath, b.PkgPath)
148
+ })
149
+ if len(graph.Nodes) == 0 {
150
+ diagnostics = append(diagnostics, Diagnostic{
151
+ Severity: DiagnosticSeverityError,
152
+ Code: "goscript/package-graph:no-nodes",
153
+ Message: "package graph did not contain any package nodes",
154
+ })
155
+ }
156
+ return graph, diagnostics
157
+ }
158
+
159
+ func (o *PackageGraphOwner) collect(
160
+ graph *PackageGraph,
161
+ pkg *packages.Package,
162
+ mode DependencyMode,
163
+ requested map[string]bool,
164
+ overrideFacts *OverrideFacts,
165
+ seen map[string]bool,
166
+ ) {
167
+ if pkg == nil || seen[pkg.ID] {
168
+ return
169
+ }
170
+ if pkg.ForTest != "" && !requested[pkg.ForTest] {
171
+ if prod := pkg.Imports[pkg.ForTest]; prod != nil {
172
+ o.collect(graph, prod, mode, requested, overrideFacts, seen)
173
+ }
174
+ return
175
+ }
176
+ seen[pkg.ID] = true
177
+
178
+ path := packagePath(pkg)
179
+ node := newPackageGraphNode(pkg, requested[path], overrideFacts)
180
+ graph.Nodes = append(graph.Nodes, node)
181
+ graph.NodesByPackagePath[path] = node
182
+ graph.packagesByPath[path] = pkg
183
+
184
+ if mode != DependencyModeAll || node.OverrideCandidate {
185
+ return
186
+ }
187
+ imports := make([]string, 0, len(pkg.Imports))
188
+ for importPath := range pkg.Imports {
189
+ imports = append(imports, importPath)
190
+ }
191
+ slices.Sort(imports)
192
+ for _, importPath := range imports {
193
+ o.collect(graph, pkg.Imports[importPath], mode, requested, overrideFacts, seen)
194
+ }
195
+ }
196
+
197
+ func newPackageGraphNode(pkg *packages.Package, requested bool, overrideFacts *OverrideFacts) *PackageGraphNode {
198
+ imports := make([]string, 0, len(pkg.Imports))
199
+ for importPath := range pkg.Imports {
200
+ imports = append(imports, importPath)
201
+ }
202
+ slices.Sort(imports)
203
+
204
+ var modulePath string
205
+ var moduleDir string
206
+ if pkg.Module != nil {
207
+ modulePath = pkg.Module.Path
208
+ moduleDir = pkg.Module.Dir
209
+ }
210
+
211
+ return &PackageGraphNode{
212
+ ID: pkg.ID,
213
+ PkgPath: packagePath(pkg),
214
+ Name: pkg.Name,
215
+ ModulePath: modulePath,
216
+ ModuleDir: moduleDir,
217
+ ForTest: pkg.ForTest,
218
+ GoFiles: append([]string(nil), pkg.GoFiles...),
219
+ CompiledGoFiles: append([]string(nil), pkg.CompiledGoFiles...),
220
+ Imports: imports,
221
+ Requested: requested,
222
+ OverrideCandidate: overrideFacts.HasPackage(packagePath(pkg)),
223
+ }
224
+ }
225
+
226
+ func isTestMainPackage(pkg *packages.Package) bool {
227
+ return pkg != nil && pkg.ForTest == "" && pkg.Name == "main" && strings.HasSuffix(packagePath(pkg), ".test")
228
+ }
229
+
230
+ func packagePath(pkg *packages.Package) string {
231
+ if pkg == nil {
232
+ return ""
233
+ }
234
+ if pkg.PkgPath != "" {
235
+ return pkg.PkgPath
236
+ }
237
+ return pkg.ID
238
+ }
239
+
240
+ func packageDiagnostics(pkg *packages.Package) []Diagnostic {
241
+ if pkg == nil || len(pkg.Errors) == 0 {
242
+ return nil
243
+ }
244
+ diagnostics := make([]Diagnostic, 0, len(pkg.Errors))
245
+ for _, pkgErr := range pkg.Errors {
246
+ diagnostics = append(diagnostics, Diagnostic{
247
+ Severity: DiagnosticSeverityError,
248
+ Code: "goscript/package-graph:load-error",
249
+ Message: "Go package contains load errors",
250
+ Detail: pkgErr.Msg,
251
+ })
252
+ }
253
+ return diagnostics
254
+ }