wasm-idle 0.7.2 → 1.0.0

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 (386) hide show
  1. package/README.md +760 -81
  2. package/dist/index.d.ts +4 -9
  3. package/dist/index.js +2 -4
  4. package/dist/playground/applicationAssets.d.ts +4 -0
  5. package/dist/playground/applicationAssets.js +277 -0
  6. package/dist/playground/assemblyscript.d.ts +41 -0
  7. package/dist/playground/assemblyscript.js +630 -0
  8. package/dist/playground/assetBridge.d.ts +18 -7
  9. package/dist/playground/assetBridge.js +824 -100
  10. package/dist/playground/assets.d.ts +813 -19
  11. package/dist/playground/assets.js +2096 -156
  12. package/dist/playground/awk.d.ts +5 -0
  13. package/dist/playground/awk.js +60 -0
  14. package/dist/playground/bash.d.ts +53 -0
  15. package/dist/playground/bash.js +1096 -0
  16. package/dist/playground/bashWorkerProtocol.d.ts +88 -0
  17. package/dist/playground/bashWorkerProtocol.js +135 -0
  18. package/dist/playground/bqn.d.ts +5 -0
  19. package/dist/playground/bqn.js +57 -0
  20. package/dist/playground/bqnPreflight.d.ts +26 -0
  21. package/dist/playground/bqnPreflight.js +399 -0
  22. package/dist/playground/c3.d.ts +15 -0
  23. package/dist/playground/c3.js +154 -0
  24. package/dist/playground/clang.d.ts +35 -19
  25. package/dist/playground/clang.js +241 -52
  26. package/dist/playground/clangAssetIntegrity.d.ts +32 -0
  27. package/dist/playground/clangAssetIntegrity.js +8 -0
  28. package/dist/playground/clojurescript.d.ts +5 -0
  29. package/dist/playground/clojurescript.js +59 -0
  30. package/dist/playground/clojurescriptPreflight.d.ts +26 -0
  31. package/dist/playground/clojurescriptPreflight.js +383 -0
  32. package/dist/playground/cobol.d.ts +46 -0
  33. package/dist/playground/cobol.js +703 -0
  34. package/dist/playground/d.d.ts +47 -0
  35. package/dist/playground/d.js +644 -0
  36. package/dist/playground/dOuterAssets.d.ts +16 -0
  37. package/dist/playground/dOuterAssets.js +163 -0
  38. package/dist/playground/dotnet.d.ts +99 -0
  39. package/dist/playground/dotnet.js +1131 -0
  40. package/dist/playground/duckdb.d.ts +36 -0
  41. package/dist/playground/duckdb.js +542 -0
  42. package/dist/playground/elixir.d.ts +18 -10
  43. package/dist/playground/elixir.js +630 -96
  44. package/dist/playground/elixirAssets.d.ts +6 -0
  45. package/dist/playground/elixirAssets.js +33 -0
  46. package/dist/playground/executionObservation.d.ts +22 -0
  47. package/dist/playground/executionObservation.js +65 -0
  48. package/dist/playground/forth.d.ts +5 -0
  49. package/dist/playground/forth.js +53 -0
  50. package/dist/playground/forthPreflight.d.ts +24 -0
  51. package/dist/playground/forthPreflight.js +198 -0
  52. package/dist/playground/fortran.d.ts +47 -0
  53. package/dist/playground/fortran.js +651 -0
  54. package/dist/playground/fortranAssets.d.ts +6 -0
  55. package/dist/playground/fortranAssets.js +27 -0
  56. package/dist/playground/gleam.d.ts +6 -0
  57. package/dist/playground/gleam.js +33 -0
  58. package/dist/playground/go.d.ts +17 -11
  59. package/dist/playground/go.js +376 -72
  60. package/dist/playground/goDebugInstrumentation.d.ts +1 -0
  61. package/dist/playground/goDebugInstrumentation.js +229 -0
  62. package/dist/playground/haskell.d.ts +44 -0
  63. package/dist/playground/haskell.js +678 -0
  64. package/dist/playground/haskellAssets.d.ts +24 -0
  65. package/dist/playground/haskellAssets.js +93 -0
  66. package/dist/playground/index.d.ts +1 -1
  67. package/dist/playground/index.js +360 -111
  68. package/dist/playground/j.d.ts +5 -0
  69. package/dist/playground/j.js +60 -0
  70. package/dist/playground/jPreflight.d.ts +26 -0
  71. package/dist/playground/jPreflight.js +372 -0
  72. package/dist/playground/janet.d.ts +5 -0
  73. package/dist/playground/janet.js +64 -0
  74. package/dist/playground/java.d.ts +24 -10
  75. package/dist/playground/java.js +706 -84
  76. package/dist/playground/javaSource.d.ts +5 -0
  77. package/dist/playground/javaSource.js +16 -0
  78. package/dist/playground/javaStdin.d.ts +1 -1
  79. package/dist/playground/javaStdin.js +13 -4
  80. package/dist/playground/julia.d.ts +5 -0
  81. package/dist/playground/julia.js +64 -0
  82. package/dist/playground/lfortran.d.ts +8 -0
  83. package/dist/playground/lfortran.js +30 -0
  84. package/dist/playground/lfortranAssets.d.ts +21 -0
  85. package/dist/playground/lfortranAssets.js +118 -0
  86. package/dist/playground/lisp.d.ts +45 -0
  87. package/dist/playground/lisp.js +640 -0
  88. package/dist/playground/lispAssets.d.ts +9 -0
  89. package/dist/playground/lispAssets.js +74 -0
  90. package/dist/playground/lldbManifest.d.ts +3 -0
  91. package/dist/playground/lldbManifest.js +155 -0
  92. package/dist/playground/lldbSession.d.ts +115 -0
  93. package/dist/playground/lldbSession.js +1347 -0
  94. package/dist/playground/loadingProgress.d.ts +16 -0
  95. package/dist/playground/loadingProgress.js +166 -0
  96. package/dist/playground/lua.d.ts +44 -0
  97. package/dist/playground/lua.js +630 -0
  98. package/dist/playground/nim.d.ts +5 -0
  99. package/dist/playground/nim.js +76 -0
  100. package/dist/playground/objectivec.d.ts +39 -0
  101. package/dist/playground/objectivec.js +288 -0
  102. package/dist/playground/ocaml.d.ts +28 -10
  103. package/dist/playground/ocaml.js +815 -253
  104. package/dist/playground/octave.d.ts +43 -0
  105. package/dist/playground/octave.js +783 -0
  106. package/dist/playground/options.d.ts +19 -40
  107. package/dist/playground/options.js +2 -1
  108. package/dist/playground/pascal.d.ts +5 -0
  109. package/dist/playground/pascal.js +60 -0
  110. package/dist/playground/perl.d.ts +5 -0
  111. package/dist/playground/perl.js +61 -0
  112. package/dist/playground/php.d.ts +44 -0
  113. package/dist/playground/php.js +665 -0
  114. package/dist/playground/prolog.d.ts +6 -0
  115. package/dist/playground/prolog.js +75 -0
  116. package/dist/playground/python.d.ts +20 -14
  117. package/dist/playground/python.js +445 -101
  118. package/dist/playground/pythonPackageLock.d.ts +6 -0
  119. package/dist/playground/pythonPackageLock.js +56 -0
  120. package/dist/playground/r.d.ts +44 -0
  121. package/dist/playground/r.js +637 -0
  122. package/dist/playground/ruby.d.ts +46 -0
  123. package/dist/playground/ruby.js +732 -0
  124. package/dist/playground/rubyAssets.d.ts +23 -0
  125. package/dist/playground/rubyAssets.js +68 -0
  126. package/dist/playground/rubyTestPreflight.d.ts +2 -0
  127. package/dist/playground/rubyTestPreflight.js +18 -0
  128. package/dist/playground/runtimeModule.d.ts +1 -0
  129. package/dist/playground/runtimeModule.js +5 -0
  130. package/dist/playground/rust.d.ts +44 -13
  131. package/dist/playground/rust.js +714 -76
  132. package/dist/playground/rustExecutableGraph.d.ts +85 -0
  133. package/dist/playground/rustExecutableGraph.js +946 -0
  134. package/dist/playground/rustWorkerLimits.d.ts +17 -0
  135. package/dist/playground/rustWorkerLimits.js +34 -0
  136. package/dist/playground/sandbox.d.ts +16 -10
  137. package/dist/playground/sharedBuffer.d.ts +6 -0
  138. package/dist/playground/sharedBuffer.js +12 -0
  139. package/dist/playground/sqlite.d.ts +38 -0
  140. package/dist/playground/sqlite.js +550 -0
  141. package/dist/playground/staticRuntimeModuleVersion.d.ts +1 -0
  142. package/dist/playground/staticRuntimeModuleVersion.js +2 -0
  143. package/dist/playground/staticRuntimePreflight.d.ts +13 -0
  144. package/dist/playground/staticRuntimePreflight.js +231 -0
  145. package/dist/playground/staticRuntimePreflightExecute.d.ts +8 -0
  146. package/dist/playground/staticRuntimePreflightExecute.js +66 -0
  147. package/dist/playground/staticRuntimePreflightProtocol.d.ts +68 -0
  148. package/dist/playground/staticRuntimePreflightProtocol.js +339 -0
  149. package/dist/playground/staticStdinRing.d.ts +45 -0
  150. package/dist/playground/staticStdinRing.js +158 -0
  151. package/dist/playground/staticWorkerRuntime.d.ts +154 -0
  152. package/dist/playground/staticWorkerRuntime.js +1917 -0
  153. package/dist/playground/stdinBuffer.d.ts +9 -7
  154. package/dist/playground/stdinBuffer.js +9 -18
  155. package/dist/playground/swift.d.ts +5 -0
  156. package/dist/playground/swift.js +17 -0
  157. package/dist/playground/tcl.d.ts +5 -0
  158. package/dist/playground/tcl.js +62 -0
  159. package/dist/playground/teavmConfig.d.ts +1 -1
  160. package/dist/playground/teavmConfig.js +2 -2
  161. package/dist/playground/tinygo.d.ts +48 -18
  162. package/dist/playground/tinygo.js +1202 -329
  163. package/dist/playground/tinygoExecutableGraph.d.ts +44 -0
  164. package/dist/playground/tinygoExecutableGraph.js +449 -0
  165. package/dist/playground/typescript.d.ts +55 -0
  166. package/dist/playground/typescript.js +924 -0
  167. package/dist/playground/wasm.d.ts +43 -0
  168. package/dist/playground/wasm.js +608 -0
  169. package/dist/playground/wasmAwkVersion.d.ts +59 -0
  170. package/dist/playground/wasmAwkVersion.js +31 -0
  171. package/dist/playground/wasmBashVersion.d.ts +63 -0
  172. package/dist/playground/wasmBashVersion.js +36 -0
  173. package/dist/playground/wasmBqnVersion.d.ts +24 -0
  174. package/dist/playground/wasmBqnVersion.js +24 -0
  175. package/dist/playground/wasmC3Version.d.ts +20 -0
  176. package/dist/playground/wasmC3Version.js +21 -0
  177. package/dist/playground/wasmClojureScriptVersion.d.ts +21 -0
  178. package/dist/playground/wasmClojureScriptVersion.js +21 -0
  179. package/dist/playground/wasmDIntegrity.d.ts +15 -0
  180. package/dist/playground/wasmDIntegrity.js +15 -0
  181. package/dist/playground/wasmDVersion.d.ts +1 -0
  182. package/dist/playground/wasmDVersion.js +1 -0
  183. package/dist/playground/wasmDebugVersion.d.ts +6 -0
  184. package/dist/playground/wasmDebugVersion.js +6 -0
  185. package/dist/playground/wasmDotnetVersion.d.ts +1 -0
  186. package/dist/playground/wasmDotnetVersion.js +1 -0
  187. package/dist/playground/wasmElixirVersion.d.ts +21 -1
  188. package/dist/playground/wasmElixirVersion.js +21 -1
  189. package/dist/playground/wasmForthVersion.d.ts +18 -0
  190. package/dist/playground/wasmForthVersion.js +18 -0
  191. package/dist/playground/wasmFortranExecutionAssets.d.ts +15 -0
  192. package/dist/playground/wasmFortranExecutionAssets.js +15 -0
  193. package/dist/playground/wasmFortranVersion.d.ts +1 -0
  194. package/dist/playground/wasmFortranVersion.js +1 -0
  195. package/dist/playground/wasmGleamVersion.d.ts +5 -0
  196. package/dist/playground/wasmGleamVersion.js +5 -0
  197. package/dist/playground/wasmGoVersion.d.ts +1 -1
  198. package/dist/playground/wasmGoVersion.js +1 -1
  199. package/dist/playground/wasmHaskellVersion.d.ts +1 -0
  200. package/dist/playground/wasmHaskellVersion.js +1 -0
  201. package/dist/playground/wasmJVersion.d.ts +24 -0
  202. package/dist/playground/wasmJVersion.js +24 -0
  203. package/dist/playground/wasmJanetVersion.d.ts +53 -0
  204. package/dist/playground/wasmJanetVersion.js +30 -0
  205. package/dist/playground/wasmJuliaVersion.d.ts +71 -0
  206. package/dist/playground/wasmJuliaVersion.js +39 -0
  207. package/dist/playground/wasmLfortranVersion.d.ts +28 -0
  208. package/dist/playground/wasmLfortranVersion.js +29 -0
  209. package/dist/playground/wasmLispVersion.d.ts +1 -0
  210. package/dist/playground/wasmLispVersion.js +1 -0
  211. package/dist/playground/wasmLuaVersion.d.ts +1 -0
  212. package/dist/playground/wasmLuaVersion.js +1 -0
  213. package/dist/playground/wasmNimVersion.d.ts +125 -0
  214. package/dist/playground/wasmNimVersion.js +66 -0
  215. package/dist/playground/wasmObjectiveCVersion.d.ts +27 -0
  216. package/dist/playground/wasmObjectiveCVersion.js +27 -0
  217. package/dist/playground/wasmOcamlVersion.d.ts +12 -1
  218. package/dist/playground/wasmOcamlVersion.js +12 -1
  219. package/dist/playground/wasmOctaveVersion.d.ts +1 -0
  220. package/dist/playground/wasmOctaveVersion.js +1 -0
  221. package/dist/playground/wasmPascalVersion.d.ts +61 -0
  222. package/dist/playground/wasmPascalVersion.js +34 -0
  223. package/dist/playground/wasmPerlVersion.d.ts +71 -0
  224. package/dist/playground/wasmPerlVersion.js +39 -0
  225. package/dist/playground/wasmPrologVersion.d.ts +31 -0
  226. package/dist/playground/wasmPrologVersion.js +31 -0
  227. package/dist/playground/wasmRVersion.d.ts +1 -0
  228. package/dist/playground/wasmRVersion.js +1 -0
  229. package/dist/playground/wasmRustVersion.d.ts +1306 -1
  230. package/dist/playground/wasmRustVersion.js +1458 -1
  231. package/dist/playground/wasmSwiftVersion.d.ts +1 -0
  232. package/dist/playground/wasmSwiftVersion.js +1 -0
  233. package/dist/playground/wasmTclVersion.d.ts +85 -0
  234. package/dist/playground/wasmTclVersion.js +46 -0
  235. package/dist/playground/wasmTinyGoVersion.d.ts +98 -1
  236. package/dist/playground/wasmTinyGoVersion.js +107 -1
  237. package/dist/playground/wasmTypeScriptVersion.d.ts +5 -0
  238. package/dist/playground/wasmTypeScriptVersion.js +5 -0
  239. package/dist/playground/wasmWatVersion.d.ts +1 -0
  240. package/dist/playground/wasmWatVersion.js +1 -0
  241. package/dist/playground/wasmZigVersion.d.ts +13 -0
  242. package/dist/playground/wasmZigVersion.js +13 -0
  243. package/dist/playground/wat.d.ts +44 -0
  244. package/dist/playground/wat.js +622 -0
  245. package/dist/playground/worker/assemblyscript.js +339 -0
  246. package/dist/playground/worker/assets.d.ts +7 -0
  247. package/dist/playground/worker/assets.js +288 -39
  248. package/dist/playground/worker/bash.js +338 -0
  249. package/dist/playground/worker/bashNestedBootstrap.d.ts +6 -0
  250. package/dist/playground/worker/bashNestedBootstrap.js +59 -0
  251. package/dist/playground/worker/bashRuntime.d.ts +89 -0
  252. package/dist/playground/worker/bashRuntime.js +982 -0
  253. package/dist/playground/worker/clang.js +92 -13
  254. package/dist/playground/worker/cobol.js +107 -0
  255. package/dist/playground/worker/d.js +199 -0
  256. package/dist/playground/worker/dotnet.js +141 -0
  257. package/dist/playground/worker/duckdb.d.ts +1 -0
  258. package/dist/playground/worker/duckdb.js +136 -0
  259. package/dist/playground/worker/elixir.js +307 -41
  260. package/dist/playground/worker/fortran.d.ts +1 -0
  261. package/dist/playground/worker/fortran.js +295 -0
  262. package/dist/playground/worker/go.js +246 -40
  263. package/dist/playground/worker/haskell.d.ts +7 -0
  264. package/dist/playground/worker/haskell.js +465 -0
  265. package/dist/playground/worker/java.js +59 -20
  266. package/dist/playground/worker/lisp.d.ts +1 -0
  267. package/dist/playground/worker/lisp.js +195 -0
  268. package/dist/playground/worker/lua.d.ts +1 -0
  269. package/dist/playground/worker/lua.js +163 -0
  270. package/dist/playground/worker/objectivec.d.ts +1 -0
  271. package/dist/playground/worker/objectivec.js +10 -0
  272. package/dist/playground/worker/ocaml.js +206 -58
  273. package/dist/playground/worker/php.d.ts +1 -0
  274. package/dist/playground/worker/php.js +261 -0
  275. package/dist/playground/worker/python.js +201 -44
  276. package/dist/playground/worker/r.d.ts +1 -0
  277. package/dist/playground/worker/r.js +192 -0
  278. package/dist/playground/worker/ruby.d.ts +1 -0
  279. package/dist/playground/worker/ruby.js +248 -0
  280. package/dist/playground/worker/runtimeAssetFetch.d.ts +15 -0
  281. package/dist/playground/worker/runtimeAssetFetch.js +375 -0
  282. package/dist/playground/worker/rust.js +546 -20
  283. package/dist/playground/worker/sqlite.d.ts +1 -0
  284. package/dist/playground/worker/sqlite.js +112 -0
  285. package/dist/playground/worker/staticRuntimePreflight.d.ts +1 -0
  286. package/dist/playground/worker/staticRuntimePreflight.js +56 -0
  287. package/dist/playground/worker/tinygo.js +34 -9
  288. package/dist/playground/worker/typescript.d.ts +1 -0
  289. package/dist/playground/worker/typescript.js +251 -0
  290. package/dist/playground/worker/wasm.d.ts +1 -0
  291. package/dist/playground/worker/wasm.js +273 -0
  292. package/dist/playground/worker/wat.d.ts +1 -0
  293. package/dist/playground/worker/wat.js +188 -0
  294. package/dist/playground/worker/zig.d.ts +8 -0
  295. package/dist/playground/worker/zig.js +578 -0
  296. package/dist/playground/workerProgress.d.ts +15 -0
  297. package/dist/playground/workerProgress.js +72 -0
  298. package/dist/playground/workerSession.d.ts +28 -0
  299. package/dist/playground/workerSession.js +164 -0
  300. package/dist/playground/zig.d.ts +46 -0
  301. package/dist/playground/zig.js +690 -0
  302. package/dist/playground/zigAssets.d.ts +6 -0
  303. package/dist/playground/zigAssets.js +49 -0
  304. package/package.json +234 -105
  305. package/dist/clang/app.d.ts +0 -75
  306. package/dist/clang/app.js +0 -744
  307. package/dist/clang/apply.d.ts +0 -2
  308. package/dist/clang/apply.js +0 -11
  309. package/dist/clang/color.d.ts +0 -3
  310. package/dist/clang/color.js +0 -3
  311. package/dist/clang/encode.d.ts +0 -4
  312. package/dist/clang/encode.js +0 -20
  313. package/dist/clang/error.d.ts +0 -14
  314. package/dist/clang/error.js +0 -27
  315. package/dist/clang/gccCompat.d.ts +0 -15
  316. package/dist/clang/gccCompat.js +0 -767
  317. package/dist/clang/index.d.ts +0 -85
  318. package/dist/clang/index.js +0 -1077
  319. package/dist/clang/memory/index.d.ts +0 -4
  320. package/dist/clang/memory/index.js +0 -4
  321. package/dist/clang/memory/memFs.d.ts +0 -35
  322. package/dist/clang/memory/memFs.js +0 -132
  323. package/dist/clang/memory/memory.d.ts +0 -22
  324. package/dist/clang/memory/memory.js +0 -73
  325. package/dist/clang/memory/tar.d.ts +0 -2
  326. package/dist/clang/memory/tar.js +0 -59
  327. package/dist/clang/url.d.ts +0 -4
  328. package/dist/clang/url.js +0 -5
  329. package/dist/clang/wasm.d.ts +0 -4
  330. package/dist/clang/wasm.js +0 -50
  331. package/dist/clangd/config.d.ts +0 -18
  332. package/dist/clangd/config.js +0 -14
  333. package/dist/clangd/jsonStream.d.ts +0 -9
  334. package/dist/clangd/jsonStream.js +0 -48
  335. package/dist/clangd/session.d.ts +0 -18
  336. package/dist/clangd/session.js +0 -112
  337. package/dist/clangd/worker.js +0 -131
  338. package/dist/debug/controller.svelte.d.ts +0 -43
  339. package/dist/debug/controller.svelte.js +0 -268
  340. package/dist/debug/editor/index.d.ts +0 -2
  341. package/dist/debug/editor/index.js +0 -1
  342. package/dist/debug/editor/monaco.d.ts +0 -26
  343. package/dist/debug/editor/monaco.js +0 -128
  344. package/dist/debug/expression.d.ts +0 -26
  345. package/dist/debug/expression.js +0 -547
  346. package/dist/debug/index.d.ts +0 -8
  347. package/dist/debug/index.js +0 -5
  348. package/dist/debug/language/cpp.d.ts +0 -2
  349. package/dist/debug/language/cpp.js +0 -7
  350. package/dist/debug/language/index.d.ts +0 -3
  351. package/dist/debug/language/index.js +0 -2
  352. package/dist/debug/language/python.d.ts +0 -2
  353. package/dist/debug/language/python.js +0 -14
  354. package/dist/debug/language/types.d.ts +0 -6
  355. package/dist/debug/locals.d.ts +0 -2
  356. package/dist/debug/locals.js +0 -8
  357. package/dist/lsp/cpp/server.d.ts +0 -2
  358. package/dist/lsp/cpp/server.js +0 -68
  359. package/dist/lsp/index.d.ts +0 -5
  360. package/dist/lsp/index.js +0 -4
  361. package/dist/lsp/python/main.worker.js +0 -92
  362. package/dist/lsp/python/package/arcturus_python_lsp/__init__.py +0 -3
  363. package/dist/lsp/python/package/arcturus_python_lsp/server.py +0 -462
  364. package/dist/lsp/python/server.d.ts +0 -2
  365. package/dist/lsp/python/server.js +0 -54
  366. package/dist/lsp/registry.d.ts +0 -2
  367. package/dist/lsp/registry.js +0 -12
  368. package/dist/lsp/runtime.d.ts +0 -5
  369. package/dist/lsp/runtime.js +0 -31
  370. package/dist/lsp/types.d.ts +0 -17
  371. package/dist/terminal/Terminal.svelte +0 -422
  372. package/dist/terminal/Terminal.svelte.d.ts +0 -26
  373. package/dist/terminal/index.d.ts +0 -7
  374. package/dist/terminal/index.js +0 -5
  375. package/dist/terminal/plugin/index.d.ts +0 -9
  376. package/dist/terminal/plugin/index.js +0 -19
  377. package/dist/terminal/theme.d.ts +0 -49
  378. package/dist/terminal/theme.js +0 -49
  379. package/dist/terminal/types.d.ts +0 -18
  380. package/dist/utils/vscodeJsonrpcBrowser.d.ts +0 -5
  381. package/dist/utils/vscodeJsonrpcBrowser.js +0 -4
  382. /package/dist/{clangd/worker.d.ts → playground/worker/assemblyscript.d.ts} +0 -0
  383. /package/dist/{debug/language/types.js → playground/worker/bash.d.ts} +0 -0
  384. /package/dist/{lsp/python/main.worker.d.ts → playground/worker/cobol.d.ts} +0 -0
  385. /package/dist/{lsp/types.js → playground/worker/d.d.ts} +0 -0
  386. /package/dist/{terminal/types.js → playground/worker/dotnet.d.ts} +0 -0
@@ -0,0 +1,295 @@
1
+ import { WASI } from '@bjorn3/browser_wasi_shim';
2
+ import { waitForBufferedStdin } from '../stdinBuffer';
3
+ import { snapshotFortranExecutionAssetReceipts } from '../fortranAssets';
4
+ import { configureWorkerRuntimeAssets, handleWorkerAssetMessage } from './assets';
5
+ import { fetchRuntimeAssetBytes, resolveRuntimeAssetUrl } from './runtimeAssetFetch';
6
+ import { BrowserClangRuntime, createBrowserWasiHost, executeBrowserClangArtifact, loadRuntimeManifest, resolveRuntimeManifestUrl } from '@wasm-idle/llvm-core/clang';
7
+ import { verifyRuntimeAssetIntegrity } from '@wasm-idle/core';
8
+ self.document = {
9
+ querySelectorAll() {
10
+ return [];
11
+ }
12
+ };
13
+ const textDecoder = new TextDecoder('utf-8', { fatal: true });
14
+ const F2C_COMPAT_SOURCE = `#include <stdarg.h>
15
+ #include <stdio.h>
16
+
17
+ typedef void (*sighandler_t)(int);
18
+
19
+ int fiprintf(FILE *stream, const char *format, ...) {
20
+ va_list ap;
21
+ va_start(ap, format);
22
+ int result = vfprintf(stream, format, ap);
23
+ va_end(ap);
24
+ return result;
25
+ }
26
+
27
+ int siprintf(char *str, const char *format, ...) {
28
+ va_list ap;
29
+ va_start(ap, format);
30
+ int result = vsprintf(str, format, ap);
31
+ va_end(ap);
32
+ return result;
33
+ }
34
+
35
+ int __small_sprintf(char *str, const char *format, ...) {
36
+ va_list ap;
37
+ va_start(ap, format);
38
+ int result = vsprintf(str, format, ap);
39
+ va_end(ap);
40
+ return result;
41
+ }
42
+
43
+ sighandler_t signal(int signum, sighandler_t handler) {
44
+ (void)signum;
45
+ return handler;
46
+ }
47
+
48
+ FILE *tmpfile(void) {
49
+ return NULL;
50
+ }
51
+ `;
52
+ let stdinBufferFortran = null;
53
+ let clang = null;
54
+ let f2cModule = null;
55
+ let hasInitialStdinFortran = false;
56
+ let initialStdinFortran = null;
57
+ let initialStdinConsumedFortran = false;
58
+ const normalizeWorkspacePath = (value) => value
59
+ .replaceAll('\\', '/')
60
+ .split('/')
61
+ .filter((part) => part && part !== '.' && part !== '..')
62
+ .join('/');
63
+ const basename = (value) => value.split('/').pop() || value;
64
+ const stemOf = (value) => basename(value).replace(/\.[^.]+$/, '') || 'main';
65
+ const ensureTrailingNewline = (source) => (source.endsWith('\n') ? source : `${source}\n`);
66
+ const resolveInputPath = (activePath) => {
67
+ const normalized = normalizeWorkspacePath(activePath || '');
68
+ if (!normalized)
69
+ return 'main.f';
70
+ return /\.[A-Za-z0-9_-]+$/.test(normalized) ? normalized : `${normalized}.f`;
71
+ };
72
+ async function fetchVerifiedBytes(url, asset, receipt) {
73
+ const bytes = await fetchRuntimeAssetBytes({
74
+ url,
75
+ label: asset,
76
+ maxAssetBytes: receipt.bytes
77
+ });
78
+ await verifyRuntimeAssetIntegrity({
79
+ asset,
80
+ bytes,
81
+ expected: receipt,
82
+ runtimeId: 'FORTRAN'
83
+ });
84
+ return bytes;
85
+ }
86
+ async function fetchVerifiedText(url, asset, receipt) {
87
+ return textDecoder.decode(await fetchVerifiedBytes(url, asset, receipt));
88
+ }
89
+ async function loadFortranRuntime(clangAssets, fortranAssets, log) {
90
+ const receipts = snapshotFortranExecutionAssetReceipts(fortranAssets.integrity);
91
+ if (!Number.isSafeInteger(fortranAssets.maxAssetBytes) || fortranAssets.maxAssetBytes <= 0) {
92
+ throw new TypeError('Fortran maxAssetBytes must be a positive safe integer');
93
+ }
94
+ for (const [asset, url] of [
95
+ ['f2c.wasm', fortranAssets.f2cWasmUrl],
96
+ ['libf2c.a', fortranAssets.libf2cUrl],
97
+ ['f2c.h', fortranAssets.f2cHeaderUrl]
98
+ ]) {
99
+ resolveRuntimeAssetUrl(url, asset);
100
+ if (receipts[asset].bytes > fortranAssets.maxAssetBytes) {
101
+ throw new Error(`Fortran execution asset ${asset} exceeds the ${fortranAssets.maxAssetBytes} byte limit`);
102
+ }
103
+ }
104
+ const f2cWasmBytes = await fetchVerifiedBytes(fortranAssets.f2cWasmUrl, 'f2c.wasm', receipts['f2c.wasm']);
105
+ const libf2cBytes = await fetchVerifiedBytes(fortranAssets.libf2cUrl, 'libf2c.a', receipts['libf2c.a']);
106
+ const f2cHeader = await fetchVerifiedText(fortranAssets.f2cHeaderUrl, 'f2c.h', receipts['f2c.h']);
107
+ const nextF2cModule = await WebAssembly.compile(f2cWasmBytes);
108
+ configureWorkerRuntimeAssets(clangAssets || null);
109
+ const clangBaseUrl = clangAssets?.baseUrl || '';
110
+ const manifest = await loadRuntimeManifest(resolveRuntimeManifestUrl(clangBaseUrl), fetch, undefined, fortranAssets.maxAssetBytes);
111
+ const nextClang = new BrowserClangRuntime({
112
+ stdout: (output) => postMessage({ output }),
113
+ stdin: () => '',
114
+ progress: (value) => postMessage({ progress: value }),
115
+ log,
116
+ maxAssetBytes: fortranAssets.maxAssetBytes,
117
+ runtimeBaseUrl: clangBaseUrl,
118
+ manifest
119
+ });
120
+ await nextClang.ready;
121
+ nextClang.memfs.addFile('f2c.h', f2cHeader);
122
+ nextClang.memfs.addFile('libf2c.a', libf2cBytes);
123
+ clang = nextClang;
124
+ f2cModule = nextF2cModule;
125
+ }
126
+ function readProgramStdin() {
127
+ if (hasInitialStdinFortran) {
128
+ if (initialStdinConsumedFortran)
129
+ return null;
130
+ initialStdinConsumedFortran = true;
131
+ return initialStdinFortran ?? '';
132
+ }
133
+ return waitForBufferedStdin(stdinBufferFortran, () => postMessage({ buffer: true }));
134
+ }
135
+ function workspaceFilesForF2c(code, inputPath, workspaceFiles = []) {
136
+ const fileMap = new Map();
137
+ for (const file of workspaceFiles) {
138
+ const safePath = normalizeWorkspacePath(file.path);
139
+ if (safePath)
140
+ fileMap.set(safePath, file.content);
141
+ }
142
+ fileMap.set(inputPath, ensureTrailingNewline(code));
143
+ return Array.from(fileMap, ([path, contents]) => ({ path, contents }));
144
+ }
145
+ function readHostFileBytes(host, path) {
146
+ const segments = normalizeWorkspacePath(path).split('/').filter(Boolean);
147
+ let node = host.rootDirectory;
148
+ for (const segment of segments) {
149
+ node = node?.contents?.get(segment);
150
+ if (!node)
151
+ return null;
152
+ }
153
+ const data = node?.data;
154
+ if (data instanceof Uint8Array)
155
+ return new Uint8Array(data);
156
+ if (data instanceof ArrayBuffer)
157
+ return new Uint8Array(data);
158
+ return null;
159
+ }
160
+ function findFirstGeneratedCFile(directory, prefix = '') {
161
+ for (const [name, node] of directory.contents || []) {
162
+ const nextPath = prefix ? `${prefix}/${name}` : name;
163
+ if (node?.contents) {
164
+ const nested = findFirstGeneratedCFile(node, nextPath);
165
+ if (nested)
166
+ return nested;
167
+ continue;
168
+ }
169
+ if (nextPath.endsWith('.c') && node?.data instanceof Uint8Array) {
170
+ return new Uint8Array(node.data);
171
+ }
172
+ }
173
+ return null;
174
+ }
175
+ async function translateFortranToC(code, activePath, workspaceFiles) {
176
+ if (!f2cModule)
177
+ throw new Error('Fortran runtime is not loaded.');
178
+ const inputPath = resolveInputPath(activePath);
179
+ const outputPath = `${stemOf(inputPath)}.c`;
180
+ const stdoutChunks = [];
181
+ const stderrChunks = [];
182
+ const host = createBrowserWasiHost({
183
+ args: [inputPath],
184
+ env: { TMPDIR: '/tmp' },
185
+ files: workspaceFilesForF2c(code, inputPath, workspaceFiles),
186
+ programName: 'f2c.wasm',
187
+ stdout: (chunk) => stdoutChunks.push(chunk),
188
+ stderr: (chunk) => stderrChunks.push(chunk)
189
+ });
190
+ const wasiInstance = new WASI(host.args, host.envEntries, host.fds, { debug: false });
191
+ const instance = (await WebAssembly.instantiate(f2cModule, {
192
+ wasi_snapshot_preview1: wasiInstance.wasiImport,
193
+ wasi_unstable: wasiInstance.wasiImport
194
+ }));
195
+ const exitCode = wasiInstance.start(instance);
196
+ const stdout = stdoutChunks.join('');
197
+ const stderr = stderrChunks.join('');
198
+ if (exitCode) {
199
+ throw new Error(`f2c exited with ${exitCode}${stderr ? `\n${stderr}` : ''}`);
200
+ }
201
+ const generated = readHostFileBytes(host, outputPath) || findFirstGeneratedCFile(host.rootDirectory);
202
+ if (!generated) {
203
+ throw new Error(`f2c did not produce ${outputPath}${stderr || stdout ? `\n${stderr}${stdout}` : ''}`);
204
+ }
205
+ return {
206
+ cPath: outputPath,
207
+ cSource: textDecoder.decode(generated)
208
+ };
209
+ }
210
+ async function compileAndLinkFortran(cPath, cSource, compileArgs = []) {
211
+ if (!clang)
212
+ throw new Error('Fortran clang backend is not loaded.');
213
+ const mainObj = `${stemOf(cPath)}.o`;
214
+ const compatObj = 'f2c_compat.o';
215
+ const wasmPath = `${stemOf(cPath)}.wasm`;
216
+ await clang.compile({
217
+ input: cPath,
218
+ code: cSource,
219
+ obj: mainObj,
220
+ language: 'C',
221
+ compileArgs: ['-I.', '-w', ...compileArgs]
222
+ });
223
+ await clang.compile({
224
+ input: 'f2c_compat.c',
225
+ code: F2C_COMPAT_SOURCE,
226
+ obj: compatObj,
227
+ language: 'C',
228
+ compileArgs: ['-w']
229
+ });
230
+ const stackSize = 1024 * 1024;
231
+ const libdir = 'lib/wasm32-wasi';
232
+ const compilerRuntimeLibDir = clang.compilerConfig?.compilerRuntimeLibDir || 'lib/clang/8.0.1/lib/wasi';
233
+ const lld = await clang.getModule(clang.assetUrls.lld);
234
+ await clang.run(lld, clang.log, 'wasm-ld', '--export-dynamic', '-z', `stack-size=${stackSize}`, `-L${libdir}/noeh`, `-L${libdir}`, `${libdir}/crt1.o`, mainObj, compatObj, 'libf2c.a', '-lc', '-lm', `-L${compilerRuntimeLibDir}`, '-lclang_rt.builtins-wasm32', '-o', wasmPath);
235
+ const bytes = Uint8Array.from(clang.memfs.getFileContents(wasmPath));
236
+ const wasm = await WebAssembly.compile(bytes);
237
+ return {
238
+ bytes,
239
+ wasm,
240
+ target: 'wasm32-wasi',
241
+ format: 'wasi-core-wasm',
242
+ fileName: wasmPath,
243
+ language: 'C'
244
+ };
245
+ }
246
+ self.onmessage = async (event) => {
247
+ if (handleWorkerAssetMessage(event.data))
248
+ return;
249
+ const { code, buffer, load, log, prepare, compileArgs, programArgs, activePath, workspaceFiles, stdin, clangAssets, fortranAssets } = event.data;
250
+ if (load) {
251
+ try {
252
+ await loadFortranRuntime(clangAssets, fortranAssets, log);
253
+ postMessage({ load: true });
254
+ }
255
+ catch (error) {
256
+ postMessage({ error: error.message });
257
+ }
258
+ }
259
+ else if (typeof log === 'boolean' && !code) {
260
+ if (clang)
261
+ clang.log = log;
262
+ if (typeof code === 'string')
263
+ postMessage({ results: true });
264
+ }
265
+ else if (code) {
266
+ if (!clang) {
267
+ postMessage({ error: 'Fortran runtime is not loaded.' });
268
+ return;
269
+ }
270
+ clang.log = log;
271
+ stdinBufferFortran = new Int32Array(buffer);
272
+ hasInitialStdinFortran = typeof stdin === 'string';
273
+ initialStdinFortran = hasInitialStdinFortran ? stdin : null;
274
+ initialStdinConsumedFortran = false;
275
+ try {
276
+ const translated = await translateFortranToC(code, activePath, workspaceFiles || []);
277
+ const artifact = await compileAndLinkFortran(translated.cPath, translated.cSource, compileArgs || []);
278
+ if (!prepare) {
279
+ const result = await executeBrowserClangArtifact(artifact, {
280
+ args: programArgs || [],
281
+ stdin: readProgramStdin,
282
+ stdout: (output) => postMessage({ output }),
283
+ stderr: (output) => postMessage({ output })
284
+ });
285
+ if (result.exitCode) {
286
+ throw new Error(`Fortran program exited with ${result.exitCode}`);
287
+ }
288
+ }
289
+ postMessage({ results: true });
290
+ }
291
+ catch (error) {
292
+ postMessage({ error: error.message });
293
+ }
294
+ }
295
+ };
@@ -1,23 +1,36 @@
1
1
  import { waitForBufferedStdin } from '../stdinBuffer';
2
+ import { isSharedBufferBackedView } from '../sharedBuffer';
3
+ import { instrumentGoDebugSource } from '../goDebugInstrumentation';
2
4
  self.document = {
3
5
  querySelectorAll() {
4
6
  return [];
5
7
  }
6
8
  };
7
9
  let stdinBufferGo = null;
10
+ let debugBufferGo = null;
8
11
  let compilerUrl = '';
9
- let loadedCompilerUrl = '';
12
+ let manifestUrl = '';
13
+ let loadedCompilerKey = '';
14
+ let compilerLimits;
10
15
  let compilerPromise = null;
11
16
  let compiledArtifact = null;
12
17
  let compiledCacheKey = '';
13
- async function loadCompiler(url) {
18
+ async function loadCompiler(url, runtimeManifestUrl, limits) {
14
19
  if (!url) {
15
20
  throw new Error('Go runtime is not configured. Set PUBLIC_WASM_GO_COMPILER_URL or runtimeAssets.go.compilerUrl.');
16
21
  }
17
- if (loadedCompilerUrl === url && compilerPromise) {
22
+ const compilerKey = [
23
+ url,
24
+ runtimeManifestUrl,
25
+ limits?.assetTimeoutMs ?? '',
26
+ limits?.compileTimeoutMs ?? '',
27
+ limits?.maxAssetBytes ?? '',
28
+ limits?.maxWasmMemoryBytes ?? ''
29
+ ].join('\n');
30
+ if (loadedCompilerKey === compilerKey && compilerPromise) {
18
31
  return await compilerPromise;
19
32
  }
20
- loadedCompilerUrl = url;
33
+ loadedCompilerKey = compilerKey;
21
34
  compiledArtifact = null;
22
35
  compiledCacheKey = '';
23
36
  compilerPromise = (async () => {
@@ -34,7 +47,14 @@ async function loadCompiler(url) {
34
47
  throw new Error('wasm-go module must export executeBrowserGoArtifact');
35
48
  }
36
49
  return {
37
- compiler: await factory(),
50
+ compiler: await factory({
51
+ ...(runtimeManifestUrl ? { runtimeManifestUrl } : {}),
52
+ assetTimeoutMs: limits?.assetTimeoutMs,
53
+ compileTimeoutMs: limits?.compileTimeoutMs,
54
+ linkTimeoutMs: limits?.compileTimeoutMs,
55
+ maxAssetBytes: limits?.maxAssetBytes,
56
+ maxWasmMemoryBytes: limits?.maxWasmMemoryBytes
57
+ }),
38
58
  executeBrowserGoArtifact: module.executeBrowserGoArtifact
39
59
  };
40
60
  })();
@@ -53,30 +73,180 @@ function normalizeDiagnostic(diagnostic) {
53
73
  message: String(diagnostic?.message || '')
54
74
  };
55
75
  }
76
+ function normalizedBreakpointSet(values) {
77
+ return new Set([...(Array.isArray(values) ? values : [])]
78
+ .map((value) => Number(value))
79
+ .filter((value) => Number.isInteger(value) && value > 0));
80
+ }
81
+ function refreshGoDebugBreakpoints(state, control) {
82
+ const version = Atomics.load(control, 2);
83
+ if (state.breakpointVersion === version)
84
+ return;
85
+ state.breakpointVersion = version;
86
+ const count = Math.max(0, Math.min(Atomics.load(control, 3), control.length - 4));
87
+ const next = new Set();
88
+ for (let index = 0; index < count; index += 1) {
89
+ const line = Atomics.load(control, 4 + index);
90
+ if (Number.isInteger(line) && line > 0)
91
+ next.add(line);
92
+ }
93
+ state.breakpoints = next;
94
+ }
95
+ function parseGoDebugStack(stackJson, fallbackLine) {
96
+ try {
97
+ const stack = JSON.parse(stackJson);
98
+ if (Array.isArray(stack)) {
99
+ return stack
100
+ .map((frame) => ({
101
+ functionName: String(frame?.functionName || 'main'),
102
+ line: Math.max(1, Number(frame?.line || fallbackLine))
103
+ }))
104
+ .filter((frame) => frame.line > 0);
105
+ }
106
+ }
107
+ catch {
108
+ // Keep running even if user code corrupts the hook argument.
109
+ }
110
+ return [{ functionName: 'main', line: fallbackLine }];
111
+ }
112
+ function waitForGoDebugCommand(state, control, depth, line) {
113
+ let sequence = Atomics.load(control, 0);
114
+ while (true) {
115
+ Atomics.wait(control, 0, sequence, 100);
116
+ const command = Atomics.exchange(control, 1, 0);
117
+ if (!command) {
118
+ sequence = Atomics.load(control, 0);
119
+ continue;
120
+ }
121
+ state.resumeSkip = `${depth}:${line}`;
122
+ state.stepMode = null;
123
+ state.nextDepth = null;
124
+ state.nextLine = null;
125
+ state.stepOutDepth = null;
126
+ if (command === 2) {
127
+ state.stepMode = 'step';
128
+ }
129
+ else if (command === 3) {
130
+ state.stepMode = 'next';
131
+ state.nextDepth = depth;
132
+ state.nextLine = line;
133
+ }
134
+ else if (command === 4) {
135
+ state.stepMode = 'out';
136
+ state.stepOutDepth = Math.max(0, depth - 1);
137
+ }
138
+ return;
139
+ }
140
+ }
141
+ function createGoDebugHost(options) {
142
+ const state = {
143
+ breakpointVersion: Atomics.load(options.control, 2),
144
+ breakpoints: normalizedBreakpointSet(options.breakpoints),
145
+ pauseOnEntry: options.pauseOnEntry,
146
+ stepMode: null,
147
+ resumeSkip: null,
148
+ nextDepth: null,
149
+ nextLine: null,
150
+ stepOutDepth: null
151
+ };
152
+ const previousHook = globalThis.__wasmIdleGoDebugLine;
153
+ globalThis.__wasmIdleGoDebugLine = (rawLine, rawStackJson) => {
154
+ const line = Math.max(1, Number(rawLine || 1));
155
+ refreshGoDebugBreakpoints(state, options.control);
156
+ const callStack = parseGoDebugStack(String(rawStackJson || '[]'), line);
157
+ const depth = Math.max(1, callStack.length);
158
+ const skipKey = `${depth}:${line}`;
159
+ if (state.resumeSkip === skipKey)
160
+ return;
161
+ if (state.resumeSkip)
162
+ state.resumeSkip = null;
163
+ let reason = null;
164
+ if (state.pauseOnEntry) {
165
+ reason = 'entry';
166
+ }
167
+ else if (state.breakpoints.has(line)) {
168
+ reason = 'breakpoint';
169
+ }
170
+ else if (state.stepMode === 'step') {
171
+ reason = 'step';
172
+ }
173
+ else if (state.stepMode === 'next' &&
174
+ state.nextDepth !== null &&
175
+ depth <= state.nextDepth &&
176
+ line !== state.nextLine) {
177
+ reason = 'nextLine';
178
+ }
179
+ else if (state.stepMode === 'out' &&
180
+ state.stepOutDepth !== null &&
181
+ depth <= state.stepOutDepth) {
182
+ reason = 'stepOut';
183
+ }
184
+ if (!reason)
185
+ return;
186
+ state.pauseOnEntry = false;
187
+ state.stepMode = null;
188
+ state.nextDepth = null;
189
+ state.nextLine = null;
190
+ state.stepOutDepth = null;
191
+ postMessage({
192
+ debugEvent: {
193
+ type: 'pause',
194
+ line,
195
+ reason,
196
+ locals: [],
197
+ callStack
198
+ }
199
+ });
200
+ waitForGoDebugCommand(state, options.control, depth, line);
201
+ };
202
+ return () => {
203
+ if (previousHook === undefined) {
204
+ delete globalThis.__wasmIdleGoDebugLine;
205
+ }
206
+ else {
207
+ globalThis.__wasmIdleGoDebugLine = previousHook;
208
+ }
209
+ };
210
+ }
56
211
  self.onmessage = async (event) => {
57
- const { load, compilerUrl: nextCompilerUrl, buffer, code, prepare, args = [], target = 'wasip1/wasm', log } = event.data;
212
+ const { load, compilerUrl: nextCompilerUrl, manifestUrl: nextManifestUrl, runtimeLimits, buffer, debugBuffer, code, prepare, args = [], stdin, target = 'wasip1/wasm', log, debug = false, breakpoints = [], pauseOnEntry = false } = event.data;
58
213
  try {
59
214
  if (load) {
60
215
  compilerUrl = nextCompilerUrl;
216
+ manifestUrl = nextManifestUrl;
217
+ compilerLimits = runtimeLimits;
61
218
  if (log) {
62
219
  console.log(`[wasm-idle:go-worker] load compilerUrl=${compilerUrl}`);
63
220
  }
64
- await loadCompiler(compilerUrl);
221
+ await loadCompiler(compilerUrl, manifestUrl, compilerLimits);
65
222
  postMessage({ load: true });
66
223
  return;
67
224
  }
68
225
  stdinBufferGo = new Int32Array(buffer);
69
- const runtime = await loadCompiler(compilerUrl);
70
- const compileCacheKey = `${target}\n${code}`;
226
+ debugBufferGo = debugBuffer ? new Int32Array(debugBuffer) : null;
227
+ if (debug && (!debugBufferGo || !isSharedBufferBackedView(debugBufferGo))) {
228
+ postMessage({ error: 'Go debugging requires SharedArrayBuffer.' });
229
+ return;
230
+ }
231
+ const runtime = await loadCompiler(compilerUrl, manifestUrl, compilerLimits);
232
+ const effectiveTarget = debug ? 'js/wasm' : target;
233
+ const compileCode = debug ? instrumentGoDebugSource(code) : code;
234
+ const compileCacheKey = `${effectiveTarget}\n${compileCode}`;
71
235
  if (!compiledArtifact || compiledCacheKey !== compileCacheKey) {
236
+ postMessage({ phase: 'compile' });
72
237
  if (log) {
73
- console.log(`[wasm-idle:go-worker] compile start prepare=${String(prepare)} target=${target} bytes=${code.length}`);
238
+ console.log(`[wasm-idle:go-worker] compile start prepare=${String(prepare)} target=${effectiveTarget} bytes=${compileCode.length}`);
74
239
  }
75
240
  const result = await runtime.compiler.compile({
76
- code,
77
- target,
241
+ code: compileCode,
242
+ target: effectiveTarget,
78
243
  prepare,
79
244
  log,
245
+ assetTimeoutMs: runtimeLimits?.assetTimeoutMs,
246
+ compileTimeoutMs: runtimeLimits?.compileTimeoutMs,
247
+ linkTimeoutMs: runtimeLimits?.compileTimeoutMs,
248
+ maxAssetBytes: runtimeLimits?.maxAssetBytes,
249
+ maxWasmMemoryBytes: runtimeLimits?.maxWasmMemoryBytes,
80
250
  onProgress(progress) {
81
251
  postMessage({ progress });
82
252
  }
@@ -91,7 +261,9 @@ self.onmessage = async (event) => {
91
261
  postMessage({ output: result.stdout });
92
262
  if (!result.success) {
93
263
  throw new Error(result.stderr ||
94
- result.diagnostics?.map((diagnostic) => diagnostic.message).join('\n') ||
264
+ result.diagnostics
265
+ ?.map((diagnostic) => diagnostic.message)
266
+ .join('\n') ||
95
267
  'Go compilation failed');
96
268
  }
97
269
  if (result.stderr)
@@ -115,37 +287,71 @@ self.onmessage = async (event) => {
115
287
  if (log) {
116
288
  console.log(`[wasm-idle:go-worker] runtime start target=${compiledArtifact.target} format=${compiledArtifact.format}`);
117
289
  }
118
- const execution = await runtime.executeBrowserGoArtifact(compiledArtifact, {
119
- args,
120
- env: {
121
- USER: 'jungol'
122
- },
123
- stdin: () => {
124
- const chunk = waitForBufferedStdin(stdinBufferGo, () => postMessage({ buffer: true }));
125
- if (chunk == null) {
290
+ postMessage({ phase: 'execute' });
291
+ const restoreGoDebugHost = debug && debugBufferGo
292
+ ? createGoDebugHost({
293
+ control: debugBufferGo,
294
+ breakpoints,
295
+ pauseOnEntry: !!pauseOnEntry
296
+ })
297
+ : null;
298
+ const hasInitialStdin = typeof stdin === 'string';
299
+ let initialStdin = hasInitialStdin ? stdin : null;
300
+ let execution = null;
301
+ try {
302
+ execution = await runtime.executeBrowserGoArtifact(compiledArtifact, {
303
+ args,
304
+ runtimeManifestUrl: manifestUrl,
305
+ assetTimeoutMs: runtimeLimits?.assetTimeoutMs,
306
+ runTimeoutMs: runtimeLimits?.runTimeoutMs,
307
+ maxAssetBytes: runtimeLimits?.maxAssetBytes,
308
+ maxWasmMemoryBytes: runtimeLimits?.maxWasmMemoryBytes,
309
+ env: {
310
+ USER: 'jungol'
311
+ },
312
+ stdin: () => {
313
+ if (hasInitialStdin) {
314
+ const chunk = initialStdin;
315
+ initialStdin = null;
316
+ if (log) {
317
+ console.log(chunk == null
318
+ ? '[wasm-idle:go-stdin] fd_read(bytes=0, eof=true)'
319
+ : `[wasm-idle:go-stdin] fd_fill(bytes=${new TextEncoder().encode(chunk).byteLength}, text=${JSON.stringify(chunk)})`);
320
+ }
321
+ return chunk;
322
+ }
323
+ const chunk = waitForBufferedStdin(stdinBufferGo, () => postMessage({ buffer: true }));
324
+ if (chunk == null) {
325
+ if (log) {
326
+ console.log('[wasm-idle:go-stdin] fd_read(bytes=0, eof=true)');
327
+ }
328
+ return null;
329
+ }
126
330
  if (log) {
127
- console.log('[wasm-idle:go-stdin] fd_read(bytes=0, eof=true)');
331
+ console.log(`[wasm-idle:go-stdin] fd_fill(bytes=${new TextEncoder().encode(chunk).byteLength}, text=${JSON.stringify(chunk)})`);
332
+ }
333
+ return chunk;
334
+ },
335
+ stdout: (output) => {
336
+ if (output) {
337
+ postMessage({ output });
338
+ }
339
+ },
340
+ stderr: (output) => {
341
+ if (output) {
342
+ postMessage({ output });
128
343
  }
129
- return null;
130
- }
131
- if (log) {
132
- console.log(`[wasm-idle:go-stdin] fd_fill(bytes=${new TextEncoder().encode(chunk).byteLength}, text=${JSON.stringify(chunk)})`);
133
- }
134
- return chunk;
135
- },
136
- stdout: (output) => {
137
- if (output) {
138
- postMessage({ output });
139
- }
140
- },
141
- stderr: (output) => {
142
- if (output) {
143
- postMessage({ output });
144
344
  }
145
- }
146
- });
345
+ });
346
+ }
347
+ finally {
348
+ restoreGoDebugHost?.();
349
+ }
147
350
  if (log) {
148
- console.log(`[wasm-idle:go-worker] wasi run complete exitCode=${String(execution.exitCode)}`);
351
+ console.log(`[wasm-idle:go-worker] wasi run complete exitCode=${String(execution?.exitCode)}`);
352
+ }
353
+ if (!execution) {
354
+ throw new Error('Go program did not return an execution result');
149
355
  }
150
356
  if (execution.exitCode !== 0) {
151
357
  throw new Error(execution.stderr
@@ -0,0 +1,7 @@
1
+ export declare function parseHaskellDiagnostics(output: string): {
2
+ fileName: string | null;
3
+ lineNumber: number;
4
+ columnNumber: number;
5
+ severity: string;
6
+ message: string;
7
+ }[];