@airframes/acars-decoder 1.6.6 → 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.mjs CHANGED
@@ -16,20 +16,22 @@ var IcaoDecoder = class {
16
16
  var DecoderPlugin = class {
17
17
  decoder;
18
18
  name = "unknown";
19
- defaultResult = {
20
- decoded: false,
21
- decoder: {
22
- name: "unknown",
23
- type: "pattern-match",
24
- decodeLevel: "none"
25
- },
26
- formatted: {
27
- description: "Unknown",
28
- items: []
29
- },
30
- raw: {},
31
- remaining: {}
32
- };
19
+ defaultResult() {
20
+ return {
21
+ decoded: false,
22
+ decoder: {
23
+ name: "unknown",
24
+ type: "pattern-match",
25
+ decodeLevel: "none"
26
+ },
27
+ formatted: {
28
+ description: "Unknown",
29
+ items: []
30
+ },
31
+ raw: {},
32
+ remaining: {}
33
+ };
34
+ }
33
35
  options;
34
36
  constructor(decoder, options = {}) {
35
37
  this.decoder = decoder;
@@ -52,7 +54,7 @@ var DecoderPlugin = class {
52
54
  };
53
55
  }
54
56
  decode(message) {
55
- const decodeResult = this.defaultResult;
57
+ const decodeResult = this.defaultResult();
56
58
  decodeResult.remaining.text = message.text;
57
59
  return decodeResult;
58
60
  }
@@ -92,7 +94,7 @@ var Label_5Z = class extends DecoderPlugin {
92
94
  };
93
95
  }
94
96
  decode(message, options = {}) {
95
- const decodeResult = this.defaultResult;
97
+ const decodeResult = this.defaultResult();
96
98
  decodeResult.decoder.name = this.name;
97
99
  decodeResult.formatted.description = "Airline Designated Downlink";
98
100
  const uaRegex = /^\/(?<type>\w+) (?<remainder>.+)/;
@@ -203,7 +205,7 @@ var Label_12_N_Space = class extends DecoderPlugin {
203
205
  };
204
206
  }
205
207
  decode(message, options = {}) {
206
- const decodeResult = this.defaultResult;
208
+ const decodeResult = this.defaultResult();
207
209
  decodeResult.decoder.name = this.name;
208
210
  decodeResult.formatted.description = "Position Report";
209
211
  decodeResult.message = message;
@@ -256,7 +258,7 @@ var Label_15 = class extends DecoderPlugin {
256
258
  };
257
259
  }
258
260
  decode(message, options = {}) {
259
- const decodeResult = this.defaultResult;
261
+ const decodeResult = this.defaultResult();
260
262
  decodeResult.decoder.name = this.name;
261
263
  decodeResult.formatted.description = "Position Report";
262
264
  const twoZeeRegex = /^\(2(?<between>.+)\(Z$/;
@@ -288,7 +290,7 @@ var Label_15_FST = class extends DecoderPlugin {
288
290
  };
289
291
  }
290
292
  decode(message, options = {}) {
291
- const decodeResult = this.defaultResult;
293
+ const decodeResult = this.defaultResult();
292
294
  decodeResult.decoder.name = this.name;
293
295
  decodeResult.formatted.description = "Position Report";
294
296
  decodeResult.message = message;
@@ -339,7 +341,7 @@ var Label_16_N_Space = class extends DecoderPlugin {
339
341
  };
340
342
  }
341
343
  decode(message, options = {}) {
342
- const decodeResult = this.defaultResult;
344
+ const decodeResult = this.defaultResult();
343
345
  decodeResult.decoder.name = this.name;
344
346
  decodeResult.formatted.description = "Position Report";
345
347
  decodeResult.message = message;
@@ -462,7 +464,7 @@ var Label_1M_Slash = class extends DecoderPlugin {
462
464
  };
463
465
  }
464
466
  decode(message, options = {}) {
465
- const decodeResult = this.defaultResult;
467
+ const decodeResult = this.defaultResult();
466
468
  decodeResult.decoder.name = this.name;
467
469
  decodeResult.formatted.description = "ETA Report";
468
470
  decodeResult.message = message;
@@ -512,7 +514,7 @@ var Label_20_POS = class extends DecoderPlugin {
512
514
  };
513
515
  }
514
516
  decode(message, options = {}) {
515
- const decodeResult = this.defaultResult;
517
+ const decodeResult = this.defaultResult();
516
518
  decodeResult.decoder.name = this.name;
517
519
  decodeResult.formatted.description = "Position Report";
518
520
  decodeResult.message = message;
@@ -566,7 +568,7 @@ var Label_30_Slash_EA = class extends DecoderPlugin {
566
568
  };
567
569
  }
568
570
  decode(message, options = {}) {
569
- const decodeResult = this.defaultResult;
571
+ const decodeResult = this.defaultResult();
570
572
  decodeResult.decoder.name = this.name;
571
573
  decodeResult.formatted.description = "ETA Report";
572
574
  decodeResult.message = message;
@@ -611,7 +613,7 @@ var Label_44_ETA = class extends DecoderPlugin {
611
613
  };
612
614
  }
613
615
  decode(message, options = {}) {
614
- const decodeResult = this.defaultResult;
616
+ const decodeResult = this.defaultResult();
615
617
  decodeResult.decoder.name = this.name;
616
618
  decodeResult.formatted.description = "ETA Report";
617
619
  decodeResult.message = message;
@@ -668,7 +670,7 @@ var Label_44_IN = class extends DecoderPlugin {
668
670
  };
669
671
  }
670
672
  decode(message, options = {}) {
671
- const decodeResult = this.defaultResult;
673
+ const decodeResult = this.defaultResult();
672
674
  decodeResult.decoder.name = this.name;
673
675
  decodeResult.formatted.description = "In Air Report";
674
676
  decodeResult.message = message;
@@ -725,7 +727,7 @@ var Label_44_OFF = class extends DecoderPlugin {
725
727
  };
726
728
  }
727
729
  decode(message, options = {}) {
728
- const decodeResult = this.defaultResult;
730
+ const decodeResult = this.defaultResult();
729
731
  decodeResult.decoder.name = this.name;
730
732
  decodeResult.formatted.description = "Off Runway Report";
731
733
  decodeResult.message = message;
@@ -785,7 +787,7 @@ var Label_44_ON = class extends DecoderPlugin {
785
787
  };
786
788
  }
787
789
  decode(message, options = {}) {
788
- const decodeResult = this.defaultResult;
790
+ const decodeResult = this.defaultResult();
789
791
  decodeResult.decoder.name = this.name;
790
792
  decodeResult.formatted.description = "On Runway Report";
791
793
  decodeResult.message = message;
@@ -842,7 +844,7 @@ var Label_44_POS = class extends DecoderPlugin {
842
844
  };
843
845
  }
844
846
  decode(message, options = {}) {
845
- const decodeResult = this.defaultResult;
847
+ const decodeResult = this.defaultResult();
846
848
  decodeResult.decoder.name = this.name;
847
849
  decodeResult.formatted.description = "Position Report";
848
850
  decodeResult.message = message;
@@ -924,7 +926,7 @@ var Label_80 = class extends DecoderPlugin {
924
926
  };
925
927
  }
926
928
  decode(message, options = {}) {
927
- const decodeResult = this.defaultResult;
929
+ const decodeResult = this.defaultResult();
928
930
  decodeResult.decoder.name = this.name;
929
931
  decodeResult.formatted.description = "Airline Defined Position Report";
930
932
  const parts = message.text.split("\n");
@@ -1102,7 +1104,7 @@ var Label_8E = class extends DecoderPlugin {
1102
1104
  };
1103
1105
  }
1104
1106
  decode(message, options = {}) {
1105
- const decodeResult = this.defaultResult;
1107
+ const decodeResult = this.defaultResult();
1106
1108
  decodeResult.decoder.name = this.name;
1107
1109
  decodeResult.formatted.description = "ETA Report";
1108
1110
  decodeResult.message = message;
@@ -1143,7 +1145,7 @@ var Label_B6_Forwardslash = class extends DecoderPlugin {
1143
1145
  };
1144
1146
  }
1145
1147
  decode(message, options = {}) {
1146
- const decodeResult = this.defaultResult;
1148
+ const decodeResult = this.defaultResult();
1147
1149
  decodeResult.decoder.name = this.name;
1148
1150
  decodeResult.formatted.description = "CPDLC Message";
1149
1151
  decodeResult.message = message;
@@ -1163,7 +1165,7 @@ var Label_ColonComma = class extends DecoderPlugin {
1163
1165
  };
1164
1166
  }
1165
1167
  decode(message, options = {}) {
1166
- const decodeResult = this.defaultResult;
1168
+ const decodeResult = this.defaultResult();
1167
1169
  decodeResult.decoder.name = this.name;
1168
1170
  decodeResult.raw.frequency = Number(message.text) / 1e3;
1169
1171
  decodeResult.formatted.description = "Aircraft Transceiver Frequency Change";
@@ -1250,7 +1252,7 @@ var RouteUtils = class _RouteUtils {
1250
1252
  };
1251
1253
 
1252
1254
  // lib/utils/flight_plan_utils.ts
1253
- var FlightPlanUtils = class {
1255
+ var FlightPlanUtils = class _FlightPlanUtils {
1254
1256
  /**
1255
1257
  * Processes flight plan data
1256
1258
  *
@@ -1261,7 +1263,7 @@ var FlightPlanUtils = class {
1261
1263
  * @returns whether all fields were processed or not
1262
1264
  */
1263
1265
  static processFlightPlan(decodeResult, data) {
1264
- let allKnownFields = parseHeader(decodeResult, data[0]);
1266
+ let allKnownFields = _FlightPlanUtils.parseHeader(decodeResult, data[0]);
1265
1267
  for (let i = 1; i < data.length; i += 2) {
1266
1268
  const key = data[i];
1267
1269
  const value = data[i + 1];
@@ -1301,6 +1303,78 @@ var FlightPlanUtils = class {
1301
1303
  }
1302
1304
  return allKnownFields;
1303
1305
  }
1306
+ static parseHeader(decodeResult, header) {
1307
+ let allKnownFields = true;
1308
+ const fields = header.split("/");
1309
+ allKnownFields = allKnownFields && parseMessageType(decodeResult, fields[0]);
1310
+ for (let i = 1; i < fields.length; ++i) {
1311
+ if (fields[i].startsWith("FN")) {
1312
+ decodeResult.raw.flight_number = fields[i].substring(2);
1313
+ } else if (fields[i].startsWith("SN")) {
1314
+ decodeResult.raw.serial_number = fields[i].substring(2);
1315
+ } else if (fields[i].startsWith("TS")) {
1316
+ const ts = fields[i].substring(2).split(",");
1317
+ let time = DateTimeUtils.convertDateTimeToEpoch(ts[0], ts[1]);
1318
+ if (Number.isNaN(time)) {
1319
+ const date = ts[1].substring(2, 4) + ts[1].substring(0, 2) + ts[1].substring(4, 6);
1320
+ time = DateTimeUtils.convertDateTimeToEpoch(ts[0], date);
1321
+ }
1322
+ decodeResult.raw.message_timestamp = time;
1323
+ } else if (fields[i].startsWith("PS")) {
1324
+ const pos = fields[i].substring(2);
1325
+ allKnownFields == allKnownFields && processPosition(decodeResult, pos);
1326
+ } else if (fields[i].startsWith("DT")) {
1327
+ const icao = fields[i].substring(2);
1328
+ decodeResult.raw.arrival_icao = icao;
1329
+ decodeResult.formatted.items.push({
1330
+ type: "destination",
1331
+ code: "DST",
1332
+ label: "Destination",
1333
+ value: decodeResult.raw.arrival_icao
1334
+ });
1335
+ } else if (fields[i].startsWith("ID")) {
1336
+ const tail = fields[i].substring(2);
1337
+ decodeResult.raw.tail = tail;
1338
+ decodeResult.formatted.items.push({
1339
+ type: "tail",
1340
+ label: "Tail",
1341
+ value: decodeResult.raw.tail
1342
+ });
1343
+ } else if (fields[i].startsWith("RF")) {
1344
+ decodeResult.formatted.items.push({
1345
+ type: "status",
1346
+ code: "ROUTE_STATUS",
1347
+ label: "Route Status",
1348
+ value: "Route Filed"
1349
+ });
1350
+ decodeResult.raw.route_status = "RF";
1351
+ if (fields[i].length > 2) {
1352
+ addRoute(decodeResult, fields[i].substring(2));
1353
+ }
1354
+ } else if (fields[i] == "RP") {
1355
+ decodeResult.raw.route_status = "RP";
1356
+ decodeResult.formatted.items.push({
1357
+ type: "status",
1358
+ code: "ROUTE_STATUS",
1359
+ label: "Route Status",
1360
+ value: "Route Planned"
1361
+ });
1362
+ decodeResult.raw.route_status = fields[i];
1363
+ } else if (fields[i] == "RI") {
1364
+ decodeResult.raw.route_status = "RI";
1365
+ decodeResult.formatted.items.push({
1366
+ type: "status",
1367
+ code: "ROUTE_STATUS",
1368
+ label: "Route Status",
1369
+ value: "Route Inactive"
1370
+ });
1371
+ } else {
1372
+ decodeResult.remaining.text += "/" + fields[i];
1373
+ allKnownFields = false;
1374
+ }
1375
+ }
1376
+ return allKnownFields;
1377
+ }
1304
1378
  };
1305
1379
  function parseMessageType(decodeResult, messageType) {
1306
1380
  let decoded = true;
@@ -1325,70 +1399,6 @@ function parseMessageType(decodeResult, messageType) {
1325
1399
  decodeResult.remaining.text += messageType;
1326
1400
  return false;
1327
1401
  }
1328
- function parseHeader(decodeResult, header) {
1329
- let allKnownFields = true;
1330
- const fields = header.split("/");
1331
- allKnownFields = allKnownFields && parseMessageType(decodeResult, fields[0]);
1332
- for (let i = 1; i < fields.length; ++i) {
1333
- if (fields[i].startsWith("FN")) {
1334
- decodeResult.raw.flight_number = fields[i].substring(2);
1335
- } else if (fields[i].startsWith("SN")) {
1336
- decodeResult.raw.serial_number = fields[i].substring(2);
1337
- } else if (fields[i].startsWith("TS")) {
1338
- const ts = fields[i].substring(2).split(",");
1339
- let time = DateTimeUtils.convertDateTimeToEpoch(ts[0], ts[1]);
1340
- if (Number.isNaN(time)) {
1341
- const date = ts[1].substring(2, 4) + ts[1].substring(0, 2) + ts[1].substring(4, 6);
1342
- time = DateTimeUtils.convertDateTimeToEpoch(ts[0], date);
1343
- }
1344
- decodeResult.raw.message_timestamp = time;
1345
- } else if (fields[i].startsWith("PS")) {
1346
- const pos = fields[i].substring(2);
1347
- allKnownFields == allKnownFields && processPosition(decodeResult, pos);
1348
- } else if (fields[i].startsWith("DT")) {
1349
- const icao = fields[i].substring(2);
1350
- decodeResult.raw.arrival_icao = icao;
1351
- decodeResult.formatted.items.push({
1352
- type: "destination",
1353
- code: "DST",
1354
- label: "Destination",
1355
- value: decodeResult.raw.arrival_icao
1356
- });
1357
- } else if (fields[i].startsWith("RF")) {
1358
- decodeResult.formatted.items.push({
1359
- type: "status",
1360
- code: "ROUTE_STATUS",
1361
- label: "Route Status",
1362
- value: "Route Filed"
1363
- });
1364
- decodeResult.raw.route_status = "RF";
1365
- if (fields[i].length > 2) {
1366
- addRoute(decodeResult, fields[i].substring(2));
1367
- }
1368
- } else if (fields[i] == "RP") {
1369
- decodeResult.raw.route_status = "RP";
1370
- decodeResult.formatted.items.push({
1371
- type: "status",
1372
- code: "ROUTE_STATUS",
1373
- label: "Route Status",
1374
- value: "Route Planned"
1375
- });
1376
- decodeResult.raw.route_status = fields[i];
1377
- } else if (fields[i] == "RI") {
1378
- decodeResult.raw.route_status = "RI";
1379
- decodeResult.formatted.items.push({
1380
- type: "status",
1381
- code: "ROUTE_STATUS",
1382
- label: "Route Status",
1383
- value: "Route Inactive"
1384
- });
1385
- } else {
1386
- decodeResult.remaining.text += "/" + fields[i];
1387
- allKnownFields = false;
1388
- }
1389
- }
1390
- return allKnownFields;
1391
- }
1392
1402
  function processPosition(decodeResult, value) {
1393
1403
  const position = CoordinateUtils.decodeStringCoordinates(value);
1394
1404
  if (position) {
@@ -1504,7 +1514,7 @@ var Label_H1_FPN = class extends DecoderPlugin {
1504
1514
  };
1505
1515
  }
1506
1516
  decode(message, options = {}) {
1507
- let decodeResult = this.defaultResult;
1517
+ let decodeResult = this.defaultResult();
1508
1518
  decodeResult.decoder.name = this.name;
1509
1519
  decodeResult.formatted.description = "Flight Plan";
1510
1520
  decodeResult.message = message;
@@ -1548,7 +1558,7 @@ var Label_H1_OHMA = class extends DecoderPlugin {
1548
1558
  };
1549
1559
  }
1550
1560
  decode(message, options = {}) {
1551
- let decodeResult = this.defaultResult;
1561
+ let decodeResult = this.defaultResult();
1552
1562
  decodeResult.decoder.name = this.name;
1553
1563
  decodeResult.formatted.description = "OHMA Message";
1554
1564
  decodeResult.message = message;
@@ -1595,13 +1605,13 @@ var Label_H1_POS = class extends DecoderPlugin {
1595
1605
  name = "label-h1-pos";
1596
1606
  qualifiers() {
1597
1607
  return {
1598
- labels: ["H1"],
1608
+ labels: ["H1", "4J"],
1599
1609
  preambles: ["POS", "#M1BPOS", "/.POS"]
1600
1610
  //TODO - support data before #
1601
1611
  };
1602
1612
  }
1603
1613
  decode(message, options = {}) {
1604
- let decodeResult = this.defaultResult;
1614
+ let decodeResult = this.defaultResult();
1605
1615
  decodeResult.decoder.name = this.name;
1606
1616
  decodeResult.formatted.description = "Position Report";
1607
1617
  decodeResult.message = message;
@@ -1666,7 +1676,7 @@ var Label_H1_POS = class extends DecoderPlugin {
1666
1676
  decodeResult.decoded = true;
1667
1677
  decodeResult.decoder.decodeLevel = "partial";
1668
1678
  } else if (parts.length === 15) {
1669
- processUnknown(decodeResult, parts[1]);
1679
+ decodeResult.raw.flight_number = parts[1];
1670
1680
  let date = void 0;
1671
1681
  if (parts[2].startsWith("/DC")) {
1672
1682
  date = parts[2].substring(3);
@@ -1836,7 +1846,7 @@ var Label_H1_WRN = class extends DecoderPlugin {
1836
1846
  };
1837
1847
  }
1838
1848
  decode(message, options = {}) {
1839
- let decodeResult = this.defaultResult;
1849
+ let decodeResult = this.defaultResult();
1840
1850
  decodeResult.decoder.name = this.name;
1841
1851
  decodeResult.formatted.description = "Warning Message";
1842
1852
  decodeResult.message = message;
@@ -1891,7 +1901,7 @@ var Label_SQ = class extends DecoderPlugin {
1891
1901
  };
1892
1902
  }
1893
1903
  decode(message, options = {}) {
1894
- const decodeResult = this.defaultResult;
1904
+ const decodeResult = this.defaultResult();
1895
1905
  decodeResult.decoder.name = this.name;
1896
1906
  decodeResult.raw.preamble = message.text.substring(0, 4);
1897
1907
  decodeResult.raw.version = message.text.substring(1, 2);
@@ -1990,7 +2000,7 @@ var Label_QR = class extends DecoderPlugin {
1990
2000
  };
1991
2001
  }
1992
2002
  decode(message, options = {}) {
1993
- const decodeResult = this.defaultResult;
2003
+ const decodeResult = this.defaultResult();
1994
2004
  decodeResult.decoder.name = this.name;
1995
2005
  decodeResult.raw.origin = message.text.substring(0, 4);
1996
2006
  decodeResult.raw.destination = message.text.substring(4, 8);
@@ -2035,7 +2045,7 @@ var Label_QP = class extends DecoderPlugin {
2035
2045
  };
2036
2046
  }
2037
2047
  decode(message, options = {}) {
2038
- const decodeResult = this.defaultResult;
2048
+ const decodeResult = this.defaultResult();
2039
2049
  decodeResult.decoder.name = this.name;
2040
2050
  decodeResult.raw.origin = message.text.substring(0, 4);
2041
2051
  decodeResult.raw.destination = message.text.substring(4, 8);
@@ -2080,7 +2090,7 @@ var Label_QS = class extends DecoderPlugin {
2080
2090
  };
2081
2091
  }
2082
2092
  decode(message, options = {}) {
2083
- const decodeResult = this.defaultResult;
2093
+ const decodeResult = this.defaultResult();
2084
2094
  decodeResult.decoder.name = this.name;
2085
2095
  decodeResult.raw.origin = message.text.substring(0, 4);
2086
2096
  decodeResult.raw.destination = message.text.substring(4, 8);
@@ -2125,7 +2135,7 @@ var Label_QQ = class extends DecoderPlugin {
2125
2135
  };
2126
2136
  }
2127
2137
  decode(message, options = {}) {
2128
- const decodeResult = this.defaultResult;
2138
+ const decodeResult = this.defaultResult();
2129
2139
  decodeResult.decoder.name = this.name;
2130
2140
  decodeResult.raw.origin = message.text.substring(0, 4);
2131
2141
  decodeResult.raw.destination = message.text.substring(4, 8);