@rybosome/tspice 0.0.3 → 0.0.8
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 +145 -84
- package/backend-contract/dist/.tsbuildinfo +1 -1
- package/backend-contract/dist/domains/cells-windows.d.ts +94 -0
- package/backend-contract/dist/domains/cells-windows.js +10 -0
- package/backend-contract/dist/domains/coords-vectors.d.ts +53 -3
- package/backend-contract/dist/domains/dsk.d.ts +49 -0
- package/backend-contract/dist/domains/dsk.js +2 -0
- package/backend-contract/dist/domains/ek.d.ts +186 -0
- package/backend-contract/dist/domains/ek.js +8 -0
- package/backend-contract/dist/domains/ephemeris.d.ts +141 -3
- package/backend-contract/dist/domains/error.d.ts +42 -0
- package/backend-contract/dist/domains/error.js +33 -0
- package/backend-contract/dist/domains/file-io.d.ts +114 -0
- package/backend-contract/dist/domains/file-io.js +8 -0
- package/backend-contract/dist/domains/frames.d.ts +44 -4
- package/backend-contract/dist/domains/geometry-gf.d.ts +44 -0
- package/backend-contract/dist/domains/geometry-gf.js +14 -0
- package/backend-contract/dist/domains/geometry.d.ts +21 -1
- package/backend-contract/dist/domains/ids-names-normalize.d.ts +3 -0
- package/backend-contract/dist/domains/ids-names-normalize.js +74 -0
- package/backend-contract/dist/domains/ids-names.d.ts +37 -0
- package/backend-contract/dist/domains/kernel-pool.d.ts +134 -0
- package/backend-contract/dist/domains/kernel-pool.js +2 -0
- package/backend-contract/dist/domains/kernels-utils.d.ts +44 -0
- package/backend-contract/dist/domains/kernels-utils.js +265 -0
- package/backend-contract/dist/domains/kernels.d.ts +39 -3
- package/backend-contract/dist/domains/time.d.ts +102 -0
- package/backend-contract/dist/index.d.ts +34 -15
- package/backend-contract/dist/index.js +15 -1
- package/backend-contract/dist/shared/errors.d.ts +6 -0
- package/backend-contract/dist/shared/errors.js +8 -0
- package/backend-contract/dist/shared/mat3.d.ts +52 -0
- package/backend-contract/dist/shared/mat3.js +150 -0
- package/backend-contract/dist/shared/mat6.d.ts +34 -0
- package/backend-contract/dist/shared/mat6.js +116 -0
- package/backend-contract/dist/shared/spice-handles.d.ts +20 -0
- package/backend-contract/dist/shared/spice-handles.js +82 -0
- package/backend-contract/dist/shared/spice-int.d.ts +32 -0
- package/backend-contract/dist/shared/spice-int.js +41 -0
- package/backend-contract/dist/shared/types.d.ts +136 -5
- package/backend-contract/dist/shared/types.js +1 -1
- package/backend-contract/dist/shared/vec.d.ts +54 -0
- package/backend-contract/dist/shared/vec.js +162 -0
- package/backend-fake/dist/.tsbuildinfo +1 -1
- package/backend-fake/dist/index.d.ts +21 -1
- package/backend-fake/dist/index.js +1112 -33
- package/backend-node/dist/.tsbuildinfo +1 -1
- package/backend-node/dist/codec/arrays.d.ts +9 -0
- package/backend-node/dist/codec/arrays.js +36 -0
- package/backend-node/dist/codec/errors.d.ts +6 -6
- package/backend-node/dist/codec/errors.js +6 -6
- package/backend-node/dist/domains/cells-windows.d.ts +5 -0
- package/backend-node/dist/domains/cells-windows.js +112 -0
- package/backend-node/dist/domains/coords-vectors.d.ts +1 -0
- package/backend-node/dist/domains/coords-vectors.js +66 -0
- package/backend-node/dist/domains/dsk.d.ts +6 -0
- package/backend-node/dist/domains/dsk.js +108 -0
- package/backend-node/dist/domains/ek.d.ts +10 -0
- package/backend-node/dist/domains/ek.js +100 -0
- package/backend-node/dist/domains/ephemeris.d.ts +5 -1
- package/backend-node/dist/domains/ephemeris.js +150 -1
- package/backend-node/dist/domains/error.d.ts +5 -0
- package/backend-node/dist/domains/error.js +34 -0
- package/backend-node/dist/domains/file-io.d.ts +7 -0
- package/backend-node/dist/domains/file-io.js +105 -0
- package/backend-node/dist/domains/frames.d.ts +1 -0
- package/backend-node/dist/domains/frames.js +58 -6
- package/backend-node/dist/domains/geometry-gf.d.ts +5 -0
- package/backend-node/dist/domains/geometry-gf.js +74 -0
- package/backend-node/dist/domains/geometry.d.ts +1 -0
- package/backend-node/dist/domains/geometry.js +62 -0
- package/backend-node/dist/domains/ids-names.d.ts +2 -1
- package/backend-node/dist/domains/ids-names.js +30 -0
- package/backend-node/dist/domains/kernel-pool.d.ts +5 -0
- package/backend-node/dist/domains/kernel-pool.js +74 -0
- package/backend-node/dist/domains/kernels.d.ts +1 -0
- package/backend-node/dist/domains/kernels.js +100 -13
- package/backend-node/dist/domains/time.d.ts +1 -0
- package/backend-node/dist/domains/time.js +75 -1
- package/backend-node/dist/index.d.ts +5 -1
- package/backend-node/dist/index.js +62 -1
- package/backend-node/dist/lowlevel/binding.d.ts +3 -0
- package/backend-node/dist/lowlevel/binding.js +115 -0
- package/backend-node/dist/runtime/addon.d.ts +273 -2
- package/backend-node/dist/runtime/addon.js +3 -0
- package/backend-node/dist/runtime/kernel-staging.d.ts +17 -0
- package/backend-node/dist/runtime/kernel-staging.js +80 -7
- package/backend-node/dist/runtime/spice-handles.d.ts +3 -0
- package/backend-node/dist/runtime/spice-handles.js +2 -0
- package/backend-node/dist/runtime/virtual-output-staging.d.ts +16 -0
- package/backend-node/dist/runtime/virtual-output-staging.js +148 -0
- package/backend-wasm/dist/.tsbuildinfo +1 -1
- package/backend-wasm/dist/codec/alloc.d.ts +19 -0
- package/backend-wasm/dist/codec/alloc.js +64 -0
- package/backend-wasm/dist/codec/calls.d.ts +2 -0
- package/backend-wasm/dist/codec/calls.js +13 -24
- package/backend-wasm/dist/codec/errors.d.ts +6 -0
- package/backend-wasm/dist/codec/errors.js +34 -2
- package/backend-wasm/dist/codec/found.d.ts +2 -0
- package/backend-wasm/dist/codec/found.js +20 -43
- package/backend-wasm/dist/codec/strings.d.ts +31 -1
- package/backend-wasm/dist/codec/strings.js +93 -6
- package/backend-wasm/dist/domains/cells-windows.d.ts +9 -0
- package/backend-wasm/dist/domains/cells-windows.js +392 -0
- package/backend-wasm/dist/domains/coords-vectors.d.ts +1 -0
- package/backend-wasm/dist/domains/coords-vectors.js +377 -184
- package/backend-wasm/dist/domains/dsk.d.ts +6 -0
- package/backend-wasm/dist/domains/dsk.js +179 -0
- package/backend-wasm/dist/domains/ek.d.ts +6 -0
- package/backend-wasm/dist/domains/ek.js +543 -0
- package/backend-wasm/dist/domains/ephemeris.d.ts +4 -1
- package/backend-wasm/dist/domains/ephemeris.js +405 -46
- package/backend-wasm/dist/domains/error.d.ts +5 -0
- package/backend-wasm/dist/domains/error.js +109 -0
- package/backend-wasm/dist/domains/file-io.d.ts +7 -0
- package/backend-wasm/dist/domains/file-io.js +462 -0
- package/backend-wasm/dist/domains/frames.d.ts +1 -0
- package/backend-wasm/dist/domains/frames.js +139 -6
- package/backend-wasm/dist/domains/geometry-gf.d.ts +5 -0
- package/backend-wasm/dist/domains/geometry-gf.js +178 -0
- package/backend-wasm/dist/domains/geometry.d.ts +1 -0
- package/backend-wasm/dist/domains/geometry.js +210 -0
- package/backend-wasm/dist/domains/ids-names.d.ts +2 -1
- package/backend-wasm/dist/domains/ids-names.js +89 -0
- package/backend-wasm/dist/domains/kernel-pool.d.ts +5 -0
- package/backend-wasm/dist/domains/kernel-pool.js +357 -0
- package/backend-wasm/dist/domains/kernels.d.ts +1 -0
- package/backend-wasm/dist/domains/kernels.js +108 -4
- package/backend-wasm/dist/domains/time.d.ts +2 -0
- package/backend-wasm/dist/domains/time.js +235 -133
- package/backend-wasm/dist/index.d.ts +4 -2
- package/backend-wasm/dist/lowlevel/exports.d.ts +215 -1
- package/backend-wasm/dist/lowlevel/exports.js +217 -38
- package/backend-wasm/dist/runtime/create-backend-options.d.ts +21 -0
- package/backend-wasm/dist/runtime/create-backend.node.d.ts +11 -2
- package/backend-wasm/dist/runtime/create-backend.node.js +283 -14
- package/backend-wasm/dist/runtime/create-backend.web.d.ts +5 -2
- package/backend-wasm/dist/runtime/create-backend.web.js +40 -6
- package/backend-wasm/dist/runtime/fs.d.ts +6 -0
- package/backend-wasm/dist/runtime/fs.js +29 -3
- package/backend-wasm/dist/runtime/spice-handles.d.ts +3 -0
- package/backend-wasm/dist/runtime/spice-handles.js +2 -0
- package/backend-wasm/dist/runtime/virtual-outputs.d.ts +16 -0
- package/backend-wasm/dist/runtime/virtual-outputs.js +35 -0
- package/backend-wasm/dist/tspice_backend_wasm.node.js +3 -3
- package/backend-wasm/dist/tspice_backend_wasm.wasm +0 -0
- package/backend-wasm/dist/tspice_backend_wasm.web.js +1 -1
- package/core/dist/.tsbuildinfo +1 -1
- package/core/dist/index.d.ts +21 -0
- package/core/dist/index.js +57 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/backend.d.ts +15 -6
- package/dist/backend.js +3 -6
- package/dist/clients/createSpiceAsyncFromTransport.d.ts +5 -0
- package/dist/clients/createSpiceAsyncFromTransport.js +90 -0
- package/dist/clients/createSpiceSyncFromTransport.d.ts +5 -0
- package/dist/clients/createSpiceSyncFromTransport.js +88 -0
- package/dist/clients/spiceClients.d.ts +59 -0
- package/dist/clients/spiceClients.js +292 -0
- package/dist/errors.d.ts +4 -0
- package/dist/errors.js +4 -0
- package/dist/index.d.ts +12 -7
- package/dist/index.js +5 -2
- package/dist/kernels/defaultKernelPathFromUrl.d.ts +8 -0
- package/dist/kernels/defaultKernelPathFromUrl.js +32 -0
- package/dist/kernels/kernelPack.d.ts +88 -0
- package/dist/kernels/kernelPack.js +122 -0
- package/dist/kernels/kernels.d.ts +98 -0
- package/dist/kernels/kernels.js +217 -0
- package/dist/kernels/naifKernelId.d.ts +2 -0
- package/dist/kernels/naifKernelId.js +2 -0
- package/dist/kit/index.d.ts +4 -0
- package/dist/kit/index.js +3 -0
- package/dist/kit/math/mat3.d.ts +31 -0
- package/dist/kit/math/mat3.js +82 -0
- package/dist/kit/spice/create-kit.d.ts +12 -0
- package/dist/kit/spice/create-kit.js +23 -0
- package/dist/kit/spice/frames.d.ts +8 -0
- package/dist/kit/spice/frames.js +16 -0
- package/dist/kit/spice/kernels.d.ts +14 -0
- package/dist/kit/spice/kernels.js +39 -0
- package/dist/kit/spice/state.d.ts +7 -0
- package/dist/kit/spice/state.js +36 -0
- package/dist/kit/spice/time.d.ts +9 -0
- package/dist/kit/spice/time.js +31 -0
- package/dist/kit/types/spice-types.d.ts +51 -0
- package/dist/spice.d.ts +10 -1
- package/dist/spice.js +84 -72
- package/dist/transport/caching/policy.d.ts +16 -0
- package/dist/transport/caching/policy.js +77 -0
- package/dist/transport/caching/withCaching.d.ts +125 -0
- package/dist/transport/caching/withCaching.js +335 -0
- package/dist/transport/caching/withCachingSync.d.ts +24 -0
- package/dist/transport/caching/withCachingSync.js +161 -0
- package/dist/transport/rpc/protocol.d.ts +35 -0
- package/dist/transport/rpc/protocol.js +56 -0
- package/dist/transport/rpc/taskScheduling.d.ts +20 -0
- package/dist/transport/rpc/taskScheduling.js +98 -0
- package/dist/transport/rpc/valueCodec.d.ts +5 -0
- package/dist/transport/rpc/valueCodec.js +106 -0
- package/dist/transport/types.d.ts +7 -0
- package/dist/transport/types.js +2 -0
- package/dist/types.d.ts +8 -17
- package/dist/types.js +2 -1
- package/dist/worker/browser/createSpiceWorker.d.ts +22 -0
- package/dist/worker/browser/createSpiceWorker.js +41 -0
- package/dist/worker/browser/createSpiceWorkerClient.d.ts +40 -0
- package/dist/worker/browser/createSpiceWorkerClient.js +99 -0
- package/dist/worker/browser/spiceWorkerEntry.d.ts +2 -0
- package/dist/worker/browser/spiceWorkerEntry.js +129 -0
- package/dist/worker/browser/spiceWorkerInlineSource.d.ts +2 -0
- package/dist/worker/browser/spiceWorkerInlineSource.js +4 -0
- package/dist/worker/index.d.ts +10 -0
- package/dist/worker/index.js +7 -0
- package/dist/worker/transport/createWorkerTransport.d.ts +69 -0
- package/dist/worker/transport/createWorkerTransport.js +398 -0
- package/dist/worker/transport/exposeTransportToWorker.d.ts +51 -0
- package/dist/worker/transport/exposeTransportToWorker.js +196 -0
- package/package.json +4 -4
- package/dist/spice-types.d.ts +0 -36
- /package/dist/{spice-types.js → kit/types/spice-types.js} +0 -0
|
@@ -1,81 +1,440 @@
|
|
|
1
|
+
import { assertSpiceInt32 } from "#backend-contract";
|
|
2
|
+
import { WASM_ERR_MAX_BYTES, withAllocs } from "../codec/alloc.js";
|
|
1
3
|
import { throwWasmSpiceError } from "../codec/errors.js";
|
|
2
|
-
import { writeUtf8CString } from "../codec/strings.js";
|
|
4
|
+
import { readFixedWidthCString, writeUtf8CString } from "../codec/strings.js";
|
|
5
|
+
import { resolveKernelPath } from "../runtime/fs.js";
|
|
6
|
+
const I32_MAX = 2147483647;
|
|
7
|
+
function isVirtualOutput(value) {
|
|
8
|
+
return (typeof value === "object" &&
|
|
9
|
+
value !== null &&
|
|
10
|
+
value.kind === "virtual-output" &&
|
|
11
|
+
typeof value.path === "string");
|
|
12
|
+
}
|
|
13
|
+
// SPK writer file semantics in the WASM backend:
|
|
14
|
+
//
|
|
15
|
+
// - `string` inputs are treated as *virtual kernel ids*, not raw Emscripten FS
|
|
16
|
+
// absolute paths. We route them through `resolveKernelPath()` to normalize
|
|
17
|
+
// into the `/kernels/...` namespace and to fail fast on accidental OS
|
|
18
|
+
// paths/URLs.
|
|
19
|
+
// - `VirtualOutput.path` is also a virtual id (not a raw absolute FS path) and
|
|
20
|
+
// is resolved the same way.
|
|
21
|
+
//
|
|
22
|
+
// This keeps the writer APIs consistent with `furnsh(string)` and
|
|
23
|
+
// `readVirtualOutput()`.
|
|
24
|
+
function resolveSpkPath(file, context) {
|
|
25
|
+
if (typeof file === "string") {
|
|
26
|
+
return resolveKernelPath(file);
|
|
27
|
+
}
|
|
28
|
+
if (!isVirtualOutput(file)) {
|
|
29
|
+
throw new Error(`${context}: expected VirtualOutput {kind:'virtual-output', path:string}`);
|
|
30
|
+
}
|
|
31
|
+
return resolveKernelPath(file.path);
|
|
32
|
+
}
|
|
33
|
+
function ensureParentDir(module, filePath) {
|
|
34
|
+
const dir = filePath.split("/").slice(0, -1).join("/") || "/";
|
|
35
|
+
if (dir && dir !== "/") {
|
|
36
|
+
module.FS.mkdirTree(dir);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function callVoidHandle(module, fn, handle) {
|
|
40
|
+
withAllocs(module, [WASM_ERR_MAX_BYTES], (errPtr) => {
|
|
41
|
+
const code = fn(handle, errPtr, WASM_ERR_MAX_BYTES);
|
|
42
|
+
if (code !== 0) {
|
|
43
|
+
throwWasmSpiceError(module, errPtr, WASM_ERR_MAX_BYTES, code);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function tspiceCallSpkopn(module, path, ifname, ncomch) {
|
|
48
|
+
const pathPtr = writeUtf8CString(module, path);
|
|
49
|
+
const ifnamePtr = writeUtf8CString(module, ifname);
|
|
50
|
+
try {
|
|
51
|
+
return withAllocs(module, [4, WASM_ERR_MAX_BYTES], (outHandlePtr, errPtr) => {
|
|
52
|
+
module.HEAP32[outHandlePtr >> 2] = 0;
|
|
53
|
+
const code = module._tspice_spkopn(pathPtr, ifnamePtr, ncomch, outHandlePtr, errPtr, WASM_ERR_MAX_BYTES);
|
|
54
|
+
if (code !== 0) {
|
|
55
|
+
throwWasmSpiceError(module, errPtr, WASM_ERR_MAX_BYTES, code);
|
|
56
|
+
}
|
|
57
|
+
return module.HEAP32[outHandlePtr >> 2] ?? 0;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
module._free(ifnamePtr);
|
|
62
|
+
module._free(pathPtr);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function tspiceCallSpkopa(module, path) {
|
|
66
|
+
const pathPtr = writeUtf8CString(module, path);
|
|
67
|
+
try {
|
|
68
|
+
return withAllocs(module, [4, WASM_ERR_MAX_BYTES], (outHandlePtr, errPtr) => {
|
|
69
|
+
module.HEAP32[outHandlePtr >> 2] = 0;
|
|
70
|
+
const code = module._tspice_spkopa(pathPtr, outHandlePtr, errPtr, WASM_ERR_MAX_BYTES);
|
|
71
|
+
if (code !== 0) {
|
|
72
|
+
throwWasmSpiceError(module, errPtr, WASM_ERR_MAX_BYTES, code);
|
|
73
|
+
}
|
|
74
|
+
return module.HEAP32[outHandlePtr >> 2] ?? 0;
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
module._free(pathPtr);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function tspiceCallSpkw08(module, nativeHandle, body, center, frame, first, last, segid, degree, states, epoch1, step) {
|
|
82
|
+
const framePtr = writeUtf8CString(module, frame);
|
|
83
|
+
const segidPtr = writeUtf8CString(module, segid);
|
|
84
|
+
try {
|
|
85
|
+
const n = states.length / 6;
|
|
86
|
+
if (!Number.isSafeInteger(n) || n <= 0 || n * 6 !== states.length) {
|
|
87
|
+
throw new Error("tspiceCallSpkw08(states): expected states.length to be a non-zero multiple of 6");
|
|
88
|
+
}
|
|
89
|
+
if (n > I32_MAX) {
|
|
90
|
+
throw new Error(`tspiceCallSpkw08(states): expected n to be a 32-bit signed integer (got n=${n})`);
|
|
91
|
+
}
|
|
92
|
+
if (states.length > I32_MAX) {
|
|
93
|
+
throw new Error(`tspiceCallSpkw08(states): expected states.length to be a 32-bit signed integer (got states.length=${states.length})`);
|
|
94
|
+
}
|
|
95
|
+
const statesBytes = n * 6 * 8;
|
|
96
|
+
// Allocate states bytes with padding to ensure 8-byte alignment.
|
|
97
|
+
withAllocs(module, [WASM_ERR_MAX_BYTES, statesBytes + 7], (errPtr, rawStatesPtr) => {
|
|
98
|
+
const statesPtr = (rawStatesPtr + 7) & ~7;
|
|
99
|
+
if (states.length > 0) {
|
|
100
|
+
module.HEAPF64.set(states, statesPtr >> 3);
|
|
101
|
+
}
|
|
102
|
+
const code = module._tspice_spkw08_v2(nativeHandle, body, center, framePtr, first, last, segidPtr, degree, n, statesPtr, states.length, epoch1, step, errPtr, WASM_ERR_MAX_BYTES);
|
|
103
|
+
if (code !== 0) {
|
|
104
|
+
throwWasmSpiceError(module, errPtr, WASM_ERR_MAX_BYTES, code);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
module._free(segidPtr);
|
|
110
|
+
module._free(framePtr);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
3
113
|
function tspiceCallSpkezr(module, target, et, ref, abcorr, obs) {
|
|
4
|
-
const errMaxBytes = 2048;
|
|
5
|
-
const errPtr = module._malloc(errMaxBytes);
|
|
6
114
|
const targetPtr = writeUtf8CString(module, target);
|
|
7
115
|
const refPtr = writeUtf8CString(module, ref);
|
|
8
116
|
const abcorrPtr = writeUtf8CString(module, abcorr);
|
|
9
117
|
const obsPtr = writeUtf8CString(module, obs);
|
|
10
|
-
const outStatePtr = module._malloc(6 * 8);
|
|
11
|
-
const outLtPtr = module._malloc(8);
|
|
12
|
-
if (!errPtr || !targetPtr || !refPtr || !abcorrPtr || !obsPtr || !outStatePtr || !outLtPtr) {
|
|
13
|
-
for (const ptr of [outLtPtr, outStatePtr, obsPtr, abcorrPtr, refPtr, targetPtr, errPtr]) {
|
|
14
|
-
if (ptr)
|
|
15
|
-
module._free(ptr);
|
|
16
|
-
}
|
|
17
|
-
throw new Error("WASM malloc failed");
|
|
18
|
-
}
|
|
19
118
|
try {
|
|
20
|
-
module
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
119
|
+
return withAllocs(module, [WASM_ERR_MAX_BYTES, 6 * 8, 8], (errPtr, outStatePtr, outLtPtr) => {
|
|
120
|
+
module.HEAPF64[outLtPtr >> 3] = 0;
|
|
121
|
+
const result = module._tspice_spkezr(targetPtr, et, refPtr, abcorrPtr, obsPtr, outStatePtr, outLtPtr, errPtr, WASM_ERR_MAX_BYTES);
|
|
122
|
+
if (result !== 0) {
|
|
123
|
+
throwWasmSpiceError(module, errPtr, WASM_ERR_MAX_BYTES, result);
|
|
124
|
+
}
|
|
125
|
+
const state = Array.from(module.HEAPF64.subarray(outStatePtr >> 3, (outStatePtr >> 3) + 6));
|
|
126
|
+
const lt = module.HEAPF64[outLtPtr >> 3] ?? 0;
|
|
127
|
+
return { state, lt };
|
|
128
|
+
});
|
|
28
129
|
}
|
|
29
130
|
finally {
|
|
30
|
-
module._free(outLtPtr);
|
|
31
|
-
module._free(outStatePtr);
|
|
32
131
|
module._free(obsPtr);
|
|
33
132
|
module._free(abcorrPtr);
|
|
34
133
|
module._free(refPtr);
|
|
35
134
|
module._free(targetPtr);
|
|
36
|
-
module._free(errPtr);
|
|
37
135
|
}
|
|
38
136
|
}
|
|
39
137
|
function tspiceCallSpkpos(module, target, et, ref, abcorr, obs) {
|
|
40
|
-
const errMaxBytes = 2048;
|
|
41
|
-
const errPtr = module._malloc(errMaxBytes);
|
|
42
138
|
const targetPtr = writeUtf8CString(module, target);
|
|
43
139
|
const refPtr = writeUtf8CString(module, ref);
|
|
44
140
|
const abcorrPtr = writeUtf8CString(module, abcorr);
|
|
45
141
|
const obsPtr = writeUtf8CString(module, obs);
|
|
46
|
-
const outPosPtr = module._malloc(3 * 8);
|
|
47
|
-
const outLtPtr = module._malloc(8);
|
|
48
|
-
if (!errPtr || !targetPtr || !refPtr || !abcorrPtr || !obsPtr || !outPosPtr || !outLtPtr) {
|
|
49
|
-
for (const ptr of [outLtPtr, outPosPtr, obsPtr, abcorrPtr, refPtr, targetPtr, errPtr]) {
|
|
50
|
-
if (ptr)
|
|
51
|
-
module._free(ptr);
|
|
52
|
-
}
|
|
53
|
-
throw new Error("WASM malloc failed");
|
|
54
|
-
}
|
|
55
142
|
try {
|
|
56
|
-
module
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
143
|
+
return withAllocs(module, [WASM_ERR_MAX_BYTES, 3 * 8, 8], (errPtr, outPosPtr, outLtPtr) => {
|
|
144
|
+
module.HEAPF64[outLtPtr >> 3] = 0;
|
|
145
|
+
const result = module._tspice_spkpos(targetPtr, et, refPtr, abcorrPtr, obsPtr, outPosPtr, outLtPtr, errPtr, WASM_ERR_MAX_BYTES);
|
|
146
|
+
if (result !== 0) {
|
|
147
|
+
throwWasmSpiceError(module, errPtr, WASM_ERR_MAX_BYTES, result);
|
|
148
|
+
}
|
|
149
|
+
const pos = Array.from(module.HEAPF64.subarray(outPosPtr >> 3, (outPosPtr >> 3) + 3));
|
|
150
|
+
const lt = module.HEAPF64[outLtPtr >> 3] ?? 0;
|
|
151
|
+
return { pos, lt };
|
|
152
|
+
});
|
|
64
153
|
}
|
|
65
154
|
finally {
|
|
66
|
-
module._free(outLtPtr);
|
|
67
|
-
module._free(outPosPtr);
|
|
68
155
|
module._free(obsPtr);
|
|
69
156
|
module._free(abcorrPtr);
|
|
70
157
|
module._free(refPtr);
|
|
71
158
|
module._free(targetPtr);
|
|
72
|
-
module._free(errPtr);
|
|
73
159
|
}
|
|
74
160
|
}
|
|
75
|
-
|
|
161
|
+
function tspiceCallSpkez(module, target, et, ref, abcorr, observer) {
|
|
162
|
+
assertSpiceInt32(target, "spkez(target)");
|
|
163
|
+
assertSpiceInt32(observer, "spkez(observer)");
|
|
164
|
+
const refPtr = writeUtf8CString(module, ref);
|
|
165
|
+
const abcorrPtr = writeUtf8CString(module, abcorr);
|
|
166
|
+
try {
|
|
167
|
+
return withAllocs(module, [WASM_ERR_MAX_BYTES, 6 * 8, 8], (errPtr, outStatePtr, outLtPtr) => {
|
|
168
|
+
module.HEAPF64[outLtPtr >> 3] = 0;
|
|
169
|
+
const result = module._tspice_spkez(target, et, refPtr, abcorrPtr, observer, outStatePtr, outLtPtr, errPtr, WASM_ERR_MAX_BYTES);
|
|
170
|
+
if (result !== 0) {
|
|
171
|
+
throwWasmSpiceError(module, errPtr, WASM_ERR_MAX_BYTES, result);
|
|
172
|
+
}
|
|
173
|
+
const state = Array.from(module.HEAPF64.subarray(outStatePtr >> 3, (outStatePtr >> 3) + 6));
|
|
174
|
+
const lt = module.HEAPF64[outLtPtr >> 3] ?? 0;
|
|
175
|
+
return { state, lt };
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
finally {
|
|
179
|
+
module._free(abcorrPtr);
|
|
180
|
+
module._free(refPtr);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
function tspiceCallSpkezp(module, target, et, ref, abcorr, observer) {
|
|
184
|
+
assertSpiceInt32(target, "spkezp(target)");
|
|
185
|
+
assertSpiceInt32(observer, "spkezp(observer)");
|
|
186
|
+
const refPtr = writeUtf8CString(module, ref);
|
|
187
|
+
const abcorrPtr = writeUtf8CString(module, abcorr);
|
|
188
|
+
try {
|
|
189
|
+
return withAllocs(module, [WASM_ERR_MAX_BYTES, 3 * 8, 8], (errPtr, outPosPtr, outLtPtr) => {
|
|
190
|
+
module.HEAPF64[outLtPtr >> 3] = 0;
|
|
191
|
+
const result = module._tspice_spkezp(target, et, refPtr, abcorrPtr, observer, outPosPtr, outLtPtr, errPtr, WASM_ERR_MAX_BYTES);
|
|
192
|
+
if (result !== 0) {
|
|
193
|
+
throwWasmSpiceError(module, errPtr, WASM_ERR_MAX_BYTES, result);
|
|
194
|
+
}
|
|
195
|
+
const pos = Array.from(module.HEAPF64.subarray(outPosPtr >> 3, (outPosPtr >> 3) + 3));
|
|
196
|
+
const lt = module.HEAPF64[outLtPtr >> 3] ?? 0;
|
|
197
|
+
return { pos, lt };
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
finally {
|
|
201
|
+
module._free(abcorrPtr);
|
|
202
|
+
module._free(refPtr);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
function tspiceCallSpkgeo(module, target, et, ref, observer) {
|
|
206
|
+
assertSpiceInt32(target, "spkgeo(target)");
|
|
207
|
+
assertSpiceInt32(observer, "spkgeo(observer)");
|
|
208
|
+
const refPtr = writeUtf8CString(module, ref);
|
|
209
|
+
try {
|
|
210
|
+
return withAllocs(module, [WASM_ERR_MAX_BYTES, 6 * 8, 8], (errPtr, outStatePtr, outLtPtr) => {
|
|
211
|
+
module.HEAPF64[outLtPtr >> 3] = 0;
|
|
212
|
+
const result = module._tspice_spkgeo(target, et, refPtr, observer, outStatePtr, outLtPtr, errPtr, WASM_ERR_MAX_BYTES);
|
|
213
|
+
if (result !== 0) {
|
|
214
|
+
throwWasmSpiceError(module, errPtr, WASM_ERR_MAX_BYTES, result);
|
|
215
|
+
}
|
|
216
|
+
const state = Array.from(module.HEAPF64.subarray(outStatePtr >> 3, (outStatePtr >> 3) + 6));
|
|
217
|
+
const lt = module.HEAPF64[outLtPtr >> 3] ?? 0;
|
|
218
|
+
return { state, lt };
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
finally {
|
|
222
|
+
module._free(refPtr);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function tspiceCallSpkgps(module, target, et, ref, observer) {
|
|
226
|
+
assertSpiceInt32(target, "spkgps(target)");
|
|
227
|
+
assertSpiceInt32(observer, "spkgps(observer)");
|
|
228
|
+
const refPtr = writeUtf8CString(module, ref);
|
|
229
|
+
try {
|
|
230
|
+
return withAllocs(module, [WASM_ERR_MAX_BYTES, 3 * 8, 8], (errPtr, outPosPtr, outLtPtr) => {
|
|
231
|
+
module.HEAPF64[outLtPtr >> 3] = 0;
|
|
232
|
+
const result = module._tspice_spkgps(target, et, refPtr, observer, outPosPtr, outLtPtr, errPtr, WASM_ERR_MAX_BYTES);
|
|
233
|
+
if (result !== 0) {
|
|
234
|
+
throwWasmSpiceError(module, errPtr, WASM_ERR_MAX_BYTES, result);
|
|
235
|
+
}
|
|
236
|
+
const pos = Array.from(module.HEAPF64.subarray(outPosPtr >> 3, (outPosPtr >> 3) + 3));
|
|
237
|
+
const lt = module.HEAPF64[outLtPtr >> 3] ?? 0;
|
|
238
|
+
return { pos, lt };
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
finally {
|
|
242
|
+
module._free(refPtr);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
function tspiceCallSpkssb(module, target, et, ref) {
|
|
246
|
+
assertSpiceInt32(target, "spkssb(target)");
|
|
247
|
+
const refPtr = writeUtf8CString(module, ref);
|
|
248
|
+
try {
|
|
249
|
+
return withAllocs(module, [WASM_ERR_MAX_BYTES, 6 * 8], (errPtr, outStatePtr) => {
|
|
250
|
+
const result = module._tspice_spkssb(target, et, refPtr, outStatePtr, errPtr, WASM_ERR_MAX_BYTES);
|
|
251
|
+
if (result !== 0) {
|
|
252
|
+
throwWasmSpiceError(module, errPtr, WASM_ERR_MAX_BYTES, result);
|
|
253
|
+
}
|
|
254
|
+
return Array.from(module.HEAPF64.subarray(outStatePtr >> 3, (outStatePtr >> 3) + 6));
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
finally {
|
|
258
|
+
module._free(refPtr);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
function tspiceCallSpkcov(module, spk, idcode, cover) {
|
|
262
|
+
assertSpiceInt32(idcode, "spkcov(idcode)");
|
|
263
|
+
const resolvedSpk = resolveKernelPath(spk);
|
|
264
|
+
const spkPtr = writeUtf8CString(module, resolvedSpk);
|
|
265
|
+
try {
|
|
266
|
+
return withAllocs(module, [WASM_ERR_MAX_BYTES], (errPtr) => {
|
|
267
|
+
const result = module._tspice_spkcov(spkPtr, idcode, cover, errPtr, WASM_ERR_MAX_BYTES);
|
|
268
|
+
if (result !== 0) {
|
|
269
|
+
throwWasmSpiceError(module, errPtr, WASM_ERR_MAX_BYTES, result);
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
finally {
|
|
274
|
+
module._free(spkPtr);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
function tspiceCallSpkobj(module, spk, ids) {
|
|
278
|
+
const resolvedSpk = resolveKernelPath(spk);
|
|
279
|
+
const spkPtr = writeUtf8CString(module, resolvedSpk);
|
|
280
|
+
try {
|
|
281
|
+
return withAllocs(module, [WASM_ERR_MAX_BYTES], (errPtr) => {
|
|
282
|
+
const result = module._tspice_spkobj(spkPtr, ids, errPtr, WASM_ERR_MAX_BYTES);
|
|
283
|
+
if (result !== 0) {
|
|
284
|
+
throwWasmSpiceError(module, errPtr, WASM_ERR_MAX_BYTES, result);
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
finally {
|
|
289
|
+
module._free(spkPtr);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
function tspiceCallSpksfs(module, body, et) {
|
|
293
|
+
assertSpiceInt32(body, "spksfs(body)");
|
|
294
|
+
// SIDLEN=40 + NUL.
|
|
295
|
+
const identMaxBytes = 41;
|
|
296
|
+
return withAllocs(module, [WASM_ERR_MAX_BYTES, 4, 5 * 8, identMaxBytes, 4], (errPtr, outHandlePtr, outDescrPtr, outIdentPtr, outFoundPtr) => {
|
|
297
|
+
module.HEAP32[outHandlePtr >> 2] = 0;
|
|
298
|
+
module.HEAP32[outFoundPtr >> 2] = 0;
|
|
299
|
+
module.HEAPU8[outIdentPtr] = 0;
|
|
300
|
+
const result = module._tspice_spksfs(body, et, outHandlePtr, outDescrPtr, outIdentPtr, identMaxBytes, outFoundPtr, errPtr, WASM_ERR_MAX_BYTES);
|
|
301
|
+
if (result !== 0) {
|
|
302
|
+
throwWasmSpiceError(module, errPtr, WASM_ERR_MAX_BYTES, result);
|
|
303
|
+
}
|
|
304
|
+
const found = (module.HEAP32[outFoundPtr >> 2] ?? 0) !== 0;
|
|
305
|
+
if (!found) {
|
|
306
|
+
return { found: false };
|
|
307
|
+
}
|
|
308
|
+
const handle = module.HEAP32[outHandlePtr >> 2] ?? 0;
|
|
309
|
+
const descr = Array.from(module.HEAPF64.subarray(outDescrPtr >> 3, (outDescrPtr >> 3) + 5));
|
|
310
|
+
const ident = readFixedWidthCString(module, outIdentPtr, identMaxBytes);
|
|
311
|
+
return {
|
|
312
|
+
found: true,
|
|
313
|
+
handle,
|
|
314
|
+
descr,
|
|
315
|
+
ident,
|
|
316
|
+
};
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
function tspiceCallSpkpds(module, body, center, frame, type, first, last) {
|
|
320
|
+
assertSpiceInt32(body, "spkpds(body)");
|
|
321
|
+
assertSpiceInt32(center, "spkpds(center)");
|
|
322
|
+
assertSpiceInt32(type, "spkpds(type)");
|
|
323
|
+
const framePtr = writeUtf8CString(module, frame);
|
|
324
|
+
try {
|
|
325
|
+
return withAllocs(module, [WASM_ERR_MAX_BYTES, 5 * 8], (errPtr, outDescrPtr) => {
|
|
326
|
+
const result = module._tspice_spkpds(body, center, framePtr, type, first, last, outDescrPtr, errPtr, WASM_ERR_MAX_BYTES);
|
|
327
|
+
if (result !== 0) {
|
|
328
|
+
throwWasmSpiceError(module, errPtr, WASM_ERR_MAX_BYTES, result);
|
|
329
|
+
}
|
|
330
|
+
return Array.from(module.HEAPF64.subarray(outDescrPtr >> 3, (outDescrPtr >> 3) + 5));
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
finally {
|
|
334
|
+
module._free(framePtr);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
function tspiceCallSpkuds(module, descr) {
|
|
338
|
+
return withAllocs(module, [WASM_ERR_MAX_BYTES, 5 * 8, 4, 4, 4, 4, 8, 8, 4, 4], (errPtr, descrPtr, outBodyPtr, outCenterPtr, outFramePtr, outTypePtr, outFirstPtr, outLastPtr, outBaddrPtr, outEaddrPtr) => {
|
|
339
|
+
const base = descrPtr >> 3;
|
|
340
|
+
for (let i = 0; i < 5; i++) {
|
|
341
|
+
module.HEAPF64[base + i] = descr[i] ?? 0;
|
|
342
|
+
}
|
|
343
|
+
module.HEAP32[outBodyPtr >> 2] = 0;
|
|
344
|
+
module.HEAP32[outCenterPtr >> 2] = 0;
|
|
345
|
+
module.HEAP32[outFramePtr >> 2] = 0;
|
|
346
|
+
module.HEAP32[outTypePtr >> 2] = 0;
|
|
347
|
+
module.HEAPF64[outFirstPtr >> 3] = 0;
|
|
348
|
+
module.HEAPF64[outLastPtr >> 3] = 0;
|
|
349
|
+
module.HEAP32[outBaddrPtr >> 2] = 0;
|
|
350
|
+
module.HEAP32[outEaddrPtr >> 2] = 0;
|
|
351
|
+
const result = module._tspice_spkuds(descrPtr, outBodyPtr, outCenterPtr, outFramePtr, outTypePtr, outFirstPtr, outLastPtr, outBaddrPtr, outEaddrPtr, errPtr, WASM_ERR_MAX_BYTES);
|
|
352
|
+
if (result !== 0) {
|
|
353
|
+
throwWasmSpiceError(module, errPtr, WASM_ERR_MAX_BYTES, result);
|
|
354
|
+
}
|
|
355
|
+
return {
|
|
356
|
+
body: module.HEAP32[outBodyPtr >> 2] ?? 0,
|
|
357
|
+
center: module.HEAP32[outCenterPtr >> 2] ?? 0,
|
|
358
|
+
frame: module.HEAP32[outFramePtr >> 2] ?? 0,
|
|
359
|
+
type: module.HEAP32[outTypePtr >> 2] ?? 0,
|
|
360
|
+
first: module.HEAPF64[outFirstPtr >> 3] ?? 0,
|
|
361
|
+
last: module.HEAPF64[outLastPtr >> 3] ?? 0,
|
|
362
|
+
baddr: module.HEAP32[outBaddrPtr >> 2] ?? 0,
|
|
363
|
+
eaddr: module.HEAP32[outEaddrPtr >> 2] ?? 0,
|
|
364
|
+
};
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
/** Create an {@link EphemerisApi} implementation backed by a WASM Emscripten module. */
|
|
368
|
+
export function createEphemerisApi(module, handles, virtualOutputs) {
|
|
369
|
+
const virtualOutputPathByHandle = new Map();
|
|
76
370
|
return {
|
|
77
371
|
spkezr: (target, et, ref, abcorr, observer) => tspiceCallSpkezr(module, target, et, ref, abcorr, observer),
|
|
78
372
|
spkpos: (target, et, ref, abcorr, observer) => tspiceCallSpkpos(module, target, et, ref, abcorr, observer),
|
|
373
|
+
spkez: (target, et, ref, abcorr, observer) => tspiceCallSpkez(module, target, et, ref, abcorr, observer),
|
|
374
|
+
spkezp: (target, et, ref, abcorr, observer) => tspiceCallSpkezp(module, target, et, ref, abcorr, observer),
|
|
375
|
+
spkgeo: (target, et, ref, observer) => tspiceCallSpkgeo(module, target, et, ref, observer),
|
|
376
|
+
spkgps: (target, et, ref, observer) => tspiceCallSpkgps(module, target, et, ref, observer),
|
|
377
|
+
spkssb: (target, et, ref) => tspiceCallSpkssb(module, target, et, ref),
|
|
378
|
+
spkcov: (spk, idcode, cover) => tspiceCallSpkcov(module, spk, idcode, cover),
|
|
379
|
+
spkobj: (spk, ids) => tspiceCallSpkobj(module, spk, ids),
|
|
380
|
+
spksfs: (body, et) => tspiceCallSpksfs(module, body, et),
|
|
381
|
+
spkpds: (body, center, frame, type, first, last) => tspiceCallSpkpds(module, body, center, frame, type, first, last),
|
|
382
|
+
spkuds: (descr) => tspiceCallSpkuds(module, descr),
|
|
383
|
+
// --- SPK writers -------------------------------------------------------
|
|
384
|
+
spkopn: (file, ifname, ncomch) => {
|
|
385
|
+
const resolved = resolveSpkPath(file, "spkopn(file)");
|
|
386
|
+
ensureParentDir(module, resolved);
|
|
387
|
+
const nativeHandle = tspiceCallSpkopn(module, resolved, ifname, ncomch);
|
|
388
|
+
const handle = handles.register("SPK", nativeHandle);
|
|
389
|
+
if (typeof file !== "string") {
|
|
390
|
+
// `resolveSpkPath` already validated, but be defensive: callers can cast.
|
|
391
|
+
if (!isVirtualOutput(file)) {
|
|
392
|
+
throw new Error("spkopn(file): expected VirtualOutput {kind:'virtual-output', path:string}");
|
|
393
|
+
}
|
|
394
|
+
virtualOutputs.markOpen(resolved);
|
|
395
|
+
virtualOutputPathByHandle.set(handle, resolved);
|
|
396
|
+
}
|
|
397
|
+
return handle;
|
|
398
|
+
},
|
|
399
|
+
spkopa: (file) => {
|
|
400
|
+
const resolved = resolveSpkPath(file, "spkopa(file)");
|
|
401
|
+
ensureParentDir(module, resolved);
|
|
402
|
+
const nativeHandle = tspiceCallSpkopa(module, resolved);
|
|
403
|
+
const handle = handles.register("SPK", nativeHandle);
|
|
404
|
+
if (typeof file !== "string") {
|
|
405
|
+
if (!isVirtualOutput(file)) {
|
|
406
|
+
throw new Error("spkopa(file): expected VirtualOutput {kind:'virtual-output', path:string}");
|
|
407
|
+
}
|
|
408
|
+
virtualOutputs.markOpen(resolved);
|
|
409
|
+
virtualOutputPathByHandle.set(handle, resolved);
|
|
410
|
+
}
|
|
411
|
+
return handle;
|
|
412
|
+
},
|
|
413
|
+
spkcls: (handle) => {
|
|
414
|
+
const resolved = virtualOutputPathByHandle.get(handle);
|
|
415
|
+
handles.close(handle, ["SPK"], (entry) => callVoidHandle(module, module._tspice_spkcls, entry.nativeHandle), "spkcls");
|
|
416
|
+
if (resolved) {
|
|
417
|
+
virtualOutputs.markClosed(resolved);
|
|
418
|
+
virtualOutputPathByHandle.delete(handle);
|
|
419
|
+
}
|
|
420
|
+
},
|
|
421
|
+
spkw08: (handle, body, center, frame, first, last, segid, degree, states, epoch1, step) => {
|
|
422
|
+
if (!Array.isArray(states) && !(states instanceof Float64Array)) {
|
|
423
|
+
throw new Error("spkw08(states): expected number[] or Float64Array");
|
|
424
|
+
}
|
|
425
|
+
if (states.length === 0 || states.length % 6 !== 0) {
|
|
426
|
+
throw new Error("spkw08(): expected states.length to be a non-zero multiple of 6");
|
|
427
|
+
}
|
|
428
|
+
const n = states.length / 6;
|
|
429
|
+
if (!Number.isSafeInteger(n) || n <= 0 || n > I32_MAX) {
|
|
430
|
+
throw new Error(`spkw08(): expected states.length/6 to be a 32-bit signed integer (got n=${n})`);
|
|
431
|
+
}
|
|
432
|
+
if (states.length > I32_MAX) {
|
|
433
|
+
throw new Error(`spkw08(): expected states.length to be a 32-bit signed integer (got states.length=${states.length})`);
|
|
434
|
+
}
|
|
435
|
+
const nativeHandle = handles.lookup(handle, ["SPK"], "spkw08").nativeHandle;
|
|
436
|
+
tspiceCallSpkw08(module, nativeHandle, body, center, frame, first, last, segid, degree, states, epoch1, step);
|
|
437
|
+
},
|
|
79
438
|
};
|
|
80
439
|
}
|
|
81
440
|
//# sourceMappingURL=ephemeris.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type ErrorApi } from "#backend-contract";
|
|
2
|
+
import type { EmscriptenModule } from "../lowlevel/exports.js";
|
|
3
|
+
/** Create an {@link ErrorApi} implementation backed by a WASM Emscripten module. */
|
|
4
|
+
export declare function createErrorApi(module: EmscriptenModule): ErrorApi;
|
|
5
|
+
//# sourceMappingURL=error.d.ts.map
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { assertGetmsgWhich } from "#backend-contract";
|
|
2
|
+
import { WASM_ERR_MAX_BYTES, withMalloc, withAllocs } from "../codec/alloc.js";
|
|
3
|
+
import { throwWasmSpiceError } from "../codec/errors.js";
|
|
4
|
+
import { writeUtf8CString } from "../codec/strings.js";
|
|
5
|
+
/** Create an {@link ErrorApi} implementation backed by a WASM Emscripten module. */
|
|
6
|
+
export function createErrorApi(module) {
|
|
7
|
+
return {
|
|
8
|
+
failed: () => {
|
|
9
|
+
const errMaxBytes = WASM_ERR_MAX_BYTES;
|
|
10
|
+
return withAllocs(module, [4, errMaxBytes], (outFailedPtr, errPtr) => {
|
|
11
|
+
module.HEAP32[outFailedPtr >> 2] = 0;
|
|
12
|
+
const result = module._tspice_failed(outFailedPtr, errPtr, errMaxBytes);
|
|
13
|
+
if (result !== 0) {
|
|
14
|
+
throwWasmSpiceError(module, errPtr, errMaxBytes, result);
|
|
15
|
+
}
|
|
16
|
+
return (module.HEAP32[outFailedPtr >> 2] ?? 0) !== 0;
|
|
17
|
+
});
|
|
18
|
+
},
|
|
19
|
+
reset: () => {
|
|
20
|
+
const errMaxBytes = WASM_ERR_MAX_BYTES;
|
|
21
|
+
withMalloc(module, errMaxBytes, (errPtr) => {
|
|
22
|
+
const result = module._tspice_reset(errPtr, errMaxBytes);
|
|
23
|
+
if (result !== 0) {
|
|
24
|
+
throwWasmSpiceError(module, errPtr, errMaxBytes, result);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
},
|
|
28
|
+
getmsg: (which) => {
|
|
29
|
+
assertGetmsgWhich(which);
|
|
30
|
+
const errMaxBytes = WASM_ERR_MAX_BYTES;
|
|
31
|
+
const outMaxBytes = WASM_ERR_MAX_BYTES;
|
|
32
|
+
const whichPtr = writeUtf8CString(module, which);
|
|
33
|
+
try {
|
|
34
|
+
return withAllocs(module, [outMaxBytes, errMaxBytes], (outPtr, errPtr) => {
|
|
35
|
+
module.HEAPU8[outPtr] = 0;
|
|
36
|
+
const result = module._tspice_getmsg(whichPtr, outPtr, outMaxBytes, errPtr, errMaxBytes);
|
|
37
|
+
if (result !== 0) {
|
|
38
|
+
throwWasmSpiceError(module, errPtr, errMaxBytes, result);
|
|
39
|
+
}
|
|
40
|
+
return module.UTF8ToString(outPtr, outMaxBytes).trim();
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
module._free(whichPtr);
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
setmsg: (message) => {
|
|
48
|
+
const errMaxBytes = WASM_ERR_MAX_BYTES;
|
|
49
|
+
const messagePtr = writeUtf8CString(module, message);
|
|
50
|
+
try {
|
|
51
|
+
withMalloc(module, errMaxBytes, (errPtr) => {
|
|
52
|
+
const result = module._tspice_setmsg(messagePtr, errPtr, errMaxBytes);
|
|
53
|
+
if (result !== 0) {
|
|
54
|
+
throwWasmSpiceError(module, errPtr, errMaxBytes, result);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
module._free(messagePtr);
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
sigerr: (short) => {
|
|
63
|
+
const errMaxBytes = WASM_ERR_MAX_BYTES;
|
|
64
|
+
const shortPtr = writeUtf8CString(module, short);
|
|
65
|
+
try {
|
|
66
|
+
withMalloc(module, errMaxBytes, (errPtr) => {
|
|
67
|
+
const result = module._tspice_sigerr(shortPtr, errPtr, errMaxBytes);
|
|
68
|
+
if (result !== 0) {
|
|
69
|
+
throwWasmSpiceError(module, errPtr, errMaxBytes, result);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
module._free(shortPtr);
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
chkin: (name) => {
|
|
78
|
+
const errMaxBytes = WASM_ERR_MAX_BYTES;
|
|
79
|
+
const namePtr = writeUtf8CString(module, name);
|
|
80
|
+
try {
|
|
81
|
+
withMalloc(module, errMaxBytes, (errPtr) => {
|
|
82
|
+
const result = module._tspice_chkin(namePtr, errPtr, errMaxBytes);
|
|
83
|
+
if (result !== 0) {
|
|
84
|
+
throwWasmSpiceError(module, errPtr, errMaxBytes, result);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
module._free(namePtr);
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
chkout: (name) => {
|
|
93
|
+
const errMaxBytes = WASM_ERR_MAX_BYTES;
|
|
94
|
+
const namePtr = writeUtf8CString(module, name);
|
|
95
|
+
try {
|
|
96
|
+
withMalloc(module, errMaxBytes, (errPtr) => {
|
|
97
|
+
const result = module._tspice_chkout(namePtr, errPtr, errMaxBytes);
|
|
98
|
+
if (result !== 0) {
|
|
99
|
+
throwWasmSpiceError(module, errPtr, errMaxBytes, result);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
module._free(namePtr);
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=error.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { FileIoApi } from "#backend-contract";
|
|
2
|
+
import type { EmscriptenModule } from "../lowlevel/exports.js";
|
|
3
|
+
import type { SpiceHandleRegistry } from "../runtime/spice-handles.js";
|
|
4
|
+
import type { VirtualOutputRegistry } from "../runtime/virtual-outputs.js";
|
|
5
|
+
/** Create a {@link FileIoApi} implementation backed by a WASM Emscripten module. */
|
|
6
|
+
export declare function createFileIoApi(module: EmscriptenModule, handles: SpiceHandleRegistry, virtualOutputs: VirtualOutputRegistry): FileIoApi;
|
|
7
|
+
//# sourceMappingURL=file-io.d.ts.map
|