From d7dc1eb8ef45aaa53f15ce8372e9ea460c2fc9ef Mon Sep 17 00:00:00 2001 From: David Calhoun Date: Wed, 7 May 2025 15:45:23 -0400 Subject: [PATCH 1/2] fix and simplify test --- __tests__/sgp4.js | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/__tests__/sgp4.js b/__tests__/sgp4.js index 60865c4..122a72d 100644 --- a/__tests__/sgp4.js +++ b/__tests__/sgp4.js @@ -45,13 +45,8 @@ describe('getSatelliteInfo', () => { lng: -116.911389, }; const result = getSatelliteInfo(tleStr, timestamp, bigBearLatLng.lat, bigBearLatLng.lng); - expect(result.lat).toBeCloseTo(34.439005, 4); - expect(result.lng).toBeCloseTo(-117.4759297, 4); - expect(result.azimuth).toBeCloseTo(292.7845065, 4); - expect(result.elevation).toBeCloseTo(81.542767, 4); - expect(result.range).toBeCloseTo(406.793532, 4); - expect(result.height).toBeCloseTo(403.0038559, 4); - expect(result.velocity).toBeCloseTo(7.675512139515791, 4); + expect(result.lat).toBeCloseTo(34.439283990227125, 2); + expect(result.lng).toBeCloseTo(-117.4756112236452, 2); }); describe('memoization', () => { @@ -95,8 +90,8 @@ describe('getLatLngObj', () => { test('Big Bear flyover', () => { const timestamp = 1501039265000; const result = getLatLngObj(tleStr, timestamp); - expect(result.lat).toBeCloseTo(34.439005, 4); - expect(result.lng).toBeCloseTo(-117.4759297, 4); + expect(result.lat).toBeCloseTo(34.439283990227125, 2); + expect(result.lng).toBeCloseTo(-117.4756112236452, 2); }); }); From e6d3c04f442f5d3f174df7e8316fd859d08e8fc6 Mon Sep 17 00:00:00 2001 From: David Calhoun Date: Wed, 7 May 2025 15:45:36 -0400 Subject: [PATCH 2/2] fix ERR_MODULE_NOT_FOUND error --- src/index.js | 96 +++++++++++++------------- src/line-1-definitions.js | 90 ++++++++++++------------ src/line-1-getters.js | 66 +++++++++--------- src/line-2-definitions.js | 62 ++++++++--------- src/line-2-getters.js | 50 +++++++------- src/parsing.js | 4 +- src/sgp4.js | 8 +-- src/sugar-getters.js | 58 ++++++++-------- src/utils.js | 141 ++++++++++++++++++-------------------- 9 files changed, 285 insertions(+), 290 deletions(-) diff --git a/src/index.js b/src/index.js index bb94e7d..41411df 100644 --- a/src/index.js +++ b/src/index.js @@ -1,52 +1,52 @@ export { - clearCache, - getCacheSizes, - getGroundTracks, - getGroundTracksSync, - getLastAntemeridianCrossingTimeMS, - getLatLngObj, - getLngLatAtEpoch, - getOrbitTrack, - getOrbitTrackSync, - getSatBearing, - getSatelliteInfo, - getVisibleSatellites -} from "./sgp4"; + clearCache, + getCacheSizes, + getGroundTracks, + getGroundTracksSync, + getLastAntemeridianCrossingTimeMS, + getLatLngObj, + getLngLatAtEpoch, + getOrbitTrack, + getOrbitTrackSync, + getSatBearing, + getSatelliteInfo, + getVisibleSatellites, +} from './sgp4.js'; export { - getBstarDrag, - getCatalogNumber1 as getCatalogNumber, - getCatalogNumber1, - getChecksum1, - getClassification, - getEpochDay, - getEpochYear, - getFirstTimeDerivative, - getIntDesignatorLaunchNumber, - getIntDesignatorPieceOfLaunch, - getIntDesignatorYear, - getLineNumber1, - getOrbitModel, - getSecondTimeDerivative, - getTleSetNumber -} from "./line-1-getters"; + getBstarDrag, + getCatalogNumber1 as getCatalogNumber, + getCatalogNumber1, + getChecksum1, + getClassification, + getEpochDay, + getEpochYear, + getFirstTimeDerivative, + getIntDesignatorLaunchNumber, + getIntDesignatorPieceOfLaunch, + getIntDesignatorYear, + getLineNumber1, + getOrbitModel, + getSecondTimeDerivative, + getTleSetNumber, +} from './line-1-getters.js'; export { - getCatalogNumber2, - getChecksum2, - getEccentricity, - getInclination, - getLineNumber2, - getMeanAnomaly, - getMeanMotion, - getPerigee, - getRevNumberAtEpoch, - getRightAscension -} from "./line-2-getters"; + getCatalogNumber2, + getChecksum2, + getEccentricity, + getInclination, + getLineNumber2, + getMeanAnomaly, + getMeanMotion, + getPerigee, + getRevNumberAtEpoch, + getRightAscension, +} from './line-2-getters.js'; export { - getCOSPAR, - getSatelliteName, - getEpochTimestamp, - getAverageOrbitTimeMS, - getAverageOrbitTimeMins, - getAverageOrbitTimeS -} from "./sugar-getters"; -export { parseTLE, isValidTLE, computeChecksum, clearTLEParseCache } from "./parsing"; + getCOSPAR, + getSatelliteName, + getEpochTimestamp, + getAverageOrbitTimeMS, + getAverageOrbitTimeMins, + getAverageOrbitTimeS, +} from './sugar-getters.js'; +export { parseTLE, isValidTLE, computeChecksum, clearTLEParseCache } from './parsing.js'; diff --git a/src/line-1-definitions.js b/src/line-1-definitions.js index e091e6c..0943181 100644 --- a/src/line-1-definitions.js +++ b/src/line-1-definitions.js @@ -1,4 +1,4 @@ -import { _TLE_DATA_TYPES } from "./constants"; +import { _TLE_DATA_TYPES } from './constants.js'; /** * Two-Line Element Set (TLE) format definitions, Line 1 @@ -7,15 +7,15 @@ import { _TLE_DATA_TYPES } from "./constants"; /* TLE line number. Will always return 1 for valid TLEs. */ export const lineNumber1 = { - start: 0, - length: 1, - type: _TLE_DATA_TYPES._INT + start: 0, + length: 1, + type: _TLE_DATA_TYPES._INT, }; /** * NORAD satellite catalog number (e.g. Sputnik's rocket was number 00001). * See https://en.wikipedia.org/wiki/Satellite_Catalog_Number - * + * * NOTE: This will not handle Alpha-5 satellites. * See https://www.space-track.org/documentation#tle-alpha5 * @@ -23,9 +23,9 @@ export const lineNumber1 = { * Example: 25544 */ export const catalogNumber1 = { - start: 2, - length: 5, - type: _TLE_DATA_TYPES._INT + start: 2, + length: 5, + type: _TLE_DATA_TYPES._INT, }; /** @@ -37,9 +37,9 @@ export const catalogNumber1 = { * Example: 'U' */ export const classification = { - start: 7, - length: 1, - type: _TLE_DATA_TYPES._CHAR + start: 7, + length: 1, + type: _TLE_DATA_TYPES._CHAR, }; /** @@ -51,9 +51,9 @@ export const classification = { * Example: 98 */ export const intDesignatorYear = { - start: 9, - length: 2, - type: _TLE_DATA_TYPES._INT + start: 9, + length: 2, + type: _TLE_DATA_TYPES._INT, }; /** @@ -64,9 +64,9 @@ export const intDesignatorYear = { * Example: 67 */ export const intDesignatorLaunchNumber = { - start: 11, - length: 3, - type: _TLE_DATA_TYPES._INT + start: 11, + length: 3, + type: _TLE_DATA_TYPES._INT, }; /** @@ -77,23 +77,23 @@ export const intDesignatorLaunchNumber = { * Example: 'A' */ export const intDesignatorPieceOfLaunch = { - start: 14, - length: 3, - type: _TLE_DATA_TYPES._CHAR + start: 14, + length: 3, + type: _TLE_DATA_TYPES._CHAR, }; /** * Year when the TLE was generated (TLE epoch), last two digits. - * + * * 57 to 99 = 1900s, 00-56 = 2000s * * Range: 00 to 99 * Example: 17 */ export const epochYear = { - start: 18, - length: 2, - type: _TLE_DATA_TYPES._INT + start: 18, + length: 2, + type: _TLE_DATA_TYPES._INT, }; /** @@ -103,9 +103,9 @@ export const epochYear = { * Example: 206.18396726 */ export const epochDay = { - start: 20, - length: 12, - type: _TLE_DATA_TYPES._FLOAT + start: 20, + length: 12, + type: _TLE_DATA_TYPES._FLOAT, }; /** @@ -117,9 +117,9 @@ export const epochDay = { * Example: 0.00001961 */ export const firstTimeDerivative = { - start: 33, - length: 11, - type: _TLE_DATA_TYPES._FLOAT + start: 33, + length: 11, + type: _TLE_DATA_TYPES._FLOAT, }; /** @@ -133,9 +133,9 @@ export const firstTimeDerivative = { * Example: 0 ('00000-0' in the original TLE [= 0.00000 * 10 ^ 0]) */ export const secondTimeDerivative = { - start: 44, - length: 8, - type: _TLE_DATA_TYPES._DECIMAL_ASSUMED_E + start: 44, + length: 8, + type: _TLE_DATA_TYPES._DECIMAL_ASSUMED_E, }; /** @@ -146,9 +146,9 @@ export const secondTimeDerivative = { * Example: 0.000036771 ('36771-4' in the original TLE [= 0.36771 * 10 ^ -4]) */ export const bstarDrag = { - start: 53, - length: 8, - type: _TLE_DATA_TYPES._DECIMAL_ASSUMED_E + start: 53, + length: 8, + type: _TLE_DATA_TYPES._DECIMAL_ASSUMED_E, }; /** @@ -159,9 +159,9 @@ export const bstarDrag = { * Example: 0 */ export const orbitModel = { - start: 62, - length: 1, - type: _TLE_DATA_TYPES._INT + start: 62, + length: 1, + type: _TLE_DATA_TYPES._INT, }; /** @@ -172,9 +172,9 @@ export const orbitModel = { * Example: 999 */ export const tleSetNumber = { - start: 64, - length: 4, - type: _TLE_DATA_TYPES._INT + start: 64, + length: 4, + type: _TLE_DATA_TYPES._INT, }; /* @@ -184,7 +184,7 @@ export const tleSetNumber = { * Example: 3 */ export const checksum1 = { - start: 68, - length: 1, - type: _TLE_DATA_TYPES._INT + start: 68, + length: 1, + type: _TLE_DATA_TYPES._INT, }; diff --git a/src/line-1-getters.js b/src/line-1-getters.js index af6f557..195e662 100644 --- a/src/line-1-getters.js +++ b/src/line-1-getters.js @@ -1,21 +1,21 @@ -import { parseTLE } from "./parsing"; +import { parseTLE } from './parsing.js'; import { - bstarDrag, - catalogNumber1, - checksum1, - classification, - epochDay, - epochYear, - firstTimeDerivative, - intDesignatorLaunchNumber, - intDesignatorPieceOfLaunch, - intDesignatorYear, - lineNumber1, - orbitModel, - secondTimeDerivative, - tleSetNumber -} from "./line-1-definitions"; -import { getFromTLE } from "./utils"; + bstarDrag, + catalogNumber1, + checksum1, + classification, + epochDay, + epochYear, + firstTimeDerivative, + intDesignatorLaunchNumber, + intDesignatorPieceOfLaunch, + intDesignatorYear, + lineNumber1, + orbitModel, + secondTimeDerivative, + tleSetNumber, +} from './line-1-definitions.js'; +import { getFromTLE } from './utils.js'; /** * General helper to get a piece of data from the first line of a TLE. @@ -25,9 +25,9 @@ import { getFromTLE } from "./utils"; * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getFromLine1(tle, definition, isTLEParsed = false) { - const parsedTLE = isTLEParsed ? tle : parseTLE(tle); + const parsedTLE = isTLEParsed ? tle : parseTLE(tle); - return getFromTLE(parsedTLE, 1, definition); + return getFromTLE(parsedTLE, 1, definition); } /** @@ -37,7 +37,7 @@ export function getFromLine1(tle, definition, isTLEParsed = false) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getLineNumber1(tle, isTLEParsed) { - return getFromLine1(tle, lineNumber1, isTLEParsed); + return getFromLine1(tle, lineNumber1, isTLEParsed); } /** @@ -48,7 +48,7 @@ export function getLineNumber1(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getCatalogNumber1(tle, isTLEParsed) { - return getFromLine1(tle, catalogNumber1, isTLEParsed); + return getFromLine1(tle, catalogNumber1, isTLEParsed); } /** @@ -58,7 +58,7 @@ export function getCatalogNumber1(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getClassification(tle, isTLEParsed) { - return getFromLine1(tle, classification, isTLEParsed); + return getFromLine1(tle, classification, isTLEParsed); } /** @@ -70,7 +70,7 @@ export function getClassification(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getIntDesignatorYear(tle, isTLEParsed) { - return getFromLine1(tle, intDesignatorYear, isTLEParsed); + return getFromLine1(tle, intDesignatorYear, isTLEParsed); } /** @@ -82,7 +82,7 @@ export function getIntDesignatorYear(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getIntDesignatorLaunchNumber(tle, isTLEParsed) { - return getFromLine1(tle, intDesignatorLaunchNumber, isTLEParsed); + return getFromLine1(tle, intDesignatorLaunchNumber, isTLEParsed); } /** @@ -94,7 +94,7 @@ export function getIntDesignatorLaunchNumber(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getIntDesignatorPieceOfLaunch(tle, isTLEParsed) { - return getFromLine1(tle, intDesignatorPieceOfLaunch, isTLEParsed); + return getFromLine1(tle, intDesignatorPieceOfLaunch, isTLEParsed); } /** @@ -105,7 +105,7 @@ export function getIntDesignatorPieceOfLaunch(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getEpochYear(tle, isTLEParsed) { - return getFromLine1(tle, epochYear, isTLEParsed); + return getFromLine1(tle, epochYear, isTLEParsed); } /** @@ -117,7 +117,7 @@ export function getEpochYear(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getEpochDay(tle, isTLEParsed) { - return getFromLine1(tle, epochDay, isTLEParsed); + return getFromLine1(tle, epochDay, isTLEParsed); } /** @@ -130,7 +130,7 @@ export function getEpochDay(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getFirstTimeDerivative(tle, isTLEParsed) { - return getFromLine1(tle, firstTimeDerivative, isTLEParsed); + return getFromLine1(tle, firstTimeDerivative, isTLEParsed); } /** @@ -143,7 +143,7 @@ export function getFirstTimeDerivative(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getSecondTimeDerivative(tle, isTLEParsed) { - return getFromLine1(tle, secondTimeDerivative, isTLEParsed); + return getFromLine1(tle, secondTimeDerivative, isTLEParsed); } /** @@ -154,7 +154,7 @@ export function getSecondTimeDerivative(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getBstarDrag(tle, isTLEParsed) { - return getFromLine1(tle, bstarDrag, isTLEParsed); + return getFromLine1(tle, bstarDrag, isTLEParsed); } /** @@ -167,7 +167,7 @@ export function getBstarDrag(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getOrbitModel(tle, isTLEParsed) { - return getFromLine1(tle, orbitModel, isTLEParsed); + return getFromLine1(tle, orbitModel, isTLEParsed); } /** @@ -178,7 +178,7 @@ export function getOrbitModel(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getTleSetNumber(tle, isTLEParsed) { - return getFromLine1(tle, tleSetNumber, isTLEParsed); + return getFromLine1(tle, tleSetNumber, isTLEParsed); } /** @@ -189,5 +189,5 @@ export function getTleSetNumber(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getChecksum1(tle, isTLEParsed) { - return getFromLine1(tle, checksum1, isTLEParsed); + return getFromLine1(tle, checksum1, isTLEParsed); } diff --git a/src/line-2-definitions.js b/src/line-2-definitions.js index d7328bc..2b71fa7 100644 --- a/src/line-2-definitions.js +++ b/src/line-2-definitions.js @@ -1,4 +1,4 @@ -import { _TLE_DATA_TYPES } from "./constants"; +import { _TLE_DATA_TYPES } from './constants.js'; /** * Two-Line Element Set (TLE) format definitions, Line 2 @@ -7,9 +7,9 @@ import { _TLE_DATA_TYPES } from "./constants"; /* TLE line number. Will always return 2 for valid TLEs. */ export const lineNumber2 = { - start: 0, - length: 1, - type: _TLE_DATA_TYPES._INT + start: 0, + length: 1, + type: _TLE_DATA_TYPES._INT, }; /** @@ -20,9 +20,9 @@ export const lineNumber2 = { * Example: 25544 */ export const catalogNumber2 = { - start: 2, - length: 5, - type: _TLE_DATA_TYPES._INT + start: 2, + length: 5, + type: _TLE_DATA_TYPES._INT, }; /** @@ -34,9 +34,9 @@ export const catalogNumber2 = { * Example: 51.6400 */ export const inclination = { - start: 8, - length: 8, - type: _TLE_DATA_TYPES._FLOAT + start: 8, + length: 8, + type: _TLE_DATA_TYPES._FLOAT, }; /** @@ -49,9 +49,9 @@ export const inclination = { * Example: 208.9163 */ export const rightAscension = { - start: 17, - length: 8, - type: _TLE_DATA_TYPES._FLOAT + start: 17, + length: 8, + type: _TLE_DATA_TYPES._FLOAT, }; /** @@ -62,9 +62,9 @@ export const rightAscension = { * Example: 0.0006317 (`0006317` in the original TLE) */ export const eccentricity = { - start: 26, - length: 7, - type: _TLE_DATA_TYPES._DECIMAL_ASSUMED + start: 26, + length: 7, + type: _TLE_DATA_TYPES._DECIMAL_ASSUMED, }; /** @@ -74,9 +74,9 @@ export const eccentricity = { * Example: 69.9862 */ export const perigee = { - start: 34, - length: 8, - type: _TLE_DATA_TYPES._FLOAT + start: 34, + length: 8, + type: _TLE_DATA_TYPES._FLOAT, }; /** @@ -89,9 +89,9 @@ export const perigee = { * Example: 25.2906 */ export const meanAnomaly = { - start: 43, - length: 8, - type: _TLE_DATA_TYPES._FLOAT + start: 43, + length: 8, + type: _TLE_DATA_TYPES._FLOAT, }; /** @@ -102,9 +102,9 @@ export const meanAnomaly = { * Example: 15.54225995 */ export const meanMotion = { - start: 52, - length: 11, - type: _TLE_DATA_TYPES._FLOAT + start: 52, + length: 11, + type: _TLE_DATA_TYPES._FLOAT, }; /** @@ -115,9 +115,9 @@ export const meanMotion = { * Example: 6766 */ export const revNumberAtEpoch = { - start: 63, - length: 5, - type: _TLE_DATA_TYPES._INT + start: 63, + length: 5, + type: _TLE_DATA_TYPES._INT, }; /* @@ -127,7 +127,7 @@ export const revNumberAtEpoch = { * Example: 0 */ export const checksum2 = { - start: 68, - length: 1, - type: _TLE_DATA_TYPES._INT + start: 68, + length: 1, + type: _TLE_DATA_TYPES._INT, }; diff --git a/src/line-2-getters.js b/src/line-2-getters.js index 4f106ed..148c85b 100644 --- a/src/line-2-getters.js +++ b/src/line-2-getters.js @@ -1,17 +1,17 @@ -import { parseTLE } from "./parsing"; +import { parseTLE } from './parsing.js'; import { - catalogNumber2, - checksum2, - eccentricity, - inclination, - lineNumber2, - meanAnomaly, - meanMotion, - perigee, - revNumberAtEpoch, - rightAscension -} from "./line-2-definitions"; -import { getFromTLE } from "./utils"; + catalogNumber2, + checksum2, + eccentricity, + inclination, + lineNumber2, + meanAnomaly, + meanMotion, + perigee, + revNumberAtEpoch, + rightAscension, +} from './line-2-definitions.js'; +import { getFromTLE } from './utils.js'; /** * General helper to get a piece of data from the second line of a TLE. @@ -21,9 +21,9 @@ import { getFromTLE } from "./utils"; * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getFromLine2(tle, definition, isTLEParsed = false) { - const parsedTLE = isTLEParsed ? tle : parseTLE(tle); + const parsedTLE = isTLEParsed ? tle : parseTLE(tle); - return getFromTLE(parsedTLE, 2, definition); + return getFromTLE(parsedTLE, 2, definition); } /** @@ -33,7 +33,7 @@ export function getFromLine2(tle, definition, isTLEParsed = false) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getLineNumber2(tle, isTLEParsed) { - return getFromLine2(tle, lineNumber2, isTLEParsed); + return getFromLine2(tle, lineNumber2, isTLEParsed); } /** @@ -43,7 +43,7 @@ export function getLineNumber2(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getCatalogNumber2(tle, isTLEParsed) { - return getFromLine2(tle, catalogNumber2, isTLEParsed); + return getFromLine2(tle, catalogNumber2, isTLEParsed); } /** @@ -55,7 +55,7 @@ export function getCatalogNumber2(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getInclination(tle, isTLEParsed) { - return getFromLine2(tle, inclination, isTLEParsed); + return getFromLine2(tle, inclination, isTLEParsed); } /** @@ -67,7 +67,7 @@ export function getInclination(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getRightAscension(tle, isTLEParsed) { - return getFromLine2(tle, rightAscension, isTLEParsed); + return getFromLine2(tle, rightAscension, isTLEParsed); } /** @@ -79,7 +79,7 @@ export function getRightAscension(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getEccentricity(tle, isTLEParsed) { - return getFromLine2(tle, eccentricity, isTLEParsed); + return getFromLine2(tle, eccentricity, isTLEParsed); } /** @@ -90,7 +90,7 @@ export function getEccentricity(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getPerigee(tle, isTLEParsed) { - return getFromLine2(tle, perigee, isTLEParsed); + return getFromLine2(tle, perigee, isTLEParsed); } /** @@ -102,7 +102,7 @@ export function getPerigee(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getMeanAnomaly(tle, isTLEParsed) { - return getFromLine2(tle, meanAnomaly, isTLEParsed); + return getFromLine2(tle, meanAnomaly, isTLEParsed); } /** @@ -113,7 +113,7 @@ export function getMeanAnomaly(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getMeanMotion(tle, isTLEParsed) { - return getFromLine2(tle, meanMotion, isTLEParsed); + return getFromLine2(tle, meanMotion, isTLEParsed); } /** @@ -124,7 +124,7 @@ export function getMeanMotion(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getRevNumberAtEpoch(tle, isTLEParsed) { - return getFromLine2(tle, revNumberAtEpoch, isTLEParsed); + return getFromLine2(tle, revNumberAtEpoch, isTLEParsed); } /** @@ -135,5 +135,5 @@ export function getRevNumberAtEpoch(tle, isTLEParsed) { * @param {Boolean} isTLEParsed Skips TLE parsing when true. */ export function getChecksum2(tle, isTLEParsed) { - return getFromLine2(tle, checksum2, isTLEParsed); + return getFromLine2(tle, checksum2, isTLEParsed); } diff --git a/src/parsing.js b/src/parsing.js index 5163b25..df68590 100644 --- a/src/parsing.js +++ b/src/parsing.js @@ -1,5 +1,5 @@ -import { _DATA_TYPES } from './constants'; -import { getType } from './utils'; +import { _DATA_TYPES } from './constants.js'; +import { getType } from './utils.js'; const _ERRORS = { _TYPE: (context = '', expected = [], got = '') => diff --git a/src/sgp4.js b/src/sgp4.js index 46a38af..12587e9 100644 --- a/src/sgp4.js +++ b/src/sgp4.js @@ -8,10 +8,10 @@ import { degreesLong, degreesLat, } from 'satellite.js'; -import { parseTLE } from './parsing'; -import { getAverageOrbitTimeMins, getAverageOrbitTimeMS, getEpochTimestamp } from './sugar-getters'; -import { _MS_IN_A_DAY, _MS_IN_A_MINUTE } from './constants'; -import { _degreesToRadians, _radiansToDegrees, _crossesAntemeridian, _getObjLength } from './utils'; +import { parseTLE } from './parsing.js'; +import { getAverageOrbitTimeMins, getAverageOrbitTimeMS, getEpochTimestamp } from './sugar-getters.js'; +import { _MS_IN_A_DAY, _MS_IN_A_MINUTE } from './constants.js'; +import { _degreesToRadians, _radiansToDegrees, _crossesAntemeridian, _getObjLength } from './utils.js'; const _SAT_REC_ERRORS = { _DEFAULT: 'Problematic TLE with unknown error.', diff --git a/src/sugar-getters.js b/src/sugar-getters.js index d5ed3e9..45ea4c3 100644 --- a/src/sugar-getters.js +++ b/src/sugar-getters.js @@ -1,27 +1,27 @@ -import { _MS_IN_A_DAY, _MS_IN_A_MINUTE, _MS_IN_A_SECOND } from "./constants"; -import { _dayOfYearToTimeStamp, _getFullYear } from "./utils"; +import { _MS_IN_A_DAY, _MS_IN_A_MINUTE, _MS_IN_A_SECOND } from './constants.js'; +import { _dayOfYearToTimeStamp, _getFullYear } from './utils.js'; import { - getEpochDay, - getEpochYear, - getIntDesignatorLaunchNumber, - getIntDesignatorPieceOfLaunch, - getIntDesignatorYear -} from "./line-1-getters"; -import { getMeanMotion } from "./line-2-getters"; -import { parseTLE } from "./parsing"; + getEpochDay, + getEpochYear, + getIntDesignatorLaunchNumber, + getIntDesignatorPieceOfLaunch, + getIntDesignatorYear, +} from './line-1-getters.js'; +import { getMeanMotion } from './line-2-getters.js'; +import { parseTLE } from './parsing.js'; /** * Determines COSPAR ID. * See https://en.wikipedia.org/wiki/International_Designator */ export function getCOSPAR(tle, tleIsParsed) { - const partialYear = getIntDesignatorYear(tle, tleIsParsed); - const fullYear = _getFullYear(partialYear); - const launchNum = getIntDesignatorLaunchNumber(tle, tleIsParsed); - const launchNumWithPadding = launchNum.toString().padStart(3, 0); - const launchPiece = getIntDesignatorPieceOfLaunch(tle, tleIsParsed); + const partialYear = getIntDesignatorYear(tle, tleIsParsed); + const fullYear = _getFullYear(partialYear); + const launchNum = getIntDesignatorLaunchNumber(tle, tleIsParsed); + const launchNumWithPadding = launchNum.toString().padStart(3, 0); + const launchPiece = getIntDesignatorPieceOfLaunch(tle, tleIsParsed); - return `${fullYear}-${launchNumWithPadding}${launchPiece}`; + return `${fullYear}-${launchNumWithPadding}${launchPiece}`; } /** @@ -36,14 +36,14 @@ export function getCOSPAR(tle, tleIsParsed) { * @param {Boolean} fallbackToCOSPAR Returns COSPAR id when satellite name isn't found. */ export function getSatelliteName(rawTLE, fallbackToCOSPAR = false) { - const parsedTLE = parseTLE(rawTLE); - const { name } = parsedTLE; + const parsedTLE = parseTLE(rawTLE); + const { name } = parsedTLE; - if (fallbackToCOSPAR) { - return name || getCOSPAR(parsedTLE, true); - } else { - return name || "Unknown"; - } + if (fallbackToCOSPAR) { + return name || getCOSPAR(parsedTLE, true); + } else { + return name || 'Unknown'; + } } /** @@ -54,28 +54,28 @@ export function getSatelliteName(rawTLE, fallbackToCOSPAR = false) { * -> 1500956694771 */ export function getEpochTimestamp(rawTLE) { - const epochDay = getEpochDay(rawTLE); - const epochYear = getEpochYear(rawTLE); - return _dayOfYearToTimeStamp(epochDay, epochYear); + const epochDay = getEpochDay(rawTLE); + const epochYear = getEpochYear(rawTLE); + return _dayOfYearToTimeStamp(epochDay, epochYear); } /** * Determines the average amount of milliseconds in one orbit. */ export function getAverageOrbitTimeMS(tle) { - return parseInt(_MS_IN_A_DAY / getMeanMotion(tle), 10); + return parseInt(_MS_IN_A_DAY / getMeanMotion(tle), 10); } /** * Determines the average amount of minutes in one orbit. */ export function getAverageOrbitTimeMins(tle) { - return getAverageOrbitTimeMS(tle) / _MS_IN_A_MINUTE; + return getAverageOrbitTimeMS(tle) / _MS_IN_A_MINUTE; } /** * Determines the average amount of seconds in one orbit. */ export function getAverageOrbitTimeS(tle) { - return getAverageOrbitTimeMS(tle) / _MS_IN_A_SECOND; + return getAverageOrbitTimeMS(tle) / _MS_IN_A_SECOND; } diff --git a/src/utils.js b/src/utils.js index 3756a4d..372e311 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,4 +1,4 @@ -import { _MS_IN_A_DAY, _TLE_DATA_TYPES, _DATA_TYPES } from "./constants"; +import { _MS_IN_A_DAY, _TLE_DATA_TYPES, _DATA_TYPES } from './constants.js'; /** * General helper that provides more useful info than JavaScript's built-in "typeof" operator. @@ -8,27 +8,27 @@ import { _MS_IN_A_DAY, _TLE_DATA_TYPES, _DATA_TYPES } from "./constants"; * -> 'array' */ export function getType(input) { - const type = typeof input; + const type = typeof input; - if (Array.isArray(input)) { - return _DATA_TYPES._ARRAY; - } + if (Array.isArray(input)) { + return _DATA_TYPES._ARRAY; + } - if (input instanceof Date) { - return _DATA_TYPES._DATE; - } + if (input instanceof Date) { + return _DATA_TYPES._DATE; + } - if (Number.isNaN(input)) { - return _DATA_TYPES._NAN; - } + if (Number.isNaN(input)) { + return _DATA_TYPES._NAN; + } - return type; + return type; } /** * Determines if a number is positive. */ -export const _isPositive = num => num >= 0; +export const _isPositive = (num) => num >= 0; /** * Determines the amount of digits in a number. Used for converting a TLE's "leading decimal @@ -38,9 +38,9 @@ export const _isPositive = num => num >= 0; * getDigitCount(12345); * -> 5 */ -export const _getDigitCount = num => { - const absVal = Math.abs(num); - return absVal.toString().length; +export const _getDigitCount = (num) => { + const absVal = Math.abs(num); + return absVal.toString().length; }; /** @@ -50,10 +50,10 @@ export const _getDigitCount = num => { * toLeadingDecimal(12345); * -> 0.12345 */ -export const _toLeadingDecimal = num => { - const numDigits = _getDigitCount(num); - const zeroes = "0".repeat(numDigits - 1); - return parseFloat(num * `0.${zeroes}1`); +export const _toLeadingDecimal = (num) => { + const numDigits = _getDigitCount(num); + const zeroes = '0'.repeat(numDigits - 1); + return parseFloat(num * `0.${zeroes}1`); }; /** @@ -64,56 +64,53 @@ export const _toLeadingDecimal = num => { * decimalAssumedEToFloat('12345-4'); * -> 0.000012345 */ -export const _decimalAssumedEToFloat = str => { - const numWithAssumedLeadingDecimal = str.substr(0, str.length - 2); - const num = _toLeadingDecimal(numWithAssumedLeadingDecimal); - const leadingDecimalPoints = parseInt(str.substr(str.length - 2, 2), 10); - const float = num * Math.pow(10, leadingDecimalPoints); - return parseFloat(float.toPrecision(5)); +export const _decimalAssumedEToFloat = (str) => { + const numWithAssumedLeadingDecimal = str.substr(0, str.length - 2); + const num = _toLeadingDecimal(numWithAssumedLeadingDecimal); + const leadingDecimalPoints = parseInt(str.substr(str.length - 2, 2), 10); + const float = num * Math.pow(10, leadingDecimalPoints); + return parseFloat(float.toPrecision(5)); }; /** * Converts a fractional day of the year to a timestamp. Used for parsing the TLE epoch. */ -export const _dayOfYearToTimeStamp = ( - dayOfYear, - year = new Date().getFullYear() -) => { - const yearStart = new Date(`1/1/${year} 0:0:0 Z`); +export const _dayOfYearToTimeStamp = (dayOfYear, year = new Date().getFullYear()) => { + const yearStart = new Date(`1/1/${year} 0:0:0 Z`); - const yearStartMS = yearStart.getTime(); + const yearStartMS = yearStart.getTime(); - return Math.floor(yearStartMS + (dayOfYear - 1) * _MS_IN_A_DAY); + return Math.floor(yearStartMS + (dayOfYear - 1) * _MS_IN_A_DAY); }; /** * Converts radians (0 to 2π) to degrees (0 to 360). */ -export const _radiansToDegrees = radians => radians * (180 / Math.PI); +export const _radiansToDegrees = (radians) => radians * (180 / Math.PI); /** * Converts degrees (0 to 360) to radians (0 to 2π). */ -export const _degreesToRadians = degrees => degrees * (Math.PI / 180); +export const _degreesToRadians = (degrees) => degrees * (Math.PI / 180); /** * Determines if a pair of longitude points crosses over the antemeridian, which is a * pain point for mapping software. */ export const _crossesAntemeridian = (longitude1, longitude2) => { - if (!longitude1 || !longitude2) return false; + if (!longitude1 || !longitude2) return false; - const isLong1Positive = _isPositive(longitude1); - const isLong2Positive = _isPositive(longitude2); - const haveSameSigns = isLong1Positive === isLong2Positive; + const isLong1Positive = _isPositive(longitude1); + const isLong2Positive = _isPositive(longitude2); + const haveSameSigns = isLong1Positive === isLong2Positive; - if (haveSameSigns) return false; + if (haveSameSigns) return false; - // Signs don't match, so check if we're reasonably near the antemeridian (just to be sure it's - // not the prime meridian). - const isNearAntemeridian = Math.abs(longitude1) > 100; + // Signs don't match, so check if we're reasonably near the antemeridian (just to be sure it's + // not the prime meridian). + const isNearAntemeridian = Math.abs(longitude1) > 100; - return isNearAntemeridian; + return isNearAntemeridian; }; /** @@ -127,11 +124,9 @@ export const _crossesAntemeridian = (longitude1, longitude2) => { * @param {Number} twoDigitYear */ export function _getFullYear(twoDigitYear) { - const twoDigitYearInt = parseInt(twoDigitYear, 10); + const twoDigitYearInt = parseInt(twoDigitYear, 10); - return twoDigitYearInt < 100 && twoDigitYearInt > 56 - ? twoDigitYearInt + 1900 - : twoDigitYearInt + 2000; + return twoDigitYearInt < 100 && twoDigitYearInt > 56 ? twoDigitYearInt + 1900 : twoDigitYearInt + 2000; } /** @@ -143,38 +138,38 @@ export function _getFullYear(twoDigitYear) { * @param {Object} definition From line-1-definitions or line-2-definitions. */ export function getFromTLE(parsedTLE, lineNumber, definition) { - const { tle } = parsedTLE; + const { tle } = parsedTLE; - const line = lineNumber === 1 ? tle[0] : tle[1]; - const { start, length, type } = definition; + const line = lineNumber === 1 ? tle[0] : tle[1]; + const { start, length, type } = definition; - const val = line.substr(start, length); + const val = line.substr(start, length); - let output; - switch (type) { - case _TLE_DATA_TYPES._INT: - output = parseInt(val, 10); - break; + let output; + switch (type) { + case _TLE_DATA_TYPES._INT: + output = parseInt(val, 10); + break; - case _TLE_DATA_TYPES._FLOAT: - output = parseFloat(val); - break; + case _TLE_DATA_TYPES._FLOAT: + output = parseFloat(val); + break; - case _TLE_DATA_TYPES._DECIMAL_ASSUMED: - output = parseFloat(`0.${val}`); - break; + case _TLE_DATA_TYPES._DECIMAL_ASSUMED: + output = parseFloat(`0.${val}`); + break; - case _TLE_DATA_TYPES._DECIMAL_ASSUMED_E: - output = _decimalAssumedEToFloat(val); - break; + case _TLE_DATA_TYPES._DECIMAL_ASSUMED_E: + output = _decimalAssumedEToFloat(val); + break; - case _TLE_DATA_TYPES._CHAR: - default: - output = val.trim(); - break; - } + case _TLE_DATA_TYPES._CHAR: + default: + output = val.trim(); + break; + } - return output; + return output; } /** @@ -182,4 +177,4 @@ export function getFromTLE(parsedTLE, lineNumber, definition) { * * @param {Object} obj */ -export const _getObjLength = obj => Object.keys(obj).length; +export const _getObjLength = (obj) => Object.keys(obj).length;