@airframes/acars-decoder 1.9.1 → 1.9.3

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
@@ -172,7 +172,9 @@ var DateTimeUtils = class {
172
172
  const hours = +timeString.substr(0, 2);
173
173
  const minutes = +timeString.substr(2, 2);
174
174
  const seconds = timeString.length === 6 ? +timeString.substr(4, 2) : 0;
175
- const utcDate = new Date(Date.UTC(year, month, day, hours, minutes, seconds));
175
+ const utcDate = new Date(
176
+ Date.UTC(year, month, day, hours, minutes, seconds)
177
+ );
176
178
  return utcDate.toUTCString();
177
179
  }
178
180
  /**
@@ -222,12 +224,16 @@ var DateTimeUtils = class {
222
224
  * @returns
223
225
  */
224
226
  static timestampToString(time) {
227
+ if (isNaN(time)) {
228
+ return "";
229
+ }
225
230
  const date = new Date(time * 1e3);
226
231
  if (time < 86400) {
227
232
  return date.toISOString().slice(11, 19);
228
233
  }
229
- if (time < 2678400) {
230
- return `YYYY-MM-${date.toISOString().slice(8, 19)}`;
234
+ if (time < 32 * 86400) {
235
+ const day = String(Math.floor(time / 86400)).padStart(2, "0");
236
+ return `YYYY-MM-${day}T${date.toISOString().slice(11, 19)}`;
231
237
  }
232
238
  return date.toISOString().slice(0, -5) + "Z";
233
239
  }
@@ -469,6 +475,9 @@ var ResultFormatter = class {
469
475
  });
470
476
  }
471
477
  static eta(decodeResult, time) {
478
+ if (isNaN(time)) {
479
+ return;
480
+ }
472
481
  decodeResult.raw.eta_time = time;
473
482
  decodeResult.formatted.items.push({
474
483
  type: "time",
@@ -580,6 +589,9 @@ var ResultFormatter = class {
580
589
  });
581
590
  }
582
591
  static groundspeed(decodeResult, value) {
592
+ if (isNaN(value)) {
593
+ return;
594
+ }
583
595
  decodeResult.raw.groundspeed = value;
584
596
  decodeResult.formatted.items.push({
585
597
  type: "aircraft_groundspeed",
@@ -589,6 +601,9 @@ var ResultFormatter = class {
589
601
  });
590
602
  }
591
603
  static airspeed(decodeResult, value) {
604
+ if (isNaN(value)) {
605
+ return;
606
+ }
592
607
  decodeResult.raw.airspeed = value;
593
608
  decodeResult.formatted.items.push({
594
609
  type: "airspeed",
@@ -598,6 +613,9 @@ var ResultFormatter = class {
598
613
  });
599
614
  }
600
615
  static mach(decodeResult, value) {
616
+ if (isNaN(value)) {
617
+ return;
618
+ }
601
619
  decodeResult.raw.mach = value;
602
620
  decodeResult.formatted.items.push({
603
621
  type: "mach",
@@ -635,6 +653,9 @@ var ResultFormatter = class {
635
653
  });
636
654
  }
637
655
  static heading(decodeResult, value) {
656
+ if (isNaN(value)) {
657
+ return;
658
+ }
638
659
  decodeResult.raw.heading = value;
639
660
  decodeResult.formatted.items.push({
640
661
  type: "heading",
@@ -653,6 +674,9 @@ var ResultFormatter = class {
653
674
  });
654
675
  }
655
676
  static out(decodeResult, time) {
677
+ if (isNaN(time)) {
678
+ return;
679
+ }
656
680
  decodeResult.raw.out_time = time;
657
681
  decodeResult.formatted.items.push({
658
682
  type: "time",
@@ -662,6 +686,9 @@ var ResultFormatter = class {
662
686
  });
663
687
  }
664
688
  static off(decodeResult, time) {
689
+ if (isNaN(time)) {
690
+ return;
691
+ }
665
692
  decodeResult.raw.off_time = time;
666
693
  decodeResult.formatted.items.push({
667
694
  type: "time",
@@ -671,6 +698,9 @@ var ResultFormatter = class {
671
698
  });
672
699
  }
673
700
  static on(decodeResult, time) {
701
+ if (isNaN(time)) {
702
+ return;
703
+ }
674
704
  decodeResult.raw.on_time = time;
675
705
  decodeResult.formatted.items.push({
676
706
  type: "time",
@@ -680,6 +710,9 @@ var ResultFormatter = class {
680
710
  });
681
711
  }
682
712
  static in(decodeResult, time) {
713
+ if (isNaN(time)) {
714
+ return;
715
+ }
683
716
  decodeResult.raw.in_time = time;
684
717
  decodeResult.formatted.items.push({
685
718
  type: "time",
@@ -689,6 +722,9 @@ var ResultFormatter = class {
689
722
  });
690
723
  }
691
724
  static engineStart(decodeResult, time) {
725
+ if (isNaN(time)) {
726
+ return;
727
+ }
692
728
  decodeResult.raw.engine_start_time = time;
693
729
  decodeResult.formatted.items.push({
694
730
  type: "time",
@@ -698,6 +734,9 @@ var ResultFormatter = class {
698
734
  });
699
735
  }
700
736
  static engineStop(decodeResult, time) {
737
+ if (isNaN(time)) {
738
+ return;
739
+ }
701
740
  decodeResult.raw.engine_stop_time = time;
702
741
  decodeResult.formatted.items.push({
703
742
  type: "time",
@@ -707,6 +746,9 @@ var ResultFormatter = class {
707
746
  });
708
747
  }
709
748
  static day(decodeResult, day) {
749
+ if (isNaN(day)) {
750
+ return;
751
+ }
710
752
  decodeResult.raw.day = day;
711
753
  decodeResult.formatted.items.push({
712
754
  type: "day",
@@ -716,6 +758,9 @@ var ResultFormatter = class {
716
758
  });
717
759
  }
718
760
  static month(decodeResult, month) {
761
+ if (isNaN(month)) {
762
+ return;
763
+ }
719
764
  decodeResult.raw.month = month;
720
765
  decodeResult.formatted.items.push({
721
766
  type: "month",
@@ -725,6 +770,9 @@ var ResultFormatter = class {
725
770
  });
726
771
  }
727
772
  static departureDay(decodeResult, day) {
773
+ if (isNaN(day)) {
774
+ return;
775
+ }
728
776
  decodeResult.raw.departure_day = day;
729
777
  decodeResult.formatted.items.push({
730
778
  type: "day",
@@ -734,6 +782,9 @@ var ResultFormatter = class {
734
782
  });
735
783
  }
736
784
  static arrivalDay(decodeResult, day) {
785
+ if (isNaN(day)) {
786
+ return;
787
+ }
737
788
  decodeResult.raw.arrival_day = day;
738
789
  decodeResult.formatted.items.push({
739
790
  type: "day",
@@ -897,6 +948,9 @@ var ResultFormatter = class {
897
948
  });
898
949
  }
899
950
  static timestamp(decodeResult, value) {
951
+ if (isNaN(value)) {
952
+ return;
953
+ }
900
954
  decodeResult.raw.message_timestamp = value;
901
955
  decodeResult.formatted.items.push({
902
956
  type: "time",
@@ -1025,6 +1079,43 @@ var DecoderPlugin = class {
1025
1079
  }
1026
1080
  };
1027
1081
 
1082
+ // lib/plugins/Lib_ACARS.ts
1083
+ var LibAcars = class extends DecoderPlugin {
1084
+ name = "libacars";
1085
+ qualifiers() {
1086
+ return {
1087
+ labels: ["*"],
1088
+ preambles: ["- #"]
1089
+ };
1090
+ }
1091
+ decode(message, options = {}) {
1092
+ const text = message.text;
1093
+ const prefix = message.text.slice(0, 5);
1094
+ const decoded = this.decoder.decode(
1095
+ {
1096
+ label: message.label,
1097
+ sublabel: message.sublabel,
1098
+ text: text.replaceAll(prefix, "")
1099
+ // Remove the prefix before decoding
1100
+ },
1101
+ options
1102
+ );
1103
+ const decodeResult = this.defaultResult();
1104
+ decodeResult.decoder.name = this.name;
1105
+ decodeResult.message = message;
1106
+ if (decoded.decoded) {
1107
+ decodeResult.decoded = true;
1108
+ decodeResult.decoder.decodeLevel = decoded.decoder.decodeLevel;
1109
+ decodeResult.decoder.name = this.name + "-" + decoded.decoder.name;
1110
+ decodeResult.raw = { ...decodeResult.raw, ...decoded.raw };
1111
+ decodeResult.formatted.description = decoded.formatted.description;
1112
+ decodeResult.formatted.items.push(...decoded.formatted.items);
1113
+ decodeResult.remaining = decoded.remaining;
1114
+ }
1115
+ return decodeResult;
1116
+ }
1117
+ };
1118
+
1028
1119
  // lib/plugins/CBand.ts
1029
1120
  var CBAND_HEADER = /^(?<msgno>[A-Z]\d{2}[A-Z])(?<airline>[A-Z0-9]{2})(?<number>[0-9]{4})/;
1030
1121
  var CBand = class extends DecoderPlugin {
@@ -1865,7 +1956,7 @@ var Arinc702 = class extends DecoderPlugin {
1865
1956
  }
1866
1957
  const hashParts = msg.split("#");
1867
1958
  if (hashParts.length == 2) {
1868
- const offset = hashParts[0] === "- " || isNaN(parseInt(hashParts[1][1])) ? 3 : 4;
1959
+ const offset = isNaN(parseInt(hashParts[1][1])) ? 3 : 4;
1869
1960
  decoded = Arinc702Helper.decodeH1Message(
1870
1961
  decodeResult,
1871
1962
  msg.slice(hashParts[0].length + offset)
@@ -4027,8 +4118,13 @@ var Label_4A_DIS = class extends DecoderPlugin {
4027
4118
  }
4028
4119
  decode(message, options = {}) {
4029
4120
  const decodeResult = this.initResult(message, "Latest New Format");
4030
- decodeResult.decoded = true;
4031
4121
  const fields = message.text.split(",");
4122
+ if (fields.length < 3 || !fields[1] || fields[1].length < 3 || !fields[2]) {
4123
+ decodeResult.decoded = false;
4124
+ this.setDecodeLevel(decodeResult, decodeResult.decoded);
4125
+ return decodeResult;
4126
+ }
4127
+ decodeResult.decoded = true;
4032
4128
  ResultFormatter.timestamp(
4033
4129
  decodeResult,
4034
4130
  DateTimeUtils.convertHHMMSSToTod(fields[1].substring(2) + "00")
@@ -6654,13 +6750,11 @@ var Label_QQ = class extends DecoderPlugin {
6654
6750
  };
6655
6751
  ResultFormatter.unknown(decodeResult, message.text.substring(42, 45));
6656
6752
  ResultFormatter.position(decodeResult, pos);
6657
- if (decodeResult.remaining.text !== "---") {
6658
- ResultFormatter.groundspeed(
6659
- decodeResult,
6660
- Number(message.text.substring(45, 48))
6661
- );
6753
+ const gsField = message.text.substring(45, 48);
6754
+ if (decodeResult.remaining.text !== "---" && gsField !== "---") {
6755
+ ResultFormatter.groundspeed(decodeResult, Number(gsField));
6662
6756
  } else {
6663
- ResultFormatter.unknown(decodeResult, message.text.substring(45, 48));
6757
+ ResultFormatter.unknown(decodeResult, gsField);
6664
6758
  }
6665
6759
  ResultFormatter.unknown(decodeResult, message.text.substring(48));
6666
6760
  } else {
@@ -6680,6 +6774,7 @@ var Label_QQ = class extends DecoderPlugin {
6680
6774
  // lib/MessageDecoder.ts
6681
6775
  var pluginClasses = [
6682
6776
  CBand,
6777
+ LibAcars,
6683
6778
  Arinc702,
6684
6779
  Label_ColonComma,
6685
6780
  Label_5Z_Slash,