@airframes/acars-decoder 1.4.7 → 1.6.1

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.
Files changed (135) hide show
  1. package/README.md +40 -1
  2. package/dist/index.d.mts +2 -0
  3. package/dist/index.d.ts +2 -4
  4. package/dist/index.js +2869 -19
  5. package/dist/index.js.map +1 -0
  6. package/dist/index.mjs +2832 -0
  7. package/dist/index.mjs.map +1 -0
  8. package/package.json +15 -18
  9. package/.github/FUNDING.yml +0 -12
  10. package/.github/workflows/yarn-test.yml +0 -21
  11. package/SECURITY.md +0 -18
  12. package/babel.config.js +0 -6
  13. package/coverage/clover.xml +0 -1799
  14. package/coverage/coverage-final.json +0 -24
  15. package/coverage/lcov-report/base.css +0 -224
  16. package/coverage/lcov-report/block-navigation.js +0 -87
  17. package/coverage/lcov-report/favicon.png +0 -0
  18. package/coverage/lcov-report/index.html +0 -131
  19. package/coverage/lcov-report/prettify.css +0 -1
  20. package/coverage/lcov-report/prettify.js +0 -2
  21. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  22. package/coverage/lcov-report/sorter.js +0 -196
  23. package/coverage/lcov.info +0 -2278
  24. package/dist/DateTimeUtils.d.ts +0 -8
  25. package/dist/DateTimeUtils.js +0 -27
  26. package/dist/DecoderPlugin.d.ts +0 -18
  27. package/dist/DecoderPlugin.js +0 -71
  28. package/dist/DecoderPluginInterface.d.ts +0 -7
  29. package/dist/DecoderPluginInterface.js +0 -3
  30. package/dist/IcaoDecoder.d.ts +0 -10
  31. package/dist/IcaoDecoder.js +0 -111
  32. package/dist/MessageDecoder.d.ts +0 -14
  33. package/dist/MessageDecoder.js +0 -129
  34. package/dist/bin/acars-decoder-test.d.ts +0 -2
  35. package/dist/bin/acars-decoder-test.js +0 -53
  36. package/dist/bin/acars-decoder.d.ts +0 -2
  37. package/dist/bin/acars-decoder.js +0 -20
  38. package/dist/plugins/Label_15.d.ts +0 -11
  39. package/dist/plugins/Label_15.js +0 -40
  40. package/dist/plugins/Label_16_N_Space.d.ts +0 -11
  41. package/dist/plugins/Label_16_N_Space.js +0 -80
  42. package/dist/plugins/Label_16_N_Space.test.d.ts +0 -1
  43. package/dist/plugins/Label_16_N_Space.test.js +0 -84
  44. package/dist/plugins/Label_1M_Slash.d.ts +0 -11
  45. package/dist/plugins/Label_1M_Slash.js +0 -61
  46. package/dist/plugins/Label_1M_Slash.test.d.ts +0 -1
  47. package/dist/plugins/Label_1M_Slash.test.js +0 -43
  48. package/dist/plugins/Label_20_CFB.01.d.ts +0 -11
  49. package/dist/plugins/Label_20_CFB.01.js +0 -69
  50. package/dist/plugins/Label_20_POS.d.ts +0 -11
  51. package/dist/plugins/Label_20_POS.js +0 -62
  52. package/dist/plugins/Label_30_Slash_EA.d.ts +0 -11
  53. package/dist/plugins/Label_30_Slash_EA.js +0 -54
  54. package/dist/plugins/Label_30_Slash_EA.test.d.ts +0 -1
  55. package/dist/plugins/Label_30_Slash_EA.test.js +0 -35
  56. package/dist/plugins/Label_44_ETA.d.ts +0 -11
  57. package/dist/plugins/Label_44_ETA.js +0 -69
  58. package/dist/plugins/Label_44_IN.d.ts +0 -11
  59. package/dist/plugins/Label_44_IN.js +0 -69
  60. package/dist/plugins/Label_44_OFF.d.ts +0 -11
  61. package/dist/plugins/Label_44_OFF.js +0 -74
  62. package/dist/plugins/Label_44_ON.d.ts +0 -11
  63. package/dist/plugins/Label_44_ON.js +0 -69
  64. package/dist/plugins/Label_44_POS.d.ts +0 -11
  65. package/dist/plugins/Label_44_POS.js +0 -81
  66. package/dist/plugins/Label_5Z.d.ts +0 -11
  67. package/dist/plugins/Label_5Z.js +0 -120
  68. package/dist/plugins/Label_80.d.ts +0 -12
  69. package/dist/plugins/Label_80.js +0 -203
  70. package/dist/plugins/Label_8E.d.ts +0 -10
  71. package/dist/plugins/Label_8E.js +0 -48
  72. package/dist/plugins/Label_8E.test.d.ts +0 -1
  73. package/dist/plugins/Label_8E.test.js +0 -32
  74. package/dist/plugins/Label_B6.d.ts +0 -11
  75. package/dist/plugins/Label_B6.js +0 -26
  76. package/dist/plugins/Label_ColonComma.d.ts +0 -10
  77. package/dist/plugins/Label_ColonComma.js +0 -28
  78. package/dist/plugins/Label_H1.d.ts +0 -9
  79. package/dist/plugins/Label_H1.js +0 -18
  80. package/dist/plugins/Label_H1_M1BPOS.d.ts +0 -11
  81. package/dist/plugins/Label_H1_M1BPOS.js +0 -54
  82. package/dist/plugins/Label_H1_M1BPRG.d.ts +0 -11
  83. package/dist/plugins/Label_H1_M1BPRG.js +0 -36
  84. package/dist/plugins/Label_QP.d.ts +0 -10
  85. package/dist/plugins/Label_QP.js +0 -49
  86. package/dist/plugins/Label_QQ.d.ts +0 -10
  87. package/dist/plugins/Label_QQ.js +0 -49
  88. package/dist/plugins/Label_QR.d.ts +0 -10
  89. package/dist/plugins/Label_QR.js +0 -49
  90. package/dist/plugins/Label_QS.d.ts +0 -10
  91. package/dist/plugins/Label_QS.js +0 -49
  92. package/dist/plugins/Label_SQ.d.ts +0 -10
  93. package/dist/plugins/Label_SQ.js +0 -104
  94. package/dist/plugins/official.d.ts +0 -22
  95. package/dist/plugins/official.js +0 -38
  96. package/jest.config.ts +0 -195
  97. package/src/DateTimeUtils.ts +0 -26
  98. package/src/DecoderPlugin.ts +0 -83
  99. package/src/DecoderPluginInterface.ts +0 -9
  100. package/src/IcaoDecoder.ts +0 -137
  101. package/src/MessageDecoder.ts +0 -117
  102. package/src/bin/acars-decoder-test.ts +0 -67
  103. package/src/bin/acars-decoder.ts +0 -23
  104. package/src/index.d.ts +0 -15
  105. package/src/index.ts +0 -4
  106. package/src/plugins/Label_15.ts +0 -45
  107. package/src/plugins/Label_16_N_Space.test.ts +0 -94
  108. package/src/plugins/Label_16_N_Space.ts +0 -91
  109. package/src/plugins/Label_1M_Slash.test.ts +0 -45
  110. package/src/plugins/Label_1M_Slash.ts +0 -69
  111. package/src/plugins/Label_20_CFB.01.ts +0 -81
  112. package/src/plugins/Label_20_POS.ts +0 -68
  113. package/src/plugins/Label_30_Slash_EA.test.ts +0 -37
  114. package/src/plugins/Label_30_Slash_EA.ts +0 -60
  115. package/src/plugins/Label_44_ETA.ts +0 -81
  116. package/src/plugins/Label_44_IN.ts +0 -81
  117. package/src/plugins/Label_44_OFF.ts +0 -88
  118. package/src/plugins/Label_44_ON.ts +0 -81
  119. package/src/plugins/Label_44_POS.ts +0 -96
  120. package/src/plugins/Label_5Z.ts +0 -125
  121. package/src/plugins/Label_80.ts +0 -215
  122. package/src/plugins/Label_8E.test.ts +0 -34
  123. package/src/plugins/Label_8E.ts +0 -55
  124. package/src/plugins/Label_B6.ts +0 -28
  125. package/src/plugins/Label_ColonComma.ts +0 -32
  126. package/src/plugins/Label_H1.ts +0 -18
  127. package/src/plugins/Label_H1_M1BPOS.ts +0 -60
  128. package/src/plugins/Label_H1_M1BPRG.ts +0 -40
  129. package/src/plugins/Label_QP.ts +0 -54
  130. package/src/plugins/Label_QQ.ts +0 -54
  131. package/src/plugins/Label_QR.ts +0 -54
  132. package/src/plugins/Label_QS.ts +0 -54
  133. package/src/plugins/Label_SQ.ts +0 -111
  134. package/src/plugins/official.ts +0 -22
  135. package/tsconfig.json +0 -16
@@ -1,74 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Label_44_OFF = void 0;
4
- const DecoderPlugin_1 = require("../DecoderPlugin");
5
- // Off Runway Report
6
- class Label_44_OFF extends DecoderPlugin_1.DecoderPlugin {
7
- name = 'label-44-off';
8
- qualifiers() {
9
- return {
10
- labels: ['44'],
11
- preambles: ['00OFF01', '00OFF02', '00OFF03', 'OFF01', 'OFF02', 'OFF03'],
12
- };
13
- }
14
- decode(message, options = {}) {
15
- const decodeResult = this.defaultResult;
16
- decodeResult.decoder.name = this.name;
17
- decodeResult.formatted.description = 'Off Runway Report';
18
- decodeResult.message = message;
19
- // Style: OFF02,N38334W121176,KMHR,KPDX,0807,0014,0123,004.9
20
- // Match: OFF02,coords,departure_icao,arrival_icao,current_date,current_time,eta_time,fuel_in_tons
21
- const regex = /^ON02,(?<unsplit_coords>.*),(?<departure_icao>.*),(?<arrival_icao>.*),(?<current_date>.*),(?<current_time>.*),(?<eta_time>.*),(?<fuel_in_tons>.*)$/;
22
- const results = message.text.match(regex);
23
- if (results) {
24
- if (options.debug) {
25
- console.log(`Label 44 Off Runway Report: groups`);
26
- console.log(results.groups);
27
- }
28
- const coordsRegex = /(?<lac>[NS])(?<la>.+)\s*(?<lnc>[EW])(?<ln>.+)/;
29
- const coordsResults = results.groups.unsplit_coords.match(coordsRegex);
30
- decodeResult.raw.latitude_direction = coordsResults.groups.lac;
31
- decodeResult.raw.latitude = Number(coordsResults.groups.la) / 1000;
32
- decodeResult.raw.longitude_direction = coordsResults.groups.lnc;
33
- decodeResult.raw.longitude = Number(coordsResults.groups.ln) / 1000;
34
- decodeResult.raw.departure_icao = results.groups.departure_icao;
35
- decodeResult.raw.arrival_icao = results.groups.arrival_icao;
36
- decodeResult.raw.current_time = Date.parse(new Date().getFullYear() + "-" +
37
- results.groups.current_date.substr(0, 2) + "-" +
38
- results.groups.current_date.substr(2, 2) + "T" +
39
- results.groups.current_time.substr(0, 2) + ":" +
40
- results.groups.current_time.substr(2, 2) + ":00Z");
41
- decodeResult.raw.eta_time = Date.parse(new Date().getFullYear() + "-" +
42
- results.groups.current_date.substr(0, 2) + "-" +
43
- results.groups.current_date.substr(2, 2) + "T" +
44
- results.groups.eta_time.substr(0, 2) + ":" +
45
- results.groups.eta_time.substr(2, 2) + ":00Z");
46
- if (results.groups.fuel_in_tons != '***' && results.groups.fuel_in_tons != '****') {
47
- decodeResult.raw.fuel_in_tons = Number(results.groups.fuel_in_tons);
48
- }
49
- decodeResult.formatted.items.push({
50
- type: 'aircraft_position',
51
- code: 'POS',
52
- label: 'Aircraft Position',
53
- value: `${decodeResult.raw.latitude} ${decodeResult.raw.latitude_direction}, ${decodeResult.raw.longitude} ${decodeResult.raw.longitude_direction}`,
54
- });
55
- decodeResult.formatted.items.push({
56
- type: 'origin',
57
- code: 'ORG',
58
- label: 'Origin',
59
- value: decodeResult.raw.departure_icao,
60
- });
61
- decodeResult.formatted.items.push({
62
- type: 'destination',
63
- code: 'DST',
64
- label: 'Destination',
65
- value: decodeResult.raw.arrival_icao,
66
- });
67
- }
68
- decodeResult.decoded = true;
69
- decodeResult.decoder.decodeLevel = 'full';
70
- return decodeResult;
71
- }
72
- }
73
- exports.Label_44_OFF = Label_44_OFF;
74
- exports.default = {};
@@ -1,11 +0,0 @@
1
- import { DecoderPlugin } from '../DecoderPlugin';
2
- export declare class Label_44_ON extends DecoderPlugin {
3
- name: string;
4
- qualifiers(): {
5
- labels: string[];
6
- preambles: string[];
7
- };
8
- decode(message: any, options?: any): any;
9
- }
10
- declare const _default: {};
11
- export default _default;
@@ -1,69 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Label_44_ON = void 0;
4
- const DecoderPlugin_1 = require("../DecoderPlugin");
5
- // On Runway Report
6
- class Label_44_ON extends DecoderPlugin_1.DecoderPlugin {
7
- name = 'label-44-on';
8
- qualifiers() {
9
- return {
10
- labels: ['44'],
11
- preambles: ['00ON01', '00ON02', '00ON03', 'ON01', 'ON02', 'ON03'],
12
- };
13
- }
14
- decode(message, options = {}) {
15
- const decodeResult = this.defaultResult;
16
- decodeResult.decoder.name = this.name;
17
- decodeResult.formatted.description = 'On Runway Report';
18
- decodeResult.message = message;
19
- // Style: ON02,N38333W121178,KRNO,KMHR,0806,2350,005.2
20
- // Match: ON02,coords,departure_icao,arrival_icao,current_date,current_time,fuel_in_tons
21
- const regex = /^ON02,(?<unsplit_coords>.*),(?<departure_icao>.*),(?<arrival_icao>.*),(?<current_date>.*),(?<current_time>.*),(?<fuel_in_tons>.*)$/;
22
- const results = message.text.match(regex);
23
- if (results) {
24
- if (options.debug) {
25
- console.log(`Label 44 On Runway Report: groups`);
26
- console.log(results.groups);
27
- }
28
- const coordsRegex = /(?<lac>[NS])(?<la>.+)\s*(?<lnc>[EW])(?<ln>.+)/;
29
- const coordsResults = results.groups.unsplit_coords.match(coordsRegex);
30
- decodeResult.raw.latitude_direction = coordsResults.groups.lac;
31
- decodeResult.raw.latitude = Number(coordsResults.groups.la) / 1000;
32
- decodeResult.raw.longitude_direction = coordsResults.groups.lnc;
33
- decodeResult.raw.longitude = Number(coordsResults.groups.ln) / 1000;
34
- decodeResult.raw.departure_icao = results.groups.departure_icao;
35
- decodeResult.raw.arrival_icao = results.groups.arrival_icao;
36
- decodeResult.raw.current_time = Date.parse(new Date().getFullYear() + "-" +
37
- results.groups.current_date.substr(0, 2) + "-" +
38
- results.groups.current_date.substr(2, 2) + "T" +
39
- results.groups.current_time.substr(0, 2) + ":" +
40
- results.groups.current_time.substr(2, 2) + ":00Z");
41
- if (results.groups.fuel_in_tons != '***' && results.groups.fuel_in_tons != '****') {
42
- decodeResult.raw.fuel_in_tons = Number(results.groups.fuel_in_tons);
43
- }
44
- decodeResult.formatted.items.push({
45
- type: 'aircraft_position',
46
- code: 'POS',
47
- label: 'Aircraft Position',
48
- value: `${decodeResult.raw.latitude} ${decodeResult.raw.latitude_direction}, ${decodeResult.raw.longitude} ${decodeResult.raw.longitude_direction}`,
49
- });
50
- decodeResult.formatted.items.push({
51
- type: 'origin',
52
- code: 'ORG',
53
- label: 'Origin',
54
- value: decodeResult.raw.departure_icao,
55
- });
56
- decodeResult.formatted.items.push({
57
- type: 'destination',
58
- code: 'DST',
59
- label: 'Destination',
60
- value: decodeResult.raw.arrival_icao,
61
- });
62
- }
63
- decodeResult.decoded = true;
64
- decodeResult.decoder.decodeLevel = 'full';
65
- return decodeResult;
66
- }
67
- }
68
- exports.Label_44_ON = Label_44_ON;
69
- exports.default = {};
@@ -1,11 +0,0 @@
1
- import { DecoderPlugin } from '../DecoderPlugin';
2
- export declare class Label_44_POS extends DecoderPlugin {
3
- name: string;
4
- qualifiers(): {
5
- labels: string[];
6
- preambles: string[];
7
- };
8
- decode(message: any, options?: any): any;
9
- }
10
- declare const _default: {};
11
- export default _default;
@@ -1,81 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Label_44_POS = void 0;
4
- const DecoderPlugin_1 = require("../DecoderPlugin");
5
- // General Aviation Position Report
6
- class Label_44_POS extends DecoderPlugin_1.DecoderPlugin {
7
- name = 'label-44-pos';
8
- qualifiers() {
9
- return {
10
- labels: ['44'],
11
- preambles: ['00POS01', '00POS02', '00POS03', 'POS01', 'POS02', 'POS03'],
12
- };
13
- }
14
- decode(message, options = {}) {
15
- const decodeResult = this.defaultResult;
16
- decodeResult.decoder.name = this.name;
17
- decodeResult.formatted.description = 'Position Report';
18
- decodeResult.message = message;
19
- // Style: POS02,N38338W121179,GRD,KMHR,KPDX,0807,0003,0112,005.1
20
- // Match: POS02,coords,flight_level_or_ground,departure_icao,arrival_icao,current_date,current_time,eta_time,unknown
21
- const regex = /^POS02,(?<unsplit_coords>.*),(?<flight_level_or_ground>.*),(?<departure_icao>.*),(?<arrival_icao>.*),(?<current_date>.*),(?<current_time>.*),(?<eta_time>.*),(?<fuel_in_tons>.*)$/;
22
- const results = message.text.match(regex);
23
- if (results) {
24
- if (options.debug) {
25
- console.log(`Label 44 Position Report: groups`);
26
- console.log(results.groups);
27
- }
28
- const coordsRegex = /(?<lac>[NS])(?<la>.+)\s*(?<lnc>[EW])(?<ln>.+)/;
29
- const coordsResults = results.groups.unsplit_coords.match(coordsRegex);
30
- decodeResult.raw.latitude_direction = coordsResults.groups.lac;
31
- decodeResult.raw.latitude = Number(coordsResults.groups.la) / 1000;
32
- decodeResult.raw.longitude_direction = coordsResults.groups.lnc;
33
- decodeResult.raw.longitude = Number(coordsResults.groups.ln) / 1000;
34
- decodeResult.raw.flight_level = results.groups.flight_level_or_ground == 'GRD' || results.groups.flight_level_or_ground == '***' ? '0' : Number(results.groups.flight_level_or_ground);
35
- decodeResult.raw.departure_icao = results.groups.departure_icao;
36
- decodeResult.raw.arrival_icao = results.groups.arrival_icao;
37
- decodeResult.raw.current_time = Date.parse(new Date().getFullYear() + "-" +
38
- results.groups.current_date.substr(0, 2) + "-" +
39
- results.groups.current_date.substr(2, 2) + "T" +
40
- results.groups.current_time.substr(0, 2) + ":" +
41
- results.groups.current_time.substr(2, 2) + ":00Z");
42
- decodeResult.raw.eta_time = Date.parse(new Date().getFullYear() + "-" +
43
- results.groups.current_date.substr(0, 2) + "-" +
44
- results.groups.current_date.substr(2, 2) + "T" +
45
- results.groups.eta_time.substr(0, 2) + ":" +
46
- results.groups.eta_time.substr(2, 2) + ":00Z");
47
- if (results.groups.fuel_in_tons != '***' && results.groups.fuel_in_tons != '****') {
48
- decodeResult.raw.fuel_in_tons = Number(results.groups.fuel_in_tons);
49
- }
50
- decodeResult.formatted.items.push({
51
- type: 'aircraft_position',
52
- code: 'POS',
53
- label: 'Aircraft Position',
54
- value: `${decodeResult.raw.latitude} ${decodeResult.raw.latitude_direction}, ${decodeResult.raw.longitude} ${decodeResult.raw.longitude_direction}`,
55
- });
56
- decodeResult.formatted.items.push({
57
- type: 'origin',
58
- code: 'ORG',
59
- label: 'Origin',
60
- value: decodeResult.raw.departure_icao,
61
- });
62
- decodeResult.formatted.items.push({
63
- type: 'destination',
64
- code: 'DST',
65
- label: 'Destination',
66
- value: decodeResult.raw.arrival_icao,
67
- });
68
- decodeResult.formatted.items.push({
69
- type: 'flight_level',
70
- code: 'FL',
71
- label: 'Flight Level',
72
- value: decodeResult.raw.flight_level,
73
- });
74
- }
75
- decodeResult.decoded = true;
76
- decodeResult.decoder.decodeLevel = 'full';
77
- return decodeResult;
78
- }
79
- }
80
- exports.Label_44_POS = Label_44_POS;
81
- exports.default = {};
@@ -1,11 +0,0 @@
1
- import { DecoderPlugin } from '../DecoderPlugin';
2
- export declare class Label_5Z extends DecoderPlugin {
3
- name: string;
4
- descriptions: any;
5
- qualifiers(): {
6
- labels: string[];
7
- };
8
- decode(message: any, options?: any): any;
9
- }
10
- declare const _default: {};
11
- export default _default;
@@ -1,120 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Label_5Z = void 0;
4
- const DecoderPlugin_1 = require("../DecoderPlugin");
5
- class Label_5Z extends DecoderPlugin_1.DecoderPlugin {
6
- name = 'label-5z';
7
- descriptions = {
8
- B1: 'Request Weight and Balance',
9
- B3: 'Request Departure Clearance',
10
- CD: 'Weight and Balance',
11
- CG: 'Request Pre-departure clearance, PDC',
12
- CM: 'Crew Scheduling',
13
- C3: 'Off Message',
14
- C4: 'Flight Dispatch',
15
- C5: 'Maintenance Message',
16
- C6: 'Customer Service',
17
- 10: 'PIREP',
18
- C11: 'International PIREP',
19
- DS: 'Late Message',
20
- D3: 'Holding Pattern Message',
21
- D6: 'From-To + Date',
22
- D7: 'From-To + Alternate + Time',
23
- EO: 'In Range',
24
- PW: 'Position Weather',
25
- RL: 'Request Release',
26
- R3: 'Request HOWGOZIT Message',
27
- R4: 'Request the Latest POSBD',
28
- TC: 'From-To Fuel',
29
- WB: 'From-To',
30
- W1: 'Request Weather for City',
31
- };
32
- qualifiers() {
33
- return {
34
- labels: ['5Z'],
35
- };
36
- }
37
- decode(message, options = {}) {
38
- const decodeResult = this.defaultResult;
39
- decodeResult.decoder.name = this.name;
40
- decodeResult.formatted.description = 'Airline Designated Downlink';
41
- const uaRegex = /^\/(?<type>\w+) (?<remainder>.+)/;
42
- let results = message.text.match(uaRegex);
43
- if (results && results.length >= 2) {
44
- // Successful match: United Airlines 5Z message
45
- const type = results.groups.type.split('/')[0];
46
- const { remainder } = results.groups;
47
- // console.log(results);
48
- // console.log(`DECODER: Matched 'United Airlines 5Z': type = ${type}, remainder = ${remainder}`);
49
- const typeDescription = this.descriptions[type] ? this.descriptions[type] : 'Unknown';
50
- decodeResult.raw.airline = 'United Airlines';
51
- decodeResult.formatted.items.push({
52
- type: 'airline',
53
- label: 'Airline',
54
- value: 'United Airlines',
55
- });
56
- decodeResult.raw.message_type = type;
57
- decodeResult.formatted.items.push({
58
- type: 'message_type',
59
- label: 'Message Type',
60
- value: `${typeDescription} (${type})`,
61
- });
62
- if (type === 'B3') {
63
- const rdcRegex = /^(?<from>\w\w\w)(?<to>\w\w\w) (?<unknown1>\d\d) R(?<runway>.+) G(?<unknown2>.+)$/; // eslint-disable-line max-len
64
- results = remainder.match(rdcRegex);
65
- if (results) {
66
- decodeResult.raw.origin = results.groups.from;
67
- decodeResult.formatted.items.push({
68
- type: 'origin',
69
- label: 'Origin',
70
- value: `${results.groups.from}`,
71
- });
72
- decodeResult.raw.destination = results.groups.to;
73
- decodeResult.formatted.items.push({
74
- type: 'destination',
75
- label: 'Destination',
76
- value: `${results.groups.to}`,
77
- });
78
- decodeResult.formatted.items.push({
79
- type: 'unknown1',
80
- label: 'Unknown Field 1',
81
- value: `${results.groups.unknown1}`,
82
- });
83
- decodeResult.raw.runway = results.groups.runway;
84
- decodeResult.formatted.items.push({
85
- type: 'runway',
86
- label: 'Runway',
87
- value: `${results.groups.runway}`,
88
- });
89
- decodeResult.formatted.items.push({
90
- type: 'unknown2',
91
- label: 'Unknown Field 2',
92
- value: `${results.groups.unknown2}`,
93
- });
94
- }
95
- else {
96
- if (options.debug) {
97
- console.log(`Decoder: Unkown 5Z RDC format: ${remainder}`);
98
- }
99
- }
100
- }
101
- else {
102
- decodeResult.remaining.text = remainder;
103
- }
104
- decodeResult.decoded = true;
105
- decodeResult.decoder.decodeLevel = 'partial';
106
- }
107
- else {
108
- // Unknown
109
- if (options.debug) {
110
- console.log(`Decoder: Unknown 5Z message: ${message.text}`);
111
- }
112
- decodeResult.remaining.text = message.text;
113
- decodeResult.decoded = false;
114
- decodeResult.decoder.decodeLevel = 'none';
115
- }
116
- return decodeResult;
117
- }
118
- }
119
- exports.Label_5Z = Label_5Z;
120
- exports.default = {};
@@ -1,12 +0,0 @@
1
- import { DecoderPlugin } from '../DecoderPlugin';
2
- export declare class Label_80 extends DecoderPlugin {
3
- name: string;
4
- descriptions: any;
5
- qualifiers(): {
6
- labels: string[];
7
- preambles: string[];
8
- };
9
- decode(message: any, options?: any): any;
10
- }
11
- declare const _default: {};
12
- export default _default;
@@ -1,203 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Label_80 = void 0;
4
- const DecoderPlugin_1 = require("../DecoderPlugin");
5
- // Airline Defined
6
- // 3N01 POSRPT
7
- class Label_80 extends DecoderPlugin_1.DecoderPlugin {
8
- name = 'label-80';
9
- descriptions = {
10
- ALT: 'Altitude',
11
- DWND: 'Wind Direction',
12
- ETA: 'Estimated Time of Arrival',
13
- FOB: 'Fuel on Board',
14
- FL: 'Flight Level',
15
- HDG: 'Heading',
16
- MCH: 'Aircraft Speed',
17
- NWYP: 'Next Waypoint',
18
- POS: 'Aircraft Position',
19
- SAT: 'Static Air Temperature',
20
- SWND: 'Window Speed',
21
- TAS: 'True Airspeed',
22
- WYP: 'Waypoint',
23
- };
24
- qualifiers() {
25
- return {
26
- labels: ['80'],
27
- preambles: ['3N01 POSRPT'],
28
- };
29
- }
30
- decode(message, options = {}) {
31
- const decodeResult = this.defaultResult;
32
- decodeResult.decoder.name = this.name;
33
- decodeResult.formatted.description = 'Airline Defined Position Report';
34
- const parts = message.text.split('\n');
35
- let posRptRegex = /^3N01 POSRPT \d\d\d\d\/\d\d (?<orig>\w+)\/(?<dest>\w+) \.(?<tail>[\w-]+)(\/(?<agate>.+) (?<sta>\w+:\w+))*/; // eslint-disable-line max-len
36
- let results = parts[0].match(posRptRegex);
37
- if (results && results.length > 0) {
38
- decodeResult.raw.origin = results.groups.orig;
39
- decodeResult.formatted.items.push({
40
- type: 'origin',
41
- code: 'ORG',
42
- label: 'Origin',
43
- value: `${results.groups.orig}`,
44
- });
45
- decodeResult.raw.destination = results.groups.dest;
46
- decodeResult.formatted.items.push({
47
- type: 'destination',
48
- code: 'DST',
49
- label: 'Destination',
50
- value: `${results.groups.dest}`,
51
- });
52
- decodeResult.raw.tail = results.groups.tail;
53
- decodeResult.formatted.items.push({
54
- type: 'tail',
55
- label: 'Tail',
56
- value: `${results.groups.tail}`,
57
- });
58
- if (results.groups.agate) {
59
- decodeResult.raw.arrival_gate = results.groups.agate;
60
- decodeResult.formatted.items.push({
61
- type: 'arrival_gate',
62
- code: 'ARG',
63
- label: 'Arrival Gate',
64
- value: `${results.groups.agate}`,
65
- });
66
- decodeResult.raw.scheduled_time_of_arrival = results.groups.sta;
67
- decodeResult.formatted.items.push({
68
- type: 'scheduled_time_of_arrival',
69
- code: 'STA',
70
- label: 'Scheduled Time of Arrival',
71
- value: `${results.groups.sta}`,
72
- });
73
- }
74
- posRptRegex = /\/(?<field>\w+)\s(?<value>[\w\+\-:\.]+)\s*/gi; // eslint-disable-line no-useless-escape
75
- // console.log('Regex:', posRptRegex);
76
- const remainingParts = parts.slice(1);
77
- // console.log("Remaining Parts:", remainingParts);
78
- for (const part of remainingParts) { // eslint-disable-line no-restricted-syntax
79
- // console.log('Part:', part);
80
- const matches = part.matchAll(posRptRegex);
81
- // console.log('Matches:', matches);
82
- for (const match of matches) { // eslint-disable-line no-restricted-syntax
83
- // console.log('Match:', match);
84
- switch (match.groups.field) {
85
- case 'ALT': {
86
- decodeResult.raw.altitude = match.groups.value;
87
- decodeResult.formatted.items.push({
88
- type: 'altitude',
89
- code: 'ALT',
90
- label: this.descriptions[match.groups.field],
91
- value: `${decodeResult.raw.altitude} feet`,
92
- });
93
- break;
94
- }
95
- case 'DWND': {
96
- decodeResult.raw.wind_direction = Number(match.groups.value);
97
- decodeResult.formatted.items.push({
98
- type: 'wind_direction',
99
- code: 'DWND',
100
- label: this.descriptions[match.groups.field],
101
- value: decodeResult.raw.wind_direction,
102
- });
103
- break;
104
- }
105
- case 'FL': {
106
- decodeResult.raw.flight_level = match.groups.value;
107
- decodeResult.formatted.items.push({
108
- type: 'flight_level',
109
- code: 'FL',
110
- label: this.descriptions[match.groups.field],
111
- value: decodeResult.raw.flight_level,
112
- });
113
- break;
114
- }
115
- case 'FOB': {
116
- decodeResult.raw.fuel_on_board = match.groups.value;
117
- decodeResult.formatted.items.push({
118
- type: 'fuel_on_board',
119
- code: 'FOB',
120
- label: this.descriptions[match.groups.field],
121
- value: decodeResult.raw.fuel_on_board,
122
- });
123
- break;
124
- }
125
- case 'HDG': {
126
- decodeResult.raw.heading = Number(match.groups.value);
127
- decodeResult.formatted.items.push({
128
- type: 'heading',
129
- code: 'HDG',
130
- label: this.descriptions[match.groups.field],
131
- value: decodeResult.raw.heading,
132
- });
133
- break;
134
- }
135
- case 'MCH': {
136
- decodeResult.raw.mach = match.groups.value / 1000;
137
- decodeResult.formatted.items.push({
138
- type: 'mach',
139
- code: 'MCH',
140
- label: this.descriptions[match.groups.field],
141
- value: `${decodeResult.raw.mach} Mach`,
142
- });
143
- break;
144
- }
145
- case 'NWYP': {
146
- decodeResult.raw.next_waypoint = match.groups.value;
147
- decodeResult.formatted.items.push({
148
- type: 'next_waypoint',
149
- code: 'NWYP',
150
- label: this.descriptions[match.groups.field],
151
- value: decodeResult.raw.next_waypoint,
152
- });
153
- break;
154
- }
155
- case 'POS': {
156
- const posRegex = /^(?<latd>[NS])(?<lat>.+)(?<lngd>[EW])(?<lng>.+)/;
157
- const posResult = match.groups.value.match(posRegex);
158
- const latitude = (Number(posResult.groups.lat) / 100) * (posResult.groups.lngd === 'S' ? -1 : 1);
159
- const longitude = (Number(posResult.groups.lng) / 100) * (posResult.groups.lngd === 'W' ? -1 : 1);
160
- decodeResult.raw.aircraft_position = {
161
- latitude,
162
- longitude,
163
- };
164
- decodeResult.formatted.items.push({
165
- type: 'aircraft_position',
166
- code: 'POS',
167
- label: this.descriptions[match.groups.field],
168
- value: `${(Number(posResult.groups.lat) / 100).toPrecision(5)} ${posResult.groups.latd}, ${(Number(posResult.groups.lng) / 100).toPrecision(5)} ${posResult.groups.lngd}`,
169
- });
170
- break;
171
- }
172
- case 'SWND': {
173
- decodeResult.raw.wind_speed = Number(match.groups.value);
174
- decodeResult.formatted.items.push({
175
- type: 'wind_speed',
176
- code: 'SWND',
177
- label: this.descriptions[match.groups.field],
178
- value: decodeResult.raw.wind_speed,
179
- });
180
- break;
181
- }
182
- default: {
183
- if (match.groups.field != undefined) {
184
- const description = this.descriptions[match.groups.field] ? this.descriptions[match.groups.field] : 'Unknown';
185
- decodeResult.formatted.items.push({
186
- type: match.groups.field,
187
- code: match.groups.field,
188
- label: description || `Unknown (${match.groups.field})`,
189
- value: `${match.groups.value}`,
190
- });
191
- }
192
- }
193
- }
194
- }
195
- }
196
- decodeResult.decoded = true;
197
- decodeResult.decodeLevel = 'partial';
198
- }
199
- return decodeResult;
200
- }
201
- }
202
- exports.Label_80 = Label_80;
203
- exports.default = {};
@@ -1,10 +0,0 @@
1
- import { DecoderPlugin } from '../DecoderPlugin';
2
- export declare class Label_8E extends DecoderPlugin {
3
- name: string;
4
- qualifiers(): {
5
- labels: string[];
6
- };
7
- decode(message: any, options?: any): any;
8
- }
9
- declare const _default: {};
10
- export default _default;
@@ -1,48 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Label_8E = void 0;
4
- const DateTimeUtils_1 = require("../DateTimeUtils");
5
- const DecoderPlugin_1 = require("../DecoderPlugin");
6
- // ETA
7
- class Label_8E extends DecoderPlugin_1.DecoderPlugin {
8
- name = 'label-8e';
9
- qualifiers() {
10
- return {
11
- labels: ["8E"],
12
- };
13
- }
14
- decode(message, options = {}) {
15
- const decodeResult = this.defaultResult;
16
- decodeResult.decoder.name = this.name;
17
- decodeResult.formatted.description = 'ETA Report';
18
- decodeResult.message = message;
19
- // Style: EGSS,1618
20
- // Match: arrival_icao,arrival_eta
21
- const regex = /^(?<arrival_icao>\w{4}),(?<arrival_eta>\d{4})$/;
22
- const results = message.text.match(regex);
23
- if (results) {
24
- if (options.debug) {
25
- console.log(`Label 8E ETA: groups`);
26
- console.log(results.groups);
27
- }
28
- decodeResult.formatted.items.push({
29
- type: 'eta',
30
- code: 'ETA',
31
- label: 'Estimated Time of Arrival',
32
- value: DateTimeUtils_1.DateTimeUtils.UTCToString(results.groups.arrival_eta),
33
- });
34
- decodeResult.raw.arrival_icao = results.groups.arrival_icao;
35
- decodeResult.formatted.items.push({
36
- type: 'destination',
37
- code: 'DST',
38
- label: 'Destination',
39
- value: decodeResult.raw.arrival_icao,
40
- });
41
- }
42
- decodeResult.decoded = true;
43
- decodeResult.decoder.decodeLevel = 'full';
44
- return decodeResult;
45
- }
46
- }
47
- exports.Label_8E = Label_8E;
48
- exports.default = {};
@@ -1 +0,0 @@
1
- export {};