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,339 @@
|
|
|
1
|
+
import { AssetIntegrityError, AssetNotFoundError, AssetTooLargeError, BusyError, CancelledError, CompileError, DiagnosticLimitError, OutputLimitError, ProtocolError, ResourceLimitError, RuntimeConfigurationError, RuntimeExecutionError, UnsupportedBrowserFeatureError, UnsupportedLanguageError, WasmIdleError, WorkerStartupError, TimeoutError } from '@wasm-idle/core';
|
|
2
|
+
export const STATIC_RUNTIME_PREFLIGHT_PROTOCOL_VERSION = 1;
|
|
3
|
+
function copyStringProperty(value, key) {
|
|
4
|
+
if ((typeof value !== 'object' && typeof value !== 'function') || value === null) {
|
|
5
|
+
return undefined;
|
|
6
|
+
}
|
|
7
|
+
try {
|
|
8
|
+
const property = value[key];
|
|
9
|
+
return typeof property === 'string' ? property : undefined;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function copyBooleanProperty(value, key) {
|
|
16
|
+
if ((typeof value !== 'object' && typeof value !== 'function') || value === null) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const property = value[key];
|
|
21
|
+
return typeof property === 'boolean' ? property : undefined;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function copySafeIntegerProperty(value, key) {
|
|
28
|
+
if ((typeof value !== 'object' && typeof value !== 'function') || value === null) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const property = value[key];
|
|
33
|
+
return Number.isSafeInteger(property) && property >= 0
|
|
34
|
+
? property
|
|
35
|
+
: undefined;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function safelyStringify(value) {
|
|
42
|
+
try {
|
|
43
|
+
return String(value);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return 'Unknown static runtime preflight error';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export function serializeStaticRuntimePreflightError(error) {
|
|
50
|
+
const name = copyStringProperty(error, 'name') || 'Error';
|
|
51
|
+
const message = copyStringProperty(error, 'message') ||
|
|
52
|
+
(typeof error === 'string' ? error : safelyStringify(error));
|
|
53
|
+
const stack = copyStringProperty(error, 'stack');
|
|
54
|
+
const code = copyStringProperty(error, 'code');
|
|
55
|
+
const phase = copyStringProperty(error, 'phase');
|
|
56
|
+
const runtimeId = copyStringProperty(error, 'runtimeId');
|
|
57
|
+
const profileId = copyStringProperty(error, 'profileId');
|
|
58
|
+
const recoverable = copyBooleanProperty(error, 'recoverable');
|
|
59
|
+
const actual = copySafeIntegerProperty(error, 'actual');
|
|
60
|
+
const limit = copySafeIntegerProperty(error, 'limit');
|
|
61
|
+
const timeoutMs = copySafeIntegerProperty(error, 'timeoutMs');
|
|
62
|
+
const resource = copyStringProperty(error, 'resource');
|
|
63
|
+
const feature = copyStringProperty(error, 'feature');
|
|
64
|
+
const languageId = copyStringProperty(error, 'languageId');
|
|
65
|
+
return {
|
|
66
|
+
name,
|
|
67
|
+
message,
|
|
68
|
+
...(stack ? { stack } : {}),
|
|
69
|
+
...(isRuntimeErrorCode(code) ? { code } : {}),
|
|
70
|
+
...(isRuntimePhase(phase) ? { phase } : {}),
|
|
71
|
+
...(runtimeId ? { runtimeId } : {}),
|
|
72
|
+
...(profileId ? { profileId } : {}),
|
|
73
|
+
...(recoverable === undefined ? {} : { recoverable }),
|
|
74
|
+
...(actual === undefined ? {} : { actual }),
|
|
75
|
+
...(limit === undefined ? {} : { limit }),
|
|
76
|
+
...(timeoutMs === undefined ? {} : { timeoutMs }),
|
|
77
|
+
...(isRuntimeResourceKind(resource) ? { resource } : {}),
|
|
78
|
+
...(feature ? { feature } : {}),
|
|
79
|
+
...(languageId ? { languageId } : {})
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const runtimeErrorCodes = new Set([
|
|
83
|
+
'unsupported-language',
|
|
84
|
+
'busy',
|
|
85
|
+
'runtime-configuration',
|
|
86
|
+
'asset-not-found',
|
|
87
|
+
'asset-integrity',
|
|
88
|
+
'asset-too-large',
|
|
89
|
+
'worker-startup',
|
|
90
|
+
'compile',
|
|
91
|
+
'runtime',
|
|
92
|
+
'timeout',
|
|
93
|
+
'cancelled',
|
|
94
|
+
'resource-limit',
|
|
95
|
+
'output-limit',
|
|
96
|
+
'diagnostic-limit',
|
|
97
|
+
'protocol',
|
|
98
|
+
'unsupported-browser-feature'
|
|
99
|
+
]);
|
|
100
|
+
const runtimePhases = new Set([
|
|
101
|
+
'configuration',
|
|
102
|
+
'asset',
|
|
103
|
+
'startup',
|
|
104
|
+
'compile',
|
|
105
|
+
'execute',
|
|
106
|
+
'protocol',
|
|
107
|
+
'dispose'
|
|
108
|
+
]);
|
|
109
|
+
const typedArrayPrototype = Object.getPrototypeOf(Uint8Array.prototype);
|
|
110
|
+
const typedArrayTagGetter = Object.getOwnPropertyDescriptor(typedArrayPrototype, Symbol.toStringTag)?.get;
|
|
111
|
+
const typedArrayBufferGetter = Object.getOwnPropertyDescriptor(typedArrayPrototype, 'buffer')?.get;
|
|
112
|
+
const typedArrayByteLengthGetter = Object.getOwnPropertyDescriptor(typedArrayPrototype, 'byteLength')?.get;
|
|
113
|
+
const typedArrayByteOffsetGetter = Object.getOwnPropertyDescriptor(typedArrayPrototype, 'byteOffset')?.get;
|
|
114
|
+
const arrayBufferByteLengthGetter = Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, 'byteLength')?.get;
|
|
115
|
+
function isRuntimeErrorCode(value) {
|
|
116
|
+
return typeof value === 'string' && runtimeErrorCodes.has(value);
|
|
117
|
+
}
|
|
118
|
+
function isRuntimePhase(value) {
|
|
119
|
+
return typeof value === 'string' && runtimePhases.has(value);
|
|
120
|
+
}
|
|
121
|
+
function isRuntimeResourceKind(value) {
|
|
122
|
+
return value === 'wasm-memory' || value === 'nested-workers' || value === 'threads';
|
|
123
|
+
}
|
|
124
|
+
export function inspectStaticRuntimePreflightBytes(value) {
|
|
125
|
+
if (!typedArrayTagGetter ||
|
|
126
|
+
!typedArrayBufferGetter ||
|
|
127
|
+
!typedArrayByteLengthGetter ||
|
|
128
|
+
!typedArrayByteOffsetGetter ||
|
|
129
|
+
!arrayBufferByteLengthGetter) {
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
if (Reflect.apply(typedArrayTagGetter, value, []) !== 'Uint8Array')
|
|
134
|
+
return undefined;
|
|
135
|
+
const buffer = Reflect.apply(typedArrayBufferGetter, value, []);
|
|
136
|
+
const byteLength = Reflect.apply(typedArrayByteLengthGetter, value, []);
|
|
137
|
+
const byteOffset = Reflect.apply(typedArrayByteOffsetGetter, value, []);
|
|
138
|
+
const bufferByteLength = Reflect.apply(arrayBufferByteLengthGetter, buffer, []);
|
|
139
|
+
return { buffer, bufferByteLength, byteLength, byteOffset };
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
export function isStaticRuntimePreflightSerializedError(value) {
|
|
146
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
147
|
+
return false;
|
|
148
|
+
const error = value;
|
|
149
|
+
return (typeof error.name === 'string' &&
|
|
150
|
+
typeof error.message === 'string' &&
|
|
151
|
+
(error.stack === undefined || typeof error.stack === 'string') &&
|
|
152
|
+
(error.code === undefined || isRuntimeErrorCode(error.code)) &&
|
|
153
|
+
(error.phase === undefined || isRuntimePhase(error.phase)) &&
|
|
154
|
+
(error.runtimeId === undefined || typeof error.runtimeId === 'string') &&
|
|
155
|
+
(error.profileId === undefined || typeof error.profileId === 'string') &&
|
|
156
|
+
(error.recoverable === undefined || typeof error.recoverable === 'boolean') &&
|
|
157
|
+
(error.actual === undefined ||
|
|
158
|
+
(Number.isSafeInteger(error.actual) && error.actual >= 0)) &&
|
|
159
|
+
(error.limit === undefined ||
|
|
160
|
+
(Number.isSafeInteger(error.limit) && error.limit >= 0)) &&
|
|
161
|
+
(error.timeoutMs === undefined ||
|
|
162
|
+
(Number.isSafeInteger(error.timeoutMs) && error.timeoutMs >= 0)) &&
|
|
163
|
+
(error.resource === undefined || isRuntimeResourceKind(error.resource)) &&
|
|
164
|
+
(error.feature === undefined || typeof error.feature === 'string') &&
|
|
165
|
+
(error.languageId === undefined || typeof error.languageId === 'string'));
|
|
166
|
+
}
|
|
167
|
+
export function deserializeStaticRuntimePreflightError(error, fallbackRuntimeId) {
|
|
168
|
+
const phase = error.phase ?? 'asset';
|
|
169
|
+
const context = {
|
|
170
|
+
cause: error,
|
|
171
|
+
phase,
|
|
172
|
+
runtimeId: error.runtimeId || fallbackRuntimeId,
|
|
173
|
+
...(error.profileId ? { profileId: error.profileId } : {}),
|
|
174
|
+
...(error.recoverable === undefined ? {} : { recoverable: error.recoverable })
|
|
175
|
+
};
|
|
176
|
+
let deserialized;
|
|
177
|
+
switch (error.code) {
|
|
178
|
+
case 'unsupported-language':
|
|
179
|
+
deserialized = error.languageId
|
|
180
|
+
? new UnsupportedLanguageError(error.languageId, context)
|
|
181
|
+
: new WasmIdleError(error.message, { ...context, code: error.code });
|
|
182
|
+
break;
|
|
183
|
+
case 'busy':
|
|
184
|
+
deserialized = new BusyError(error.message, context);
|
|
185
|
+
break;
|
|
186
|
+
case 'runtime-configuration':
|
|
187
|
+
deserialized = new RuntimeConfigurationError(error.message, context);
|
|
188
|
+
break;
|
|
189
|
+
case 'asset-not-found':
|
|
190
|
+
deserialized = new AssetNotFoundError(error.message, context);
|
|
191
|
+
break;
|
|
192
|
+
case 'asset-integrity':
|
|
193
|
+
deserialized = new AssetIntegrityError(error.message, context);
|
|
194
|
+
break;
|
|
195
|
+
case 'asset-too-large':
|
|
196
|
+
deserialized = new AssetTooLargeError(error.message, {
|
|
197
|
+
...context,
|
|
198
|
+
actual: error.actual,
|
|
199
|
+
limit: error.limit
|
|
200
|
+
});
|
|
201
|
+
break;
|
|
202
|
+
case 'worker-startup':
|
|
203
|
+
deserialized = new WorkerStartupError(error.message, context);
|
|
204
|
+
break;
|
|
205
|
+
case 'compile':
|
|
206
|
+
deserialized = new CompileError(error.message, context);
|
|
207
|
+
break;
|
|
208
|
+
case 'runtime':
|
|
209
|
+
deserialized = new RuntimeExecutionError(error.message, context);
|
|
210
|
+
break;
|
|
211
|
+
case 'timeout':
|
|
212
|
+
deserialized =
|
|
213
|
+
error.timeoutMs === undefined
|
|
214
|
+
? new WasmIdleError(error.message, { ...context, code: error.code })
|
|
215
|
+
: new TimeoutError(error.message, {
|
|
216
|
+
...context,
|
|
217
|
+
timeoutMs: error.timeoutMs
|
|
218
|
+
});
|
|
219
|
+
break;
|
|
220
|
+
case 'cancelled':
|
|
221
|
+
deserialized = new CancelledError(error.message, context);
|
|
222
|
+
break;
|
|
223
|
+
case 'resource-limit':
|
|
224
|
+
deserialized =
|
|
225
|
+
error.actual === undefined ||
|
|
226
|
+
error.limit === undefined ||
|
|
227
|
+
error.resource === undefined
|
|
228
|
+
? new WasmIdleError(error.message, { ...context, code: error.code })
|
|
229
|
+
: new ResourceLimitError(error.message, {
|
|
230
|
+
...context,
|
|
231
|
+
actual: error.actual,
|
|
232
|
+
limit: error.limit,
|
|
233
|
+
resource: error.resource
|
|
234
|
+
});
|
|
235
|
+
break;
|
|
236
|
+
case 'output-limit':
|
|
237
|
+
deserialized =
|
|
238
|
+
error.actual === undefined || error.limit === undefined
|
|
239
|
+
? new WasmIdleError(error.message, { ...context, code: error.code })
|
|
240
|
+
: new OutputLimitError(error.message, {
|
|
241
|
+
...context,
|
|
242
|
+
actual: error.actual,
|
|
243
|
+
limit: error.limit
|
|
244
|
+
});
|
|
245
|
+
break;
|
|
246
|
+
case 'diagnostic-limit':
|
|
247
|
+
deserialized =
|
|
248
|
+
error.actual === undefined || error.limit === undefined
|
|
249
|
+
? new WasmIdleError(error.message, { ...context, code: error.code })
|
|
250
|
+
: new DiagnosticLimitError(error.message, {
|
|
251
|
+
...context,
|
|
252
|
+
actual: error.actual,
|
|
253
|
+
limit: error.limit
|
|
254
|
+
});
|
|
255
|
+
break;
|
|
256
|
+
case 'protocol':
|
|
257
|
+
deserialized = new ProtocolError(error.message, context);
|
|
258
|
+
break;
|
|
259
|
+
case 'unsupported-browser-feature':
|
|
260
|
+
deserialized = error.feature
|
|
261
|
+
? new UnsupportedBrowserFeatureError(error.feature, context)
|
|
262
|
+
: new WasmIdleError(error.message, { ...context, code: error.code });
|
|
263
|
+
break;
|
|
264
|
+
default:
|
|
265
|
+
deserialized = new WorkerStartupError(error.message, context);
|
|
266
|
+
}
|
|
267
|
+
if (deserialized.name === 'WasmIdleError' && error.name)
|
|
268
|
+
deserialized.name = error.name;
|
|
269
|
+
if (error.stack)
|
|
270
|
+
deserialized.stack = error.stack;
|
|
271
|
+
return deserialized;
|
|
272
|
+
}
|
|
273
|
+
export function collectStaticRuntimePreflightTransferables(payload) {
|
|
274
|
+
if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {
|
|
275
|
+
throw new ProtocolError('Static runtime preflight payload must be a plain object', {
|
|
276
|
+
phase: 'protocol'
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
const prototype = Object.getPrototypeOf(payload);
|
|
280
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
281
|
+
throw new ProtocolError('Static runtime preflight payload must be a plain object', {
|
|
282
|
+
phase: 'protocol'
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
const transferables = [];
|
|
286
|
+
const seen = new Set();
|
|
287
|
+
for (const key of Reflect.ownKeys(payload)) {
|
|
288
|
+
if (typeof key !== 'string') {
|
|
289
|
+
throw new ProtocolError('Static runtime preflight payload has a symbol key');
|
|
290
|
+
}
|
|
291
|
+
const descriptor = Object.getOwnPropertyDescriptor(payload, key);
|
|
292
|
+
if (!descriptor || !descriptor.enumerable || !('value' in descriptor)) {
|
|
293
|
+
throw new ProtocolError('Static runtime preflight payload properties must be enumerable data properties');
|
|
294
|
+
}
|
|
295
|
+
const value = descriptor.value;
|
|
296
|
+
const bytes = inspectStaticRuntimePreflightBytes(value);
|
|
297
|
+
if (bytes) {
|
|
298
|
+
if (bytes.byteLength <= 0 ||
|
|
299
|
+
bytes.byteOffset !== 0 ||
|
|
300
|
+
bytes.byteLength !== bytes.bufferByteLength ||
|
|
301
|
+
seen.has(bytes.buffer)) {
|
|
302
|
+
throw new ProtocolError('Static runtime preflight bytes must own distinct non-empty whole ArrayBuffers');
|
|
303
|
+
}
|
|
304
|
+
seen.add(bytes.buffer);
|
|
305
|
+
transferables.push(bytes.buffer);
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
if (value !== null &&
|
|
309
|
+
(typeof value === 'object' || typeof value === 'function' || typeof value === 'symbol')) {
|
|
310
|
+
throw new ProtocolError('Static runtime preflight payload accepts only primitive scalars and Uint8Arrays');
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
if (transferables.length === 0) {
|
|
314
|
+
throw new ProtocolError('Static runtime preflight payload contains no transferable bytes');
|
|
315
|
+
}
|
|
316
|
+
return transferables;
|
|
317
|
+
}
|
|
318
|
+
export function isStaticRuntimePreflightProgress(value) {
|
|
319
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
320
|
+
return false;
|
|
321
|
+
const progress = value;
|
|
322
|
+
if (progress.kind === 'asset') {
|
|
323
|
+
if (!progress.progress || typeof progress.progress !== 'object')
|
|
324
|
+
return false;
|
|
325
|
+
const asset = progress.progress;
|
|
326
|
+
return (typeof asset.runtimeId === 'string' &&
|
|
327
|
+
typeof asset.assetKey === 'string' &&
|
|
328
|
+
Number.isSafeInteger(asset.loadedBytes) &&
|
|
329
|
+
asset.loadedBytes >= 0 &&
|
|
330
|
+
Number.isSafeInteger(asset.totalBytes) &&
|
|
331
|
+
asset.totalBytes >= 0);
|
|
332
|
+
}
|
|
333
|
+
return (progress.kind === 'decompression' &&
|
|
334
|
+
(progress.asset === undefined || progress.asset === 'wasm' || progress.asset === 'data') &&
|
|
335
|
+
Number.isSafeInteger(progress.loadedBytes) &&
|
|
336
|
+
progress.loadedBytes >= 0 &&
|
|
337
|
+
Number.isSafeInteger(progress.totalBytes) &&
|
|
338
|
+
progress.totalBytes > 0);
|
|
339
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export declare const STATIC_STDIN_RING_PROTOCOL: "wasm-idle-static-stdin-ring";
|
|
2
|
+
export declare const STATIC_STDIN_RING_PROTOCOL_VERSION: 1;
|
|
3
|
+
export declare const STATIC_STDIN_RING_CONTROL_SLOTS: 4;
|
|
4
|
+
export declare const STATIC_STDIN_RING_CONTROL_BYTES: number;
|
|
5
|
+
export declare const STATIC_STDIN_RING_WRITE_INDEX: 0;
|
|
6
|
+
export declare const STATIC_STDIN_RING_READ_INDEX: 1;
|
|
7
|
+
export declare const STATIC_STDIN_RING_CLOSED_INDEX: 2;
|
|
8
|
+
export declare const STATIC_STDIN_RING_CANCELLED_INDEX: 3;
|
|
9
|
+
export interface StaticStdinRingDescriptor {
|
|
10
|
+
readonly protocol: typeof STATIC_STDIN_RING_PROTOCOL;
|
|
11
|
+
readonly protocolVersion: typeof STATIC_STDIN_RING_PROTOCOL_VERSION;
|
|
12
|
+
readonly buffer: SharedArrayBuffer;
|
|
13
|
+
readonly capacity: number;
|
|
14
|
+
readonly controlBytes: typeof STATIC_STDIN_RING_CONTROL_BYTES;
|
|
15
|
+
}
|
|
16
|
+
export interface StaticStdinRingHostOptions {
|
|
17
|
+
readonly capacity?: number;
|
|
18
|
+
readonly maxBufferedBytes?: number;
|
|
19
|
+
}
|
|
20
|
+
export declare class StaticStdinRingOverflowError extends RangeError {
|
|
21
|
+
readonly actual: number;
|
|
22
|
+
readonly limit: number;
|
|
23
|
+
constructor(actual: number, limit: number);
|
|
24
|
+
}
|
|
25
|
+
export declare class StaticStdinRingHost {
|
|
26
|
+
readonly descriptor: StaticStdinRingDescriptor;
|
|
27
|
+
readonly maxBufferedBytes: number;
|
|
28
|
+
private readonly control;
|
|
29
|
+
private readonly data;
|
|
30
|
+
private readonly pending;
|
|
31
|
+
private pendingBytes;
|
|
32
|
+
private pendingOffset;
|
|
33
|
+
private closeRequested;
|
|
34
|
+
private cancelled;
|
|
35
|
+
constructor(options?: StaticStdinRingHostOptions);
|
|
36
|
+
get bufferedBytes(): number;
|
|
37
|
+
get isClosed(): boolean;
|
|
38
|
+
get isCancelled(): boolean;
|
|
39
|
+
enqueue(input: string): number;
|
|
40
|
+
close(): void;
|
|
41
|
+
cancel(): void;
|
|
42
|
+
consumerRequestedInput(): void;
|
|
43
|
+
private ringBytes;
|
|
44
|
+
private flush;
|
|
45
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
export const STATIC_STDIN_RING_PROTOCOL = 'wasm-idle-static-stdin-ring';
|
|
2
|
+
export const STATIC_STDIN_RING_PROTOCOL_VERSION = 1;
|
|
3
|
+
export const STATIC_STDIN_RING_CONTROL_SLOTS = 4;
|
|
4
|
+
export const STATIC_STDIN_RING_CONTROL_BYTES = STATIC_STDIN_RING_CONTROL_SLOTS * Int32Array.BYTES_PER_ELEMENT;
|
|
5
|
+
export const STATIC_STDIN_RING_WRITE_INDEX = 0;
|
|
6
|
+
export const STATIC_STDIN_RING_READ_INDEX = 1;
|
|
7
|
+
export const STATIC_STDIN_RING_CLOSED_INDEX = 2;
|
|
8
|
+
export const STATIC_STDIN_RING_CANCELLED_INDEX = 3;
|
|
9
|
+
export class StaticStdinRingOverflowError extends RangeError {
|
|
10
|
+
actual;
|
|
11
|
+
limit;
|
|
12
|
+
constructor(actual, limit) {
|
|
13
|
+
super(`Static stdin buffered bytes exceed ${limit}`);
|
|
14
|
+
this.name = 'StaticStdinRingOverflowError';
|
|
15
|
+
this.actual = actual;
|
|
16
|
+
this.limit = limit;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
const DEFAULT_CAPACITY = 64 * 1024;
|
|
20
|
+
const DEFAULT_MAX_BUFFERED_BYTES = 128 * 1024;
|
|
21
|
+
const inputEncoder = new TextEncoder();
|
|
22
|
+
export class StaticStdinRingHost {
|
|
23
|
+
descriptor;
|
|
24
|
+
maxBufferedBytes;
|
|
25
|
+
control;
|
|
26
|
+
data;
|
|
27
|
+
pending = [];
|
|
28
|
+
pendingBytes = 0;
|
|
29
|
+
pendingOffset = 0;
|
|
30
|
+
closeRequested = false;
|
|
31
|
+
cancelled = false;
|
|
32
|
+
constructor(options = {}) {
|
|
33
|
+
const capacity = options.capacity ?? DEFAULT_CAPACITY;
|
|
34
|
+
const maxBufferedBytes = options.maxBufferedBytes ?? DEFAULT_MAX_BUFFERED_BYTES;
|
|
35
|
+
for (const [value, name] of [
|
|
36
|
+
[capacity, 'Static stdin ring capacity'],
|
|
37
|
+
[maxBufferedBytes, 'Static stdin maximum buffered bytes']
|
|
38
|
+
]) {
|
|
39
|
+
if (!Number.isSafeInteger(value) || value <= 0) {
|
|
40
|
+
throw new TypeError(`${name} must be a positive safe integer`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (maxBufferedBytes < capacity) {
|
|
44
|
+
throw new TypeError('Static stdin maximum buffered bytes must cover the ring capacity');
|
|
45
|
+
}
|
|
46
|
+
if (typeof SharedArrayBuffer !== 'function') {
|
|
47
|
+
throw new TypeError('SharedArrayBuffer is required for streaming static stdin');
|
|
48
|
+
}
|
|
49
|
+
const buffer = new SharedArrayBuffer(STATIC_STDIN_RING_CONTROL_BYTES + capacity);
|
|
50
|
+
this.control = new Int32Array(buffer, 0, STATIC_STDIN_RING_CONTROL_SLOTS);
|
|
51
|
+
this.data = new Uint8Array(buffer, STATIC_STDIN_RING_CONTROL_BYTES, capacity);
|
|
52
|
+
this.maxBufferedBytes = maxBufferedBytes;
|
|
53
|
+
this.descriptor = Object.freeze({
|
|
54
|
+
protocol: STATIC_STDIN_RING_PROTOCOL,
|
|
55
|
+
protocolVersion: STATIC_STDIN_RING_PROTOCOL_VERSION,
|
|
56
|
+
buffer,
|
|
57
|
+
capacity,
|
|
58
|
+
controlBytes: STATIC_STDIN_RING_CONTROL_BYTES
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
get bufferedBytes() {
|
|
62
|
+
return this.ringBytes() + this.pendingBytes;
|
|
63
|
+
}
|
|
64
|
+
get isClosed() {
|
|
65
|
+
return Atomics.load(this.control, STATIC_STDIN_RING_CLOSED_INDEX) === 1;
|
|
66
|
+
}
|
|
67
|
+
get isCancelled() {
|
|
68
|
+
return this.cancelled;
|
|
69
|
+
}
|
|
70
|
+
enqueue(input) {
|
|
71
|
+
if (this.cancelled)
|
|
72
|
+
throw new Error('Static stdin ring is cancelled');
|
|
73
|
+
if (this.closeRequested)
|
|
74
|
+
throw new Error('Static stdin ring is closed');
|
|
75
|
+
const bytes = inputEncoder.encode(input);
|
|
76
|
+
if (bytes.byteLength === 0)
|
|
77
|
+
return 0;
|
|
78
|
+
this.flush();
|
|
79
|
+
const actual = this.bufferedBytes + bytes.byteLength;
|
|
80
|
+
if (actual > this.maxBufferedBytes) {
|
|
81
|
+
throw new StaticStdinRingOverflowError(actual, this.maxBufferedBytes);
|
|
82
|
+
}
|
|
83
|
+
this.pending.push(bytes);
|
|
84
|
+
this.pendingBytes += bytes.byteLength;
|
|
85
|
+
this.flush();
|
|
86
|
+
return bytes.byteLength;
|
|
87
|
+
}
|
|
88
|
+
close() {
|
|
89
|
+
if (this.cancelled || this.closeRequested)
|
|
90
|
+
return;
|
|
91
|
+
this.closeRequested = true;
|
|
92
|
+
this.flush();
|
|
93
|
+
}
|
|
94
|
+
cancel() {
|
|
95
|
+
if (this.cancelled)
|
|
96
|
+
return;
|
|
97
|
+
this.cancelled = true;
|
|
98
|
+
this.closeRequested = true;
|
|
99
|
+
this.pending.length = 0;
|
|
100
|
+
this.pendingBytes = 0;
|
|
101
|
+
this.pendingOffset = 0;
|
|
102
|
+
Atomics.store(this.control, STATIC_STDIN_RING_CANCELLED_INDEX, 1);
|
|
103
|
+
Atomics.store(this.control, STATIC_STDIN_RING_CLOSED_INDEX, 1);
|
|
104
|
+
Atomics.notify(this.control, STATIC_STDIN_RING_WRITE_INDEX);
|
|
105
|
+
}
|
|
106
|
+
consumerRequestedInput() {
|
|
107
|
+
this.flush();
|
|
108
|
+
}
|
|
109
|
+
ringBytes() {
|
|
110
|
+
const write = Atomics.load(this.control, STATIC_STDIN_RING_WRITE_INDEX);
|
|
111
|
+
const read = Atomics.load(this.control, STATIC_STDIN_RING_READ_INDEX);
|
|
112
|
+
const used = write - read;
|
|
113
|
+
if (used < 0 || used > this.data.byteLength) {
|
|
114
|
+
throw new Error('Static stdin ring counters are invalid');
|
|
115
|
+
}
|
|
116
|
+
return used;
|
|
117
|
+
}
|
|
118
|
+
flush() {
|
|
119
|
+
if (this.cancelled)
|
|
120
|
+
return;
|
|
121
|
+
let write = Atomics.load(this.control, STATIC_STDIN_RING_WRITE_INDEX);
|
|
122
|
+
const read = Atomics.load(this.control, STATIC_STDIN_RING_READ_INDEX);
|
|
123
|
+
const used = write - read;
|
|
124
|
+
if (used < 0 || used > this.data.byteLength) {
|
|
125
|
+
throw new Error('Static stdin ring counters are invalid');
|
|
126
|
+
}
|
|
127
|
+
let available = this.data.byteLength - used;
|
|
128
|
+
let published = false;
|
|
129
|
+
while (available > 0 && this.pending.length > 0) {
|
|
130
|
+
const chunk = this.pending[0];
|
|
131
|
+
const remaining = chunk.byteLength - this.pendingOffset;
|
|
132
|
+
const count = Math.min(available, remaining);
|
|
133
|
+
const start = write % this.data.byteLength;
|
|
134
|
+
const first = Math.min(count, this.data.byteLength - start);
|
|
135
|
+
this.data.set(chunk.subarray(this.pendingOffset, this.pendingOffset + first), start);
|
|
136
|
+
if (first < count) {
|
|
137
|
+
this.data.set(chunk.subarray(this.pendingOffset + first, this.pendingOffset + count), 0);
|
|
138
|
+
}
|
|
139
|
+
write += count;
|
|
140
|
+
available -= count;
|
|
141
|
+
this.pendingOffset += count;
|
|
142
|
+
this.pendingBytes -= count;
|
|
143
|
+
published = true;
|
|
144
|
+
if (this.pendingOffset === chunk.byteLength) {
|
|
145
|
+
this.pending.shift();
|
|
146
|
+
this.pendingOffset = 0;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (published)
|
|
150
|
+
Atomics.store(this.control, STATIC_STDIN_RING_WRITE_INDEX, write);
|
|
151
|
+
if (this.closeRequested && this.pendingBytes === 0) {
|
|
152
|
+
Atomics.store(this.control, STATIC_STDIN_RING_CLOSED_INDEX, 1);
|
|
153
|
+
}
|
|
154
|
+
if (published || this.closeRequested) {
|
|
155
|
+
Atomics.notify(this.control, STATIC_STDIN_RING_WRITE_INDEX);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|