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,74 @@
|
|
|
1
|
+
import { loadVerifiedLispRuntime } from '@wasm-idle/core';
|
|
2
|
+
import { fetchRuntimeAssetBytes, resolveRuntimeAssetUrl } from './worker/runtimeAssetFetch';
|
|
3
|
+
const MAX_LISP_MANIFEST_BYTES = 1024 * 1024;
|
|
4
|
+
const DEFAULT_MAX_LISP_ASSET_BYTES = 128 * 1024 * 1024;
|
|
5
|
+
const decoder = new TextDecoder('utf-8', { fatal: true });
|
|
6
|
+
function resolveMaxAssetBytes(value) {
|
|
7
|
+
const resolved = value ?? DEFAULT_MAX_LISP_ASSET_BYTES;
|
|
8
|
+
if (!Number.isSafeInteger(resolved) || resolved <= 0) {
|
|
9
|
+
throw new TypeError('Lisp runtime maxAssetBytes must be a positive safe integer');
|
|
10
|
+
}
|
|
11
|
+
return resolved;
|
|
12
|
+
}
|
|
13
|
+
function assertManifestAssetLimits(value, maxAssetBytes) {
|
|
14
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
15
|
+
return;
|
|
16
|
+
const manifest = value;
|
|
17
|
+
const assets = Array.isArray(manifest.assets) ? manifest.assets : [];
|
|
18
|
+
const storage = Array.isArray(manifest.storage) ? manifest.storage : [];
|
|
19
|
+
for (const asset of [...assets, ...storage]) {
|
|
20
|
+
if (Number.isSafeInteger(asset?.size) && asset.size > maxAssetBytes) {
|
|
21
|
+
throw new Error(`Lisp runtime asset ${String(asset.path || 'unknown')} exceeds the ${maxAssetBytes} byte limit`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function requireLispRuntimeConfig(config) {
|
|
26
|
+
if (!config.moduleUrl || !config.manifestUrl) {
|
|
27
|
+
throw new TypeError('Lisp runtime requires moduleUrl and manifestUrl from one published runtime profile');
|
|
28
|
+
}
|
|
29
|
+
if (!/^[a-f0-9]{64}$/u.test(config.manifestFingerprint)) {
|
|
30
|
+
throw new TypeError('Lisp runtime requires an explicit 64-character manifestFingerprint trust anchor');
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
moduleUrl: resolveRuntimeAssetUrl(config.moduleUrl, 'Lisp runtime module'),
|
|
34
|
+
manifestUrl: resolveRuntimeAssetUrl(config.manifestUrl, 'Lisp runtime manifest')
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export async function loadVerifiedLispRuntimeAssets(config, options = {}) {
|
|
38
|
+
const { moduleUrl, manifestUrl } = requireLispRuntimeConfig(config);
|
|
39
|
+
const maxAssetBytes = resolveMaxAssetBytes(options.maxAssetBytes);
|
|
40
|
+
const manifestBytes = await fetchRuntimeAssetBytes({
|
|
41
|
+
url: manifestUrl.href,
|
|
42
|
+
label: 'Lisp runtime manifest',
|
|
43
|
+
cache: 'no-cache',
|
|
44
|
+
maxAssetBytes: Math.min(MAX_LISP_MANIFEST_BYTES, maxAssetBytes),
|
|
45
|
+
signal: options.signal
|
|
46
|
+
});
|
|
47
|
+
let manifest;
|
|
48
|
+
try {
|
|
49
|
+
manifest = JSON.parse(decoder.decode(manifestBytes));
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
throw new TypeError(`Lisp runtime manifest is not valid UTF-8 JSON: ${error instanceof Error ? error.message : error}`);
|
|
53
|
+
}
|
|
54
|
+
assertManifestAssetLimits(manifest, maxAssetBytes);
|
|
55
|
+
const assetBaseUrl = new URL('./', moduleUrl);
|
|
56
|
+
return await loadVerifiedLispRuntime({
|
|
57
|
+
manifest,
|
|
58
|
+
expectedFingerprint: config.manifestFingerprint,
|
|
59
|
+
loadStorageAsset: async (asset, signal, logicalAsset) => {
|
|
60
|
+
const assetUrl = new URL(asset.path, assetBaseUrl);
|
|
61
|
+
assetUrl.search = moduleUrl.search || manifestUrl.search;
|
|
62
|
+
return await fetchRuntimeAssetBytes({
|
|
63
|
+
url: assetUrl.href,
|
|
64
|
+
label: `Lisp runtime asset ${asset.logicalPath}`,
|
|
65
|
+
cache: 'force-cache',
|
|
66
|
+
maxAssetBytes: Math.min(maxAssetBytes, Math.max(asset.size, logicalAsset.size)),
|
|
67
|
+
signal
|
|
68
|
+
});
|
|
69
|
+
},
|
|
70
|
+
signal: options.signal,
|
|
71
|
+
moduleEnvironment: options.moduleEnvironment,
|
|
72
|
+
decompressGzip: options.decompressGzip
|
|
73
|
+
});
|
|
74
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { type RuntimeAssetIntegrityEntry } from '@wasm-idle/core';
|
|
2
|
+
import { type RuntimeManifestV2 } from '@wasm-idle/llvm-core/debug';
|
|
3
|
+
export declare function loadVerifiedDebugRuntimeManifest(url: string, expected: Readonly<RuntimeAssetIntegrityEntry> | undefined, fetchImpl: typeof fetch, signal?: AbortSignal): Promise<RuntimeManifestV2>;
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { AssetIntegrityError, AssetTooLargeError, RuntimeConfigurationError, verifyRuntimeAssetIntegrity } from '@wasm-idle/core';
|
|
2
|
+
import { parseDebugRuntimeManifest } from '@wasm-idle/llvm-core/debug';
|
|
3
|
+
const MAX_DEBUG_MANIFEST_BYTES = 64 * 1024;
|
|
4
|
+
function abortReason(signal) {
|
|
5
|
+
return signal.reason ?? new DOMException('The operation was aborted', 'AbortError');
|
|
6
|
+
}
|
|
7
|
+
function throwIfAborted(signal) {
|
|
8
|
+
if (signal?.aborted)
|
|
9
|
+
throw abortReason(signal);
|
|
10
|
+
}
|
|
11
|
+
async function cancelResponseBody(response, reason) {
|
|
12
|
+
try {
|
|
13
|
+
await response.body?.cancel(reason);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
// Preserve the validation or lifecycle failure that initiated cancellation.
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export async function loadVerifiedDebugRuntimeManifest(url, expected, fetchImpl, signal) {
|
|
20
|
+
if (!expected || !/^[a-f0-9]{64}$/u.test(expected.sha256)) {
|
|
21
|
+
throw new RuntimeConfigurationError('LLDB runtime requires an expected manifest SHA-256 receipt.');
|
|
22
|
+
}
|
|
23
|
+
if (expected.bytes !== undefined &&
|
|
24
|
+
(!Number.isSafeInteger(expected.bytes) || expected.bytes < 0)) {
|
|
25
|
+
throw new RuntimeConfigurationError('LLDB runtime manifest receipt has an invalid byte size.');
|
|
26
|
+
}
|
|
27
|
+
if (expected.bytes !== undefined && expected.bytes > MAX_DEBUG_MANIFEST_BYTES) {
|
|
28
|
+
throw new AssetTooLargeError(`LLDB runtime manifest receipt exceeds ${MAX_DEBUG_MANIFEST_BYTES} bytes.`, {
|
|
29
|
+
limit: MAX_DEBUG_MANIFEST_BYTES,
|
|
30
|
+
actual: expected.bytes,
|
|
31
|
+
runtimeId: 'wasm-debug',
|
|
32
|
+
profileId: 'lldb-v2'
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
const receipt = Object.freeze({
|
|
36
|
+
sha256: expected.sha256,
|
|
37
|
+
...(expected.bytes === undefined ? {} : { bytes: expected.bytes })
|
|
38
|
+
});
|
|
39
|
+
throwIfAborted(signal);
|
|
40
|
+
const response = await fetchImpl(url, { cache: 'no-store', signal });
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
const error = new Error(`Unable to load the LLDB runtime manifest (${response.status}).`);
|
|
43
|
+
await cancelResponseBody(response, error);
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
if (signal?.aborted) {
|
|
47
|
+
const error = abortReason(signal);
|
|
48
|
+
await cancelResponseBody(response, error);
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
const contentLengthHeader = response.headers.get('content-length');
|
|
52
|
+
if (contentLengthHeader !== null) {
|
|
53
|
+
if (!/^\d+$/u.test(contentLengthHeader)) {
|
|
54
|
+
const error = new AssetIntegrityError('LLDB runtime manifest returned an invalid Content-Length.', { runtimeId: 'wasm-debug', profileId: 'lldb-v2' });
|
|
55
|
+
await cancelResponseBody(response, error);
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
const declaredBytes = Number(contentLengthHeader);
|
|
59
|
+
if (!Number.isSafeInteger(declaredBytes)) {
|
|
60
|
+
const error = new AssetIntegrityError('LLDB runtime manifest returned an invalid Content-Length.', { runtimeId: 'wasm-debug', profileId: 'lldb-v2' });
|
|
61
|
+
await cancelResponseBody(response, error);
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
if (declaredBytes > MAX_DEBUG_MANIFEST_BYTES) {
|
|
65
|
+
const error = new AssetTooLargeError(`LLDB runtime manifest exceeds ${MAX_DEBUG_MANIFEST_BYTES} bytes.`, {
|
|
66
|
+
limit: MAX_DEBUG_MANIFEST_BYTES,
|
|
67
|
+
actual: declaredBytes,
|
|
68
|
+
runtimeId: 'wasm-debug',
|
|
69
|
+
profileId: 'lldb-v2'
|
|
70
|
+
});
|
|
71
|
+
await cancelResponseBody(response, error);
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (!response.body) {
|
|
76
|
+
throw new AssetIntegrityError('LLDB runtime manifest response body is unavailable.', {
|
|
77
|
+
runtimeId: 'wasm-debug',
|
|
78
|
+
profileId: 'lldb-v2'
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
const reader = response.body.getReader();
|
|
82
|
+
const chunks = [];
|
|
83
|
+
let receivedBytes = 0;
|
|
84
|
+
let readerFinished = false;
|
|
85
|
+
let readerCancelled = false;
|
|
86
|
+
const cancelOnAbort = () => {
|
|
87
|
+
readerCancelled = true;
|
|
88
|
+
void reader.cancel(abortReason(signal)).catch(() => undefined);
|
|
89
|
+
};
|
|
90
|
+
signal?.addEventListener('abort', cancelOnAbort, { once: true });
|
|
91
|
+
try {
|
|
92
|
+
while (true) {
|
|
93
|
+
throwIfAborted(signal);
|
|
94
|
+
const { done, value } = await reader.read();
|
|
95
|
+
throwIfAborted(signal);
|
|
96
|
+
if (done) {
|
|
97
|
+
readerFinished = true;
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
if (!ArrayBuffer.isView(value) ||
|
|
101
|
+
Object.prototype.toString.call(value) !== '[object Uint8Array]') {
|
|
102
|
+
throw new AssetIntegrityError('LLDB runtime manifest stream returned a non-byte chunk.', { runtimeId: 'wasm-debug', profileId: 'lldb-v2' });
|
|
103
|
+
}
|
|
104
|
+
const nextBytes = receivedBytes + value.byteLength;
|
|
105
|
+
if (nextBytes > MAX_DEBUG_MANIFEST_BYTES) {
|
|
106
|
+
const error = new AssetTooLargeError(`LLDB runtime manifest exceeds ${MAX_DEBUG_MANIFEST_BYTES} bytes.`, {
|
|
107
|
+
limit: MAX_DEBUG_MANIFEST_BYTES,
|
|
108
|
+
actual: nextBytes,
|
|
109
|
+
runtimeId: 'wasm-debug',
|
|
110
|
+
profileId: 'lldb-v2'
|
|
111
|
+
});
|
|
112
|
+
readerCancelled = true;
|
|
113
|
+
try {
|
|
114
|
+
await reader.cancel(error);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// Preserve the size-limit failure that initiated cancellation.
|
|
118
|
+
}
|
|
119
|
+
throw error;
|
|
120
|
+
}
|
|
121
|
+
chunks.push(Uint8Array.from(value));
|
|
122
|
+
receivedBytes = nextBytes;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
if (!readerFinished && !readerCancelled) {
|
|
127
|
+
try {
|
|
128
|
+
readerCancelled = true;
|
|
129
|
+
await reader.cancel(error);
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// Preserve the read or validation failure that initiated cancellation.
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
throw error;
|
|
136
|
+
}
|
|
137
|
+
finally {
|
|
138
|
+
signal?.removeEventListener('abort', cancelOnAbort);
|
|
139
|
+
reader.releaseLock();
|
|
140
|
+
}
|
|
141
|
+
const bytes = new Uint8Array(receivedBytes);
|
|
142
|
+
let offset = 0;
|
|
143
|
+
for (const chunk of chunks) {
|
|
144
|
+
bytes.set(chunk, offset);
|
|
145
|
+
offset += chunk.byteLength;
|
|
146
|
+
}
|
|
147
|
+
await verifyRuntimeAssetIntegrity({
|
|
148
|
+
asset: 'runtime-manifest.v2.json',
|
|
149
|
+
bytes,
|
|
150
|
+
expected: receipt,
|
|
151
|
+
runtimeId: 'wasm-debug',
|
|
152
|
+
profileId: 'lldb-v2'
|
|
153
|
+
});
|
|
154
|
+
return parseDebugRuntimeManifest(JSON.parse(new TextDecoder().decode(bytes)));
|
|
155
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import type { DebugCommand, DebugDataBreakpoint, DebugDataBreakpointInfo, DebugDataBreakpointInfoArguments, DebugMemory, DebugScope, DebugSessionEvent, DebugResolvedDataBreakpoint, DebugVariable } from './options';
|
|
2
|
+
import { type RuntimeAssetIntegrityEntry } from '@wasm-idle/core';
|
|
3
|
+
export interface LldbArtifactPayload {
|
|
4
|
+
bytes: Uint8Array | ArrayBuffer;
|
|
5
|
+
descriptor?: {
|
|
6
|
+
moduleSha256?: string;
|
|
7
|
+
compiler?: {
|
|
8
|
+
name?: string;
|
|
9
|
+
version?: string;
|
|
10
|
+
revision?: string;
|
|
11
|
+
llvmVersion?: string;
|
|
12
|
+
llvmRevision?: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
sources: Array<{
|
|
16
|
+
path: `/workspace/${string}`;
|
|
17
|
+
content: string;
|
|
18
|
+
contentSha256?: string;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
21
|
+
export interface LldbSandboxSessionOptions {
|
|
22
|
+
manifestUrl: string;
|
|
23
|
+
manifestReceipt?: Readonly<RuntimeAssetIntegrityEntry>;
|
|
24
|
+
runtimeBaseUrl: string;
|
|
25
|
+
artifact: LldbArtifactPayload;
|
|
26
|
+
sourcePath: `/workspace/${string}`;
|
|
27
|
+
breakpoints: number[];
|
|
28
|
+
sourceBreakpoints?: Array<{
|
|
29
|
+
sourcePath: `/workspace/${string}`;
|
|
30
|
+
lines: number[];
|
|
31
|
+
}>;
|
|
32
|
+
pauseOnEntry: boolean;
|
|
33
|
+
/** C/C++ source entry; the low-level runtime still stops safely before _start executes. */
|
|
34
|
+
pauseAtMain?: boolean;
|
|
35
|
+
programArgs?: string[];
|
|
36
|
+
stdin?: string;
|
|
37
|
+
onDebugEvent: (event: DebugSessionEvent) => void;
|
|
38
|
+
onOutput: (output: string) => void;
|
|
39
|
+
fetchImpl?: typeof fetch;
|
|
40
|
+
}
|
|
41
|
+
export declare class LldbSandboxSession {
|
|
42
|
+
private readonly options;
|
|
43
|
+
private session?;
|
|
44
|
+
private startupAbortController?;
|
|
45
|
+
private activeThreadId;
|
|
46
|
+
private activeFrameId?;
|
|
47
|
+
private stoppedFrames;
|
|
48
|
+
private supportsValueFormatting;
|
|
49
|
+
private command;
|
|
50
|
+
private pauseRequested;
|
|
51
|
+
private pauseRequestVersion;
|
|
52
|
+
private targetStopped;
|
|
53
|
+
private entryPhase;
|
|
54
|
+
private entrySetup?;
|
|
55
|
+
private stopped;
|
|
56
|
+
private stateVersion;
|
|
57
|
+
private completionResolve?;
|
|
58
|
+
private completionReject?;
|
|
59
|
+
private sessionDisposal?;
|
|
60
|
+
private readonly pendingInput;
|
|
61
|
+
private pendingEof;
|
|
62
|
+
private inputReady;
|
|
63
|
+
private lifecycleVersion;
|
|
64
|
+
private initialized;
|
|
65
|
+
private supportsEvaluateExpressions;
|
|
66
|
+
private supportsReadMemory;
|
|
67
|
+
private supportsWriteMemory;
|
|
68
|
+
private supportsDataBreakpoints;
|
|
69
|
+
private breakpointVersion;
|
|
70
|
+
private scopeRequestVersion;
|
|
71
|
+
private dapExitCode;
|
|
72
|
+
private readonly breakpointsBySource;
|
|
73
|
+
private readonly breakpointRequestVersions;
|
|
74
|
+
private readonly sourceContentSha256ByPath;
|
|
75
|
+
constructor(options: LldbSandboxSessionOptions);
|
|
76
|
+
start(): Promise<true>;
|
|
77
|
+
write(input: string): Promise<void>;
|
|
78
|
+
eof(): Promise<void>;
|
|
79
|
+
debugCommand(command: DebugCommand): Promise<void>;
|
|
80
|
+
pause(): Promise<void>;
|
|
81
|
+
setBreakpoints(lines: number[], sourcePath?: `/workspace/${string}`): Promise<void>;
|
|
82
|
+
evaluate(expression: string): Promise<string>;
|
|
83
|
+
variables(variablesReference: number, start?: number, count?: number): Promise<DebugVariable[]>;
|
|
84
|
+
/** Ask the adapter to format one stopped frame, without changing evaluation selection. */
|
|
85
|
+
formattedFrameName(frameId: number): Promise<string | null>;
|
|
86
|
+
/** Scope metadata lookup does not select a frame or retire other value requests. */
|
|
87
|
+
frameScopes(frameId: number): Promise<DebugScope[]>;
|
|
88
|
+
/** Select the evaluation frame, keeping the existing public debugScopes contract. */
|
|
89
|
+
scopes(frameId: number): Promise<DebugScope[]>;
|
|
90
|
+
readMemory(memoryReference: string, offset: number, count: number): Promise<DebugMemory | null>;
|
|
91
|
+
writeMemory(memoryReference: string, offset: number, data: Uint8Array, allowPartial?: boolean): Promise<{
|
|
92
|
+
offset?: number;
|
|
93
|
+
bytesWritten: number;
|
|
94
|
+
} | null>;
|
|
95
|
+
dataBreakpointInfo(arguments_: DebugDataBreakpointInfoArguments): Promise<DebugDataBreakpointInfo | null>;
|
|
96
|
+
setDataBreakpoints(breakpoints: DebugDataBreakpoint[]): Promise<DebugResolvedDataBreakpoint[]>;
|
|
97
|
+
disconnect(): Promise<void>;
|
|
98
|
+
private handleDapEvent;
|
|
99
|
+
private resolveStoppedState;
|
|
100
|
+
private setMainEntryBreakpoint;
|
|
101
|
+
private requestScopes;
|
|
102
|
+
private isCurrentValueRequest;
|
|
103
|
+
private rethrowProtocolError;
|
|
104
|
+
private asProtocolError;
|
|
105
|
+
private finish;
|
|
106
|
+
private fail;
|
|
107
|
+
private publishStop;
|
|
108
|
+
private publishActiveDebugEvent;
|
|
109
|
+
private trackSessionDisposal;
|
|
110
|
+
private requireSession;
|
|
111
|
+
private publishResolvedBreakpoints;
|
|
112
|
+
private observeInputFlush;
|
|
113
|
+
private retireInput;
|
|
114
|
+
private flushInput;
|
|
115
|
+
}
|