space-data-module-sdk 0.8.4 → 0.8.6
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 +117 -20
- package/bin/space-data-module.js +263 -0
- package/docs/.nojekyll +1 -0
- package/docs/AGENTS.md +34 -0
- package/docs/architecture.svg +141 -0
- package/docs/browser-wasmedge-isomorphic.md +179 -0
- package/docs/flatsql-streaming-standard.md +341 -0
- package/docs/gpu-module-abi.md +193 -0
- package/docs/index.html +125 -0
- package/docs/isomorphic-pthreads.md +188 -0
- package/docs/isomorphic-sdn-runtime-plan.md +167 -0
- package/docs/language-runtime-matrix.md +82 -0
- package/docs/manifest-structure.svg +114 -0
- package/docs/module-bundle-runtime-plan.md +19 -0
- package/docs/module-lifecycle.svg +70 -0
- package/docs/module-publication-standard.md +540 -0
- package/docs/node-red-default-node-parity.md +88 -0
- package/docs/protocol-installation.md +196 -0
- package/docs/secrets-capability.md +152 -0
- package/docs/styles.css +288 -0
- package/docs/testing-harness.md +408 -0
- package/docs/tri-runtime-parity.md +132 -0
- package/docs/wallet-callback.html +2 -0
- package/package.json +25 -6
- package/schemas/HttpRequestAbi.fbs +41 -0
- package/schemas/HttpResponseAbi.fbs +36 -0
- package/schemas/PluginManifest.fbs +2 -1
- package/src/AGENTS.md +1 -1
- package/src/app/codec.js +548 -0
- package/src/app/index.js +6 -0
- package/src/browser.js +5 -0
- package/src/bundle/constants.js +1 -0
- package/src/bundle/index.js +15 -0
- package/src/bundle/sigdomain.js +179 -0
- package/src/bundle/signing.js +767 -0
- package/src/bundle/wasm.js +3 -2
- package/src/capabilities.js +3 -0
- package/src/compat/index.js +7 -0
- package/src/compat/sdnLegacy.js +449 -0
- package/src/compiler/compileModule.js +556 -55
- package/src/compiler/flatcSupport.js +41 -27
- package/src/compiler/index.d.ts +2 -0
- package/src/compiler/index.js +18 -0
- package/src/compiler/invokeGlue.js +1212 -183
- package/src/compiler/pthreadArtifactGuard.js +910 -0
- package/src/compiler/sdnShimGenerator.js +323 -0
- package/src/compiler/wasiThreadsToolchain.js +150 -0
- package/src/compliance/index.js +11 -1
- package/src/compliance/legacyWildcardPorts.js +228 -0
- package/src/compliance/pluginCompliance.js +1000 -96
- package/src/field-stream/index.d.ts +31 -0
- package/src/field-stream/index.js +119 -0
- package/src/flow/dependencyStreamBridge.js +234 -0
- package/src/flow/flatsqlLinkShim.js +304 -0
- package/src/flow/flowCodec.js +107 -0
- package/src/flow/flowCompiler.js +2900 -0
- package/src/flow/flowRuntimeHost.js +877 -0
- package/src/flow/index.d.ts +117 -0
- package/src/flow/index.js +31 -0
- package/src/flow/isomorphicFlowHost.js +384 -0
- package/src/flow/jsFlowRuntime.js +275 -0
- package/src/flow/normalize.js +294 -0
- package/src/flow/runtime-src/flow_runtime.cpp +1699 -0
- package/src/flow/vendor/sdn-flow/MethodRegistry.js +400 -0
- package/src/flow/vendor/sdn-flow/constants.js +39 -0
- package/src/flow/vendor/sdn-flow/index.js +29 -0
- package/src/flow/vendor/sdn-flow/normalize.js +506 -0
- package/src/flow/vendor/sdn-flow/wasmCompatibility.js +189 -0
- package/src/generated/http/cpp/HttpRequestAbi_generated.h +285 -0
- package/src/generated/http/cpp/HttpResponseAbi_generated.h +192 -0
- package/src/generated/http/sdn/http/http-header.js +53 -0
- package/src/generated/http/sdn/http/http-header.ts +67 -0
- package/src/generated/http/sdn/http/http-request.js +132 -0
- package/src/generated/http/sdn/http/http-request.ts +179 -0
- package/src/generated/http/sdn/http/http-response.js +144 -0
- package/src/generated/http/sdn/http/http-response.ts +168 -0
- package/src/generated/http/sdn/http.js +11 -0
- package/src/generated/http/sdn/http.ts +4 -0
- package/src/generated/orbpro/flow/backpressure-policy.d.ts +12 -0
- package/src/generated/orbpro/flow/backpressure-policy.d.ts.map +1 -0
- package/src/generated/orbpro/flow/backpressure-policy.js +17 -0
- package/src/generated/orbpro/flow/backpressure-policy.js.map +1 -0
- package/src/generated/orbpro/flow/backpressure-policy.ts +15 -0
- package/src/generated/orbpro/flow/flow-bundle-manifest.d.ts +142 -0
- package/src/generated/orbpro/flow/flow-bundle-manifest.d.ts.map +1 -0
- package/src/generated/orbpro/flow/flow-bundle-manifest.js +304 -0
- package/src/generated/orbpro/flow/flow-bundle-manifest.js.map +1 -0
- package/src/generated/orbpro/flow/flow-bundle-manifest.ts +399 -0
- package/src/generated/orbpro/flow/flow-edge.d.ts +113 -0
- package/src/generated/orbpro/flow/flow-edge.d.ts.map +1 -0
- package/src/generated/orbpro/flow/flow-edge.js +221 -0
- package/src/generated/orbpro/flow/flow-edge.js.map +1 -0
- package/src/generated/orbpro/flow/flow-edge.ts +292 -0
- package/src/generated/orbpro/flow/flow-node.d.ts +80 -0
- package/src/generated/orbpro/flow/flow-node.d.ts.map +1 -0
- package/src/generated/orbpro/flow/flow-node.js +158 -0
- package/src/generated/orbpro/flow/flow-node.js.map +1 -0
- package/src/generated/orbpro/flow/flow-node.ts +202 -0
- package/src/generated/orbpro/flow/flow-program.d.ts +164 -0
- package/src/generated/orbpro/flow/flow-program.d.ts.map +1 -0
- package/src/generated/orbpro/flow/flow-program.js +350 -0
- package/src/generated/orbpro/flow/flow-program.js.map +1 -0
- package/src/generated/orbpro/flow/flow-program.ts +477 -0
- package/src/generated/orbpro/flow/flow-trigger.d.ts +108 -0
- package/src/generated/orbpro/flow/flow-trigger.d.ts.map +1 -0
- package/src/generated/orbpro/flow/flow-trigger.js +207 -0
- package/src/generated/orbpro/flow/flow-trigger.js.map +1 -0
- package/src/generated/orbpro/flow/flow-trigger.ts +276 -0
- package/src/generated/orbpro/flow/node-kind.d.ts +13 -0
- package/src/generated/orbpro/flow/node-kind.d.ts.map +1 -0
- package/src/generated/orbpro/flow/node-kind.js +16 -0
- package/src/generated/orbpro/flow/node-kind.js.map +1 -0
- package/src/generated/orbpro/{invoke.ts → flow/node-kind.ts} +12 -2
- package/src/generated/orbpro/flow/plugin-version-binding.d.ts +52 -0
- package/src/generated/orbpro/flow/plugin-version-binding.d.ts.map +1 -0
- package/src/generated/orbpro/flow/plugin-version-binding.js +85 -0
- package/src/generated/orbpro/flow/plugin-version-binding.js.map +1 -0
- package/src/generated/orbpro/flow/plugin-version-binding.ts +121 -0
- package/src/generated/orbpro/flow/schema-hash-binding.d.ts +70 -0
- package/src/generated/orbpro/flow/schema-hash-binding.d.ts.map +1 -0
- package/src/generated/orbpro/flow/schema-hash-binding.js +143 -0
- package/src/generated/orbpro/flow/schema-hash-binding.js.map +1 -0
- package/src/generated/orbpro/flow/schema-hash-binding.ts +189 -0
- package/src/generated/orbpro/flow/trigger-binding.d.ts +71 -0
- package/src/generated/orbpro/flow/trigger-binding.d.ts.map +1 -0
- package/src/generated/orbpro/flow/trigger-binding.js +142 -0
- package/src/generated/orbpro/flow/trigger-binding.js.map +1 -0
- package/src/generated/orbpro/flow/trigger-binding.ts +181 -0
- package/src/generated/orbpro/flow/trigger-kind.d.ts +14 -0
- package/src/generated/orbpro/flow/trigger-kind.d.ts.map +1 -0
- package/src/generated/orbpro/flow/trigger-kind.js +17 -0
- package/src/generated/orbpro/flow/trigger-kind.js.map +1 -0
- package/src/generated/orbpro/flow/trigger-kind.ts +17 -0
- package/src/generated/orbpro/flow.d.ts +21 -0
- package/src/generated/orbpro/flow.d.ts.map +1 -0
- package/src/generated/orbpro/flow.js +23 -0
- package/src/generated/orbpro/flow.js.map +1 -0
- package/src/generated/orbpro/flow.ts +24 -0
- package/src/generated/orbpro/manifest/capability-kind.d.ts +2 -1
- package/src/generated/orbpro/manifest/capability-kind.js +1 -0
- package/src/generated/orbpro/manifest/capability-kind.ts +1 -0
- package/src/generated/orbpro/plugin/stream-invoke-request.d.ts +93 -0
- package/src/generated/orbpro/plugin/stream-invoke-request.js +160 -0
- package/src/generated/orbpro/plugin/stream-invoke-request.ts +211 -0
- package/src/generated/orbpro/plugin/stream-invoke-response.d.ts +99 -0
- package/src/generated/orbpro/plugin/stream-invoke-response.js +175 -0
- package/src/generated/orbpro/plugin/stream-invoke-response.ts +226 -0
- package/src/generated/orbpro/plugin.js +8 -0
- package/src/generated/orbpro/stream.d.ts +12 -0
- package/src/generated/orbpro/stream.js +14 -0
- package/src/generated/orbpro/stream.ts +15 -0
- package/src/generated/spacedatastandards/plg/EntryFunction.d.ts +52 -0
- package/src/generated/spacedatastandards/plg/EntryFunction.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/EntryFunction.js +106 -0
- package/src/generated/spacedatastandards/plg/EntryFunction.ts +162 -0
- package/src/generated/spacedatastandards/plg/FlatBufferTypeRef.d.ts +90 -0
- package/src/generated/spacedatastandards/plg/FlatBufferTypeRef.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/FlatBufferTypeRef.js +189 -0
- package/src/generated/spacedatastandards/plg/FlatBufferTypeRef.ts +270 -0
- package/src/generated/spacedatastandards/plg/PLG.d.ts +492 -0
- package/src/generated/spacedatastandards/plg/PLG.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/PLG.js +1139 -0
- package/src/generated/spacedatastandards/plg/PLG.ts +1600 -0
- package/src/generated/spacedatastandards/plg/PLGAcceptedTypeSet.d.ts +63 -0
- package/src/generated/spacedatastandards/plg/PLGAcceptedTypeSet.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/PLGAcceptedTypeSet.js +138 -0
- package/src/generated/spacedatastandards/plg/PLGAcceptedTypeSet.ts +189 -0
- package/src/generated/spacedatastandards/plg/PLGBuildArtifact.d.ts +41 -0
- package/src/generated/spacedatastandards/plg/PLGBuildArtifact.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/PLGBuildArtifact.js +104 -0
- package/src/generated/spacedatastandards/plg/PLGBuildArtifact.ts +151 -0
- package/src/generated/spacedatastandards/plg/PLGFlowEdge.d.ts +68 -0
- package/src/generated/spacedatastandards/plg/PLGFlowEdge.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/PLGFlowEdge.js +124 -0
- package/src/generated/spacedatastandards/plg/PLGFlowEdge.ts +184 -0
- package/src/generated/spacedatastandards/plg/PLGFlowEdgeContract.d.ts +58 -0
- package/src/generated/spacedatastandards/plg/PLGFlowEdgeContract.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/PLGFlowEdgeContract.js +126 -0
- package/src/generated/spacedatastandards/plg/PLGFlowEdgeContract.ts +161 -0
- package/src/generated/spacedatastandards/plg/PLGFlowNode.d.ts +82 -0
- package/src/generated/spacedatastandards/plg/PLGFlowNode.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/PLGFlowNode.js +164 -0
- package/src/generated/spacedatastandards/plg/PLGFlowNode.ts +244 -0
- package/src/generated/spacedatastandards/plg/PLGFlowTrigger.d.ts +55 -0
- package/src/generated/spacedatastandards/plg/PLGFlowTrigger.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/PLGFlowTrigger.js +105 -0
- package/src/generated/spacedatastandards/plg/PLGFlowTrigger.ts +162 -0
- package/src/generated/spacedatastandards/plg/PLGFlowTriggerBinding.d.ts +42 -0
- package/src/generated/spacedatastandards/plg/PLGFlowTriggerBinding.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/PLGFlowTriggerBinding.js +83 -0
- package/src/generated/spacedatastandards/plg/PLGFlowTriggerBinding.ts +127 -0
- package/src/generated/spacedatastandards/plg/PLGHostCapability.d.ts +36 -0
- package/src/generated/spacedatastandards/plg/PLGHostCapability.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/PLGHostCapability.js +90 -0
- package/src/generated/spacedatastandards/plg/PLGHostCapability.ts +127 -0
- package/src/generated/spacedatastandards/plg/PLGMethodManifest.d.ts +53 -0
- package/src/generated/spacedatastandards/plg/PLGMethodManifest.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/PLGMethodManifest.js +153 -0
- package/src/generated/spacedatastandards/plg/PLGMethodManifest.ts +210 -0
- package/src/generated/spacedatastandards/plg/PLGPortManifest.d.ts +70 -0
- package/src/generated/spacedatastandards/plg/PLGPortManifest.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/PLGPortManifest.js +149 -0
- package/src/generated/spacedatastandards/plg/PLGPortManifest.ts +212 -0
- package/src/generated/spacedatastandards/plg/PLGProtocolSpec.d.ts +73 -0
- package/src/generated/spacedatastandards/plg/PLGProtocolSpec.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/PLGProtocolSpec.js +199 -0
- package/src/generated/spacedatastandards/plg/PLGProtocolSpec.ts +292 -0
- package/src/generated/spacedatastandards/plg/PLGTimerSpec.d.ts +40 -0
- package/src/generated/spacedatastandards/plg/PLGTimerSpec.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/PLGTimerSpec.js +103 -0
- package/src/generated/spacedatastandards/plg/PLGTimerSpec.ts +148 -0
- package/src/generated/spacedatastandards/plg/PluginCapability.d.ts +41 -0
- package/src/generated/spacedatastandards/plg/PluginCapability.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/PluginCapability.js +82 -0
- package/src/generated/spacedatastandards/plg/{plugin-capability.ts → PluginCapability.ts} +55 -18
- package/src/generated/spacedatastandards/plg/PluginDependency.d.ts +42 -0
- package/src/generated/spacedatastandards/plg/PluginDependency.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/PluginDependency.js +80 -0
- package/src/generated/spacedatastandards/plg/PluginDependency.ts +124 -0
- package/src/generated/spacedatastandards/plg/TAB.d.ts +85 -0
- package/src/generated/spacedatastandards/plg/TAB.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/TAB.js +173 -0
- package/src/generated/spacedatastandards/plg/TAB.ts +228 -0
- package/src/generated/spacedatastandards/plg/bufferMutability.d.ts +18 -0
- package/src/generated/spacedatastandards/plg/bufferMutability.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/bufferMutability.js +20 -0
- package/src/generated/spacedatastandards/plg/bufferMutability.ts +23 -0
- package/src/generated/spacedatastandards/plg/bufferOwnership.d.ts +18 -0
- package/src/generated/spacedatastandards/plg/bufferOwnership.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/bufferOwnership.js +20 -0
- package/src/generated/spacedatastandards/plg/bufferOwnership.ts +23 -0
- package/src/generated/spacedatastandards/plg/drainBehavior.d.ts +20 -0
- package/src/generated/spacedatastandards/plg/drainBehavior.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/drainBehavior.js +22 -0
- package/src/generated/spacedatastandards/plg/drainBehavior.ts +25 -0
- package/src/generated/spacedatastandards/plg/flowEdgeRoutePolicy.d.ts +10 -0
- package/src/generated/spacedatastandards/plg/flowEdgeRoutePolicy.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/flowEdgeRoutePolicy.js +12 -0
- package/src/generated/spacedatastandards/plg/flowEdgeRoutePolicy.ts +13 -0
- package/src/generated/spacedatastandards/plg/hostCapabilityKind.d.ts +51 -0
- package/src/generated/spacedatastandards/plg/hostCapabilityKind.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/hostCapabilityKind.js +53 -0
- package/src/generated/spacedatastandards/plg/hostCapabilityKind.ts +55 -0
- package/src/generated/spacedatastandards/plg/invokeSurfaceKind.d.ts +15 -0
- package/src/generated/spacedatastandards/plg/invokeSurfaceKind.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/invokeSurfaceKind.js +17 -0
- package/src/generated/spacedatastandards/plg/invokeSurfaceKind.ts +19 -0
- package/src/generated/spacedatastandards/plg/main.d.ts +29 -0
- package/src/generated/spacedatastandards/plg/main.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/main.js +30 -0
- package/src/generated/spacedatastandards/plg/main.ts +32 -0
- package/src/generated/spacedatastandards/plg/payloadWireFormat.d.ts +17 -0
- package/src/generated/spacedatastandards/plg/payloadWireFormat.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/payloadWireFormat.js +19 -0
- package/src/generated/spacedatastandards/plg/payloadWireFormat.ts +21 -0
- package/src/generated/spacedatastandards/plg/pluginCategory.d.ts +82 -0
- package/src/generated/spacedatastandards/plg/pluginCategory.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/pluginCategory.js +84 -0
- package/src/generated/spacedatastandards/plg/pluginCategory.ts +103 -0
- package/src/generated/spacedatastandards/plg/publicationState.d.ts +18 -0
- package/src/generated/spacedatastandards/plg/publicationState.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/publicationState.js +20 -0
- package/src/generated/spacedatastandards/plg/purchaseTier.d.ts +18 -0
- package/src/generated/spacedatastandards/plg/purchaseTier.d.ts.map +1 -0
- package/src/generated/spacedatastandards/plg/purchaseTier.js +20 -0
- package/src/host/AGENTS.md +2 -2
- package/src/host/abi.js +53 -66
- package/src/host/browserHost.js +355 -8
- package/src/host/cpp/keyslotClient.hpp +231 -0
- package/src/host/cpp/secretsClient.hpp +583 -0
- package/src/host/hostcallWire.js +183 -0
- package/src/host/index.js +2 -0
- package/src/host/isomorphicLoader.js +44 -7
- package/src/host/nodeHost.js +227 -8
- package/src/host/sabHostcallChannel.js +206 -0
- package/src/host/timerDriver.js +203 -0
- package/src/host/wasiShim.js +41 -1
- package/src/host/wasiThreadBrowserWorker.mjs +48 -0
- package/src/host/wasiThreadHost.js +393 -0
- package/src/host/wasiThreadWorker.mjs +32 -0
- package/src/host/wasiThreadWorkerRuntime.js +93 -0
- package/src/http/index.js +339 -0
- package/src/index.d.ts +725 -11
- package/src/index.js +4 -0
- package/src/invoke/codec.js +1202 -128
- package/src/invoke/index.js +5 -1
- package/src/licensing/index.d.ts +2 -0
- package/src/licensing/index.js +2 -0
- package/src/licensing/records.js +287 -8
- package/src/manifest/codec.js +62 -14
- package/src/manifest/index.js +2 -0
- package/src/manifest/legacyToPlg.js +164 -25
- package/src/manifest/normalize.js +1 -0
- package/src/manifest/plgCodec.js +1303 -62
- package/src/manifest/typeRefs.js +162 -24
- package/src/runtime/compiledRuntimeAbi.js +47 -0
- package/src/runtime/compiledRuntimeAbi.json +33 -0
- package/src/runtime/index.d.ts +32 -0
- package/src/runtime/index.js +1 -0
- package/src/runtime-host/index.js +3 -0
- package/src/runtime-host/methodRegistry.js +55 -0
- package/src/standards/index.js +200 -56
- package/src/standards/sharedCatalog.js +16 -0
- package/src/testing/browserModuleHarness.js +604 -31
- package/src/testing/docker/wasmedge-parity.Dockerfile +39 -0
- package/src/testing/index.d.ts +151 -0
- package/src/testing/index.js +21 -0
- package/src/testing/native/wasmedge_emscripten_pthread_runner.c +25 -1
- package/src/testing/parityBrowserRunner.js +138 -0
- package/src/testing/parityHarness.js +616 -0
- package/src/testing/parityLanes.js +537 -0
- package/src/testing/processInvoke.js +29 -21
- package/src/testing/streamInvokeCodec.js +10 -175
- package/src/testing/wasmedgePin.json +6 -0
- package/src/testing/workerModuleHarness.js +242 -0
- package/src/testing/workerModuleHarnessWorker.js +176 -0
- package/src/transport/index.js +3 -0
- package/src/transport/pki.js +352 -14
- package/src/transport/records.js +16 -7
- package/src/utils/ecdsaDer.js +106 -0
- package/src/utils/wasmCrypto.js +0 -43
- package/templates/gpu-module/README.md +48 -0
- package/templates/gpu-module/include/space_data_gpu_abi.h +122 -0
- package/templates/gpu-module/manifest.json +84 -0
- package/schemas/PluginInvokeRequest.fbs +0 -18
- package/schemas/PluginInvokeResponse.fbs +0 -30
- package/schemas/spacedatastandards/PLG.fbs +0 -191
- package/src/generated/orbpro/invoke/plugin-invoke-request.d.ts +0 -51
- package/src/generated/orbpro/invoke/plugin-invoke-request.d.ts.map +0 -1
- package/src/generated/orbpro/invoke/plugin-invoke-request.js +0 -131
- package/src/generated/orbpro/invoke/plugin-invoke-request.js.map +0 -1
- package/src/generated/orbpro/invoke/plugin-invoke-request.ts +0 -173
- package/src/generated/orbpro/invoke/plugin-invoke-response.d.ts +0 -76
- package/src/generated/orbpro/invoke/plugin-invoke-response.d.ts.map +0 -1
- package/src/generated/orbpro/invoke/plugin-invoke-response.js +0 -184
- package/src/generated/orbpro/invoke/plugin-invoke-response.js.map +0 -1
- package/src/generated/orbpro/invoke/plugin-invoke-response.ts +0 -243
- package/src/generated/orbpro/invoke.d.ts +0 -3
- package/src/generated/orbpro/invoke.js +0 -5
- package/src/generated/spacedatastandards/plg/entry-function.js +0 -86
- package/src/generated/spacedatastandards/plg/entry-function.ts +0 -119
- package/src/generated/spacedatastandards/plg/index.js +0 -16
- package/src/generated/spacedatastandards/plg/index.ts +0 -11
- package/src/generated/spacedatastandards/plg/plg.js +0 -657
- package/src/generated/spacedatastandards/plg/plg.ts +0 -924
- package/src/generated/spacedatastandards/plg/plugin-capability.js +0 -66
- package/src/generated/spacedatastandards/plg/plugin-category.js +0 -15
- package/src/generated/spacedatastandards/plg/plugin-category.ts +0 -53
- package/src/generated/spacedatastandards/plg/plugin-dependency.js +0 -63
- package/src/generated/spacedatastandards/plg/plugin-dependency.ts +0 -86
- package/src/generated/spacedatastandards/plg/publication-state.js +0 -9
- package/src/generated/spacedatastandards/plg/purchase-tier.js +0 -9
- /package/src/generated/spacedatastandards/plg/{publication-state.ts → publicationState.ts} +0 -0
- /package/src/generated/spacedatastandards/plg/{purchase-tier.ts → purchaseTier.ts} +0 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Tri-runtime parity harness: Docker WasmEdge lane image.
|
|
2
|
+
#
|
|
3
|
+
# The WasmEdge version is NOT pinned here — it is injected from
|
|
4
|
+
# src/testing/wasmedgePin.json (the single pin source) via --build-arg by
|
|
5
|
+
# the parity harness (`ensureDockerParityImage`). Building this file by hand
|
|
6
|
+
# with a different version produces an image the harness will reject at
|
|
7
|
+
# version-check time.
|
|
8
|
+
FROM ubuntu:24.04
|
|
9
|
+
|
|
10
|
+
ARG WASMEDGE_VERSION
|
|
11
|
+
RUN test -n "${WASMEDGE_VERSION}" || (echo "WASMEDGE_VERSION build-arg is required (injected from src/testing/wasmedgePin.json)" && exit 1)
|
|
12
|
+
|
|
13
|
+
RUN apt-get update \
|
|
14
|
+
&& apt-get install -y --no-install-recommends curl ca-certificates \
|
|
15
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
16
|
+
|
|
17
|
+
RUN set -eux; \
|
|
18
|
+
arch="$(uname -m)"; \
|
|
19
|
+
case "${arch}" in \
|
|
20
|
+
x86_64) triple="manylinux_2_28_x86_64" ;; \
|
|
21
|
+
aarch64) triple="manylinux_2_28_aarch64" ;; \
|
|
22
|
+
*) echo "unsupported architecture: ${arch}"; exit 1 ;; \
|
|
23
|
+
esac; \
|
|
24
|
+
curl -sSfL \
|
|
25
|
+
"https://github.com/WasmEdge/WasmEdge/releases/download/${WASMEDGE_VERSION}/WasmEdge-${WASMEDGE_VERSION}-${triple}.tar.gz" \
|
|
26
|
+
-o /tmp/wasmedge.tar.gz; \
|
|
27
|
+
mkdir -p /opt/wasmedge; \
|
|
28
|
+
# The manylinux release tarballs are rootless (bin/, lib64/, include/ at
|
|
29
|
+
# the archive top level) — extract as-is, no component stripping.
|
|
30
|
+
tar -xzf /tmp/wasmedge.tar.gz -C /opt/wasmedge; \
|
|
31
|
+
rm /tmp/wasmedge.tar.gz; \
|
|
32
|
+
LD_LIBRARY_PATH=/opt/wasmedge/lib64:/opt/wasmedge/lib /opt/wasmedge/bin/wasmedge --version
|
|
33
|
+
|
|
34
|
+
ENV PATH="/opt/wasmedge/bin:${PATH}" \
|
|
35
|
+
LD_LIBRARY_PATH="/opt/wasmedge/lib64:/opt/wasmedge/lib"
|
|
36
|
+
|
|
37
|
+
# The parity harness always runs this image with an explicit wasmedge argv
|
|
38
|
+
# (flags + guest module + guest args) so the container is a pure runtime shell.
|
|
39
|
+
ENTRYPOINT ["wasmedge"]
|
package/src/testing/index.d.ts
CHANGED
|
@@ -8,6 +8,9 @@ import type {
|
|
|
8
8
|
export interface HarnessInputFrame {
|
|
9
9
|
portId?: string | null;
|
|
10
10
|
typeRef?: PayloadTypeRef | null;
|
|
11
|
+
alignment?: number;
|
|
12
|
+
offset?: number;
|
|
13
|
+
size?: number;
|
|
11
14
|
payload?: Uint8Array | ArrayBuffer | ArrayBufferView | string | null;
|
|
12
15
|
}
|
|
13
16
|
|
|
@@ -187,6 +190,12 @@ export interface PluginInvokeProcessClient {
|
|
|
187
190
|
invokeRaw(requestBytes: Uint8Array | ArrayBuffer | ArrayBufferView): Promise<Uint8Array>;
|
|
188
191
|
invoke(request: {
|
|
189
192
|
methodId?: string | null;
|
|
193
|
+
/**
|
|
194
|
+
* Browser direct invoke requires this to be a full view of the active
|
|
195
|
+
* SharedArrayBuffer-backed module memory; foreign arenas and
|
|
196
|
+
* payload-bearing frames are rejected.
|
|
197
|
+
*/
|
|
198
|
+
externalArena?: Uint8Array | ArrayBuffer | ArrayBufferView;
|
|
190
199
|
inputs?: HarnessInputFrame[];
|
|
191
200
|
}): Promise<{
|
|
192
201
|
statusCode: number;
|
|
@@ -250,6 +259,7 @@ export interface ModuleHarness {
|
|
|
250
259
|
invokeRaw(requestBytes: Uint8Array | ArrayBuffer | ArrayBufferView): Promise<Uint8Array>;
|
|
251
260
|
invoke(request: {
|
|
252
261
|
methodId?: string | null;
|
|
262
|
+
externalArena?: Uint8Array | ArrayBuffer | ArrayBufferView;
|
|
253
263
|
inputs?: HarnessInputFrame[];
|
|
254
264
|
}): Promise<{
|
|
255
265
|
statusCode: number;
|
|
@@ -339,8 +349,24 @@ export interface BrowserModuleHarness {
|
|
|
339
349
|
invokeRaw(
|
|
340
350
|
requestBytes: Uint8Array | ArrayBuffer | ArrayBufferView,
|
|
341
351
|
): Promise<Uint8Array>;
|
|
352
|
+
invokeDirect(request: {
|
|
353
|
+
methodId?: string | null;
|
|
354
|
+
/**
|
|
355
|
+
* Browser direct invoke requires this to be a full view of the active
|
|
356
|
+
* SharedArrayBuffer-backed module memory; foreign arenas and
|
|
357
|
+
* payload-bearing frames are rejected.
|
|
358
|
+
*/
|
|
359
|
+
externalArena?: Uint8Array | ArrayBuffer | ArrayBufferView;
|
|
360
|
+
inputs?: HarnessInputFrame[];
|
|
361
|
+
}): Promise<{
|
|
362
|
+
statusCode: number;
|
|
363
|
+
errorCode?: string | null;
|
|
364
|
+
errorMessage?: string | null;
|
|
365
|
+
outputs: HarnessInputFrame[];
|
|
366
|
+
}>;
|
|
342
367
|
invoke(request: {
|
|
343
368
|
methodId?: string | null;
|
|
369
|
+
externalArena?: Uint8Array | ArrayBuffer | ArrayBufferView;
|
|
344
370
|
inputs?: HarnessInputFrame[];
|
|
345
371
|
}): Promise<{
|
|
346
372
|
statusCode: number;
|
|
@@ -418,11 +444,18 @@ export function createBrowserModuleHarness(options?: {
|
|
|
418
444
|
hostOptions?: unknown;
|
|
419
445
|
args?: string[];
|
|
420
446
|
env?: Record<string, string>;
|
|
447
|
+
manifest?: Record<string, unknown>;
|
|
421
448
|
surface?: "direct" | "command";
|
|
422
449
|
performance?: {
|
|
423
450
|
now(): number;
|
|
424
451
|
timeOrigin: number;
|
|
425
452
|
};
|
|
453
|
+
wasmMemory?: WebAssembly.Memory;
|
|
454
|
+
memory?: WebAssembly.Memory;
|
|
455
|
+
sharedMemory?: boolean;
|
|
456
|
+
allowRawInvoke?: boolean;
|
|
457
|
+
initialMemoryBytes?: number;
|
|
458
|
+
maximumMemoryBytes?: number;
|
|
426
459
|
logOutput?: boolean;
|
|
427
460
|
}): Promise<BrowserModuleHarness>;
|
|
428
461
|
|
|
@@ -446,3 +479,121 @@ export function buildWasmEdgeEmscriptenPthreadRunner(options: {
|
|
|
446
479
|
output?: string;
|
|
447
480
|
cwd?: string;
|
|
448
481
|
}): Promise<string>;
|
|
482
|
+
|
|
483
|
+
// --- Tri-runtime parity harness (browser / WasmEdge / Docker WasmEdge) -------
|
|
484
|
+
|
|
485
|
+
export declare const PARITY_LANES: readonly ["browser", "wasmedge", "docker-wasmedge"];
|
|
486
|
+
export type ParityLaneName = (typeof PARITY_LANES)[number];
|
|
487
|
+
|
|
488
|
+
export declare const ParityExitClass: Readonly<{
|
|
489
|
+
Ok: "ok";
|
|
490
|
+
GuestError: "guest-error";
|
|
491
|
+
Trap: "trap";
|
|
492
|
+
HarnessFailure: "harness-failure";
|
|
493
|
+
}>;
|
|
494
|
+
|
|
495
|
+
export interface WasmEdgePin {
|
|
496
|
+
wasmedgeVersion: string;
|
|
497
|
+
dockerImageRepository: string;
|
|
498
|
+
dockerImage: string;
|
|
499
|
+
dockerfilePath: string;
|
|
500
|
+
dockerfileContextDir: string;
|
|
501
|
+
pinPath: string;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
export interface ParityPlanCase {
|
|
505
|
+
id: string;
|
|
506
|
+
stdinBytes: Uint8Array;
|
|
507
|
+
env: Record<string, string>;
|
|
508
|
+
args: readonly string[];
|
|
509
|
+
expect: "ok" | "guest-error" | "trap" | null;
|
|
510
|
+
threadCounts: readonly number[];
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
export interface ParityPlan {
|
|
514
|
+
name: string;
|
|
515
|
+
threadEnvVar: string;
|
|
516
|
+
cases: readonly ParityPlanCase[];
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
export interface ParityRunResult {
|
|
520
|
+
lane?: ParityLaneName;
|
|
521
|
+
caseId: string;
|
|
522
|
+
threadCount: number;
|
|
523
|
+
exitClass: string;
|
|
524
|
+
exitDetail?: string | null;
|
|
525
|
+
stdout: Uint8Array;
|
|
526
|
+
stderr?: Uint8Array;
|
|
527
|
+
stateFiles?: Record<string, string> | null;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
export interface ParityFailure {
|
|
531
|
+
caseId?: string;
|
|
532
|
+
kind: string;
|
|
533
|
+
message: string;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
export interface ParityReport {
|
|
537
|
+
ok: boolean;
|
|
538
|
+
fixture: string;
|
|
539
|
+
wasmPath: string;
|
|
540
|
+
artifactSha256: string;
|
|
541
|
+
moduleSha256: string;
|
|
542
|
+
pin: string;
|
|
543
|
+
lanes: Array<{ lane: string; runs: number; durationMs: number }>;
|
|
544
|
+
cases: string[];
|
|
545
|
+
comparisons: number;
|
|
546
|
+
failures: ParityFailure[];
|
|
547
|
+
runs: Array<{
|
|
548
|
+
lane: string;
|
|
549
|
+
caseId: string;
|
|
550
|
+
threadCount: number;
|
|
551
|
+
exitClass: string;
|
|
552
|
+
exitDetail: string | null;
|
|
553
|
+
stdoutSha256: string;
|
|
554
|
+
stdoutLength: number;
|
|
555
|
+
}>;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
export declare function loadWasmEdgePin(): WasmEdgePin;
|
|
559
|
+
export declare function assertWasmEdgeVersionMatchesPin(
|
|
560
|
+
versionOutput: string,
|
|
561
|
+
pin: WasmEdgePin,
|
|
562
|
+
context: string,
|
|
563
|
+
): string;
|
|
564
|
+
export declare function normalizeParityFixture(
|
|
565
|
+
fixture: unknown,
|
|
566
|
+
options?: { fixtureDir?: string },
|
|
567
|
+
): Promise<ParityPlan>;
|
|
568
|
+
export declare function loadParityFixture(fixturePath: string): Promise<ParityPlan>;
|
|
569
|
+
export declare function diffParityRuns(
|
|
570
|
+
plan: ParityPlan,
|
|
571
|
+
runs: ParityRunResult[],
|
|
572
|
+
): { ok: boolean; failures: ParityFailure[]; comparisons: number };
|
|
573
|
+
export declare function formatParityReport(report: ParityReport): string;
|
|
574
|
+
export declare function runParityHarness(options: {
|
|
575
|
+
wasmPath: string;
|
|
576
|
+
plan?: ParityPlan;
|
|
577
|
+
fixturePath?: string;
|
|
578
|
+
lanes?: string[];
|
|
579
|
+
laneRunners?: Record<string, (context: unknown) => Promise<ParityRunResult[]>>;
|
|
580
|
+
injectDivergence?: string;
|
|
581
|
+
chromeBinary?: string;
|
|
582
|
+
wasmedgeBinary?: string;
|
|
583
|
+
dockerBinary?: string;
|
|
584
|
+
dockerPlatform?: string;
|
|
585
|
+
autoBuildDockerImage?: boolean;
|
|
586
|
+
allowSingleLane?: boolean;
|
|
587
|
+
timeoutMs?: number;
|
|
588
|
+
log?: (line: string) => void;
|
|
589
|
+
}): Promise<ParityReport>;
|
|
590
|
+
|
|
591
|
+
export declare const defaultParityLaneRunners: Readonly<
|
|
592
|
+
Record<ParityLaneName, (context: unknown) => Promise<ParityRunResult[]>>
|
|
593
|
+
>;
|
|
594
|
+
export declare function ensureDockerParityImage(context: unknown): Promise<string>;
|
|
595
|
+
export declare function resolveChromeBinary(context?: unknown): Promise<string>;
|
|
596
|
+
export declare function resolveWasmEdgeBinary(context?: unknown): Promise<string>;
|
|
597
|
+
export declare function runBrowserLane(context: unknown): Promise<ParityRunResult[]>;
|
|
598
|
+
export declare function runDockerWasmEdgeLane(context: unknown): Promise<ParityRunResult[]>;
|
|
599
|
+
export declare function runNativeWasmEdgeLane(context: unknown): Promise<ParityRunResult[]>;
|
package/src/testing/index.js
CHANGED
|
@@ -11,6 +11,7 @@ export {
|
|
|
11
11
|
createBrowserModuleHarness,
|
|
12
12
|
detectArtifactProfile,
|
|
13
13
|
} from "./browserModuleHarness.js";
|
|
14
|
+
export { createWorkerModuleHarness } from "./workerModuleHarness.js";
|
|
14
15
|
export {
|
|
15
16
|
buildWasmEdgeSpawnEnv,
|
|
16
17
|
createPluginInvokeProcessClient,
|
|
@@ -27,6 +28,26 @@ export {
|
|
|
27
28
|
resolveModuleHarnessLaunchPlan,
|
|
28
29
|
} from "./moduleHarness.js";
|
|
29
30
|
export { createModuleFlatBufferStreamPump } from "./moduleFlatbufferStreamPump.js";
|
|
31
|
+
export {
|
|
32
|
+
PARITY_LANES,
|
|
33
|
+
ExitClass as ParityExitClass,
|
|
34
|
+
assertWasmEdgeVersionMatchesPin,
|
|
35
|
+
diffParityRuns,
|
|
36
|
+
formatParityReport,
|
|
37
|
+
loadParityFixture,
|
|
38
|
+
loadWasmEdgePin,
|
|
39
|
+
normalizeParityFixture,
|
|
40
|
+
runParityHarness,
|
|
41
|
+
} from "./parityHarness.js";
|
|
42
|
+
export {
|
|
43
|
+
defaultParityLaneRunners,
|
|
44
|
+
ensureDockerParityImage,
|
|
45
|
+
resolveChromeBinary,
|
|
46
|
+
resolveWasmEdgeBinary,
|
|
47
|
+
runBrowserLane,
|
|
48
|
+
runDockerWasmEdgeLane,
|
|
49
|
+
runNativeWasmEdgeLane,
|
|
50
|
+
} from "./parityLanes.js";
|
|
30
51
|
|
|
31
52
|
const CapabilitySurfaceMatrix = Object.freeze({
|
|
32
53
|
logging: Object.freeze({
|
|
@@ -1493,6 +1493,31 @@ static bool invoke_optional_module_init(
|
|
|
1493
1493
|
WasmEdge_ExecutorContext *executor,
|
|
1494
1494
|
WasmEdge_ModuleInstanceContext *module,
|
|
1495
1495
|
bool service_mode) {
|
|
1496
|
+
// Reactor artifacts (the isomorphic-pthreads wasi-threads default, built with
|
|
1497
|
+
// -mexec-model=reactor) export `_initialize` and NO `_start`. `_initialize`
|
|
1498
|
+
// runs the global constructors AND the WASI reactor init; it is the canonical,
|
|
1499
|
+
// complete init entry. It MUST be invoked or global ctors never execute under
|
|
1500
|
+
// WasmEdge (static registration / std::once / SDS + FlatSQL statics silently
|
|
1501
|
+
// stay uninitialized). This applies in BOTH the service_mode (resident plugin)
|
|
1502
|
+
// and one-shot paths. Command modules (which export `_start`) keep their
|
|
1503
|
+
// EXISTING behavior exactly: the `_initialize` branch is only taken when there
|
|
1504
|
+
// is no `_start`.
|
|
1505
|
+
WasmEdge_FunctionInstanceContext *start = find_function(module, "_start");
|
|
1506
|
+
if (start == NULL) {
|
|
1507
|
+
WasmEdge_FunctionInstanceContext *initialize =
|
|
1508
|
+
find_function(module, "_initialize");
|
|
1509
|
+
if (initialize != NULL) {
|
|
1510
|
+
return invoke_function(
|
|
1511
|
+
executor,
|
|
1512
|
+
initialize,
|
|
1513
|
+
NULL,
|
|
1514
|
+
0,
|
|
1515
|
+
NULL,
|
|
1516
|
+
0,
|
|
1517
|
+
"_initialize");
|
|
1518
|
+
}
|
|
1519
|
+
}
|
|
1520
|
+
|
|
1496
1521
|
if (service_mode) {
|
|
1497
1522
|
WasmEdge_FunctionInstanceContext *ctors =
|
|
1498
1523
|
find_function(module, "__wasm_call_ctors");
|
|
@@ -1509,7 +1534,6 @@ static bool invoke_optional_module_init(
|
|
|
1509
1534
|
return true;
|
|
1510
1535
|
}
|
|
1511
1536
|
|
|
1512
|
-
WasmEdge_FunctionInstanceContext *start = find_function(module, "_start");
|
|
1513
1537
|
if (start != NULL) {
|
|
1514
1538
|
return invoke_function(executor, start, NULL, 0, NULL, 0, "_start");
|
|
1515
1539
|
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-side entry for the tri-runtime parity harness.
|
|
3
|
+
*
|
|
4
|
+
* esbuild-bundled by parityLanes.js and served to a REAL headless Chrome
|
|
5
|
+
* behind COOP/COEP headers (cross-origin isolated, SharedArrayBuffer-capable).
|
|
6
|
+
* Never executed under jsdom — jsdom masks Illegal-invocation and threading
|
|
7
|
+
* realities, which is exactly what this lane exists to catch.
|
|
8
|
+
*
|
|
9
|
+
* Protocol with the lane server (same origin):
|
|
10
|
+
* GET /plan -> {threadEnvVar, cases:[{id, stdinBase64, env, args, threadCounts}]}
|
|
11
|
+
* GET /module.wasm -> the ONE isomorphic artifact
|
|
12
|
+
* POST /done -> {runs:[...]} on completion or {fatal} on runner failure
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { createBrowserModuleHarness } from "./browserModuleHarness.js";
|
|
16
|
+
|
|
17
|
+
const OK = "ok";
|
|
18
|
+
const GUEST_ERROR = "guest-error";
|
|
19
|
+
const TRAP = "trap";
|
|
20
|
+
|
|
21
|
+
function base64ToBytes(value) {
|
|
22
|
+
const binary = atob(String(value ?? ""));
|
|
23
|
+
const bytes = new Uint8Array(binary.length);
|
|
24
|
+
for (let index = 0; index < binary.length; index += 1) {
|
|
25
|
+
bytes[index] = binary.charCodeAt(index);
|
|
26
|
+
}
|
|
27
|
+
return bytes;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function bytesToBase64(bytes) {
|
|
31
|
+
let binary = "";
|
|
32
|
+
const chunk = 0x8000;
|
|
33
|
+
for (let index = 0; index < bytes.length; index += chunk) {
|
|
34
|
+
binary += String.fromCharCode(...bytes.subarray(index, index + chunk));
|
|
35
|
+
}
|
|
36
|
+
return btoa(binary);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function classifyBrowserError(error) {
|
|
40
|
+
// WasiExitError with code 0 is swallowed inside the harness; reaching here
|
|
41
|
+
// with one means a real nonzero guest exit.
|
|
42
|
+
if (error?.name === "WasiExitError") {
|
|
43
|
+
return { exitClass: GUEST_ERROR, exitDetail: `exit=${error.code}` };
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
exitClass: TRAP,
|
|
47
|
+
exitDetail: `${error?.name ?? "Error"}: ${error?.message ?? String(error)}`,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export async function runParityPlanInBrowser({ baseUrl = "" } = {}) {
|
|
52
|
+
const status = globalThis.document?.getElementById?.("status") ?? null;
|
|
53
|
+
const setStatus = (text) => {
|
|
54
|
+
if (status) status.textContent = text;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const [planResponse, moduleResponse] = await Promise.all([
|
|
58
|
+
fetch(`${baseUrl}/plan`),
|
|
59
|
+
fetch(`${baseUrl}/module.wasm`),
|
|
60
|
+
]);
|
|
61
|
+
if (!planResponse.ok || !moduleResponse.ok) {
|
|
62
|
+
throw new Error("parity browser runner: failed to fetch plan or module.");
|
|
63
|
+
}
|
|
64
|
+
const plan = await planResponse.json();
|
|
65
|
+
const moduleBytes = new Uint8Array(await moduleResponse.arrayBuffer());
|
|
66
|
+
|
|
67
|
+
if (globalThis.crossOriginIsolated !== true) {
|
|
68
|
+
throw new Error(
|
|
69
|
+
"parity browser runner: page is not cross-origin isolated (COOP/COEP missing) — SAB-backed thread parity cannot be validated.",
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const runs = [];
|
|
74
|
+
for (const planCase of plan.cases) {
|
|
75
|
+
const stdinBytes = base64ToBytes(planCase.stdinBase64);
|
|
76
|
+
for (const threadCount of planCase.threadCounts) {
|
|
77
|
+
setStatus(`case ${planCase.id} @ ${threadCount} thread(s)`);
|
|
78
|
+
let exitClass = OK;
|
|
79
|
+
let exitDetail = null;
|
|
80
|
+
let stdout = new Uint8Array(0);
|
|
81
|
+
let stderr = new Uint8Array(0);
|
|
82
|
+
let harness = null;
|
|
83
|
+
try {
|
|
84
|
+
harness = await createBrowserModuleHarness({
|
|
85
|
+
wasmSource: moduleBytes.slice(),
|
|
86
|
+
surface: "command",
|
|
87
|
+
args: planCase.args,
|
|
88
|
+
env: {
|
|
89
|
+
...planCase.env,
|
|
90
|
+
[plan.threadEnvVar]: String(threadCount),
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
stdout = await harness.invokeRaw(stdinBytes);
|
|
94
|
+
stderr = harness.wasi?.stderr ?? new Uint8Array(0);
|
|
95
|
+
} catch (error) {
|
|
96
|
+
({ exitClass, exitDetail } = classifyBrowserError(error));
|
|
97
|
+
} finally {
|
|
98
|
+
try {
|
|
99
|
+
harness?.destroy?.();
|
|
100
|
+
} catch {
|
|
101
|
+
/* teardown must never mask the run result */
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
runs.push({
|
|
105
|
+
caseId: planCase.id,
|
|
106
|
+
threadCount,
|
|
107
|
+
exitClass,
|
|
108
|
+
exitDetail,
|
|
109
|
+
stdoutBase64: bytesToBase64(stdout),
|
|
110
|
+
stderrBase64: bytesToBase64(stderr),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
setStatus(`done: ${runs.length} run(s)`);
|
|
115
|
+
return runs;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
async function postDone(body) {
|
|
119
|
+
await fetch("/done", {
|
|
120
|
+
method: "POST",
|
|
121
|
+
headers: { "Content-Type": "application/json" },
|
|
122
|
+
body: JSON.stringify(body),
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Auto-run only inside a real browser page (the served runner). Node imports
|
|
127
|
+
// of this module (tests, bundlers) never auto-run.
|
|
128
|
+
if (
|
|
129
|
+
typeof globalThis.document !== "undefined" &&
|
|
130
|
+
typeof globalThis.window !== "undefined" &&
|
|
131
|
+
globalThis.__SDM_PARITY_AUTORUN__ !== false
|
|
132
|
+
) {
|
|
133
|
+
runParityPlanInBrowser({})
|
|
134
|
+
.then((runs) => postDone({ runs }))
|
|
135
|
+
.catch((error) =>
|
|
136
|
+
postDone({ fatal: `${error?.name ?? "Error"}: ${error?.message ?? error}` }),
|
|
137
|
+
);
|
|
138
|
+
}
|