@airframes/acars-decoder 1.6.14 → 1.6.15

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.
package/dist/index.mjs CHANGED
@@ -38,10 +38,13 @@ var DateTimeUtils = class {
38
38
  }
39
39
  /**
40
40
  *
41
- * @param time HHMMSS
41
+ * @param time HHMMSS or HHMM
42
42
  * @returns seconds since midnight
43
43
  */
44
44
  static convertHHMMSSToTod(time) {
45
+ if (time.length === 4) {
46
+ time += "00";
47
+ }
45
48
  const h = Number(time.substring(0, 2));
46
49
  const m = Number(time.substring(2, 4));
47
50
  const s = Number(time.substring(4, 6));
@@ -566,27 +569,36 @@ var ResultFormatter = class {
566
569
  });
567
570
  }
568
571
  static day(decodeResult, day) {
569
- decodeResult.raw.day_of_month = day;
572
+ decodeResult.raw.day = day;
570
573
  decodeResult.formatted.items.push({
571
- type: "day_of_month",
574
+ type: "day",
572
575
  code: "MSG_DAY",
573
576
  label: "Day of Month",
574
577
  value: `${day}`
575
578
  });
576
579
  }
580
+ static month(decodeResult, month) {
581
+ decodeResult.raw.month = month;
582
+ decodeResult.formatted.items.push({
583
+ type: "month",
584
+ code: "MSG_MON",
585
+ label: "Month of Year",
586
+ value: `${month}`
587
+ });
588
+ }
577
589
  static departureDay(decodeResult, day) {
578
- decodeResult.raw.departure_day_of_month = day;
590
+ decodeResult.raw.departure_day = day;
579
591
  decodeResult.formatted.items.push({
580
- type: "day_of_month",
592
+ type: "day",
581
593
  code: "DEP_DAY",
582
594
  label: "Departure Day",
583
595
  value: `${day}`
584
596
  });
585
597
  }
586
598
  static arrivalDay(decodeResult, day) {
587
- decodeResult.raw.arrival_day_of_month = day;
599
+ decodeResult.raw.arrival_day = day;
588
600
  decodeResult.formatted.items.push({
589
- type: "day_of_month",
601
+ type: "day",
590
602
  code: "ARR_DAY",
591
603
  label: "Arrival Day",
592
604
  value: `${day}`
@@ -681,14 +693,14 @@ var Label_5Z_Slash = class extends DecoderPlugin {
681
693
  const info = data[2].split(" ");
682
694
  ResultFormatter.departureAirport(decodeResult, info[1]);
683
695
  ResultFormatter.arrivalAirport(decodeResult, info[2]);
684
- decodeResult.raw.day_of_month = Number(info[3]);
696
+ decodeResult.raw.day = Number(info[3]);
685
697
  ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(info[4]));
686
698
  ResultFormatter.arrivalRunway(decodeResult, info[5].slice(1));
687
699
  ResultFormatter.unknownArr(decodeResult, data.slice(3), "/");
688
700
  } else if (type === "B3") {
689
701
  ResultFormatter.departureAirport(decodeResult, header[1].substring(0, 3), "IATA");
690
702
  ResultFormatter.arrivalAirport(decodeResult, header[1].substring(3), "IATA");
691
- decodeResult.raw.day_of_month = Number(header[2]);
703
+ decodeResult.raw.day = Number(header[2]);
692
704
  ResultFormatter.arrivalRunway(decodeResult, header[3].slice(1));
693
705
  if (header.length > 4) {
694
706
  ResultFormatter.unknownArr(decodeResult, header.slice(4), "/");
@@ -697,7 +709,7 @@ var Label_5Z_Slash = class extends DecoderPlugin {
697
709
  const info = data[2].split(" ");
698
710
  ResultFormatter.departureAirport(decodeResult, info[1]);
699
711
  ResultFormatter.arrivalAirport(decodeResult, info[2]);
700
- decodeResult.raw.day_of_month = Number(info[3]);
712
+ decodeResult.raw.day = Number(info[3]);
701
713
  ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(info[4]));
702
714
  ResultFormatter.unknownArr(decodeResult, info.slice(5), " ");
703
715
  } else if (type === "C3") {
@@ -707,10 +719,10 @@ var Label_5Z_Slash = class extends DecoderPlugin {
707
719
  const airports = data[2].split(" ");
708
720
  ResultFormatter.departureAirport(decodeResult, airports[1]);
709
721
  ResultFormatter.arrivalAirport(decodeResult, airports[2]);
710
- decodeResult.raw.day_of_month = Number(airports[3]);
722
+ decodeResult.raw.day = Number(airports[3]);
711
723
  ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(airports[4]));
712
724
  const estimates = data[3].split(" ");
713
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(estimates[1] + "00"));
725
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(estimates[1]));
714
726
  ResultFormatter.unknown(decodeResult, estimates[2]);
715
727
  } else {
716
728
  if (options.debug) {
@@ -854,16 +866,16 @@ var Label_10_Slash = class extends DecoderPlugin {
854
866
  ResultFormatter.heading(decodeResult, Number(parts[5]));
855
867
  ResultFormatter.altitude(decodeResult, 100 * Number(parts[6]));
856
868
  ResultFormatter.arrivalAirport(decodeResult, parts[7]);
857
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[8] + "00"));
869
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[8]));
858
870
  const waypoints = [{
859
871
  name: parts[11]
860
872
  }, {
861
873
  name: parts[12],
862
- time: DateTimeUtils.convertHHMMSSToTod(parts[13] + "00"),
874
+ time: DateTimeUtils.convertHHMMSSToTod(parts[13]),
863
875
  timeFormat: "tod"
864
876
  }, {
865
877
  name: parts[14],
866
- time: DateTimeUtils.convertHHMMSSToTod(parts[15] + "00"),
878
+ time: DateTimeUtils.convertHHMMSSToTod(parts[15]),
867
879
  timeFormat: "tod"
868
880
  }];
869
881
  ResultFormatter.route(decodeResult, { waypoints });
@@ -883,7 +895,7 @@ var Label_12_N_Space = class extends DecoderPlugin {
883
895
  qualifiers() {
884
896
  return {
885
897
  labels: ["12"],
886
- preambles: ["N "]
898
+ preambles: ["N ", "S "]
887
899
  };
888
900
  }
889
901
  decode(message, options = {}) {
@@ -949,7 +961,7 @@ var Label_13Through18_Slash = class extends DecoderPlugin {
949
961
  const data = parts[2].split(" ");
950
962
  ResultFormatter.departureAirport(decodeResult, data[1]);
951
963
  ResultFormatter.arrivalAirport(decodeResult, data[2]);
952
- decodeResult.raw.day_of_month = Number(data[3]);
964
+ decodeResult.raw.day = Number(data[3]);
953
965
  const time = DateTimeUtils.convertHHMMSSToTod(data[4]);
954
966
  if (labelNumber === 13) {
955
967
  ResultFormatter.out(decodeResult, time);
@@ -1009,7 +1021,7 @@ function getMsgType(labelNumber) {
1009
1021
 
1010
1022
  // lib/plugins/Label_15.ts
1011
1023
  var Label_15 = class extends DecoderPlugin {
1012
- name = "label-5z";
1024
+ name = "label-15";
1013
1025
  qualifiers() {
1014
1026
  return {
1015
1027
  labels: ["15"],
@@ -1020,10 +1032,28 @@ var Label_15 = class extends DecoderPlugin {
1020
1032
  const decodeResult = this.defaultResult();
1021
1033
  decodeResult.decoder.name = this.name;
1022
1034
  decodeResult.formatted.description = "Position Report";
1023
- const twoZeeRegex = /^\(2(?<between>.+)\(Z$/;
1024
- const results = message.text.match(twoZeeRegex);
1025
- if (results?.groups) {
1026
- ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinates(results.groups.between.substr(0, 13)));
1035
+ decodeResult.message = message;
1036
+ if (message.text.startsWith("(2") && message.text.endsWith("(Z")) {
1037
+ const between = message.text.substring(2, message.text.length - 2);
1038
+ ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(between.substring(0, 13)));
1039
+ if (between.length === 25) {
1040
+ ResultFormatter.unknown(decodeResult, between.substring(13, 19));
1041
+ const alt = between.substring(19, 22);
1042
+ if (alt != "---") {
1043
+ ResultFormatter.altitude(decodeResult, 100 * Number(alt));
1044
+ }
1045
+ ResultFormatter.temperature(decodeResult, between.substring(22).replace(" ", "0"));
1046
+ } else {
1047
+ ResultFormatter.unknown(decodeResult, between.substring(13));
1048
+ }
1049
+ } else {
1050
+ if (options.debug) {
1051
+ console.log(`Decoder: Unknown 15 message: ${message.text}`);
1052
+ }
1053
+ ResultFormatter.unknown(decodeResult, message.text);
1054
+ decodeResult.decoded = false;
1055
+ decodeResult.decoder.decodeLevel = "none";
1056
+ return decodeResult;
1027
1057
  }
1028
1058
  decodeResult.decoded = true;
1029
1059
  decodeResult.decoder.decodeLevel = "partial";
@@ -1076,7 +1106,7 @@ var Label_16_N_Space = class extends DecoderPlugin {
1076
1106
  qualifiers() {
1077
1107
  return {
1078
1108
  labels: ["16"],
1079
- preambles: ["N "]
1109
+ preambles: ["N ", "S "]
1080
1110
  };
1081
1111
  }
1082
1112
  decode(message, options = {}) {
@@ -1206,7 +1236,7 @@ var Label_1L_3Line = class extends DecoderPlugin {
1206
1236
  }
1207
1237
  const eta = data.get("ETA");
1208
1238
  if (eta) {
1209
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(eta + "00"));
1239
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(eta));
1210
1240
  data.delete("ETA");
1211
1241
  }
1212
1242
  const alt = data.get("ALT");
@@ -1287,8 +1317,8 @@ var Label_1L_070 = class extends DecoderPlugin {
1287
1317
  }
1288
1318
  ResultFormatter.departureAirport(decodeResult, parts[0]);
1289
1319
  ResultFormatter.arrivalAirport(decodeResult, parts[1]);
1290
- ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[2] + "00"));
1291
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[3] + "00"));
1320
+ ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[2]));
1321
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[3]));
1292
1322
  ResultFormatter.position(decodeResult, {
1293
1323
  latitude: CoordinateUtils.getDirection(parts[4][0]) * Number(parts[4].substring(1)),
1294
1324
  longitude: CoordinateUtils.getDirection(parts[5][0]) * Number(parts[5].substring(1))
@@ -1408,7 +1438,7 @@ var Label_1L_Slash = class extends DecoderPlugin {
1408
1438
  }
1409
1439
  const eta = data.get("ETA");
1410
1440
  if (eta) {
1411
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(eta + "00"));
1441
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(eta));
1412
1442
  data.delete("ETA");
1413
1443
  }
1414
1444
  let remaining = "";
@@ -1542,7 +1572,7 @@ var Label_22_OFF = class extends DecoderPlugin {
1542
1572
  ResultFormatter.flightNumber(decodeResult, fields[0]);
1543
1573
  ResultFormatter.departureDay(decodeResult, Number(fields[1].substring(0, 2)));
1544
1574
  ResultFormatter.arrivalDay(decodeResult, Number(fields[1].substring(2, 4)));
1545
- ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(4, 8) + "00"));
1575
+ ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(4, 8)));
1546
1576
  ResultFormatter.departureAirport(decodeResult, fields[1].substring(8, 12));
1547
1577
  ResultFormatter.arrivalAirport(decodeResult, fields[1].substring(12, 16));
1548
1578
  ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(16, 22)));
@@ -1558,7 +1588,7 @@ var Label_22_OFF = class extends DecoderPlugin {
1558
1588
  }
1559
1589
  ResultFormatter.departureAirport(decodeResult, fields[0]);
1560
1590
  ResultFormatter.arrivalAirport(decodeResult, fields[1]);
1561
- ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[2] + "00"));
1591
+ ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[2]));
1562
1592
  ResultFormatter.unknown(decodeResult, fields[3]);
1563
1593
  decodeResult.decoded = true;
1564
1594
  decodeResult.decoder.decodeLevel = "partial";
@@ -1575,12 +1605,12 @@ var Label_22_OFF = class extends DecoderPlugin {
1575
1605
  ResultFormatter.position(decodeResult, position);
1576
1606
  }
1577
1607
  ResultFormatter.day(decodeResult, Number(fields[1].substring(14, 16)));
1578
- ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(16, 20) + "00"));
1608
+ ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(16, 20)));
1579
1609
  ResultFormatter.departureAirport(decodeResult, fields[1].substring(20, 24));
1580
1610
  ResultFormatter.arrivalAirport(decodeResult, fields[1].substring(24, 28));
1581
- ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(28, 32) + "00"));
1611
+ ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(28, 32)));
1582
1612
  ResultFormatter.unknown(decodeResult, fields[1].substring(32, 36));
1583
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(36, 40) + "00"));
1613
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(36, 40)));
1584
1614
  decodeResult.decoded = true;
1585
1615
  decodeResult.decoder.decodeLevel = "partial";
1586
1616
  } else {
@@ -1662,7 +1692,7 @@ var Label_24_Slash = class extends DecoderPlugin {
1662
1692
  longitude: (lon[0] === "E" ? 1 : -1) * Number(lon.substring(1))
1663
1693
  };
1664
1694
  ResultFormatter.position(decodeResult, position);
1665
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[8] + "00"));
1695
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[8]));
1666
1696
  ResultFormatter.unknown(decodeResult, fields[7]);
1667
1697
  decodeResult.decoded = true;
1668
1698
  decodeResult.decoder.decodeLevel = "partial";
@@ -1698,7 +1728,7 @@ var Label_30_Slash_EA = class extends DecoderPlugin {
1698
1728
  console.log(results);
1699
1729
  }
1700
1730
  }
1701
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(results[0].substr(2, 4) + "00"));
1731
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(results[0].substr(2, 4)));
1702
1732
  if (results[1].substring(0, 2) === "DS") {
1703
1733
  ResultFormatter.arrivalAirport(decodeResult, results[1].substring(2, 6));
1704
1734
  ResultFormatter.unknown(decodeResult, "/".concat(results[2]));
@@ -1725,22 +1755,35 @@ var Label_44_ETA = class extends DecoderPlugin {
1725
1755
  decodeResult.decoder.name = this.name;
1726
1756
  decodeResult.formatted.description = "ETA Report";
1727
1757
  decodeResult.message = message;
1728
- const regex = /^.*,(?<unsplit_coords>.*),(?<departure_icao>.*),(?<arrival_icao>.*),(?<current_date>.*),(?<current_time>.*),(?<fuel_in_tons>.*)$/;
1729
- const results = message.text.match(regex);
1730
- if (results?.groups) {
1758
+ const data = message.text.split(",");
1759
+ if (data.length >= 9) {
1731
1760
  if (options.debug) {
1732
1761
  console.log(`Label 44 ETA Report: groups`);
1733
- console.log(results.groups);
1762
+ console.log(data);
1734
1763
  }
1735
- ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinates(results.groups.unsplit_coords));
1736
- ResultFormatter.departureAirport(decodeResult, results.groups.departure_icao);
1737
- ResultFormatter.arrivalAirport(decodeResult, results.groups.arrival_icao);
1738
- decodeResult.raw.current_time = Date.parse(
1739
- (/* @__PURE__ */ new Date()).getFullYear() + "-" + results.groups.current_date.substr(0, 2) + "-" + results.groups.current_date.substr(2, 2) + "T" + results.groups.current_time.substr(0, 2) + ":" + results.groups.current_time.substr(2, 2) + ":00Z"
1740
- );
1741
- if (results.groups.fuel_in_tons != "***" && results.groups.fuel_in_tons != "****") {
1742
- ResultFormatter.remainingFuel(decodeResult, Number(results.groups.fuel_in_tons));
1764
+ ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[1]));
1765
+ ResultFormatter.altitude(decodeResult, 100 * Number(data[2]));
1766
+ ResultFormatter.departureAirport(decodeResult, data[3]);
1767
+ ResultFormatter.arrivalAirport(decodeResult, data[4]);
1768
+ ResultFormatter.month(decodeResult, Number(data[5].substring(0, 2)));
1769
+ ResultFormatter.day(decodeResult, Number(data[5].substring(2, 4)));
1770
+ ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[6]));
1771
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[7]));
1772
+ const fuel = Number(data[8]);
1773
+ if (!isNaN(fuel)) {
1774
+ ResultFormatter.remainingFuel(decodeResult, Number(fuel));
1743
1775
  }
1776
+ if (data.length > 9) {
1777
+ ResultFormatter.unknownArr(decodeResult, data.slice(9));
1778
+ }
1779
+ } else {
1780
+ if (options.debug) {
1781
+ console.log(`Decoder: Unknown 44 message: ${message.text}`);
1782
+ }
1783
+ ResultFormatter.unknown(decodeResult, message.text);
1784
+ decodeResult.decoded = false;
1785
+ decodeResult.decoder.decodeLevel = "none";
1786
+ return decodeResult;
1744
1787
  }
1745
1788
  decodeResult.decoded = true;
1746
1789
  decodeResult.decoder.decodeLevel = "full";
@@ -1762,22 +1805,33 @@ var Label_44_IN = class extends DecoderPlugin {
1762
1805
  decodeResult.decoder.name = this.name;
1763
1806
  decodeResult.formatted.description = "In Air Report";
1764
1807
  decodeResult.message = message;
1765
- const regex = /^.*,(?<unsplit_coords>.*),(?<departure_icao>.*),(?<arrival_icao>.*),(?<current_date>.*),(?<current_time>.*),(?<fuel_in_tons>.*)$/;
1766
- const results = message.text.match(regex);
1767
- if (results?.groups) {
1808
+ const data = message.text.split(",");
1809
+ if (data.length >= 7) {
1768
1810
  if (options.debug) {
1769
1811
  console.log(`Label 44 In Air Report: groups`);
1770
- console.log(results.groups);
1812
+ console.log(data);
1771
1813
  }
1772
- ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinates(results.groups.unsplit_coords));
1773
- ResultFormatter.departureAirport(decodeResult, results.groups.departure_icao);
1774
- ResultFormatter.arrivalAirport(decodeResult, results.groups.arrival_icao);
1775
- decodeResult.raw.current_time = Date.parse(
1776
- (/* @__PURE__ */ new Date()).getFullYear() + "-" + results.groups.current_date.substr(0, 2) + "-" + results.groups.current_date.substr(2, 2) + "T" + results.groups.current_time.substr(0, 2) + ":" + results.groups.current_time.substr(2, 2) + ":00Z"
1777
- );
1778
- if (results.groups.fuel_in_tons != "***" && results.groups.fuel_in_tons != "****") {
1779
- decodeResult.raw.fuel_in_tons = Number(results.groups.fuel_in_tons);
1814
+ ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[1]));
1815
+ ResultFormatter.departureAirport(decodeResult, data[2]);
1816
+ ResultFormatter.arrivalAirport(decodeResult, data[3]);
1817
+ ResultFormatter.month(decodeResult, Number(data[4].substring(0, 2)));
1818
+ ResultFormatter.day(decodeResult, Number(data[4].substring(2, 4)));
1819
+ ResultFormatter.in(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[5]));
1820
+ const fuel = Number(data[6]);
1821
+ if (!isNaN(fuel)) {
1822
+ ResultFormatter.remainingFuel(decodeResult, Number(fuel));
1823
+ }
1824
+ if (data.length > 7) {
1825
+ ResultFormatter.unknownArr(decodeResult, data.slice(7));
1780
1826
  }
1827
+ } else {
1828
+ if (options.debug) {
1829
+ console.log(`Decoder: Unknown 44 message: ${message.text}`);
1830
+ }
1831
+ ResultFormatter.unknown(decodeResult, message.text);
1832
+ decodeResult.decoded = false;
1833
+ decodeResult.decoder.decodeLevel = "none";
1834
+ return decodeResult;
1781
1835
  }
1782
1836
  decodeResult.decoded = true;
1783
1837
  decodeResult.decoder.decodeLevel = "full";
@@ -1799,25 +1853,34 @@ var Label_44_OFF = class extends DecoderPlugin {
1799
1853
  decodeResult.decoder.name = this.name;
1800
1854
  decodeResult.formatted.description = "Off Runway Report";
1801
1855
  decodeResult.message = message;
1802
- const regex = /^.*,(?<unsplit_coords>.*),(?<departure_icao>.*),(?<arrival_icao>.*),(?<current_date>.*),(?<current_time>.*),(?<eta_time>.*),(?<fuel_in_tons>.*)$/;
1803
- const results = message.text.match(regex);
1804
- if (results?.groups) {
1856
+ const data = message.text.split(",");
1857
+ if (data.length >= 8) {
1805
1858
  if (options.debug) {
1806
1859
  console.log(`Label 44 Off Runway Report: groups`);
1807
- console.log(results.groups);
1860
+ console.log(data);
1808
1861
  }
1809
- ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinates(results.groups.unsplit_coords));
1810
- ResultFormatter.departureAirport(decodeResult, results.groups.departure_icao);
1811
- ResultFormatter.arrivalAirport(decodeResult, results.groups.arrival_icao);
1812
- decodeResult.raw.current_time = Date.parse(
1813
- (/* @__PURE__ */ new Date()).getFullYear() + "-" + results.groups.current_date.substr(0, 2) + "-" + results.groups.current_date.substr(2, 2) + "T" + results.groups.current_time.substr(0, 2) + ":" + results.groups.current_time.substr(2, 2) + ":00Z"
1814
- );
1815
- decodeResult.raw.eta_time = Date.parse(
1816
- (/* @__PURE__ */ new Date()).getFullYear() + "-" + results.groups.current_date.substr(0, 2) + "-" + results.groups.current_date.substr(2, 2) + "T" + results.groups.eta_time.substr(0, 2) + ":" + results.groups.eta_time.substr(2, 2) + ":00Z"
1817
- );
1818
- if (results.groups.fuel_in_tons != "***" && results.groups.fuel_in_tons != "****") {
1819
- decodeResult.raw.fuel_in_tons = Number(results.groups.fuel_in_tons);
1862
+ ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[1]));
1863
+ ResultFormatter.departureAirport(decodeResult, data[2]);
1864
+ ResultFormatter.arrivalAirport(decodeResult, data[3]);
1865
+ ResultFormatter.month(decodeResult, Number(data[4].substring(0, 2)));
1866
+ ResultFormatter.day(decodeResult, Number(data[4].substring(2, 4)));
1867
+ ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[5]));
1868
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[6]));
1869
+ const fuel = Number(data[7]);
1870
+ if (!isNaN(fuel)) {
1871
+ ResultFormatter.remainingFuel(decodeResult, Number(fuel));
1872
+ }
1873
+ if (data.length > 8) {
1874
+ ResultFormatter.unknownArr(decodeResult, data.slice(8));
1820
1875
  }
1876
+ } else {
1877
+ if (options.debug) {
1878
+ console.log(`Decoder: Unknown 44 message: ${message.text}`);
1879
+ }
1880
+ ResultFormatter.unknown(decodeResult, message.text);
1881
+ decodeResult.decoded = false;
1882
+ decodeResult.decoder.decodeLevel = "none";
1883
+ return decodeResult;
1821
1884
  }
1822
1885
  decodeResult.decoded = true;
1823
1886
  decodeResult.decoder.decodeLevel = "full";
@@ -1839,22 +1902,33 @@ var Label_44_ON = class extends DecoderPlugin {
1839
1902
  decodeResult.decoder.name = this.name;
1840
1903
  decodeResult.formatted.description = "On Runway Report";
1841
1904
  decodeResult.message = message;
1842
- const regex = /^.*,(?<unsplit_coords>.*),(?<departure_icao>.*),(?<arrival_icao>.*),(?<current_date>.*),(?<current_time>.*),(?<fuel_in_tons>.*)$/;
1843
- const results = message.text.match(regex);
1844
- if (results?.groups) {
1905
+ const data = message.text.split(",");
1906
+ if (data.length >= 7) {
1845
1907
  if (options.debug) {
1846
1908
  console.log(`Label 44 On Runway Report: groups`);
1847
- console.log(results.groups);
1909
+ console.log(data);
1848
1910
  }
1849
- ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinates(results.groups.unsplit_coords));
1850
- ResultFormatter.departureAirport(decodeResult, results.groups.departure_icao);
1851
- ResultFormatter.arrivalAirport(decodeResult, results.groups.arrival_icao);
1852
- decodeResult.raw.current_time = Date.parse(
1853
- (/* @__PURE__ */ new Date()).getFullYear() + "-" + results.groups.current_date.substr(0, 2) + "-" + results.groups.current_date.substr(2, 2) + "T" + results.groups.current_time.substr(0, 2) + ":" + results.groups.current_time.substr(2, 2) + ":00Z"
1854
- );
1855
- if (results.groups.fuel_in_tons != "***" && results.groups.fuel_in_tons != "****") {
1856
- ResultFormatter.remainingFuel(decodeResult, Number(results.groups.fuel_in_tons));
1911
+ ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[1]));
1912
+ ResultFormatter.departureAirport(decodeResult, data[2]);
1913
+ ResultFormatter.arrivalAirport(decodeResult, data[3]);
1914
+ ResultFormatter.month(decodeResult, Number(data[4].substring(0, 2)));
1915
+ ResultFormatter.day(decodeResult, Number(data[4].substring(2, 4)));
1916
+ ResultFormatter.on(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[5]));
1917
+ const fuel = Number(data[6]);
1918
+ if (!isNaN(fuel)) {
1919
+ ResultFormatter.remainingFuel(decodeResult, Number(fuel));
1857
1920
  }
1921
+ if (data.length > 7) {
1922
+ ResultFormatter.unknownArr(decodeResult, data.slice(7));
1923
+ }
1924
+ } else {
1925
+ if (options.debug) {
1926
+ console.log(`Decoder: Unknown 44 message: ${message.text}`);
1927
+ }
1928
+ ResultFormatter.unknown(decodeResult, message.text);
1929
+ decodeResult.decoded = false;
1930
+ decodeResult.decoder.decodeLevel = "none";
1931
+ return decodeResult;
1858
1932
  }
1859
1933
  decodeResult.decoded = true;
1860
1934
  decodeResult.decoder.decodeLevel = "full";
@@ -2313,9 +2387,11 @@ var H1Helper = class {
2313
2387
  ResultFormatter.freetext(decodeResult, fields[i].substring(2));
2314
2388
  } else if (fields[i].startsWith("ET")) {
2315
2389
  if (fields[i].length === 7) {
2316
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[i].substring(3) + "00"));
2390
+ ResultFormatter.day(decodeResult, Number(fields[i].substring(2, 3)));
2391
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[i].substring(3)));
2317
2392
  } else if (fields[i].length === 8) {
2318
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[i].substring(4) + "00"));
2393
+ ResultFormatter.day(decodeResult, Number(fields[i].substring(2, 4)));
2394
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[i].substring(4)));
2319
2395
  } else {
2320
2396
  ResultFormatter.unknown(decodeResult, fields[i], "/");
2321
2397
  }
@@ -2575,7 +2651,7 @@ var Label_4N = class extends DecoderPlugin {
2575
2651
  decodeResult.decoded = true;
2576
2652
  const fields = text.split(",");
2577
2653
  if (text.length === 51) {
2578
- decodeResult.raw.day_of_month = text.substring(0, 2);
2654
+ decodeResult.raw.day = text.substring(0, 2);
2579
2655
  ResultFormatter.departureAirport(decodeResult, text.substring(8, 11));
2580
2656
  ResultFormatter.arrivalAirport(decodeResult, text.substring(13, 16));
2581
2657
  ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(text.substring(30, 45).replace(/^(.)0/, "$1")));
@@ -2789,7 +2865,7 @@ var Label_83 = class extends DecoderPlugin {
2789
2865
  if (text.substring(0, 10) === "4DH3 ETAT2") {
2790
2866
  const fields = text.split(/\s+/);
2791
2867
  if (fields[2].length > 5) {
2792
- decodeResult.raw.day_of_month = fields[2].substring(5);
2868
+ decodeResult.raw.day = fields[2].substring(5);
2793
2869
  }
2794
2870
  ResultFormatter.unknown(decodeResult, fields[2].substring(0, 4));
2795
2871
  const subfields = fields[3].split("/");
@@ -2798,7 +2874,7 @@ var Label_83 = class extends DecoderPlugin {
2798
2874
  ResultFormatter.tail(decodeResult, fields[4].replace(/\./g, ""));
2799
2875
  ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[6] + "00"));
2800
2876
  } else if (text.substring(0, 5) === "001PR") {
2801
- decodeResult.raw.day_of_month = text.substring(5, 7);
2877
+ decodeResult.raw.day = text.substring(5, 7);
2802
2878
  const position = CoordinateUtils.decodeStringCoordinatesDecimalMinutes(text.substring(13, 28).replace(/\./g, ""));
2803
2879
  if (position) {
2804
2880
  ResultFormatter.position(decodeResult, position);
@@ -2810,7 +2886,7 @@ var Label_83 = class extends DecoderPlugin {
2810
2886
  if (fields.length === 9) {
2811
2887
  ResultFormatter.departureAirport(decodeResult, fields[0]);
2812
2888
  ResultFormatter.arrivalAirport(decodeResult, fields[1]);
2813
- decodeResult.raw.day_of_month = fields[2].substring(0, 2);
2889
+ decodeResult.raw.day = fields[2].substring(0, 2);
2814
2890
  decodeResult.raw.time = fields[2].substring(2);
2815
2891
  ResultFormatter.position(
2816
2892
  decodeResult,
@@ -2860,7 +2936,7 @@ var Label_8E = class extends DecoderPlugin {
2860
2936
  console.log(`Label 8E ETA: groups`);
2861
2937
  console.log(results.groups);
2862
2938
  }
2863
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(results.groups.arrival_eta + "00"));
2939
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(results.groups.arrival_eta));
2864
2940
  ResultFormatter.arrivalAirport(decodeResult, results.groups.arrival_icao);
2865
2941
  }
2866
2942
  decodeResult.decoded = true;
@@ -3072,9 +3148,9 @@ var Label_H1_StarPOS = class extends DecoderPlugin {
3072
3148
  decodeResult.decoder.decodeLevel = "none";
3073
3149
  return decodeResult;
3074
3150
  }
3075
- decodeResult.raw.month = Number(msg.substring(4, 6));
3076
- decodeResult.raw.day_of_month = Number(msg.substring(6, 8));
3077
- ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(msg.substring(8, 12) + "00"));
3151
+ ResultFormatter.month(decodeResult, Number(msg.substring(4, 6)));
3152
+ ResultFormatter.day(decodeResult, Number(msg.substring(6, 8)));
3153
+ ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(msg.substring(8, 12)));
3078
3154
  ResultFormatter.position(decodeResult, {
3079
3155
  // Deg Min, no sec
3080
3156
  latitude: CoordinateUtils.getDirection(msg.substring(12, 13)) * (Number(msg.substring(13, 15)) + Number(msg.substring(15, 17)) / 60),
@@ -3301,7 +3377,7 @@ var Label_QR = class extends DecoderPlugin {
3301
3377
  decodeResult.formatted.description = "ON Report";
3302
3378
  ResultFormatter.departureAirport(decodeResult, message.text.substring(0, 4));
3303
3379
  ResultFormatter.arrivalAirport(decodeResult, message.text.substring(4, 8));
3304
- ResultFormatter.on(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12) + "00"));
3380
+ ResultFormatter.on(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12)));
3305
3381
  ResultFormatter.unknown(decodeResult, message.text.substring(12));
3306
3382
  decodeResult.decoded = true;
3307
3383
  if (!decodeResult.remaining.text)
@@ -3326,7 +3402,7 @@ var Label_QP = class extends DecoderPlugin {
3326
3402
  decodeResult.formatted.description = "OUT Report";
3327
3403
  ResultFormatter.departureAirport(decodeResult, message.text.substring(0, 4));
3328
3404
  ResultFormatter.arrivalAirport(decodeResult, message.text.substring(4, 8));
3329
- ResultFormatter.out(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12) + "00"));
3405
+ ResultFormatter.out(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12)));
3330
3406
  ResultFormatter.unknown(decodeResult, message.text.substring(12));
3331
3407
  decodeResult.decoded = true;
3332
3408
  if (!decodeResult.remaining.text)
@@ -3351,7 +3427,7 @@ var Label_QS = class extends DecoderPlugin {
3351
3427
  decodeResult.formatted.description = "IN Report";
3352
3428
  ResultFormatter.departureAirport(decodeResult, message.text.substring(0, 4));
3353
3429
  ResultFormatter.arrivalAirport(decodeResult, message.text.substring(4, 8));
3354
- ResultFormatter.in(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12) + "00"));
3430
+ ResultFormatter.in(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12)));
3355
3431
  ResultFormatter.unknown(decodeResult, message.text.substring(12));
3356
3432
  decodeResult.decoded = true;
3357
3433
  if (!decodeResult.remaining.text)
@@ -3378,7 +3454,7 @@ var Label_QQ = class extends DecoderPlugin {
3378
3454
  ResultFormatter.departureAirport(decodeResult, message.text.substring(0, 4));
3379
3455
  ResultFormatter.arrivalAirport(decodeResult, message.text.substring(4, 8));
3380
3456
  if (message.text.substring(12, 19) === "\r\n001FE") {
3381
- decodeResult.raw.day_of_month = message.text.substring(19, 21);
3457
+ decodeResult.raw.day = message.text.substring(19, 21);
3382
3458
  ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(21, 27)));
3383
3459
  let latdir = message.text.substring(27, 28);
3384
3460
  let latdeg = Number(message.text.substring(28, 30));