Skip to content

Commit

Permalink
feat: ✨ Add node support
Browse files Browse the repository at this point in the history
Add proper support to Node. Previously when importing with node/vite there were errors about importing a directory and relative files needed the .js extension explicitly listed. Now it works in both node and browser.
  • Loading branch information
thkruz committed Mar 24, 2024
1 parent 2537a01 commit 7d28c3f
Show file tree
Hide file tree
Showing 72 changed files with 1,655 additions and 1,914 deletions.
4 changes: 2 additions & 2 deletions examples/README
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Run the examples using ts-node.
Run the examples using tsx.

Example:
npx ts-node .\examples\julian.ts -p ./examples/tsconfig.json
npx tsx .\examples\julian.ts -p ./examples/tsconfig.json
2 changes: 1 addition & 1 deletion examples/integrator.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { RungeKutta4Propagator, RungeKutta89Propagator, ForceModel } from '../src/main';
import { RungeKutta4Propagator, RungeKutta89Propagator, ForceModel } from '../src/main.js';
import { EpochUTC, Satellite, TleLine1, TleLine2 } from 'ootk-core';

const start = new Date(2024, 0, 28, 0, 0, 0, 0);
Expand Down
88 changes: 47 additions & 41 deletions examples/iod.ts
Original file line number Diff line number Diff line change
@@ -1,33 +1,29 @@
import { TLE } from './../src/coordinate/TLE';
import { RAE } from './../src/observation/RAE';
import { GibbsIOD } from './../src/orbit_determination/GibbsIOD';
import { HerrickGibbsIOD } from './../src/orbit_determination/HerrickGibbsIOD';
import { LambertIOD } from '@src/orbit_determination/LambertIOD.js';
import { GibbsIOD } from './../src/orbit_determination/GibbsIOD.js';
import { HerrickGibbsIOD } from './../src/orbit_determination/HerrickGibbsIOD.js';
import { DEG2RAD, Degrees, EpochUTC, J2000, Kilometers, KilometersPerSecond, RAE, Radians, Tle, Vector3D, calcGmst,
lla2eci } from 'ootk-core';
/* eslint-disable no-console */
import { J2000 } from './../src/coordinate';
import { calcGmst, DEG2RAD, Kilometers, lla2eci, Radians } from './../src/ootk';
import { Vector3D } from './../src/operations/Vector3D';
import { LambertIOD } from './../src/orbit_determination/LambertIOD';
import { EpochUTC } from './../src/time/EpochUTC';

const lambert = new LambertIOD();

const rae1 = {
t: EpochUTC.fromDateTime(new Date(1704628462000)),
rng: 1599.89,
az: 174,
el: 13.6,
rng: 1599.89 as Kilometers,
az: 174 as Degrees,
el: 13.6 as Degrees,
};
const rae2 = {
t: EpochUTC.fromDateTime(new Date(1704628462000 + 10 * 1000)),
rng: 1568.76,
az: 171,
el: 14.2,
rng: 1568.76 as Kilometers,
az: 171 as Degrees,
el: 14.2 as Degrees,
};
const rae3 = {
t: EpochUTC.fromDateTime(new Date(1704628462000 + 20 * 1000)),
rng: 1540.09,
az: 169,
el: 14.7,
rng: 1540.09 as Kilometers,
az: 169 as Degrees,
el: 14.7 as Degrees,
};
const sensor = {
lat: (41.754785 * DEG2RAD) as Radians,
Expand All @@ -39,46 +35,56 @@ const gmst = calcGmst(rae1.t.toDateTime());
const sensorEci = lla2eci(sensor, gmst.gmst);

const p1 = RAE.fromDegrees(rae1.t, rae1.rng, rae1.az, rae1.el).toStateVector(
new J2000(rae1.t, new Vector3D(sensorEci.x, sensorEci.y, sensorEci.z), Vector3D.origin),
new J2000(rae1.t,
new Vector3D(sensorEci.x, sensorEci.y, sensorEci.z), Vector3D.origin as Vector3D<KilometersPerSecond>,
),
);
const p2 = RAE.fromDegrees(rae2.t, rae2.rng, rae2.az, rae2.el).toStateVector(
new J2000(rae2.t, new Vector3D(sensorEci.x, sensorEci.y, sensorEci.z), Vector3D.origin),
new J2000(rae2.t,
new Vector3D(sensorEci.x, sensorEci.y, sensorEci.z), Vector3D.origin as Vector3D<KilometersPerSecond>,
),
);
const p3 = RAE.fromDegrees(rae3.t, rae3.rng, rae3.az, rae3.el).toStateVector(
new J2000(rae3.t, new Vector3D(sensorEci.x, sensorEci.y, sensorEci.z), Vector3D.origin),
new J2000(rae3.t,
new Vector3D(sensorEci.x, sensorEci.y, sensorEci.z), Vector3D.origin as Vector3D<KilometersPerSecond>,
),
);

const eci1 = {
x: -4901.84521484375,
y: -3592.527587890625,
z: 3322.875732421875,
x: -4901.84521484375 as Kilometers,
y: -3592.527587890625 as Kilometers,
z: 3322.875732421875 as Kilometers,
};
const eci2 = {
x: -4847.90185546875,
y: -3631.424560546875,
z: 3359.44482421875,
x: -4847.90185546875 as Kilometers,
y: -3631.424560546875 as Kilometers,
z: 3359.44482421875 as Kilometers,
};
const eci3 = {
x: -4793.376953125,
y: -3669.885986328125,
z: 3395.60986328125,
x: -4793.376953125 as Kilometers,
y: -3669.885986328125 as Kilometers,
z: 3395.60986328125 as Kilometers,
};
const p1b = new J2000(rae1.t, new Vector3D(eci1.x, eci1.y, eci1.z), Vector3D.origin);
const p2b = new J2000(rae2.t, new Vector3D(eci2.x, eci2.y, eci2.z), Vector3D.origin);
const p3b = new J2000(rae3.t, new Vector3D(eci3.x, eci3.y, eci3.z), Vector3D.origin);
const p1b = new J2000(rae1.t, new Vector3D(eci1.x, eci1.y, eci1.z), Vector3D.origin as Vector3D<KilometersPerSecond>);
const p2b = new J2000(rae2.t, new Vector3D(eci2.x, eci2.y, eci2.z), Vector3D.origin as Vector3D<KilometersPerSecond>);
const p3b = new J2000(rae3.t, new Vector3D(eci3.x, eci3.y, eci3.z), Vector3D.origin as Vector3D<KilometersPerSecond>);

const eci4 = { x: -4738.27734375, y: -3707.9072265625, z: 3431.36669921875 };
const eci4 = { x: -4738.27734375 as Kilometers, y: -3707.9072265625 as Kilometers, z: 3431.36669921875 as Kilometers};
const p4b = new J2000(
EpochUTC.fromDateTime(new Date(1704628492000)),
new Vector3D(eci4.x, eci4.y, eci4.z),
Vector3D.origin,
Vector3D.origin as Vector3D<KilometersPerSecond>,
);

const eci5 = { x: -4569.595703125, y: -3819.285400390625, z: 3536.144287109375 };
const eci5 = {
x: -4569.595703125 as Kilometers,
y: -3819.285400390625 as Kilometers,
z: 3536.144287109375 as Kilometers,
};
const p5b = new J2000(
EpochUTC.fromDateTime(new Date(1704628522000)),
new Vector3D(eci5.x, eci5.y, eci5.z),
Vector3D.origin,
Vector3D.origin as Vector3D<KilometersPerSecond>,
);

const estimate = lambert.estimate(p1.position, p2.position, p1.epoch, p2.epoch);
Expand All @@ -93,14 +99,14 @@ const estimate4 = new HerrickGibbsIOD().solve(
p5b.epoch,
);

TLE.fromClassicalElements(estimate.toClassicalElements());
TLE.fromClassicalElements(estimate2.toClassicalElements());
const tle = TLE.fromClassicalElements(estimate3.toClassicalElements());
Tle.fromClassicalElements(estimate.toClassicalElements());
Tle.fromClassicalElements(estimate2.toClassicalElements());
const tle = Tle.fromClassicalElements(estimate3.toClassicalElements());

console.log(tle.line1);
console.log(tle.line2);

const tle2 = TLE.fromClassicalElements(estimate4.toClassicalElements());
const tle2 = Tle.fromClassicalElements(estimate4.toClassicalElements());

console.log(tle2.line1);
console.log(tle2.line2);
11 changes: 11 additions & 0 deletions examples/node.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { DetailedSatellite } from '../dist/main.js';

const tle1 = '1 56006U 23042W 24012.45049317 .00000296 00000-0 36967-4 0 9992';
const tle2 = '2 56006 43.0043 13.3620 0001137 267.5965 92.4747 15.02542972 44491';
const satellite = new DetailedSatellite({
tle1,
tle2,
});

// eslint-disable-next-line no-console
console.log(satellite);
10 changes: 6 additions & 4 deletions examples/sensor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@ import {
eci2lla,
eci2rae,
Kilometers,
Satellite,
Sensor,
SensorParams,
SpaceObjectType,
TleLine1,
TleLine2,
} from 'ootk-core';
import { Satellite, Sensor } from '../src/objects';

// eslint-disable-next-line @typescript-eslint/no-unused-vars
const capeCodRadar = new Sensor({
lat: <Degrees>41.754785,
lon: <Degrees>-70.539151,
Expand Down Expand Up @@ -49,7 +51,7 @@ const ecf = {
};
// const ecf2 = { x: 982.8336640053099, y: -6779.137352354403, z: 3813.7284924837254 } as EcfVec3<Kilometers>;

const rae = ecf2rae(testSensor.getLlaRad(), ecf);
const rae = ecf2rae(testSensor.lla(), ecf);

const { gmst } = calcGmst(date);
const rae2 = eci2rae(date, ecf2eci(ecf, gmst), testSensor);
Expand All @@ -65,5 +67,5 @@ console.log({

// sat.propagateTo(date);

console.log(sat.raeOpt(testSensor, date));
console.log(sat.getJ2000(date).toITRF().toGeodetic());
console.log(sat.rae(testSensor, date));
console.log(sat.toJ2000(date).toITRF().toGeodetic());
15 changes: 12 additions & 3 deletions jest.config.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,23 @@
const jestConfig = {
testEnvironment: 'node',
extensionsToTreatAsEsm: ['.ts'],
moduleNameMapper: {
'^(\\.{1,2}/.*)\\.js$': '$1',
},
transform: {
'\\.(js|ts|jsx|tsx)$': 'babel-jest',
'^.+\\.jsx?$': 'babel-jest',
'^.+\\.tsx?$': [
'ts-jest',
{
useESM: true,
},
],
},
transformIgnorePatterns: ['node_modules/(?!(ootk-core))'],
testMatch: ['**/test/**/?(*.)+(spec|test).?(m)[jt]s?(x)'],
moduleFileExtensions: ['js', 'mjs', 'ts'],
coverageDirectory: '<rootDir>/coverage',
moduleDirectories: ['node_modules'],
modulePathIgnorePatterns: ['<rootDir>/node_modules/'],
modulePathIgnorePatterns: ['<rootDir>/node_modules/', '<rootDir>/test/sgp4/sgp4prop'],
coverageReporters: ['lcov', 'html', 'text'],
coveragePathIgnorePatterns: ['/node_modules/', '/dist/', '/lib/', '/commonjs/', '/test/', '/scripts/', '/coverage/'],
globalSetup: '<rootDir>/test/lib/globalSetup.js',
Expand Down
Loading

0 comments on commit 7d28c3f

Please sign in to comment.