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,471 @@
1
+ package compiler
2
+
3
+ import (
4
+ "context"
5
+ "go/token"
6
+ "go/types"
7
+ "path/filepath"
8
+ "strings"
9
+ "testing"
10
+ )
11
+
12
+ func TestSemanticModelBuildsDeclarationFacts(t *testing.T) {
13
+ moduleDir := writePackageGraphFixture(t, map[string]string{
14
+ "go.mod": "module example.test/semantic\n\ngo 1.25.3\n",
15
+ "main.go": strings.Join([]string{
16
+ "package semantic",
17
+ "import \"fmt\"",
18
+ "type Counter struct { Value int }",
19
+ "const Answer = 42",
20
+ "var Global Counter",
21
+ "func Print() { fmt.Println(Answer) }",
22
+ "",
23
+ }, "\n"),
24
+ })
25
+ graph := loadPackageGraph(t, &CompileRequest{
26
+ Patterns: []string{"."},
27
+ Dir: moduleDir,
28
+ OutputPath: filepath.Join(t.TempDir(), "out"),
29
+ DependencyMode: DependencyModeRequested,
30
+ RuntimeEmissionMode: RuntimeEmissionModeEmit,
31
+ })
32
+ model := buildSemanticModel(t, graph)
33
+ semPkg := requireSemanticPackage(t, model, "example.test/semantic")
34
+
35
+ for _, decl := range []struct {
36
+ kind string
37
+ name string
38
+ }{
39
+ {kind: "type", name: "Counter"},
40
+ {kind: "const", name: "Answer"},
41
+ {kind: "var", name: "Global"},
42
+ {kind: "func", name: "Print"},
43
+ } {
44
+ if !hasSemanticDeclaration(semPkg, decl.kind, decl.name) {
45
+ t.Fatalf("missing declaration %s %s in %#v", decl.kind, decl.name, semPkg.declarations)
46
+ }
47
+ }
48
+ if len(semPkg.imports) != 1 || semPkg.imports[0].path != "fmt" {
49
+ t.Fatalf("unexpected imports: %#v", semPkg.imports)
50
+ }
51
+
52
+ global := requireSemanticValue(t, model, graph, "example.test/semantic", "Global")
53
+ if !global.topLevel || global.zeroValueKind != "struct-zero" {
54
+ t.Fatalf("unexpected Global value facts: %#v", global)
55
+ }
56
+ if global.position.file == "" || global.position.line == 0 {
57
+ t.Fatalf("expected Global source position, got %#v", global.position)
58
+ }
59
+ if len(semPkg.initOrder) != 1 || semPkg.initOrder[0].Name() != "Global" {
60
+ t.Fatalf("unexpected init order: %#v", semPkg.initOrder)
61
+ }
62
+ }
63
+
64
+ func TestSemanticModelRecordsAddressTakenVarRefs(t *testing.T) {
65
+ moduleDir := writePackageGraphFixture(t, map[string]string{
66
+ "go.mod": "module example.test/varref\n\ngo 1.25.3\n",
67
+ "main.go": strings.Join([]string{
68
+ "package varref",
69
+ "func Use() {",
70
+ " x := 1",
71
+ " p := &x",
72
+ " _ = &p",
73
+ "}",
74
+ "",
75
+ }, "\n"),
76
+ })
77
+ graph := loadPackageGraph(t, &CompileRequest{
78
+ Patterns: []string{"."},
79
+ Dir: moduleDir,
80
+ OutputPath: filepath.Join(t.TempDir(), "out"),
81
+ DependencyMode: DependencyModeRequested,
82
+ RuntimeEmissionMode: RuntimeEmissionModeEmit,
83
+ })
84
+ model := buildSemanticModel(t, graph)
85
+
86
+ for _, name := range []string{"x", "p"} {
87
+ obj := requireDefinedObject(t, graph, "example.test/varref", name)
88
+ if !model.addressTaken[obj] || !model.needsVarRef[obj] {
89
+ t.Fatalf("expected %s to be address-taken and need VarRef", name)
90
+ }
91
+ }
92
+ }
93
+
94
+ func TestSemanticModelRecordsStructFieldsAndReceivers(t *testing.T) {
95
+ moduleDir := writePackageGraphFixture(t, map[string]string{
96
+ "go.mod": "module example.test/structs\n\ngo 1.25.3\n",
97
+ "main.go": strings.Join([]string{
98
+ "package structs",
99
+ "type Counter struct {",
100
+ " // Value counts reads.",
101
+ " Value int",
102
+ " Label string",
103
+ "}",
104
+ "func (c Counter) Read() int { return c.Value }",
105
+ "func (c *Counter) Set(v int) { c.Value = v }",
106
+ "",
107
+ }, "\n"),
108
+ })
109
+ graph := loadPackageGraph(t, &CompileRequest{
110
+ Patterns: []string{"."},
111
+ Dir: moduleDir,
112
+ OutputPath: filepath.Join(t.TempDir(), "out"),
113
+ DependencyMode: DependencyModeRequested,
114
+ RuntimeEmissionMode: RuntimeEmissionModeEmit,
115
+ })
116
+ model := buildSemanticModel(t, graph)
117
+ counter := requireSemanticType(t, graph, model, "example.test/structs", "Counter")
118
+
119
+ if len(counter.fields) != 2 ||
120
+ counter.fields[0].name != "Value" ||
121
+ counter.fields[1].name != "Label" {
122
+ t.Fatalf("unexpected Counter fields: %#v", counter.fields)
123
+ }
124
+ if counter.fields[0].doc != "Value counts reads." {
125
+ t.Fatalf("unexpected Counter.Value doc: %#v", counter.fields[0].doc)
126
+ }
127
+
128
+ read := requireDefinedFunc(t, graph, "example.test/structs", "Read")
129
+ set := requireDefinedFunc(t, graph, "example.test/structs", "Set")
130
+ if model.functions[read].receiver == nil ||
131
+ model.functions[read].receiver.Obj().Name() != "Counter" ||
132
+ model.functions[read].receiverPointer {
133
+ t.Fatalf("unexpected value receiver facts: %#v", model.functions[read])
134
+ }
135
+ if model.functions[set].receiver == nil ||
136
+ model.functions[set].receiver.Obj().Name() != "Counter" ||
137
+ !model.functions[set].receiverPointer {
138
+ t.Fatalf("unexpected pointer receiver facts: %#v", model.functions[set])
139
+ }
140
+ }
141
+
142
+ func TestSemanticModelMarksNamedValueForPointerReceiverCall(t *testing.T) {
143
+ moduleDir := writePackageGraphFixture(t, map[string]string{
144
+ "go.mod": "module example.test/namedrecv\n\ngo 1.25.3\n",
145
+ "main.go": strings.Join([]string{
146
+ "package namedrecv",
147
+ "type Numbers []int",
148
+ "func (n *Numbers) Add(v int) { *n = append(*n, v) }",
149
+ "func Use() {",
150
+ " var n Numbers",
151
+ " n.Add(1)",
152
+ "}",
153
+ "",
154
+ }, "\n"),
155
+ })
156
+ graph := loadPackageGraph(t, &CompileRequest{
157
+ Patterns: []string{"."},
158
+ Dir: moduleDir,
159
+ OutputPath: filepath.Join(t.TempDir(), "out"),
160
+ DependencyMode: DependencyModeRequested,
161
+ RuntimeEmissionMode: RuntimeEmissionModeEmit,
162
+ })
163
+ model := buildSemanticModel(t, graph)
164
+ found := false
165
+ for obj := range model.needsVarRef {
166
+ if obj.Name() == "n" {
167
+ found = true
168
+ break
169
+ }
170
+ }
171
+ if !found {
172
+ t.Fatalf("expected named slice value receiver call to force VarRef")
173
+ }
174
+ }
175
+
176
+ func TestSemanticModelRecordsGeneratedImportNeeds(t *testing.T) {
177
+ moduleDir := writePackageGraphFixture(t, map[string]string{
178
+ "go.mod": "module example.test/imports\n\ngo 1.25.3\n",
179
+ "main.go": strings.Join([]string{
180
+ "package imports",
181
+ "import \"example.test/imports/subpkg\"",
182
+ "var Zero subpkg.Item",
183
+ "",
184
+ }, "\n"),
185
+ "subpkg/item.go": "package subpkg\ntype Item struct { Value int }\n",
186
+ })
187
+ graph := loadPackageGraph(t, &CompileRequest{
188
+ Patterns: []string{"."},
189
+ Dir: moduleDir,
190
+ OutputPath: filepath.Join(t.TempDir(), "out"),
191
+ DependencyMode: DependencyModeRequested,
192
+ RuntimeEmissionMode: RuntimeEmissionModeEmit,
193
+ })
194
+ model := buildSemanticModel(t, graph)
195
+
196
+ imports := generatedImportsForFile(t, model, "main.go")
197
+ if !imports["example.test/imports/subpkg"] {
198
+ t.Fatalf("expected generated import for subpkg, got %#v", imports)
199
+ }
200
+ }
201
+
202
+ func TestSemanticModelRecordsInterfaceAssertionAndNilFacts(t *testing.T) {
203
+ moduleDir := writePackageGraphFixture(t, map[string]string{
204
+ "go.mod": "module example.test/interfaces\n\ngo 1.25.3\n",
205
+ "main.go": strings.Join([]string{
206
+ "package interfaces",
207
+ "type Reader interface { Read() int }",
208
+ "type Impl struct{}",
209
+ "func (Impl) Read() int { return 1 }",
210
+ "func Use() {",
211
+ " var i Reader = Impl{}",
212
+ " _, _ = i.(Impl)",
213
+ " var p *Impl = nil",
214
+ " var sink Reader = p",
215
+ " var empty interface{} = nil",
216
+ " _, _ = sink, empty",
217
+ "}",
218
+ "",
219
+ }, "\n"),
220
+ })
221
+ graph := loadPackageGraph(t, &CompileRequest{
222
+ Patterns: []string{"."},
223
+ Dir: moduleDir,
224
+ OutputPath: filepath.Join(t.TempDir(), "out"),
225
+ DependencyMode: DependencyModeRequested,
226
+ RuntimeEmissionMode: RuntimeEmissionModeEmit,
227
+ })
228
+ model := buildSemanticModel(t, graph)
229
+ semPkg := requireSemanticPackage(t, model, "example.test/interfaces")
230
+
231
+ if len(semPkg.typeAssertions) != 1 ||
232
+ !strings.Contains(semPkg.typeAssertions[0].target.String(), "Impl") {
233
+ t.Fatalf("unexpected type assertions: %#v", semPkg.typeAssertions)
234
+ }
235
+ for _, kind := range []string{"typed-nil", "typed-nil-interface-risk", "nil-interface"} {
236
+ if !hasNilFactKind(semPkg, kind) {
237
+ t.Fatalf("missing nil fact %q in %#v", kind, semPkg.nilFacts)
238
+ }
239
+ }
240
+ if !hasInterfaceImplementation(model, "Impl", "Reader", false) {
241
+ t.Fatalf("missing Impl -> Reader interface implementation: %#v", model.interfaceImplementations)
242
+ }
243
+ }
244
+
245
+ func TestSemanticModelColorsAsyncFunctionsAndOverrides(t *testing.T) {
246
+ moduleDir := writePackageGraphFixture(t, map[string]string{
247
+ "go.mod": "module example.test/async\n\ngo 1.25.3\n",
248
+ "main.go": strings.Join([]string{
249
+ "package async",
250
+ "import \"sync\"",
251
+ "type Locker interface { Lock() }",
252
+ "type AsyncLocker struct { ch chan struct{} }",
253
+ "func (a *AsyncLocker) Lock() { <-a.ch }",
254
+ "func UseInterface(l Locker) { l.Lock() }",
255
+ "func CallChannel(a *AsyncLocker) { a.Lock() }",
256
+ "func UseMutex(mu *sync.Mutex) { mu.Lock() }",
257
+ "func Immediate() {}",
258
+ "",
259
+ }, "\n"),
260
+ })
261
+ graph := loadPackageGraph(t, &CompileRequest{
262
+ Patterns: []string{"."},
263
+ Dir: moduleDir,
264
+ OutputPath: filepath.Join(t.TempDir(), "out"),
265
+ DependencyMode: DependencyModeAll,
266
+ RuntimeEmissionMode: RuntimeEmissionModeEmit,
267
+ })
268
+ model := buildSemanticModel(t, graph)
269
+
270
+ for _, name := range []string{"UseInterface", "CallChannel", "UseMutex"} {
271
+ fn := requireDefinedFunc(t, graph, "example.test/async", name)
272
+ if !model.functions[fn].async {
273
+ t.Fatalf("expected %s to be async, got %#v", name, model.functions[fn])
274
+ }
275
+ }
276
+ immediate := requireDefinedFunc(t, graph, "example.test/async", "Immediate")
277
+ if model.functions[immediate].async {
278
+ t.Fatalf("did not expect Immediate to be async: %#v", model.functions[immediate])
279
+ }
280
+ if !hasInterfaceImplementation(model, "AsyncLocker", "Locker", true) {
281
+ t.Fatalf("missing *AsyncLocker -> Locker implementation: %#v", model.interfaceImplementations)
282
+ }
283
+ }
284
+
285
+ func TestSemanticModelIndexesFunctionsByFullName(t *testing.T) {
286
+ model := newSemanticModel()
287
+ semPkg := &semanticPackage{}
288
+ pkg := types.NewPackage("example.test/indexed", "indexed")
289
+ signature := types.NewSignatureType(nil, nil, nil, types.NewTuple(), types.NewTuple(), false)
290
+ fn := types.NewFunc(token.NoPos, pkg, "Call", signature)
291
+ semFn := NewSemanticModelOwner().addFunction(model, semPkg, fn, sourcePosition{})
292
+
293
+ duplicatePkg := types.NewPackage("example.test/indexed", "indexed")
294
+ duplicate := types.NewFunc(token.NoPos, duplicatePkg, "Call", signature)
295
+ if got := semanticFunctionFor(model, duplicate); got != semFn {
296
+ t.Fatalf("semanticFunctionFor() = %#v, want %#v", got, semFn)
297
+ }
298
+ }
299
+
300
+ func TestSemanticModelAsyncPropagationObservesContext(t *testing.T) {
301
+ ctx, cancel := context.WithCancel(context.Background())
302
+ cancel()
303
+
304
+ diagnostics := NewSemanticModelOwner().propagateFunctionAsync(ctx, newSemanticModel())
305
+ if !diagnosticsHaveErrors(diagnostics) {
306
+ t.Fatalf("expected canceled context diagnostic")
307
+ }
308
+ if diagnostics[0].Code != "goscript/context:canceled" {
309
+ t.Fatalf("unexpected diagnostic: %#v", diagnostics[0])
310
+ }
311
+ }
312
+
313
+ func TestSemanticModelMarksFunctionIdentifierCallAsync(t *testing.T) {
314
+ moduleDir := writePackageGraphFixture(t, map[string]string{
315
+ "go.mod": "module example.test/callback\n\ngo 1.25.3\n",
316
+ "callback.go": strings.Join([]string{
317
+ "package callback",
318
+ "func Run(fn func() error) error {",
319
+ " return fn()",
320
+ "}",
321
+ "",
322
+ }, "\n"),
323
+ })
324
+ graph := loadPackageGraph(t, &CompileRequest{
325
+ Patterns: []string{"."},
326
+ Dir: moduleDir,
327
+ OutputPath: filepath.Join(t.TempDir(), "out"),
328
+ DependencyMode: DependencyModeRequested,
329
+ RuntimeEmissionMode: RuntimeEmissionModeEmit,
330
+ })
331
+ model := buildSemanticModel(t, graph)
332
+ run := requireDefinedFunc(t, graph, "example.test/callback", "Run")
333
+ semFn := model.functions[run]
334
+ if semFn == nil || !semFn.async {
335
+ t.Fatalf("expected Run to be async after calling function parameter, got %#v", semFn)
336
+ }
337
+ }
338
+
339
+ func buildSemanticModel(t *testing.T, graph *PackageGraph) *SemanticModel {
340
+ t.Helper()
341
+
342
+ model, diagnostics := NewSemanticModelOwner(NewOverrideRegistryOwner()).Build(context.Background(), graph)
343
+ if diagnosticsHaveErrors(diagnostics) {
344
+ t.Fatalf("semantic model build failed: %#v", diagnostics)
345
+ }
346
+ if model == nil {
347
+ t.Fatalf("semantic model build returned nil")
348
+ }
349
+ return model
350
+ }
351
+
352
+ func requireSemanticPackage(t *testing.T, model *SemanticModel, pkgPath string) *semanticPackage {
353
+ t.Helper()
354
+
355
+ semPkg := model.packages[pkgPath]
356
+ if semPkg == nil {
357
+ t.Fatalf("missing semantic package %q in %#v", pkgPath, model.packages)
358
+ }
359
+ return semPkg
360
+ }
361
+
362
+ func hasSemanticDeclaration(semPkg *semanticPackage, kind string, name string) bool {
363
+ for _, decl := range semPkg.declarations {
364
+ if decl.kind == kind && decl.name == name {
365
+ return true
366
+ }
367
+ }
368
+ return false
369
+ }
370
+
371
+ func requireSemanticValue(
372
+ t *testing.T,
373
+ model *SemanticModel,
374
+ graph *PackageGraph,
375
+ pkgPath string,
376
+ name string,
377
+ ) *semanticValue {
378
+ t.Helper()
379
+
380
+ obj := requireDefinedObject(t, graph, pkgPath, name)
381
+ value := model.values[obj]
382
+ if value == nil {
383
+ t.Fatalf("missing semantic value for %s", name)
384
+ }
385
+ return value
386
+ }
387
+
388
+ func requireSemanticType(
389
+ t *testing.T,
390
+ graph *PackageGraph,
391
+ model *SemanticModel,
392
+ pkgPath string,
393
+ name string,
394
+ ) *semanticType {
395
+ t.Helper()
396
+
397
+ obj, _ := requireDefinedObject(t, graph, pkgPath, name).(*types.TypeName)
398
+ if obj == nil {
399
+ t.Fatalf("defined object %s is not a type", name)
400
+ }
401
+ named, _ := obj.Type().(*types.Named)
402
+ if named == nil {
403
+ t.Fatalf("defined type %s is not named", name)
404
+ }
405
+ semType := model.types[named]
406
+ if semType == nil {
407
+ t.Fatalf("missing semantic type for %s", name)
408
+ }
409
+ return semType
410
+ }
411
+
412
+ func requireDefinedFunc(t *testing.T, graph *PackageGraph, pkgPath string, name string) *types.Func {
413
+ t.Helper()
414
+
415
+ fn, _ := requireDefinedObject(t, graph, pkgPath, name).(*types.Func)
416
+ if fn == nil {
417
+ t.Fatalf("defined object %s is not a function", name)
418
+ }
419
+ return fn
420
+ }
421
+
422
+ func requireDefinedObject(t *testing.T, graph *PackageGraph, pkgPath string, name string) types.Object {
423
+ t.Helper()
424
+
425
+ pkg := graph.packagesByPath[pkgPath]
426
+ if pkg == nil {
427
+ t.Fatalf("missing loaded package %q", pkgPath)
428
+ }
429
+ for ident, obj := range pkg.TypesInfo.Defs {
430
+ if ident.Name == name && obj != nil {
431
+ return obj
432
+ }
433
+ }
434
+ t.Fatalf("missing defined object %s in %s", name, pkgPath)
435
+ return nil
436
+ }
437
+
438
+ func generatedImportsForFile(t *testing.T, model *SemanticModel, base string) map[string]bool {
439
+ t.Helper()
440
+
441
+ for file, imports := range model.generatedImports {
442
+ if filepath.Base(file) == base {
443
+ return imports
444
+ }
445
+ }
446
+ t.Fatalf("missing generated imports for %s in %#v", base, model.generatedImports)
447
+ return nil
448
+ }
449
+
450
+ func hasNilFactKind(semPkg *semanticPackage, kind string) bool {
451
+ for _, fact := range semPkg.nilFacts {
452
+ if fact.kind == kind {
453
+ return true
454
+ }
455
+ }
456
+ return false
457
+ }
458
+
459
+ func hasInterfaceImplementation(model *SemanticModel, typ string, iface string, pointer bool) bool {
460
+ for _, implementation := range model.interfaceImplementations {
461
+ if implementation.pointer != pointer ||
462
+ implementation.typ == nil ||
463
+ implementation.iface == nil {
464
+ continue
465
+ }
466
+ if implementation.typ.Obj().Name() == typ && implementation.iface.Obj().Name() == iface {
467
+ return true
468
+ }
469
+ }
470
+ return false
471
+ }
@@ -0,0 +1,133 @@
1
+ package compiler
2
+
3
+ import "context"
4
+
5
+ // CompileService owns the v2 compiler pipeline.
6
+ type CompileService struct {
7
+ requestOwner *CompileRequestOwner
8
+ graphOwner *PackageGraphOwner
9
+ semanticOwner *SemanticModelOwner
10
+ loweringOwner *LoweringOwner
11
+ emitterOwner *TypeScriptEmitOwner
12
+ runtimeOwner *RuntimeContractOwner
13
+ overrideOwner *OverrideRegistryOwner
14
+ }
15
+
16
+ // NewCompileService creates a compile service with every pipeline owner.
17
+ func NewCompileService() *CompileService {
18
+ overrideOwner := NewOverrideRegistryOwner()
19
+ runtimeOwner := NewRuntimeContractOwner()
20
+ return &CompileService{
21
+ requestOwner: NewCompileRequestOwner(),
22
+ graphOwner: NewPackageGraphOwner(overrideOwner),
23
+ semanticOwner: NewSemanticModelOwner(overrideOwner),
24
+ loweringOwner: NewLoweringOwner(runtimeOwner, overrideOwner),
25
+ emitterOwner: NewTypeScriptEmitOwner(runtimeOwner),
26
+ runtimeOwner: runtimeOwner,
27
+ overrideOwner: overrideOwner,
28
+ }
29
+ }
30
+
31
+ // RequestOwner returns the compile request owner.
32
+ func (s *CompileService) RequestOwner() *CompileRequestOwner {
33
+ return s.requestOwner
34
+ }
35
+
36
+ // PackageGraphOwner returns the package graph owner.
37
+ func (s *CompileService) PackageGraphOwner() *PackageGraphOwner {
38
+ return s.graphOwner
39
+ }
40
+
41
+ // SemanticModelOwner returns the semantic model owner.
42
+ func (s *CompileService) SemanticModelOwner() *SemanticModelOwner {
43
+ return s.semanticOwner
44
+ }
45
+
46
+ // LoweringOwner returns the lowering owner.
47
+ func (s *CompileService) LoweringOwner() *LoweringOwner {
48
+ return s.loweringOwner
49
+ }
50
+
51
+ // TypeScriptEmitOwner returns the TypeScript emit owner.
52
+ func (s *CompileService) TypeScriptEmitOwner() *TypeScriptEmitOwner {
53
+ return s.emitterOwner
54
+ }
55
+
56
+ // RuntimeContractOwner returns the runtime contract owner.
57
+ func (s *CompileService) RuntimeContractOwner() *RuntimeContractOwner {
58
+ return s.runtimeOwner
59
+ }
60
+
61
+ // OverrideRegistryOwner returns the override registry owner.
62
+ func (s *CompileService) OverrideRegistryOwner() *OverrideRegistryOwner {
63
+ return s.overrideOwner
64
+ }
65
+
66
+ // Compile runs one request through the v2 pipeline.
67
+ func (s *CompileService) Compile(ctx context.Context, req *CompileRequest) (*CompilationResult, error) {
68
+ if err := ctx.Err(); err != nil {
69
+ return nil, err
70
+ }
71
+
72
+ result := &CompilationResult{}
73
+ if req != nil {
74
+ result.OriginalPackages = append([]string(nil), req.Patterns...)
75
+ }
76
+
77
+ diagnostics := s.requestOwner.Validate(req)
78
+ if diagnosticsHaveErrors(diagnostics) {
79
+ result.Diagnostics = diagnostics
80
+ return result, NewCompileError(diagnostics)
81
+ }
82
+
83
+ graph, graphDiagnostics := s.graphOwner.Load(ctx, req)
84
+ diagnostics = append(diagnostics, graphDiagnostics...)
85
+ if graph != nil {
86
+ result.OriginalPackages = append([]string(nil), graph.RequestedPackagePaths...)
87
+ }
88
+ if diagnosticsHaveErrors(diagnostics) {
89
+ result.Diagnostics = diagnostics
90
+ return result, NewCompileError(diagnostics)
91
+ }
92
+
93
+ semanticModel, semanticDiagnostics := s.semanticOwner.Build(ctx, graph)
94
+ diagnostics = append(diagnostics, semanticDiagnostics...)
95
+ if diagnosticsHaveErrors(diagnostics) {
96
+ result.Diagnostics = diagnostics
97
+ return result, NewCompileError(diagnostics)
98
+ }
99
+
100
+ overridePlan, overrideDiagnostics := s.overrideOwner.CopyPlan(ctx, req, graph)
101
+ diagnostics = append(diagnostics, overrideDiagnostics...)
102
+ if diagnosticsHaveErrors(diagnostics) {
103
+ result.Diagnostics = diagnostics
104
+ return result, NewCompileError(diagnostics)
105
+ }
106
+
107
+ loweredProgram, loweringDiagnostics := s.loweringOwner.Build(ctx, semanticModel)
108
+ diagnostics = append(diagnostics, loweringDiagnostics...)
109
+ if diagnosticsHaveErrors(diagnostics) {
110
+ result.Diagnostics = diagnostics
111
+ return result, NewCompileError(diagnostics)
112
+ }
113
+
114
+ compiledPackages, emitDiagnostics := s.emitterOwner.Emit(ctx, req, loweredProgram)
115
+ diagnostics = append(diagnostics, emitDiagnostics...)
116
+ if diagnosticsHaveErrors(diagnostics) {
117
+ result.Diagnostics = diagnostics
118
+ return result, NewCompileError(diagnostics)
119
+ }
120
+ result.CompiledPackages = append(result.CompiledPackages, compiledPackages...)
121
+
122
+ copiedPackages, copyDiagnostics := s.overrideOwner.CopyPackages(ctx, req, overridePlan)
123
+ diagnostics = append(diagnostics, copyDiagnostics...)
124
+ if diagnosticsHaveErrors(diagnostics) {
125
+ result.CopiedPackages = append(result.CopiedPackages, copiedPackages...)
126
+ result.Diagnostics = diagnostics
127
+ return result, NewCompileError(diagnostics)
128
+ }
129
+ result.CopiedPackages = append(result.CopiedPackages, copiedPackages...)
130
+
131
+ result.Diagnostics = diagnostics
132
+ return result, nil
133
+ }