gnss-js 0.1.2 → 1.0.0

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 (87) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +171 -5
  3. package/dist/analysis.cjs +1381 -0
  4. package/dist/analysis.d.cts +211 -0
  5. package/dist/analysis.d.ts +211 -0
  6. package/dist/analysis.js +14 -0
  7. package/dist/antex.cjs +239 -0
  8. package/dist/antex.d.cts +77 -0
  9. package/dist/antex.d.ts +77 -0
  10. package/dist/antex.js +8 -0
  11. package/dist/chunk-354IRDOG.js +239 -0
  12. package/dist/chunk-37QNKGTC.js +65 -0
  13. package/dist/chunk-5CMSYIYM.js +214 -0
  14. package/dist/chunk-5S5MONFK.js +0 -0
  15. package/dist/chunk-6FAL6P4G.js +12 -0
  16. package/dist/chunk-7NOFXKET.js +433 -0
  17. package/dist/chunk-CB6EOOLA.js +753 -0
  18. package/dist/chunk-HKN3PUGN.js +800 -0
  19. package/dist/chunk-IS4UUDBV.js +577 -0
  20. package/dist/chunk-K7WZQFBV.js +236 -0
  21. package/dist/chunk-LEEU5OIO.js +75 -0
  22. package/dist/chunk-PRSZIWKM.js +1482 -0
  23. package/dist/chunk-SDRRAJT5.js +433 -0
  24. package/dist/chunk-WR7LCB52.js +143 -0
  25. package/dist/chunk-Y3R57B5P.js +473 -0
  26. package/dist/chunk-YDMYO3YK.js +220 -0
  27. package/dist/constants.cjs +394 -0
  28. package/dist/constants.d.cts +14 -0
  29. package/dist/constants.d.ts +14 -0
  30. package/dist/constants.js +103 -0
  31. package/dist/coordinates.cjs +334 -0
  32. package/dist/coordinates.d.cts +81 -0
  33. package/dist/coordinates.d.ts +81 -0
  34. package/dist/coordinates.js +39 -0
  35. package/dist/ecef-CF0uAysr.d.cts +40 -0
  36. package/dist/ecef-CF0uAysr.d.ts +40 -0
  37. package/dist/ephemeris-BUWzfmBy.d.cts +114 -0
  38. package/dist/ephemeris-BUWzfmBy.d.ts +114 -0
  39. package/dist/gnss-BT6ulR17.d.cts +56 -0
  40. package/dist/gnss-C-tgoYNa.d.ts +56 -0
  41. package/dist/index.cjs +5774 -78
  42. package/dist/index.d.cts +17 -96
  43. package/dist/index.d.ts +17 -96
  44. package/dist/index.js +352 -415
  45. package/dist/nav-BAI1a9vK.d.cts +108 -0
  46. package/dist/nav-BAI1a9vK.d.ts +108 -0
  47. package/dist/nmea.cjs +247 -0
  48. package/dist/nmea.d.cts +37 -0
  49. package/dist/nmea.d.ts +37 -0
  50. package/dist/nmea.js +12 -0
  51. package/dist/ntrip.cjs +169 -0
  52. package/dist/ntrip.d.cts +98 -0
  53. package/dist/ntrip.d.ts +98 -0
  54. package/dist/ntrip.js +10 -0
  55. package/dist/orbit.cjs +504 -0
  56. package/dist/orbit.d.cts +117 -0
  57. package/dist/orbit.d.ts +117 -0
  58. package/dist/orbit.js +29 -0
  59. package/dist/parser-JPjjFgeP.d.cts +73 -0
  60. package/dist/parser-JPjjFgeP.d.ts +73 -0
  61. package/dist/rinex.cjs +1375 -0
  62. package/dist/rinex.d.cts +116 -0
  63. package/dist/rinex.d.ts +116 -0
  64. package/dist/rinex.js +37 -0
  65. package/dist/rtcm3.cjs +1519 -0
  66. package/dist/rtcm3.d.cts +143 -0
  67. package/dist/rtcm3.d.ts +143 -0
  68. package/dist/rtcm3.js +31 -0
  69. package/dist/signals.cjs +858 -0
  70. package/dist/signals.d.cts +93 -0
  71. package/dist/signals.d.ts +93 -0
  72. package/dist/signals.js +70 -0
  73. package/dist/time-DnI1VpE8.d.cts +33 -0
  74. package/dist/time-DnI1VpE8.d.ts +33 -0
  75. package/dist/time.cjs +585 -0
  76. package/dist/time.d.cts +307 -0
  77. package/dist/time.d.ts +307 -0
  78. package/dist/time.js +154 -0
  79. package/package.json +112 -14
  80. package/.prettierrc +0 -5
  81. package/jest.config.ts +0 -9
  82. package/test/functions.test.ts +0 -63
  83. package/test/gnss-scales.test.ts +0 -95
  84. package/test/julian.test.ts +0 -145
  85. package/test/rinex.test.ts +0 -11
  86. package/test/test.ts +0 -10
  87. package/test/utc.test.ts +0 -25
package/dist/time.cjs ADDED
@@ -0,0 +1,585 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/time/index.ts
21
+ var time_exports = {};
22
+ __export(time_exports, {
23
+ DAYS_MJD2000_MJD: () => DAYS_MJD2000_MJD,
24
+ DAYS_MJD_JULIAN: () => DAYS_MJD_JULIAN,
25
+ MILLISECONDS_GPS_TAI: () => MILLISECONDS_GPS_TAI,
26
+ MILLISECONDS_IN_DAY: () => MILLISECONDS_IN_DAY,
27
+ MILLISECONDS_IN_HOUR: () => MILLISECONDS_IN_HOUR,
28
+ MILLISECONDS_IN_MINUTE: () => MILLISECONDS_IN_MINUTE,
29
+ MILLISECONDS_IN_SECOND: () => MILLISECONDS_IN_SECOND,
30
+ MILLISECONDS_IN_WEEK: () => MILLISECONDS_IN_WEEK,
31
+ MILLISECONDS_TT_TAI: () => MILLISECONDS_TT_TAI,
32
+ RINEX_CODES: () => RINEX_CODES,
33
+ SECONDS_IN_DAY: () => SECONDS_IN_DAY,
34
+ SECONDS_IN_HOUR: () => SECONDS_IN_HOUR,
35
+ SECONDS_IN_MINUTE: () => SECONDS_IN_MINUTE,
36
+ SECONDS_IN_WEEK: () => SECONDS_IN_WEEK,
37
+ START_BDS_TIME: () => START_BDS_TIME,
38
+ START_GAL_TIME: () => START_GAL_TIME,
39
+ START_GLO_LEAP: () => START_GLO_LEAP,
40
+ START_GPS_TIME: () => START_GPS_TIME,
41
+ START_JULIAN_TAI: () => START_JULIAN_TAI,
42
+ START_MJD_UNIX_SECONDS: () => START_MJD_UNIX_SECONDS,
43
+ START_NTP_TIME: () => START_NTP_TIME,
44
+ START_TAI_TIME: () => START_TAI_TIME,
45
+ START_UNIX_TIME: () => START_UNIX_TIME,
46
+ Scale: () => Scale,
47
+ getBdsTime: () => getBdsTime,
48
+ getDateFromBdsTime: () => getDateFromBdsTime,
49
+ getDateFromDayOfWeek: () => getDateFromDayOfWeek,
50
+ getDateFromDayOfYear: () => getDateFromDayOfYear,
51
+ getDateFromGalTime: () => getDateFromGalTime,
52
+ getDateFromGloN: () => getDateFromGloN,
53
+ getDateFromGpsData: () => getDateFromGpsData,
54
+ getDateFromGpsTime: () => getDateFromGpsTime,
55
+ getDateFromHourCode: () => getDateFromHourCode,
56
+ getDateFromJulianDate: () => getDateFromJulianDate,
57
+ getDateFromMJD: () => getDateFromMJD,
58
+ getDateFromMJD2000: () => getDateFromMJD2000,
59
+ getDateFromRINEX: () => getDateFromRINEX,
60
+ getDateFromTai: () => getDateFromTai,
61
+ getDateFromTimeOfDay: () => getDateFromTimeOfDay,
62
+ getDateFromTt: () => getDateFromTt,
63
+ getDateFromUnixTime: () => getDateFromUnixTime,
64
+ getDateFromUtc: () => getDateFromUtc,
65
+ getDayOfWeek: () => getDayOfWeek,
66
+ getDayOfYear: () => getDayOfYear,
67
+ getGalTime: () => getGalTime,
68
+ getGloN4: () => getGloN4,
69
+ getGloNA: () => getGloNA,
70
+ getGpsLeap: () => getGpsLeap,
71
+ getGpsTime: () => getGpsTime,
72
+ getHourCode: () => getHourCode,
73
+ getHoursFromTimeDifference: () => getHoursFromTimeDifference,
74
+ getJulianDate: () => getJulianDate,
75
+ getLeap: () => getLeap,
76
+ getMJD: () => getMJD,
77
+ getMJD2000: () => getMJD2000,
78
+ getMinutesFromTimeDifference: () => getMinutesFromTimeDifference,
79
+ getNtpTime: () => getNtpTime,
80
+ getRINEX: () => getRINEX,
81
+ getSecondsFromTimeDifference: () => getSecondsFromTimeDifference,
82
+ getTaiDate: () => getTaiDate,
83
+ getTimeDifference: () => getTimeDifference,
84
+ getTimeDifferenceFromDays: () => getTimeDifferenceFromDays,
85
+ getTimeDifferenceFromHours: () => getTimeDifferenceFromHours,
86
+ getTimeDifferenceFromMinutes: () => getTimeDifferenceFromMinutes,
87
+ getTimeDifferenceFromObject: () => getTimeDifferenceFromObject,
88
+ getTimeDifferenceFromSeconds: () => getTimeDifferenceFromSeconds,
89
+ getTimeOfDay: () => getTimeOfDay,
90
+ getTimeOfWeek: () => getTimeOfWeek,
91
+ getTotalDaysFromTimeDifference: () => getTotalDaysFromTimeDifference,
92
+ getTtDate: () => getTtDate,
93
+ getUnixTime: () => getUnixTime,
94
+ getUtcDate: () => getUtcDate,
95
+ getWeekNumber: () => getWeekNumber,
96
+ getWeekOfYear: () => getWeekOfYear
97
+ });
98
+ module.exports = __toCommonJS(time_exports);
99
+
100
+ // src/constants/time.ts
101
+ var SECONDS_IN_WEEK = 604800;
102
+ var SECONDS_IN_DAY = 86400;
103
+ var SECONDS_IN_HOUR = 3600;
104
+ var SECONDS_IN_MINUTE = 60;
105
+ var MILLISECONDS_IN_WEEK = 6048e5;
106
+ var MILLISECONDS_IN_DAY = 864e5;
107
+ var MILLISECONDS_IN_HOUR = 36e5;
108
+ var MILLISECONDS_IN_MINUTE = 6e4;
109
+ var MILLISECONDS_IN_SECOND = 1e3;
110
+ var MILLISECONDS_TT_TAI = 32184;
111
+ var MILLISECONDS_GPS_TAI = 19e3;
112
+ var START_GPS_TIME = /* @__PURE__ */ new Date("1980-01-06T00:00:00Z");
113
+ var START_GAL_TIME = /* @__PURE__ */ new Date("1999-08-22T00:00:00Z");
114
+ var START_BDS_TIME = /* @__PURE__ */ new Date("2006-01-01T00:00:14Z");
115
+ var START_UNIX_TIME = /* @__PURE__ */ new Date("1969-12-31T23:59:49Z");
116
+ var START_NTP_TIME = /* @__PURE__ */ new Date("1900-01-01T00:00:00Z");
117
+ var START_GLO_LEAP = /* @__PURE__ */ new Date("1996-01-01T00:00:00Z");
118
+ var START_TAI_TIME = /* @__PURE__ */ new Date("1957-12-31T23:59:41Z");
119
+ var RINEX_CODES = [
120
+ "a",
121
+ "b",
122
+ "c",
123
+ "d",
124
+ "e",
125
+ "f",
126
+ "g",
127
+ "h",
128
+ "i",
129
+ "j",
130
+ "k",
131
+ "l",
132
+ "m",
133
+ "n",
134
+ "o",
135
+ "p",
136
+ "q",
137
+ "r",
138
+ "s",
139
+ "t",
140
+ "u",
141
+ "v",
142
+ "w",
143
+ "x"
144
+ ];
145
+ var START_JULIAN_TAI = 24362045e-1;
146
+ var DAYS_MJD_JULIAN = 24000005e-1;
147
+ var DAYS_MJD2000_MJD = 51544.5;
148
+ var START_MJD_UNIX_SECONDS = 40587;
149
+
150
+ // src/types/enums.ts
151
+ var Scale = /* @__PURE__ */ ((Scale2) => {
152
+ Scale2[Scale2["TAI"] = 0] = "TAI";
153
+ Scale2[Scale2["TT"] = 1] = "TT";
154
+ Scale2[Scale2["GPS"] = 2] = "GPS";
155
+ Scale2[Scale2["UTC"] = 3] = "UTC";
156
+ return Scale2;
157
+ })(Scale || {});
158
+
159
+ // src/time/functions.ts
160
+ function getTimeOfDay(date) {
161
+ return date.getTime() - Date.UTC(
162
+ date.getUTCFullYear(),
163
+ date.getUTCMonth(),
164
+ date.getUTCDate(),
165
+ 0,
166
+ 0,
167
+ 0
168
+ );
169
+ }
170
+ function getDateFromTimeOfDay(timeOfDay, dateRaw) {
171
+ return new Date(
172
+ Date.UTC(
173
+ dateRaw.getUTCFullYear(),
174
+ dateRaw.getUTCMonth(),
175
+ dateRaw.getUTCDate(),
176
+ 0,
177
+ 0,
178
+ 0
179
+ ) + timeOfDay
180
+ );
181
+ }
182
+ function getDayOfYear(date) {
183
+ return Math.floor(
184
+ (date.getTime() - Date.UTC(date.getUTCFullYear())) / MILLISECONDS_IN_DAY
185
+ ) + 1;
186
+ }
187
+ function getDateFromDayOfYear(dayOfYear, date) {
188
+ return new Date(
189
+ Date.UTC(
190
+ date.getUTCFullYear(),
191
+ 0,
192
+ 1,
193
+ date.getUTCHours(),
194
+ date.getUTCMinutes(),
195
+ date.getUTCSeconds(),
196
+ date.getUTCMilliseconds()
197
+ ) + (dayOfYear - 1) * MILLISECONDS_IN_DAY
198
+ );
199
+ }
200
+ function getDayOfWeek(date) {
201
+ return date.getUTCDay();
202
+ }
203
+ function getDateFromDayOfWeek(dayOfWeek, dateRaw) {
204
+ if (dayOfWeek < 0 || dayOfWeek > 6)
205
+ throw new Error("Day of week must be a value between 0 and 7");
206
+ return new Date(
207
+ dateRaw.getTime() + (dayOfWeek - dateRaw.getUTCDay()) * MILLISECONDS_IN_DAY
208
+ );
209
+ }
210
+ function getDateFromHourCode(hourCode, date) {
211
+ const hour = RINEX_CODES.indexOf(hourCode);
212
+ if (hour === -1)
213
+ throw new Error("Hour code must be a lowercase letter between a and x");
214
+ const newDate = new Date(date.getTime());
215
+ newDate.setUTCHours(hour);
216
+ return newDate;
217
+ }
218
+ function getHourCode(date) {
219
+ return RINEX_CODES[date.getUTCHours()];
220
+ }
221
+ function getWeekOfYear(date) {
222
+ const target = new Date(
223
+ Date.UTC(date.getFullYear(), date.getMonth(), date.getDate())
224
+ );
225
+ const dayNr = (target.getUTCDay() + 6) % 7;
226
+ target.setUTCDate(target.getUTCDate() - dayNr + 3);
227
+ const firstThursday = new Date(Date.UTC(target.getUTCFullYear(), 0, 4));
228
+ const dayDiff = (target.getTime() - firstThursday.getTime()) / (86400 * 1e3);
229
+ return 1 + Math.floor(dayDiff / 7) + 1;
230
+ }
231
+
232
+ // src/time/time-difference.ts
233
+ function getTimeDifference(startDate, finalDate) {
234
+ return Math.floor(finalDate.getTime() - startDate.getTime());
235
+ }
236
+ function getSecondsFromTimeDifference(timeDifference) {
237
+ return Math.floor(
238
+ timeDifference % MILLISECONDS_IN_MINUTE / MILLISECONDS_IN_SECOND
239
+ );
240
+ }
241
+ function getMinutesFromTimeDifference(timeDifference) {
242
+ return Math.floor(
243
+ timeDifference % MILLISECONDS_IN_HOUR / MILLISECONDS_IN_MINUTE
244
+ );
245
+ }
246
+ function getHoursFromTimeDifference(timeDifference) {
247
+ return Math.floor(
248
+ timeDifference % MILLISECONDS_IN_DAY / MILLISECONDS_IN_HOUR
249
+ );
250
+ }
251
+ function getTotalDaysFromTimeDifference(timeDifference) {
252
+ return Math.floor(timeDifference / MILLISECONDS_IN_DAY);
253
+ }
254
+ function getTimeDifferenceFromSeconds(seconds) {
255
+ return seconds * MILLISECONDS_IN_SECOND;
256
+ }
257
+ function getTimeDifferenceFromMinutes(minutes) {
258
+ return minutes * MILLISECONDS_IN_MINUTE;
259
+ }
260
+ function getTimeDifferenceFromHours(hours) {
261
+ return hours * MILLISECONDS_IN_HOUR;
262
+ }
263
+ function getTimeDifferenceFromDays(days) {
264
+ return days * MILLISECONDS_IN_DAY;
265
+ }
266
+ function getTimeDifferenceFromObject(timeDifferenceObject) {
267
+ const { seconds, minutes, hours, days } = timeDifferenceObject;
268
+ return getTimeDifferenceFromSeconds(seconds) + getTimeDifferenceFromMinutes(minutes) + getTimeDifferenceFromHours(hours) + getTimeDifferenceFromDays(days);
269
+ }
270
+
271
+ // src/time/utc.ts
272
+ var LEAP_SECONDS_TABLE = [
273
+ [3692217600, 37],
274
+ // 1 Jan 2017
275
+ [3644697600, 36],
276
+ // 1 Jul 2015
277
+ [3550089600, 35],
278
+ // 1 Jul 2012
279
+ [3439756800, 34],
280
+ // 1 Jan 2009
281
+ [3345062400, 33],
282
+ // 1 Jan 2006
283
+ [3124137600, 32],
284
+ // 1 Jan 1999
285
+ [3076704e3, 31],
286
+ // 1 Jul 1997
287
+ [3029443200, 30],
288
+ // 1 Jan 1996
289
+ [2982009600, 29],
290
+ // 1 Jul 1994
291
+ [2950473600, 28],
292
+ // 1 Jul 1993
293
+ [2918937600, 27],
294
+ // 1 Jul 1992
295
+ [2871676800, 26],
296
+ // 1 Jan 1991
297
+ [2840140800, 25],
298
+ // 1 Jan 1990
299
+ [2776982400, 24],
300
+ // 1 Jan 1988
301
+ [2698012800, 23],
302
+ // 1 Jul 1985
303
+ [2634854400, 22],
304
+ // 1 Jul 1983
305
+ [2603318400, 21],
306
+ // 1 Jul 1982
307
+ [2571782400, 20],
308
+ // 1 Jul 1981
309
+ [2524521600, 19],
310
+ // 1 Jan 1980
311
+ [2492985600, 18],
312
+ // 1 Jan 1979
313
+ [2461449600, 17],
314
+ // 1 Jan 1978
315
+ [2429913600, 16],
316
+ // 1 Jan 1977
317
+ [2398291200, 15],
318
+ // 1 Jan 1976
319
+ [2366755200, 14],
320
+ // 1 Jan 1975
321
+ [2335219200, 13],
322
+ // 1 Jan 1974
323
+ [2303683200, 12],
324
+ // 1 Jan 1973
325
+ [2287785600, 11],
326
+ // 1 Jul 1972
327
+ [2272060800, 10]
328
+ // 1 Jan 1972
329
+ ];
330
+ function getLeap(date) {
331
+ const ntp_time = getNtpTime(date);
332
+ for (const [timestamp, leapSeconds] of LEAP_SECONDS_TABLE) {
333
+ if (ntp_time / MILLISECONDS_IN_SECOND - leapSeconds >= timestamp) {
334
+ return leapSeconds;
335
+ }
336
+ }
337
+ return 8;
338
+ }
339
+ function getGpsLeap(date) {
340
+ const leap_seconds = getLeap(date);
341
+ if (leap_seconds < 0) return 0;
342
+ return leap_seconds - 19;
343
+ }
344
+ function getUtcDate(date) {
345
+ const tai_date = getTaiDate(date);
346
+ const leap_seconds = getLeap(date);
347
+ return new Date(tai_date.getTime() - leap_seconds * MILLISECONDS_IN_SECOND);
348
+ }
349
+ function getDateFromUtc(utc_date) {
350
+ const tai_date = new Date(
351
+ utc_date.getTime() + getLeap(utc_date) * MILLISECONDS_IN_SECOND
352
+ );
353
+ const leap_seconds = getLeap(getDateFromTai(tai_date));
354
+ const gps_date = getDateFromTai(
355
+ new Date(utc_date.getTime() + leap_seconds * MILLISECONDS_IN_SECOND)
356
+ );
357
+ return gps_date;
358
+ }
359
+
360
+ // src/time/gnss.ts
361
+ function getGpsTime(date) {
362
+ return date.getTime() - START_GPS_TIME.getTime();
363
+ }
364
+ function getDateFromGpsTime(gpsTime) {
365
+ return new Date(gpsTime + START_GPS_TIME.getTime());
366
+ }
367
+ function getGalTime(date) {
368
+ return date.getTime() - START_GAL_TIME.getTime();
369
+ }
370
+ function getDateFromGalTime(galTime) {
371
+ return new Date(galTime + START_GAL_TIME.getTime());
372
+ }
373
+ function getBdsTime(date) {
374
+ return date.getTime() - START_BDS_TIME.getTime();
375
+ }
376
+ function getDateFromBdsTime(bdsTime) {
377
+ return new Date(bdsTime + START_BDS_TIME.getTime());
378
+ }
379
+ function getUnixTime(date) {
380
+ const utc_date = getUtcDate(date);
381
+ return utc_date.getTime();
382
+ }
383
+ function getDateFromUnixTime(unixTime) {
384
+ return getDateFromUtc(new Date(unixTime));
385
+ }
386
+ function getWeekNumber(date) {
387
+ return Math.floor(getGpsTime(date) / MILLISECONDS_IN_WEEK);
388
+ }
389
+ function getTimeOfWeek(date) {
390
+ return getGpsTime(date) % MILLISECONDS_IN_WEEK;
391
+ }
392
+ function getDateFromGpsData(weekNumber, timeOfWeek) {
393
+ return new Date(
394
+ weekNumber * MILLISECONDS_IN_WEEK + timeOfWeek + START_GPS_TIME.getTime()
395
+ );
396
+ }
397
+ function getTaiDate(date) {
398
+ return new Date(date.getTime() + MILLISECONDS_GPS_TAI);
399
+ }
400
+ function getDateFromTai(tai_date) {
401
+ return new Date(tai_date.getTime() - MILLISECONDS_GPS_TAI);
402
+ }
403
+ function getTtDate(date) {
404
+ return new Date(date.getTime() + MILLISECONDS_GPS_TAI + MILLISECONDS_TT_TAI);
405
+ }
406
+ function getDateFromTt(tt_date) {
407
+ return new Date(
408
+ tt_date.getTime() - MILLISECONDS_GPS_TAI - MILLISECONDS_TT_TAI
409
+ );
410
+ }
411
+ function getGloN4(date) {
412
+ return Math.floor((date.getUTCFullYear() - START_GLO_LEAP.getFullYear()) / 4);
413
+ }
414
+ function getGloNA(date) {
415
+ const n4 = getGloN4(date);
416
+ const init4YearPeriod = new Date(START_GLO_LEAP);
417
+ init4YearPeriod.setUTCFullYear(init4YearPeriod.getUTCFullYear() + n4 * 4);
418
+ return Math.floor(getTimeDifference(init4YearPeriod, date) / MILLISECONDS_IN_DAY) + 1;
419
+ }
420
+ function getDateFromGloN(n4, na, tod) {
421
+ const date = new Date(START_GLO_LEAP);
422
+ date.setFullYear(date.getUTCFullYear() + n4 * 4);
423
+ date.setTime(date.getTime() + (na - 1) * MILLISECONDS_IN_DAY + tod);
424
+ return date;
425
+ }
426
+ function getNtpTime(date) {
427
+ return getTaiDate(date).getTime() - START_NTP_TIME.getTime();
428
+ }
429
+
430
+ // src/time/rinex.ts
431
+ function getRINEX(date) {
432
+ const seconds = date.getUTCSeconds();
433
+ const milliseconds = date.getUTCMilliseconds();
434
+ const fractionalSeconds = (milliseconds / MILLISECONDS_IN_SECOND).toFixed(7).slice(1);
435
+ const formatted = `> ${date.getUTCFullYear()} ${String(
436
+ date.getUTCMonth() + 1
437
+ ).padStart(2, "0")} ${String(date.getUTCDate()).padStart(2, "0")} ${String(
438
+ date.getUTCHours()
439
+ ).padStart(2, "0")} ${String(date.getUTCMinutes()).padStart(
440
+ 2,
441
+ "0"
442
+ )} ${String(seconds).padStart(2, "0")}${fractionalSeconds}`;
443
+ return formatted;
444
+ }
445
+ function getDateFromRINEX(rinex) {
446
+ const year = Number.parseInt(rinex.substring(2, 6));
447
+ const month = Number.parseInt(rinex.substring(7, 9)) - 1;
448
+ const day = Number.parseInt(rinex.substring(10, 12));
449
+ const hour = Number.parseInt(rinex.substring(13, 15));
450
+ const minute = Number.parseInt(rinex.substring(16, 18));
451
+ const second = Number.parseInt(rinex.substring(19, 21));
452
+ const millisecond = Number.parseInt(rinex.substring(22, 29)) / 1e4;
453
+ const date = new Date(
454
+ Date.UTC(year, month, day, hour, minute, second, millisecond)
455
+ );
456
+ return date;
457
+ }
458
+
459
+ // src/time/julian.ts
460
+ function getJulianDate(date, scale = 1 /* TT */) {
461
+ if (scale === 0 /* TAI */) {
462
+ return (date.getTime() - START_TAI_TIME.getTime()) / MILLISECONDS_IN_DAY + START_JULIAN_TAI;
463
+ }
464
+ if (scale === 2 /* GPS */) {
465
+ return (date.getTime() - START_TAI_TIME.getTime() - MILLISECONDS_GPS_TAI) / MILLISECONDS_IN_DAY + START_JULIAN_TAI;
466
+ }
467
+ if (scale === 3 /* UTC */) {
468
+ return (date.getTime() - START_TAI_TIME.getTime() - getLeap(date) * MILLISECONDS_IN_SECOND) / MILLISECONDS_IN_DAY + START_JULIAN_TAI;
469
+ }
470
+ return (date.getTime() - START_TAI_TIME.getTime() + MILLISECONDS_TT_TAI) / MILLISECONDS_IN_DAY + START_JULIAN_TAI;
471
+ }
472
+ function getDateFromJulianDate(julianDate, scale = 1 /* TT */) {
473
+ if (scale === 0 /* TAI */) {
474
+ return new Date(
475
+ (julianDate - START_JULIAN_TAI) * MILLISECONDS_IN_DAY + START_TAI_TIME.getTime()
476
+ );
477
+ }
478
+ if (scale === 2 /* GPS */) {
479
+ return new Date(
480
+ (julianDate - START_JULIAN_TAI) * MILLISECONDS_IN_DAY + START_TAI_TIME.getTime() + MILLISECONDS_GPS_TAI
481
+ );
482
+ }
483
+ if (scale === 3 /* UTC */) {
484
+ const utc_date = new Date(
485
+ (julianDate - START_JULIAN_TAI) * MILLISECONDS_IN_DAY + START_TAI_TIME.getTime()
486
+ );
487
+ const tai_date = new Date(
488
+ utc_date.getTime() + getLeap(utc_date) * MILLISECONDS_IN_SECOND
489
+ );
490
+ const leap_seconds = getLeap(getDateFromTai(tai_date));
491
+ return new Date(utc_date.getTime() + leap_seconds * MILLISECONDS_IN_SECOND);
492
+ }
493
+ return new Date(
494
+ (julianDate - START_JULIAN_TAI) * MILLISECONDS_IN_DAY + START_TAI_TIME.getTime() - MILLISECONDS_TT_TAI
495
+ );
496
+ }
497
+ function getMJD(date, scale = 1 /* TT */) {
498
+ return getJulianDate(date, scale) - DAYS_MJD_JULIAN;
499
+ }
500
+ function getDateFromMJD(mjd, scale = 1 /* TT */) {
501
+ return getDateFromJulianDate(mjd + DAYS_MJD_JULIAN, scale);
502
+ }
503
+ function getMJD2000(date, scale = 1 /* TT */) {
504
+ return getMJD(date, scale) - DAYS_MJD2000_MJD;
505
+ }
506
+ function getDateFromMJD2000(mjd2000, scale = 1 /* TT */) {
507
+ return getDateFromMJD(mjd2000 + DAYS_MJD2000_MJD, scale);
508
+ }
509
+ // Annotate the CommonJS export names for ESM import in node:
510
+ 0 && (module.exports = {
511
+ DAYS_MJD2000_MJD,
512
+ DAYS_MJD_JULIAN,
513
+ MILLISECONDS_GPS_TAI,
514
+ MILLISECONDS_IN_DAY,
515
+ MILLISECONDS_IN_HOUR,
516
+ MILLISECONDS_IN_MINUTE,
517
+ MILLISECONDS_IN_SECOND,
518
+ MILLISECONDS_IN_WEEK,
519
+ MILLISECONDS_TT_TAI,
520
+ RINEX_CODES,
521
+ SECONDS_IN_DAY,
522
+ SECONDS_IN_HOUR,
523
+ SECONDS_IN_MINUTE,
524
+ SECONDS_IN_WEEK,
525
+ START_BDS_TIME,
526
+ START_GAL_TIME,
527
+ START_GLO_LEAP,
528
+ START_GPS_TIME,
529
+ START_JULIAN_TAI,
530
+ START_MJD_UNIX_SECONDS,
531
+ START_NTP_TIME,
532
+ START_TAI_TIME,
533
+ START_UNIX_TIME,
534
+ Scale,
535
+ getBdsTime,
536
+ getDateFromBdsTime,
537
+ getDateFromDayOfWeek,
538
+ getDateFromDayOfYear,
539
+ getDateFromGalTime,
540
+ getDateFromGloN,
541
+ getDateFromGpsData,
542
+ getDateFromGpsTime,
543
+ getDateFromHourCode,
544
+ getDateFromJulianDate,
545
+ getDateFromMJD,
546
+ getDateFromMJD2000,
547
+ getDateFromRINEX,
548
+ getDateFromTai,
549
+ getDateFromTimeOfDay,
550
+ getDateFromTt,
551
+ getDateFromUnixTime,
552
+ getDateFromUtc,
553
+ getDayOfWeek,
554
+ getDayOfYear,
555
+ getGalTime,
556
+ getGloN4,
557
+ getGloNA,
558
+ getGpsLeap,
559
+ getGpsTime,
560
+ getHourCode,
561
+ getHoursFromTimeDifference,
562
+ getJulianDate,
563
+ getLeap,
564
+ getMJD,
565
+ getMJD2000,
566
+ getMinutesFromTimeDifference,
567
+ getNtpTime,
568
+ getRINEX,
569
+ getSecondsFromTimeDifference,
570
+ getTaiDate,
571
+ getTimeDifference,
572
+ getTimeDifferenceFromDays,
573
+ getTimeDifferenceFromHours,
574
+ getTimeDifferenceFromMinutes,
575
+ getTimeDifferenceFromObject,
576
+ getTimeDifferenceFromSeconds,
577
+ getTimeOfDay,
578
+ getTimeOfWeek,
579
+ getTotalDaysFromTimeDifference,
580
+ getTtDate,
581
+ getUnixTime,
582
+ getUtcDate,
583
+ getWeekNumber,
584
+ getWeekOfYear
585
+ });