ootk 6.0.0-rc.3 → 6.0.0-rc.4

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 (686) hide show
  1. package/.claude/settings.local.json +9 -1
  2. package/CLAUDE.md +67 -0
  3. package/FUTURE-WORK.md +325 -0
  4. package/dist/body/CelestialBody.d.ts +155 -0
  5. package/dist/body/CelestialBody.js +207 -0
  6. package/dist/body/CelestialBody.js.map +1 -0
  7. package/{src/optimize/SimplexEntry.ts → dist/body/CelestialBodyType.d.ts} +22 -31
  8. package/dist/body/CelestialBodyType.js +55 -0
  9. package/dist/body/CelestialBodyType.js.map +1 -0
  10. package/dist/body/EphemerisBody.d.ts +153 -0
  11. package/dist/body/EphemerisBody.js +235 -0
  12. package/dist/body/EphemerisBody.js.map +1 -0
  13. package/dist/body/MoonBody.d.ts +200 -0
  14. package/dist/body/MoonBody.js +414 -0
  15. package/dist/body/MoonBody.js.map +1 -0
  16. package/dist/body/PlanetBody.d.ts +130 -0
  17. package/dist/body/PlanetBody.js +293 -0
  18. package/dist/body/PlanetBody.js.map +1 -0
  19. package/dist/body/SolarSystem.d.ts +124 -0
  20. package/dist/body/SolarSystem.js +218 -0
  21. package/dist/body/SolarSystem.js.map +1 -0
  22. package/dist/body/SunBody.d.ts +253 -0
  23. package/dist/body/SunBody.js +433 -0
  24. package/dist/body/SunBody.js.map +1 -0
  25. package/dist/body/index.d.ts +13 -3
  26. package/dist/body/index.js +15 -3
  27. package/dist/body/index.js.map +1 -1
  28. package/dist/comm/Antenna.d.ts +112 -0
  29. package/dist/comm/Antenna.js +173 -0
  30. package/dist/comm/Antenna.js.map +1 -0
  31. package/dist/comm/Beacon.d.ts +141 -0
  32. package/dist/comm/Beacon.js +268 -0
  33. package/dist/comm/Beacon.js.map +1 -0
  34. package/dist/comm/CommTypes.d.ts +181 -0
  35. package/dist/comm/CommTypes.js +115 -0
  36. package/dist/comm/CommTypes.js.map +1 -0
  37. package/dist/comm/CommunicationDevice.d.ts +115 -0
  38. package/dist/comm/CommunicationDevice.js +142 -0
  39. package/dist/comm/CommunicationDevice.js.map +1 -0
  40. package/dist/comm/Receiver.d.ts +139 -0
  41. package/dist/comm/Receiver.js +219 -0
  42. package/dist/comm/Receiver.js.map +1 -0
  43. package/dist/comm/Transmitter.d.ts +136 -0
  44. package/dist/comm/Transmitter.js +273 -0
  45. package/dist/comm/Transmitter.js.map +1 -0
  46. package/dist/comm/Transponder.d.ts +154 -0
  47. package/dist/comm/Transponder.js +281 -0
  48. package/dist/comm/Transponder.js.map +1 -0
  49. package/dist/comm/index.d.ts +30 -0
  50. package/dist/comm/index.js +26 -0
  51. package/dist/comm/index.js.map +1 -0
  52. package/dist/conjunction/CatalogScreener.d.ts +134 -0
  53. package/dist/conjunction/CatalogScreener.js +213 -0
  54. package/dist/conjunction/CatalogScreener.js.map +1 -0
  55. package/dist/conjunction/ConjunctionAssessment.d.ts +3 -10
  56. package/dist/conjunction/ConjunctionAssessment.js +30 -23
  57. package/dist/conjunction/ConjunctionAssessment.js.map +1 -1
  58. package/dist/conjunction/ConjunctionEvent.d.ts +51 -45
  59. package/dist/conjunction/ConjunctionEvent.js +49 -51
  60. package/dist/conjunction/ConjunctionEvent.js.map +1 -1
  61. package/dist/conjunction/CovarianceRealism.d.ts +189 -0
  62. package/dist/conjunction/CovarianceRealism.js +348 -0
  63. package/dist/conjunction/CovarianceRealism.js.map +1 -0
  64. package/dist/conjunction/ProbabilityOfCollision.d.ts +3 -3
  65. package/dist/conjunction/ProbabilityOfCollision.js +8 -6
  66. package/dist/conjunction/ProbabilityOfCollision.js.map +1 -1
  67. package/dist/conjunction/ScreeningFilter.d.ts +112 -0
  68. package/dist/conjunction/ScreeningFilter.js +160 -0
  69. package/dist/conjunction/ScreeningFilter.js.map +1 -0
  70. package/dist/conjunction/index.d.ts +6 -3
  71. package/dist/conjunction/index.js +6 -3
  72. package/dist/conjunction/index.js.map +1 -1
  73. package/dist/constellation/ConstellationGenerator.d.ts +137 -0
  74. package/dist/constellation/ConstellationGenerator.js +270 -0
  75. package/dist/constellation/ConstellationGenerator.js.map +1 -0
  76. package/dist/constellation/index.d.ts +17 -0
  77. package/dist/constellation/index.js +18 -0
  78. package/dist/constellation/index.js.map +1 -0
  79. package/dist/coordinate/ClassicalElements.d.ts +39 -1
  80. package/dist/coordinate/ClassicalElements.js +56 -1
  81. package/dist/coordinate/ClassicalElements.js.map +1 -1
  82. package/dist/coordinate/FormatTle.d.ts +4 -4
  83. package/dist/coordinate/FormatTle.js +15 -11
  84. package/dist/coordinate/FormatTle.js.map +1 -1
  85. package/dist/coordinate/Geodetic.d.ts +7 -7
  86. package/dist/coordinate/Geodetic.js +9 -8
  87. package/dist/coordinate/Geodetic.js.map +1 -1
  88. package/dist/coordinate/J2000.d.ts +1 -1
  89. package/dist/coordinate/J2000.js +1 -1
  90. package/dist/coordinate/Tle.js +28 -27
  91. package/dist/coordinate/Tle.js.map +1 -1
  92. package/dist/data/values/LeapSecondData.js +1 -1
  93. package/dist/{optimize/SimplexEntry.d.ts → enums/FovFrame.d.ts} +6 -13
  94. package/dist/enums/FovFrame.js +27 -0
  95. package/dist/enums/FovFrame.js.map +1 -0
  96. package/dist/{optimize/PolynomicalRegressionResult.d.ts → enums/FovShape.d.ts} +8 -14
  97. package/dist/enums/FovShape.js +27 -0
  98. package/dist/enums/FovShape.js.map +1 -0
  99. package/dist/{optimize/SimplexEntry.js → enums/SensorType.d.ts} +16 -25
  100. package/dist/enums/SensorType.js +35 -0
  101. package/dist/enums/SensorType.js.map +1 -0
  102. package/dist/enums/index.d.ts +3 -0
  103. package/dist/enums/index.js +3 -0
  104. package/dist/enums/index.js.map +1 -1
  105. package/dist/errors/index.d.ts +153 -0
  106. package/dist/errors/index.js +179 -0
  107. package/dist/errors/index.js.map +1 -0
  108. package/dist/force/AtmosphericDrag.d.ts +21 -2
  109. package/dist/force/AtmosphericDrag.js +32 -10
  110. package/dist/force/AtmosphericDrag.js.map +1 -1
  111. package/dist/force/EarthGravity.d.ts +2 -2
  112. package/dist/force/EarthGravity.js +4 -4
  113. package/dist/force/EarthGravity.js.map +1 -1
  114. package/dist/force/ForceModel.d.ts +5 -5
  115. package/dist/force/ForceModel.js +22 -22
  116. package/dist/force/Gravity.d.ts +1 -1
  117. package/dist/force/Gravity.js +2 -2
  118. package/dist/force/SolarRadiationPressure.js +3 -2
  119. package/dist/force/SolarRadiationPressure.js.map +1 -1
  120. package/dist/force/ThirdBodyGravity.d.ts +2 -2
  121. package/dist/force/ThirdBodyGravity.js +11 -9
  122. package/dist/force/ThirdBodyGravity.js.map +1 -1
  123. package/dist/force/index.d.ts +7 -0
  124. package/dist/force/index.js +7 -0
  125. package/dist/force/index.js.map +1 -1
  126. package/dist/interfaces/BaseObjectParams.d.ts +2 -3
  127. package/dist/interfaces/SatelliteParams.d.ts +23 -3
  128. package/dist/interfaces/StarObjectParams.d.ts +2 -2
  129. package/dist/interfaces/index.d.ts +0 -2
  130. package/dist/interpolator/index.d.ts +31 -0
  131. package/dist/interpolator/index.js +32 -0
  132. package/dist/interpolator/index.js.map +1 -0
  133. package/dist/main.d.ts +13 -2
  134. package/dist/main.js +15 -3
  135. package/dist/main.js.map +1 -1
  136. package/dist/maneuver/Waypoint.js +1 -1
  137. package/dist/maneuver/Waypoint.js.map +1 -1
  138. package/dist/maneuver/index.d.ts +24 -0
  139. package/dist/maneuver/index.js +25 -0
  140. package/dist/maneuver/index.js.map +1 -0
  141. package/dist/objects/AccessCalculator.d.ts +112 -0
  142. package/dist/objects/AccessCalculator.js +268 -0
  143. package/dist/objects/AccessCalculator.js.map +1 -0
  144. package/dist/objects/AccessWindow.d.ts +95 -0
  145. package/dist/objects/AccessWindow.js +69 -0
  146. package/dist/objects/AccessWindow.js.map +1 -0
  147. package/dist/objects/BaseObject.d.ts +51 -6
  148. package/dist/objects/BaseObject.js +72 -20
  149. package/dist/objects/BaseObject.js.map +1 -1
  150. package/dist/objects/CenterBody.d.ts +41 -0
  151. package/dist/objects/CenterBody.js +85 -0
  152. package/dist/objects/CenterBody.js.map +1 -0
  153. package/dist/objects/DynamicGroundObject.d.ts +309 -0
  154. package/dist/objects/DynamicGroundObject.js +758 -0
  155. package/dist/objects/DynamicGroundObject.js.map +1 -0
  156. package/dist/objects/EphemerisSatellite.d.ts +209 -0
  157. package/dist/objects/EphemerisSatellite.js +480 -0
  158. package/dist/objects/EphemerisSatellite.js.map +1 -0
  159. package/dist/objects/GroundObject.d.ts +60 -21
  160. package/dist/objects/GroundObject.js +78 -29
  161. package/dist/objects/GroundObject.js.map +1 -1
  162. package/dist/objects/GroundStation.d.ts +60 -0
  163. package/dist/objects/GroundStation.js +113 -0
  164. package/dist/objects/GroundStation.js.map +1 -0
  165. package/dist/objects/History.d.ts +101 -0
  166. package/dist/objects/History.js +180 -0
  167. package/dist/objects/History.js.map +1 -0
  168. package/dist/objects/InterpolatorType.d.ts +39 -0
  169. package/dist/objects/InterpolatorType.js +41 -0
  170. package/dist/objects/InterpolatorType.js.map +1 -0
  171. package/dist/objects/LandObject.d.ts +7 -3
  172. package/dist/objects/LandObject.js +14 -0
  173. package/dist/objects/LandObject.js.map +1 -1
  174. package/dist/objects/Marker.d.ts +4 -0
  175. package/dist/objects/Marker.js +6 -0
  176. package/dist/objects/Marker.js.map +1 -1
  177. package/dist/objects/ObjectTypes.d.ts +60 -0
  178. package/dist/objects/ObjectTypes.js +18 -0
  179. package/dist/objects/ObjectTypes.js.map +1 -0
  180. package/dist/objects/Satellite.d.ts +237 -20
  181. package/dist/objects/Satellite.js +447 -47
  182. package/dist/objects/Satellite.js.map +1 -1
  183. package/dist/objects/SpaceObject.d.ts +205 -0
  184. package/dist/objects/SpaceObject.js +149 -0
  185. package/dist/objects/SpaceObject.js.map +1 -0
  186. package/dist/objects/Star.d.ts +10 -2
  187. package/dist/objects/Star.js +40 -4
  188. package/dist/objects/Star.js.map +1 -1
  189. package/dist/objects/VisualizationHelpers.d.ts +148 -0
  190. package/dist/objects/VisualizationHelpers.js +218 -0
  191. package/dist/objects/VisualizationHelpers.js.map +1 -0
  192. package/dist/objects/index.d.ts +18 -4
  193. package/dist/objects/index.js +9 -4
  194. package/dist/objects/index.js.map +1 -1
  195. package/dist/observation/RadecTopocentric.js +3 -1
  196. package/dist/observation/RadecTopocentric.js.map +1 -1
  197. package/dist/operations/Vector3D.d.ts +0 -7
  198. package/dist/operations/Vector3D.js +0 -18
  199. package/dist/operations/Vector3D.js.map +1 -1
  200. package/dist/optimize/ChebyshevCompressor.d.ts +55 -7
  201. package/dist/optimize/ChebyshevCompressor.js +59 -14
  202. package/dist/optimize/ChebyshevCompressor.js.map +1 -1
  203. package/dist/optimize/DownhillSimplex.d.ts +37 -3
  204. package/dist/optimize/DownhillSimplex.js +42 -8
  205. package/dist/optimize/DownhillSimplex.js.map +1 -1
  206. package/dist/optimize/GoldenSection.d.ts +150 -12
  207. package/dist/optimize/GoldenSection.js +164 -17
  208. package/dist/optimize/GoldenSection.js.map +1 -1
  209. package/dist/optimize/PolynomialRegression.d.ts +122 -20
  210. package/dist/optimize/PolynomialRegression.js +123 -22
  211. package/dist/optimize/PolynomialRegression.js.map +1 -1
  212. package/dist/optimize/SimpleLinearRegression.d.ts +117 -8
  213. package/dist/optimize/SimpleLinearRegression.js +125 -25
  214. package/dist/optimize/SimpleLinearRegression.js.map +1 -1
  215. package/dist/optimize/index.d.ts +5 -0
  216. package/dist/optimize/index.js +6 -0
  217. package/dist/optimize/index.js.map +1 -0
  218. package/dist/optimize/internal/PolynomicalRegressionResult.d.ts +118 -0
  219. package/dist/optimize/internal/PolynomicalRegressionResult.js +123 -0
  220. package/dist/optimize/internal/PolynomicalRegressionResult.js.map +1 -0
  221. package/dist/optimize/internal/SimplexEntry.d.ts +150 -0
  222. package/dist/optimize/internal/SimplexEntry.js +147 -0
  223. package/dist/optimize/internal/SimplexEntry.js.map +1 -0
  224. package/dist/orbit-design/RepeatGroundTrack.d.ts +184 -0
  225. package/dist/orbit-design/RepeatGroundTrack.js +359 -0
  226. package/dist/orbit-design/RepeatGroundTrack.js.map +1 -0
  227. package/dist/orbit-design/index.d.ts +18 -0
  228. package/dist/orbit-design/index.js +18 -0
  229. package/dist/orbit-design/index.js.map +1 -0
  230. package/dist/{orbit_determination → orbit-determination}/BatchLeastSquaresOD.d.ts +1 -1
  231. package/dist/{orbit_determination → orbit-determination}/BatchLeastSquaresOD.js +4 -4
  232. package/dist/{orbit_determination → orbit-determination}/BatchLeastSquaresOD.js.map +1 -1
  233. package/dist/{orbit_determination → orbit-determination}/BatchLeastSquaresResult.d.ts +1 -1
  234. package/dist/{orbit_determination → orbit-determination}/BatchLeastSquaresResult.js.map +1 -1
  235. package/dist/{orbit_determination → orbit-determination}/GaussIOD.js.map +1 -1
  236. package/dist/{orbit_determination → orbit-determination}/GibbsIOD.js +4 -3
  237. package/dist/orbit-determination/GibbsIOD.js.map +1 -0
  238. package/dist/{orbit_determination → orbit-determination}/GoodingIOD.d.ts +1 -1
  239. package/dist/{orbit_determination → orbit-determination}/GoodingIOD.js +11 -10
  240. package/dist/orbit-determination/GoodingIOD.js.map +1 -0
  241. package/dist/{orbit_determination → orbit-determination}/HerrickGibbsIOD.js.map +1 -1
  242. package/dist/{orbit_determination → orbit-determination}/LambertIOD.js.map +1 -1
  243. package/dist/orbit-determination/LevenbergMarquardtOD.d.ts +72 -0
  244. package/dist/orbit-determination/LevenbergMarquardtOD.js +202 -0
  245. package/dist/orbit-determination/LevenbergMarquardtOD.js.map +1 -0
  246. package/dist/orbit-determination/LevenbergMarquardtResult.d.ts +36 -0
  247. package/dist/orbit-determination/LevenbergMarquardtResult.js +43 -0
  248. package/dist/orbit-determination/LevenbergMarquardtResult.js.map +1 -0
  249. package/dist/{orbit_determination → orbit-determination}/ModifiedGoodingIOD.d.ts +1 -1
  250. package/dist/{orbit_determination → orbit-determination}/ModifiedGoodingIOD.js +3 -2
  251. package/dist/orbit-determination/ModifiedGoodingIOD.js.map +1 -0
  252. package/dist/{orbit_determination → orbit-determination}/index.d.ts +2 -0
  253. package/dist/{orbit_determination → orbit-determination}/index.js +2 -0
  254. package/dist/{orbit_determination → orbit-determination}/index.js.map +1 -1
  255. package/dist/parsers/CdmExporter.d.ts +85 -0
  256. package/dist/parsers/CdmExporter.js +235 -0
  257. package/dist/parsers/CdmExporter.js.map +1 -0
  258. package/dist/parsers/CdmParser.d.ts +97 -0
  259. package/dist/parsers/CdmParser.js +396 -0
  260. package/dist/parsers/CdmParser.js.map +1 -0
  261. package/dist/parsers/CdmTypes.d.ts +240 -0
  262. package/dist/parsers/CdmTypes.js +18 -0
  263. package/dist/parsers/CdmTypes.js.map +1 -0
  264. package/dist/parsers/HorizonsParser.d.ts +128 -0
  265. package/dist/parsers/HorizonsParser.js +320 -0
  266. package/dist/parsers/HorizonsParser.js.map +1 -0
  267. package/dist/parsers/OemParser.d.ts +56 -0
  268. package/dist/parsers/OemParser.js +235 -0
  269. package/dist/parsers/OemParser.js.map +1 -0
  270. package/dist/parsers/OemTypes.d.ts +100 -0
  271. package/dist/parsers/OemTypes.js +18 -0
  272. package/dist/parsers/OemTypes.js.map +1 -0
  273. package/dist/parsers/index.d.ts +23 -0
  274. package/dist/parsers/index.js +24 -0
  275. package/dist/parsers/index.js.map +1 -0
  276. package/dist/propagator/RungeKutta4Propagator.js +2 -2
  277. package/dist/propagator/RungeKutta4Propagator.js.map +1 -1
  278. package/dist/propagator/RungeKuttaAdaptive.d.ts +1 -4
  279. package/dist/propagator/RungeKuttaAdaptive.js +10 -13
  280. package/dist/propagator/RungeKuttaAdaptive.js.map +1 -1
  281. package/dist/propagator/index.d.ts +6 -0
  282. package/dist/propagator/index.js +6 -0
  283. package/dist/propagator/index.js.map +1 -1
  284. package/dist/scheduling/ContactScheduler.d.ts +248 -0
  285. package/dist/scheduling/ContactScheduler.js +503 -0
  286. package/dist/scheduling/ContactScheduler.js.map +1 -0
  287. package/dist/scheduling/ScheduledContact.d.ts +155 -0
  288. package/dist/scheduling/ScheduledContact.js +189 -0
  289. package/dist/scheduling/ScheduledContact.js.map +1 -0
  290. package/dist/scheduling/index.d.ts +5 -0
  291. package/dist/scheduling/index.js +4 -0
  292. package/dist/scheduling/index.js.map +1 -0
  293. package/dist/sensor/FieldOfView.d.ts +250 -0
  294. package/dist/sensor/FieldOfView.js +470 -0
  295. package/dist/sensor/FieldOfView.js.map +1 -0
  296. package/dist/sensor/LaserRangingSensor.d.ts +122 -0
  297. package/dist/sensor/LaserRangingSensor.js +174 -0
  298. package/dist/sensor/LaserRangingSensor.js.map +1 -0
  299. package/dist/sensor/MechanicalRadar.d.ts +86 -0
  300. package/dist/sensor/MechanicalRadar.js +130 -0
  301. package/dist/sensor/MechanicalRadar.js.map +1 -0
  302. package/dist/sensor/OpticalSensor.d.ts +111 -0
  303. package/dist/sensor/OpticalSensor.js +164 -0
  304. package/dist/sensor/OpticalSensor.js.map +1 -0
  305. package/dist/sensor/PassiveRFSensor.d.ts +115 -0
  306. package/dist/sensor/PassiveRFSensor.js +168 -0
  307. package/dist/sensor/PassiveRFSensor.js.map +1 -0
  308. package/dist/sensor/PhasedArrayRadar.d.ts +170 -0
  309. package/dist/sensor/PhasedArrayRadar.js +290 -0
  310. package/dist/sensor/PhasedArrayRadar.js.map +1 -0
  311. package/dist/sensor/RadarSensor.d.ts +94 -0
  312. package/dist/sensor/RadarSensor.js +106 -0
  313. package/dist/sensor/RadarSensor.js.map +1 -0
  314. package/dist/sensor/Sensor.d.ts +271 -0
  315. package/dist/sensor/Sensor.js +343 -0
  316. package/dist/sensor/Sensor.js.map +1 -0
  317. package/dist/sensor/index.d.ts +74 -0
  318. package/dist/sensor/index.js +70 -0
  319. package/dist/sensor/index.js.map +1 -0
  320. package/dist/sgp4/index.d.ts +2 -0
  321. package/dist/sgp4/index.js +1 -0
  322. package/dist/sgp4/index.js.map +1 -1
  323. package/dist/smoothing/ExponentialSmoothing.d.ts +20 -6
  324. package/dist/smoothing/ExponentialSmoothing.js +51 -57
  325. package/dist/smoothing/ExponentialSmoothing.js.map +1 -1
  326. package/dist/time/Epoch.d.ts +38 -1
  327. package/dist/time/Epoch.js +40 -3
  328. package/dist/time/Epoch.js.map +1 -1
  329. package/dist/time/EpochGPS.d.ts +68 -4
  330. package/dist/time/EpochGPS.js +75 -11
  331. package/dist/time/EpochGPS.js.map +1 -1
  332. package/dist/time/EpochTAI.d.ts +37 -1
  333. package/dist/time/EpochTAI.js +37 -1
  334. package/dist/time/EpochTAI.js.map +1 -1
  335. package/dist/time/EpochTDB.d.ts +47 -1
  336. package/dist/time/EpochTDB.js +47 -1
  337. package/dist/time/EpochTDB.js.map +1 -1
  338. package/dist/time/EpochTT.d.ts +50 -1
  339. package/dist/time/EpochTT.js +50 -1
  340. package/dist/time/EpochTT.js.map +1 -1
  341. package/dist/time/EpochUTC.d.ts +64 -0
  342. package/dist/time/EpochUTC.js +66 -3
  343. package/dist/time/EpochUTC.js.map +1 -1
  344. package/dist/time/TimeStamped.d.ts +26 -4
  345. package/dist/time/TimeStamped.js +37 -6
  346. package/dist/time/TimeStamped.js.map +1 -1
  347. package/dist/transforms/conversions.js +5 -4
  348. package/dist/transforms/conversions.js.map +1 -1
  349. package/dist/transforms/transforms.d.ts +78 -60
  350. package/dist/transforms/transforms.js +111 -99
  351. package/dist/transforms/transforms.js.map +1 -1
  352. package/dist/types/types.d.ts +59 -110
  353. package/dist/types/types.js +2 -0
  354. package/dist/types/types.js.map +1 -1
  355. package/dist/utils/functions.d.ts +2 -2
  356. package/dist/utils/functions.js +5 -3
  357. package/dist/utils/functions.js.map +1 -1
  358. package/docs/README.md +23 -4
  359. package/jest.config.mjs +4 -3
  360. package/package.json +20 -17
  361. package/src/body/CelestialBody.ts +316 -0
  362. package/src/body/CelestialBodyType.ts +55 -0
  363. package/src/body/EphemerisBody.ts +349 -0
  364. package/src/body/MoonBody.ts +552 -0
  365. package/src/body/PlanetBody.ts +354 -0
  366. package/src/body/SolarSystem.ts +276 -0
  367. package/src/body/SunBody.ts +538 -0
  368. package/src/body/__tests__/Earth.test.ts +135 -0
  369. package/src/body/__tests__/EphemerisBody.test.ts +323 -0
  370. package/src/body/__tests__/MoonBody.test.ts +198 -0
  371. package/src/body/__tests__/PlanetBody.test.ts +257 -0
  372. package/src/body/__tests__/SolarSystem.test.ts +237 -0
  373. package/src/body/__tests__/SunBody.test.ts +227 -0
  374. package/src/body/__tests__/__snapshots__/Earth.test.ts.snap +39 -0
  375. package/src/body/index.ts +39 -3
  376. package/src/comm/Antenna.ts +213 -0
  377. package/src/comm/Beacon.ts +328 -0
  378. package/src/comm/CommTypes.ts +216 -0
  379. package/src/comm/CommunicationDevice.ts +199 -0
  380. package/src/comm/Receiver.ts +263 -0
  381. package/src/comm/Transmitter.ts +349 -0
  382. package/src/comm/Transponder.ts +360 -0
  383. package/src/comm/__tests__/Antenna.test.ts +155 -0
  384. package/src/comm/__tests__/Beacon.test.ts +333 -0
  385. package/src/comm/__tests__/CommTypes.test.ts +165 -0
  386. package/src/comm/__tests__/Receiver.test.ts +215 -0
  387. package/src/comm/__tests__/Transmitter.test.ts +164 -0
  388. package/src/comm/__tests__/Transponder.test.ts +181 -0
  389. package/src/comm/index.ts +60 -0
  390. package/src/conjunction/CatalogScreener.ts +322 -0
  391. package/src/conjunction/ConjunctionAssessment.ts +28 -35
  392. package/src/conjunction/ConjunctionEvent.ts +80 -44
  393. package/src/conjunction/CovarianceRealism.ts +472 -0
  394. package/src/conjunction/ProbabilityOfCollision.ts +10 -8
  395. package/src/conjunction/ScreeningFilter.ts +206 -0
  396. package/src/conjunction/__tests__/CatalogScreener.test.ts +280 -0
  397. package/src/conjunction/__tests__/ConjunctionAssessment.basic.test.ts +250 -0
  398. package/src/conjunction/__tests__/ConjunctionAssessment.highfidelity.test.ts +76 -0
  399. package/src/conjunction/__tests__/CovarianceRealism.test.ts +296 -0
  400. package/src/conjunction/index.ts +17 -6
  401. package/src/constellation/ConstellationGenerator.ts +377 -0
  402. package/src/constellation/__tests__/ConstellationGenerator.test.ts +446 -0
  403. package/src/constellation/index.ts +18 -0
  404. package/src/coordinate/ClassicalElements.ts +62 -0
  405. package/src/coordinate/FormatTle.ts +17 -12
  406. package/src/coordinate/Geodetic.ts +16 -11
  407. package/src/coordinate/J2000.ts +1 -1
  408. package/src/coordinate/README.md +788 -0
  409. package/src/coordinate/Tle.ts +31 -30
  410. package/src/coordinate/__tests__/ClassicalElements.test.ts +129 -0
  411. package/src/coordinate/__tests__/EquinoctialElements.test.ts +108 -0
  412. package/src/coordinate/__tests__/FormatTle.test.ts +92 -0
  413. package/src/coordinate/__tests__/Geodetic.test.ts +165 -0
  414. package/src/coordinate/__tests__/Hill.test.ts +195 -0
  415. package/src/coordinate/__tests__/ITRF.test.ts +231 -0
  416. package/src/coordinate/__tests__/J2000.test.ts +132 -0
  417. package/src/coordinate/__tests__/RIC.test.ts +107 -0
  418. package/src/coordinate/__tests__/TEME.test.ts +48 -0
  419. package/src/coordinate/__tests__/Tle.test.ts +185 -0
  420. package/src/coordinate/__tests__/__snapshots__/ClassicalElements.test.ts.snap +106 -0
  421. package/src/coordinate/__tests__/__snapshots__/EquinoctialElements.test.ts.snap +93 -0
  422. package/src/coordinate/__tests__/__snapshots__/Geodetic.test.ts.snap +54 -0
  423. package/src/coordinate/__tests__/__snapshots__/ITRF.test.ts.snap +321 -0
  424. package/src/coordinate/__tests__/__snapshots__/J2000.test.ts.snap +26 -0
  425. package/src/coordinate/__tests__/__snapshots__/RIC.test.ts.snap +79 -0
  426. package/src/coordinate/__tests__/__snapshots__/TEME.test.ts.snap +41 -0
  427. package/src/coordinate/__tests__/__snapshots__/Tle.test.ts.snap +180 -0
  428. package/src/covariance/__tests__/CovarianceSample.test.ts +143 -0
  429. package/src/covariance/__tests__/StateCovariance.test.ts +90 -0
  430. package/src/data/values/LeapSecondData.ts +1 -1
  431. package/src/data/values/__tests__/Egm96Data.test.ts +33 -0
  432. package/src/data/values/__tests__/HpAtmosphereData.test.ts +82 -0
  433. package/src/data/values/__tests__/LeapSecondData.test.ts +59 -0
  434. package/src/{optimize/PolynomicalRegressionResult.ts → enums/FovFrame.ts} +8 -14
  435. package/src/enums/FovShape.ts +26 -0
  436. package/src/enums/SensorType.ts +34 -0
  437. package/src/enums/index.ts +3 -0
  438. package/src/errors/__tests__/errors.test.ts +196 -0
  439. package/src/errors/index.ts +185 -0
  440. package/src/fetch/index.ts +26 -0
  441. package/src/force/AtmosphericDrag.ts +32 -11
  442. package/src/force/EarthGravity.ts +4 -4
  443. package/src/force/ForceModel.ts +22 -22
  444. package/src/force/Gravity.ts +2 -2
  445. package/src/force/README.md +99 -0
  446. package/src/force/SolarRadiationPressure.ts +3 -2
  447. package/src/force/ThirdBodyGravity.ts +11 -9
  448. package/src/force/__tests__/AtmosphericDrag.test.ts +168 -0
  449. package/src/force/__tests__/EarthGravity.test.ts +115 -0
  450. package/src/force/__tests__/ForceModel.test.ts +188 -0
  451. package/src/force/__tests__/Gravity.test.ts +81 -0
  452. package/src/force/__tests__/SolarRadiationPressure.test.ts +115 -0
  453. package/src/force/__tests__/ThirdBodyGravity.test.ts +119 -0
  454. package/src/force/__tests__/Thrust.test.ts +132 -0
  455. package/src/force/index.ts +7 -0
  456. package/src/interfaces/BaseObjectParams.ts +2 -3
  457. package/src/interfaces/SatelliteParams.ts +41 -4
  458. package/src/interfaces/StarObjectParams.ts +2 -2
  459. package/src/interfaces/index.ts +0 -2
  460. package/src/interpolator/__tests__/ChebyshevCoefficients.test.ts +105 -0
  461. package/src/interpolator/__tests__/ChebyshevInterpolator.test.ts +81 -0
  462. package/src/interpolator/__tests__/CubicSpline.test.ts +80 -0
  463. package/src/interpolator/__tests__/CubicSplineInterpolator.test.ts +94 -0
  464. package/src/interpolator/__tests__/FieldInterpolator.test.ts +59 -0
  465. package/src/interpolator/__tests__/Interpolator.test.ts +131 -0
  466. package/src/interpolator/__tests__/LagrangeInterpolator.test.ts +121 -0
  467. package/src/interpolator/__tests__/StateInterpolator.test.ts +57 -0
  468. package/src/interpolator/__tests__/VerletBlendInterpolator.test.ts +116 -0
  469. package/src/interpolator/index.ts +32 -0
  470. package/src/main.ts +26 -3
  471. package/src/maneuver/Waypoint.ts +1 -1
  472. package/src/maneuver/__tests__/TwoBurnOrbitTransfer.test.ts +90 -0
  473. package/src/maneuver/__tests__/Waypoint.test.ts +427 -0
  474. package/src/maneuver/index.ts +25 -0
  475. package/src/objects/AccessCalculator.ts +345 -0
  476. package/src/objects/AccessWindow.ts +129 -0
  477. package/src/objects/BaseObject.ts +94 -23
  478. package/src/objects/CenterBody.ts +88 -0
  479. package/src/objects/DynamicGroundObject.ts +975 -0
  480. package/src/objects/EphemerisSatellite.ts +629 -0
  481. package/src/objects/GroundObject.ts +121 -51
  482. package/src/objects/GroundStation.ts +130 -0
  483. package/src/objects/History.ts +228 -0
  484. package/src/objects/InterpolatorType.ts +42 -0
  485. package/src/objects/LandObject.ts +18 -3
  486. package/src/objects/Marker.ts +7 -0
  487. package/src/objects/ObjectTypes.ts +66 -0
  488. package/src/objects/Satellite.ts +532 -71
  489. package/src/objects/SpaceObject.ts +304 -0
  490. package/src/objects/Star.ts +47 -8
  491. package/src/objects/VisualizationHelpers.ts +324 -0
  492. package/src/objects/__tests__/AccessCalculator.test.ts +499 -0
  493. package/src/objects/__tests__/DynamicGroundObject.test.ts +859 -0
  494. package/src/objects/__tests__/EphemerisSatellite.test.ts +589 -0
  495. package/src/objects/__tests__/GroundStation.test.ts +204 -0
  496. package/src/objects/__tests__/Satellite.test.ts +487 -0
  497. package/src/objects/__tests__/SpaceObject.rae.test.ts +156 -0
  498. package/src/objects/__tests__/VisualizationHelpers.test.ts +438 -0
  499. package/src/objects/index.ts +24 -4
  500. package/src/observation/RadecTopocentric.ts +4 -1
  501. package/src/observation/__tests__/RAE.test.ts +135 -0
  502. package/src/observation/__tests__/RadecGeocentric.test.ts +107 -0
  503. package/src/observation/__tests__/RadecTopocentric.test.ts +121 -0
  504. package/src/observation/__tests__/__snapshots__/RAE.test.ts.snap +91 -0
  505. package/src/observation/__tests__/__snapshots__/RadecGeocentric.test.ts.snap +71 -0
  506. package/src/observation/__tests__/__snapshots__/RadecTopocentric.test.ts.snap +71 -0
  507. package/src/operations/Vector3D.ts +0 -19
  508. package/src/operations/__tests__/Matrix.test.ts +277 -0
  509. package/src/operations/__tests__/Random.test.ts +24 -0
  510. package/src/operations/__tests__/Vector.test.ts +269 -0
  511. package/src/operations/__tests__/Vector3D.test.ts +100 -0
  512. package/src/operations/__tests__/__snapshots__/Matrix.test.ts.snap +161 -0
  513. package/src/operations/__tests__/__snapshots__/Random.test.ts.snap +7 -0
  514. package/src/operations/__tests__/__snapshots__/Vector.test.ts.snap +218 -0
  515. package/src/operations/__tests__/__snapshots__/Vector3D.test.ts.snap +138 -0
  516. package/src/optimize/ChebyshevCompressor.ts +59 -14
  517. package/src/optimize/DownhillSimplex.ts +42 -8
  518. package/src/optimize/GoldenSection.ts +176 -17
  519. package/src/optimize/PolynomialRegression.ts +124 -22
  520. package/src/optimize/README.md +343 -0
  521. package/src/optimize/SimpleLinearRegression.ts +125 -25
  522. package/src/optimize/__tests__/ChebyshevCompressor.test.ts +40 -0
  523. package/src/optimize/__tests__/DownhillSimplex.test.ts +168 -0
  524. package/src/optimize/__tests__/GoldenSection.test.ts +21 -0
  525. package/src/optimize/__tests__/PolynomialRegression.test.ts +24 -0
  526. package/src/optimize/__tests__/SimpleLinearRegression.test.ts +31 -0
  527. package/src/optimize/index.ts +6 -0
  528. package/src/optimize/internal/PolynomicalRegressionResult.ts +126 -0
  529. package/src/optimize/internal/SimplexEntry.ts +169 -0
  530. package/src/orbit-design/RepeatGroundTrack.ts +516 -0
  531. package/src/orbit-design/__tests__/RepeatGroundTrack.test.ts +526 -0
  532. package/src/orbit-design/index.ts +23 -0
  533. package/src/{orbit_determination → orbit-determination}/BatchLeastSquaresOD.ts +4 -4
  534. package/src/{orbit_determination → orbit-determination}/BatchLeastSquaresResult.ts +1 -1
  535. package/src/{orbit_determination → orbit-determination}/GibbsIOD.ts +4 -3
  536. package/src/{orbit_determination → orbit-determination}/GoodingIOD.ts +12 -10
  537. package/src/orbit-determination/LevenbergMarquardtOD.ts +258 -0
  538. package/src/orbit-determination/LevenbergMarquardtResult.ts +42 -0
  539. package/src/orbit-determination/ModifiedGoodingIOD.test.ts +86 -0
  540. package/src/{orbit_determination → orbit-determination}/ModifiedGoodingIOD.ts +5 -4
  541. package/src/orbit-determination/README.md +353 -0
  542. package/src/orbit-determination/__tests__/BatchLeastSquaresOD.accuracy.test.ts +320 -0
  543. package/src/orbit-determination/__tests__/BatchLeastSquaresOD.observations.test.ts +279 -0
  544. package/src/orbit-determination/__tests__/BatchLeastSquaresOD.robustness.test.ts +439 -0
  545. package/src/orbit-determination/__tests__/GaussIOD.test.ts +395 -0
  546. package/src/orbit-determination/__tests__/GibbsIOD.test.ts +423 -0
  547. package/src/orbit-determination/__tests__/GoodingIOD.test.ts +356 -0
  548. package/src/orbit-determination/__tests__/HerrickGibbsIOD.test.ts +501 -0
  549. package/src/orbit-determination/__tests__/LambertIOD.test.ts +643 -0
  550. package/src/orbit-determination/__tests__/LevenbergMarquardtOD.test.ts +1039 -0
  551. package/src/{orbit_determination → orbit-determination}/index.ts +2 -0
  552. package/src/parsers/CdmExporter.ts +298 -0
  553. package/src/parsers/CdmParser.ts +474 -0
  554. package/src/parsers/CdmTypes.ts +259 -0
  555. package/src/parsers/HorizonsParser.ts +432 -0
  556. package/src/parsers/OemParser.ts +277 -0
  557. package/src/parsers/OemTypes.ts +111 -0
  558. package/src/parsers/__tests__/CdmExporter.test.ts +305 -0
  559. package/src/parsers/__tests__/CdmParser.test.ts +305 -0
  560. package/src/parsers/__tests__/HorizonsParser.test.ts +126 -0
  561. package/src/parsers/__tests__/OemParser.test.ts +398 -0
  562. package/src/parsers/index.ts +49 -0
  563. package/src/propagator/README.md +241 -0
  564. package/src/propagator/RungeKutta4Propagator.ts +2 -2
  565. package/src/propagator/RungeKuttaAdaptive.ts +14 -14
  566. package/src/propagator/__tests__/KeplerPropagator.test.ts +250 -0
  567. package/src/propagator/__tests__/Propagator.test.ts +180 -0
  568. package/src/propagator/__tests__/RungeKutta4Propagator.test.ts +289 -0
  569. package/src/propagator/__tests__/RungeKuttaAdaptive.test.ts +244 -0
  570. package/src/propagator/__tests__/Sgp4Propagator.test.ts +144 -0
  571. package/src/propagator/index.ts +6 -0
  572. package/src/scheduling/ContactScheduler.ts +760 -0
  573. package/src/scheduling/ScheduledContact.ts +249 -0
  574. package/src/scheduling/__tests__/ContactScheduler.test.ts +389 -0
  575. package/src/scheduling/__tests__/ScheduledContact.test.ts +293 -0
  576. package/src/scheduling/index.ts +10 -0
  577. package/src/sensor/FieldOfView.ts +666 -0
  578. package/src/sensor/LaserRangingSensor.ts +210 -0
  579. package/src/sensor/MechanicalRadar.ts +156 -0
  580. package/src/sensor/OpticalSensor.ts +198 -0
  581. package/src/sensor/PassiveRFSensor.ts +205 -0
  582. package/src/sensor/PhasedArrayRadar.ts +352 -0
  583. package/src/sensor/RadarSensor.ts +150 -0
  584. package/src/sensor/Sensor.ts +487 -0
  585. package/src/sensor/__tests__/Sensor.test.ts +135 -0
  586. package/src/sensor/index.ts +81 -0
  587. package/src/sensor/v2-docs/field-of-view-design-document.md +466 -0
  588. package/src/sgp4/index.ts +2 -0
  589. package/src/smoothing/ExponentialSmoothing.ts +51 -58
  590. package/src/smoothing/__tests__/ExponentialSmoothing.test.ts +108 -0
  591. package/src/time/Epoch.ts +40 -3
  592. package/src/time/EpochGPS.ts +78 -13
  593. package/src/time/EpochTAI.ts +37 -1
  594. package/src/time/EpochTDB.ts +47 -1
  595. package/src/time/EpochTT.ts +50 -1
  596. package/src/time/EpochUTC.ts +68 -3
  597. package/src/time/README.md +212 -0
  598. package/src/time/TimeStamped.ts +40 -6
  599. package/src/time/__tests__/Epoch.test.ts +250 -0
  600. package/src/time/__tests__/EpochGPS.test.ts +78 -0
  601. package/src/time/__tests__/EpochUTC.test.ts +149 -0
  602. package/src/time/__tests__/EpochWindow.test.ts +30 -0
  603. package/src/time/__tests__/TimeStamped.test.ts +62 -0
  604. package/src/time/__tests__/__snapshots__/Epoch.test.ts.snap +46 -0
  605. package/src/time/__tests__/__snapshots__/EpochGPS.test.ts.snap +13 -0
  606. package/src/time/__tests__/__snapshots__/EpochUTC.test.ts.snap +112 -0
  607. package/src/time/__tests__/__snapshots__/TimeStamped.test.ts.snap +10 -0
  608. package/src/transforms/__tests__/__snapshots__/transforms.test.ts.snap +16 -0
  609. package/src/transforms/__tests__/__snapshots__/transforms2.test.ts.snap +49 -0
  610. package/src/transforms/__tests__/conversions.test.ts +80 -0
  611. package/src/transforms/__tests__/transforms.test.ts +128 -0
  612. package/src/transforms/__tests__/transforms2.test.ts +275 -0
  613. package/src/transforms/__tests__/transformsData.ts +289 -0
  614. package/src/transforms/conversions.ts +5 -4
  615. package/src/transforms/transforms.ts +131 -112
  616. package/src/types/types.ts +67 -116
  617. package/src/utils/__tests__/__snapshots__/functions.test.ts.snap +89 -0
  618. package/src/utils/__tests__/__snapshots__/utils.test.ts.snap +5 -0
  619. package/src/utils/__tests__/create-covariance-from-tle.test.ts +90 -0
  620. package/src/utils/__tests__/functions.test.ts +450 -0
  621. package/src/utils/__tests__/jacobian.test.ts +37 -0
  622. package/src/utils/__tests__/linearDistance.test.ts +44 -0
  623. package/src/utils/__tests__/utils.test.ts +164 -0
  624. package/src/utils/functions.ts +11 -9
  625. package/dist/body/Celestial.d.ts +0 -96
  626. package/dist/body/Celestial.js +0 -124
  627. package/dist/body/Celestial.js.map +0 -1
  628. package/dist/body/Moon.d.ts +0 -137
  629. package/dist/body/Moon.js +0 -464
  630. package/dist/body/Moon.js.map +0 -1
  631. package/dist/body/Sun.d.ts +0 -301
  632. package/dist/body/Sun.js +0 -544
  633. package/dist/body/Sun.js.map +0 -1
  634. package/dist/fetch/horizons-constants.d.ts +0 -43
  635. package/dist/fetch/horizons-constants.js +0 -50
  636. package/dist/fetch/horizons-constants.js.map +0 -1
  637. package/dist/fetch/horizons-interfaces.d.ts +0 -37
  638. package/dist/fetch/horizons-interfaces.js +0 -2
  639. package/dist/fetch/horizons-interfaces.js.map +0 -1
  640. package/dist/fetch/horizons.d.ts +0 -86
  641. package/dist/fetch/horizons.js +0 -237
  642. package/dist/fetch/horizons.js.map +0 -1
  643. package/dist/interfaces/RfSensorParams.d.ts +0 -34
  644. package/dist/interfaces/RfSensorParams.js +0 -24
  645. package/dist/interfaces/RfSensorParams.js.map +0 -1
  646. package/dist/interfaces/SensorParams.d.ts +0 -38
  647. package/dist/interfaces/SensorParams.js +0 -2
  648. package/dist/interfaces/SensorParams.js.map +0 -1
  649. package/dist/objects/DetailedSatellite.d.ts +0 -75
  650. package/dist/objects/DetailedSatellite.js +0 -163
  651. package/dist/objects/DetailedSatellite.js.map +0 -1
  652. package/dist/objects/DetailedSensor.d.ts +0 -39
  653. package/dist/objects/DetailedSensor.js +0 -54
  654. package/dist/objects/DetailedSensor.js.map +0 -1
  655. package/dist/objects/RfSensor.d.ts +0 -73
  656. package/dist/objects/RfSensor.js +0 -112
  657. package/dist/objects/RfSensor.js.map +0 -1
  658. package/dist/objects/Sensor.d.ts +0 -99
  659. package/dist/objects/Sensor.js +0 -238
  660. package/dist/objects/Sensor.js.map +0 -1
  661. package/dist/optimize/PolynomicalRegressionResult.js +0 -38
  662. package/dist/optimize/PolynomicalRegressionResult.js.map +0 -1
  663. package/dist/optimize/SimplexEntry.js.map +0 -1
  664. package/dist/orbit_determination/GibbsIOD.js.map +0 -1
  665. package/dist/orbit_determination/GoodingIOD.js.map +0 -1
  666. package/dist/orbit_determination/ModifiedGoodingIOD.js.map +0 -1
  667. package/src/body/Celestial.ts +0 -134
  668. package/src/body/Moon.ts +0 -556
  669. package/src/body/Sun.ts +0 -665
  670. package/src/interfaces/RfSensorParams.ts +0 -36
  671. package/src/interfaces/SensorParams.ts +0 -39
  672. package/src/objects/DetailedSatellite.ts +0 -191
  673. package/src/objects/DetailedSensor.ts +0 -60
  674. package/src/objects/RfSensor.ts +0 -126
  675. package/src/objects/Sensor.ts +0 -279
  676. /package/dist/{orbit_determination → orbit-determination}/BatchLeastSquaresResult.js +0 -0
  677. /package/dist/{orbit_determination → orbit-determination}/GaussIOD.d.ts +0 -0
  678. /package/dist/{orbit_determination → orbit-determination}/GaussIOD.js +0 -0
  679. /package/dist/{orbit_determination → orbit-determination}/GibbsIOD.d.ts +0 -0
  680. /package/dist/{orbit_determination → orbit-determination}/HerrickGibbsIOD.d.ts +0 -0
  681. /package/dist/{orbit_determination → orbit-determination}/HerrickGibbsIOD.js +0 -0
  682. /package/dist/{orbit_determination → orbit-determination}/LambertIOD.d.ts +0 -0
  683. /package/dist/{orbit_determination → orbit-determination}/LambertIOD.js +0 -0
  684. /package/src/{orbit_determination → orbit-determination}/GaussIOD.ts +0 -0
  685. /package/src/{orbit_determination → orbit-determination}/HerrickGibbsIOD.ts +0 -0
  686. /package/src/{orbit_determination → orbit-determination}/LambertIOD.ts +0 -0
@@ -5,7 +5,15 @@
5
5
  "Bash(dir:*)",
6
6
  "Bash(tree /f /a f:irissrc -L 3 -I node_modules 2)",
7
7
  "Bash(NUL)",
8
- "Bash(npm test:*)"
8
+ "Bash(npm test:*)",
9
+ "Bash(node -e:*)",
10
+ "Bash(npm run build:*)",
11
+ "Bash(node test-radec-debug.js:*)",
12
+ "Bash(find:*)",
13
+ "Bash(npm ls:*)",
14
+ "Bash(cat:*)",
15
+ "Bash(grep:*)",
16
+ "Bash(npx jest:*)"
9
17
  ],
10
18
  "deny": [],
11
19
  "ask": []
package/CLAUDE.md ADDED
@@ -0,0 +1,67 @@
1
+ # CLAUDE.md
2
+
3
+ Project-specific guidance for Claude Code.
4
+
5
+ ## Project Overview
6
+
7
+ ootk (Orbital Object Toolkit) is a TypeScript library for satellite tracking and orbital mechanics calculations.
8
+
9
+ ## Commands
10
+
11
+ - `npm test` - Run tests
12
+ - `npm run build` - Build the project
13
+
14
+ ## Code Style
15
+
16
+ ### Access Modifiers
17
+
18
+ - **No `public` keyword** - Public access is implicit
19
+ - **Private/protected static members** - Use trailing underscore suffix (`_`)
20
+ - **Use `override` keyword** - Always use when overriding inherited methods
21
+
22
+ ```typescript
23
+ // CORRECT
24
+ class Example {
25
+ name: string; // public (implicit)
26
+ private static readonly instance_: Example; // private static with _
27
+ override toString(): string { ... } // use override
28
+ }
29
+ ```
30
+
31
+ ### Imports
32
+
33
+ **No file extensions.** Project uses `moduleResolution: "Bundler"`.
34
+
35
+ ```typescript
36
+ import { Satellite } from './Satellite'; // CORRECT
37
+ import { Satellite } from './Satellite.js'; // WRONG
38
+ ```
39
+
40
+ ### Types
41
+
42
+ - Use unit type aliases: `Kilometers`, `Radians`, `Degrees`, `Seconds`, `Milliseconds`
43
+ - Cast values: `(value * DEG2RAD) as Radians`
44
+
45
+ ### Class Patterns
46
+
47
+ - **Getters** for computed/derived values
48
+ - **Static factory methods** use `fromX()` naming
49
+ - **Private constructor** for static-only utility classes
50
+ - **Singleton** uses `private static readonly instance_` with `getInstance()`
51
+
52
+ ### Naming
53
+
54
+ - Single letter names OK for math: `a`, `e`, `i`, `h`, `n`, `v`
55
+ - `toString()` returns multi-line strings via array join
56
+
57
+ ### Error Handling
58
+
59
+ - Validate inputs in constructors with `RangeError` or `Error`
60
+ - Return `null` for methods that may fail (e.g., propagation errors)
61
+
62
+ ## Module Documentation
63
+
64
+ Detailed module-specific patterns are in design docs:
65
+
66
+ - Sensor: [src/sensor/v2-docs/field-of-view-design-document.md](src/sensor/v2-docs/field-of-view-design-document.md)
67
+ - Objects: [src/objects/v2-docs/objects-module-refactoring-design-document.md](src/objects/v2-docs/objects-module-refactoring-design-document.md)
package/FUTURE-WORK.md ADDED
@@ -0,0 +1,325 @@
1
+ # ootk Roadmap
2
+
3
+ Future improvements for the Orbital Object ToolKit (ootk) library, organized by priority.
4
+
5
+ ---
6
+
7
+ ## Priority 1: Performance Optimizations
8
+
9
+ Critical for KeepTrack visualization and real-time operations.
10
+
11
+ ### 1.1 Propagation Caching
12
+
13
+ Cache recent propagation results in Satellite to avoid redundant SGP4 calls.
14
+
15
+ **Implementation:**
16
+
17
+ - LRU cache keyed by timestamp (configurable size, default 100)
18
+ - Invalidate on TLE update
19
+ - Optional time-tolerance matching for near-miss hits
20
+
21
+ **Files:** `src/objects/Satellite.ts`
22
+
23
+ ---
24
+
25
+ ### 1.2 Batch Propagation
26
+
27
+ Propagate to multiple times efficiently with shared GMST calculations.
28
+
29
+ **API:**
30
+
31
+ ```typescript
32
+ class Satellite {
33
+ eciArray(times: Date[]): Array<PosVel | null>;
34
+ ecefArray(times: Date[]): Array<EcefVec3 | null>;
35
+ }
36
+ ```
37
+
38
+ **Files:** `src/objects/Satellite.ts`, `src/objects/SpaceObject.ts`
39
+
40
+ ---
41
+
42
+ ### 1.3 AccessCalculator Optimization
43
+
44
+ Improve pass calculation performance:
45
+
46
+ - Adaptive step size (larger when far from horizon)
47
+ - Binary search for exact rise/set times
48
+ - Early termination for non-intersecting orbits
49
+
50
+ **Files:** `src/observation/AccessCalculator.ts`
51
+
52
+ ---
53
+
54
+ ### 1.4 WebWorker Support
55
+
56
+ Offload heavy computations to background threads:
57
+
58
+ - Propagation batches
59
+ - Access calculations
60
+ - Coverage analysis
61
+ - Conjunction screening
62
+
63
+ **API:**
64
+
65
+ ```typescript
66
+ const worker = new OotkWorker();
67
+ const results = await worker.calculateAccess(observer, targets, start, end);
68
+ ```
69
+
70
+ **Files:** New `src/worker/` module
71
+
72
+ ---
73
+
74
+ ### 1.5 Lazy Computation
75
+
76
+ Defer expensive calculations until first access:
77
+
78
+ - `apogee`, `perigee` - compute on demand
79
+ - `semiMajorAxis`, `semiMinorAxis` - compute on demand
80
+ - Classical elements from TLE - compute on demand
81
+
82
+ **Files:** `src/objects/Satellite.ts`
83
+
84
+ ---
85
+
86
+ ### 1.6 Transform Cache Improvements
87
+
88
+ Upgrade the existing TransformCache (currently 1000-entry FIFO):
89
+
90
+ - LRU eviction instead of FIFO
91
+ - Configurable cache size
92
+ - Cache statistics/hit rate tracking
93
+
94
+ **Files:** `src/transforms/TransformCache.ts`
95
+
96
+ ---
97
+
98
+ ## Priority 2: Quality & Validation
99
+
100
+ ### 2.1 Increase Test Coverage
101
+
102
+ Current: 49% file coverage (107/216 source files)
103
+
104
+ Priority areas:
105
+
106
+ - `src/sensor/` - 1 test for 9 source files
107
+ - `src/observation/` - 3 tests for 9 source files
108
+
109
+ Note: `src/sgp4/` has full coverage but tests are excluded from normal runs for efficiency.
110
+
111
+ **Target:** 70% file coverage
112
+
113
+ ---
114
+
115
+ ### 2.2 Property-Based Testing
116
+
117
+ Add fast-check for:
118
+
119
+ - Coordinate transform round-trips (ECI → ECEF → ECI)
120
+ - Time conversion accuracy (UTC → TT → UTC)
121
+ - Propagation consistency checks
122
+
123
+ **Files:** New `src/**/__tests__/*.property.test.ts`
124
+
125
+ ---
126
+
127
+ ### 2.3 Benchmark Suite
128
+
129
+ Track performance regressions:
130
+
131
+ ```typescript
132
+ benchmark('SGP4 single propagation', () => { });
133
+ benchmark('SGP4 batch 1000 times', () => { });
134
+ benchmark('RK4 1-day propagation', () => { });
135
+ benchmark('Access calculation 24h', () => { });
136
+ benchmark('Conjunction screening 1000 objects', () => { });
137
+ ```
138
+
139
+ **Files:** New `benchmarks/` directory
140
+
141
+ ---
142
+
143
+ ### 2.4 Reference Tool Validation
144
+
145
+ Compare results against:
146
+
147
+ - STK (Ansys)
148
+ - GMAT (NASA)
149
+ - Orekit (Java library)
150
+ - Vallado reference implementations
151
+
152
+ Document accuracy bounds for each algorithm.
153
+
154
+ **Files:** New `validation/` directory with reference data
155
+
156
+ ---
157
+
158
+ ## Priority 3: New Features
159
+
160
+ ### 3.1 Maneuver Planning
161
+
162
+ Expand beyond `TwoBurnOrbitTransfer`:
163
+
164
+ ```typescript
165
+ class ManeuverPlanner {
166
+ static hohmann(initial: ClassicalElements, targetAlt: Kilometers): Maneuver[];
167
+ static biElliptic(initial: ClassicalElements, targetAlt: Kilometers): Maneuver[];
168
+ static planeChange(initial: ClassicalElements, targetInc: Degrees): Maneuver;
169
+ static stationKeeping(satellite: Satellite, deadband: StationKeepingBox): Maneuver[];
170
+ static collisionAvoidance(conjunction: ConjunctionEvent, constraints: CAMConstraints): Maneuver;
171
+ }
172
+ ```
173
+
174
+ **Files:** `src/maneuver/ManeuverPlanner.ts`
175
+
176
+ ---
177
+
178
+ ### 3.2 Coverage Analysis
179
+
180
+ Grid-based coverage and revisit analysis:
181
+
182
+ ```typescript
183
+ class CoverageAnalyzer {
184
+ static analyzeCoverage(
185
+ satellites: Satellite[],
186
+ gridResolution: Degrees,
187
+ start: Date,
188
+ end: Date,
189
+ constraints?: CoverageConstraints
190
+ ): CoverageGrid;
191
+
192
+ static timeToFirstCoverage(
193
+ satellites: Satellite[],
194
+ target: GroundObject,
195
+ after: Date
196
+ ): Date | null;
197
+
198
+ static revisitStatistics(coverage: CoverageGrid): RevisitStats;
199
+ }
200
+ ```
201
+
202
+ **Files:** New `src/coverage/` module
203
+
204
+ ---
205
+
206
+ ### 3.3 TLE Fitting from State Vectors
207
+
208
+ Generate TLEs from ephemeris data:
209
+
210
+ ```typescript
211
+ class TleFitter {
212
+ static fromStateVector(state: StateVector, epoch: Date, options?: FitOptions): Tle;
213
+ static fromEphemeris(ephemeris: Array<{time: Date, state: StateVector}>, options?: FitOptions): Tle;
214
+ }
215
+ ```
216
+
217
+ **Files:** New `src/coordinate/TleFitter.ts`
218
+
219
+ ---
220
+
221
+ ## Priority 4: External Integration
222
+
223
+ ### 4.1 Space-Track.org Client
224
+
225
+ ```typescript
226
+ class SpaceTrackClient {
227
+ constructor(credentials: SpaceTrackCredentials);
228
+
229
+ async getTle(noradId: number): Promise<Tle>;
230
+ async getTleHistory(noradId: number, start: Date, end: Date): Promise<Tle[]>;
231
+ async searchTle(query: TleQuery): Promise<Tle[]>;
232
+ async getCatalog(): Promise<SatelliteCatalogEntry[]>;
233
+ }
234
+ ```
235
+
236
+ **Files:** New `src/api/SpaceTrackClient.ts`
237
+
238
+ ---
239
+
240
+ ### 4.2 CelesTrak Client
241
+
242
+ ```typescript
243
+ class CelesTrakClient {
244
+ async getGpData(group: string): Promise<Tle[]>;
245
+ async getSupTles(source: string): Promise<Tle[]>;
246
+ async getSpaceWeather(): Promise<SpaceWeatherData>;
247
+ }
248
+ ```
249
+
250
+ **Files:** New `src/api/CelesTrakClient.ts`
251
+
252
+ ---
253
+
254
+ ### 4.3 CCSDS Message Support
255
+
256
+ Expand parser support (OEM and CDM already done):
257
+
258
+ | Parser | Format | Status |
259
+ |--------|--------|--------|
260
+ | OemParser | Orbit Ephemeris Message | Done |
261
+ | CdmParser | Conjunction Data Message | Done |
262
+ | Sp3Parser | SP3 precise ephemerides | Planned |
263
+ | TdmParser | Tracking Data Messages | Planned |
264
+ | OpmParser | Orbit Parameter Message | Planned |
265
+ | OmmParser | Orbit Mean Elements Message | Planned |
266
+
267
+ **Files:** `src/parsers/`
268
+
269
+ ---
270
+
271
+ ### 4.4 FreeFlyer/STK Compatibility
272
+
273
+ Import/export formats for commercial tools:
274
+
275
+ - STK ephemeris files (.e)
276
+ - FreeFlyer script generation
277
+ - GMAT script generation
278
+
279
+ **Files:** New `src/compat/` module
280
+
281
+ ---
282
+
283
+ ## Lower Priority
284
+
285
+ ### 5.1 Angles-Only Orbit Determination
286
+
287
+ Add angles-only IOD methods:
288
+
289
+ - Double-r iteration
290
+ - Gooding angles-only
291
+ - Statistical OD from optical observations
292
+
293
+ **Files:** `src/orbit-determination/`
294
+
295
+ ---
296
+
297
+ ### 5.2 Atmospheric Density Models
298
+
299
+ Additional models beyond Harris-Priester:
300
+
301
+ - NRLMSISE-00
302
+ - JB2008
303
+ - DTM-2020
304
+
305
+ **Files:** `src/force/`
306
+
307
+ ---
308
+
309
+ ### 5.3 Memory-Efficient History
310
+
311
+ Optimize History for long simulations:
312
+
313
+ - Store as typed arrays (Float64Array)
314
+ - Compression for older entries
315
+ - Tiered storage (recent=full, old=downsampled)
316
+
317
+ **Files:** `src/objects/History.ts`
318
+
319
+ ---
320
+
321
+ ## Ideas for Future Consideration
322
+
323
+ - **TypeDoc Generation** - Auto-generate API documentation
324
+ - **Streaming TLE Catalogs** - Memory-efficient loading of large catalogs
325
+ - **Node.js Fetch Polyfill** - Enable API clients in server environments
@@ -0,0 +1,155 @@
1
+ /**
2
+ * @author Theodore Kruczek
3
+ * @license AGPL-3.0-or-later
4
+ * @copyright (c) 2025 Kruczek Labs LLC
5
+ *
6
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
7
+ * terms of the GNU Affero General Public License as published by the Free Software
8
+ * Foundation, either version 3 of the License, or (at your option) any later version.
9
+ *
10
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ * See the GNU Affero General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Affero General Public License along with
15
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+ import { Body } from 'astronomy-engine';
18
+ import { BaseObject, BaseObjectParams } from '../objects/BaseObject';
19
+ import { Vector3D } from '../operations/Vector3D';
20
+ import { Degrees, Kilometers, Radians } from '../types/types';
21
+ import { CelestialBodyType } from './CelestialBodyType';
22
+ import { GroundObject } from '../objects/GroundObject';
23
+ /**
24
+ * Configuration options for CelestialBody.
25
+ */
26
+ export interface CelestialBodyParams extends BaseObjectParams {
27
+ /** The celestial body type */
28
+ bodyType: CelestialBodyType;
29
+ /** Gravitational parameter (km³/s²) */
30
+ mu?: number;
31
+ /** Mean radius (km) */
32
+ radius?: Kilometers;
33
+ /** astronomy-engine Body identifier */
34
+ astronomyBody?: Body;
35
+ }
36
+ /**
37
+ * Rise/set/transit times for a celestial body.
38
+ */
39
+ export interface RiseSetTimes {
40
+ /** Time when body rises above horizon (null if circumpolar or never rises) */
41
+ rise: Date | null;
42
+ /** Time when body reaches highest point */
43
+ transit: Date | null;
44
+ /** Time when body sets below horizon (null if circumpolar or never sets) */
45
+ set: Date | null;
46
+ }
47
+ /**
48
+ * Abstract base class for all celestial bodies in the solar system.
49
+ *
50
+ * CelestialBody uses astronomy-engine for high-precision calculations of
51
+ * positions, rise/set times, and other astronomical phenomena.
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * // Get the Sun's position
56
+ * const sunPos = Sun.eci(new Date());
57
+ *
58
+ * // Get rise/set times for Mars
59
+ * const marsRiseSet = Mars.getRiseSetTimes(groundStation, new Date());
60
+ * ```
61
+ */
62
+ export declare abstract class CelestialBody extends BaseObject {
63
+ /** The type of celestial body */
64
+ bodyType: CelestialBodyType;
65
+ /** Gravitational parameter (km³/s²) */
66
+ mu?: number;
67
+ /** Mean radius (km) */
68
+ radius?: Kilometers;
69
+ /** astronomy-engine Body identifier for calculated bodies */
70
+ protected astronomyBody_?: Body;
71
+ constructor(params: CelestialBodyParams);
72
+ /**
73
+ * Gets the body's position in Earth-Centered Inertial (J2000) coordinates.
74
+ * @param date - The date/time for the position calculation
75
+ * @returns Position vector in kilometers
76
+ */
77
+ abstract eci(date?: Date): Vector3D<Kilometers>;
78
+ /**
79
+ * Gets the body's position in heliocentric coordinates.
80
+ * @param date - The date/time for the position calculation
81
+ * @returns Position vector in kilometers (Sun-centered)
82
+ */
83
+ abstract heliocentric(date?: Date): Vector3D<Kilometers>;
84
+ /**
85
+ * Gets the body's velocity vector if available.
86
+ * @param date - The date/time for the velocity calculation
87
+ * @returns Velocity vector in km/s, or null if not available
88
+ */
89
+ abstract velocity(date?: Date): Vector3D | null;
90
+ /**
91
+ * Gets the right ascension of the body as seen from Earth.
92
+ * @param date - The date/time for the calculation
93
+ * @returns Right ascension in radians
94
+ */
95
+ getRightAscension(date?: Date): Radians;
96
+ /**
97
+ * Gets the declination of the body as seen from Earth.
98
+ * @param date - The date/time for the calculation
99
+ * @returns Declination in radians
100
+ */
101
+ getDeclination(date?: Date): Radians;
102
+ /**
103
+ * Gets the azimuth and altitude of the body as seen from a ground location.
104
+ * @param observer - The ground observer location
105
+ * @param date - The date/time for the calculation
106
+ * @param refraction - Whether to apply atmospheric refraction correction
107
+ * @returns Object with azimuth and altitude in degrees
108
+ */
109
+ getAzEl(observer: GroundObject, date?: Date, refraction?: boolean): {
110
+ az: Degrees;
111
+ el: Degrees;
112
+ };
113
+ /**
114
+ * Gets the distance from Earth to this body.
115
+ * @param date - The date/time for the calculation
116
+ * @returns Distance in kilometers
117
+ */
118
+ getDistanceFromEarth(date?: Date): Kilometers;
119
+ /**
120
+ * Gets the distance from the Sun to this body.
121
+ * @param date - The date/time for the calculation
122
+ * @returns Distance in kilometers
123
+ */
124
+ getDistanceFromSun(date?: Date): Kilometers;
125
+ /**
126
+ * Gets rise, transit, and set times for this body as seen from a ground location.
127
+ * @param observer - The ground observer location
128
+ * @param date - The starting date for the search
129
+ * @param minElevation - Minimum elevation angle in degrees (default 0)
130
+ * @returns Rise, transit, and set times (null if body doesn't rise/set)
131
+ */
132
+ getRiseSetTimes(observer: GroundObject, date?: Date, minElevation?: Degrees): RiseSetTimes;
133
+ /**
134
+ * Calculates the angular diameter of this body as seen from a given position.
135
+ * @param observerPos - The observer's position in km
136
+ * @returns Angular diameter in radians
137
+ */
138
+ getAngularDiameter(observerPos: Vector3D<Kilometers>): Radians;
139
+ /**
140
+ * Calculates the angular separation between this body and a target position.
141
+ * @param targetPos - The target position in ECI coordinates (km)
142
+ * @param date - The date/time for the calculation
143
+ * @returns Angular separation in degrees
144
+ */
145
+ getAngularSeparation(targetPos: Vector3D<Kilometers>, date?: Date): Degrees;
146
+ /**
147
+ * Converts astronomy-engine GeoVector (AU) to Vector3D (km).
148
+ */
149
+ protected geoVectorToKm(body: Body, date: Date): Vector3D<Kilometers>;
150
+ /**
151
+ * Converts astronomy-engine HelioVector (AU) to Vector3D (km).
152
+ */
153
+ protected helioVectorToKm(body: Body, date: Date): Vector3D<Kilometers>;
154
+ protected serializeSpecific(): Record<string, unknown>;
155
+ }