@airframes/acars-decoder 1.6.5 → 1.6.7

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
@@ -53,20 +53,22 @@ var IcaoDecoder = class {
53
53
  var DecoderPlugin = class {
54
54
  decoder;
55
55
  name = "unknown";
56
- defaultResult = {
57
- decoded: false,
58
- decoder: {
59
- name: "unknown",
60
- type: "pattern-match",
61
- decodeLevel: "none"
62
- },
63
- formatted: {
64
- description: "Unknown",
65
- items: []
66
- },
67
- raw: {},
68
- remaining: {}
69
- };
56
+ defaultResult() {
57
+ return {
58
+ decoded: false,
59
+ decoder: {
60
+ name: "unknown",
61
+ type: "pattern-match",
62
+ decodeLevel: "none"
63
+ },
64
+ formatted: {
65
+ description: "Unknown",
66
+ items: []
67
+ },
68
+ raw: {},
69
+ remaining: {}
70
+ };
71
+ }
70
72
  options;
71
73
  constructor(decoder, options = {}) {
72
74
  this.decoder = decoder;
@@ -89,7 +91,7 @@ var DecoderPlugin = class {
89
91
  };
90
92
  }
91
93
  decode(message) {
92
- const decodeResult = this.defaultResult;
94
+ const decodeResult = this.defaultResult();
93
95
  decodeResult.remaining.text = message.text;
94
96
  return decodeResult;
95
97
  }
@@ -129,7 +131,7 @@ var Label_5Z = class extends DecoderPlugin {
129
131
  };
130
132
  }
131
133
  decode(message, options = {}) {
132
- const decodeResult = this.defaultResult;
134
+ const decodeResult = this.defaultResult();
133
135
  decodeResult.decoder.name = this.name;
134
136
  decodeResult.formatted.description = "Airline Designated Downlink";
135
137
  const uaRegex = /^\/(?<type>\w+) (?<remainder>.+)/;
@@ -240,7 +242,7 @@ var Label_12_N_Space = class extends DecoderPlugin {
240
242
  };
241
243
  }
242
244
  decode(message, options = {}) {
243
- const decodeResult = this.defaultResult;
245
+ const decodeResult = this.defaultResult();
244
246
  decodeResult.decoder.name = this.name;
245
247
  decodeResult.formatted.description = "Position Report";
246
248
  decodeResult.message = message;
@@ -293,7 +295,7 @@ var Label_15 = class extends DecoderPlugin {
293
295
  };
294
296
  }
295
297
  decode(message, options = {}) {
296
- const decodeResult = this.defaultResult;
298
+ const decodeResult = this.defaultResult();
297
299
  decodeResult.decoder.name = this.name;
298
300
  decodeResult.formatted.description = "Position Report";
299
301
  const twoZeeRegex = /^\(2(?<between>.+)\(Z$/;
@@ -325,7 +327,7 @@ var Label_15_FST = class extends DecoderPlugin {
325
327
  };
326
328
  }
327
329
  decode(message, options = {}) {
328
- const decodeResult = this.defaultResult;
330
+ const decodeResult = this.defaultResult();
329
331
  decodeResult.decoder.name = this.name;
330
332
  decodeResult.formatted.description = "Position Report";
331
333
  decodeResult.message = message;
@@ -376,7 +378,7 @@ var Label_16_N_Space = class extends DecoderPlugin {
376
378
  };
377
379
  }
378
380
  decode(message, options = {}) {
379
- const decodeResult = this.defaultResult;
381
+ const decodeResult = this.defaultResult();
380
382
  decodeResult.decoder.name = this.name;
381
383
  decodeResult.formatted.description = "Position Report";
382
384
  decodeResult.message = message;
@@ -499,7 +501,7 @@ var Label_1M_Slash = class extends DecoderPlugin {
499
501
  };
500
502
  }
501
503
  decode(message, options = {}) {
502
- const decodeResult = this.defaultResult;
504
+ const decodeResult = this.defaultResult();
503
505
  decodeResult.decoder.name = this.name;
504
506
  decodeResult.formatted.description = "ETA Report";
505
507
  decodeResult.message = message;
@@ -549,7 +551,7 @@ var Label_20_POS = class extends DecoderPlugin {
549
551
  };
550
552
  }
551
553
  decode(message, options = {}) {
552
- const decodeResult = this.defaultResult;
554
+ const decodeResult = this.defaultResult();
553
555
  decodeResult.decoder.name = this.name;
554
556
  decodeResult.formatted.description = "Position Report";
555
557
  decodeResult.message = message;
@@ -603,7 +605,7 @@ var Label_30_Slash_EA = class extends DecoderPlugin {
603
605
  };
604
606
  }
605
607
  decode(message, options = {}) {
606
- const decodeResult = this.defaultResult;
608
+ const decodeResult = this.defaultResult();
607
609
  decodeResult.decoder.name = this.name;
608
610
  decodeResult.formatted.description = "ETA Report";
609
611
  decodeResult.message = message;
@@ -648,7 +650,7 @@ var Label_44_ETA = class extends DecoderPlugin {
648
650
  };
649
651
  }
650
652
  decode(message, options = {}) {
651
- const decodeResult = this.defaultResult;
653
+ const decodeResult = this.defaultResult();
652
654
  decodeResult.decoder.name = this.name;
653
655
  decodeResult.formatted.description = "ETA Report";
654
656
  decodeResult.message = message;
@@ -705,7 +707,7 @@ var Label_44_IN = class extends DecoderPlugin {
705
707
  };
706
708
  }
707
709
  decode(message, options = {}) {
708
- const decodeResult = this.defaultResult;
710
+ const decodeResult = this.defaultResult();
709
711
  decodeResult.decoder.name = this.name;
710
712
  decodeResult.formatted.description = "In Air Report";
711
713
  decodeResult.message = message;
@@ -762,7 +764,7 @@ var Label_44_OFF = class extends DecoderPlugin {
762
764
  };
763
765
  }
764
766
  decode(message, options = {}) {
765
- const decodeResult = this.defaultResult;
767
+ const decodeResult = this.defaultResult();
766
768
  decodeResult.decoder.name = this.name;
767
769
  decodeResult.formatted.description = "Off Runway Report";
768
770
  decodeResult.message = message;
@@ -822,7 +824,7 @@ var Label_44_ON = class extends DecoderPlugin {
822
824
  };
823
825
  }
824
826
  decode(message, options = {}) {
825
- const decodeResult = this.defaultResult;
827
+ const decodeResult = this.defaultResult();
826
828
  decodeResult.decoder.name = this.name;
827
829
  decodeResult.formatted.description = "On Runway Report";
828
830
  decodeResult.message = message;
@@ -879,7 +881,7 @@ var Label_44_POS = class extends DecoderPlugin {
879
881
  };
880
882
  }
881
883
  decode(message, options = {}) {
882
- const decodeResult = this.defaultResult;
884
+ const decodeResult = this.defaultResult();
883
885
  decodeResult.decoder.name = this.name;
884
886
  decodeResult.formatted.description = "Position Report";
885
887
  decodeResult.message = message;
@@ -961,7 +963,7 @@ var Label_80 = class extends DecoderPlugin {
961
963
  };
962
964
  }
963
965
  decode(message, options = {}) {
964
- const decodeResult = this.defaultResult;
966
+ const decodeResult = this.defaultResult();
965
967
  decodeResult.decoder.name = this.name;
966
968
  decodeResult.formatted.description = "Airline Defined Position Report";
967
969
  const parts = message.text.split("\n");
@@ -1139,7 +1141,7 @@ var Label_8E = class extends DecoderPlugin {
1139
1141
  };
1140
1142
  }
1141
1143
  decode(message, options = {}) {
1142
- const decodeResult = this.defaultResult;
1144
+ const decodeResult = this.defaultResult();
1143
1145
  decodeResult.decoder.name = this.name;
1144
1146
  decodeResult.formatted.description = "ETA Report";
1145
1147
  decodeResult.message = message;
@@ -1180,7 +1182,7 @@ var Label_B6_Forwardslash = class extends DecoderPlugin {
1180
1182
  };
1181
1183
  }
1182
1184
  decode(message, options = {}) {
1183
- const decodeResult = this.defaultResult;
1185
+ const decodeResult = this.defaultResult();
1184
1186
  decodeResult.decoder.name = this.name;
1185
1187
  decodeResult.formatted.description = "CPDLC Message";
1186
1188
  decodeResult.message = message;
@@ -1200,7 +1202,7 @@ var Label_ColonComma = class extends DecoderPlugin {
1200
1202
  };
1201
1203
  }
1202
1204
  decode(message, options = {}) {
1203
- const decodeResult = this.defaultResult;
1205
+ const decodeResult = this.defaultResult();
1204
1206
  decodeResult.decoder.name = this.name;
1205
1207
  decodeResult.raw.frequency = Number(message.text) / 1e3;
1206
1208
  decodeResult.formatted.description = "Aircraft Transceiver Frequency Change";
@@ -1287,7 +1289,7 @@ var RouteUtils = class _RouteUtils {
1287
1289
  };
1288
1290
 
1289
1291
  // lib/utils/flight_plan_utils.ts
1290
- var FlightPlanUtils = class {
1292
+ var FlightPlanUtils = class _FlightPlanUtils {
1291
1293
  /**
1292
1294
  * Processes flight plan data
1293
1295
  *
@@ -1298,7 +1300,7 @@ var FlightPlanUtils = class {
1298
1300
  * @returns whether all fields were processed or not
1299
1301
  */
1300
1302
  static processFlightPlan(decodeResult, data) {
1301
- let allKnownFields = parseHeader(decodeResult, data[0]);
1303
+ let allKnownFields = _FlightPlanUtils.parseHeader(decodeResult, data[0]);
1302
1304
  for (let i = 1; i < data.length; i += 2) {
1303
1305
  const key = data[i];
1304
1306
  const value = data[i + 1];
@@ -1338,6 +1340,78 @@ var FlightPlanUtils = class {
1338
1340
  }
1339
1341
  return allKnownFields;
1340
1342
  }
1343
+ static parseHeader(decodeResult, header) {
1344
+ let allKnownFields = true;
1345
+ const fields = header.split("/");
1346
+ allKnownFields = allKnownFields && parseMessageType(decodeResult, fields[0]);
1347
+ for (let i = 1; i < fields.length; ++i) {
1348
+ if (fields[i].startsWith("FN")) {
1349
+ decodeResult.raw.flight_number = fields[i].substring(2);
1350
+ } else if (fields[i].startsWith("SN")) {
1351
+ decodeResult.raw.serial_number = fields[i].substring(2);
1352
+ } else if (fields[i].startsWith("TS")) {
1353
+ const ts = fields[i].substring(2).split(",");
1354
+ let time = DateTimeUtils.convertDateTimeToEpoch(ts[0], ts[1]);
1355
+ if (Number.isNaN(time)) {
1356
+ const date = ts[1].substring(2, 4) + ts[1].substring(0, 2) + ts[1].substring(4, 6);
1357
+ time = DateTimeUtils.convertDateTimeToEpoch(ts[0], date);
1358
+ }
1359
+ decodeResult.raw.message_timestamp = time;
1360
+ } else if (fields[i].startsWith("PS")) {
1361
+ const pos = fields[i].substring(2);
1362
+ allKnownFields == allKnownFields && processPosition(decodeResult, pos);
1363
+ } else if (fields[i].startsWith("DT")) {
1364
+ const icao = fields[i].substring(2);
1365
+ decodeResult.raw.arrival_icao = icao;
1366
+ decodeResult.formatted.items.push({
1367
+ type: "destination",
1368
+ code: "DST",
1369
+ label: "Destination",
1370
+ value: decodeResult.raw.arrival_icao
1371
+ });
1372
+ } else if (fields[i].startsWith("ID")) {
1373
+ const tail = fields[i].substring(2);
1374
+ decodeResult.raw.tail = tail;
1375
+ decodeResult.formatted.items.push({
1376
+ type: "tail",
1377
+ label: "Tail",
1378
+ value: decodeResult.raw.tail
1379
+ });
1380
+ } else if (fields[i].startsWith("RF")) {
1381
+ decodeResult.formatted.items.push({
1382
+ type: "status",
1383
+ code: "ROUTE_STATUS",
1384
+ label: "Route Status",
1385
+ value: "Route Filed"
1386
+ });
1387
+ decodeResult.raw.route_status = "RF";
1388
+ if (fields[i].length > 2) {
1389
+ addRoute(decodeResult, fields[i].substring(2));
1390
+ }
1391
+ } else if (fields[i] == "RP") {
1392
+ decodeResult.raw.route_status = "RP";
1393
+ decodeResult.formatted.items.push({
1394
+ type: "status",
1395
+ code: "ROUTE_STATUS",
1396
+ label: "Route Status",
1397
+ value: "Route Planned"
1398
+ });
1399
+ decodeResult.raw.route_status = fields[i];
1400
+ } else if (fields[i] == "RI") {
1401
+ decodeResult.raw.route_status = "RI";
1402
+ decodeResult.formatted.items.push({
1403
+ type: "status",
1404
+ code: "ROUTE_STATUS",
1405
+ label: "Route Status",
1406
+ value: "Route Inactive"
1407
+ });
1408
+ } else {
1409
+ decodeResult.remaining.text += "/" + fields[i];
1410
+ allKnownFields = false;
1411
+ }
1412
+ }
1413
+ return allKnownFields;
1414
+ }
1341
1415
  };
1342
1416
  function parseMessageType(decodeResult, messageType) {
1343
1417
  let decoded = true;
@@ -1362,70 +1436,6 @@ function parseMessageType(decodeResult, messageType) {
1362
1436
  decodeResult.remaining.text += messageType;
1363
1437
  return false;
1364
1438
  }
1365
- function parseHeader(decodeResult, header) {
1366
- let allKnownFields = true;
1367
- const fields = header.split("/");
1368
- allKnownFields = allKnownFields && parseMessageType(decodeResult, fields[0]);
1369
- for (let i = 1; i < fields.length; ++i) {
1370
- if (fields[i].startsWith("FN")) {
1371
- decodeResult.raw.flight_number = fields[i].substring(2);
1372
- } else if (fields[i].startsWith("SN")) {
1373
- decodeResult.raw.serial_number = fields[i].substring(2);
1374
- } else if (fields[i].startsWith("TS")) {
1375
- const ts = fields[i].substring(2).split(",");
1376
- let time = DateTimeUtils.convertDateTimeToEpoch(ts[0], ts[1]);
1377
- if (Number.isNaN(time)) {
1378
- const date = ts[1].substring(2, 4) + ts[1].substring(0, 2) + ts[1].substring(4, 6);
1379
- time = DateTimeUtils.convertDateTimeToEpoch(ts[0], date);
1380
- }
1381
- decodeResult.raw.message_timestamp = time;
1382
- } else if (fields[i].startsWith("PS")) {
1383
- const pos = fields[i].substring(2);
1384
- allKnownFields == allKnownFields && processPosition(decodeResult, pos);
1385
- } else if (fields[i].startsWith("DT")) {
1386
- const icao = fields[i].substring(2);
1387
- decodeResult.raw.arrival_icao = icao;
1388
- decodeResult.formatted.items.push({
1389
- type: "destination",
1390
- code: "DST",
1391
- label: "Destination",
1392
- value: decodeResult.raw.arrival_icao
1393
- });
1394
- } else if (fields[i].startsWith("RF")) {
1395
- decodeResult.formatted.items.push({
1396
- type: "status",
1397
- code: "ROUTE_STATUS",
1398
- label: "Route Status",
1399
- value: "Route Filed"
1400
- });
1401
- decodeResult.raw.route_status = "RF";
1402
- if (fields[i].length > 2) {
1403
- addRoute(decodeResult, fields[i].substring(2));
1404
- }
1405
- } else if (fields[i] == "RP") {
1406
- decodeResult.raw.route_status = "RP";
1407
- decodeResult.formatted.items.push({
1408
- type: "status",
1409
- code: "ROUTE_STATUS",
1410
- label: "Route Status",
1411
- value: "Route Planned"
1412
- });
1413
- decodeResult.raw.route_status = fields[i];
1414
- } else if (fields[i] == "RI") {
1415
- decodeResult.raw.route_status = "RI";
1416
- decodeResult.formatted.items.push({
1417
- type: "status",
1418
- code: "ROUTE_STATUS",
1419
- label: "Route Status",
1420
- value: "Route Inactive"
1421
- });
1422
- } else {
1423
- decodeResult.remaining.text += "/" + fields[i];
1424
- allKnownFields = false;
1425
- }
1426
- }
1427
- return allKnownFields;
1428
- }
1429
1439
  function processPosition(decodeResult, value) {
1430
1440
  const position = CoordinateUtils.decodeStringCoordinates(value);
1431
1441
  if (position) {
@@ -1541,7 +1551,7 @@ var Label_H1_FPN = class extends DecoderPlugin {
1541
1551
  };
1542
1552
  }
1543
1553
  decode(message, options = {}) {
1544
- let decodeResult = this.defaultResult;
1554
+ let decodeResult = this.defaultResult();
1545
1555
  decodeResult.decoder.name = this.name;
1546
1556
  decodeResult.formatted.description = "Flight Plan";
1547
1557
  decodeResult.message = message;
@@ -1585,7 +1595,7 @@ var Label_H1_OHMA = class extends DecoderPlugin {
1585
1595
  };
1586
1596
  }
1587
1597
  decode(message, options = {}) {
1588
- let decodeResult = this.defaultResult;
1598
+ let decodeResult = this.defaultResult();
1589
1599
  decodeResult.decoder.name = this.name;
1590
1600
  decodeResult.formatted.description = "OHMA Message";
1591
1601
  decodeResult.message = message;
@@ -1632,13 +1642,13 @@ var Label_H1_POS = class extends DecoderPlugin {
1632
1642
  name = "label-h1-pos";
1633
1643
  qualifiers() {
1634
1644
  return {
1635
- labels: ["H1"],
1645
+ labels: ["H1", "4J"],
1636
1646
  preambles: ["POS", "#M1BPOS", "/.POS"]
1637
1647
  //TODO - support data before #
1638
1648
  };
1639
1649
  }
1640
1650
  decode(message, options = {}) {
1641
- let decodeResult = this.defaultResult;
1651
+ let decodeResult = this.defaultResult();
1642
1652
  decodeResult.decoder.name = this.name;
1643
1653
  decodeResult.formatted.description = "Position Report";
1644
1654
  decodeResult.message = message;
@@ -1703,7 +1713,7 @@ var Label_H1_POS = class extends DecoderPlugin {
1703
1713
  decodeResult.decoded = true;
1704
1714
  decodeResult.decoder.decodeLevel = "partial";
1705
1715
  } else if (parts.length === 15) {
1706
- processUnknown(decodeResult, parts[1]);
1716
+ decodeResult.raw.flight_number = parts[1];
1707
1717
  let date = void 0;
1708
1718
  if (parts[2].startsWith("/DC")) {
1709
1719
  date = parts[2].substring(3);
@@ -1873,7 +1883,7 @@ var Label_H1_WRN = class extends DecoderPlugin {
1873
1883
  };
1874
1884
  }
1875
1885
  decode(message, options = {}) {
1876
- let decodeResult = this.defaultResult;
1886
+ let decodeResult = this.defaultResult();
1877
1887
  decodeResult.decoder.name = this.name;
1878
1888
  decodeResult.formatted.description = "Warning Message";
1879
1889
  decodeResult.message = message;
@@ -1928,7 +1938,7 @@ var Label_SQ = class extends DecoderPlugin {
1928
1938
  };
1929
1939
  }
1930
1940
  decode(message, options = {}) {
1931
- const decodeResult = this.defaultResult;
1941
+ const decodeResult = this.defaultResult();
1932
1942
  decodeResult.decoder.name = this.name;
1933
1943
  decodeResult.raw.preamble = message.text.substring(0, 4);
1934
1944
  decodeResult.raw.version = message.text.substring(1, 2);
@@ -2027,7 +2037,7 @@ var Label_QR = class extends DecoderPlugin {
2027
2037
  };
2028
2038
  }
2029
2039
  decode(message, options = {}) {
2030
- const decodeResult = this.defaultResult;
2040
+ const decodeResult = this.defaultResult();
2031
2041
  decodeResult.decoder.name = this.name;
2032
2042
  decodeResult.raw.origin = message.text.substring(0, 4);
2033
2043
  decodeResult.raw.destination = message.text.substring(4, 8);
@@ -2072,7 +2082,7 @@ var Label_QP = class extends DecoderPlugin {
2072
2082
  };
2073
2083
  }
2074
2084
  decode(message, options = {}) {
2075
- const decodeResult = this.defaultResult;
2085
+ const decodeResult = this.defaultResult();
2076
2086
  decodeResult.decoder.name = this.name;
2077
2087
  decodeResult.raw.origin = message.text.substring(0, 4);
2078
2088
  decodeResult.raw.destination = message.text.substring(4, 8);
@@ -2117,7 +2127,7 @@ var Label_QS = class extends DecoderPlugin {
2117
2127
  };
2118
2128
  }
2119
2129
  decode(message, options = {}) {
2120
- const decodeResult = this.defaultResult;
2130
+ const decodeResult = this.defaultResult();
2121
2131
  decodeResult.decoder.name = this.name;
2122
2132
  decodeResult.raw.origin = message.text.substring(0, 4);
2123
2133
  decodeResult.raw.destination = message.text.substring(4, 8);
@@ -2162,7 +2172,7 @@ var Label_QQ = class extends DecoderPlugin {
2162
2172
  };
2163
2173
  }
2164
2174
  decode(message, options = {}) {
2165
- const decodeResult = this.defaultResult;
2175
+ const decodeResult = this.defaultResult();
2166
2176
  decodeResult.decoder.name = this.name;
2167
2177
  decodeResult.raw.origin = message.text.substring(0, 4);
2168
2178
  decodeResult.raw.destination = message.text.substring(4, 8);