@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,81 +0,0 @@
1
- import { DecoderPlugin } from '../DecoderPlugin';
2
-
3
- // In Air Report
4
- export class Label_44_ETA extends DecoderPlugin {
5
- name = 'label-44-eta';
6
-
7
- qualifiers() { // eslint-disable-line class-methods-use-this
8
- return {
9
- labels: ['44'],
10
- preambles: ['00ETA01', '00ETA02', '00ETA03', 'ETA01', 'ETA02', 'ETA03'],
11
- };
12
- }
13
-
14
- decode(message: any, options: any = {}) : any {
15
- const decodeResult: any = this.defaultResult;
16
- decodeResult.decoder.name = this.name;
17
- decodeResult.formatted.description = 'ETA Report';
18
- decodeResult.message = message;
19
-
20
- // Style: IN02,N38338W121179,KMHR,KPDX,0806,2355,005.1
21
- // Match: IN02,coords,departure_icao,arrival_icao,current_date,current_time,fuel_in_tons
22
- const regex = /^IN02,(?<unsplit_coords>.*),(?<departure_icao>.*),(?<arrival_icao>.*),(?<current_date>.*),(?<current_time>.*),(?<fuel_in_tons>.*)$/;
23
- const results = message.text.match(regex);
24
- if (results) {
25
- if (options.debug) {
26
- console.log(`Label 44 ETA Report: groups`);
27
- console.log(results.groups);
28
- }
29
-
30
- const coordsRegex = /(?<lac>[NS])(?<la>.+)\s*(?<lnc>[EW])(?<ln>.+)/;
31
- const coordsResults = results.groups.unsplit_coords.match(coordsRegex);
32
-
33
- decodeResult.raw.latitude_direction = coordsResults.groups.lac;
34
- decodeResult.raw.latitude = Number(coordsResults.groups.la) / 1000;
35
- decodeResult.raw.longitude_direction = coordsResults.groups.lnc;
36
- decodeResult.raw.longitude = Number(coordsResults.groups.ln) / 1000;
37
- decodeResult.raw.departure_icao = results.groups.departure_icao;
38
- decodeResult.raw.arrival_icao = results.groups.arrival_icao;
39
- decodeResult.raw.current_time = Date.parse(
40
- new Date().getFullYear() + "-" +
41
- results.groups.current_date.substr(0, 2) + "-" +
42
- results.groups.current_date.substr(2, 2) + "T" +
43
- results.groups.current_time.substr(0, 2) + ":" +
44
- results.groups.current_time.substr(2, 2) + ":00Z"
45
- );
46
-
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
-
51
- decodeResult.formatted.items.push({
52
- type: 'aircraft_position',
53
- code: 'POS',
54
- label: 'Aircraft Position',
55
- value: `${decodeResult.raw.latitude} ${decodeResult.raw.latitude_direction}, ${decodeResult.raw.longitude} ${decodeResult.raw.longitude_direction}`,
56
- });
57
-
58
- decodeResult.formatted.items.push({
59
- type: 'origin',
60
- code: 'ORG',
61
- label: 'Origin',
62
- value: decodeResult.raw.departure_icao,
63
- });
64
-
65
- decodeResult.formatted.items.push({
66
- type: 'destination',
67
- code: 'DST',
68
- label: 'Destination',
69
- value: decodeResult.raw.arrival_icao,
70
- });
71
-
72
- }
73
-
74
- decodeResult.decoded = true;
75
- decodeResult.decoder.decodeLevel = 'full';
76
-
77
- return decodeResult;
78
- }
79
- }
80
-
81
- export default {};
@@ -1,81 +0,0 @@
1
- import { DecoderPlugin } from '../DecoderPlugin';
2
-
3
- // In Air Report
4
- export class Label_44_IN extends DecoderPlugin {
5
- name = 'label-44-in';
6
-
7
- qualifiers() { // eslint-disable-line class-methods-use-this
8
- return {
9
- labels: ['44'],
10
- preambles: ['00IN01', '00IN02', '00IN03', 'IN01', 'IN02', 'IN03'],
11
- };
12
- }
13
-
14
- decode(message: any, options: any = {}) : any {
15
- const decodeResult: any = this.defaultResult;
16
- decodeResult.decoder.name = this.name;
17
- decodeResult.formatted.description = 'In Air Report';
18
- decodeResult.message = message;
19
-
20
- // Style: IN02,N38338W121179,KMHR,KPDX,0806,2355,005.1
21
- // Match: IN02,coords,departure_icao,arrival_icao,current_date,current_time,fuel_in_tons
22
- const regex = /^IN02,(?<unsplit_coords>.*),(?<departure_icao>.*),(?<arrival_icao>.*),(?<current_date>.*),(?<current_time>.*),(?<fuel_in_tons>.*)$/;
23
- const results = message.text.match(regex);
24
- if (results) {
25
- if (options.debug) {
26
- console.log(`Label 44 In Air Report: groups`);
27
- console.log(results.groups);
28
- }
29
-
30
- const coordsRegex = /(?<lac>[NS])(?<la>.+)\s*(?<lnc>[EW])(?<ln>.+)/;
31
- const coordsResults = results.groups.unsplit_coords.match(coordsRegex);
32
-
33
- decodeResult.raw.latitude_direction = coordsResults.groups.lac;
34
- decodeResult.raw.latitude = Number(coordsResults.groups.la) / 1000;
35
- decodeResult.raw.longitude_direction = coordsResults.groups.lnc;
36
- decodeResult.raw.longitude = Number(coordsResults.groups.ln) / 1000;
37
- decodeResult.raw.departure_icao = results.groups.departure_icao;
38
- decodeResult.raw.arrival_icao = results.groups.arrival_icao;
39
- decodeResult.raw.current_time = Date.parse(
40
- new Date().getFullYear() + "-" +
41
- results.groups.current_date.substr(0, 2) + "-" +
42
- results.groups.current_date.substr(2, 2) + "T" +
43
- results.groups.current_time.substr(0, 2) + ":" +
44
- results.groups.current_time.substr(2, 2) + ":00Z"
45
- );
46
-
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
-
51
- decodeResult.formatted.items.push({
52
- type: 'aircraft_position',
53
- code: 'POS',
54
- label: 'Aircraft Position',
55
- value: `${decodeResult.raw.latitude} ${decodeResult.raw.latitude_direction}, ${decodeResult.raw.longitude} ${decodeResult.raw.longitude_direction}`,
56
- });
57
-
58
- decodeResult.formatted.items.push({
59
- type: 'origin',
60
- code: 'ORG',
61
- label: 'Origin',
62
- value: decodeResult.raw.departure_icao,
63
- });
64
-
65
- decodeResult.formatted.items.push({
66
- type: 'destination',
67
- code: 'DST',
68
- label: 'Destination',
69
- value: decodeResult.raw.arrival_icao,
70
- });
71
-
72
- }
73
-
74
- decodeResult.decoded = true;
75
- decodeResult.decoder.decodeLevel = 'full';
76
-
77
- return decodeResult;
78
- }
79
- }
80
-
81
- export default {};
@@ -1,88 +0,0 @@
1
- import { DecoderPlugin } from '../DecoderPlugin';
2
-
3
- // Off Runway Report
4
- export class Label_44_OFF extends DecoderPlugin {
5
- name = 'label-44-off';
6
-
7
- qualifiers() { // eslint-disable-line class-methods-use-this
8
- return {
9
- labels: ['44'],
10
- preambles: ['00OFF01', '00OFF02', '00OFF03', 'OFF01', 'OFF02', 'OFF03'],
11
- };
12
- }
13
-
14
- decode(message: any, options: any = {}) : any {
15
- const decodeResult: any = this.defaultResult;
16
- decodeResult.decoder.name = this.name;
17
- decodeResult.formatted.description = 'Off Runway Report';
18
- decodeResult.message = message;
19
-
20
- // Style: OFF02,N38334W121176,KMHR,KPDX,0807,0014,0123,004.9
21
- // Match: OFF02,coords,departure_icao,arrival_icao,current_date,current_time,eta_time,fuel_in_tons
22
- const regex = /^ON02,(?<unsplit_coords>.*),(?<departure_icao>.*),(?<arrival_icao>.*),(?<current_date>.*),(?<current_time>.*),(?<eta_time>.*),(?<fuel_in_tons>.*)$/;
23
- const results = message.text.match(regex);
24
- if (results) {
25
- if (options.debug) {
26
- console.log(`Label 44 Off Runway Report: groups`);
27
- console.log(results.groups);
28
- }
29
-
30
- const coordsRegex = /(?<lac>[NS])(?<la>.+)\s*(?<lnc>[EW])(?<ln>.+)/;
31
- const coordsResults = results.groups.unsplit_coords.match(coordsRegex);
32
-
33
- decodeResult.raw.latitude_direction = coordsResults.groups.lac;
34
- decodeResult.raw.latitude = Number(coordsResults.groups.la) / 1000;
35
- decodeResult.raw.longitude_direction = coordsResults.groups.lnc;
36
- decodeResult.raw.longitude = Number(coordsResults.groups.ln) / 1000;
37
- decodeResult.raw.departure_icao = results.groups.departure_icao;
38
- decodeResult.raw.arrival_icao = results.groups.arrival_icao;
39
- decodeResult.raw.current_time = Date.parse(
40
- new Date().getFullYear() + "-" +
41
- results.groups.current_date.substr(0, 2) + "-" +
42
- results.groups.current_date.substr(2, 2) + "T" +
43
- results.groups.current_time.substr(0, 2) + ":" +
44
- results.groups.current_time.substr(2, 2) + ":00Z"
45
- );
46
- decodeResult.raw.eta_time = Date.parse(
47
- new Date().getFullYear() + "-" +
48
- results.groups.current_date.substr(0, 2) + "-" +
49
- results.groups.current_date.substr(2, 2) + "T" +
50
- results.groups.eta_time.substr(0, 2) + ":" +
51
- results.groups.eta_time.substr(2, 2) + ":00Z"
52
- );
53
-
54
- if (results.groups.fuel_in_tons != '***' && results.groups.fuel_in_tons != '****') {
55
- decodeResult.raw.fuel_in_tons = Number(results.groups.fuel_in_tons);
56
- }
57
-
58
- decodeResult.formatted.items.push({
59
- type: 'aircraft_position',
60
- code: 'POS',
61
- label: 'Aircraft Position',
62
- value: `${decodeResult.raw.latitude} ${decodeResult.raw.latitude_direction}, ${decodeResult.raw.longitude} ${decodeResult.raw.longitude_direction}`,
63
- });
64
-
65
- decodeResult.formatted.items.push({
66
- type: 'origin',
67
- code: 'ORG',
68
- label: 'Origin',
69
- value: decodeResult.raw.departure_icao,
70
- });
71
-
72
- decodeResult.formatted.items.push({
73
- type: 'destination',
74
- code: 'DST',
75
- label: 'Destination',
76
- value: decodeResult.raw.arrival_icao,
77
- });
78
-
79
- }
80
-
81
- decodeResult.decoded = true;
82
- decodeResult.decoder.decodeLevel = 'full';
83
-
84
- return decodeResult;
85
- }
86
- }
87
-
88
- export default {};
@@ -1,81 +0,0 @@
1
- import { DecoderPlugin } from '../DecoderPlugin';
2
-
3
- // On Runway Report
4
- export class Label_44_ON extends DecoderPlugin {
5
- name = 'label-44-on';
6
-
7
- qualifiers() { // eslint-disable-line class-methods-use-this
8
- return {
9
- labels: ['44'],
10
- preambles: ['00ON01', '00ON02', '00ON03', 'ON01', 'ON02', 'ON03'],
11
- };
12
- }
13
-
14
- decode(message: any, options: any = {}) : any {
15
- const decodeResult: any = this.defaultResult;
16
- decodeResult.decoder.name = this.name;
17
- decodeResult.formatted.description = 'On Runway Report';
18
- decodeResult.message = message;
19
-
20
- // Style: ON02,N38333W121178,KRNO,KMHR,0806,2350,005.2
21
- // Match: ON02,coords,departure_icao,arrival_icao,current_date,current_time,fuel_in_tons
22
- const regex = /^ON02,(?<unsplit_coords>.*),(?<departure_icao>.*),(?<arrival_icao>.*),(?<current_date>.*),(?<current_time>.*),(?<fuel_in_tons>.*)$/;
23
- const results = message.text.match(regex);
24
- if (results) {
25
- if (options.debug) {
26
- console.log(`Label 44 On Runway Report: groups`);
27
- console.log(results.groups);
28
- }
29
-
30
- const coordsRegex = /(?<lac>[NS])(?<la>.+)\s*(?<lnc>[EW])(?<ln>.+)/;
31
- const coordsResults = results.groups.unsplit_coords.match(coordsRegex);
32
-
33
- decodeResult.raw.latitude_direction = coordsResults.groups.lac;
34
- decodeResult.raw.latitude = Number(coordsResults.groups.la) / 1000;
35
- decodeResult.raw.longitude_direction = coordsResults.groups.lnc;
36
- decodeResult.raw.longitude = Number(coordsResults.groups.ln) / 1000;
37
- decodeResult.raw.departure_icao = results.groups.departure_icao;
38
- decodeResult.raw.arrival_icao = results.groups.arrival_icao;
39
- decodeResult.raw.current_time = Date.parse(
40
- new Date().getFullYear() + "-" +
41
- results.groups.current_date.substr(0, 2) + "-" +
42
- results.groups.current_date.substr(2, 2) + "T" +
43
- results.groups.current_time.substr(0, 2) + ":" +
44
- results.groups.current_time.substr(2, 2) + ":00Z"
45
- );
46
-
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
-
51
- decodeResult.formatted.items.push({
52
- type: 'aircraft_position',
53
- code: 'POS',
54
- label: 'Aircraft Position',
55
- value: `${decodeResult.raw.latitude} ${decodeResult.raw.latitude_direction}, ${decodeResult.raw.longitude} ${decodeResult.raw.longitude_direction}`,
56
- });
57
-
58
- decodeResult.formatted.items.push({
59
- type: 'origin',
60
- code: 'ORG',
61
- label: 'Origin',
62
- value: decodeResult.raw.departure_icao,
63
- });
64
-
65
- decodeResult.formatted.items.push({
66
- type: 'destination',
67
- code: 'DST',
68
- label: 'Destination',
69
- value: decodeResult.raw.arrival_icao,
70
- });
71
-
72
- }
73
-
74
- decodeResult.decoded = true;
75
- decodeResult.decoder.decodeLevel = 'full';
76
-
77
- return decodeResult;
78
- }
79
- }
80
-
81
- export default {};
@@ -1,96 +0,0 @@
1
- import { DecoderPlugin } from '../DecoderPlugin';
2
-
3
- // General Aviation Position Report
4
- export class Label_44_POS extends DecoderPlugin {
5
- name = 'label-44-pos';
6
-
7
- qualifiers() { // eslint-disable-line class-methods-use-this
8
- return {
9
- labels: ['44'],
10
- preambles: ['00POS01', '00POS02', '00POS03', 'POS01', 'POS02', 'POS03'],
11
- };
12
- }
13
-
14
- decode(message: any, options: any = {}) : any {
15
- const decodeResult: any = this.defaultResult;
16
- decodeResult.decoder.name = this.name;
17
- decodeResult.formatted.description = 'Position Report';
18
- decodeResult.message = message;
19
-
20
- // Style: POS02,N38338W121179,GRD,KMHR,KPDX,0807,0003,0112,005.1
21
- // Match: POS02,coords,flight_level_or_ground,departure_icao,arrival_icao,current_date,current_time,eta_time,unknown
22
- const regex = /^POS02,(?<unsplit_coords>.*),(?<flight_level_or_ground>.*),(?<departure_icao>.*),(?<arrival_icao>.*),(?<current_date>.*),(?<current_time>.*),(?<eta_time>.*),(?<fuel_in_tons>.*)$/;
23
- const results = message.text.match(regex);
24
- if (results) {
25
- if (options.debug) {
26
- console.log(`Label 44 Position Report: groups`);
27
- console.log(results.groups);
28
- }
29
-
30
- const coordsRegex = /(?<lac>[NS])(?<la>.+)\s*(?<lnc>[EW])(?<ln>.+)/;
31
- const coordsResults = results.groups.unsplit_coords.match(coordsRegex);
32
-
33
- decodeResult.raw.latitude_direction = coordsResults.groups.lac;
34
- decodeResult.raw.latitude = Number(coordsResults.groups.la) / 1000;
35
- decodeResult.raw.longitude_direction = coordsResults.groups.lnc;
36
- decodeResult.raw.longitude = Number(coordsResults.groups.ln) / 1000;
37
- 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);
38
- decodeResult.raw.departure_icao = results.groups.departure_icao;
39
- decodeResult.raw.arrival_icao = results.groups.arrival_icao;
40
- decodeResult.raw.current_time = Date.parse(
41
- new Date().getFullYear() + "-" +
42
- results.groups.current_date.substr(0, 2) + "-" +
43
- results.groups.current_date.substr(2, 2) + "T" +
44
- results.groups.current_time.substr(0, 2) + ":" +
45
- results.groups.current_time.substr(2, 2) + ":00Z"
46
- );
47
- decodeResult.raw.eta_time = Date.parse(
48
- new Date().getFullYear() + "-" +
49
- results.groups.current_date.substr(0, 2) + "-" +
50
- results.groups.current_date.substr(2, 2) + "T" +
51
- results.groups.eta_time.substr(0, 2) + ":" +
52
- results.groups.eta_time.substr(2, 2) + ":00Z"
53
- );
54
-
55
- if (results.groups.fuel_in_tons != '***' && results.groups.fuel_in_tons != '****') {
56
- decodeResult.raw.fuel_in_tons = Number(results.groups.fuel_in_tons);
57
- }
58
-
59
- decodeResult.formatted.items.push({
60
- type: 'aircraft_position',
61
- code: 'POS',
62
- label: 'Aircraft Position',
63
- value: `${decodeResult.raw.latitude} ${decodeResult.raw.latitude_direction}, ${decodeResult.raw.longitude} ${decodeResult.raw.longitude_direction}`,
64
- });
65
-
66
- decodeResult.formatted.items.push({
67
- type: 'origin',
68
- code: 'ORG',
69
- label: 'Origin',
70
- value: decodeResult.raw.departure_icao,
71
- });
72
-
73
- decodeResult.formatted.items.push({
74
- type: 'destination',
75
- code: 'DST',
76
- label: 'Destination',
77
- value: decodeResult.raw.arrival_icao,
78
- });
79
-
80
- decodeResult.formatted.items.push({
81
- type: 'flight_level',
82
- code: 'FL',
83
- label: 'Flight Level',
84
- value: decodeResult.raw.flight_level,
85
- });
86
-
87
- }
88
-
89
- decodeResult.decoded = true;
90
- decodeResult.decoder.decodeLevel = 'full';
91
-
92
- return decodeResult;
93
- }
94
- }
95
-
96
- export default {};
@@ -1,125 +0,0 @@
1
- import { DecoderPlugin } from '../DecoderPlugin';
2
-
3
- export class Label_5Z extends DecoderPlugin {
4
- name = 'label-5z';
5
-
6
- descriptions: any = {
7
- B1: 'Request Weight and Balance',
8
- B3: 'Request Departure Clearance',
9
- CD: 'Weight and Balance',
10
- CG: 'Request Pre-departure clearance, PDC',
11
- CM: 'Crew Scheduling',
12
- C3: 'Off Message',
13
- C4: 'Flight Dispatch',
14
- C5: 'Maintenance Message',
15
- C6: 'Customer Service',
16
- 10: 'PIREP',
17
- C11: 'International PIREP',
18
- DS: 'Late Message',
19
- D3: 'Holding Pattern Message',
20
- D6: 'From-To + Date',
21
- D7: 'From-To + Alternate + Time',
22
- EO: 'In Range',
23
- PW: 'Position Weather',
24
- RL: 'Request Release',
25
- R3: 'Request HOWGOZIT Message',
26
- R4: 'Request the Latest POSBD',
27
- TC: 'From-To Fuel',
28
- WB: 'From-To',
29
- W1: 'Request Weather for City',
30
- };
31
-
32
- qualifiers() { // eslint-disable-line class-methods-use-this
33
- return {
34
- labels: ['5Z'],
35
- };
36
- }
37
-
38
- decode(message: any, options: any = {}) : any {
39
- const decodeResult: any = this.defaultResult;
40
- decodeResult.decoder.name = this.name;
41
-
42
- decodeResult.formatted.description = 'Airline Designated Downlink';
43
-
44
- const uaRegex = /^\/(?<type>\w+) (?<remainder>.+)/;
45
- let results = message.text.match(uaRegex);
46
-
47
- if (results && results.length >= 2) {
48
- // Successful match: United Airlines 5Z message
49
- const type : string = results.groups.type.split('/')[0];
50
- const { remainder } = results.groups;
51
- // console.log(results);
52
- // console.log(`DECODER: Matched 'United Airlines 5Z': type = ${type}, remainder = ${remainder}`);
53
-
54
- const typeDescription: string = this.descriptions[type] ? this.descriptions[type] : 'Unknown';
55
- decodeResult.raw.airline = 'United Airlines';
56
- decodeResult.formatted.items.push({
57
- type: 'airline',
58
- label: 'Airline',
59
- value: 'United Airlines',
60
- });
61
- decodeResult.raw.message_type = type;
62
- decodeResult.formatted.items.push({
63
- type: 'message_type',
64
- label: 'Message Type',
65
- value: `${typeDescription} (${type})`,
66
- });
67
-
68
- if (type === 'B3') {
69
- const rdcRegex = /^(?<from>\w\w\w)(?<to>\w\w\w) (?<unknown1>\d\d) R(?<runway>.+) G(?<unknown2>.+)$/; // eslint-disable-line max-len
70
- results = remainder.match(rdcRegex);
71
-
72
- if (results) {
73
- decodeResult.raw.origin = results.groups.from;
74
- decodeResult.formatted.items.push({
75
- type: 'origin',
76
- label: 'Origin',
77
- value: `${results.groups.from}`,
78
- });
79
- decodeResult.raw.destination = results.groups.to;
80
- decodeResult.formatted.items.push({
81
- type: 'destination',
82
- label: 'Destination',
83
- value: `${results.groups.to}`,
84
- });
85
- decodeResult.formatted.items.push({
86
- type: 'unknown1',
87
- label: 'Unknown Field 1',
88
- value: `${results.groups.unknown1}`,
89
- });
90
- decodeResult.raw.runway = results.groups.runway;
91
- decodeResult.formatted.items.push({
92
- type: 'runway',
93
- label: 'Runway',
94
- value: `${results.groups.runway}`,
95
- });
96
- decodeResult.formatted.items.push({
97
- type: 'unknown2',
98
- label: 'Unknown Field 2',
99
- value: `${results.groups.unknown2}`,
100
- });
101
- } else {
102
- if (options.debug) {
103
- console.log(`Decoder: Unkown 5Z RDC format: ${remainder}`);
104
- }
105
- }
106
- } else {
107
- decodeResult.remaining.text = remainder;
108
- }
109
- decodeResult.decoded = true;
110
- decodeResult.decoder.decodeLevel = 'partial';
111
- } else {
112
- // Unknown
113
- if (options.debug) {
114
- console.log(`Decoder: Unknown 5Z message: ${message.text}`);
115
- }
116
- decodeResult.remaining.text = message.text;
117
- decodeResult.decoded = false;
118
- decodeResult.decoder.decodeLevel = 'none';
119
- }
120
-
121
- return decodeResult;
122
- }
123
- }
124
-
125
- export default {};