@rybosome/tspice 0.0.7 → 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.
Files changed (214) hide show
  1. package/README.md +140 -78
  2. package/backend-contract/dist/.tsbuildinfo +1 -1
  3. package/backend-contract/dist/domains/cells-windows.d.ts +94 -0
  4. package/backend-contract/dist/domains/cells-windows.js +10 -0
  5. package/backend-contract/dist/domains/coords-vectors.d.ts +50 -0
  6. package/backend-contract/dist/domains/dsk.d.ts +49 -0
  7. package/backend-contract/dist/domains/dsk.js +2 -0
  8. package/backend-contract/dist/domains/ek.d.ts +186 -0
  9. package/backend-contract/dist/domains/ek.js +8 -0
  10. package/backend-contract/dist/domains/ephemeris.d.ts +141 -3
  11. package/backend-contract/dist/domains/error.d.ts +42 -0
  12. package/backend-contract/dist/domains/error.js +33 -0
  13. package/backend-contract/dist/domains/file-io.d.ts +114 -0
  14. package/backend-contract/dist/domains/file-io.js +8 -0
  15. package/backend-contract/dist/domains/frames.d.ts +40 -0
  16. package/backend-contract/dist/domains/geometry-gf.d.ts +44 -0
  17. package/backend-contract/dist/domains/geometry-gf.js +14 -0
  18. package/backend-contract/dist/domains/geometry.d.ts +21 -1
  19. package/backend-contract/dist/domains/ids-names-normalize.d.ts +3 -0
  20. package/backend-contract/dist/domains/ids-names-normalize.js +74 -0
  21. package/backend-contract/dist/domains/ids-names.d.ts +37 -0
  22. package/backend-contract/dist/domains/kernel-pool.d.ts +134 -0
  23. package/backend-contract/dist/domains/kernel-pool.js +2 -0
  24. package/backend-contract/dist/domains/kernels-utils.d.ts +44 -0
  25. package/backend-contract/dist/domains/kernels-utils.js +265 -0
  26. package/backend-contract/dist/domains/kernels.d.ts +39 -3
  27. package/backend-contract/dist/domains/time.d.ts +102 -0
  28. package/backend-contract/dist/index.d.ts +31 -3
  29. package/backend-contract/dist/index.js +15 -1
  30. package/backend-contract/dist/shared/errors.d.ts +6 -0
  31. package/backend-contract/dist/shared/errors.js +8 -0
  32. package/backend-contract/dist/shared/mat3.d.ts +26 -14
  33. package/backend-contract/dist/shared/mat3.js +46 -17
  34. package/backend-contract/dist/shared/mat6.d.ts +34 -0
  35. package/backend-contract/dist/shared/mat6.js +116 -0
  36. package/backend-contract/dist/shared/spice-handles.d.ts +20 -0
  37. package/backend-contract/dist/shared/spice-handles.js +82 -0
  38. package/backend-contract/dist/shared/spice-int.d.ts +32 -0
  39. package/backend-contract/dist/shared/spice-int.js +41 -0
  40. package/backend-contract/dist/shared/types.d.ts +106 -1
  41. package/backend-contract/dist/shared/vec.d.ts +54 -0
  42. package/backend-contract/dist/shared/vec.js +162 -0
  43. package/backend-fake/dist/.tsbuildinfo +1 -1
  44. package/backend-fake/dist/index.d.ts +19 -1
  45. package/backend-fake/dist/index.js +1103 -18
  46. package/backend-node/dist/.tsbuildinfo +1 -1
  47. package/backend-node/dist/codec/arrays.d.ts +9 -0
  48. package/backend-node/dist/codec/arrays.js +36 -0
  49. package/backend-node/dist/codec/errors.d.ts +6 -6
  50. package/backend-node/dist/codec/errors.js +6 -6
  51. package/backend-node/dist/domains/cells-windows.d.ts +5 -0
  52. package/backend-node/dist/domains/cells-windows.js +112 -0
  53. package/backend-node/dist/domains/coords-vectors.d.ts +1 -0
  54. package/backend-node/dist/domains/coords-vectors.js +64 -1
  55. package/backend-node/dist/domains/dsk.d.ts +6 -0
  56. package/backend-node/dist/domains/dsk.js +108 -0
  57. package/backend-node/dist/domains/ek.d.ts +10 -0
  58. package/backend-node/dist/domains/ek.js +100 -0
  59. package/backend-node/dist/domains/ephemeris.d.ts +5 -1
  60. package/backend-node/dist/domains/ephemeris.js +150 -1
  61. package/backend-node/dist/domains/error.d.ts +5 -0
  62. package/backend-node/dist/domains/error.js +34 -0
  63. package/backend-node/dist/domains/file-io.d.ts +7 -0
  64. package/backend-node/dist/domains/file-io.js +105 -0
  65. package/backend-node/dist/domains/frames.d.ts +1 -0
  66. package/backend-node/dist/domains/frames.js +52 -0
  67. package/backend-node/dist/domains/geometry-gf.d.ts +5 -0
  68. package/backend-node/dist/domains/geometry-gf.js +74 -0
  69. package/backend-node/dist/domains/geometry.d.ts +1 -0
  70. package/backend-node/dist/domains/geometry.js +62 -0
  71. package/backend-node/dist/domains/ids-names.d.ts +2 -1
  72. package/backend-node/dist/domains/ids-names.js +30 -0
  73. package/backend-node/dist/domains/kernel-pool.d.ts +5 -0
  74. package/backend-node/dist/domains/kernel-pool.js +74 -0
  75. package/backend-node/dist/domains/kernels.d.ts +1 -0
  76. package/backend-node/dist/domains/kernels.js +100 -13
  77. package/backend-node/dist/domains/time.d.ts +1 -0
  78. package/backend-node/dist/domains/time.js +75 -1
  79. package/backend-node/dist/index.d.ts +2 -0
  80. package/backend-node/dist/index.js +62 -1
  81. package/backend-node/dist/lowlevel/binding.d.ts +3 -0
  82. package/backend-node/dist/lowlevel/binding.js +115 -0
  83. package/backend-node/dist/runtime/addon.d.ts +271 -0
  84. package/backend-node/dist/runtime/addon.js +3 -0
  85. package/backend-node/dist/runtime/kernel-staging.d.ts +17 -0
  86. package/backend-node/dist/runtime/kernel-staging.js +80 -7
  87. package/backend-node/dist/runtime/spice-handles.d.ts +3 -0
  88. package/backend-node/dist/runtime/spice-handles.js +2 -0
  89. package/backend-node/dist/runtime/virtual-output-staging.d.ts +16 -0
  90. package/backend-node/dist/runtime/virtual-output-staging.js +148 -0
  91. package/backend-wasm/dist/.tsbuildinfo +1 -1
  92. package/backend-wasm/dist/codec/alloc.d.ts +19 -0
  93. package/backend-wasm/dist/codec/alloc.js +64 -0
  94. package/backend-wasm/dist/codec/calls.d.ts +2 -0
  95. package/backend-wasm/dist/codec/calls.js +13 -24
  96. package/backend-wasm/dist/codec/errors.d.ts +6 -0
  97. package/backend-wasm/dist/codec/errors.js +34 -2
  98. package/backend-wasm/dist/codec/found.d.ts +2 -0
  99. package/backend-wasm/dist/codec/found.js +20 -43
  100. package/backend-wasm/dist/codec/strings.d.ts +31 -1
  101. package/backend-wasm/dist/codec/strings.js +93 -6
  102. package/backend-wasm/dist/domains/cells-windows.d.ts +9 -0
  103. package/backend-wasm/dist/domains/cells-windows.js +392 -0
  104. package/backend-wasm/dist/domains/coords-vectors.d.ts +1 -0
  105. package/backend-wasm/dist/domains/coords-vectors.js +377 -187
  106. package/backend-wasm/dist/domains/dsk.d.ts +6 -0
  107. package/backend-wasm/dist/domains/dsk.js +179 -0
  108. package/backend-wasm/dist/domains/ek.d.ts +6 -0
  109. package/backend-wasm/dist/domains/ek.js +543 -0
  110. package/backend-wasm/dist/domains/ephemeris.d.ts +4 -1
  111. package/backend-wasm/dist/domains/ephemeris.js +405 -46
  112. package/backend-wasm/dist/domains/error.d.ts +5 -0
  113. package/backend-wasm/dist/domains/error.js +109 -0
  114. package/backend-wasm/dist/domains/file-io.d.ts +7 -0
  115. package/backend-wasm/dist/domains/file-io.js +462 -0
  116. package/backend-wasm/dist/domains/frames.d.ts +1 -0
  117. package/backend-wasm/dist/domains/frames.js +136 -4
  118. package/backend-wasm/dist/domains/geometry-gf.d.ts +5 -0
  119. package/backend-wasm/dist/domains/geometry-gf.js +178 -0
  120. package/backend-wasm/dist/domains/geometry.d.ts +1 -0
  121. package/backend-wasm/dist/domains/geometry.js +210 -0
  122. package/backend-wasm/dist/domains/ids-names.d.ts +2 -1
  123. package/backend-wasm/dist/domains/ids-names.js +89 -0
  124. package/backend-wasm/dist/domains/kernel-pool.d.ts +5 -0
  125. package/backend-wasm/dist/domains/kernel-pool.js +357 -0
  126. package/backend-wasm/dist/domains/kernels.d.ts +1 -0
  127. package/backend-wasm/dist/domains/kernels.js +91 -2
  128. package/backend-wasm/dist/domains/time.d.ts +2 -0
  129. package/backend-wasm/dist/domains/time.js +235 -133
  130. package/backend-wasm/dist/lowlevel/exports.d.ts +215 -1
  131. package/backend-wasm/dist/lowlevel/exports.js +217 -38
  132. package/backend-wasm/dist/runtime/create-backend-options.d.ts +21 -0
  133. package/backend-wasm/dist/runtime/create-backend.node.d.ts +7 -0
  134. package/backend-wasm/dist/runtime/create-backend.node.js +283 -12
  135. package/backend-wasm/dist/runtime/create-backend.web.d.ts +1 -0
  136. package/backend-wasm/dist/runtime/create-backend.web.js +40 -4
  137. package/backend-wasm/dist/runtime/fs.d.ts +5 -0
  138. package/backend-wasm/dist/runtime/fs.js +5 -0
  139. package/backend-wasm/dist/runtime/spice-handles.d.ts +3 -0
  140. package/backend-wasm/dist/runtime/spice-handles.js +2 -0
  141. package/backend-wasm/dist/runtime/virtual-outputs.d.ts +16 -0
  142. package/backend-wasm/dist/runtime/virtual-outputs.js +35 -0
  143. package/backend-wasm/dist/tspice_backend_wasm.node.js +3 -3
  144. package/backend-wasm/dist/tspice_backend_wasm.wasm +0 -0
  145. package/backend-wasm/dist/tspice_backend_wasm.web.js +1 -1
  146. package/core/dist/.tsbuildinfo +1 -1
  147. package/core/dist/index.d.ts +19 -8
  148. package/core/dist/index.js +19 -8
  149. package/dist/.tsbuildinfo +1 -1
  150. package/dist/backend.d.ts +5 -0
  151. package/dist/clients/createSpiceAsyncFromTransport.d.ts +5 -0
  152. package/dist/clients/createSpiceAsyncFromTransport.js +90 -0
  153. package/dist/clients/createSpiceSyncFromTransport.d.ts +5 -0
  154. package/dist/clients/createSpiceSyncFromTransport.js +88 -0
  155. package/dist/clients/spiceClients.d.ts +59 -0
  156. package/dist/clients/spiceClients.js +292 -0
  157. package/dist/errors.d.ts +4 -0
  158. package/dist/errors.js +4 -0
  159. package/dist/index.d.ts +10 -7
  160. package/dist/index.js +4 -3
  161. package/dist/kernels/defaultKernelPathFromUrl.d.ts +8 -0
  162. package/dist/kernels/defaultKernelPathFromUrl.js +32 -0
  163. package/dist/kernels/kernelPack.d.ts +88 -0
  164. package/dist/kernels/kernelPack.js +122 -0
  165. package/dist/kernels/kernels.d.ts +98 -0
  166. package/dist/kernels/kernels.js +217 -0
  167. package/dist/kernels/naifKernelId.d.ts +2 -0
  168. package/dist/kernels/naifKernelId.js +2 -0
  169. package/dist/kit/math/mat3.d.ts +9 -1
  170. package/dist/kit/math/mat3.js +9 -1
  171. package/dist/kit/spice/create-kit.d.ts +1 -0
  172. package/dist/kit/spice/create-kit.js +1 -0
  173. package/dist/kit/spice/frames.d.ts +1 -0
  174. package/dist/kit/spice/frames.js +1 -0
  175. package/dist/kit/spice/kernels.d.ts +1 -0
  176. package/dist/kit/spice/kernels.js +1 -0
  177. package/dist/kit/spice/state.d.ts +2 -1
  178. package/dist/kit/spice/state.js +8 -4
  179. package/dist/kit/spice/time.d.ts +1 -0
  180. package/dist/kit/spice/time.js +1 -0
  181. package/dist/kit/types/spice-types.d.ts +18 -1
  182. package/dist/spice.d.ts +10 -1
  183. package/dist/spice.js +41 -0
  184. package/dist/transport/caching/policy.d.ts +16 -0
  185. package/dist/transport/caching/policy.js +77 -0
  186. package/dist/transport/caching/withCaching.d.ts +125 -0
  187. package/dist/transport/caching/withCaching.js +335 -0
  188. package/dist/transport/caching/withCachingSync.d.ts +24 -0
  189. package/dist/transport/caching/withCachingSync.js +161 -0
  190. package/dist/transport/rpc/protocol.d.ts +35 -0
  191. package/dist/transport/rpc/protocol.js +56 -0
  192. package/dist/transport/rpc/taskScheduling.d.ts +20 -0
  193. package/dist/transport/rpc/taskScheduling.js +98 -0
  194. package/dist/transport/rpc/valueCodec.d.ts +5 -0
  195. package/dist/transport/rpc/valueCodec.js +106 -0
  196. package/dist/transport/types.d.ts +7 -0
  197. package/dist/transport/types.js +2 -0
  198. package/dist/types.d.ts +8 -5
  199. package/dist/types.js +2 -1
  200. package/dist/worker/browser/createSpiceWorker.d.ts +22 -0
  201. package/dist/worker/browser/createSpiceWorker.js +41 -0
  202. package/dist/worker/browser/createSpiceWorkerClient.d.ts +40 -0
  203. package/dist/worker/browser/createSpiceWorkerClient.js +99 -0
  204. package/dist/worker/browser/spiceWorkerEntry.d.ts +2 -0
  205. package/dist/worker/browser/spiceWorkerEntry.js +129 -0
  206. package/dist/worker/browser/spiceWorkerInlineSource.d.ts +2 -0
  207. package/dist/worker/browser/spiceWorkerInlineSource.js +4 -0
  208. package/dist/worker/index.d.ts +10 -0
  209. package/dist/worker/index.js +7 -0
  210. package/dist/worker/transport/createWorkerTransport.d.ts +69 -0
  211. package/dist/worker/transport/createWorkerTransport.js +398 -0
  212. package/dist/worker/transport/exposeTransportToWorker.d.ts +51 -0
  213. package/dist/worker/transport/exposeTransportToWorker.js +196 -0
  214. package/package.json +4 -4
@@ -0,0 +1,98 @@
1
+ import type { KernelPack } from "./kernelPack.js";
2
+ import type { NaifKernelId } from "./naifKernelId.js";
3
+ export type KernelsNaifOptions = {
4
+ /**
5
+ * Kernel URL prefix. This is a *build-time* prefix that is concatenated with
6
+ * each leaf-path kernel id.
7
+ *
8
+ * Examples:
9
+ * - `https://naif.jpl.nasa.gov/pub/naif/generic_kernels/`
10
+ * - `kernels/naif/` (relative; resolved at load time using `baseUrl`)
11
+ *
12
+ * Defaults to NAIF's canonical `generic_kernels` host.
13
+ */
14
+ origin?: string;
15
+ /**
16
+ * Optional directory-style base used at *load time* to resolve relative
17
+ * kernel URLs.
18
+ *
19
+ * This becomes `KernelPack.baseUrl`.
20
+ */
21
+ baseUrl?: string;
22
+ /**
23
+ * Base virtual path used when loading kernels into tspice.
24
+ *
25
+ * Defaults to `""` so leaf ids map directly to paths like
26
+ * `"lsk/naif0012.tls"`.
27
+ */
28
+ pathBase?: string;
29
+ };
30
+ export type NaifKernelCatalog = {
31
+ pick(id: NaifKernelId): KernelPack;
32
+ pick(ids: readonly [NaifKernelId, ...NaifKernelId[]]): KernelPack;
33
+ pick(first: NaifKernelId, ...rest: readonly NaifKernelId[]): KernelPack;
34
+ };
35
+ export declare const TSPICE_KERNEL_IDS: readonly ["lsk/naif0012.tls", "pck/pck00011.tpc", "spk/planets/de432s.bsp"];
36
+ export type TspiceKernelId = (typeof TSPICE_KERNEL_IDS)[number];
37
+ export type TspiceKernelCatalog = {
38
+ pick(id: TspiceKernelId): KernelPack;
39
+ pick(ids: readonly [TspiceKernelId, ...TspiceKernelId[]]): KernelPack;
40
+ pick(first: TspiceKernelId, ...rest: readonly TspiceKernelId[]): KernelPack;
41
+ };
42
+ export type KernelsCustomOptions = {
43
+ /** Kernel URL prefix used for string ids (see `pick(...)`). */
44
+ origin: string;
45
+ /** Optional base URL used when resolving relative kernel URLs. */
46
+ baseUrl?: string;
47
+ /** Virtual path prefix used when mapping string ids to `kernel.path`. */
48
+ pathBase: string;
49
+ };
50
+ export type CustomKernelEntry = {
51
+ /** Explicit URL (or URL path) for a kernel. */
52
+ url: string;
53
+ /** Explicit virtual path for the kernel (defaults to a stable hashed path). */
54
+ path?: string;
55
+ };
56
+ export type CustomKernelPick = string | CustomKernelEntry;
57
+ export type CustomKernelCatalogUrlOnly = {
58
+ pick(entry: CustomKernelEntry): KernelPack;
59
+ pick(entries: readonly [CustomKernelEntry, ...CustomKernelEntry[]]): KernelPack;
60
+ pick(first: CustomKernelEntry, ...rest: readonly CustomKernelEntry[]): KernelPack;
61
+ };
62
+ export type CustomKernelCatalog = {
63
+ pick(id: string): KernelPack;
64
+ pick(ids: readonly [string, ...string[]]): KernelPack;
65
+ pick(entries: readonly [CustomKernelPick, ...CustomKernelPick[]]): KernelPack;
66
+ pick(first: CustomKernelPick, ...rest: readonly CustomKernelPick[]): KernelPack;
67
+ };
68
+ export declare const kernels: {
69
+ /**
70
+ * Typed NAIF `generic_kernels` catalog.
71
+ *
72
+ * Notes:
73
+ * - IDs are NAIF leaf paths like `"lsk/naif0012.tls"`.
74
+ * - `pick(...)` preserves caller-provided ordering.
75
+ */
76
+ readonly naif: (opts?: KernelsNaifOptions) => NaifKernelCatalog;
77
+ /**
78
+ * Zero-config, browser-friendly curated kernel catalog.
79
+ *
80
+ * This is intended for quickstarts/demos and is **not recommended for
81
+ * production**. For production, self-host kernels (or proxy) and use
82
+ * `kernels.naif()`/`kernels.naif({ origin?, pathBase?, baseUrl? })` or
83
+ * `kernels.custom(...)`.
84
+ */
85
+ readonly tspice: () => TspiceKernelCatalog;
86
+ /**
87
+ * Configurable catalog for application/mission-specific kernels.
88
+ *
89
+ * - String ids are mapped as `{ url: origin + id, path: pathBase + id }`.
90
+ * - Explicit `{ url, path? }` entries are passed through; when `path` is
91
+ * omitted it defaults to a stable hashed path.
92
+ */
93
+ readonly custom: {
94
+ (): CustomKernelCatalogUrlOnly;
95
+ (opts: KernelsCustomOptions): CustomKernelCatalog;
96
+ };
97
+ };
98
+ //# sourceMappingURL=kernels.d.ts.map
@@ -0,0 +1,217 @@
1
+ import { defaultKernelPathFromUrl } from "./defaultKernelPathFromUrl.js";
2
+ function ensureTrailingSlash(base) {
3
+ if (base === "")
4
+ return "";
5
+ return base.endsWith("/") ? base : `${base}/`;
6
+ }
7
+ const ABSOLUTE_URL_RE = /^[A-Za-z][A-Za-z\d+.-]*:/;
8
+ function isAbsoluteKernelUrlPrefix(kernelUrlPrefix) {
9
+ if (kernelUrlPrefix.startsWith("//")) {
10
+ throw new Error(`kernels.*(): protocol-relative URLs (\"//...\") are not supported in Node. ` +
11
+ `Node requires scheme-based URLs like \"https://...\". Got: ${kernelUrlPrefix}`);
12
+ }
13
+ return ABSOLUTE_URL_RE.test(kernelUrlPrefix);
14
+ }
15
+ function normalizeOrigin(origin) {
16
+ // Allow empty string (caller may want to provide fully-qualified IDs), but
17
+ // reject whitespace-only values which are almost always mistakes.
18
+ if (origin === "")
19
+ return "";
20
+ const trimmed = origin.trim();
21
+ if (!trimmed) {
22
+ throw new Error("kernels.*(): origin cannot be blank/whitespace");
23
+ }
24
+ return ensureTrailingSlash(trimmed);
25
+ }
26
+ function normalizePathBase(pathBase) {
27
+ // Allow empty string (no virtual path prefix), but reject whitespace-only.
28
+ if (pathBase === "")
29
+ return "";
30
+ const trimmed = pathBase.trim();
31
+ if (!trimmed) {
32
+ throw new Error("kernels.*(): pathBase cannot be blank/whitespace");
33
+ }
34
+ return ensureTrailingSlash(trimmed);
35
+ }
36
+ function normalizeOptionalBaseUrl(baseUrl) {
37
+ const trimmed = baseUrl?.trim();
38
+ return trimmed ? trimmed : undefined;
39
+ }
40
+ function assertDirectoryStyleBaseUrl(baseUrl) {
41
+ const isProtocolRelative = baseUrl.startsWith("//");
42
+ const hasScheme = ABSOLUTE_URL_RE.test(baseUrl);
43
+ if (hasScheme || isProtocolRelative) {
44
+ const base = hasScheme ? new URL(baseUrl) : new URL(baseUrl, "https://tspice.invalid");
45
+ if (!base.pathname.endsWith("/")) {
46
+ throw new Error(`kernels.*(): absolute baseUrl must be directory-style (pathname must end with "/"): ${baseUrl}`);
47
+ }
48
+ return;
49
+ }
50
+ if (baseUrl.startsWith("/")) {
51
+ const base = new URL(baseUrl, "https://tspice.invalid");
52
+ if (!base.pathname.endsWith("/")) {
53
+ throw new Error(`kernels.*(): path-absolute baseUrl must be directory-style (pathname must end with "/"): ${baseUrl}`);
54
+ }
55
+ return;
56
+ }
57
+ if (!baseUrl.endsWith("/")) {
58
+ throw new Error(`kernels.*(): baseUrl must be directory-style (end with "/"): ${baseUrl}`);
59
+ }
60
+ }
61
+ function normalizePickArgs(first, rest) {
62
+ if (first === undefined) {
63
+ throw new Error("pick(): expected at least one id/entry");
64
+ }
65
+ if (Array.isArray(first)) {
66
+ if (rest.length) {
67
+ throw new Error("pick(): when passing an array, do not pass additional arguments");
68
+ }
69
+ if (first.length === 0) {
70
+ throw new Error("pick(): expected at least one id/entry");
71
+ }
72
+ // Defensive copy to avoid time-of-check/time-of-use surprises if the caller
73
+ // mutates their input array while `pick()` is processing.
74
+ return [...first];
75
+ }
76
+ // TS can't fully narrow `first` to `T` here because `T` itself could be an
77
+ // array type. In practice our `pick` ids/entries are never arrays.
78
+ return [first, ...rest];
79
+ }
80
+ function dedupePreserveOrder(items, key) {
81
+ const out = [];
82
+ const seen = new Set();
83
+ for (const item of items) {
84
+ const k = key(item);
85
+ if (seen.has(k))
86
+ continue;
87
+ seen.add(k);
88
+ out.push(item);
89
+ }
90
+ return out;
91
+ }
92
+ const DEFAULT_NAIF_ORIGIN = "https://naif.jpl.nasa.gov/pub/naif/generic_kernels/";
93
+ const DEFAULT_NAIF_PATH_BASE = "";
94
+ // --- tspice (curated) ---
95
+ const DEFAULT_TSPICE_ORIGIN = "https://tspice-viewer.ryboso.me/kernels/naif/";
96
+ const DEFAULT_TSPICE_PATH_BASE = "naif/";
97
+ export const TSPICE_KERNEL_IDS = [
98
+ // Load order matters (LSK -> PCK -> SPK), but we do **not** reorder; callers
99
+ // can intentionally change ordering if they need to.
100
+ "lsk/naif0012.tls",
101
+ "pck/pck00011.tpc",
102
+ "spk/planets/de432s.bsp",
103
+ ];
104
+ function buildLeafPathKernel(id, opts) {
105
+ return {
106
+ url: `${opts.origin}${id}`,
107
+ path: `${opts.pathBase}${id}`,
108
+ };
109
+ }
110
+ export const kernels = {
111
+ /**
112
+ * Typed NAIF `generic_kernels` catalog.
113
+ *
114
+ * Notes:
115
+ * - IDs are NAIF leaf paths like `"lsk/naif0012.tls"`.
116
+ * - `pick(...)` preserves caller-provided ordering.
117
+ */
118
+ naif: (opts) => {
119
+ const origin = normalizeOrigin(opts?.origin ?? DEFAULT_NAIF_ORIGIN);
120
+ const pathBase = normalizePathBase(opts?.pathBase ?? DEFAULT_NAIF_PATH_BASE);
121
+ const rawBaseUrl = normalizeOptionalBaseUrl(opts?.baseUrl);
122
+ const baseUrl = isAbsoluteKernelUrlPrefix(origin) ? undefined : rawBaseUrl;
123
+ if (baseUrl !== undefined) {
124
+ assertDirectoryStyleBaseUrl(baseUrl);
125
+ }
126
+ const pickImpl = (first, rest) => {
127
+ const ids = dedupePreserveOrder(normalizePickArgs(first, rest), (id) => id);
128
+ return {
129
+ ...(baseUrl === undefined ? {} : { baseUrl }),
130
+ kernels: ids.map((id) => buildLeafPathKernel(id, { origin, pathBase })),
131
+ };
132
+ };
133
+ return {
134
+ pick: ((first, ...rest) => pickImpl(first, rest)),
135
+ };
136
+ },
137
+ /**
138
+ * Zero-config, browser-friendly curated kernel catalog.
139
+ *
140
+ * This is intended for quickstarts/demos and is **not recommended for
141
+ * production**. For production, self-host kernels (or proxy) and use
142
+ * `kernels.naif()`/`kernels.naif({ origin?, pathBase?, baseUrl? })` or
143
+ * `kernels.custom(...)`.
144
+ */
145
+ tspice: () => {
146
+ const origin = ensureTrailingSlash(DEFAULT_TSPICE_ORIGIN);
147
+ const pathBase = ensureTrailingSlash(DEFAULT_TSPICE_PATH_BASE);
148
+ const allowed = new Set(TSPICE_KERNEL_IDS);
149
+ const pickImpl = (first, rest) => {
150
+ const ids = dedupePreserveOrder(normalizePickArgs(first, rest), (id) => id);
151
+ for (const id of ids) {
152
+ if (!allowed.has(id)) {
153
+ throw new Error(`kernels.tspice().pick(): unknown id ${JSON.stringify(id)}. ` +
154
+ `This catalog is intentionally small. For the full NAIF inventory, use kernels.naif().pick(...).`);
155
+ }
156
+ }
157
+ return {
158
+ kernels: ids.map((id) => buildLeafPathKernel(id, { origin, pathBase })),
159
+ };
160
+ };
161
+ return {
162
+ pick: ((first, ...rest) => pickImpl(first, rest)),
163
+ };
164
+ },
165
+ /**
166
+ * Configurable catalog for application/mission-specific kernels.
167
+ *
168
+ * - String ids are mapped as `{ url: origin + id, path: pathBase + id }`.
169
+ * - Explicit `{ url, path? }` entries are passed through; when `path` is
170
+ * omitted it defaults to a stable hashed path.
171
+ */
172
+ custom: (() => {
173
+ function custom(opts) {
174
+ const origin = opts === undefined ? undefined : normalizeOrigin(opts.origin);
175
+ const pathBase = opts === undefined ? undefined : normalizePathBase(opts.pathBase);
176
+ const rawBaseUrl = opts === undefined ? undefined : normalizeOptionalBaseUrl(opts.baseUrl);
177
+ const pickImplWithOpts = (first, rest) => {
178
+ const entries = dedupePreserveOrder(normalizePickArgs(first, rest), (entry) => (typeof entry === "string" ? `id:${entry}` : `url:${entry.url}`));
179
+ const kernelsOut = entries.map((entry) => {
180
+ if (typeof entry === "string") {
181
+ // Safety guard: callers can always bypass TS.
182
+ if (origin === undefined || pathBase === undefined) {
183
+ throw new Error("kernels.custom().pick(): string ids require kernels.custom({ origin, pathBase, baseUrl? })");
184
+ }
185
+ return buildLeafPathKernel(entry, { origin, pathBase });
186
+ }
187
+ return {
188
+ url: entry.url,
189
+ path: entry.path ?? defaultKernelPathFromUrl(entry.url),
190
+ };
191
+ });
192
+ // If the pack contains any relative-ish kernel URLs (including root-relative
193
+ // `/...`), include the configured baseUrl so load-time resolution works.
194
+ const baseUrl = rawBaseUrl !== undefined && kernelsOut.some((k) => !isAbsoluteKernelUrlPrefix(k.url))
195
+ ? rawBaseUrl
196
+ : undefined;
197
+ if (baseUrl !== undefined) {
198
+ assertDirectoryStyleBaseUrl(baseUrl);
199
+ }
200
+ return {
201
+ ...(baseUrl === undefined ? {} : { baseUrl }),
202
+ kernels: kernelsOut,
203
+ };
204
+ };
205
+ if (opts === undefined) {
206
+ return {
207
+ pick: ((first, ...rest) => pickImplWithOpts(first, rest)),
208
+ };
209
+ }
210
+ return {
211
+ pick: ((first, ...rest) => pickImplWithOpts(first, rest)),
212
+ };
213
+ }
214
+ return custom;
215
+ })(),
216
+ };
217
+ //# sourceMappingURL=kernels.js.map
@@ -0,0 +1,2 @@
1
+ export type NaifKernelId = "dsk/asteroids/eros/near-a-msi-5-erosshape-v1_0_512q.bds" | "dsk/asteroids/eros/near-a-msi-5-erosshape-v1_0_64q.bds" | "dsk/asteroids/itokawa/hay_a_amica_5_itokawashape_v1_0_512q.bds" | "dsk/asteroids/itokawa/hay_a_amica_5_itokawashape_v1_0_64q.bds" | "dsk/asteroids/lutetia/a_old_versions/ro-a-osinac_osiwac-5-lutetia-shape-v1_0_002m.bds" | "dsk/asteroids/lutetia/a_old_versions/ro-a-osinac_osiwac-5-lutetia-shape-v1_0_006k.bds" | "dsk/asteroids/lutetia/a_old_versions/ro-a-osinac_osiwac-5-lutetia-shape-v1_0_780k.bds" | "dsk/asteroids/steins/a_old_versions/ro-a-osinac_osiwac-5-steins-shape-v1_0_20k.bds" | "dsk/asteroids/steins/a_old_versions/steins_0.7_4.bds" | "dsk/asteroids/vesta/vesta_gaskell_256.bds" | "dsk/asteroids/vesta/vesta_thomas_1997.bds" | "dsk/comets/churyumov-gerasimenko/a_old_versions/churyumov-gerasimenko_512.bds" | "dsk/satellites/phobos_2014_09_22.bds" | "dsk/satellites/phobos_3_3.bds" | "dsk/satellites/phobos512.bds" | "fk/planets/earth_assoc_itrf93.tf" | "fk/satellites/a_old_versions/jup344_nameid.tf" | "fk/satellites/a_old_versions/jup344-s2003_j24_nameid.tf" | "fk/satellites/a_old_versions/jup346_nameid.tf" | "fk/satellites/a_old_versions/moon_060721.tf" | "fk/satellites/a_old_versions/moon_071218.tf" | "fk/satellites/a_old_versions/moon_de440_200625.tf" | "fk/satellites/a_old_versions/moon_de440_220930.tf" | "fk/satellites/a_old_versions/nep103_nameid.tf" | "fk/satellites/a_old_versions/sat452_nameid.tf" | "fk/satellites/a_old_versions/sat453_nameid.tf" | "fk/satellites/a_old_versions/sat454_nameid.tf" | "fk/satellites/jup347_nameid.tf" | "fk/satellites/moon_080317.tf" | "fk/satellites/moon_assoc_me.tf" | "fk/satellites/moon_assoc_pa.tf" | "fk/satellites/moon_de440_250416.tf" | "fk/satellites/nep095_nameid.tf" | "fk/satellites/nep104_nameid.tf" | "fk/satellites/sat455_nameid.tf" | "fk/satellites/sat456_nameid.tf" | "fk/satellites/sat457_nameid.tf" | "fk/satellites/ura117_nameid.tf" | "fk/stations/a_old_versions/dss_35_36_prelim_itrf93_140604.tf" | "fk/stations/a_old_versions/dss_35_36_prelim_itrf93_140620.tf" | "fk/stations/a_old_versions/dss_53_prelim_itrf93_201018.tf" | "fk/stations/a_old_versions/dss_56_prelim_itrf93_201018.tf" | "fk/stations/a_old_versions/earth_topo_040916.tf" | "fk/stations/a_old_versions/earth_topo_050714_v2.tf" | "fk/stations/a_old_versions/earth_topo_050714.tf" | "fk/stations/a_old_versions/misasa_54m_itrf93_210121.tf" | "fk/stations/dss_17_prelim_itrf93_161110.tf" | "fk/stations/dss_17_prelim_itrf93_190814.tf" | "fk/stations/dss_23_placeholder_itrf93_201017.tf" | "fk/stations/dss_30_itrf93_210201.tf" | "fk/stations/dss_59_prelim_itrf93_220921.tf" | "fk/stations/dss_69_prelim_itrf93_201215.tf" | "fk/stations/earth_topo_201023.tf" | "fk/stations/ndosl_140530_v01.tf" | "fk/stations/ndosl_190716_v01.tf" | "fk/stations/ndosl_190716_v02.tf" | "lsk/a_old_versions/naif0007.tls" | "lsk/a_old_versions/naif0008.tls" | "lsk/a_old_versions/naif0009.tls" | "lsk/a_old_versions/naif0010.tls" | "lsk/a_old_versions/naif0011.tls" | "lsk/latest_leapseconds.tls" | "lsk/naif0011.tls" | "lsk/naif0012.tls" | "pck/a_old_versions/earth_031228_231229_predict.bpc" | "pck/a_old_versions/earth_060526_370526_predict.bpc" | "pck/a_old_versions/earth_070425_370426_predict.bpc" | "pck/a_old_versions/earth_1962_240827_2124_combined.bpc" | "pck/a_old_versions/earth_200101_990628_predict.bpc" | "pck/a_old_versions/earth_200101_990825_predict.bpc" | "pck/a_old_versions/earth_200101_990827_predict.bpc" | "pck/a_old_versions/earth_620120_240827.bpc" | "pck/a_old_versions/earth_720101_031229.bpc" | "pck/a_old_versions/earth_720101_070426.bpc" | "pck/a_old_versions/earth_720101_070527.bpc" | "pck/a_old_versions/earth_720101_230601.bpc" | "pck/a_old_versions/lunar_de403s_pa_v0.bpc" | "pck/a_old_versions/pck00003.tpc" | "pck/a_old_versions/pck00005.tpc" | "pck/a_old_versions/pck00006.tpc" | "pck/a_old_versions/pck00007.tpc" | "pck/a_old_versions/pck00008.tpc" | "pck/a_old_versions/pck00009.tpc" | "pck/a_old_versions/preliminary_pck00004.tpc" | "pck/de-403-masses.tpc" | "pck/earth_000101_260514_260215.bpc" | "pck/earth_1962_250826_2125_combined.bpc" | "pck/earth_2025_250826_2125_predict.bpc" | "pck/earth_620120_250826.bpc" | "pck/earth_fixed.tf" | "pck/earth_latest_high_prec.bpc" | "pck/gm_de431.tpc" | "pck/gm_de440.tpc" | "pck/Gravity.tpc" | "pck/mars_iau2000_v1.tpc" | "pck/moon_pa_de403_1950-2198.bpc" | "pck/moon_pa_de418_1950-2050.bpc" | "pck/moon_pa_de421_1900-2050.bpc" | "pck/moon_pa_de440_200625.bpc" | "pck/pck00010.tpc" | "pck/pck00011_n0066.tpc" | "pck/pck00011.tpc" | "spk/asteroids/a_old_versions/ceres_1900_2100.bsp" | "spk/asteroids/a_old_versions/ceres-2003-2016.bsp" | "spk/asteroids/a_old_versions/codes_300ast_20061020.bsp" | "spk/asteroids/a_old_versions/codes_300ast_20061020.tf" | "spk/asteroids/a_old_versions/eros_1900_2100.bsp" | "spk/asteroids/a_old_versions/eros9633.bsp" | "spk/asteroids/a_old_versions/erosToJan2005.bsp" | "spk/asteroids/a_old_versions/kleopatra_1900_2100.bsp" | "spk/asteroids/a_old_versions/kleopatra_2000_2010.bsp" | "spk/asteroids/a_old_versions/minoriso.bsp" | "spk/asteroids/a_old_versions/mn4_2000-2100.bsp" | "spk/asteroids/a_old_versions/pallas_1900_2100.bsp" | "spk/asteroids/a_old_versions/pallas-2003-2015.bsp" | "spk/asteroids/a_old_versions/vesta_1900_2100.bsp" | "spk/asteroids/a_old_versions/vesta_for_ds1.bsp" | "spk/asteroids/a_old_versions/vesta-2003-2013.bsp" | "spk/asteroids/a_old_versions/vestlute.bsp" | "spk/asteroids/codes_300ast_20100725.bsp" | "spk/asteroids/codes_300ast_20100725.tf" | "spk/comets/a_old_versions/borrelly.bsp" | "spk/comets/a_old_versions/linear1999s4_Jul31.bsp" | "spk/comets/a_old_versions/minoriso.bsp" | "spk/comets/a_old_versions/pcomets_v1_ieee.bsp" | "spk/comets/a_old_versions/siding_spring_v1.bsp" | "spk/comets/a_old_versions/siding_spring_v2.bsp" | "spk/comets/a_old_versions/swift-tuttle_1730-2010.bsp" | "spk/comets/a_old_versions/tempel1_2000_2020.bsp" | "spk/comets/C_G_1000012_2012_2017.bsp" | "spk/comets/c2013a1_s105_merged.bsp" | "spk/comets/ison.bsp" | "spk/comets/siding_spring_8-19-14.bsp" | "spk/comets/siding_spring_s46.bsp" | "spk/lagrange_point/a_old_versions/L1_de431.bsp" | "spk/lagrange_point/a_old_versions/L2_de431.bsp" | "spk/lagrange_point/a_old_versions/L4_de431.bsp" | "spk/lagrange_point/a_old_versions/L5_de431.bsp" | "spk/lagrange_point/L1_de441.bsp" | "spk/lagrange_point/L2_de441.bsp" | "spk/lagrange_point/L4_de441.bsp" | "spk/lagrange_point/L5_de441.bsp" | "spk/planets/a_old_versions/de118.bsp" | "spk/planets/a_old_versions/de125.bsp" | "spk/planets/a_old_versions/de130.bsp" | "spk/planets/a_old_versions/de200.bsp" | "spk/planets/a_old_versions/de245_1960_1980.bsp" | "spk/planets/a_old_versions/de245_1990_2010.bsp" | "spk/planets/a_old_versions/de403_2000-2020.bsp" | "spk/planets/a_old_versions/de403.bsp" | "spk/planets/a_old_versions/de403s.bsp" | "spk/planets/a_old_versions/de405.bsp" | "spk/planets/a_old_versions/de405s.bsp" | "spk/planets/a_old_versions/de406s.bsp" | "spk/planets/a_old_versions/de408.bsp" | "spk/planets/a_old_versions/de410.bsp" | "spk/planets/a_old_versions/de410mini.bsp" | "spk/planets/a_old_versions/de410s.bsp" | "spk/planets/a_old_versions/de413.bsp" | "spk/planets/a_old_versions/de414.bsp" | "spk/planets/a_old_versions/de418.bsp" | "spk/planets/a_old_versions/de421.bsp" | "spk/planets/a_old_versions/de423.bsp" | "spk/planets/a_old_versions/de721_full.bsp" | "spk/planets/de430.bsp" | "spk/planets/de431_part-1.bsp" | "spk/planets/de431_part-2.bsp" | "spk/planets/de432s.bsp" | "spk/planets/de435.bsp" | "spk/planets/de438.bsp" | "spk/planets/de440.bsp" | "spk/planets/de440s.bsp" | "spk/planets/de441_part-1.bsp" | "spk/planets/de441_part-2.bsp" | "spk/planets/de442.bsp" | "spk/planets/de442s.bsp" | "spk/satellites/a_old_versions/jup068.bsp" | "spk/satellites/a_old_versions/jup069.bsp" | "spk/satellites/a_old_versions/jup073-hst.bsp" | "spk/satellites/a_old_versions/jup073s.bsp" | "spk/satellites/a_old_versions/jup100.bsp" | "spk/satellites/a_old_versions/jup104.bsp" | "spk/satellites/a_old_versions/jup120_1996-2010.bsp" | "spk/satellites/a_old_versions/jup147s.bsp" | "spk/satellites/a_old_versions/jup164_20year.bsp" | "spk/satellites/a_old_versions/jup166.bsp" | "spk/satellites/a_old_versions/jup172.bsp" | "spk/satellites/a_old_versions/jup202_2000_2010.bsp" | "spk/satellites/a_old_versions/jup204.bsp" | "spk/satellites/a_old_versions/jup214.bsp" | "spk/satellites/a_old_versions/jup215.bsp" | "spk/satellites/a_old_versions/jup219.bsp" | "spk/satellites/a_old_versions/jup230-rocks.bsp" | "spk/satellites/a_old_versions/jup230-short.bsp" | "spk/satellites/a_old_versions/jup230.bsp" | "spk/satellites/a_old_versions/jup230l.bsp" | "spk/satellites/a_old_versions/jup251.bsp" | "spk/satellites/a_old_versions/jup252.bsp" | "spk/satellites/a_old_versions/jup253.bsp" | "spk/satellites/a_old_versions/jup254.bsp" | "spk/satellites/a_old_versions/jup255.bsp" | "spk/satellites/a_old_versions/jup256.bsp" | "spk/satellites/a_old_versions/jup261.bsp" | "spk/satellites/a_old_versions/jup262.bsp" | "spk/satellites/a_old_versions/jup263.bsp" | "spk/satellites/a_old_versions/jup266.bsp" | "spk/satellites/a_old_versions/jup267.bsp" | "spk/satellites/a_old_versions/jup268.bsp" | "spk/satellites/a_old_versions/jup269.bsp" | "spk/satellites/a_old_versions/jup270.bsp" | "spk/satellites/a_old_versions/jup282-1.bsp" | "spk/satellites/a_old_versions/jup282.bsp" | "spk/satellites/a_old_versions/jup291.bsp" | "spk/satellites/a_old_versions/jup293.bsp" | "spk/satellites/a_old_versions/jup294.bsp" | "spk/satellites/a_old_versions/jup300.bsp" | "spk/satellites/a_old_versions/jup309.bsp" | "spk/satellites/a_old_versions/jup310_2004.bsp" | "spk/satellites/a_old_versions/jup310_2018.bsp" | "spk/satellites/a_old_versions/jup310_2021.bsp" | "spk/satellites/a_old_versions/jup310_2023.bsp" | "spk/satellites/a_old_versions/jup310.bsp" | "spk/satellites/a_old_versions/jup329.bsp" | "spk/satellites/a_old_versions/jup341.bsp" | "spk/satellites/a_old_versions/jup343.bsp" | "spk/satellites/a_old_versions/jup344-s2003_j24.bsp" | "spk/satellites/a_old_versions/jup344.bsp" | "spk/satellites/a_old_versions/jup345.bsp" | "spk/satellites/a_old_versions/jup346.bsp" | "spk/satellites/a_old_versions/jup365_2027.bsp" | "spk/satellites/a_old_versions/mar022-1.bsp" | "spk/satellites/a_old_versions/mar022-LONG.bsp" | "spk/satellites/a_old_versions/mar033_2000-2025.bsp" | "spk/satellites/a_old_versions/mar033-7.bsp" | "spk/satellites/a_old_versions/mar063.bsp" | "spk/satellites/a_old_versions/mar080.bsp" | "spk/satellites/a_old_versions/mar085.bsp" | "spk/satellites/a_old_versions/mar097.bsp" | "spk/satellites/a_old_versions/nep016-6.bsp" | "spk/satellites/a_old_versions/nep016-95-05.bsp" | "spk/satellites/a_old_versions/nep016.bsp" | "spk/satellites/a_old_versions/nep022.bsp" | "spk/satellites/a_old_versions/nep022m.bsp" | "spk/satellites/a_old_versions/nep029.bsp" | "spk/satellites/a_old_versions/nep050_old.bsp" | "spk/satellites/a_old_versions/nep050.bsp" | "spk/satellites/a_old_versions/nep055.bsp" | "spk/satellites/a_old_versions/nep056.bsp" | "spk/satellites/a_old_versions/nep057.bsp" | "spk/satellites/a_old_versions/nep076-long.bsp" | "spk/satellites/a_old_versions/nep076.bsp" | "spk/satellites/a_old_versions/nep077.bsp" | "spk/satellites/a_old_versions/nep078.bsp" | "spk/satellites/a_old_versions/nep081.bsp" | "spk/satellites/a_old_versions/nep085.bsp" | "spk/satellites/a_old_versions/nep086.bsp" | "spk/satellites/a_old_versions/nep087.bsp" | "spk/satellites/a_old_versions/nep088.bsp" | "spk/satellites/a_old_versions/nep090.bsp" | "spk/satellites/a_old_versions/nep101.bsp" | "spk/satellites/a_old_versions/nep102.bsp" | "spk/satellites/a_old_versions/nep103.bsp" | "spk/satellites/a_old_versions/pan_1998-2010.bsp" | "spk/satellites/a_old_versions/plu006-4.bsp" | "spk/satellites/a_old_versions/plu006-5.bsp" | "spk/satellites/a_old_versions/plu008_special.bsp" | "spk/satellites/a_old_versions/plu013.bsp" | "spk/satellites/a_old_versions/plu017.bsp" | "spk/satellites/a_old_versions/plu017xl.bsp" | "spk/satellites/a_old_versions/plu020.bsp" | "spk/satellites/a_old_versions/plu021.bsp" | "spk/satellites/a_old_versions/plu022.bsp" | "spk/satellites/a_old_versions/plu031.bsp" | "spk/satellites/a_old_versions/plu042.bsp" | "spk/satellites/a_old_versions/plu043.bsp" | "spk/satellites/a_old_versions/plu055.bsp" | "spk/satellites/a_old_versions/plu058.bsp" | "spk/satellites/a_old_versions/sat060.bsp" | "spk/satellites/a_old_versions/sat077_2000-2025.bsp" | "spk/satellites/a_old_versions/sat077-95-05.bsp" | "spk/satellites/a_old_versions/sat077s.bsp" | "spk/satellites/a_old_versions/sat080.bsp" | "spk/satellites/a_old_versions/sat081-4.bsp" | "spk/satellites/a_old_versions/sat081-98-05_2.bsp" | "spk/satellites/a_old_versions/sat086.bsp" | "spk/satellites/a_old_versions/sat098-s.bsp" | "spk/satellites/a_old_versions/sat101_9-71_8-11.bsp" | "spk/satellites/a_old_versions/sat101.bsp" | "spk/satellites/a_old_versions/sat124.bsp" | "spk/satellites/a_old_versions/sat132.bsp" | "spk/satellites/a_old_versions/sat133.bsp" | "spk/satellites/a_old_versions/sat134.bsp" | "spk/satellites/a_old_versions/sat143.bsp" | "spk/satellites/a_old_versions/sat185.bsp" | "spk/satellites/a_old_versions/sat186.bsp" | "spk/satellites/a_old_versions/sat192.bsp" | "spk/satellites/a_old_versions/sat196.bsp" | "spk/satellites/a_old_versions/sat199.bsp" | "spk/satellites/a_old_versions/sat207.bsp" | "spk/satellites/a_old_versions/sat215.bsp" | "spk/satellites/a_old_versions/sat227.bsp" | "spk/satellites/a_old_versions/sat238.bsp" | "spk/satellites/a_old_versions/sat240.bsp" | "spk/satellites/a_old_versions/sat242.bsp" | "spk/satellites/a_old_versions/sat245.bsp" | "spk/satellites/a_old_versions/sat246.bsp" | "spk/satellites/a_old_versions/sat247.bsp" | "spk/satellites/a_old_versions/sat248.bsp" | "spk/satellites/a_old_versions/sat251.bsp" | "spk/satellites/a_old_versions/sat252.bsp" | "spk/satellites/a_old_versions/sat252s.bsp" | "spk/satellites/a_old_versions/sat254.bsp" | "spk/satellites/a_old_versions/sat270.bsp" | "spk/satellites/a_old_versions/sat271.bsp" | "spk/satellites/a_old_versions/sat272.bsp" | "spk/satellites/a_old_versions/sat273.bsp" | "spk/satellites/a_old_versions/sat275.bsp" | "spk/satellites/a_old_versions/sat276.bsp" | "spk/satellites/a_old_versions/sat281.bsp" | "spk/satellites/a_old_versions/sat286.bsp" | "spk/satellites/a_old_versions/sat288.bsp" | "spk/satellites/a_old_versions/sat291.bsp" | "spk/satellites/a_old_versions/sat295.bsp" | "spk/satellites/a_old_versions/sat296.bsp" | "spk/satellites/a_old_versions/sat297.bsp" | "spk/satellites/a_old_versions/sat298.bsp" | "spk/satellites/a_old_versions/sat299.bsp" | "spk/satellites/a_old_versions/sat317.bsp" | "spk/satellites/a_old_versions/sat319.bsp" | "spk/satellites/a_old_versions/sat341.bsp" | "spk/satellites/a_old_versions/sat342-rocks.bsp" | "spk/satellites/a_old_versions/sat342.bsp" | "spk/satellites/a_old_versions/sat351.bsp" | "spk/satellites/a_old_versions/sat353-rocks-extended.bsp" | "spk/satellites/a_old_versions/sat353-rocks.bsp" | "spk/satellites/a_old_versions/sat353.bsp" | "spk/satellites/a_old_versions/sat354.bsp" | "spk/satellites/a_old_versions/sat357-rocks-merge.bsp" | "spk/satellites/a_old_versions/sat357.bsp" | "spk/satellites/a_old_versions/sat359l.bsp" | "spk/satellites/a_old_versions/sat360.bsp" | "spk/satellites/a_old_versions/sat361.bsp" | "spk/satellites/a_old_versions/sat362.bsp" | "spk/satellites/a_old_versions/sat363-rocks-merge.bsp" | "spk/satellites/a_old_versions/sat363.bsp" | "spk/satellites/a_old_versions/sat365.bsp" | "spk/satellites/a_old_versions/sat368-named_only.bsp" | "spk/satellites/a_old_versions/sat368.bsp" | "spk/satellites/a_old_versions/sat375.bsp" | "spk/satellites/a_old_versions/sat378.bsp" | "spk/satellites/a_old_versions/sat382-rocks-merge.bsp" | "spk/satellites/a_old_versions/sat382.bsp" | "spk/satellites/a_old_versions/sat393-rocks_pan.bsp" | "spk/satellites/a_old_versions/sat393.bsp" | "spk/satellites/a_old_versions/sat425.bsp" | "spk/satellites/a_old_versions/sat427.bsp" | "spk/satellites/a_old_versions/sat428.bsp" | "spk/satellites/a_old_versions/sat450.bsp" | "spk/satellites/a_old_versions/sat452.bsp" | "spk/satellites/a_old_versions/sat453.bsp" | "spk/satellites/a_old_versions/sat454.bsp" | "spk/satellites/a_old_versions/ura027-3.bsp" | "spk/satellites/a_old_versions/ura031.bsp" | "spk/satellites/a_old_versions/ura032.bsp" | "spk/satellites/a_old_versions/ura033.bsp" | "spk/satellites/a_old_versions/ura039.bsp" | "spk/satellites/a_old_versions/ura039m.bsp" | "spk/satellites/a_old_versions/ura042.bsp" | "spk/satellites/a_old_versions/ura045.bsp" | "spk/satellites/a_old_versions/ura063.bsp" | "spk/satellites/a_old_versions/ura064.bsp" | "spk/satellites/a_old_versions/ura071.bsp" | "spk/satellites/a_old_versions/ura072.bsp" | "spk/satellites/a_old_versions/ura074.bsp" | "spk/satellites/a_old_versions/ura083.bsp" | "spk/satellites/a_old_versions/ura086.bsp" | "spk/satellites/a_old_versions/ura090_1.bsp" | "spk/satellites/a_old_versions/ura090.bsp" | "spk/satellites/a_old_versions/ura091-rocks-merge.bsp" | "spk/satellites/a_old_versions/ura095.bsp" | "spk/satellites/a_old_versions/ura111.bsp" | "spk/satellites/a_old_versions/ura111l.bsp" | "spk/satellites/a_old_versions/ura112.bsp" | "spk/satellites/a_old_versions/ura115.bsp" | "spk/satellites/a_old_versions/ura116.bsp" | "spk/satellites/a_old_versions/ura117.bsp" | "spk/satellites/a_old_versions/ura182.bsp" | "spk/satellites/jup347.bsp" | "spk/satellites/jup365.bsp" | "spk/satellites/mar099.bsp" | "spk/satellites/mar099s.bsp" | "spk/satellites/nep095.bsp" | "spk/satellites/nep097.bsp" | "spk/satellites/nep097xl-801.bsp" | "spk/satellites/nep097xl-899.bsp" | "spk/satellites/nep101xl-802.bsp" | "spk/satellites/nep101xl.bsp" | "spk/satellites/nep104.bsp" | "spk/satellites/nep105.bsp" | "spk/satellites/plu060.bsp" | "spk/satellites/sat393_daphnis.bsp" | "spk/satellites/sat415.bsp" | "spk/satellites/sat441.bsp" | "spk/satellites/sat441xl_part-1.bsp" | "spk/satellites/sat441xl_part-2.bsp" | "spk/satellites/sat455.bsp" | "spk/satellites/sat456.bsp" | "spk/satellites/sat457.bsp" | "spk/satellites/ura111xl-701.bsp" | "spk/satellites/ura111xl-702.bsp" | "spk/satellites/ura111xl-703.bsp" | "spk/satellites/ura111xl-704.bsp" | "spk/satellites/ura111xl-705.bsp" | "spk/satellites/ura111xl-799.bsp" | "spk/satellites/ura116xl.bsp" | "spk/satellites/ura184_part-1.bsp" | "spk/satellites/ura184_part-2.bsp" | "spk/satellites/ura184_part-3.bsp" | "spk/stations/a_old_versions/dsnstns.bsp" | "spk/stations/a_old_versions/dss_17_prelim_itrf93_161110.bsp" | "spk/stations/a_old_versions/dss_35_36_prelim_itrf93_140604.bsp" | "spk/stations/a_old_versions/dss_35_36_prelim_itrf93_140620.bsp" | "spk/stations/a_old_versions/dss_53_prelim_itrf93_201018.bsp" | "spk/stations/a_old_versions/dss_56_prelim_itrf93_201018.bsp" | "spk/stations/a_old_versions/earthstn.bsp" | "spk/stations/a_old_versions/earthstns_fx_040916.bsp" | "spk/stations/a_old_versions/earthstns_fx_050714.bsp" | "spk/stations/a_old_versions/earthstns_itrf93_040916.bsp" | "spk/stations/a_old_versions/earthstns_itrf93_050714.bsp" | "spk/stations/a_old_versions/misasa_54m_itrf93_210121.bsp" | "spk/stations/a_old_versions/stations.bsp" | "spk/stations/dss_17_prelim_itrf93_190814.bsp" | "spk/stations/dss_23_placeholder_itrf93_201017.bsp" | "spk/stations/dss_30_itrf93_210201.bsp" | "spk/stations/dss_59_prelim_itrf93_220921.bsp" | "spk/stations/dss_69_prelim_itrf93_201215.bsp" | "spk/stations/earthstns_fx_201023.bsp" | "spk/stations/earthstns_itrf93_201023.bsp" | "spk/stations/ndosl_140530_v01.bsp" | "spk/stations/ndosl_190716_v01.bsp" | "spk/stations/ndosl_190716_v02.bsp" | "spk/tno/a_old_versions/tnosat_v001_20136108_jpl110_20220908.bsp" | "spk/tno/tnosat_v001_20000617_jpl082_20230601.bsp" | "spk/tno/tnosat_v001_20050000_jpl043_20220908.bsp" | "spk/tno/tnosat_v001_20090482_jpl043_20220908.bsp" | "spk/tno/tnosat_v001_20120347_jpl025_20220908.bsp" | "spk/tno/tnosat_v001_20136199_jpl080_20220908.bsp" | "spk/tno/tnosat_v001_20469705_jpl009_20220908.bsp" | "spk/tno/tnosat_v001_20612095_jpl006_20220908.bsp" | "spk/tno/tnosat_v001_20612687_jpl008_20220908.bsp" | "spk/tno/tnosat_v001_53031823_jpl010_20220908.bsp" | "spk/tno/tnosat_v001_53092511_jpl005_20220908.bsp" | "spk/tno/tnosat_v001b_20136108_jpl110_20221014.bsp" | "stars/hipparcos.xdb.Z" | "stars/ppm.xdb.Z" | "stars/tycho2.xdb.Z";
2
+ //# sourceMappingURL=naifKernelId.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=naifKernelId.js.map
@@ -7,17 +7,25 @@ import type { Mat3ColMajor, Mat3RowMajor } from "#backend-contract";
7
7
  * Implementation notes:
8
8
  * - We store a single canonical (row-major) layout.
9
9
  * - The column-major layout is derived lazily and cached.
10
- * - Returned layout arrays are frozen in dev builds to help catch invariant-breaking mutation.
10
+ * - Returned layout arrays are frozen in dev builds to help catch invariant-breaking mutation.
11
11
  */
12
12
  export declare class Mat3 {
13
13
  #private;
14
+ /** Create a Mat3 from cached row/col-major representations. Prefer the static constructors. */
14
15
  private constructor();
16
+ /** Create a {@link Mat3} from a row-major 3x3 array (input is cloned). */
15
17
  static fromRowMajor(m: Readonly<Mat3RowMajor>): Mat3;
18
+ /** Create a {@link Mat3} from a column-major 3x3 array (input is cloned). */
16
19
  static fromColMajor(m: Readonly<Mat3ColMajor>): Mat3;
20
+ /** Create an identity 3x3 matrix. */
17
21
  static identity(): Mat3;
22
+ /** Row-major representation (as a cached branded tuple). */
18
23
  get rowMajor(): Readonly<Mat3RowMajor>;
24
+ /** Column-major representation (computed lazily and cached). */
19
25
  get colMajor(): Readonly<Mat3ColMajor>;
26
+ /** Alias for {@link rowMajor}. */
20
27
  toRowMajor(): Readonly<Mat3RowMajor>;
28
+ /** Alias for {@link colMajor}. */
21
29
  toColMajor(): Readonly<Mat3ColMajor>;
22
30
  }
23
31
  //# sourceMappingURL=mat3.d.ts.map
@@ -31,31 +31,37 @@ function colMajorToRowMajor(m) {
31
31
  * Implementation notes:
32
32
  * - We store a single canonical (row-major) layout.
33
33
  * - The column-major layout is derived lazily and cached.
34
- * - Returned layout arrays are frozen in dev builds to help catch invariant-breaking mutation.
34
+ * - Returned layout arrays are frozen in dev builds to help catch invariant-breaking mutation.
35
35
  */
36
36
  export class Mat3 {
37
37
  #rowMajor;
38
38
  #colMajor;
39
+ /** Create a Mat3 from cached row/col-major representations. Prefer the static constructors. */
39
40
  constructor(rowMajor, colMajor) {
40
41
  this.#rowMajor = rowMajor;
41
42
  this.#colMajor = colMajor;
42
43
  }
44
+ /** Create a {@link Mat3} from a row-major 3x3 array (input is cloned). */
43
45
  static fromRowMajor(m) {
44
46
  return new Mat3(cloneRowMajor(m));
45
47
  }
48
+ /** Create a {@link Mat3} from a column-major 3x3 array (input is cloned). */
46
49
  static fromColMajor(m) {
47
50
  const colMajor = cloneColMajor(m);
48
51
  const rowMajor = colMajorToRowMajor(colMajor);
49
52
  return new Mat3(rowMajor, colMajor);
50
53
  }
54
+ /** Create an identity 3x3 matrix. */
51
55
  static identity() {
52
56
  return Mat3.fromRowMajor(brandMat3RowMajor([1, 0, 0, 0, 1, 0, 0, 0, 1], {
53
57
  label: "Mat3.identity",
54
58
  }));
55
59
  }
60
+ /** Row-major representation (as a cached branded tuple). */
56
61
  get rowMajor() {
57
62
  return this.#rowMajor;
58
63
  }
64
+ /** Column-major representation (computed lazily and cached). */
59
65
  get colMajor() {
60
66
  let colMajor = this.#colMajor;
61
67
  if (!colMajor) {
@@ -64,9 +70,11 @@ export class Mat3 {
64
70
  }
65
71
  return colMajor;
66
72
  }
73
+ /** Alias for {@link rowMajor}. */
67
74
  toRowMajor() {
68
75
  return this.rowMajor;
69
76
  }
77
+ /** Alias for {@link colMajor}. */
70
78
  toColMajor() {
71
79
  return this.colMajor;
72
80
  }
@@ -7,5 +7,6 @@ export type CreateKitOptions = {
7
7
  */
8
8
  byteBackedKernelPaths?: Set<string>;
9
9
  };
10
+ /** Create a high-level {@link SpiceKit} wrapper around a low-level {@link SpiceBackend}. */
10
11
  export declare function createKit(cspice: SpiceBackend, options?: CreateKitOptions): SpiceKit;
11
12
  //# sourceMappingURL=create-kit.d.ts.map
@@ -3,6 +3,7 @@ import { createFramesKit } from "./frames.js";
3
3
  import { createKernelKit } from "./kernels.js";
4
4
  import { createStateKit } from "./state.js";
5
5
  import { createTimeKit } from "./time.js";
6
+ /** Create a high-level {@link SpiceKit} wrapper around a low-level {@link SpiceBackend}. */
6
7
  export function createKit(cspice, options = {}) {
7
8
  return {
8
9
  ...createKernelKit(cspice, options.byteBackedKernelPaths ? { byteBackedKernelPaths: options.byteBackedKernelPaths } : {}),
@@ -1,6 +1,7 @@
1
1
  import type { SpiceBackend } from "#backend-contract";
2
2
  import type { FrameName, SpiceTime } from "../../types.js";
3
3
  import { Mat3 } from "../math/mat3.js";
4
+ /** Create frame helpers (pxform wrappers) for a given backend. */
4
5
  export declare function createFramesKit(cspice: SpiceBackend): {
5
6
  frameTransform(from: FrameName, to: FrameName, et: SpiceTime): Mat3;
6
7
  };
@@ -1,5 +1,6 @@
1
1
  import { wrapSpiceError } from "../../errors.js";
2
2
  import { Mat3 } from "../math/mat3.js";
3
+ /** Create frame helpers (pxform wrappers) for a given backend. */
3
4
  export function createFramesKit(cspice) {
4
5
  return {
5
6
  frameTransform: (from, to, et) => {
@@ -6,6 +6,7 @@ export type CreateKernelKitOptions = {
6
6
  */
7
7
  byteBackedKernelPaths?: Set<string>;
8
8
  };
9
+ /** Create kernel load/unload helpers for a given backend (with virtual-path normalization). */
9
10
  export declare function createKernelKit(cspice: SpiceBackend, options?: CreateKernelKitOptions): {
10
11
  loadKernel(kernel: KernelSource): void;
11
12
  unloadKernel(path: string): void;
@@ -1,5 +1,6 @@
1
1
  import { normalizeVirtualKernelPath } from "#core";
2
2
  import { wrapSpiceError } from "../../errors.js";
3
+ /** Create kernel load/unload helpers for a given backend (with virtual-path normalization). */
3
4
  export function createKernelKit(cspice, options = {}) {
4
5
  const byteBackedKernelPaths = options.byteBackedKernelPaths;
5
6
  return {
@@ -1,5 +1,6 @@
1
1
  import type { SpiceBackend } from "#backend-contract";
2
- import type { GetStateArgs, StateVector } from "../../types.js";
2
+ import { type GetStateArgs, type StateVector } from "../../types.js";
3
+ /** Create state-vector helpers (`spkezr` wrapper) for a given backend. */
3
4
  export declare function createStateKit(cspice: SpiceBackend): {
4
5
  getState(args: GetStateArgs): StateVector;
5
6
  };
@@ -1,22 +1,26 @@
1
1
  import { wrapSpiceError } from "../../errors.js";
2
- const DEFAULT_FRAME = "J2000";
2
+ import { J2000, } from "../../types.js";
3
+ const DEFAULT_FRAME = J2000;
3
4
  const DEFAULT_ABERRATION = "NONE";
4
5
  function splitState(state) {
5
6
  const position = [state[0], state[1], state[2]];
6
7
  const velocity = [state[3], state[4], state[5]];
7
8
  return { position, velocity };
8
9
  }
10
+ /** Create state-vector helpers (`spkezr` wrapper) for a given backend. */
9
11
  export function createStateKit(cspice) {
10
12
  return {
11
13
  getState: ({ target, observer, at, frame = DEFAULT_FRAME, aberration = DEFAULT_ABERRATION }) => {
12
14
  try {
13
- const { state, lt } = cspice.spkezr(target, at, frame, aberration, observer);
15
+ const targetStr = String(target);
16
+ const observerStr = String(observer);
17
+ const { state, lt } = cspice.spkezr(targetStr, at, frame, aberration, observerStr);
14
18
  const { position, velocity } = splitState(state);
15
19
  return {
16
20
  et: at,
17
21
  frame,
18
- target,
19
- observer,
22
+ target: targetStr,
23
+ observer: observerStr,
20
24
  aberration,
21
25
  position,
22
26
  velocity,
@@ -1,5 +1,6 @@
1
1
  import type { SpiceBackend } from "#backend-contract";
2
2
  import type { SpiceTime } from "../../types.js";
3
+ /** Create time conversion helpers (`str2et`/`et2utc` wrappers) for a given backend. */
3
4
  export declare function createTimeKit(cspice: SpiceBackend): {
4
5
  toolkitVersion(): string;
5
6
  utcToEt(utc: string): SpiceTime;
@@ -1,4 +1,5 @@
1
1
  import { wrapSpiceError } from "../../errors.js";
2
+ /** Create time conversion helpers (`str2et`/`et2utc` wrappers) for a given backend. */
2
3
  export function createTimeKit(cspice) {
3
4
  return {
4
5
  toolkitVersion: () => {
@@ -22,8 +22,12 @@ export type SpiceKit = {
22
22
  /** Convenience wrapper around `spkezr` that returns a structured state vector. */
23
23
  getState(args: GetStateArgs): StateVector;
24
24
  };
25
+ export type PromisifyFn<T> = T extends (...args: infer A) => infer R ? (...args: A) => Promise<Awaited<R>> : T;
26
+ export type PromisifyObject<T extends object> = {
27
+ [K in keyof T]: PromisifyFn<T[K]>;
28
+ };
25
29
  /**
26
- * Top-level `createSpice()` return type.
30
+ * Top-level sync-ish client type (returned by `spiceClients.toSync()`).
27
31
  */
28
32
  export type Spice = {
29
33
  /** Raw backend primitives (verbatim). */
@@ -31,4 +35,17 @@ export type Spice = {
31
35
  /** Higher-level helpers and typed conveniences. */
32
36
  kit: SpiceKit;
33
37
  };
38
+ /**
39
+ * Sync-ish client returned by `spiceClients.toSync()`.
40
+ */
41
+ export type SpiceSync = Spice;
42
+ /**
43
+ * Async client returned by `spiceClients.toAsync()` / `spiceClients.toWebWorker()`.
44
+ *
45
+ * Mirrors the sync surface area, but wraps every function in a `Promise`.
46
+ */
47
+ export type SpiceAsync = {
48
+ raw: PromisifyObject<SpiceBackend>;
49
+ kit: PromisifyObject<SpiceKit>;
50
+ };
34
51
  //# sourceMappingURL=spice-types.d.ts.map
package/dist/spice.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { SpiceBackend } from "#backend-contract";
2
2
  import type { CreateBackendOptions } from "./backend.js";
3
- import type { Spice } from "./kit/types/spice-types.js";
3
+ import type { Spice, SpiceAsync } from "./kit/types/spice-types.js";
4
4
  export type CreateSpiceOptions = CreateBackendOptions & {
5
5
  /**
6
6
  * If provided, `createSpice()` will wrap this backend instead of creating a new one.
@@ -9,5 +9,14 @@ export type CreateSpiceOptions = CreateBackendOptions & {
9
9
  */
10
10
  backendInstance?: SpiceBackend;
11
11
  };
12
+ export type CreateSpiceAsyncOptions = CreateSpiceOptions;
13
+ /**
14
+ * Create a sync {@link Spice} client backed by the requested backend/transport.
15
+ */
12
16
  export declare function createSpice(options: CreateSpiceOptions): Promise<Spice>;
17
+ /**
18
+ * Create an async client with the same surface area as `createSpice()`, but
19
+ * with all methods returning `Promise`s.
20
+ */
21
+ export declare function createSpiceAsync(options: CreateSpiceAsyncOptions): Promise<SpiceAsync>;
13
22
  //# sourceMappingURL=spice.d.ts.map