@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.js CHANGED
@@ -75,10 +75,13 @@ var DateTimeUtils = class {
75
75
  }
76
76
  /**
77
77
  *
78
- * @param time HHMMSS
78
+ * @param time HHMMSS or HHMM
79
79
  * @returns seconds since midnight
80
80
  */
81
81
  static convertHHMMSSToTod(time) {
82
+ if (time.length === 4) {
83
+ time += "00";
84
+ }
82
85
  const h = Number(time.substring(0, 2));
83
86
  const m = Number(time.substring(2, 4));
84
87
  const s = Number(time.substring(4, 6));
@@ -603,27 +606,36 @@ var ResultFormatter = class {
603
606
  });
604
607
  }
605
608
  static day(decodeResult, day) {
606
- decodeResult.raw.day_of_month = day;
609
+ decodeResult.raw.day = day;
607
610
  decodeResult.formatted.items.push({
608
- type: "day_of_month",
611
+ type: "day",
609
612
  code: "MSG_DAY",
610
613
  label: "Day of Month",
611
614
  value: `${day}`
612
615
  });
613
616
  }
617
+ static month(decodeResult, month) {
618
+ decodeResult.raw.month = month;
619
+ decodeResult.formatted.items.push({
620
+ type: "month",
621
+ code: "MSG_MON",
622
+ label: "Month of Year",
623
+ value: `${month}`
624
+ });
625
+ }
614
626
  static departureDay(decodeResult, day) {
615
- decodeResult.raw.departure_day_of_month = day;
627
+ decodeResult.raw.departure_day = day;
616
628
  decodeResult.formatted.items.push({
617
- type: "day_of_month",
629
+ type: "day",
618
630
  code: "DEP_DAY",
619
631
  label: "Departure Day",
620
632
  value: `${day}`
621
633
  });
622
634
  }
623
635
  static arrivalDay(decodeResult, day) {
624
- decodeResult.raw.arrival_day_of_month = day;
636
+ decodeResult.raw.arrival_day = day;
625
637
  decodeResult.formatted.items.push({
626
- type: "day_of_month",
638
+ type: "day",
627
639
  code: "ARR_DAY",
628
640
  label: "Arrival Day",
629
641
  value: `${day}`
@@ -718,14 +730,14 @@ var Label_5Z_Slash = class extends DecoderPlugin {
718
730
  const info = data[2].split(" ");
719
731
  ResultFormatter.departureAirport(decodeResult, info[1]);
720
732
  ResultFormatter.arrivalAirport(decodeResult, info[2]);
721
- decodeResult.raw.day_of_month = Number(info[3]);
733
+ decodeResult.raw.day = Number(info[3]);
722
734
  ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(info[4]));
723
735
  ResultFormatter.arrivalRunway(decodeResult, info[5].slice(1));
724
736
  ResultFormatter.unknownArr(decodeResult, data.slice(3), "/");
725
737
  } else if (type === "B3") {
726
738
  ResultFormatter.departureAirport(decodeResult, header[1].substring(0, 3), "IATA");
727
739
  ResultFormatter.arrivalAirport(decodeResult, header[1].substring(3), "IATA");
728
- decodeResult.raw.day_of_month = Number(header[2]);
740
+ decodeResult.raw.day = Number(header[2]);
729
741
  ResultFormatter.arrivalRunway(decodeResult, header[3].slice(1));
730
742
  if (header.length > 4) {
731
743
  ResultFormatter.unknownArr(decodeResult, header.slice(4), "/");
@@ -734,7 +746,7 @@ var Label_5Z_Slash = class extends DecoderPlugin {
734
746
  const info = data[2].split(" ");
735
747
  ResultFormatter.departureAirport(decodeResult, info[1]);
736
748
  ResultFormatter.arrivalAirport(decodeResult, info[2]);
737
- decodeResult.raw.day_of_month = Number(info[3]);
749
+ decodeResult.raw.day = Number(info[3]);
738
750
  ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(info[4]));
739
751
  ResultFormatter.unknownArr(decodeResult, info.slice(5), " ");
740
752
  } else if (type === "C3") {
@@ -744,10 +756,10 @@ var Label_5Z_Slash = class extends DecoderPlugin {
744
756
  const airports = data[2].split(" ");
745
757
  ResultFormatter.departureAirport(decodeResult, airports[1]);
746
758
  ResultFormatter.arrivalAirport(decodeResult, airports[2]);
747
- decodeResult.raw.day_of_month = Number(airports[3]);
759
+ decodeResult.raw.day = Number(airports[3]);
748
760
  ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(airports[4]));
749
761
  const estimates = data[3].split(" ");
750
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(estimates[1] + "00"));
762
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(estimates[1]));
751
763
  ResultFormatter.unknown(decodeResult, estimates[2]);
752
764
  } else {
753
765
  if (options.debug) {
@@ -891,16 +903,16 @@ var Label_10_Slash = class extends DecoderPlugin {
891
903
  ResultFormatter.heading(decodeResult, Number(parts[5]));
892
904
  ResultFormatter.altitude(decodeResult, 100 * Number(parts[6]));
893
905
  ResultFormatter.arrivalAirport(decodeResult, parts[7]);
894
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[8] + "00"));
906
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[8]));
895
907
  const waypoints = [{
896
908
  name: parts[11]
897
909
  }, {
898
910
  name: parts[12],
899
- time: DateTimeUtils.convertHHMMSSToTod(parts[13] + "00"),
911
+ time: DateTimeUtils.convertHHMMSSToTod(parts[13]),
900
912
  timeFormat: "tod"
901
913
  }, {
902
914
  name: parts[14],
903
- time: DateTimeUtils.convertHHMMSSToTod(parts[15] + "00"),
915
+ time: DateTimeUtils.convertHHMMSSToTod(parts[15]),
904
916
  timeFormat: "tod"
905
917
  }];
906
918
  ResultFormatter.route(decodeResult, { waypoints });
@@ -920,7 +932,7 @@ var Label_12_N_Space = class extends DecoderPlugin {
920
932
  qualifiers() {
921
933
  return {
922
934
  labels: ["12"],
923
- preambles: ["N "]
935
+ preambles: ["N ", "S "]
924
936
  };
925
937
  }
926
938
  decode(message, options = {}) {
@@ -986,7 +998,7 @@ var Label_13Through18_Slash = class extends DecoderPlugin {
986
998
  const data = parts[2].split(" ");
987
999
  ResultFormatter.departureAirport(decodeResult, data[1]);
988
1000
  ResultFormatter.arrivalAirport(decodeResult, data[2]);
989
- decodeResult.raw.day_of_month = Number(data[3]);
1001
+ decodeResult.raw.day = Number(data[3]);
990
1002
  const time = DateTimeUtils.convertHHMMSSToTod(data[4]);
991
1003
  if (labelNumber === 13) {
992
1004
  ResultFormatter.out(decodeResult, time);
@@ -1046,7 +1058,7 @@ function getMsgType(labelNumber) {
1046
1058
 
1047
1059
  // lib/plugins/Label_15.ts
1048
1060
  var Label_15 = class extends DecoderPlugin {
1049
- name = "label-5z";
1061
+ name = "label-15";
1050
1062
  qualifiers() {
1051
1063
  return {
1052
1064
  labels: ["15"],
@@ -1057,10 +1069,28 @@ var Label_15 = class extends DecoderPlugin {
1057
1069
  const decodeResult = this.defaultResult();
1058
1070
  decodeResult.decoder.name = this.name;
1059
1071
  decodeResult.formatted.description = "Position Report";
1060
- const twoZeeRegex = /^\(2(?<between>.+)\(Z$/;
1061
- const results = message.text.match(twoZeeRegex);
1062
- if (results?.groups) {
1063
- ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinates(results.groups.between.substr(0, 13)));
1072
+ decodeResult.message = message;
1073
+ if (message.text.startsWith("(2") && message.text.endsWith("(Z")) {
1074
+ const between = message.text.substring(2, message.text.length - 2);
1075
+ ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(between.substring(0, 13)));
1076
+ if (between.length === 25) {
1077
+ ResultFormatter.unknown(decodeResult, between.substring(13, 19));
1078
+ const alt = between.substring(19, 22);
1079
+ if (alt != "---") {
1080
+ ResultFormatter.altitude(decodeResult, 100 * Number(alt));
1081
+ }
1082
+ ResultFormatter.temperature(decodeResult, between.substring(22).replace(" ", "0"));
1083
+ } else {
1084
+ ResultFormatter.unknown(decodeResult, between.substring(13));
1085
+ }
1086
+ } else {
1087
+ if (options.debug) {
1088
+ console.log(`Decoder: Unknown 15 message: ${message.text}`);
1089
+ }
1090
+ ResultFormatter.unknown(decodeResult, message.text);
1091
+ decodeResult.decoded = false;
1092
+ decodeResult.decoder.decodeLevel = "none";
1093
+ return decodeResult;
1064
1094
  }
1065
1095
  decodeResult.decoded = true;
1066
1096
  decodeResult.decoder.decodeLevel = "partial";
@@ -1113,7 +1143,7 @@ var Label_16_N_Space = class extends DecoderPlugin {
1113
1143
  qualifiers() {
1114
1144
  return {
1115
1145
  labels: ["16"],
1116
- preambles: ["N "]
1146
+ preambles: ["N ", "S "]
1117
1147
  };
1118
1148
  }
1119
1149
  decode(message, options = {}) {
@@ -1243,7 +1273,7 @@ var Label_1L_3Line = class extends DecoderPlugin {
1243
1273
  }
1244
1274
  const eta = data.get("ETA");
1245
1275
  if (eta) {
1246
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(eta + "00"));
1276
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(eta));
1247
1277
  data.delete("ETA");
1248
1278
  }
1249
1279
  const alt = data.get("ALT");
@@ -1324,8 +1354,8 @@ var Label_1L_070 = class extends DecoderPlugin {
1324
1354
  }
1325
1355
  ResultFormatter.departureAirport(decodeResult, parts[0]);
1326
1356
  ResultFormatter.arrivalAirport(decodeResult, parts[1]);
1327
- ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[2] + "00"));
1328
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[3] + "00"));
1357
+ ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[2]));
1358
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(parts[3]));
1329
1359
  ResultFormatter.position(decodeResult, {
1330
1360
  latitude: CoordinateUtils.getDirection(parts[4][0]) * Number(parts[4].substring(1)),
1331
1361
  longitude: CoordinateUtils.getDirection(parts[5][0]) * Number(parts[5].substring(1))
@@ -1445,7 +1475,7 @@ var Label_1L_Slash = class extends DecoderPlugin {
1445
1475
  }
1446
1476
  const eta = data.get("ETA");
1447
1477
  if (eta) {
1448
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(eta + "00"));
1478
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(eta));
1449
1479
  data.delete("ETA");
1450
1480
  }
1451
1481
  let remaining = "";
@@ -1579,7 +1609,7 @@ var Label_22_OFF = class extends DecoderPlugin {
1579
1609
  ResultFormatter.flightNumber(decodeResult, fields[0]);
1580
1610
  ResultFormatter.departureDay(decodeResult, Number(fields[1].substring(0, 2)));
1581
1611
  ResultFormatter.arrivalDay(decodeResult, Number(fields[1].substring(2, 4)));
1582
- ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(4, 8) + "00"));
1612
+ ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(4, 8)));
1583
1613
  ResultFormatter.departureAirport(decodeResult, fields[1].substring(8, 12));
1584
1614
  ResultFormatter.arrivalAirport(decodeResult, fields[1].substring(12, 16));
1585
1615
  ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(16, 22)));
@@ -1595,7 +1625,7 @@ var Label_22_OFF = class extends DecoderPlugin {
1595
1625
  }
1596
1626
  ResultFormatter.departureAirport(decodeResult, fields[0]);
1597
1627
  ResultFormatter.arrivalAirport(decodeResult, fields[1]);
1598
- ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[2] + "00"));
1628
+ ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[2]));
1599
1629
  ResultFormatter.unknown(decodeResult, fields[3]);
1600
1630
  decodeResult.decoded = true;
1601
1631
  decodeResult.decoder.decodeLevel = "partial";
@@ -1612,12 +1642,12 @@ var Label_22_OFF = class extends DecoderPlugin {
1612
1642
  ResultFormatter.position(decodeResult, position);
1613
1643
  }
1614
1644
  ResultFormatter.day(decodeResult, Number(fields[1].substring(14, 16)));
1615
- ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(16, 20) + "00"));
1645
+ ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(16, 20)));
1616
1646
  ResultFormatter.departureAirport(decodeResult, fields[1].substring(20, 24));
1617
1647
  ResultFormatter.arrivalAirport(decodeResult, fields[1].substring(24, 28));
1618
- ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(28, 32) + "00"));
1648
+ ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(28, 32)));
1619
1649
  ResultFormatter.unknown(decodeResult, fields[1].substring(32, 36));
1620
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(36, 40) + "00"));
1650
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[1].substring(36, 40)));
1621
1651
  decodeResult.decoded = true;
1622
1652
  decodeResult.decoder.decodeLevel = "partial";
1623
1653
  } else {
@@ -1699,7 +1729,7 @@ var Label_24_Slash = class extends DecoderPlugin {
1699
1729
  longitude: (lon[0] === "E" ? 1 : -1) * Number(lon.substring(1))
1700
1730
  };
1701
1731
  ResultFormatter.position(decodeResult, position);
1702
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[8] + "00"));
1732
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[8]));
1703
1733
  ResultFormatter.unknown(decodeResult, fields[7]);
1704
1734
  decodeResult.decoded = true;
1705
1735
  decodeResult.decoder.decodeLevel = "partial";
@@ -1735,7 +1765,7 @@ var Label_30_Slash_EA = class extends DecoderPlugin {
1735
1765
  console.log(results);
1736
1766
  }
1737
1767
  }
1738
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(results[0].substr(2, 4) + "00"));
1768
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(results[0].substr(2, 4)));
1739
1769
  if (results[1].substring(0, 2) === "DS") {
1740
1770
  ResultFormatter.arrivalAirport(decodeResult, results[1].substring(2, 6));
1741
1771
  ResultFormatter.unknown(decodeResult, "/".concat(results[2]));
@@ -1762,22 +1792,35 @@ var Label_44_ETA = class extends DecoderPlugin {
1762
1792
  decodeResult.decoder.name = this.name;
1763
1793
  decodeResult.formatted.description = "ETA Report";
1764
1794
  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) {
1795
+ const data = message.text.split(",");
1796
+ if (data.length >= 9) {
1768
1797
  if (options.debug) {
1769
1798
  console.log(`Label 44 ETA Report: groups`);
1770
- console.log(results.groups);
1799
+ console.log(data);
1771
1800
  }
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
- ResultFormatter.remainingFuel(decodeResult, Number(results.groups.fuel_in_tons));
1801
+ ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[1]));
1802
+ ResultFormatter.altitude(decodeResult, 100 * Number(data[2]));
1803
+ ResultFormatter.departureAirport(decodeResult, data[3]);
1804
+ ResultFormatter.arrivalAirport(decodeResult, data[4]);
1805
+ ResultFormatter.month(decodeResult, Number(data[5].substring(0, 2)));
1806
+ ResultFormatter.day(decodeResult, Number(data[5].substring(2, 4)));
1807
+ ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[6]));
1808
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[7]));
1809
+ const fuel = Number(data[8]);
1810
+ if (!isNaN(fuel)) {
1811
+ ResultFormatter.remainingFuel(decodeResult, Number(fuel));
1780
1812
  }
1813
+ if (data.length > 9) {
1814
+ ResultFormatter.unknownArr(decodeResult, data.slice(9));
1815
+ }
1816
+ } else {
1817
+ if (options.debug) {
1818
+ console.log(`Decoder: Unknown 44 message: ${message.text}`);
1819
+ }
1820
+ ResultFormatter.unknown(decodeResult, message.text);
1821
+ decodeResult.decoded = false;
1822
+ decodeResult.decoder.decodeLevel = "none";
1823
+ return decodeResult;
1781
1824
  }
1782
1825
  decodeResult.decoded = true;
1783
1826
  decodeResult.decoder.decodeLevel = "full";
@@ -1799,22 +1842,33 @@ var Label_44_IN = class extends DecoderPlugin {
1799
1842
  decodeResult.decoder.name = this.name;
1800
1843
  decodeResult.formatted.description = "In Air Report";
1801
1844
  decodeResult.message = message;
1802
- const regex = /^.*,(?<unsplit_coords>.*),(?<departure_icao>.*),(?<arrival_icao>.*),(?<current_date>.*),(?<current_time>.*),(?<fuel_in_tons>.*)$/;
1803
- const results = message.text.match(regex);
1804
- if (results?.groups) {
1845
+ const data = message.text.split(",");
1846
+ if (data.length >= 7) {
1805
1847
  if (options.debug) {
1806
1848
  console.log(`Label 44 In Air Report: groups`);
1807
- console.log(results.groups);
1849
+ console.log(data);
1808
1850
  }
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
- if (results.groups.fuel_in_tons != "***" && results.groups.fuel_in_tons != "****") {
1816
- decodeResult.raw.fuel_in_tons = Number(results.groups.fuel_in_tons);
1851
+ ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[1]));
1852
+ ResultFormatter.departureAirport(decodeResult, data[2]);
1853
+ ResultFormatter.arrivalAirport(decodeResult, data[3]);
1854
+ ResultFormatter.month(decodeResult, Number(data[4].substring(0, 2)));
1855
+ ResultFormatter.day(decodeResult, Number(data[4].substring(2, 4)));
1856
+ ResultFormatter.in(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[5]));
1857
+ const fuel = Number(data[6]);
1858
+ if (!isNaN(fuel)) {
1859
+ ResultFormatter.remainingFuel(decodeResult, Number(fuel));
1860
+ }
1861
+ if (data.length > 7) {
1862
+ ResultFormatter.unknownArr(decodeResult, data.slice(7));
1817
1863
  }
1864
+ } else {
1865
+ if (options.debug) {
1866
+ console.log(`Decoder: Unknown 44 message: ${message.text}`);
1867
+ }
1868
+ ResultFormatter.unknown(decodeResult, message.text);
1869
+ decodeResult.decoded = false;
1870
+ decodeResult.decoder.decodeLevel = "none";
1871
+ return decodeResult;
1818
1872
  }
1819
1873
  decodeResult.decoded = true;
1820
1874
  decodeResult.decoder.decodeLevel = "full";
@@ -1836,25 +1890,34 @@ var Label_44_OFF = class extends DecoderPlugin {
1836
1890
  decodeResult.decoder.name = this.name;
1837
1891
  decodeResult.formatted.description = "Off Runway Report";
1838
1892
  decodeResult.message = message;
1839
- const regex = /^.*,(?<unsplit_coords>.*),(?<departure_icao>.*),(?<arrival_icao>.*),(?<current_date>.*),(?<current_time>.*),(?<eta_time>.*),(?<fuel_in_tons>.*)$/;
1840
- const results = message.text.match(regex);
1841
- if (results?.groups) {
1893
+ const data = message.text.split(",");
1894
+ if (data.length >= 8) {
1842
1895
  if (options.debug) {
1843
1896
  console.log(`Label 44 Off Runway Report: groups`);
1844
- console.log(results.groups);
1897
+ console.log(data);
1845
1898
  }
1846
- ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinates(results.groups.unsplit_coords));
1847
- ResultFormatter.departureAirport(decodeResult, results.groups.departure_icao);
1848
- ResultFormatter.arrivalAirport(decodeResult, results.groups.arrival_icao);
1849
- decodeResult.raw.current_time = Date.parse(
1850
- (/* @__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"
1851
- );
1852
- decodeResult.raw.eta_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.eta_time.substr(0, 2) + ":" + results.groups.eta_time.substr(2, 2) + ":00Z"
1854
- );
1855
- if (results.groups.fuel_in_tons != "***" && results.groups.fuel_in_tons != "****") {
1856
- decodeResult.raw.fuel_in_tons = Number(results.groups.fuel_in_tons);
1899
+ ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[1]));
1900
+ ResultFormatter.departureAirport(decodeResult, data[2]);
1901
+ ResultFormatter.arrivalAirport(decodeResult, data[3]);
1902
+ ResultFormatter.month(decodeResult, Number(data[4].substring(0, 2)));
1903
+ ResultFormatter.day(decodeResult, Number(data[4].substring(2, 4)));
1904
+ ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[5]));
1905
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[6]));
1906
+ const fuel = Number(data[7]);
1907
+ if (!isNaN(fuel)) {
1908
+ ResultFormatter.remainingFuel(decodeResult, Number(fuel));
1909
+ }
1910
+ if (data.length > 8) {
1911
+ ResultFormatter.unknownArr(decodeResult, data.slice(8));
1857
1912
  }
1913
+ } else {
1914
+ if (options.debug) {
1915
+ console.log(`Decoder: Unknown 44 message: ${message.text}`);
1916
+ }
1917
+ ResultFormatter.unknown(decodeResult, message.text);
1918
+ decodeResult.decoded = false;
1919
+ decodeResult.decoder.decodeLevel = "none";
1920
+ return decodeResult;
1858
1921
  }
1859
1922
  decodeResult.decoded = true;
1860
1923
  decodeResult.decoder.decodeLevel = "full";
@@ -1876,22 +1939,33 @@ var Label_44_ON = class extends DecoderPlugin {
1876
1939
  decodeResult.decoder.name = this.name;
1877
1940
  decodeResult.formatted.description = "On Runway Report";
1878
1941
  decodeResult.message = message;
1879
- const regex = /^.*,(?<unsplit_coords>.*),(?<departure_icao>.*),(?<arrival_icao>.*),(?<current_date>.*),(?<current_time>.*),(?<fuel_in_tons>.*)$/;
1880
- const results = message.text.match(regex);
1881
- if (results?.groups) {
1942
+ const data = message.text.split(",");
1943
+ if (data.length >= 7) {
1882
1944
  if (options.debug) {
1883
1945
  console.log(`Label 44 On Runway Report: groups`);
1884
- console.log(results.groups);
1946
+ console.log(data);
1885
1947
  }
1886
- ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinates(results.groups.unsplit_coords));
1887
- ResultFormatter.departureAirport(decodeResult, results.groups.departure_icao);
1888
- ResultFormatter.arrivalAirport(decodeResult, results.groups.arrival_icao);
1889
- decodeResult.raw.current_time = Date.parse(
1890
- (/* @__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"
1891
- );
1892
- if (results.groups.fuel_in_tons != "***" && results.groups.fuel_in_tons != "****") {
1893
- ResultFormatter.remainingFuel(decodeResult, Number(results.groups.fuel_in_tons));
1948
+ ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(data[1]));
1949
+ ResultFormatter.departureAirport(decodeResult, data[2]);
1950
+ ResultFormatter.arrivalAirport(decodeResult, data[3]);
1951
+ ResultFormatter.month(decodeResult, Number(data[4].substring(0, 2)));
1952
+ ResultFormatter.day(decodeResult, Number(data[4].substring(2, 4)));
1953
+ ResultFormatter.on(decodeResult, DateTimeUtils.convertHHMMSSToTod(data[5]));
1954
+ const fuel = Number(data[6]);
1955
+ if (!isNaN(fuel)) {
1956
+ ResultFormatter.remainingFuel(decodeResult, Number(fuel));
1894
1957
  }
1958
+ if (data.length > 7) {
1959
+ ResultFormatter.unknownArr(decodeResult, data.slice(7));
1960
+ }
1961
+ } else {
1962
+ if (options.debug) {
1963
+ console.log(`Decoder: Unknown 44 message: ${message.text}`);
1964
+ }
1965
+ ResultFormatter.unknown(decodeResult, message.text);
1966
+ decodeResult.decoded = false;
1967
+ decodeResult.decoder.decodeLevel = "none";
1968
+ return decodeResult;
1895
1969
  }
1896
1970
  decodeResult.decoded = true;
1897
1971
  decodeResult.decoder.decodeLevel = "full";
@@ -2350,9 +2424,11 @@ var H1Helper = class {
2350
2424
  ResultFormatter.freetext(decodeResult, fields[i].substring(2));
2351
2425
  } else if (fields[i].startsWith("ET")) {
2352
2426
  if (fields[i].length === 7) {
2353
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[i].substring(3) + "00"));
2427
+ ResultFormatter.day(decodeResult, Number(fields[i].substring(2, 3)));
2428
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[i].substring(3)));
2354
2429
  } else if (fields[i].length === 8) {
2355
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[i].substring(4) + "00"));
2430
+ ResultFormatter.day(decodeResult, Number(fields[i].substring(2, 4)));
2431
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[i].substring(4)));
2356
2432
  } else {
2357
2433
  ResultFormatter.unknown(decodeResult, fields[i], "/");
2358
2434
  }
@@ -2612,7 +2688,7 @@ var Label_4N = class extends DecoderPlugin {
2612
2688
  decodeResult.decoded = true;
2613
2689
  const fields = text.split(",");
2614
2690
  if (text.length === 51) {
2615
- decodeResult.raw.day_of_month = text.substring(0, 2);
2691
+ decodeResult.raw.day = text.substring(0, 2);
2616
2692
  ResultFormatter.departureAirport(decodeResult, text.substring(8, 11));
2617
2693
  ResultFormatter.arrivalAirport(decodeResult, text.substring(13, 16));
2618
2694
  ResultFormatter.position(decodeResult, CoordinateUtils.decodeStringCoordinatesDecimalMinutes(text.substring(30, 45).replace(/^(.)0/, "$1")));
@@ -2826,7 +2902,7 @@ var Label_83 = class extends DecoderPlugin {
2826
2902
  if (text.substring(0, 10) === "4DH3 ETAT2") {
2827
2903
  const fields = text.split(/\s+/);
2828
2904
  if (fields[2].length > 5) {
2829
- decodeResult.raw.day_of_month = fields[2].substring(5);
2905
+ decodeResult.raw.day = fields[2].substring(5);
2830
2906
  }
2831
2907
  ResultFormatter.unknown(decodeResult, fields[2].substring(0, 4));
2832
2908
  const subfields = fields[3].split("/");
@@ -2835,7 +2911,7 @@ var Label_83 = class extends DecoderPlugin {
2835
2911
  ResultFormatter.tail(decodeResult, fields[4].replace(/\./g, ""));
2836
2912
  ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(fields[6] + "00"));
2837
2913
  } else if (text.substring(0, 5) === "001PR") {
2838
- decodeResult.raw.day_of_month = text.substring(5, 7);
2914
+ decodeResult.raw.day = text.substring(5, 7);
2839
2915
  const position = CoordinateUtils.decodeStringCoordinatesDecimalMinutes(text.substring(13, 28).replace(/\./g, ""));
2840
2916
  if (position) {
2841
2917
  ResultFormatter.position(decodeResult, position);
@@ -2847,7 +2923,7 @@ var Label_83 = class extends DecoderPlugin {
2847
2923
  if (fields.length === 9) {
2848
2924
  ResultFormatter.departureAirport(decodeResult, fields[0]);
2849
2925
  ResultFormatter.arrivalAirport(decodeResult, fields[1]);
2850
- decodeResult.raw.day_of_month = fields[2].substring(0, 2);
2926
+ decodeResult.raw.day = fields[2].substring(0, 2);
2851
2927
  decodeResult.raw.time = fields[2].substring(2);
2852
2928
  ResultFormatter.position(
2853
2929
  decodeResult,
@@ -2897,7 +2973,7 @@ var Label_8E = class extends DecoderPlugin {
2897
2973
  console.log(`Label 8E ETA: groups`);
2898
2974
  console.log(results.groups);
2899
2975
  }
2900
- ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(results.groups.arrival_eta + "00"));
2976
+ ResultFormatter.eta(decodeResult, DateTimeUtils.convertHHMMSSToTod(results.groups.arrival_eta));
2901
2977
  ResultFormatter.arrivalAirport(decodeResult, results.groups.arrival_icao);
2902
2978
  }
2903
2979
  decodeResult.decoded = true;
@@ -3109,9 +3185,9 @@ var Label_H1_StarPOS = class extends DecoderPlugin {
3109
3185
  decodeResult.decoder.decodeLevel = "none";
3110
3186
  return decodeResult;
3111
3187
  }
3112
- decodeResult.raw.month = Number(msg.substring(4, 6));
3113
- decodeResult.raw.day_of_month = Number(msg.substring(6, 8));
3114
- ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(msg.substring(8, 12) + "00"));
3188
+ ResultFormatter.month(decodeResult, Number(msg.substring(4, 6)));
3189
+ ResultFormatter.day(decodeResult, Number(msg.substring(6, 8)));
3190
+ ResultFormatter.time_of_day(decodeResult, DateTimeUtils.convertHHMMSSToTod(msg.substring(8, 12)));
3115
3191
  ResultFormatter.position(decodeResult, {
3116
3192
  // Deg Min, no sec
3117
3193
  latitude: CoordinateUtils.getDirection(msg.substring(12, 13)) * (Number(msg.substring(13, 15)) + Number(msg.substring(15, 17)) / 60),
@@ -3338,7 +3414,7 @@ var Label_QR = class extends DecoderPlugin {
3338
3414
  decodeResult.formatted.description = "ON Report";
3339
3415
  ResultFormatter.departureAirport(decodeResult, message.text.substring(0, 4));
3340
3416
  ResultFormatter.arrivalAirport(decodeResult, message.text.substring(4, 8));
3341
- ResultFormatter.on(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12) + "00"));
3417
+ ResultFormatter.on(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12)));
3342
3418
  ResultFormatter.unknown(decodeResult, message.text.substring(12));
3343
3419
  decodeResult.decoded = true;
3344
3420
  if (!decodeResult.remaining.text)
@@ -3363,7 +3439,7 @@ var Label_QP = class extends DecoderPlugin {
3363
3439
  decodeResult.formatted.description = "OUT Report";
3364
3440
  ResultFormatter.departureAirport(decodeResult, message.text.substring(0, 4));
3365
3441
  ResultFormatter.arrivalAirport(decodeResult, message.text.substring(4, 8));
3366
- ResultFormatter.out(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12) + "00"));
3442
+ ResultFormatter.out(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12)));
3367
3443
  ResultFormatter.unknown(decodeResult, message.text.substring(12));
3368
3444
  decodeResult.decoded = true;
3369
3445
  if (!decodeResult.remaining.text)
@@ -3388,7 +3464,7 @@ var Label_QS = class extends DecoderPlugin {
3388
3464
  decodeResult.formatted.description = "IN Report";
3389
3465
  ResultFormatter.departureAirport(decodeResult, message.text.substring(0, 4));
3390
3466
  ResultFormatter.arrivalAirport(decodeResult, message.text.substring(4, 8));
3391
- ResultFormatter.in(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12) + "00"));
3467
+ ResultFormatter.in(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(8, 12)));
3392
3468
  ResultFormatter.unknown(decodeResult, message.text.substring(12));
3393
3469
  decodeResult.decoded = true;
3394
3470
  if (!decodeResult.remaining.text)
@@ -3415,7 +3491,7 @@ var Label_QQ = class extends DecoderPlugin {
3415
3491
  ResultFormatter.departureAirport(decodeResult, message.text.substring(0, 4));
3416
3492
  ResultFormatter.arrivalAirport(decodeResult, message.text.substring(4, 8));
3417
3493
  if (message.text.substring(12, 19) === "\r\n001FE") {
3418
- decodeResult.raw.day_of_month = message.text.substring(19, 21);
3494
+ decodeResult.raw.day = message.text.substring(19, 21);
3419
3495
  ResultFormatter.off(decodeResult, DateTimeUtils.convertHHMMSSToTod(message.text.substring(21, 27)));
3420
3496
  let latdir = message.text.substring(27, 28);
3421
3497
  let latdeg = Number(message.text.substring(28, 30));