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
|
@@ -1,10 +1,54 @@
|
|
|
1
1
|
const decoder = new TextDecoder();
|
|
2
|
+
const DEFAULT_MAX_ASSET_BYTES = 128 * 1024 * 1024;
|
|
3
|
+
const DEFAULT_STREAM_BUFFER_BYTES = 64 * 1024;
|
|
4
|
+
const MAX_DIRECT_ASSET_ALLOWLIST_ENTRIES = 4096;
|
|
5
|
+
const MAX_DIRECT_RUNTIME_ASSET_ALLOWLIST_ENTRIES = 64;
|
|
6
|
+
const MAX_DIRECT_ASSET_NAME_LENGTH = 1024;
|
|
7
|
+
const directAssetNamePattern = /^[A-Za-z0-9][A-Za-z0-9._+-]*$/u;
|
|
2
8
|
const originalFetch = globalThis.fetch.bind(globalThis);
|
|
3
9
|
const NativeXMLHttpRequest = globalThis.XMLHttpRequest;
|
|
4
10
|
let activeConfig = null;
|
|
11
|
+
let activeDirectAssetBaseUrl = null;
|
|
12
|
+
let activeDirectAssetUrls = new Map();
|
|
5
13
|
let interceptorsInstalled = false;
|
|
6
14
|
let nextAssetRequestId = 0;
|
|
7
15
|
const pendingAssetRequests = new Map();
|
|
16
|
+
const cancelResponseBody = (response, reason) => {
|
|
17
|
+
try {
|
|
18
|
+
void Promise.resolve(response.body?.cancel(reason)).catch(() => undefined);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// Preserve the validation or HTTP failure that caused cancellation.
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const configuredBaseUrl = () => {
|
|
25
|
+
if (!activeConfig)
|
|
26
|
+
return null;
|
|
27
|
+
const locationOrigin = globalThis.location?.origin;
|
|
28
|
+
const locationHref = globalThis.location?.href;
|
|
29
|
+
const fallbackBaseUrl = locationOrigin && locationOrigin !== 'null'
|
|
30
|
+
? `${locationOrigin}/`
|
|
31
|
+
: locationHref?.startsWith('blob:')
|
|
32
|
+
? locationHref.slice('blob:'.length)
|
|
33
|
+
: locationHref || 'http://localhost/';
|
|
34
|
+
let baseUrl;
|
|
35
|
+
try {
|
|
36
|
+
baseUrl = new URL(activeConfig.baseUrl, fallbackBaseUrl);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
throw new Error(`Runtime asset base URL is invalid: ${activeConfig.baseUrl}`);
|
|
40
|
+
}
|
|
41
|
+
if (baseUrl.protocol !== 'http:' && baseUrl.protocol !== 'https:') {
|
|
42
|
+
throw new Error(`Runtime asset base URL must use HTTP(S): ${activeConfig.baseUrl}`);
|
|
43
|
+
}
|
|
44
|
+
if (baseUrl.username || baseUrl.password || baseUrl.hash || baseUrl.search) {
|
|
45
|
+
throw new Error(`Runtime asset base URL must not include credentials, a query, or a fragment: ${activeConfig.baseUrl}`);
|
|
46
|
+
}
|
|
47
|
+
if (!baseUrl.pathname.endsWith('/')) {
|
|
48
|
+
baseUrl.pathname += '/';
|
|
49
|
+
}
|
|
50
|
+
return baseUrl;
|
|
51
|
+
};
|
|
8
52
|
const responseBuffer = (bytes) => {
|
|
9
53
|
const buffer = bytes.buffer;
|
|
10
54
|
return bytes.byteOffset === 0 && bytes.byteLength === buffer.byteLength
|
|
@@ -12,18 +56,60 @@ const responseBuffer = (bytes) => {
|
|
|
12
56
|
: buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
|
|
13
57
|
};
|
|
14
58
|
const trackedAssetUrl = (input) => {
|
|
15
|
-
|
|
59
|
+
const baseUrl = configuredBaseUrl();
|
|
60
|
+
if (!baseUrl)
|
|
16
61
|
return null;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
62
|
+
try {
|
|
63
|
+
if (typeof input === 'string')
|
|
64
|
+
return new URL(input, baseUrl).href;
|
|
65
|
+
if (input instanceof URL)
|
|
66
|
+
return input.href;
|
|
67
|
+
return input.url;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const isDirectAssetScopeUrl = (url) => {
|
|
74
|
+
if (!activeDirectAssetBaseUrl)
|
|
75
|
+
return false;
|
|
76
|
+
let assetUrl;
|
|
77
|
+
try {
|
|
78
|
+
assetUrl = new URL(url);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
return (assetUrl.protocol === activeDirectAssetBaseUrl.protocol &&
|
|
84
|
+
assetUrl.origin === activeDirectAssetBaseUrl.origin &&
|
|
85
|
+
assetUrl.pathname.startsWith(activeDirectAssetBaseUrl.pathname));
|
|
22
86
|
};
|
|
23
87
|
const trackedAssetName = (url) => {
|
|
24
|
-
|
|
88
|
+
const baseUrl = configuredBaseUrl();
|
|
89
|
+
if (!baseUrl)
|
|
25
90
|
return null;
|
|
26
|
-
|
|
91
|
+
let assetUrl;
|
|
92
|
+
try {
|
|
93
|
+
assetUrl = new URL(url, baseUrl);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
if (assetUrl.protocol !== 'http:' && assetUrl.protocol !== 'https:')
|
|
99
|
+
return null;
|
|
100
|
+
if (assetUrl.username || assetUrl.password || assetUrl.hash)
|
|
101
|
+
return null;
|
|
102
|
+
if (/%2f|%5c/iu.test(assetUrl.pathname))
|
|
103
|
+
return null;
|
|
104
|
+
const directAsset = activeDirectAssetUrls.get(assetUrl.href);
|
|
105
|
+
if (directAsset)
|
|
106
|
+
return directAsset;
|
|
107
|
+
if (isDirectAssetScopeUrl(assetUrl.href))
|
|
108
|
+
return null;
|
|
109
|
+
if (assetUrl.origin !== baseUrl.origin || !assetUrl.pathname.startsWith(baseUrl.pathname)) {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
return `${assetUrl.pathname.slice(baseUrl.pathname.length)}${assetUrl.search}`;
|
|
27
113
|
};
|
|
28
114
|
const isTrackedAssetUrl = (url) => trackedAssetName(url) !== null;
|
|
29
115
|
const loadAssetFromBridge = async (asset) => {
|
|
@@ -38,14 +124,61 @@ const loadAssetFromBridge = async (asset) => {
|
|
|
38
124
|
});
|
|
39
125
|
});
|
|
40
126
|
};
|
|
41
|
-
const loadAssetFromUrl = async (url, asset) => {
|
|
42
|
-
const
|
|
43
|
-
if (!
|
|
44
|
-
throw new Error(
|
|
45
|
-
|
|
127
|
+
const loadAssetFromUrl = async (url, asset, integrity) => {
|
|
128
|
+
const requestUrl = trackedAssetUrl(url);
|
|
129
|
+
if (!requestUrl || trackedAssetName(requestUrl) !== asset || !activeConfig) {
|
|
130
|
+
throw new Error('Untracked runtime asset request');
|
|
131
|
+
}
|
|
132
|
+
const maxAssetBytes = activeConfig.maxAssetBytes ?? DEFAULT_MAX_ASSET_BYTES;
|
|
133
|
+
const response = await originalFetch(requestUrl, {
|
|
134
|
+
credentials: 'omit',
|
|
135
|
+
redirect: 'error',
|
|
136
|
+
referrerPolicy: 'no-referrer',
|
|
137
|
+
...(integrity ? { integrity } : {})
|
|
138
|
+
});
|
|
139
|
+
if (response.url) {
|
|
140
|
+
let responseUrl;
|
|
141
|
+
try {
|
|
142
|
+
responseUrl = new URL(response.url);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
const error = new Error(`Runtime asset response URL is invalid: ${response.url}`);
|
|
146
|
+
cancelResponseBody(response, error);
|
|
147
|
+
throw error;
|
|
148
|
+
}
|
|
149
|
+
if (responseUrl.href !== requestUrl) {
|
|
150
|
+
const error = new Error(`Runtime asset response URL mismatch: expected ${requestUrl}, received ${responseUrl.href}`);
|
|
151
|
+
cancelResponseBody(response, error);
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (!response.ok) {
|
|
156
|
+
const error = new Error(`Failed to load ${asset}: ${response.status}`);
|
|
157
|
+
cancelResponseBody(response, error);
|
|
158
|
+
throw error;
|
|
159
|
+
}
|
|
160
|
+
const rawContentLength = response.headers.get('content-length');
|
|
161
|
+
let total;
|
|
162
|
+
if (rawContentLength !== null) {
|
|
163
|
+
const parsedContentLength = Number(rawContentLength);
|
|
164
|
+
if (!/^\d+$/u.test(rawContentLength.trim()) || !Number.isSafeInteger(parsedContentLength)) {
|
|
165
|
+
const error = new Error(`Runtime asset ${asset} has an invalid Content-Length`);
|
|
166
|
+
cancelResponseBody(response, error);
|
|
167
|
+
throw error;
|
|
168
|
+
}
|
|
169
|
+
total = parsedContentLength || undefined;
|
|
170
|
+
}
|
|
171
|
+
if (total !== undefined && total > maxAssetBytes) {
|
|
172
|
+
const error = new Error(`Runtime asset ${asset} exceeds the ${maxAssetBytes} byte limit`);
|
|
173
|
+
cancelResponseBody(response, error);
|
|
174
|
+
throw error;
|
|
175
|
+
}
|
|
46
176
|
const mimeType = response.headers.get('content-type') || undefined;
|
|
47
177
|
if (!response.body) {
|
|
48
178
|
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
179
|
+
if (bytes.byteLength > maxAssetBytes) {
|
|
180
|
+
throw new Error(`Runtime asset ${asset} exceeds the ${maxAssetBytes} byte limit`);
|
|
181
|
+
}
|
|
49
182
|
self.postMessage({
|
|
50
183
|
assetProgress: {
|
|
51
184
|
asset,
|
|
@@ -56,31 +189,68 @@ const loadAssetFromUrl = async (url, asset) => {
|
|
|
56
189
|
return { bytes, mimeType };
|
|
57
190
|
}
|
|
58
191
|
const reader = response.body.getReader();
|
|
192
|
+
let readerCancelled = false;
|
|
193
|
+
const cancelReader = (reason) => {
|
|
194
|
+
if (readerCancelled)
|
|
195
|
+
return;
|
|
196
|
+
readerCancelled = true;
|
|
197
|
+
try {
|
|
198
|
+
void Promise.resolve(reader.cancel(reason)).catch(() => undefined);
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
// Preserve the stream or size-limit failure that caused cancellation.
|
|
202
|
+
}
|
|
203
|
+
};
|
|
59
204
|
let receivedLength = 0;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
asset
|
|
73
|
-
|
|
74
|
-
|
|
205
|
+
let bytes;
|
|
206
|
+
let releaseFailure;
|
|
207
|
+
try {
|
|
208
|
+
bytes = new Uint8Array(total || Math.min(DEFAULT_STREAM_BUFFER_BYTES, maxAssetBytes));
|
|
209
|
+
while (true) {
|
|
210
|
+
const { done, value } = await reader.read();
|
|
211
|
+
if (done)
|
|
212
|
+
break;
|
|
213
|
+
if (!value)
|
|
214
|
+
continue;
|
|
215
|
+
const nextLength = receivedLength + value.byteLength;
|
|
216
|
+
if (nextLength > maxAssetBytes) {
|
|
217
|
+
const error = new Error(`Runtime asset ${asset} exceeds the ${maxAssetBytes} byte limit`);
|
|
218
|
+
cancelReader(error);
|
|
219
|
+
throw error;
|
|
75
220
|
}
|
|
76
|
-
|
|
221
|
+
if (nextLength > bytes.byteLength) {
|
|
222
|
+
const nextCapacity = Math.min(maxAssetBytes, Math.max(nextLength, bytes.byteLength * 2));
|
|
223
|
+
const grown = new Uint8Array(nextCapacity);
|
|
224
|
+
grown.set(bytes.subarray(0, receivedLength));
|
|
225
|
+
bytes = grown;
|
|
226
|
+
}
|
|
227
|
+
bytes.set(value, receivedLength);
|
|
228
|
+
receivedLength = nextLength;
|
|
229
|
+
self.postMessage({
|
|
230
|
+
assetProgress: {
|
|
231
|
+
asset,
|
|
232
|
+
loaded: receivedLength,
|
|
233
|
+
total
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
cancelReader(error);
|
|
240
|
+
throw error;
|
|
77
241
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
242
|
+
finally {
|
|
243
|
+
try {
|
|
244
|
+
reader.releaseLock();
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
releaseFailure = { error };
|
|
248
|
+
}
|
|
83
249
|
}
|
|
250
|
+
if (releaseFailure)
|
|
251
|
+
throw releaseFailure.error;
|
|
252
|
+
if (receivedLength !== bytes.byteLength)
|
|
253
|
+
bytes = bytes.slice(0, receivedLength);
|
|
84
254
|
self.postMessage({
|
|
85
255
|
assetProgress: {
|
|
86
256
|
asset,
|
|
@@ -90,13 +260,13 @@ const loadAssetFromUrl = async (url, asset) => {
|
|
|
90
260
|
});
|
|
91
261
|
return { bytes, mimeType };
|
|
92
262
|
};
|
|
93
|
-
async function loadTrackedAsset(url) {
|
|
263
|
+
async function loadTrackedAsset(url, integrity) {
|
|
94
264
|
const asset = trackedAssetName(url);
|
|
95
265
|
if (!asset || !activeConfig)
|
|
96
266
|
throw new Error('Untracked runtime asset request');
|
|
97
267
|
return activeConfig.useAssetBridge
|
|
98
268
|
? await loadAssetFromBridge(asset)
|
|
99
|
-
: await loadAssetFromUrl(url, asset);
|
|
269
|
+
: await loadAssetFromUrl(url, asset, integrity);
|
|
100
270
|
}
|
|
101
271
|
function createTrackedResponse(asset) {
|
|
102
272
|
return new Response(responseBuffer(asset.bytes), {
|
|
@@ -125,6 +295,9 @@ function installTrackedFetch() {
|
|
|
125
295
|
open(method, url) {
|
|
126
296
|
const resolvedUrl = trackedAssetUrl(url);
|
|
127
297
|
if (!resolvedUrl || !isTrackedAssetUrl(resolvedUrl)) {
|
|
298
|
+
if (resolvedUrl && isDirectAssetScopeUrl(resolvedUrl)) {
|
|
299
|
+
throw new Error('Untracked runtime asset request');
|
|
300
|
+
}
|
|
128
301
|
const nativeUrl = resolvedUrl || (url instanceof URL ? url.href : String(url));
|
|
129
302
|
this.native = new NativeXMLHttpRequest();
|
|
130
303
|
this.native.responseType = this.responseType;
|
|
@@ -222,16 +395,88 @@ function installRuntimeAssetInterceptors() {
|
|
|
222
395
|
interceptorsInstalled = true;
|
|
223
396
|
globalThis.fetch = (async (input, init) => {
|
|
224
397
|
const resolvedUrl = trackedAssetUrl(input);
|
|
225
|
-
if (!resolvedUrl || !isTrackedAssetUrl(resolvedUrl))
|
|
398
|
+
if (!resolvedUrl || !isTrackedAssetUrl(resolvedUrl)) {
|
|
399
|
+
if (resolvedUrl && isDirectAssetScopeUrl(resolvedUrl)) {
|
|
400
|
+
throw new Error('Untracked runtime asset request');
|
|
401
|
+
}
|
|
226
402
|
return originalFetch(input, init);
|
|
227
|
-
|
|
403
|
+
}
|
|
404
|
+
const requestIntegrity = init?.integrity ??
|
|
405
|
+
(typeof Request !== 'undefined' && input instanceof Request
|
|
406
|
+
? input.integrity
|
|
407
|
+
: undefined);
|
|
408
|
+
return createTrackedResponse(await loadTrackedAsset(resolvedUrl, typeof requestIntegrity === 'string' ? requestIntegrity : undefined));
|
|
228
409
|
});
|
|
229
410
|
installTrackedFetch();
|
|
230
411
|
}
|
|
231
412
|
export function configureWorkerRuntimeAssets(config) {
|
|
413
|
+
if (config?.maxAssetBytes !== undefined &&
|
|
414
|
+
(!Number.isSafeInteger(config.maxAssetBytes) || config.maxAssetBytes <= 0)) {
|
|
415
|
+
throw new TypeError('Runtime asset maxAssetBytes must be a positive safe integer');
|
|
416
|
+
}
|
|
417
|
+
activeDirectAssetBaseUrl = null;
|
|
418
|
+
activeDirectAssetUrls = new Map();
|
|
232
419
|
activeConfig = config;
|
|
233
420
|
installRuntimeAssetInterceptors();
|
|
234
421
|
}
|
|
422
|
+
export function configureWorkerRuntimeAssetAllowlist(allowlist) {
|
|
423
|
+
if (!activeConfig)
|
|
424
|
+
throw new Error('Runtime asset config unavailable');
|
|
425
|
+
if (activeConfig.useAssetBridge) {
|
|
426
|
+
throw new Error('Direct runtime asset allowlists require direct asset loading');
|
|
427
|
+
}
|
|
428
|
+
if (allowlist === null) {
|
|
429
|
+
activeDirectAssetBaseUrl = null;
|
|
430
|
+
activeDirectAssetUrls = new Map();
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
if (!Array.isArray(allowlist.assets)) {
|
|
434
|
+
throw new TypeError('Direct runtime asset allowlist must be an array');
|
|
435
|
+
}
|
|
436
|
+
if (allowlist.assets.length > MAX_DIRECT_ASSET_ALLOWLIST_ENTRIES) {
|
|
437
|
+
throw new Error('Direct runtime asset allowlist has too many entries');
|
|
438
|
+
}
|
|
439
|
+
const runtimeAssets = allowlist.runtimeAssets ?? [];
|
|
440
|
+
if (!Array.isArray(runtimeAssets)) {
|
|
441
|
+
throw new TypeError('Direct core runtime asset allowlist must be an array');
|
|
442
|
+
}
|
|
443
|
+
if (runtimeAssets.length > MAX_DIRECT_RUNTIME_ASSET_ALLOWLIST_ENTRIES) {
|
|
444
|
+
throw new Error('Direct core runtime asset allowlist has too many entries');
|
|
445
|
+
}
|
|
446
|
+
let baseUrl;
|
|
447
|
+
try {
|
|
448
|
+
baseUrl = new URL(allowlist.baseUrl);
|
|
449
|
+
}
|
|
450
|
+
catch {
|
|
451
|
+
throw new Error(`Direct runtime asset base URL is invalid: ${allowlist.baseUrl}`);
|
|
452
|
+
}
|
|
453
|
+
if (baseUrl.protocol !== 'http:' && baseUrl.protocol !== 'https:') {
|
|
454
|
+
throw new Error(`Direct runtime asset base URL must use HTTP(S): ${allowlist.baseUrl}`);
|
|
455
|
+
}
|
|
456
|
+
if (baseUrl.username || baseUrl.password || baseUrl.hash || baseUrl.search) {
|
|
457
|
+
throw new Error(`Direct runtime asset base URL must not include credentials, a query, or a fragment: ${allowlist.baseUrl}`);
|
|
458
|
+
}
|
|
459
|
+
if (!baseUrl.pathname.endsWith('/'))
|
|
460
|
+
baseUrl.pathname += '/';
|
|
461
|
+
const addAssets = (urls, assets, rootUrl) => {
|
|
462
|
+
for (const asset of assets) {
|
|
463
|
+
if (typeof asset !== 'string' ||
|
|
464
|
+
asset.length > MAX_DIRECT_ASSET_NAME_LENGTH ||
|
|
465
|
+
!directAssetNamePattern.test(asset)) {
|
|
466
|
+
throw new Error(`Direct runtime asset name is unsafe: ${String(asset)}`);
|
|
467
|
+
}
|
|
468
|
+
urls.set(new URL(asset, rootUrl).href, asset);
|
|
469
|
+
}
|
|
470
|
+
};
|
|
471
|
+
const urls = new Map();
|
|
472
|
+
addAssets(urls, allowlist.assets, baseUrl);
|
|
473
|
+
const runtimeBaseUrl = configuredBaseUrl();
|
|
474
|
+
if (!runtimeBaseUrl)
|
|
475
|
+
throw new Error('Runtime asset config unavailable');
|
|
476
|
+
addAssets(urls, runtimeAssets, runtimeBaseUrl);
|
|
477
|
+
activeDirectAssetBaseUrl = baseUrl;
|
|
478
|
+
activeDirectAssetUrls = urls;
|
|
479
|
+
}
|
|
235
480
|
export function handleWorkerAssetMessage(data) {
|
|
236
481
|
const response = data?.assetResponse;
|
|
237
482
|
if (!response)
|
|
@@ -253,5 +498,9 @@ export function handleWorkerAssetMessage(data) {
|
|
|
253
498
|
export async function loadWorkerRuntimeAsset(asset) {
|
|
254
499
|
if (!activeConfig)
|
|
255
500
|
throw new Error('Runtime asset config unavailable');
|
|
256
|
-
|
|
501
|
+
const assetUrl = trackedAssetUrl(asset);
|
|
502
|
+
if (!assetUrl || !isTrackedAssetUrl(assetUrl)) {
|
|
503
|
+
throw new Error('Untracked runtime asset request');
|
|
504
|
+
}
|
|
505
|
+
return await loadTrackedAsset(assetUrl);
|
|
257
506
|
}
|