/** * astroengine capabilities -- what this engine instance can compute, over what * span, from which source. * * The valid range differs per body and per data tier (an embedded browser * bundle carries Meeus Pluto, 1885-2099; a Node install with the Chebyshev * pack reaches 1700-2212), and until this module a caller had no way to ask * which engine it got. {@link engineCapabilities} answers from the loaded * {@link EngineData} plus the measured-range table in `ranges.ts`. * * Fitted spans come from the packs themselves (`jd0 + segments * seg_days`), * so a wider future pack reports its true span with no code change. */ import type { Engine } from "./chart.js"; import { type BodySpan } from "./ranges.js"; /** The position source active for a body in a given engine's data. */ export type BodySource = "vsop87d" | "moon_chebyshev" | "meeus_ch47" | "chebyshev_pack" | "meeus_ch37" | "kepler_pack" | "analytic" | "synthetic"; export interface BodyCapability { body: string; source: BodySource; /** Measured validated span (vs Swiss Ephemeris / JPL Horizons), or null * for analytic series with no stated bound and synthetic bodies. */ validated: BodySpan | null; /** The pack's fitted span for packed sources. Outside it the body is * reported in `Chart.unavailable` rather than computed. */ fitted?: BodySpan; } export interface EngineCapabilities { /** The measured headline range (every default body holds across it). */ headline: BodySpan; /** The headline as prose (kept in lockstep with `accuracy.json` by the * claims registry via ranges.ts). */ headlineLabel: string; /** Whether the precise-Moon Chebyshev tier is loaded. */ moonTier: "chebyshev" | "analytic"; /** Whether the wide-range Pluto pack supersedes the Meeus series. */ plutoTier: "chebyshev" | "meeus"; /** One entry per body this engine can compute (see {@link Engine.bodies}). */ bodies: BodyCapability[]; } /** * What this engine can compute, over what span, from which source -- derived * from the loaded {@link EngineData} plus the measured-range table. Use it to * distinguish tiers at runtime (browser embedded vs Node with packs) instead * of assuming the headline applies to every body. * * @param engine The engine to introspect. * @returns Per-body sources with validated and fitted spans. */ export declare function engineCapabilities(engine: Engine): EngineCapabilities;