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,578 @@
1
+ import { ConsoleStdout, Directory, Fd, File, OpenFile, PreopenDirectory, WASI, wasi } from '@bjorn3/browser_wasi_shim';
2
+ import { decompressGzip, untar } from '@wasm-idle/llvm-core';
3
+ import { verifyRuntimeAssetIntegrity } from '@wasm-idle/core';
4
+ import { waitForBufferedStdin } from '../stdinBuffer';
5
+ import { snapshotZigExecutionAssetReceipts } from '../zigAssets';
6
+ import { fetchRuntimeAssetBytes, resolveRuntimeAssetUrl } from './runtimeAssetFetch';
7
+ const encoder = new TextEncoder();
8
+ const decoder = new TextDecoder();
9
+ const DEFAULT_ZIG_STDLIB_MAX_EXPANDED_BYTES = 128 * 1024 * 1024;
10
+ const DEFAULT_ZIG_STDLIB_MAX_FILES = 4096;
11
+ const DEFAULT_ZIP_FILE_BUFFER_BYTES = 64 * 1024;
12
+ let stdinBufferZig = null;
13
+ let stdinChunkZig = new Uint8Array(0);
14
+ let stdinChunkOffsetZig = 0;
15
+ let compilerUrl = '';
16
+ let stdlibUrl = '';
17
+ let loadedAssetKey = '';
18
+ let loadedAssets = null;
19
+ let loadingAssets = null;
20
+ let assetIntegrity = null;
21
+ let runtimeMaxAssetBytes = 0;
22
+ let compiledArtifact = null;
23
+ let compiledCacheKey = '';
24
+ class ZigStdin extends Fd {
25
+ initialStdin;
26
+ hasInitialStdin;
27
+ log;
28
+ constructor(initialStdin, log) {
29
+ super();
30
+ this.initialStdin = typeof initialStdin === 'string' ? initialStdin : null;
31
+ this.hasInitialStdin = typeof initialStdin === 'string';
32
+ this.log = log;
33
+ }
34
+ fd_fdstat_get() {
35
+ const fdstat = new wasi.Fdstat(wasi.FILETYPE_CHARACTER_DEVICE, 0);
36
+ fdstat.fs_rights_base = BigInt(wasi.RIGHTS_FD_READ);
37
+ fdstat.fs_rights_inherited = 0n;
38
+ return { ret: wasi.ERRNO_SUCCESS, fdstat };
39
+ }
40
+ fd_filestat_get() {
41
+ return {
42
+ ret: wasi.ERRNO_SUCCESS,
43
+ filestat: new wasi.Filestat(0n, wasi.FILETYPE_CHARACTER_DEVICE, 0n)
44
+ };
45
+ }
46
+ fd_read(size) {
47
+ if (stdinChunkOffsetZig >= stdinChunkZig.length) {
48
+ const nextChunk = this.readNextChunk();
49
+ if (nextChunk === null) {
50
+ stdinChunkZig = new Uint8Array(0);
51
+ stdinChunkOffsetZig = 0;
52
+ return {
53
+ ret: wasi.ERRNO_SUCCESS,
54
+ data: new Uint8Array(0)
55
+ };
56
+ }
57
+ stdinChunkZig = encoder.encode(nextChunk);
58
+ stdinChunkOffsetZig = 0;
59
+ }
60
+ const end = Math.min(stdinChunkOffsetZig + size, stdinChunkZig.length);
61
+ const data = stdinChunkZig.slice(stdinChunkOffsetZig, end);
62
+ stdinChunkOffsetZig = end;
63
+ return {
64
+ ret: wasi.ERRNO_SUCCESS,
65
+ data
66
+ };
67
+ }
68
+ readNextChunk() {
69
+ if (this.hasInitialStdin) {
70
+ const chunk = this.initialStdin;
71
+ this.initialStdin = null;
72
+ this.logRead(chunk);
73
+ return chunk;
74
+ }
75
+ if (stdinBufferZig === null) {
76
+ this.logRead(null);
77
+ return null;
78
+ }
79
+ const chunk = waitForBufferedStdin(stdinBufferZig, () => postMessage({ buffer: true }));
80
+ this.logRead(chunk);
81
+ return chunk;
82
+ }
83
+ logRead(chunk) {
84
+ if (!this.log)
85
+ return;
86
+ if (chunk === null) {
87
+ console.log('[wasm-idle:zig-stdin] fd_read(bytes=0, eof=true)');
88
+ return;
89
+ }
90
+ console.log(`[wasm-idle:zig-stdin] fd_read(bytes=${encoder.encode(chunk).byteLength}, text=${JSON.stringify(chunk)})`);
91
+ }
92
+ }
93
+ function normalizeWorkspacePath(value, fallback = 'main.zig') {
94
+ const normalized = value
95
+ .trim()
96
+ .replaceAll('\\', '/')
97
+ .split('/')
98
+ .filter((part) => part && part !== '.' && part !== '..')
99
+ .join('/');
100
+ return normalized || fallback;
101
+ }
102
+ function addFileToDirectory(root, filePath, data) {
103
+ const parts = normalizeWorkspacePath(filePath).split('/').filter(Boolean);
104
+ let current = root;
105
+ for (const part of parts.slice(0, -1)) {
106
+ const next = current.contents.get(part);
107
+ if (next instanceof Directory) {
108
+ current = next;
109
+ continue;
110
+ }
111
+ const directory = new Directory(new Map());
112
+ current.contents.set(part, directory);
113
+ current = directory;
114
+ }
115
+ current.contents.set(parts.at(-1) || 'main.zig', new File(data));
116
+ }
117
+ function getFile(root, filePath) {
118
+ const parts = normalizeWorkspacePath(filePath).split('/').filter(Boolean);
119
+ let current = root;
120
+ for (const part of parts) {
121
+ if (!(current instanceof Directory))
122
+ return null;
123
+ const next = current.contents.get(part);
124
+ if (!(next instanceof Directory) && !(next instanceof File))
125
+ return null;
126
+ current = next;
127
+ }
128
+ return current instanceof File ? current : null;
129
+ }
130
+ function buildWorkspaceRoot(code, activePath, workspaceFiles) {
131
+ const root = new Directory(new Map());
132
+ const entryPath = normalizeWorkspacePath(activePath || 'main.zig');
133
+ for (const file of workspaceFiles) {
134
+ if (!file || typeof file.path !== 'string' || typeof file.content !== 'string')
135
+ continue;
136
+ addFileToDirectory(root, file.path, encoder.encode(file.path === activePath ? code : file.content));
137
+ }
138
+ addFileToDirectory(root, entryPath, encoder.encode(code));
139
+ return { root, entryPath };
140
+ }
141
+ async function fetchBytes(url, asset, maxAssetBytes, progressStart, progressEnd) {
142
+ const data = await fetchRuntimeAssetBytes({
143
+ url,
144
+ label: asset,
145
+ maxAssetBytes,
146
+ onProgress: ({ loaded, total }) => {
147
+ if (total && total > 0) {
148
+ postProgress(progressStart + ((progressEnd - progressStart) * loaded) / total);
149
+ }
150
+ }
151
+ });
152
+ postProgress(progressEnd);
153
+ return data;
154
+ }
155
+ class ZigStdlibArchiveBudget {
156
+ maxExpandedBytes;
157
+ maxFiles;
158
+ declaredBytes = 0;
159
+ expandedBytes = 0;
160
+ fileCount = 0;
161
+ entries = new Map();
162
+ constructor(maxExpandedBytes, maxFiles) {
163
+ this.maxExpandedBytes = maxExpandedBytes;
164
+ this.maxFiles = maxFiles;
165
+ }
166
+ addDirectory(path) {
167
+ const normalized = this.normalizePath(path, true);
168
+ const parts = normalized.split('/');
169
+ for (let index = 1; index <= parts.length; index += 1) {
170
+ const directoryPath = parts.slice(0, index).join('/');
171
+ if (this.entries.get(directoryPath) === 'file') {
172
+ throw new Error(`Zig standard library archive path collision: ${normalized}`);
173
+ }
174
+ this.entries.set(directoryPath, 'directory');
175
+ }
176
+ }
177
+ startFile(path, declaredBytes) {
178
+ const normalized = this.normalizePath(path, false);
179
+ if (this.entries.has(normalized)) {
180
+ throw new Error(`Zig standard library archive repeats path: ${normalized}`);
181
+ }
182
+ const parts = normalized.split('/');
183
+ for (let index = 1; index < parts.length; index += 1) {
184
+ const parent = parts.slice(0, index).join('/');
185
+ if (this.entries.get(parent) === 'file') {
186
+ throw new Error(`Zig standard library archive path collision: ${normalized}`);
187
+ }
188
+ }
189
+ const nextFileCount = this.fileCount + 1;
190
+ if (nextFileCount > this.maxFiles) {
191
+ throw new Error(`Zig standard library archive exceeds the ${this.maxFiles} file limit`);
192
+ }
193
+ if (declaredBytes !== undefined &&
194
+ (!Number.isSafeInteger(declaredBytes) || declaredBytes < 0)) {
195
+ throw new Error(`Zig standard library archive has an invalid size for ${normalized}`);
196
+ }
197
+ const nextDeclaredBytes = this.declaredBytes + (declaredBytes ?? 0);
198
+ if (nextDeclaredBytes > this.maxExpandedBytes) {
199
+ throw new Error(`Zig standard library archive exceeds the ${this.maxExpandedBytes} byte expanded-size limit`);
200
+ }
201
+ for (let index = 1; index < parts.length; index += 1) {
202
+ const parent = parts.slice(0, index).join('/');
203
+ if (!this.entries.has(parent))
204
+ this.entries.set(parent, 'directory');
205
+ }
206
+ this.entries.set(normalized, 'file');
207
+ this.fileCount = nextFileCount;
208
+ this.declaredBytes = nextDeclaredBytes;
209
+ return normalized;
210
+ }
211
+ addExpandedBytes(byteLength) {
212
+ const nextExpandedBytes = this.expandedBytes + byteLength;
213
+ if (nextExpandedBytes > this.maxExpandedBytes) {
214
+ throw new Error(`Zig standard library archive exceeds the ${this.maxExpandedBytes} byte expanded-size limit`);
215
+ }
216
+ this.expandedBytes = nextExpandedBytes;
217
+ }
218
+ normalizePath(path, directory) {
219
+ const candidate = directory ? path.replace(/\/+$/u, '') : path;
220
+ if (!candidate ||
221
+ candidate.includes('\\') ||
222
+ candidate.includes('\0') ||
223
+ candidate.startsWith('/') ||
224
+ /%2f|%5c/iu.test(candidate)) {
225
+ throw new Error(`Zig standard library archive has an unsafe path: ${path}`);
226
+ }
227
+ const parts = candidate.split('/');
228
+ if (parts.some((part) => !part || part === '.' || part === '..')) {
229
+ throw new Error(`Zig standard library archive has an unsafe path: ${path}`);
230
+ }
231
+ const normalized = parts.join('/');
232
+ if (normalized !== 'std' && !normalized.startsWith('std/')) {
233
+ throw new Error(`Zig standard library archive path is outside std/: ${path}`);
234
+ }
235
+ if (!directory && normalized === 'std') {
236
+ throw new Error(`Zig standard library archive has an unsafe file path: ${path}`);
237
+ }
238
+ return normalized;
239
+ }
240
+ }
241
+ export async function loadStdDirectory(source, assetUrl, limits = {}, receipt) {
242
+ const maxExpandedBytes = limits.maxExpandedBytes ?? DEFAULT_ZIG_STDLIB_MAX_EXPANDED_BYTES;
243
+ const maxFiles = limits.maxFiles ?? DEFAULT_ZIG_STDLIB_MAX_FILES;
244
+ if (!Number.isSafeInteger(maxExpandedBytes) || maxExpandedBytes <= 0) {
245
+ throw new TypeError('Zig standard library maxExpandedBytes must be a positive safe integer');
246
+ }
247
+ if (!Number.isSafeInteger(maxFiles) || maxFiles <= 0) {
248
+ throw new TypeError('Zig standard library maxFiles must be a positive safe integer');
249
+ }
250
+ const root = new Directory(new Map());
251
+ const budget = new ZigStdlibArchiveBudget(maxExpandedBytes, maxFiles);
252
+ if (source.byteLength >= 2 && source[0] === 0x50 && source[1] === 0x4b) {
253
+ if (receipt) {
254
+ throw new Error('Zig receipt-backed standard library must be a gzip archive or TAR');
255
+ }
256
+ const { Unzip, UnzipInflate } = await import('fflate');
257
+ let archiveError;
258
+ const unzip = new Unzip((file) => {
259
+ const stopFile = (error) => {
260
+ archiveError ??= error;
261
+ try {
262
+ file.terminate();
263
+ }
264
+ catch {
265
+ // Preserve the archive validation or decompression error.
266
+ }
267
+ };
268
+ if (archiveError) {
269
+ stopFile(archiveError);
270
+ return;
271
+ }
272
+ if (file.name.endsWith('/')) {
273
+ try {
274
+ budget.addDirectory(file.name);
275
+ }
276
+ catch (error) {
277
+ stopFile(error);
278
+ }
279
+ return;
280
+ }
281
+ let normalizedPath;
282
+ try {
283
+ normalizedPath = budget.startFile(file.name, file.originalSize);
284
+ }
285
+ catch (error) {
286
+ stopFile(error);
287
+ return;
288
+ }
289
+ let contents = new Uint8Array(Math.min(maxExpandedBytes, file.originalSize ?? DEFAULT_ZIP_FILE_BUFFER_BYTES, DEFAULT_ZIP_FILE_BUFFER_BYTES));
290
+ let length = 0;
291
+ file.ondata = (error, data, final) => {
292
+ if (error) {
293
+ stopFile(error);
294
+ return;
295
+ }
296
+ if (archiveError)
297
+ return;
298
+ const nextLength = length + data.byteLength;
299
+ try {
300
+ budget.addExpandedBytes(data.byteLength);
301
+ }
302
+ catch (budgetError) {
303
+ stopFile(budgetError);
304
+ return;
305
+ }
306
+ if (nextLength > contents.byteLength) {
307
+ const nextCapacity = Math.min(maxExpandedBytes, Math.max(nextLength, Math.max(1, contents.byteLength * 2)));
308
+ const grown = new Uint8Array(nextCapacity);
309
+ grown.set(contents.subarray(0, length));
310
+ contents = grown;
311
+ }
312
+ contents.set(data, length);
313
+ length = nextLength;
314
+ if (!final)
315
+ return;
316
+ if (file.originalSize !== undefined && length !== file.originalSize) {
317
+ stopFile(new Error(`Zig standard library archive size mismatch for ${normalizedPath}: expected ${file.originalSize}, received ${length}`));
318
+ return;
319
+ }
320
+ addFileToDirectory(root, normalizedPath, contents.slice(0, length));
321
+ };
322
+ file.start();
323
+ });
324
+ unzip.register(UnzipInflate);
325
+ unzip.push(source, true);
326
+ if (archiveError)
327
+ throw archiveError;
328
+ }
329
+ else {
330
+ const sourceIsGzip = source.byteLength >= 2 && source[0] === 0x1f && source[1] === 0x8b;
331
+ if (receipt && sourceIsGzip) {
332
+ await verifyRuntimeAssetIntegrity({
333
+ asset: 'std.tar.gz',
334
+ bytes: source,
335
+ expected: receipt,
336
+ runtimeId: 'ZIG'
337
+ });
338
+ }
339
+ const expanded = sourceIsGzip
340
+ ? await decompressGzip(source, assetUrl, maxExpandedBytes)
341
+ : source;
342
+ if (receipt) {
343
+ await verifyRuntimeAssetIntegrity({
344
+ asset: 'std.tar.gz',
345
+ bytes: expanded,
346
+ expected: receipt,
347
+ stage: 'uncompressed',
348
+ runtimeId: 'ZIG'
349
+ });
350
+ }
351
+ untar(expanded, {
352
+ addDirectory(directoryPath) {
353
+ budget.addDirectory(directoryPath);
354
+ },
355
+ addFile(filePath, contents) {
356
+ const normalizedPath = budget.startFile(filePath, contents.byteLength);
357
+ budget.addExpandedBytes(contents.byteLength);
358
+ addFileToDirectory(root, normalizedPath, contents);
359
+ }
360
+ });
361
+ }
362
+ const stdDirectory = root.contents.get('std');
363
+ if (!(stdDirectory instanceof Directory)) {
364
+ throw new Error('Zig standard library archive must contain a std/ directory.');
365
+ }
366
+ return stdDirectory;
367
+ }
368
+ function postProgress(percent) {
369
+ postMessage({ progress: { percent: Math.max(0, Math.min(100, percent)) } });
370
+ }
371
+ async function loadAssets(nextCompilerUrl, nextStdlibUrl, nextIntegrity, maxAssetBytes) {
372
+ if (!nextCompilerUrl || !nextStdlibUrl) {
373
+ throw new Error('Zig runtime is not configured. Set PUBLIC_WASM_ZIG_COMPILER_URL and PUBLIC_WASM_ZIG_STDLIB_URL, or runtimeAssets.zig.compilerUrl and runtimeAssets.zig.stdlibUrl.');
374
+ }
375
+ if (!Number.isSafeInteger(maxAssetBytes) || maxAssetBytes <= 0) {
376
+ throw new TypeError('Zig maxAssetBytes must be a positive safe integer');
377
+ }
378
+ const receipts = snapshotZigExecutionAssetReceipts(nextIntegrity);
379
+ for (const [asset, url] of [
380
+ ['zig_small.wasm', nextCompilerUrl],
381
+ ['std.tar.gz', nextStdlibUrl]
382
+ ]) {
383
+ resolveRuntimeAssetUrl(url, asset);
384
+ const receipt = receipts[asset];
385
+ if (Math.max(receipt.bytes, receipt.uncompressedBytes || 0) > maxAssetBytes) {
386
+ throw new Error(`Zig execution asset ${asset} exceeds the ${maxAssetBytes} byte limit`);
387
+ }
388
+ }
389
+ const nextAssetKey = JSON.stringify({
390
+ compilerUrl: nextCompilerUrl,
391
+ stdlibUrl: nextStdlibUrl,
392
+ integrity: receipts
393
+ });
394
+ if (loadedAssetKey === nextAssetKey && loadedAssets)
395
+ return loadedAssets;
396
+ if (loadingAssets?.key === nextAssetKey)
397
+ return await loadingAssets.promise;
398
+ const pending = (async () => {
399
+ postProgress(5);
400
+ const [compilerBytes, stdlibBytes] = await Promise.all([
401
+ fetchBytes(nextCompilerUrl, 'zig_small.wasm', receipts['zig_small.wasm'].bytes, 5, 45),
402
+ fetchBytes(nextStdlibUrl, 'std.tar.gz', Math.max(receipts['std.tar.gz'].bytes, receipts['std.tar.gz'].uncompressedBytes || 0), 45, 70)
403
+ ]);
404
+ await verifyRuntimeAssetIntegrity({
405
+ asset: 'zig_small.wasm',
406
+ bytes: compilerBytes,
407
+ expected: receipts['zig_small.wasm'],
408
+ runtimeId: 'ZIG'
409
+ });
410
+ const [compilerModule, stdDirectory] = await Promise.all([
411
+ WebAssembly.compile(compilerBytes),
412
+ loadStdDirectory(stdlibBytes, nextStdlibUrl, { maxExpandedBytes: maxAssetBytes }, receipts['std.tar.gz'])
413
+ ]);
414
+ postProgress(100);
415
+ return { compilerModule, stdDirectory };
416
+ })();
417
+ loadingAssets = { key: nextAssetKey, promise: pending };
418
+ try {
419
+ const nextAssets = await pending;
420
+ if (loadingAssets?.promise === pending) {
421
+ loadedAssetKey = nextAssetKey;
422
+ loadedAssets = nextAssets;
423
+ loadingAssets = null;
424
+ compiledArtifact = null;
425
+ compiledCacheKey = '';
426
+ }
427
+ return nextAssets;
428
+ }
429
+ catch (error) {
430
+ if (loadingAssets?.promise === pending)
431
+ loadingAssets = null;
432
+ throw error;
433
+ }
434
+ }
435
+ function instantiateResult(result) {
436
+ return result instanceof WebAssembly.Instance ? result : result.instance;
437
+ }
438
+ async function compileZig({ code, activePath, workspaceFiles, targetTriple, compileArgs, log }) {
439
+ if (!assetIntegrity)
440
+ throw new Error('Zig runtime assets are not loaded');
441
+ const { compilerModule, stdDirectory } = await loadAssets(compilerUrl, stdlibUrl, assetIntegrity, runtimeMaxAssetBytes);
442
+ const { root, entryPath } = buildWorkspaceRoot(code, activePath, workspaceFiles);
443
+ let compilerOutput = '';
444
+ const outputFd = new ConsoleStdout((chunk) => {
445
+ compilerOutput += decoder.decode(chunk, { stream: true });
446
+ });
447
+ const errorFd = new ConsoleStdout((chunk) => {
448
+ compilerOutput += decoder.decode(chunk, { stream: true });
449
+ });
450
+ const args = [
451
+ 'zigc.wasm',
452
+ 'build-exe',
453
+ entryPath,
454
+ `-Dtarget=${targetTriple}`,
455
+ '-fno-llvm',
456
+ '-fno-lld',
457
+ '-O',
458
+ 'ReleaseSmall',
459
+ '-femit-bin=output.wasm',
460
+ ...compileArgs
461
+ ];
462
+ const zigWasi = new WASI(args, [], [
463
+ new OpenFile(new File([])),
464
+ outputFd,
465
+ errorFd,
466
+ new PreopenDirectory('.', root.contents),
467
+ new PreopenDirectory('/lib', new Map([['std', stdDirectory]])),
468
+ new PreopenDirectory('/cache', new Map())
469
+ ], { debug: false });
470
+ if (log) {
471
+ console.log(`[wasm-idle:zig-worker] compile start target=${targetTriple} activePath=${entryPath} bytes=${code.length}`);
472
+ }
473
+ const instance = instantiateResult(await WebAssembly.instantiate(compilerModule, {
474
+ wasi_snapshot_preview1: zigWasi.wasiImport
475
+ }));
476
+ const exitCode = zigWasi.start(instance);
477
+ if (compilerOutput)
478
+ postMessage({ output: compilerOutput });
479
+ if (exitCode !== 0) {
480
+ throw new Error(compilerOutput || `Zig compilation failed with code ${exitCode}`);
481
+ }
482
+ const outputFile = getFile(root, 'output.wasm');
483
+ if (!outputFile?.data?.byteLength) {
484
+ throw new Error('Zig compiler did not emit output.wasm');
485
+ }
486
+ if (log) {
487
+ console.log(`[wasm-idle:zig-worker] compile complete artifactBytes=${outputFile.data.byteLength}`);
488
+ }
489
+ return new Uint8Array(outputFile.data);
490
+ }
491
+ async function runZigArtifact({ artifact, args, stdin, log }) {
492
+ stdinChunkZig = new Uint8Array(0);
493
+ stdinChunkOffsetZig = 0;
494
+ const stdout = new ConsoleStdout((chunk) => {
495
+ const text = decoder.decode(chunk, { stream: true });
496
+ if (text)
497
+ postMessage({ output: text });
498
+ });
499
+ const stderr = new ConsoleStdout((chunk) => {
500
+ const text = decoder.decode(chunk, { stream: true });
501
+ if (text)
502
+ postMessage({ output: text });
503
+ });
504
+ const zigWasi = new WASI(['output.wasm', ...args], ['USER=jungol'], [new ZigStdin(stdin, log), stdout, stderr], { debug: false });
505
+ const instance = instantiateResult(await WebAssembly.instantiate(artifact, {
506
+ wasi_snapshot_preview1: zigWasi.wasiImport,
507
+ wasi_unstable: zigWasi.wasiImport
508
+ }));
509
+ postMessage({
510
+ progress: {
511
+ kind: 'ready',
512
+ state: 'running',
513
+ reason: 'started',
514
+ label: 'Zig program started'
515
+ }
516
+ });
517
+ const exitCode = zigWasi.start(instance);
518
+ if (log) {
519
+ console.log(`[wasm-idle:zig-worker] wasi run complete exitCode=${String(exitCode)}`);
520
+ }
521
+ if (exitCode !== 0) {
522
+ throw new Error(`Zig program exited with code ${exitCode}`);
523
+ }
524
+ }
525
+ self.onmessage = async (event) => {
526
+ const { load, compilerUrl: nextCompilerUrl, stdlibUrl: nextStdlibUrl, integrity: nextIntegrity, maxAssetBytes: nextMaxAssetBytes, buffer, code, prepare, args = [], compileArgs = [], stdin, activePath = 'main.zig', workspaceFiles = [], targetTriple = 'wasm64-wasi', log } = event.data;
527
+ try {
528
+ if (load) {
529
+ if (log) {
530
+ console.log(`[wasm-idle:zig-worker] load compilerUrl=${nextCompilerUrl} stdlibUrl=${nextStdlibUrl}`);
531
+ }
532
+ const receipts = snapshotZigExecutionAssetReceipts(nextIntegrity);
533
+ await loadAssets(nextCompilerUrl, nextStdlibUrl, receipts, nextMaxAssetBytes);
534
+ compilerUrl = nextCompilerUrl;
535
+ stdlibUrl = nextStdlibUrl;
536
+ assetIntegrity = receipts;
537
+ runtimeMaxAssetBytes = nextMaxAssetBytes;
538
+ postMessage({ load: true });
539
+ return;
540
+ }
541
+ stdinBufferZig = new Int32Array(buffer);
542
+ const compileCacheKey = JSON.stringify({
543
+ targetTriple,
544
+ activePath,
545
+ code,
546
+ workspaceFiles,
547
+ compileArgs
548
+ });
549
+ if (!compiledArtifact || compiledCacheKey !== compileCacheKey) {
550
+ compiledArtifact = await compileZig({
551
+ code,
552
+ activePath,
553
+ workspaceFiles,
554
+ targetTriple,
555
+ compileArgs,
556
+ log
557
+ });
558
+ compiledCacheKey = compileCacheKey;
559
+ }
560
+ if (prepare) {
561
+ postMessage({ results: true });
562
+ return;
563
+ }
564
+ await runZigArtifact({
565
+ artifact: compiledArtifact,
566
+ args,
567
+ stdin,
568
+ log
569
+ });
570
+ postMessage({ results: true });
571
+ }
572
+ catch (error) {
573
+ if (log) {
574
+ console.error('[wasm-idle:zig-worker] failed', error);
575
+ }
576
+ postMessage({ error: error?.message || String(error) });
577
+ }
578
+ };
@@ -0,0 +1,15 @@
1
+ import type { RuntimeProgressEvent } from '@wasm-idle/core';
2
+ export interface ProgressSink {
3
+ set?: (value: number, stage?: string) => void;
4
+ report?: (event: RuntimeProgressEvent) => void;
5
+ }
6
+ export interface WorkerNumericProgressPayload {
7
+ percent?: number;
8
+ stage?: string;
9
+ }
10
+ export type WorkerLifecycleProgressEvent = Extract<RuntimeProgressEvent, {
11
+ kind: 'ready' | 'settled';
12
+ }>;
13
+ export type WorkerProgressPayload = WorkerNumericProgressPayload | WorkerLifecycleProgressEvent;
14
+ export declare function reportWorkerProgress(progress: ProgressSink | undefined, payload: unknown): WorkerLifecycleProgressEvent | undefined;
15
+ export declare function reportWorkerInputReady(progress: ProgressSink | undefined, label?: string): WorkerLifecycleProgressEvent | undefined;
@@ -0,0 +1,72 @@
1
+ const readyStates = new Set(['running', 'waiting-input', 'paused']);
2
+ const readyReasons = new Set([
3
+ 'started',
4
+ 'stdout',
5
+ 'stderr',
6
+ 'stdin-request',
7
+ 'debug-paused',
8
+ 'result'
9
+ ]);
10
+ const settledOutcomes = new Set(['completed', 'failed', 'cancelled', 'timed-out']);
11
+ function optionalLabel(payload) {
12
+ return typeof payload.label === 'string' && payload.label ? payload.label : undefined;
13
+ }
14
+ function normalizeLifecycleEvent(payload) {
15
+ const label = optionalLabel(payload);
16
+ if (payload.kind === 'ready' &&
17
+ typeof payload.state === 'string' &&
18
+ readyStates.has(payload.state) &&
19
+ typeof payload.reason === 'string' &&
20
+ readyReasons.has(payload.reason)) {
21
+ return {
22
+ kind: 'ready',
23
+ state: payload.state,
24
+ reason: payload.reason,
25
+ ...(label ? { label } : {})
26
+ };
27
+ }
28
+ if (payload.kind === 'settled' &&
29
+ typeof payload.outcome === 'string' &&
30
+ settledOutcomes.has(payload.outcome)) {
31
+ return {
32
+ kind: 'settled',
33
+ outcome: payload.outcome,
34
+ ...(label ? { label } : {})
35
+ };
36
+ }
37
+ return null;
38
+ }
39
+ export function reportWorkerProgress(progress, payload) {
40
+ if (typeof payload === 'number') {
41
+ if (Number.isFinite(payload))
42
+ progress?.set?.(Math.max(0, Math.min(payload, 1)));
43
+ return;
44
+ }
45
+ if (!payload || typeof payload !== 'object')
46
+ return;
47
+ const record = payload;
48
+ if ('kind' in record) {
49
+ const lifecycleEvent = normalizeLifecycleEvent(record);
50
+ if (!lifecycleEvent)
51
+ return;
52
+ if (progress?.report) {
53
+ progress.report(lifecycleEvent);
54
+ }
55
+ else if (lifecycleEvent.kind === 'ready' || lifecycleEvent.outcome === 'completed') {
56
+ progress?.set?.(1, lifecycleEvent.label);
57
+ }
58
+ return lifecycleEvent;
59
+ }
60
+ const { percent, stage } = record;
61
+ if (typeof percent !== 'number' || !Number.isFinite(percent))
62
+ return;
63
+ progress?.set?.(Math.max(0, Math.min(percent / 100, 1)), typeof stage === 'string' && stage ? stage : undefined);
64
+ }
65
+ export function reportWorkerInputReady(progress, label = 'Runtime ready for input') {
66
+ return reportWorkerProgress(progress, {
67
+ kind: 'ready',
68
+ state: 'waiting-input',
69
+ reason: 'stdin-request',
70
+ label
71
+ });
72
+ }
@@ -0,0 +1,28 @@
1
+ export type WorkerOperation = symbol;
2
+ type WorkerSessionOptions = {
3
+ label: string | (() => string);
4
+ onDispose?: (worker: Worker) => void;
5
+ };
6
+ export declare class WorkerSession {
7
+ private readonly options;
8
+ private worker;
9
+ private activeOperation;
10
+ constructor(options: WorkerSessionOptions);
11
+ attach(worker: Worker): Worker;
12
+ attach(worker: Worker, operation: WorkerOperation): Worker | null;
13
+ load(initialize: (resolve: () => void, reject: (reason?: unknown) => void, operation: WorkerOperation) => void | Promise<void>): Promise<void>;
14
+ waitForLoad(worker: Worker, initialize: (resolve: () => void, reject: (reason?: unknown) => void) => void): Promise<void>;
15
+ beginRun(worker: Worker | null | undefined, reject: (reason?: unknown) => void): symbol;
16
+ complete(operation: WorkerOperation): boolean;
17
+ release(worker: Worker): boolean;
18
+ reset(): void;
19
+ terminate(reason?: unknown): void;
20
+ private get label();
21
+ private startOperation;
22
+ isActive(operation: WorkerOperation): boolean;
23
+ private fail;
24
+ private notifyDisposed;
25
+ private disposeWorker;
26
+ private retireWorker;
27
+ }
28
+ export {};