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.
- package/README.md +760 -81
- package/dist/index.d.ts +4 -9
- package/dist/index.js +2 -4
- package/dist/playground/applicationAssets.d.ts +4 -0
- package/dist/playground/applicationAssets.js +277 -0
- package/dist/playground/assemblyscript.d.ts +41 -0
- package/dist/playground/assemblyscript.js +630 -0
- package/dist/playground/assetBridge.d.ts +18 -7
- package/dist/playground/assetBridge.js +824 -100
- package/dist/playground/assets.d.ts +813 -19
- package/dist/playground/assets.js +2096 -156
- package/dist/playground/awk.d.ts +5 -0
- package/dist/playground/awk.js +60 -0
- package/dist/playground/bash.d.ts +53 -0
- package/dist/playground/bash.js +1096 -0
- package/dist/playground/bashWorkerProtocol.d.ts +88 -0
- package/dist/playground/bashWorkerProtocol.js +135 -0
- package/dist/playground/bqn.d.ts +5 -0
- package/dist/playground/bqn.js +57 -0
- package/dist/playground/bqnPreflight.d.ts +26 -0
- package/dist/playground/bqnPreflight.js +399 -0
- package/dist/playground/c3.d.ts +15 -0
- package/dist/playground/c3.js +154 -0
- package/dist/playground/clang.d.ts +35 -19
- package/dist/playground/clang.js +241 -52
- package/dist/playground/clangAssetIntegrity.d.ts +32 -0
- package/dist/playground/clangAssetIntegrity.js +8 -0
- package/dist/playground/clojurescript.d.ts +5 -0
- package/dist/playground/clojurescript.js +59 -0
- package/dist/playground/clojurescriptPreflight.d.ts +26 -0
- package/dist/playground/clojurescriptPreflight.js +383 -0
- package/dist/playground/cobol.d.ts +46 -0
- package/dist/playground/cobol.js +703 -0
- package/dist/playground/d.d.ts +47 -0
- package/dist/playground/d.js +644 -0
- package/dist/playground/dOuterAssets.d.ts +16 -0
- package/dist/playground/dOuterAssets.js +163 -0
- package/dist/playground/dotnet.d.ts +99 -0
- package/dist/playground/dotnet.js +1131 -0
- package/dist/playground/duckdb.d.ts +36 -0
- package/dist/playground/duckdb.js +542 -0
- package/dist/playground/elixir.d.ts +18 -10
- package/dist/playground/elixir.js +630 -96
- package/dist/playground/elixirAssets.d.ts +6 -0
- package/dist/playground/elixirAssets.js +33 -0
- package/dist/playground/executionObservation.d.ts +22 -0
- package/dist/playground/executionObservation.js +65 -0
- package/dist/playground/forth.d.ts +5 -0
- package/dist/playground/forth.js +53 -0
- package/dist/playground/forthPreflight.d.ts +24 -0
- package/dist/playground/forthPreflight.js +198 -0
- package/dist/playground/fortran.d.ts +47 -0
- package/dist/playground/fortran.js +651 -0
- package/dist/playground/fortranAssets.d.ts +6 -0
- package/dist/playground/fortranAssets.js +27 -0
- package/dist/playground/gleam.d.ts +6 -0
- package/dist/playground/gleam.js +33 -0
- package/dist/playground/go.d.ts +17 -11
- package/dist/playground/go.js +376 -72
- package/dist/playground/goDebugInstrumentation.d.ts +1 -0
- package/dist/playground/goDebugInstrumentation.js +229 -0
- package/dist/playground/haskell.d.ts +44 -0
- package/dist/playground/haskell.js +678 -0
- package/dist/playground/haskellAssets.d.ts +24 -0
- package/dist/playground/haskellAssets.js +93 -0
- package/dist/playground/index.d.ts +1 -1
- package/dist/playground/index.js +360 -111
- package/dist/playground/j.d.ts +5 -0
- package/dist/playground/j.js +60 -0
- package/dist/playground/jPreflight.d.ts +26 -0
- package/dist/playground/jPreflight.js +372 -0
- package/dist/playground/janet.d.ts +5 -0
- package/dist/playground/janet.js +64 -0
- package/dist/playground/java.d.ts +24 -10
- package/dist/playground/java.js +706 -84
- package/dist/playground/javaSource.d.ts +5 -0
- package/dist/playground/javaSource.js +16 -0
- package/dist/playground/javaStdin.d.ts +1 -1
- package/dist/playground/javaStdin.js +13 -4
- package/dist/playground/julia.d.ts +5 -0
- package/dist/playground/julia.js +64 -0
- package/dist/playground/lfortran.d.ts +8 -0
- package/dist/playground/lfortran.js +30 -0
- package/dist/playground/lfortranAssets.d.ts +21 -0
- package/dist/playground/lfortranAssets.js +118 -0
- package/dist/playground/lisp.d.ts +45 -0
- package/dist/playground/lisp.js +640 -0
- package/dist/playground/lispAssets.d.ts +9 -0
- package/dist/playground/lispAssets.js +74 -0
- package/dist/playground/lldbManifest.d.ts +3 -0
- package/dist/playground/lldbManifest.js +155 -0
- package/dist/playground/lldbSession.d.ts +115 -0
- package/dist/playground/lldbSession.js +1347 -0
- package/dist/playground/loadingProgress.d.ts +16 -0
- package/dist/playground/loadingProgress.js +166 -0
- package/dist/playground/lua.d.ts +44 -0
- package/dist/playground/lua.js +630 -0
- package/dist/playground/nim.d.ts +5 -0
- package/dist/playground/nim.js +76 -0
- package/dist/playground/objectivec.d.ts +39 -0
- package/dist/playground/objectivec.js +288 -0
- package/dist/playground/ocaml.d.ts +28 -10
- package/dist/playground/ocaml.js +815 -253
- package/dist/playground/octave.d.ts +43 -0
- package/dist/playground/octave.js +783 -0
- package/dist/playground/options.d.ts +19 -40
- package/dist/playground/options.js +2 -1
- package/dist/playground/pascal.d.ts +5 -0
- package/dist/playground/pascal.js +60 -0
- package/dist/playground/perl.d.ts +5 -0
- package/dist/playground/perl.js +61 -0
- package/dist/playground/php.d.ts +44 -0
- package/dist/playground/php.js +665 -0
- package/dist/playground/prolog.d.ts +6 -0
- package/dist/playground/prolog.js +75 -0
- package/dist/playground/python.d.ts +20 -14
- package/dist/playground/python.js +445 -101
- package/dist/playground/pythonPackageLock.d.ts +6 -0
- package/dist/playground/pythonPackageLock.js +56 -0
- package/dist/playground/r.d.ts +44 -0
- package/dist/playground/r.js +637 -0
- package/dist/playground/ruby.d.ts +46 -0
- package/dist/playground/ruby.js +732 -0
- package/dist/playground/rubyAssets.d.ts +23 -0
- package/dist/playground/rubyAssets.js +68 -0
- package/dist/playground/rubyTestPreflight.d.ts +2 -0
- package/dist/playground/rubyTestPreflight.js +18 -0
- package/dist/playground/runtimeModule.d.ts +1 -0
- package/dist/playground/runtimeModule.js +5 -0
- package/dist/playground/rust.d.ts +44 -13
- package/dist/playground/rust.js +714 -76
- package/dist/playground/rustExecutableGraph.d.ts +85 -0
- package/dist/playground/rustExecutableGraph.js +946 -0
- package/dist/playground/rustWorkerLimits.d.ts +17 -0
- package/dist/playground/rustWorkerLimits.js +34 -0
- package/dist/playground/sandbox.d.ts +16 -10
- package/dist/playground/sharedBuffer.d.ts +6 -0
- package/dist/playground/sharedBuffer.js +12 -0
- package/dist/playground/sqlite.d.ts +38 -0
- package/dist/playground/sqlite.js +550 -0
- package/dist/playground/staticRuntimeModuleVersion.d.ts +1 -0
- package/dist/playground/staticRuntimeModuleVersion.js +2 -0
- package/dist/playground/staticRuntimePreflight.d.ts +13 -0
- package/dist/playground/staticRuntimePreflight.js +231 -0
- package/dist/playground/staticRuntimePreflightExecute.d.ts +8 -0
- package/dist/playground/staticRuntimePreflightExecute.js +66 -0
- package/dist/playground/staticRuntimePreflightProtocol.d.ts +68 -0
- package/dist/playground/staticRuntimePreflightProtocol.js +339 -0
- package/dist/playground/staticStdinRing.d.ts +45 -0
- package/dist/playground/staticStdinRing.js +158 -0
- package/dist/playground/staticWorkerRuntime.d.ts +154 -0
- package/dist/playground/staticWorkerRuntime.js +1917 -0
- package/dist/playground/stdinBuffer.d.ts +9 -7
- package/dist/playground/stdinBuffer.js +9 -18
- package/dist/playground/swift.d.ts +5 -0
- package/dist/playground/swift.js +17 -0
- package/dist/playground/tcl.d.ts +5 -0
- package/dist/playground/tcl.js +62 -0
- package/dist/playground/teavmConfig.d.ts +1 -1
- package/dist/playground/teavmConfig.js +2 -2
- package/dist/playground/tinygo.d.ts +48 -18
- package/dist/playground/tinygo.js +1202 -329
- package/dist/playground/tinygoExecutableGraph.d.ts +44 -0
- package/dist/playground/tinygoExecutableGraph.js +449 -0
- package/dist/playground/typescript.d.ts +55 -0
- package/dist/playground/typescript.js +924 -0
- package/dist/playground/wasm.d.ts +43 -0
- package/dist/playground/wasm.js +608 -0
- package/dist/playground/wasmAwkVersion.d.ts +59 -0
- package/dist/playground/wasmAwkVersion.js +31 -0
- package/dist/playground/wasmBashVersion.d.ts +63 -0
- package/dist/playground/wasmBashVersion.js +36 -0
- package/dist/playground/wasmBqnVersion.d.ts +24 -0
- package/dist/playground/wasmBqnVersion.js +24 -0
- package/dist/playground/wasmC3Version.d.ts +20 -0
- package/dist/playground/wasmC3Version.js +21 -0
- package/dist/playground/wasmClojureScriptVersion.d.ts +21 -0
- package/dist/playground/wasmClojureScriptVersion.js +21 -0
- package/dist/playground/wasmDIntegrity.d.ts +15 -0
- package/dist/playground/wasmDIntegrity.js +15 -0
- package/dist/playground/wasmDVersion.d.ts +1 -0
- package/dist/playground/wasmDVersion.js +1 -0
- package/dist/playground/wasmDebugVersion.d.ts +6 -0
- package/dist/playground/wasmDebugVersion.js +6 -0
- package/dist/playground/wasmDotnetVersion.d.ts +1 -0
- package/dist/playground/wasmDotnetVersion.js +1 -0
- package/dist/playground/wasmElixirVersion.d.ts +21 -1
- package/dist/playground/wasmElixirVersion.js +21 -1
- package/dist/playground/wasmForthVersion.d.ts +18 -0
- package/dist/playground/wasmForthVersion.js +18 -0
- package/dist/playground/wasmFortranExecutionAssets.d.ts +15 -0
- package/dist/playground/wasmFortranExecutionAssets.js +15 -0
- package/dist/playground/wasmFortranVersion.d.ts +1 -0
- package/dist/playground/wasmFortranVersion.js +1 -0
- package/dist/playground/wasmGleamVersion.d.ts +5 -0
- package/dist/playground/wasmGleamVersion.js +5 -0
- package/dist/playground/wasmGoVersion.d.ts +1 -1
- package/dist/playground/wasmGoVersion.js +1 -1
- package/dist/playground/wasmHaskellVersion.d.ts +1 -0
- package/dist/playground/wasmHaskellVersion.js +1 -0
- package/dist/playground/wasmJVersion.d.ts +24 -0
- package/dist/playground/wasmJVersion.js +24 -0
- package/dist/playground/wasmJanetVersion.d.ts +53 -0
- package/dist/playground/wasmJanetVersion.js +30 -0
- package/dist/playground/wasmJuliaVersion.d.ts +71 -0
- package/dist/playground/wasmJuliaVersion.js +39 -0
- package/dist/playground/wasmLfortranVersion.d.ts +28 -0
- package/dist/playground/wasmLfortranVersion.js +29 -0
- package/dist/playground/wasmLispVersion.d.ts +1 -0
- package/dist/playground/wasmLispVersion.js +1 -0
- package/dist/playground/wasmLuaVersion.d.ts +1 -0
- package/dist/playground/wasmLuaVersion.js +1 -0
- package/dist/playground/wasmNimVersion.d.ts +125 -0
- package/dist/playground/wasmNimVersion.js +66 -0
- package/dist/playground/wasmObjectiveCVersion.d.ts +27 -0
- package/dist/playground/wasmObjectiveCVersion.js +27 -0
- package/dist/playground/wasmOcamlVersion.d.ts +12 -1
- package/dist/playground/wasmOcamlVersion.js +12 -1
- package/dist/playground/wasmOctaveVersion.d.ts +1 -0
- package/dist/playground/wasmOctaveVersion.js +1 -0
- package/dist/playground/wasmPascalVersion.d.ts +61 -0
- package/dist/playground/wasmPascalVersion.js +34 -0
- package/dist/playground/wasmPerlVersion.d.ts +71 -0
- package/dist/playground/wasmPerlVersion.js +39 -0
- package/dist/playground/wasmPrologVersion.d.ts +31 -0
- package/dist/playground/wasmPrologVersion.js +31 -0
- package/dist/playground/wasmRVersion.d.ts +1 -0
- package/dist/playground/wasmRVersion.js +1 -0
- package/dist/playground/wasmRustVersion.d.ts +1306 -1
- package/dist/playground/wasmRustVersion.js +1458 -1
- package/dist/playground/wasmSwiftVersion.d.ts +1 -0
- package/dist/playground/wasmSwiftVersion.js +1 -0
- package/dist/playground/wasmTclVersion.d.ts +85 -0
- package/dist/playground/wasmTclVersion.js +46 -0
- package/dist/playground/wasmTinyGoVersion.d.ts +98 -1
- package/dist/playground/wasmTinyGoVersion.js +107 -1
- package/dist/playground/wasmTypeScriptVersion.d.ts +5 -0
- package/dist/playground/wasmTypeScriptVersion.js +5 -0
- package/dist/playground/wasmWatVersion.d.ts +1 -0
- package/dist/playground/wasmWatVersion.js +1 -0
- package/dist/playground/wasmZigVersion.d.ts +13 -0
- package/dist/playground/wasmZigVersion.js +13 -0
- package/dist/playground/wat.d.ts +44 -0
- package/dist/playground/wat.js +622 -0
- package/dist/playground/worker/assemblyscript.js +339 -0
- package/dist/playground/worker/assets.d.ts +7 -0
- package/dist/playground/worker/assets.js +288 -39
- package/dist/playground/worker/bash.js +338 -0
- package/dist/playground/worker/bashNestedBootstrap.d.ts +6 -0
- package/dist/playground/worker/bashNestedBootstrap.js +59 -0
- package/dist/playground/worker/bashRuntime.d.ts +89 -0
- package/dist/playground/worker/bashRuntime.js +982 -0
- package/dist/playground/worker/clang.js +92 -13
- package/dist/playground/worker/cobol.js +107 -0
- package/dist/playground/worker/d.js +199 -0
- package/dist/playground/worker/dotnet.js +141 -0
- package/dist/playground/worker/duckdb.d.ts +1 -0
- package/dist/playground/worker/duckdb.js +136 -0
- package/dist/playground/worker/elixir.js +307 -41
- package/dist/playground/worker/fortran.d.ts +1 -0
- package/dist/playground/worker/fortran.js +295 -0
- package/dist/playground/worker/go.js +246 -40
- package/dist/playground/worker/haskell.d.ts +7 -0
- package/dist/playground/worker/haskell.js +465 -0
- package/dist/playground/worker/java.js +59 -20
- package/dist/playground/worker/lisp.d.ts +1 -0
- package/dist/playground/worker/lisp.js +195 -0
- package/dist/playground/worker/lua.d.ts +1 -0
- package/dist/playground/worker/lua.js +163 -0
- package/dist/playground/worker/objectivec.d.ts +1 -0
- package/dist/playground/worker/objectivec.js +10 -0
- package/dist/playground/worker/ocaml.js +206 -58
- package/dist/playground/worker/php.d.ts +1 -0
- package/dist/playground/worker/php.js +261 -0
- package/dist/playground/worker/python.js +201 -44
- package/dist/playground/worker/r.d.ts +1 -0
- package/dist/playground/worker/r.js +192 -0
- package/dist/playground/worker/ruby.d.ts +1 -0
- package/dist/playground/worker/ruby.js +248 -0
- package/dist/playground/worker/runtimeAssetFetch.d.ts +15 -0
- package/dist/playground/worker/runtimeAssetFetch.js +375 -0
- package/dist/playground/worker/rust.js +546 -20
- package/dist/playground/worker/sqlite.d.ts +1 -0
- package/dist/playground/worker/sqlite.js +112 -0
- package/dist/playground/worker/staticRuntimePreflight.d.ts +1 -0
- package/dist/playground/worker/staticRuntimePreflight.js +56 -0
- package/dist/playground/worker/tinygo.js +34 -9
- package/dist/playground/worker/typescript.d.ts +1 -0
- package/dist/playground/worker/typescript.js +251 -0
- package/dist/playground/worker/wasm.d.ts +1 -0
- package/dist/playground/worker/wasm.js +273 -0
- package/dist/playground/worker/wat.d.ts +1 -0
- package/dist/playground/worker/wat.js +188 -0
- package/dist/playground/worker/zig.d.ts +8 -0
- package/dist/playground/worker/zig.js +578 -0
- package/dist/playground/workerProgress.d.ts +15 -0
- package/dist/playground/workerProgress.js +72 -0
- package/dist/playground/workerSession.d.ts +28 -0
- package/dist/playground/workerSession.js +164 -0
- package/dist/playground/zig.d.ts +46 -0
- package/dist/playground/zig.js +690 -0
- package/dist/playground/zigAssets.d.ts +6 -0
- package/dist/playground/zigAssets.js +49 -0
- package/package.json +234 -105
- package/dist/clang/app.d.ts +0 -75
- package/dist/clang/app.js +0 -744
- package/dist/clang/apply.d.ts +0 -2
- package/dist/clang/apply.js +0 -11
- package/dist/clang/color.d.ts +0 -3
- package/dist/clang/color.js +0 -3
- package/dist/clang/encode.d.ts +0 -4
- package/dist/clang/encode.js +0 -20
- package/dist/clang/error.d.ts +0 -14
- package/dist/clang/error.js +0 -27
- package/dist/clang/gccCompat.d.ts +0 -15
- package/dist/clang/gccCompat.js +0 -767
- package/dist/clang/index.d.ts +0 -85
- package/dist/clang/index.js +0 -1077
- package/dist/clang/memory/index.d.ts +0 -4
- package/dist/clang/memory/index.js +0 -4
- package/dist/clang/memory/memFs.d.ts +0 -35
- package/dist/clang/memory/memFs.js +0 -132
- package/dist/clang/memory/memory.d.ts +0 -22
- package/dist/clang/memory/memory.js +0 -73
- package/dist/clang/memory/tar.d.ts +0 -2
- package/dist/clang/memory/tar.js +0 -59
- package/dist/clang/url.d.ts +0 -4
- package/dist/clang/url.js +0 -5
- package/dist/clang/wasm.d.ts +0 -4
- package/dist/clang/wasm.js +0 -50
- package/dist/clangd/config.d.ts +0 -18
- package/dist/clangd/config.js +0 -14
- package/dist/clangd/jsonStream.d.ts +0 -9
- package/dist/clangd/jsonStream.js +0 -48
- package/dist/clangd/session.d.ts +0 -18
- package/dist/clangd/session.js +0 -112
- package/dist/clangd/worker.js +0 -131
- package/dist/debug/controller.svelte.d.ts +0 -43
- package/dist/debug/controller.svelte.js +0 -268
- package/dist/debug/editor/index.d.ts +0 -2
- package/dist/debug/editor/index.js +0 -1
- package/dist/debug/editor/monaco.d.ts +0 -26
- package/dist/debug/editor/monaco.js +0 -128
- package/dist/debug/expression.d.ts +0 -26
- package/dist/debug/expression.js +0 -547
- package/dist/debug/index.d.ts +0 -8
- package/dist/debug/index.js +0 -5
- package/dist/debug/language/cpp.d.ts +0 -2
- package/dist/debug/language/cpp.js +0 -7
- package/dist/debug/language/index.d.ts +0 -3
- package/dist/debug/language/index.js +0 -2
- package/dist/debug/language/python.d.ts +0 -2
- package/dist/debug/language/python.js +0 -14
- package/dist/debug/language/types.d.ts +0 -6
- package/dist/debug/locals.d.ts +0 -2
- package/dist/debug/locals.js +0 -8
- package/dist/lsp/cpp/server.d.ts +0 -2
- package/dist/lsp/cpp/server.js +0 -68
- package/dist/lsp/index.d.ts +0 -5
- package/dist/lsp/index.js +0 -4
- package/dist/lsp/python/main.worker.js +0 -92
- package/dist/lsp/python/package/arcturus_python_lsp/__init__.py +0 -3
- package/dist/lsp/python/package/arcturus_python_lsp/server.py +0 -462
- package/dist/lsp/python/server.d.ts +0 -2
- package/dist/lsp/python/server.js +0 -54
- package/dist/lsp/registry.d.ts +0 -2
- package/dist/lsp/registry.js +0 -12
- package/dist/lsp/runtime.d.ts +0 -5
- package/dist/lsp/runtime.js +0 -31
- package/dist/lsp/types.d.ts +0 -17
- package/dist/terminal/Terminal.svelte +0 -422
- package/dist/terminal/Terminal.svelte.d.ts +0 -26
- package/dist/terminal/index.d.ts +0 -7
- package/dist/terminal/index.js +0 -5
- package/dist/terminal/plugin/index.d.ts +0 -9
- package/dist/terminal/plugin/index.js +0 -19
- package/dist/terminal/theme.d.ts +0 -49
- package/dist/terminal/theme.js +0 -49
- package/dist/terminal/types.d.ts +0 -18
- package/dist/utils/vscodeJsonrpcBrowser.d.ts +0 -5
- package/dist/utils/vscodeJsonrpcBrowser.js +0 -4
- /package/dist/{clangd/worker.d.ts → playground/worker/assemblyscript.d.ts} +0 -0
- /package/dist/{debug/language/types.js → playground/worker/bash.d.ts} +0 -0
- /package/dist/{lsp/python/main.worker.d.ts → playground/worker/cobol.d.ts} +0 -0
- /package/dist/{lsp/types.js → playground/worker/d.d.ts} +0 -0
- /package/dist/{terminal/types.js → playground/worker/dotnet.d.ts} +0 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { HASKELL_RUNTIME_ASSET_NAMES, snapshotHaskellRuntimeAssetReceipts, verifyRuntimeAssetIntegrity } from '@wasm-idle/core';
|
|
2
|
+
import { fetchRuntimeAssetBytes, resolveRuntimeAssetUrl } from './worker/runtimeAssetFetch';
|
|
3
|
+
export function snapshotHaskellRuntimeAssetConfig(config) {
|
|
4
|
+
if (!config || typeof config !== 'object') {
|
|
5
|
+
throw new TypeError('Haskell runtime asset configuration is required');
|
|
6
|
+
}
|
|
7
|
+
const moduleUrl = config.moduleUrl;
|
|
8
|
+
const rootfsUrl = config.rootfsUrl;
|
|
9
|
+
const bsdtarUrl = config.bsdtarUrl;
|
|
10
|
+
const integrityInput = config.integrity;
|
|
11
|
+
const maxAssetBytes = config.maxAssetBytes;
|
|
12
|
+
if (!Number.isSafeInteger(maxAssetBytes) || maxAssetBytes <= 0) {
|
|
13
|
+
throw new TypeError('Haskell runtime maxAssetBytes must be a positive safe integer');
|
|
14
|
+
}
|
|
15
|
+
const integrity = snapshotHaskellRuntimeAssetReceipts(integrityInput);
|
|
16
|
+
for (const asset of HASKELL_RUNTIME_ASSET_NAMES) {
|
|
17
|
+
if (integrity[asset].bytes > maxAssetBytes) {
|
|
18
|
+
throw new TypeError(`Haskell runtime receipt exceeds its limit for ${asset}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return Object.freeze({
|
|
22
|
+
moduleUrl: resolveRuntimeAssetUrl(moduleUrl, 'Haskell runtime module').href,
|
|
23
|
+
rootfsUrl: resolveRuntimeAssetUrl(rootfsUrl, 'Haskell GHC rootfs').href,
|
|
24
|
+
bsdtarUrl: resolveRuntimeAssetUrl(bsdtarUrl, 'Haskell rootfs extractor').href,
|
|
25
|
+
integrity,
|
|
26
|
+
maxAssetBytes
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
const decoder = new TextDecoder('utf-8', { fatal: true });
|
|
30
|
+
export async function loadVerifiedHaskellRuntimeAssets(config, options = {}) {
|
|
31
|
+
const snapshot = snapshotHaskellRuntimeAssetConfig(config);
|
|
32
|
+
const controller = new AbortController();
|
|
33
|
+
const forwardAbort = () => controller.abort(options.signal?.reason ??
|
|
34
|
+
new DOMException('Haskell runtime asset loading was aborted', 'AbortError'));
|
|
35
|
+
options.signal?.addEventListener('abort', forwardAbort, { once: true });
|
|
36
|
+
if (options.signal?.aborted)
|
|
37
|
+
forwardAbort();
|
|
38
|
+
try {
|
|
39
|
+
const [moduleBytes, rootfsBytes, bsdtarBytes] = await Promise.all(HASKELL_RUNTIME_ASSET_NAMES.map(async (asset) => {
|
|
40
|
+
const url = asset === 'dyld.mjs'
|
|
41
|
+
? snapshot.moduleUrl
|
|
42
|
+
: asset === 'rootfs.tar.zst'
|
|
43
|
+
? snapshot.rootfsUrl
|
|
44
|
+
: snapshot.bsdtarUrl;
|
|
45
|
+
const receipt = snapshot.integrity[asset];
|
|
46
|
+
const bytes = await fetchRuntimeAssetBytes({
|
|
47
|
+
url,
|
|
48
|
+
label: asset === 'dyld.mjs'
|
|
49
|
+
? 'Haskell runtime module'
|
|
50
|
+
: asset === 'rootfs.tar.zst'
|
|
51
|
+
? 'Haskell GHC rootfs'
|
|
52
|
+
: 'Haskell rootfs extractor',
|
|
53
|
+
cache: 'no-store',
|
|
54
|
+
maxAssetBytes: Math.min(receipt.bytes, snapshot.maxAssetBytes),
|
|
55
|
+
signal: controller.signal,
|
|
56
|
+
onProgress(progress) {
|
|
57
|
+
options.onProgress?.({ asset, ...progress });
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
if (controller.signal.aborted)
|
|
61
|
+
throw controller.signal.reason;
|
|
62
|
+
await verifyRuntimeAssetIntegrity({
|
|
63
|
+
asset,
|
|
64
|
+
bytes,
|
|
65
|
+
expected: receipt,
|
|
66
|
+
runtimeId: 'HASKELL'
|
|
67
|
+
});
|
|
68
|
+
if (controller.signal.aborted)
|
|
69
|
+
throw controller.signal.reason;
|
|
70
|
+
return bytes;
|
|
71
|
+
}));
|
|
72
|
+
let moduleSource;
|
|
73
|
+
try {
|
|
74
|
+
moduleSource = decoder.decode(moduleBytes);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
throw new TypeError('Haskell runtime module is not valid UTF-8', { cause: error });
|
|
78
|
+
}
|
|
79
|
+
return Object.freeze({
|
|
80
|
+
config: snapshot,
|
|
81
|
+
moduleSource,
|
|
82
|
+
rootfsBytes: rootfsBytes,
|
|
83
|
+
bsdtarBytes: bsdtarBytes
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
controller.abort(error);
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
options.signal?.removeEventListener('abort', forwardAbort);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { BoundSandbox, PlaygroundBinding, Sandbox, SandboxRuntimeAssets } from './sandbox';
|
|
2
|
-
export declare const supportedLanguages:
|
|
2
|
+
export declare const supportedLanguages: ("C" | "CPP" | "OBJC" | "D" | "TINYGO" | "RUBY" | "PERL" | "TCL" | "AWK" | "PASCAL" | "JANET" | "JULIA" | "NIM" | "BASH" | "BQN" | "CLOJURESCRIPT" | "FORTH" | "J" | "PROLOG" | "C3" | "PYTHON3" | "JAVA" | "RUST" | "GO" | "CSHARP" | "FSHARP" | "VBNET" | "ELIXIR" | "ERLANG" | "GLEAM" | "FORTRAN" | "LFORTRAN" | "COBOL" | "OCAML" | "JAVASCRIPT" | "TYPESCRIPT" | "ASSEMBLYSCRIPT" | "WAT" | "WASM" | "LUA" | "ZIG" | "LISP" | "HASKELL" | "R" | "OCTAVE" | "DUCKDB" | "SQLITE" | "PHP")[];
|
|
3
3
|
export declare function createPlaygroundBinding(runtimeAssets: SandboxRuntimeAssets): PlaygroundBinding;
|
|
4
4
|
declare function playground(language: string): Promise<Sandbox>;
|
|
5
5
|
declare function playground(language: string, runtimeAssets: SandboxRuntimeAssets): Promise<BoundSandbox>;
|
package/dist/playground/index.js
CHANGED
|
@@ -1,119 +1,368 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
1
|
+
import { createPlaygroundBinding as createCorePlaygroundBinding, isSupportedLanguageId, normalizeLanguageId, supportedLanguageIds } from '@wasm-idle/core';
|
|
2
|
+
const sandboxRoutes = [
|
|
3
|
+
{
|
|
4
|
+
languageId: 'C3',
|
|
5
|
+
load: async () => {
|
|
6
|
+
const { default: C3 } = await import('./c3');
|
|
7
|
+
return new C3();
|
|
8
|
+
}
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
languageId: 'PYTHON3',
|
|
12
|
+
load: async () => {
|
|
13
|
+
const { default: Python } = await import('./python');
|
|
14
|
+
return new Python();
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
languageId: 'C',
|
|
19
|
+
load: async () => {
|
|
20
|
+
const { default: Clang } = await import('./clang');
|
|
21
|
+
return new Clang('C');
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
languageId: 'CPP',
|
|
26
|
+
load: async () => {
|
|
27
|
+
const { default: Clang } = await import('./clang');
|
|
28
|
+
return new Clang('CPP');
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
languageId: 'OBJC',
|
|
33
|
+
load: async () => {
|
|
34
|
+
const { default: ObjectiveC } = await import('./objectivec');
|
|
35
|
+
return new ObjectiveC();
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
languageId: 'JAVA',
|
|
40
|
+
load: async () => {
|
|
41
|
+
const { default: Java } = await import('./java');
|
|
42
|
+
return new Java();
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
languageId: 'RUST',
|
|
47
|
+
load: async () => {
|
|
48
|
+
const { default: Rust } = await import('./rust');
|
|
49
|
+
return new Rust();
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
languageId: 'GO',
|
|
54
|
+
load: async () => {
|
|
55
|
+
const { default: Go } = await import('./go');
|
|
56
|
+
return new Go();
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
languageId: 'D',
|
|
61
|
+
load: async () => {
|
|
62
|
+
const { default: D } = await import('./d');
|
|
63
|
+
return new D();
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
languageId: 'CSHARP',
|
|
68
|
+
load: async () => {
|
|
69
|
+
const { default: Dotnet } = await import('./dotnet');
|
|
70
|
+
return new Dotnet('CSHARP');
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
languageId: 'FSHARP',
|
|
75
|
+
load: async () => {
|
|
76
|
+
const { default: Dotnet } = await import('./dotnet');
|
|
77
|
+
return new Dotnet('FSHARP');
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
languageId: 'VBNET',
|
|
82
|
+
load: async () => {
|
|
83
|
+
const { default: Dotnet } = await import('./dotnet');
|
|
84
|
+
return new Dotnet('VBNET');
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
languageId: 'ELIXIR',
|
|
89
|
+
load: async () => {
|
|
90
|
+
const { default: Elixir } = await import('./elixir');
|
|
91
|
+
return new Elixir();
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
languageId: 'ERLANG',
|
|
96
|
+
load: async () => {
|
|
97
|
+
const { default: Elixir } = await import('./elixir');
|
|
98
|
+
return new Elixir('ERLANG');
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
languageId: 'PROLOG',
|
|
103
|
+
load: async () => {
|
|
104
|
+
const { default: Prolog } = await import('./prolog');
|
|
105
|
+
return new Prolog();
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
languageId: 'GLEAM',
|
|
110
|
+
load: async () => {
|
|
111
|
+
const { default: Gleam } = await import('./gleam');
|
|
112
|
+
return new Gleam();
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
languageId: 'PERL',
|
|
117
|
+
load: async () => {
|
|
118
|
+
const { default: Perl } = await import('./perl');
|
|
119
|
+
return new Perl();
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
languageId: 'TCL',
|
|
124
|
+
load: async () => {
|
|
125
|
+
const { default: Tcl } = await import('./tcl');
|
|
126
|
+
return new Tcl();
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
languageId: 'AWK',
|
|
131
|
+
load: async () => {
|
|
132
|
+
const { default: Awk } = await import('./awk');
|
|
133
|
+
return new Awk();
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
languageId: 'PASCAL',
|
|
138
|
+
load: async () => {
|
|
139
|
+
const { default: Pascal } = await import('./pascal');
|
|
140
|
+
return new Pascal();
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
languageId: 'CLOJURESCRIPT',
|
|
145
|
+
load: async () => {
|
|
146
|
+
const { default: ClojureScript } = await import('./clojurescript');
|
|
147
|
+
return new ClojureScript();
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
languageId: 'FORTH',
|
|
152
|
+
load: async () => {
|
|
153
|
+
const { default: Forth } = await import('./forth');
|
|
154
|
+
return new Forth();
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
languageId: 'J',
|
|
159
|
+
load: async () => {
|
|
160
|
+
const { default: J } = await import('./j');
|
|
161
|
+
return new J();
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
languageId: 'BQN',
|
|
166
|
+
load: async () => {
|
|
167
|
+
const { default: Bqn } = await import('./bqn');
|
|
168
|
+
return new Bqn();
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
languageId: 'JANET',
|
|
173
|
+
load: async () => {
|
|
174
|
+
const { default: Janet } = await import('./janet');
|
|
175
|
+
return new Janet();
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
languageId: 'JULIA',
|
|
180
|
+
load: async () => {
|
|
181
|
+
const { default: Julia } = await import('./julia');
|
|
182
|
+
return new Julia();
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
languageId: 'NIM',
|
|
187
|
+
load: async () => {
|
|
188
|
+
const { default: Nim } = await import('./nim');
|
|
189
|
+
return new Nim();
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
languageId: 'BASH',
|
|
194
|
+
load: async () => {
|
|
195
|
+
const { default: Bash } = await import('./bash');
|
|
196
|
+
return new Bash();
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
languageId: 'LFORTRAN',
|
|
201
|
+
load: async () => {
|
|
202
|
+
const { default: LFortran } = await import('./lfortran');
|
|
203
|
+
return new LFortran();
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
languageId: 'FORTRAN',
|
|
208
|
+
load: async () => {
|
|
209
|
+
const { default: Fortran } = await import('./fortran');
|
|
210
|
+
return new Fortran();
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
languageId: 'COBOL',
|
|
215
|
+
load: async () => {
|
|
216
|
+
const { default: Cobol } = await import('./cobol');
|
|
217
|
+
return new Cobol();
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
languageId: 'TINYGO',
|
|
222
|
+
load: async () => {
|
|
223
|
+
const { default: TinyGo } = await import('./tinygo');
|
|
224
|
+
return new TinyGo();
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
languageId: 'OCAML',
|
|
229
|
+
load: async () => {
|
|
230
|
+
const { default: Ocaml } = await import('./ocaml');
|
|
231
|
+
return new Ocaml();
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
languageId: 'JAVASCRIPT',
|
|
236
|
+
load: async () => {
|
|
237
|
+
const { default: TypeScriptSandbox } = await import('./typescript');
|
|
238
|
+
return new TypeScriptSandbox('JAVASCRIPT');
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
languageId: 'TYPESCRIPT',
|
|
243
|
+
load: async () => {
|
|
244
|
+
const { default: TypeScriptSandbox } = await import('./typescript');
|
|
245
|
+
return new TypeScriptSandbox('TYPESCRIPT');
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
languageId: 'ASSEMBLYSCRIPT',
|
|
250
|
+
load: async () => {
|
|
251
|
+
const { default: AssemblyScript } = await import('./assemblyscript');
|
|
252
|
+
return new AssemblyScript();
|
|
253
|
+
}
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
languageId: 'WAT',
|
|
257
|
+
load: async () => {
|
|
258
|
+
const { default: Wat } = await import('./wat');
|
|
259
|
+
return new Wat();
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
languageId: 'WASM',
|
|
264
|
+
load: async () => {
|
|
265
|
+
const { default: Wasm } = await import('./wasm');
|
|
266
|
+
return new Wasm();
|
|
267
|
+
}
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
languageId: 'LUA',
|
|
271
|
+
load: async () => {
|
|
272
|
+
const { default: Lua } = await import('./lua');
|
|
273
|
+
return new Lua();
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
languageId: 'ZIG',
|
|
278
|
+
load: async () => {
|
|
279
|
+
const { default: Zig } = await import('./zig');
|
|
280
|
+
return new Zig();
|
|
281
|
+
}
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
languageId: 'LISP',
|
|
285
|
+
load: async () => {
|
|
286
|
+
const { default: Lisp } = await import('./lisp');
|
|
287
|
+
return new Lisp();
|
|
288
|
+
}
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
languageId: 'RUBY',
|
|
292
|
+
load: async () => {
|
|
293
|
+
const { default: Ruby } = await import('./ruby');
|
|
294
|
+
return new Ruby();
|
|
295
|
+
}
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
languageId: 'HASKELL',
|
|
299
|
+
load: async () => {
|
|
300
|
+
const { default: Haskell } = await import('./haskell');
|
|
301
|
+
return new Haskell();
|
|
302
|
+
}
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
languageId: 'R',
|
|
306
|
+
load: async () => {
|
|
307
|
+
const { default: R } = await import('./r');
|
|
308
|
+
return new R();
|
|
309
|
+
}
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
languageId: 'OCTAVE',
|
|
313
|
+
load: async () => {
|
|
314
|
+
const { default: Octave } = await import('./octave');
|
|
315
|
+
return new Octave();
|
|
316
|
+
}
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
languageId: 'DUCKDB',
|
|
320
|
+
load: async () => {
|
|
321
|
+
const { default: DuckDB } = await import('./duckdb');
|
|
322
|
+
return new DuckDB();
|
|
323
|
+
}
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
languageId: 'SQLITE',
|
|
327
|
+
load: async () => {
|
|
328
|
+
const { default: Sqlite } = await import('./sqlite');
|
|
329
|
+
return new Sqlite();
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
languageId: 'PHP',
|
|
334
|
+
load: async () => {
|
|
335
|
+
const { default: Php } = await import('./php');
|
|
336
|
+
return new Php();
|
|
337
|
+
}
|
|
338
|
+
}
|
|
21
339
|
];
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
set(target, prop, value, receiver) {
|
|
34
|
-
return Reflect.set(target, prop, value, receiver);
|
|
35
|
-
}
|
|
36
|
-
});
|
|
340
|
+
const sandboxRouteByLanguage = new Map();
|
|
341
|
+
for (const route of sandboxRoutes) {
|
|
342
|
+
if (sandboxRouteByLanguage.has(route.languageId)) {
|
|
343
|
+
throw new Error(`Duplicate sandbox route: ${route.languageId}`);
|
|
344
|
+
}
|
|
345
|
+
sandboxRouteByLanguage.set(route.languageId, route);
|
|
346
|
+
}
|
|
347
|
+
for (const languageId of supportedLanguageIds) {
|
|
348
|
+
if (!sandboxRouteByLanguage.has(languageId)) {
|
|
349
|
+
throw new Error(`Missing sandbox route: ${languageId}`);
|
|
350
|
+
}
|
|
37
351
|
}
|
|
352
|
+
export const supportedLanguages = [...supportedLanguageIds];
|
|
38
353
|
export function createPlaygroundBinding(runtimeAssets) {
|
|
39
|
-
|
|
40
|
-
runtimeAssets,
|
|
41
|
-
terminalProps: {},
|
|
42
|
-
async load(language) {
|
|
43
|
-
return bindRuntimeAssets(await playground(language), runtimeAssets);
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
binding.terminalProps = {
|
|
47
|
-
playground: binding,
|
|
48
|
-
runtimeAssets
|
|
49
|
-
};
|
|
50
|
-
return binding;
|
|
354
|
+
return createCorePlaygroundBinding(runtimeAssets, playground);
|
|
51
355
|
}
|
|
52
356
|
async function playground(language, runtimeAssets) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
: sandboxCache[language];
|
|
57
|
-
}
|
|
58
|
-
let sandbox;
|
|
59
|
-
switch (language) {
|
|
60
|
-
case 'PYTHON3':
|
|
61
|
-
case 'PYTHON':
|
|
62
|
-
case 'PYPY3':
|
|
63
|
-
sandbox = new Python();
|
|
64
|
-
break;
|
|
65
|
-
case 'C':
|
|
66
|
-
sandbox = new Clang('C');
|
|
67
|
-
break;
|
|
68
|
-
case 'CPP':
|
|
69
|
-
sandbox = new Clang('CPP');
|
|
70
|
-
break;
|
|
71
|
-
case 'JAVA':
|
|
72
|
-
sandbox = new Java();
|
|
73
|
-
break;
|
|
74
|
-
case 'RUST':
|
|
75
|
-
sandbox = new Rust();
|
|
76
|
-
break;
|
|
77
|
-
case 'GO':
|
|
78
|
-
sandbox = new Go();
|
|
79
|
-
break;
|
|
80
|
-
case 'ELIXIR':
|
|
81
|
-
sandbox = new Elixir();
|
|
82
|
-
break;
|
|
83
|
-
case 'TINYGO':
|
|
84
|
-
sandbox = new TinyGo();
|
|
85
|
-
break;
|
|
86
|
-
case 'OCAML':
|
|
87
|
-
sandbox = new Ocaml();
|
|
88
|
-
break;
|
|
89
|
-
default:
|
|
90
|
-
throw new Error(`Unsupported language: ${language}`);
|
|
91
|
-
}
|
|
92
|
-
sandboxCache[language] = sandbox;
|
|
93
|
-
if (sandbox) {
|
|
94
|
-
if (language === 'PYTHON3')
|
|
95
|
-
sandboxCache['PYPY3'] = sandboxCache['PYTHON'] = sandbox;
|
|
96
|
-
if (language === 'PYTHON')
|
|
97
|
-
sandboxCache['PYTHON3'] = sandboxCache['PYPY3'] = sandbox;
|
|
98
|
-
if (language === 'PYPY3')
|
|
99
|
-
sandboxCache['PYTHON3'] = sandboxCache['PYTHON'] = sandbox;
|
|
100
|
-
if (language === 'C')
|
|
101
|
-
sandboxCache['C'] = sandbox;
|
|
102
|
-
if (language === 'CPP')
|
|
103
|
-
sandboxCache['CPP'] = sandbox;
|
|
104
|
-
if (language === 'JAVA')
|
|
105
|
-
sandboxCache['JAVA'] = sandbox;
|
|
106
|
-
if (language === 'RUST')
|
|
107
|
-
sandboxCache['RUST'] = sandbox;
|
|
108
|
-
if (language === 'GO')
|
|
109
|
-
sandboxCache['GO'] = sandbox;
|
|
110
|
-
if (language === 'ELIXIR')
|
|
111
|
-
sandboxCache['ELIXIR'] = sandbox;
|
|
112
|
-
if (language === 'TINYGO')
|
|
113
|
-
sandboxCache['TINYGO'] = sandbox;
|
|
114
|
-
if (language === 'OCAML')
|
|
115
|
-
sandboxCache['OCAML'] = sandbox;
|
|
357
|
+
const normalizedLanguage = normalizeLanguageId(language);
|
|
358
|
+
if (!isSupportedLanguageId(normalizedLanguage)) {
|
|
359
|
+
throw new Error(`Unsupported language: ${language}`);
|
|
116
360
|
}
|
|
117
|
-
|
|
361
|
+
const route = sandboxRouteByLanguage.get(normalizedLanguage);
|
|
362
|
+
if (!route)
|
|
363
|
+
throw new Error(`Missing sandbox route: ${normalizedLanguage}`);
|
|
364
|
+
return runtimeAssets
|
|
365
|
+
? createPlaygroundBinding(runtimeAssets).load(normalizedLanguage)
|
|
366
|
+
: route.load();
|
|
118
367
|
}
|
|
119
368
|
export default playground;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { resolveJRuntimeAssetConfig } from './assets';
|
|
2
|
+
import { preflightStaticRuntimeAssetsInWorker } from './staticRuntimePreflight';
|
|
3
|
+
import { StaticWorkerRuntimeSandbox } from './staticWorkerRuntime';
|
|
4
|
+
import { RuntimeConfigurationError } from '@wasm-idle/core';
|
|
5
|
+
class J extends StaticWorkerRuntimeSandbox {
|
|
6
|
+
constructor() {
|
|
7
|
+
super({
|
|
8
|
+
languageId: 'J',
|
|
9
|
+
displayName: 'J',
|
|
10
|
+
defaultActivePath: 'main.ijs',
|
|
11
|
+
moduleWorker: true,
|
|
12
|
+
inlineVerifiedWorker: true,
|
|
13
|
+
runtimePreflightDelivery: 'transfer-owned',
|
|
14
|
+
stdin: {
|
|
15
|
+
mode: 'streaming',
|
|
16
|
+
sourceHintPattern: /1!:\s*1|\/dev\/stdin|\bstdin\b/iu
|
|
17
|
+
},
|
|
18
|
+
resolveRuntimeAssets(runtimeAssets, currentUrl) {
|
|
19
|
+
const resolved = resolveJRuntimeAssetConfig(runtimeAssets, currentUrl);
|
|
20
|
+
const profile = resolved.preflightProfile;
|
|
21
|
+
if (!/^[a-f0-9]{64}$/u.test(resolved.manifestFingerprint || '') ||
|
|
22
|
+
profile.manifestFingerprint !== resolved.manifestFingerprint ||
|
|
23
|
+
!resolved.workerReceipt) {
|
|
24
|
+
throw new RuntimeConfigurationError('J runtime requires one coherent preflight profile, manifest fingerprint, and worker receipt.', { runtimeId: 'J' });
|
|
25
|
+
}
|
|
26
|
+
return resolved;
|
|
27
|
+
},
|
|
28
|
+
async preflightRuntimeAssets(urls, context) {
|
|
29
|
+
const profile = urls.preflightProfile;
|
|
30
|
+
const loadedByAsset = new Map();
|
|
31
|
+
const totalDownloadBytes = (profile.manifestReceipt?.bytes ?? 0) +
|
|
32
|
+
(profile.moduleReceipt?.bytes ?? 0) +
|
|
33
|
+
(profile.wasmReceipt?.bytes ?? 0);
|
|
34
|
+
const payload = await preflightStaticRuntimeAssetsInWorker({
|
|
35
|
+
runtimeId: 'J',
|
|
36
|
+
displayName: 'J',
|
|
37
|
+
baseUrl: urls.baseUrl,
|
|
38
|
+
manifestUrl: urls.manifestUrl || '',
|
|
39
|
+
profile,
|
|
40
|
+
limits: context.limits,
|
|
41
|
+
signal: context.signal,
|
|
42
|
+
reportProgress(progress) {
|
|
43
|
+
if (progress.kind === 'asset') {
|
|
44
|
+
loadedByAsset.set(progress.progress.assetKey, progress.progress.loadedBytes);
|
|
45
|
+
const loadedBytes = [...loadedByAsset.values()].reduce((total, loaded) => total + loaded, 0);
|
|
46
|
+
const fraction = totalDownloadBytes > 0 ? loadedBytes / totalDownloadBytes : 0;
|
|
47
|
+
context.reportProgress(0.04 + Math.min(1, fraction) * 0.11, `Preflighting J asset ${progress.progress.assetKey}`);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const { loadedBytes, totalBytes } = progress;
|
|
51
|
+
const fraction = totalBytes > 0 ? loadedBytes / totalBytes : 0;
|
|
52
|
+
context.reportProgress(0.15 + Math.min(1, fraction) * 0.02, 'Decompressing verified J Wasm');
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
return context.createOwnedDelivery(payload);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export default J;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { JRuntimePreflightProfile } from './assets';
|
|
2
|
+
import { type ExecutionLimits, type RuntimeAssetPreflightProgress } from '@wasm-idle/core';
|
|
3
|
+
export declare const J_PREFLIGHT_PROTOCOL: "wasm-idle-j-preflight";
|
|
4
|
+
export declare const J_PREFLIGHT_PROTOCOL_VERSION: 1;
|
|
5
|
+
export declare const J_PREFLIGHT_RUNTIME_ID: "J";
|
|
6
|
+
export interface JRuntimePreflightRequest {
|
|
7
|
+
readonly baseUrl: string;
|
|
8
|
+
readonly manifestUrl: string;
|
|
9
|
+
readonly profile: JRuntimePreflightProfile;
|
|
10
|
+
readonly limits?: Partial<ExecutionLimits>;
|
|
11
|
+
readonly signal?: AbortSignal;
|
|
12
|
+
readonly fetch?: typeof globalThis.fetch;
|
|
13
|
+
readonly reportProgress?: (progress: RuntimeAssetPreflightProgress) => void;
|
|
14
|
+
readonly reportDecompressionProgress?: (loadedBytes: number, totalBytes: number) => void;
|
|
15
|
+
}
|
|
16
|
+
export interface JRuntimePreflightPayload {
|
|
17
|
+
readonly protocol: typeof J_PREFLIGHT_PROTOCOL;
|
|
18
|
+
readonly protocolVersion: typeof J_PREFLIGHT_PROTOCOL_VERSION;
|
|
19
|
+
readonly profileId: string;
|
|
20
|
+
readonly sourceRevision: string;
|
|
21
|
+
readonly manifestFingerprint: string;
|
|
22
|
+
readonly manifestBytes: Uint8Array;
|
|
23
|
+
readonly moduleBytes: Uint8Array;
|
|
24
|
+
readonly wasmBytes: Uint8Array;
|
|
25
|
+
}
|
|
26
|
+
export declare function preflightJRuntimeAssets(request: JRuntimePreflightRequest): Promise<JRuntimePreflightPayload>;
|